1
1
using ModelingToolkit, OrdinaryDiffEq, Test
2
2
3
3
@parameters t σ ρ β F (t)
4
- @variables x (t) y (t) z (t) a (t)
4
+ @variables x (t) y (t) z (t) a (t) u (t)
5
5
@derivatives D' ~ t
6
6
7
7
eqs = [D (x) ~ σ* (y- x),
@@ -21,57 +21,64 @@ eqs = [D(x) ~ σ*(y-x),
21
21
22
22
@test lorenz1_aliased == ODESystem (eqs,t,[x,y,z],[σ,ρ,β],observed= [a ~ x],name= :lorenz1 )
23
23
24
- #=
25
24
# Multi-System Reduction
26
25
27
26
eqs1 = [D (x) ~ σ* (y- x) + F,
28
27
D (y) ~ x* (ρ- z)- u,
29
28
D (z) ~ x* y - β* z]
29
+
30
30
aliases = [u ~ x + y - z]
31
+
31
32
lorenz1 = ODESystem (eqs1,pins= [F],observed= aliases,name= :lorenz1 )
32
33
33
34
eqs2 = [D (x) ~ F,
34
35
D (y) ~ x* (ρ- z)- x,
35
36
D (z) ~ x* y - β* z]
37
+
36
38
aliases2 = [u ~ x - y - z]
39
+
37
40
lorenz2 = ODESystem (eqs2,pins= [F],observed= aliases2,name= :lorenz2 )
38
41
39
42
connections = [lorenz1. F ~ lorenz2. u,
40
43
lorenz2. F ~ lorenz1. u]
44
+
41
45
connected = ODESystem ([0 ~ a + lorenz1. x - lorenz2. y],t,[a],[],observed= connections,systems= [lorenz1,lorenz2])
42
46
43
47
# Reduced Unflattened System
48
+ #=
44
49
45
50
connections2 = [lorenz1.F ~ lorenz2.u,
46
51
lorenz2.F ~ lorenz1.u,
47
52
a ~ -lorenz1.x + lorenz2.y]
48
53
connected = ODESystem(Equation[],t,[],[],observed=connections2,systems=[lorenz1,lorenz2])
54
+ =#
49
55
50
56
# Reduced Flattened System
51
57
52
- flattened_system = flatten(connected)
53
- flatten(sys::AbstractSystem) = ODESystem(equations(sys),states(sys),parameters(sys),independent_variable(sys))
58
+ flattened_system = ModelingToolkit. flatten (connected)
54
59
55
60
aliased_flattened_system = alias_elimination (flattened_system)
56
61
57
- states(reduced_flattened_system ) == [
62
+ @test states (aliased_flattened_system ) == convert .(Variable, [
58
63
lorenz1. x
59
64
lorenz1. y
60
65
lorenz1. z
61
66
lorenz2. x
62
67
lorenz2. y
63
68
lorenz2. z
64
- ]
69
+ ])
65
70
66
- parameters(reduced_flattened_system) == [
71
+ @test setdiff ( parameters (aliased_flattened_system), convert .(Variable, [
67
72
lorenz1. σ
68
73
lorenz1. ρ
69
74
lorenz1. β
70
- lorenz2.σ
75
+ lorenz1. F
76
+ lorenz2. F
71
77
lorenz2. ρ
72
78
lorenz2. β
73
- ]
79
+ ])) |> isempty
74
80
81
+ #=
75
82
equations(reduced_flattened_system) == [
76
83
D(lorenz1.x) ~ lorenz1.σ*(lorenz1.y-lorenz1.x) + lorenz2.x - lorenz2.y - lorenz2.z,
77
84
D(lorenz1.y) ~ lorenz1.x*(ρ-z)-lorenz1.x - lorenz1.y + lorenz1.z,
0 commit comments