@@ -4,101 +4,101 @@ using Test, LinearAlgebra
44
55#  Change of variables: z = log(x)
66#  (this implies that x = exp(z) is automatically non-negative)
7- #   @independent_variables t
8- #   @variables z(t)[1:2, 1:2]
9- #   D = Differential(t)
10- #   eqs = [D(D(z)) ~ ones(2, 2)]
11- #   @mtkcompile sys = System(eqs, t)
12- #   @test_nowarn ODEProblem(sys, [z => zeros(2, 2), D(z) => ones(2, 2)], (0.0, 10.0))
7+ @independent_variables  t
8+ @variables  z (t)[1 : 2 , 1 : 2 ]
9+ D =  Differential (t)
10+ eqs =  [D (D (z)) ~  ones (2 , 2 )]
11+ @mtkcompile  sys =  System (eqs, t)
12+ @test_nowarn  ODEProblem (sys, [z =>  zeros (2 , 2 ), D (z) =>  ones (2 , 2 )], (0.0 , 10.0 ))
1313
14- #   @parameters α
15- #   @variables x(t)
16- #   D = Differential(t)
17- #   eqs = [D(x) ~ α*x]
14+ @parameters  α
15+ @variables  x (t)
16+ D =  Differential (t)
17+ eqs =  [D (x) ~  α* x]
1818
19- #   tspan = (0., 1.)
20- #   def = [x => 1.0, α => -0.5]
19+ tspan =  (0. , 1. )
20+ def =  [x =>  1.0 , α =>  - 0.5 ]
2121
22- #   @mtkcompile sys = System(eqs, t;defaults=def)
23- #   prob = ODEProblem(sys, [], tspan)
24- #   sol = solve(prob, Tsit5())
22+ @mtkcompile  sys =  System (eqs, t;defaults= def)
23+ prob =  ODEProblem (sys, [], tspan)
24+ sol =  solve (prob, Tsit5 ())
2525
26- #   @variables z(t)
27- #   forward_subs  = [log(x) => z]
28- #   backward_subs = [x => exp(z)]
29- #   new_sys = changeofvariables(sys, t, forward_subs, backward_subs)
30- #   @test equations(new_sys)[1] == (D(z) ~ α)
26+ @variables  z (t)
27+ forward_subs  =  [log (x) =>  z]
28+ backward_subs =  [x =>  exp (z)]
29+ new_sys =  changeofvariables (sys, t, forward_subs, backward_subs)
30+ @test  equations (new_sys)[1 ] ==  (D (z) ~  α)
3131
32- #   new_prob = ODEProblem(new_sys, [], tspan)
33- #   new_sol = solve(new_prob, Tsit5())
32+ new_prob =  ODEProblem (new_sys, [], tspan)
33+ new_sol =  solve (new_prob, Tsit5 ())
3434
35- #   @test isapprox(new_sol[x][end], sol[x][end], atol=1e-4)
35+ @test  isapprox (new_sol[x][end ], sol[x][end ], atol= 1e-4 )
3636
3737
3838
39- #  #  Riccati equation
40- #   @parameters α
41- #   @variables x(t)
42- #   D = Differential(t)
43- #   eqs = [D(x) ~ t^2 + α - x^2]
44- #   def = [x=>1., α => 1.]
45- #   @mtkcompile sys = System(eqs, t; defaults=def)
39+ #  Riccati equation
40+ @parameters  α
41+ @variables  x (t)
42+ D =  Differential (t)
43+ eqs =  [D (x) ~  t^ 2  +  α -  x^ 2 ]
44+ def =  [x=> 1. , α =>  1. ]
45+ @mtkcompile  sys =  System (eqs, t; defaults= def)
4646
47- #   @variables z(t)
48- #   forward_subs  = [t + α/(x+t) =>    z       ]
49- #   backward_subs = [       x    => α/(z-t) - t]
47+ @variables  z (t)
48+ forward_subs  =  [t +  α/ (x+ t) =>     z       ]
49+ backward_subs =  [       x    =>  α/ (z- t) -  t]
5050
51- #   new_sys = changeofvariables(sys, t, forward_subs, backward_subs; simplify=true, t0=0.)
52- #  #  output should be equivalent to
53- #  #  t^2 + α - z^2 + 2   (but this simplification is not found automatically)
51+ new_sys =  changeofvariables (sys, t, forward_subs, backward_subs; simplify= true , t0= 0. )
52+ #  output should be equivalent to
53+ #  t^2 + α - z^2 + 2   (but this simplification is not found automatically)
5454
55- #   tspan = (0., 1.)
56- #   prob = ODEProblem(sys,[],tspan)
57- #   new_prob = ODEProblem(new_sys,[],tspan)
55+ tspan =  (0. , 1. )
56+ prob =  ODEProblem (sys,[],tspan)
57+ new_prob =  ODEProblem (new_sys,[],tspan)
5858
59- #   sol = solve(prob, Tsit5())
60- #   new_sol = solve(new_prob, Tsit5())
59+ sol =  solve (prob, Tsit5 ())
60+ new_sol =  solve (new_prob, Tsit5 ())
6161
62- #   @test isapprox(sol[x][end], new_sol[x][end], rtol=1e-4)
62+ @test  isapprox (sol[x][end ], new_sol[x][end ], rtol= 1e-4 )
6363
6464
65- #  #  Linear transformation to diagonal system
66- #   @independent_variables t
67- #   @variables x(t)[1:3]
68- #   x = reshape(x, 3, 1)
69- #   D = Differential(t)
70- #   A = [0. -1. 0.; -0.5 0.5 0.; 0. 0. -1.]
71- #   right = A*x
72- #   eqs = vec(D.(x) .~ right)
65+ #  Linear transformation to diagonal system
66+ @independent_variables  t
67+ @variables  x (t)[1 : 3 ]
68+ x =  reshape (x, 3 , 1 )
69+ D =  Differential (t)
70+ A =  [0.  - 1.  0. ; - 0.5  0.5  0. ; 0.  0.  - 1. ]
71+ right =  A* x
72+ eqs =  vec (D .(x) .~  right)
7373
74- #   tspan = (0., 10.)
75- #   u0 = [x[1] => 1.0, x[2] => 2.0, x[3] => -1.0]
74+ tspan =  (0. , 10. )
75+ u0 =  [x[1 ] =>  1.0 , x[2 ] =>  2.0 , x[3 ] =>  - 1.0 ]
7676
77- #   @mtkcompile sys = System(eqs, t; defaults=u0)
78- #   prob = ODEProblem(sys,[],tspan)
79- #   sol = solve(prob, Tsit5())
77+ @mtkcompile  sys =  System (eqs, t; defaults= u0)
78+ prob =  ODEProblem (sys,[],tspan)
79+ sol =  solve (prob, Tsit5 ())
8080
81- #   T = eigen(A).vectors
82- #   T_inv = inv(T)
81+ T =  eigen (A). vectors
82+ T_inv =  inv (T)
8383
84- #   @variables z(t)[1:3]
85- #   z = reshape(z, 3, 1)
86- #   forward_subs  = vec(T_inv*x .=> z)
87- #   backward_subs = vec(x .=> T*z)
84+ @variables  z (t)[1 : 3 ]
85+ z =  reshape (z, 3 , 1 )
86+ forward_subs  =  vec (T_inv* x .=>  z)
87+ backward_subs =  vec (x .=>  T* z)
8888
89- #   new_sys = changeofvariables(sys, t, forward_subs, backward_subs; simplify=true)
89+ new_sys =  changeofvariables (sys, t, forward_subs, backward_subs; simplify= true )
9090
91- #   new_prob = ODEProblem(new_sys, [], tspan)
92- #   new_sol = solve(new_prob, Tsit5())
91+ new_prob =  ODEProblem (new_sys, [], tspan)
92+ new_sol =  solve (new_prob, Tsit5 ())
9393
94- #  #  test RHS
95- #   new_rhs = [eq.rhs for eq in equations(new_sys)]
96- #   new_A = Symbolics.value.(Symbolics.jacobian(new_rhs, z))
97- #   A = diagm(eigen(A).values)
98- #   A = sortslices(A, dims=1)
99- #   new_A = sortslices(new_A, dims=1)
100- #   @test isapprox(A, new_A, rtol = 1e-10)
101- #   @test isapprox( new_sol[x[1],end], sol[x[1],end], rtol=1e-4)
94+ #  test RHS
95+ new_rhs =  [eq. rhs for  eq in  equations (new_sys)]
96+ new_A =  Symbolics. value .(Symbolics. jacobian (new_rhs, z))
97+ A =  diagm (eigen (A). values)
98+ A =  sortslices (A, dims= 1 )
99+ new_A =  sortslices (new_A, dims= 1 )
100+ @test  isapprox (A, new_A, rtol =  1e-10 )
101+ @test  isapprox ( new_sol[x[1 ],end ], sol[x[1 ],end ], rtol= 1e-4 )
102102
103103#  Change of variables for sde
104104noise_eqs =  ModelingToolkit. get_noise_eqs
@@ -115,7 +115,7 @@ def = [x=>0., μ => 2., σ=>1.]
115115@mtkcompile  sys =  System (eqs, t; defaults= def)
116116forward_subs =  [log (x) =>  y]
117117backward_subs =  [x =>  exp (y)]
118- new_sys =  change_of_variable_SDE (sys, t, forward_subs, backward_subs)
118+ new_sys =  changeofvariables (sys, t, forward_subs, backward_subs)
119119@test  equations (new_sys)[1 ] ==  (D (y) ~  μ -  1 / 2 * σ^ 2 )
120120@test  noise_eqs (new_sys)[1 ] ===  value (σ)
121121
@@ -130,7 +130,7 @@ def = [x=>0., y=> 0., u=>0., μ => 2., σ=>1., α=>3.]
130130@mtkcompile  sys =  System (eqs, t; defaults= def)
131131forward_subs =  [log (x) =>  z, y^ 2  =>  w, log (u) =>  v]
132132backward_subs =  [x =>  exp (z), y =>  w^ .5 , u =>  exp (v)]
133- new_sys =  change_of_variable_SDE (sys, t, forward_subs, backward_subs)
133+ new_sys =  changeofvariables (sys, t, forward_subs, backward_subs)
134134@test  equations (new_sys)[1 ] ==  (D (z) ~  μ -  1 / 2 * σ^ 2 )
135135@test  equations (new_sys)[2 ] ==  (D (w) ~  α^ 2 )
136136@test  equations (new_sys)[3 ] ==  (D (v) ~  μ -  1 / 2 * (α^ 2  +  σ^ 2 ))
0 commit comments