Hello. I am quite new to wolfram. would anyone mind sharing how to solve the euler lagrange equation (lowest equation), by inputting relevant unknowns from the equations above. Thank you.
This is a difficult task for a beginner. Here is an attempt:
r[n_, t_] = \[Zeta][t] {0, 0, 1} +
Sum[{1, 0, 0} l[i] Sin[\[Theta][i, t]] -
{0, 0, 1} l[i] Cos[\[Theta][i, t]], {i, n}];
rdot[n_, t_] = D[r[n, t], t]
tt = 1/2 Sum[m[n] Total[rdot[n, t]^2], {n, nn}];
vv = -g*Sum[
m[n] Sqrt[Total[r[n, t]^2]] Cos[\[Theta][n, t]], {n, nn}];
ll = tt - vv;
rr = 1/2 cd*Sum[Total[rdot[n, t]^2], {n, nn}];
eqLag[k_] = D[D[ll, D[\[Theta][k, t], t]], t] -
D[ll, \[Theta][k, t]] == -D[rr, D[\[Theta][k, t], t]];
eqs = Block[{nn = 2, m = Function[1],
l = Function[1], cd = 1, \[Zeta] = Function[1], g = 1},
Table[eqLag[n], {n, nn}]] // Simplify
sols = NDSolveValue[{eqs,
\[Theta][1, 0] == 1, \[Theta][2, 0] == 1,
Derivative[0, 1][\[Theta]][1, 0] == 1,
Derivative[0, 1][\[Theta]][2, 0] == 1},
{\[Theta][1, t], \[Theta][2, t]}, {t, 0, 4}]
ParametricPlot[sols, {t, 0, 4}]
Oh wow. thank you very much. may i know how i might increase nn to greater than 2. would i need to manually type the NDSolveValue equation to include all the thetas? Or is there a more general way to do it. Thank you.
Here is a way:
r[n_, t_] = \[Zeta][t] UnitVector[3, 3] +
Sum[UnitVector[3, 1] l[i] Sin[\[Theta][i, t]] -
UnitVector[3, 3] l[i] Cos[\[Theta][i, t]], {i, n}];
rdot[n_, t_] = D[r[n, t], t];
tt = 1/2 Sum[m[n] Total[rdot[n, t]^2], {n, nn}];
vv = -g*Sum[
m[n] Sqrt[Total[r[n, t]^2]] Cos[\[Theta][n, t]], {n, nn}];
ll = tt - vv;
rr = 1/2 cd*Sum[Total[rdot[n, t]^2], {n, nn}];
eqLag[k_] =
D[D[ll, D[\[Theta][k, t], t]], t] -
D[ll, \[Theta][k, t]] == -D[rr, D[\[Theta][k, t], t]];
Block[{nn = 3, m = Function[1], l = Function[1],
cd = 1, \[Zeta] = Function[1], g = 1},
eqs = Table[eqLag[n], {n, nn}] // Simplify;
initialData =
Table[D[\[Theta][k, t], {t, order}] == 1, {k, nn}, {order, 0,
1}] /. t -> 0 // Flatten;
sols = NDSolveValue[Flatten@{eqs, initialData},
Table[\[Theta][k, t], {k, nn}],
{t, 0, 4},
Method -> {"EquationSimplification" -> "Residual"}]]
Hello. thank you very much for the help. may i know how i could manually enter the initial conditions (1. Angular displacement 2. angular velocity), instead of setting them equal to 1 like you did? thank you very much.
Here is a way to type the initial data:
initialData =
{\[Theta][1, 0] == 1, Derivative[0, 1][\[Theta]][1, 0] == 2,
\[Theta][2, 0] == -1, Derivative[0, 1][\[Theta]][2, 0] == 4,
\[Theta][3, 0] == 3, Derivative[0, 1][\[Theta]][3, 0] == 0}
Thank you so much. Your contributions have been pivotal to my project ![]()
