@@ -184,25 +184,19 @@ function double_pendulum(u0=[π/2, 0, 0, 0.5];
184
184
return CoupledODEs (doublependulum_rule, u0, [G, L1, L2, M1, M2])
185
185
end
186
186
@inbounds function doublependulum_rule (u, p, t)
187
- G, L1, L2, M1, M2 = p
188
-
189
- du1 = u[2 ]
190
-
191
187
φ = u[3 ] - u[1 ]
192
- Δ = (M1 + M2) - M2* cos (φ)* cos (φ)
193
-
194
- du2 = (M2* L1* u[2 ]* u[2 ]* sin (φ)* cos (φ) +
195
- M2* G* sin (u[3 ])* cos (φ) +
196
- M2* L2* u[4 ]* u[4 ]* sin (φ) -
197
- (M1 + M2)* G* sin (u[1 ]))/ (L1* Δ)
198
-
188
+ sin_ϕ = sin (φ); cos_ϕ = cos (φ)
189
+ sin_θ₂ = sin (u[3 ]); sin_θ₁ = sin (u[1 ])
190
+ Δ = (p[4 ] + p[5 ]) - p[5 ] * cos_ϕ^ 2
191
+
192
+ du1 = u[2 ]
193
+ du2 = (p[5 ] * (cos_ϕ * (p[2 ] * u[2 ]^ 2 * sin_ϕ + p[1 ] * sin_θ₂) +
194
+ p[3 ] * u[4 ]^ 2 * sin_ϕ) -
195
+ (p[4 ] + p[5 ]) * p[1 ] * sin_θ₁) / (p[2 ] * Δ)
199
196
du3 = u[4 ]
200
-
201
- du4 = (- M2* L2* u[4 ]* u[4 ]* sin (φ)* cos (φ) +
202
- (M1 + M2)* G* sin (u[1 ])* cos (φ) -
203
- (M1 + M2)* L1* u[2 ]* u[2 ]* sin (φ) -
204
- (M1 + M2)* G* sin (u[3 ]))/ (L2* Δ)
205
-
197
+ du4 = (- p[5 ] * p[3 ] * u[4 ]^ 2 * sin_ϕ * cos_ϕ +
198
+ (p[4 ] + p[5 ]) * (p[1 ] * (sin_θ₁ * cos_ϕ - sin_θ₂) -
199
+ p[2 ] * u[2 ]^ 2 * sin_ϕ)) / (p[3 ] * Δ)
206
200
return SVector {4} (du1, du2, du3, du4)
207
201
end
208
202
0 commit comments