Mathematica绘图

我用NDSolve解出了一个位移随时间变化的函数。我希望以位移为横坐标,速度(也就是NDSolve解出来的函数的导数)为纵坐标画图,请问如何实现?急急急!!!
Clear["Global`*"];
m1 = 7.3477*10^22; m2 = 5.97219*10^24; G = 6.67*10^(-11);
r1[t_] := {r1x[t], r1y[t], r1z[t]};
r2[t_] := {r2x[t], r2y[t], r2z[t]};
r[t_] := r1[t] - r2[t];
eqn1 = Thread[
D[r1[t], {t, 2}] == -G*m2*
r[t]/(r[t].r[t])^(3/
2)];(*体现出万有引力的分量形式,从而不会出现|Subscript[r, y]|=0的情况*)
eqn2 = Thread[D[r2[t], {t, 2}] == G*m1*r[t]/(r[t].r[t])^(3/2)];
eqn = Join[eqn1, eqn2];
ini1 = Thread[r1[0] == {3.84399*10^8, 0, 0}];(*Position of the Earth*)

ini2 = Thread[r1'[0] == {0, 1022, 0}];(*Speed of revolution*)
ini3 = Thread[r2[0] == {0, 0, 0}];(*Position of the Sun*)
ini4 = Thread[r2'[0] == {0, 0, 0}];(*Speed of Sun*)
ini = Join[ini1, ini2, ini3, ini4];
problem = Join[eqn, ini];
rule = Join[r1[t], r2[t]];
sol = NDSolve[problem, rule, {t, 0, 12*2.592*10^6}]

这里需要注意的一点是,你的位移的数量级比速度大了很多,所以要获得比较好的图像,就必须要修正下宽高比。其他的嘛,没什么特别的:

ParametricPlot[Evaluate[Norm /@ { D[r[t] /. sol, t], r[t] /. sol}], {t, 0, 12*2.592*10^6}, AspectRatio -> 1]追问

可否请您解释一下关于
Norm/@
这个命令,我看的不是很懂。我直接画{D[r[t]/.sol,t],r[t]/.sol}总是没东西,提示说“具体的数字不是变量”

追答

其实你看看帮助就该明白了……Norm是取模,因为你的方程是用分量表示的,现在要出图当然是要算出合位移和合速度。/@是Map,作用到列表的每一项,具体看帮助。Evaluate是强制计算,否则计算次序不对,因为ParametricPlot有HoldAll属性,也就是代入具体的点后再计算表达式,而求导D是必须作用于字母表达式的。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答