@@ -1032,24 +1032,26 @@ prob = ODEProblem(sys, [x => 1.0], (0.0, 10.0))
1032
1032
@test_nowarn solve (prob, Tsit5 ())
1033
1033
1034
1034
# Issue#2383
1035
- @variables x (t)[1 : 3 ]
1036
- @parameters p[1 : 3 , 1 : 3 ]
1037
- eqs = [
1038
- D (x) ~ p * x
1039
- ]
1040
- @mtkbuild sys = ODESystem (eqs, t; continuous_events = [[norm (x) ~ 3.0 ] => [x ~ ones (3 )]])
1041
- # array affect equations used to not work
1042
- prob1 = @test_nowarn ODEProblem (sys, [x => ones (3 )], (0.0 , 10.0 ), [p => ones (3 , 3 )])
1043
- sol1 = @test_nowarn solve (prob1, Tsit5 ())
1044
-
1045
- # array condition equations also used to not work
1046
- @mtkbuild sys = ODESystem (
1047
- eqs, t; continuous_events = [[x ~ sqrt (3 ) * ones (3 )] => [x ~ ones (3 )]])
1048
- # array affect equations used to not work
1049
- prob2 = @test_nowarn ODEProblem (sys, [x => ones (3 )], (0.0 , 10.0 ), [p => ones (3 , 3 )])
1050
- sol2 = @test_nowarn solve (prob2, Tsit5 ())
1051
-
1052
- @test sol1 ≈ sol2
1035
+ @testset " Arrays in affect/condition equations" begin
1036
+ @variables x (t)[1 : 3 ]
1037
+ @parameters p[1 : 3 , 1 : 3 ]
1038
+ eqs = [
1039
+ D (x) ~ p * x
1040
+ ]
1041
+ @mtkbuild sys = ODESystem (eqs, t; continuous_events = [[norm (x) ~ 3.0 ] => [x ~ ones (3 )]])
1042
+ # array affect equations used to not work
1043
+ prob1 = @test_nowarn ODEProblem (sys, [x => ones (3 )], (0.0 , 10.0 ), [p => ones (3 , 3 )])
1044
+ sol1 = @test_nowarn solve (prob1, Tsit5 ())
1045
+
1046
+ # array condition equations also used to not work
1047
+ @mtkbuild sys = ODESystem (
1048
+ eqs, t; continuous_events = [[x ~ sqrt (3 ) * ones (3 )] => [x ~ ones (3 )]])
1049
+ # array affect equations used to not work
1050
+ prob2 = @test_nowarn ODEProblem (sys, [x => ones (3 )], (0.0 , 10.0 ), [p => ones (3 , 3 )])
1051
+ sol2 = @test_nowarn solve (prob2, Tsit5 ())
1052
+
1053
+ @test sol1. u ≈ sol2. u[2 : end ]
1054
+ end
1053
1055
1054
1056
# Requires fix in symbolics for `linear_expansion(p * x, D(y))`
1055
1057
@test_skip begin
@@ -1196,10 +1198,12 @@ end
1196
1198
end
1197
1199
1198
1200
# Namespacing of array variables
1199
- @variables x (t)[1 : 2 ]
1200
- @named sys = ODESystem (Equation[], t)
1201
- @test getname (unknowns (sys, x)) == :sys₊x
1202
- @test size (unknowns (sys, x)) == size (x)
1201
+ @testset " Namespacing of array variables" begin
1202
+ @variables x (t)[1 : 2 ]
1203
+ @named sys = ODESystem (Equation[], t)
1204
+ @test getname (unknowns (sys, x)) == :sys₊x
1205
+ @test size (unknowns (sys, x)) == size (x)
1206
+ end
1203
1207
1204
1208
# Issue#2667 and Issue#2953
1205
1209
@testset " ForwardDiff through ODEProblem constructor" begin
@@ -1537,8 +1541,7 @@ end
1537
1541
@testset " Observed variables dependent on discrete parameters" begin
1538
1542
@variables x (t) obs (t)
1539
1543
@parameters c (t)
1540
- @mtkbuild sys = ODESystem (
1541
- [D (x) ~ c * cos (x), obs ~ c], t, [x], [c]; discrete_events = [1.0 => [c ~ c + 1 ]])
1544
+ @mtkbuild sys = ODESystem ([D (x) ~ c * cos (x), obs ~ c], t, [x], [c]; discrete_events = [SymbolicDiscreteCallback (1.0 => [c ~ Pre (c) + 1 ], discrete_parameters = [c])])
1542
1545
prob = ODEProblem (sys, [x => 0.0 ], (0.0 , 2pi ), [c => 1.0 ])
1543
1546
sol = solve (prob, Tsit5 ())
1544
1547
@test sol[obs] ≈ 1 : 7
@@ -1598,15 +1601,15 @@ end
1598
1601
# Test `isequal`
1599
1602
@testset " `isequal`" begin
1600
1603
@variables X (t)
1601
- @parameters p d
1604
+ @parameters p d (t)
1602
1605
eq = D (X) ~ p - d * X
1603
1606
1604
1607
osys1 = complete (ODESystem ([eq], t; name = :osys ))
1605
1608
osys2 = complete (ODESystem ([eq], t; name = :osys ))
1606
1609
@test osys1 == osys2 # true
1607
1610
1608
- continuous_events = [[X ~ 1.0 ] => [X ~ X + 5.0 ]]
1609
- discrete_events = [5.0 => [d ~ d / 2.0 ]]
1611
+ continuous_events = [[X ~ 1.0 ] => [X ~ Pre (X) + 5.0 ]]
1612
+ discrete_events = [SymbolicDiscreteCallback ( 5.0 => [d ~ d / 2.0 ], discrete_parameters = [d]) ]
1610
1613
1611
1614
osys1 = complete (ODESystem ([eq], t; name = :osys , continuous_events))
1612
1615
osys2 = complete (ODESystem ([eq], t; name = :osys ))
0 commit comments