Prev: How to make make a Dynamic variable to become an ordinary one
Next: NDSolve cannot solve set of ODEs
From: Jens-Christian Underberg on 22 Apr 2010 03:30 Hello, I have two problems with the attached code simulateing a chaotic pendulum. The first one seems easy: the replacement by sol doesn't seem to work and I cannot see why. Without the Module I got it working, but another strange problem: In the animation, the length of the pendulum changes, although that is not explicable by numeric errors, since the Lagrange equations only give angles. The length is given bei the constraints ... Does anyone have any idea? Best regards Jens-Christian Pendel[Theta1_, Theta2_, Theta3_, Theta1p_, Theta2p_, Theta3p_, l1_, l2_, l3_, m1_, m2_, m3_, g_, tmax_] := Module[{EQ1, EQ2, EQ3, length, params, x1, x2, x3, z1, z2, z3, L, L2, Pendel1, Pendel2, Pendel3}, L[z1_, z2_, z3_, x1p_, x2p_, x3p_, z1p_, z2p_, z3p_] = 1/2 m1 (x1p2 + z1p2) + 1/2 m2 (x2p2 + z2p2) + 1/2*m3*(x3p2 + z3p2) + m1*g*z1 + m2*g*z2 + m2*g*z3; x1[t_ ] = l1*Sin[\[Theta]1[t]]; z1[t_] = l1*Cos[\[Theta]1[t]]; x2[t_] = x1[t] + l2*Sin[\[Theta]2[t]]; z2[t_] = z1[t] + l2*Cos[\[Theta]2[t]]; x3[t_] = x1[t] + x2[t] + l3*Sin[\[Theta]3[t]]; z3[t_] = z1[t] + z2[t] + l3*Cos[\[Theta]3[t]]; L2 = L[ z1[t], z2[t], z3[t], x1'[t], x2'[t], x3'[t], z1'[t], z2'[t], z3'[t]]; EQ1 = D[D[L2, \[Theta]1'[t]], t] - D[L2, \[Theta]1[t]] == 0; EQ2 = D[D[L2, \[Theta]2'[t]], t] - D[L2, \[Theta]2[t]] == 0; EQ3 = D[D[L2, \[Theta]3'[t]], t] - D[L2, \[Theta]3[t]] == 0; sol = NDSolve[{\[Theta]1[0] == Theta1, \[Theta]2[0] == Theta2, \[Theta]3[0] == Theta3, \[Theta]1'[0] == Theta1p, \[Theta]2'[0] == Theta2p, \[Theta]3'[0] == Theta3p, EQ1, EQ2, EQ3} , {\[Theta]1[t], \[Theta]2[t], \[Theta]3[t]}, {t, 0, tmax}, MaxSteps -> 109, MaxStepSize -> 0.001] // Flatten; Pendel1[t_] = ({x1[t], -z1[t]} /. sol) ; Pendel2[t_] = ({x2[t], -z2[t]} /. sol) ; Pendel3[t_] = ({x3[t], -z3[t]} /. sol) ; length = 2*(l1 + l2 + l3) ; Animate[ Show[ParametricPlot[Pendel3[s], {s, 0, t}, PlotRange -> {{-length, length}, {-length, length}}], Graphics[{Line[{{0, 0}, Pendel1[t], Pendel2[t], Pendel3[t]}], Disk[Pendel1[t], Sqrt[m1]/5], Disk[Pendel2[t], Sqrt[m2]/5], Disk[Pendel3[t], Sqrt[m3]/5]}, PlotRange -> {{-length, length}, {-length, length}}]], {t, 0, tmax, 0.001}, AnimationRate -> 0.7] ] Pendel[Pi/2, 0.3, 0.3, 0, 0, 0, 2, 1, 1, 1, 1, 1, 2, 70] |