Skip to content

Commit 1557c83

Browse files
committed
Bug fixes from empty units_ in PE_Functions
1 parent f986e83 commit 1557c83

File tree

3 files changed

+33
-18
lines changed

3 files changed

+33
-18
lines changed

src/1_algebra.jl

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -201,27 +201,33 @@ end
201201
Any two MultivariateFunctions can be multiplied to form a MultivariateFunction reflecting the product.
202202
"""
203203
function *(f1::PE_Function,f2::PE_Function)
204-
f1_bases = get_bases(f1)
205-
f2_bases = get_bases(f2)
206-
min_bases = merge(min, f1_bases, f2_bases)
207-
f1_rebase = change_base(f1, min_bases)
208-
f2_rebase = change_base(f2, min_bases)
209-
L1 = length(f1_rebase)
210-
L2 = length(f2_rebase)
211-
if (L1 == 1) & (L2 == 1)
212-
f1_ = f1_rebase[1]
213-
f2_ = f2_rebase[1]
214-
new_mult = f1_.multiplier_ * f2_.multiplier_
215-
return PE_Function(new_mult, merge(*, f1_.units_, f2_.units_ ))
204+
if (length(f1.units_) == 0)
205+
return f1.multiplier_ * f2
206+
elseif (length(f2.units_) == 0)
207+
return f2.multiplier_ * f1
216208
else
217-
PEs = Array{PE_Function,1}()
218-
for f in f1_rebase
219-
for g in f2_rebase
220-
append!(PEs, [f * g])
209+
f1_bases = get_bases(f1)
210+
f2_bases = get_bases(f2)
211+
min_bases = merge(min, f1_bases, f2_bases)
212+
f1_rebase = change_base(f1, min_bases)
213+
f2_rebase = change_base(f2, min_bases)
214+
L1 = length(f1_rebase)
215+
L2 = length(f2_rebase)
216+
if (L1 == 1) & (L2 == 1)
217+
f1_ = f1_rebase[1]
218+
f2_ = f2_rebase[1]
219+
new_mult = f1_.multiplier_ * f2_.multiplier_
220+
return PE_Function(new_mult, merge(*, f1_.units_, f2_.units_ ))
221+
else
222+
PEs = Array{PE_Function,1}()
223+
for f in f1_rebase
224+
for g in f2_rebase
225+
append!(PEs, [f * g])
226+
end
221227
end
222228
end
229+
return Sum_Of_Functions(PEs)
223230
end
224-
return Sum_Of_Functions(PEs)
225231
end
226232

227233
function *(f1::PE_Function, f2::Sum_Of_Functions)

src/2_calculus.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,10 @@ function integral(f::Sum_Of_Piecewise_Functions, limits::Dict{Symbol,Tuple{Float
436436
end
437437

438438
function integral(f::MultivariateFunction, left_limit::Float64, right_limit::Float64)
439-
if underlying_dimensions(f) == Set([default_symbol])
439+
underlyingDims = underlying_dimensions(f)
440+
if length(underlyingDims) == 0
441+
return f.multiplier_ * (right_limit-left_limit)
442+
elseif underlyingDims == Set([default_symbol])
440443
limits_ = Dict{Symbol,Tuple{Float64,Float64}}(default_symbol => Tuple{Float64,Float64}((left_limit,right_limit)))
441444
return integral(f, limits_)
442445
else

test/1_test_univariate.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,9 @@ abs(evaluate(test_func, inp) - evaluate(converted_test_func, rescaled_input)) <
189189
sumFunc = test_func + pe_exp_quad + pe_exp
190190
converted_sumFunc = convert_to_linearly_rescale_inputs(sumFunc, alpha, beta)
191191
abs(evaluate(sumFunc, inp) - evaluate(converted_sumFunc, rescaled_input)) < 1e-10
192+
193+
# Multiplications with no units.
194+
n1 = PE_Function(5.0)
195+
n2 = PE_Function(12.0)
196+
abs((n1 * n2).multiplier_ - 60.0) < tol
197+
abs((n1 * pe_lin).multiplier_ - 10.0) < tol

0 commit comments

Comments
 (0)