100
100
function lotkavolterra (u, p, t)
101
101
[p[1 ]* u[1 ] - p[2 ]* u[1 ]* u[2 ], - p[4 ]* u[2 ] + p[3 ]* u[1 ]* u[2 ]]
102
102
end
103
- # Compare the built bc function to the actual constructed one.
104
- function bc! (resid, u, p, t)
105
- resid[1 ] = u[1 ][1 ] - 1.
106
- resid[2 ] = u[1 ][2 ] - 2.
107
- nothing
108
- end
109
- function bc (u, p, t)
110
- [u[1 ][1 ] - 1. , u[1 ][2 ] - 2. ]
111
- end
112
-
113
- u0 = [1. , 2. ]; p = [1.5 , 1. , 1. , 3. ]
114
- fns = ModelingToolkit. generate_function_bc (lksys, u0, [1 , 2 ], tspan)
115
- genbc_oop, genbc_iip = ModelingToolkit. eval_or_rgf .(fns)
116
-
117
- bvpi1 = SciMLBase. BVProblem (lotkavolterra!, bc!, [1. ,2. ], tspan, p)
118
- bvpi2 = SciMLBase. BVProblem (lotkavolterra!, genbc_iip, [1. ,2. ], tspan, p)
119
-
120
- sol1 = solve (bvpi1, MIRK4 (), dt = 0.05 )
121
- sol2 = solve (bvpi2, MIRK4 (), dt = 0.05 )
122
- @test sol1 ≈ sol2
123
-
124
- bvpo1 = BVProblem (lotkavolterra, bc, [1 ,2 ], tspan, p)
125
- bvpo2 = BVProblem (lotkavolterra, genbc_oop, [1 ,2 ], tspan, p)
126
-
127
- sol1 = solve (bvpo1, MIRK4 (), dt = 0.05 )
128
- sol2 = solve (bvpo2, MIRK4 (), dt = 0.05 )
129
- @test sol1 ≈ sol2
130
103
131
104
# Test with a constraint.
132
105
constr = [y (0.5 ) ~ 2. ]
@@ -140,29 +113,16 @@ let
140
113
[u (0.0 )[1 ] - 1. , u (0.5 )[2 ] - 2. ]
141
114
end
142
115
143
- u0 = [1 , 1. ]
144
- fns = ModelingToolkit. generate_function_bc (lksys, u0, [1 ], tspan)
145
- genbc_oop, genbc_iip = ModelingToolkit. eval_or_rgf .(fns)
146
-
147
116
bvpi1 = SciMLBase. BVProblem (lotkavolterra!, bc!, u0, tspan, p)
148
- bvpi2 = SciMLBase. BVProblem (lotkavolterra!, genbc_iip , u0, tspan, p)
117
+ bvpi1 = SciMLBase. BVProblem (lotkavolterra, bc , u0, tspan, p)
149
118
bvpi3 = SciMLBase. BVProblem {true, SciMLBase.AutoSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
150
- bvpi4 = SciMLBase. BVProblem {true , SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
119
+ bvpi4 = SciMLBase. BVProblem {false , SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
151
120
152
121
sol1 = @btime solve ($ bvpi1, MIRK4 (), dt = 0.01 )
153
122
sol2 = @btime solve ($ bvpi2, MIRK4 (), dt = 0.01 )
154
123
sol3 = @btime solve ($ bvpi3, MIRK4 (), dt = 0.01 )
155
124
sol4 = @btime solve ($ bvpi4, MIRK4 (), dt = 0.01 )
156
125
@test sol1 ≈ sol2 ≈ sol3 ≈ sol4 # don't get true equality here, not sure why
157
-
158
- bvpo1 = BVProblem (lotkavolterra, bc, u0, tspan, p)
159
- bvpo2 = BVProblem (lotkavolterra, genbc_oop, u0, tspan, p)
160
- bvpo3 = SciMLBase. BVProblem {false, SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
161
-
162
- sol1 = @btime solve ($ bvpo1, MIRK4 (), dt = 0.05 )
163
- sol2 = @btime solve ($ bvpo2, MIRK4 (), dt = 0.05 )
164
- sol3 = @btime solve ($ bvpo3, MIRK4 (), dt = 0.05 )
165
- @test sol1 ≈ sol2 ≈ sol3
166
126
end
167
127
168
128
function test_solvers (solvers, prob, u0map, constraints, equations = []; dt = 0.05 , atol = 1e-2 )
0 commit comments