Some questions about a Mathematica script
- To: mathgroup at smc.vnet.net
- Subject: [mg120771] Some questions about a Mathematica script
- From: "DaleJenk" <dale.jenkins8 at deletegooglemail.com>
- Date: Tue, 9 Aug 2011 07:21:50 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
I downloaded the following from the Mathematica website. Most of it is
fairly easy to understand but there's a section in the middle which isn't
(at least to me).
1. At the end of the NDSolve instruction comes the list: {x1[t], x2[t],
x3[t], x1'[t], x2'[t], x3'[t]}. What exactly is the reason for putting in
the primed items in this list?
2. "soln" and "solnx1", etc. are all just labels. Right?
3. But what exactly does soln[[1,1]] refer to?
Thanks for any help.
Dale
Manipulate[
m = 1.0;
len = 4.0;
dx1 = (1/m1)*(((tension*(x2[t] - x1[t]))/len) - tension (x1[t]/len));
dx2 = (1/
m2)*(((-tension*(x2[t] - x1[t]))/len) -
tension ((x2[t] - x3[t])/len));
dx3 = (1/m3)*(((tension*(x2[t] - x3[t]))/len) - tension (x3[t]/len));
soln = NDSolve[{{x1''[t] == dx1, x2''[t] == dx2,
x3''[t] == dx3}, {x1[0] == x1int, x1'[0] == 0.0, x2[0] == x2int,
x2'[0] == 0.0, x3[0] == x3int, x3'[0] == 0.0}}, {x1[t], x2[t],
x3[t], x1'[t], x2'[t], x3'[t]}, {t, 0, 5},
Method -> "StiffnessSwitching"];
solnx1[t_] = x1[t] /. soln[[1, 1]];
solnx2[t_] = x2[t] /. soln[[1, 2]];
solnx3[t_] = x3[t] /. soln[[1, 3]];
solnx1p[t_] = x1'[t] /. soln[[1, 4]];
solnx2p[t_] = x2'[t] /. soln[[1, 5]];
solnx3p[t_] = x3'[t] /. soln[[1, 6]];
With[{xa = solnx1[run], xb = solnx2[run], xc = solnx3[run]},
balls =
Graphics[{Black, Line[{{0, 0}, {1, xa}, {2, xb}, {3, xc}, {4, 0}}],
Red, {Disk[{1, xa}, .1 Sqrt[m1]], Disk[{2, xb}, .1 Sqrt[m2]],
Disk[{3, xc}, .1 Sqrt[m3]]}}, PlotRange -> {{0, 4}, {-1, 1}},
Frame -> True, ImageSize -> {400, 250}];
disp = Plot[{solnx1[t], solnx2[t], solnx3[t]}, {t, 0, 5},
ImageSize -> {200, 150},
AxesLabel -> {Row[{"time ", Style["t", Italic]}], "displacement"},
ImagePadding -> {{35, 35}, {10, 20}}];
velocity =
Plot[{solnx1p[t], solnx2p[t], solnx3p[t]}, {t, 0, 5},
ImageSize -> {200, 150},
AxesLabel -> {Row[{"time ", Style["t", Italic]}], "velocity"},
ImagePadding -> {{35, 35}, {10, 20}}];
Grid[{{balls, SpanFromLeft}, {disp, velocity}}]],
{{tension, 10, "tension T"}, 5, 20, .1, ImageSize -> Tiny},
Style["displacement", Bold],
{{x1int, 0, "\!\(\*SubscriptBox[\"x\", \"1\"]\)"}, -.2, .2,
ImageSize -> Tiny},
{{x2int, .1, "\!\(\*SubscriptBox[\"x\", \"2\"]\)"}, -.2, .2,
ImageSize -> Tiny},
{{x3int, 0, "\!\(\*SubscriptBox[\"x\", \"3\"]\)"}, -.2, .2,
ImageSize -> Tiny},
Style["mass", Bold],
{{m1, 1, "\!\(\*SubscriptBox[\"m\", \"1\"]\)"}, .1, 3, .1,
ImageSize -> Tiny},
{{m2, 1, "\!\(\*SubscriptBox[\"m\", \"2\"]\)"}, .1, 3, .1,
ImageSize -> Tiny},
{{m3, 1, "\!\(\*SubscriptBox[\"m\", \"3\"]\)"}, .1, 3, .1,
ImageSize -> Tiny},
{{run, 0, "release system"}, 0, 5, .1, ControlType -> Trigger,
AnimationRate -> 1},
SynchronousUpdating -> True, TrackedSymbols -> True,
AutorunSequencing -> {1, 3, 5, 8}]