@@ -8,12 +8,13 @@ function lower_varname(var::Variable, idv, order)
8
8
end
9
9
10
10
function ode_order_lowering (sys:: DiffEqSystem )
11
- eqs_lowered = ode_order_lowering (sys. eqs, sys. iv)
12
- DiffEqSystem (eqs_lowered, sys. iv, sys . dvs , sys. ps)
11
+ eqs_lowered, vars_lowered = ode_order_lowering (sys. eqs, sys. iv)
12
+ DiffEqSystem (eqs_lowered, sys. iv, vars_lowered , sys. ps)
13
13
end
14
14
function ode_order_lowering (eqs, iv)
15
15
var_order = Dict {Variable,Int} ()
16
16
vars = Variable[]
17
+ new_vars = Variable[]
17
18
new_eqs = similar (eqs, DiffEq)
18
19
19
20
for (i, eq) ∈ enumerate (eqs)
@@ -23,6 +24,7 @@ function ode_order_lowering(eqs, iv)
23
24
any (isequal (var), vars) || push! (vars, var)
24
25
end
25
26
var′ = lower_varname (eq. x, eq. t, eq. n - 1 )
27
+ push! (new_vars, var′)
26
28
rhs′ = rename (eq. rhs)
27
29
new_eqs[i] = DiffEq (var′, iv, 1 , rhs′)
28
30
end
@@ -31,13 +33,14 @@ function ode_order_lowering(eqs, iv)
31
33
order = var_order[var]
32
34
for o in (order- 1 ): - 1 : 1
33
35
lvar = lower_varname (var, iv, o- 1 )
36
+ push! (new_vars, lvar)
34
37
rhs = lower_varname (var, iv, o)
35
38
eq = DiffEq (lvar, iv, 1 , rhs)
36
39
push! (new_eqs, eq)
37
40
end
38
41
end
39
42
40
- return new_eqs
43
+ return new_eqs, new_vars
41
44
end
42
45
43
46
function rename (O:: Expression )
0 commit comments