求助吧友:小白尝试写二维的三体问题,但是Animate总是没
mathematica吧
全部回复
仅看楼主
level 3
Neichus 楼主
求助吧友:小白尝试写二维的三体问题,但是Animate总是没有输出,想请教下原因。另外,请问数据不在笔记本中这是什么情况
2020年07月29日 17点07分 1
level 3
Neichus 楼主
Clear["Global`*"]
Clear@Derivative
M1 = 1;
M2 = 1;
M3 = 1;
x10 = -1;
x20 = 1;
x30 = 0;
y10 = 0;
y20 = 0;
y30 = 2;
vx10 = 1;
vx20 = 0.5;
vx30 = 0;
vy10 = 2.5;
vy20 = 0.5;
vy30 = 1.7;G = 70;
tmax = 100;
tn = 100;
deltat = tmax/tn;
length = 20;
vc = (M1*{vx10, vy10} + M2*{vx20, vy20} + M3*{vx30, vy30})/(M1 + M2 +
M3);
{vx10, vy10} = {vx10, vy10} - vc;
{vx20, vy20} = {vx20, vy20} - vc;
{vx30, vy30} = {vx30, vy30} - vc;
f21x[t_] =
G*M2*M1*(x2[t] -
x1[t])/((y2[t] - y1[t])^2 + (x2[t] - x1[t])^2)^(3/2);
f21y[t_] =
G*M2*M1*(y2[t] -
y1[t])/((y2[t] - y1[t])^2 + (x2[t] - x1[t])^2)^(3/2);
f32x[t_] =
G*M3*M2*(x3[t] -
x2[t])/((y3[t] - y2[t])^2 + (x3[t] - x2[t])^2)^(3/2);
f32y[t_] =
G*M3*M2*(y3[t] -
y2[t])/((y3[t] - y2[t])^2 + (x3[t] - x2[t])^2)^(3/2);
f13x[t_] =
G*M1*M3*(x1[t] -
x3[t])/((y1[t] - y3[t])^2 + (x1[t] - x3[t])^2)^(3/2);
f13y[t_] =
G*M1*M3*(y1[t] -
y3[t])/((y1[t] - y3[t])^2 + (x1[t] - x3[t])^2)^(3/2);
s = NDSolve[
{M1*x1''[t] == f21x[t] - f13x[t],
M1*y1''[t] == f21y[t] - f13y[t],
M2*x2''[t] == f32x[t] - f21x[t],
M2*y2''[t] == f32y[t] - f21y[t],
M3*x3''[t] == f13x[t] - f32x[t],
M3*y3''[t] == f13y[t] - f32y[t],
x1[0] == x10,
x1'[0] == vx10,
y1[0] == y10,
y1'[0] == vy10,
x2[0] == x20,
x2'[0] == vx20,
y2[0] == y20,
y2'[0] == vy20,
x3[0] == x30,
x3'[0] == vx30,
y3[0] == y30,
y3'[0] == vy30},
{x1, x2, x3, y1, y2, y3},
{t, 0, tmax}]{r1, r2, r3} = {M1^(1/3), M2^(1/3), M3^(1/3)};X1[t_] = x1[t] /. s;
X2[t_] = x2[t] /. s;
X3[t_] = x3[t] /. s;
Y1[t_] = y1[t] /. s;
Y2[t_] = y2[t] /. s;
Y3[t_] = y3[t] /. s;Animate[
g1 = ListPlot[{{x1[t], y1[t]}}, PlotRange -> {{-5, 5}, {-5, 5}},
PlotStyle -> {Orange, PointSize[r1]}];
g2 = ListPlot[{{x2[t], y2[t]}}, PlotRange -> {{-5, 5}, {-5, 5}},
PlotStyle -> {Black, PointSize[r2]}];
g3 = ListPlot[{{x3[t], y3[t]}}, PlotRange -> {{-5, 5}, {-5, 5}},
PlotStyle -> {Blue, PointSize[r3]}];
Show[{g1, g2, g3}], {t, 0, tmax}, ControlPlacement -> Top]
2020年07月29日 17点07分 2
level 3
Neichus 楼主
试了几下,发现x1之类的可以分别关于t做图,但用ParametricPlot和Animate只有坐标轴,很好奇原因
2020年07月30日 00点07分 3
level 3
Neichus 楼主
愚蠢的楼主找到原因来
2020年07月30日 00点07分 4
level 9
data = NBodySimulation["InverseSquare", {
<|"Mass" -> 1, "Position" -> {-1, 0}, "Velocity" -> {1, 2.5}|>,
<|"Mass" -> 1, "Position" -> {1, 0}, "Velocity" -> {0.5, 0.5}|>,
<|"Mass" -> 1, "Position" -> {0, 2}, "Velocity" -> {0, 1.7}|>},
100];
out = Manipulate[
Show[{ParametricPlot[Evaluate[data[All, "Position", t]], {t, 0, i}]},
Graphics[{Blue,
Disk[Evaluate[data[All, "Position", i]][[1]], 0.02]}],
Graphics[{Orange,
Disk[Evaluate[data[All, "Position", i]][[2]], 0.02]}],
Graphics[{Green,
Disk[Evaluate[data[All, "Position", i]][[3]], 0.02]}]
], {{i, 0.01}, 0.01, 100, 0.01}]
2020年07月30日 10点07分 5
谢谢大佬!等下回去试试
2020年07月30日 10点07分
@Neichus [滑稽],想不到吧,不但有自带函数,还有模拟三体的帮助文档。要搜就瘦NBodysimulation
2020年07月30日 10点07分
1