Line changes length in animation
- To: mathgroup at smc.vnet.net
- Subject: [mg109333] Line changes length in animation
- From: Jens-Christian Underberg <mail at example.invalid>
- Date: Thu, 22 Apr 2010 03:31:05 -0400 (EDT)
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]