From: Jens-Christian Underberg on
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]