@@ -94,26 +94,25 @@ new_sol = solve(new_prob, Tsit5())
94
94
95
95
"""
96
96
function change_of_variables (
97
- sys:: System , iv, forward_subs, backward_subs;
98
- simplify= true , t0= missing , isSDE= false
97
+ sys:: System , iv, forward_subs, backward_subs;
98
+ simplify = true , t0 = missing , isSDE = false
99
99
)
100
100
t = iv
101
101
102
102
old_vars = first .(backward_subs)
103
103
new_vars = last .(forward_subs)
104
-
104
+
105
105
# use: f = Y(t, X)
106
106
# use: dY = (∂f/∂t + μ∂f/∂x + (1/2)*σ^2*∂2f/∂x2)dt + σ∂f/∂xdW
107
107
old_eqs = equations (sys)
108
108
neqs = get_noise_eqs (sys)
109
109
brownvars = brownians (sys)
110
-
111
-
110
+
112
111
if neqs === nothing && length (brownvars) === 0
113
112
neqs = ones (1 , length (old_eqs))
114
113
elseif neqs != = nothing
115
114
isSDE = true
116
- neqs = [neqs[i,:] for i in 1 : size (neqs,1 )]
115
+ neqs = [neqs[i, :] for i in 1 : size (neqs, 1 )]
117
116
118
117
brownvars = map ([Symbol (:B , :_ , i) for i in 1 : length (neqs[1 ])]) do name
119
118
unwrap (only (@brownians $ name))
@@ -135,9 +134,10 @@ function change_of_variables(
135
134
end
136
135
137
136
# df/dt = ∂f/∂x dx/dt + ∂f/∂t
138
- dfdt = Symbolics. derivative ( first .(forward_subs), t )
139
- ∂f∂x = [Symbolics. derivative ( first (f_sub), old_var ) for (f_sub, old_var) in zip (forward_subs, old_vars)]
140
- ∂2f∂x2 = Symbolics. derivative .( ∂f∂x, old_vars )
137
+ dfdt = Symbolics. derivative (first .(forward_subs), t)
138
+ ∂f∂x = [Symbolics. derivative (first (f_sub), old_var)
139
+ for (f_sub, old_var) in zip (forward_subs, old_vars)]
140
+ ∂2f∂x2 = Symbolics. derivative .(∂f∂x, old_vars)
141
141
new_eqs = Equation[]
142
142
143
143
for (new_var, ex, first, second) in zip (new_vars, dfdt, ∂f∂x, ∂2f∂x2)
@@ -154,7 +154,7 @@ function change_of_variables(
154
154
ex = substitute (ex, Dict (forward_subs))
155
155
ex = substitute (ex, Dict (backward_subs))
156
156
if simplify
157
- ex = Symbolics. simplify (ex, expand= true )
157
+ ex = Symbolics. simplify (ex, expand = true )
158
158
end
159
159
push! (new_eqs, Differential (t)(new_var) ~ ex)
160
160
end
@@ -174,10 +174,11 @@ function change_of_variables(
174
174
end
175
175
end
176
176
177
- @named new_sys = System (vcat (new_eqs, first .(backward_subs) .~ last .(backward_subs)), t;
178
- defaults= new_defs,
179
- observed= observed (sys)
180
- )
177
+ @named new_sys = System (
178
+ vcat (new_eqs, first .(backward_subs) .~ last .(backward_subs)), t;
179
+ defaults = new_defs,
180
+ observed = observed (sys)
181
+ )
181
182
if simplify
182
183
return mtkcompile (new_sys)
183
184
end
@@ -570,7 +571,8 @@ All accumulation variables have a default of zero.
570
571
function add_accumulations (sys:: System , vars:: Vector{<:Pair} )
571
572
eqs = get_eqs (sys)
572
573
avars = map (first, vars)
573
- if (ints = intersect (avars, unknowns (sys)); ! isempty (ints))
574
+ ints = intersect (avars, unknowns (sys))
575
+ if ! isempty (ints)
574
576
error (" $ints already exist in the system!" )
575
577
end
576
578
D = Differential (get_iv (sys))
0 commit comments