@@ -19,18 +19,20 @@ Takes a Nth order ODESystem and returns a new ODESystem written in first order
1919form by defining new variables which represent the N-1 derivatives.
2020"""
2121function ode_order_lowering (sys:: ODESystem )
22- eqs_lowered, new_vars = ode_order_lowering (sys. eqs , sys. iv)
23- ODESystem (eqs_lowered, sys. iv, vcat ( new_vars, states (sys)) , sys. ps)
22+ eqs_lowered, new_vars = ode_order_lowering (equations ( sys) , sys. iv, states (sys) )
23+ return ODESystem (eqs_lowered, sys. iv, new_vars, sys. ps)
2424end
2525
26- function ode_order_lowering (eqs, iv)
26+ function ode_order_lowering (eqs, iv, states )
2727 var_order = Dict {Variable,Int} ()
2828 vars = Variable[]
2929 new_eqs = Equation[]
3030 new_vars = Variable[]
31+ D = Differential (iv ())
3132
32- for (i, eq) ∈ enumerate (eqs)
33+ for (i, (eq, ss)) ∈ enumerate (zip ( eqs, states) )
3334 if isequal (eq. lhs, Constant (0 ))
35+ push! (new_vars, ss)
3436 push! (new_eqs, eq)
3537 else
3638 var, maxorder = var_from_nested_derivative (eq. lhs)
@@ -40,7 +42,8 @@ function ode_order_lowering(eqs, iv)
4042 end
4143 var′ = lower_varname (var, iv, maxorder - 1 )
4244 rhs′ = rename_lower_order (eq. rhs)
43- push! (new_eqs,Differential (iv ())(var′ (iv ())) ~ rhs′)
45+ push! (new_vars, var′)
46+ push! (new_eqs, D (var′ (iv ())) ~ rhs′)
4447 end
4548 end
4649
@@ -49,7 +52,7 @@ function ode_order_lowering(eqs, iv)
4952 for o in (order- 1 ): - 1 : 1
5053 lvar = lower_varname (var, iv, o- 1 )
5154 rvar = lower_varname (var, iv, o)
52- push! (new_vars, rvar )
55+ push! (new_vars, lvar )
5356
5457 rhs = rvar (iv ())
5558 eq = Differential (iv ())(lvar (iv ())) ~ rhs
0 commit comments