26
26
function ode_order_lowering (eqs, iv, states)
27
27
var_order = Dict {Variable,Int} ()
28
28
vars = Variable[]
29
- new_eqs = Equation[]
30
- new_vars = Variable[]
31
29
D = Differential (iv ())
30
+ diff_eqs = Equation[]
31
+ diff_vars = Variable[]
32
+ alge_eqs = Equation[]
33
+ alge_vars = Variable[]
32
34
33
35
for (i, (eq, ss)) ∈ enumerate (zip (eqs, states))
34
36
if isequal (eq. lhs, Constant (0 ))
35
- push! (new_vars , ss)
36
- push! (new_eqs , eq)
37
+ push! (alge_vars , ss)
38
+ push! (alge_eqs , eq)
37
39
else
38
40
var, maxorder = var_from_nested_derivative (eq. lhs)
39
41
if maxorder > get (var_order, var, 0 )
@@ -42,8 +44,8 @@ function ode_order_lowering(eqs, iv, states)
42
44
end
43
45
var′ = lower_varname (var, iv, maxorder - 1 )
44
46
rhs′ = rename_lower_order (eq. rhs)
45
- push! (new_vars , var′)
46
- push! (new_eqs , D (var′ (iv ())) ~ rhs′)
47
+ push! (diff_vars , var′)
48
+ push! (diff_eqs , D (var′ (iv ())) ~ rhs′)
47
49
end
48
50
end
49
51
@@ -52,15 +54,15 @@ function ode_order_lowering(eqs, iv, states)
52
54
for o in (order- 1 ): - 1 : 1
53
55
lvar = lower_varname (var, iv, o- 1 )
54
56
rvar = lower_varname (var, iv, o)
55
- push! (new_vars , lvar)
57
+ push! (diff_vars , lvar)
56
58
57
59
rhs = rvar (iv ())
58
60
eq = Differential (iv ())(lvar (iv ())) ~ rhs
59
- push! (new_eqs , eq)
61
+ push! (diff_eqs , eq)
60
62
end
61
63
end
62
64
63
- return (new_eqs, new_vars )
65
+ return (vcat (diff_eqs, alge_eqs), vcat (diff_vars, alge_vars) )
64
66
end
65
67
66
68
function rename_lower_order (O:: Expression )
0 commit comments