@@ -184,25 +184,19 @@ function double_pendulum(u0=[π/2, 0, 0, 0.5];
184184 return CoupledODEs (doublependulum_rule, u0, [G, L1, L2, M1, M2])
185185end
186186@inbounds function doublependulum_rule (u, p, t)
187- G, L1, L2, M1, M2 = p
188-
189- du1 = u[2 ]
190-
191187 φ = 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 ] * Δ)
199196 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 ] * Δ)
206200 return SVector {4} (du1, du2, du3, du4)
207201end
208202
0 commit comments