Mathematica绘图我用NDSolve解出了一个位移随时间变化的函数.我希望以位移为横坐标,速度(也就是NDSolve解出来的函数的导数)为纵坐标画图,请问如何实现?Clear["Global`*"];m1 = 7.3477*10^22; m2 = 5.97219*
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 17:39:59
Mathematica绘图我用NDSolve解出了一个位移随时间变化的函数.我希望以位移为横坐标,速度(也就是NDSolve解出来的函数的导数)为纵坐标画图,请问如何实现?Clear["Global`*"];m1 = 7.3477*10^22; m2 = 5.97219*
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}]
Mathematica绘图我用NDSolve解出了一个位移随时间变化的函数.我希望以位移为横坐标,速度(也就是NDSolve解出来的函数的导数)为纵坐标画图,请问如何实现?Clear["Global`*"];m1 = 7.3477*10^22; m2 = 5.97219*
这里需要注意的一点是,你的位移的数量级比速度大了很多,所以要获得比较好的图像,就必须要修正下宽高比.其他的嘛,没什么特别的:
ParametricPlot[Evaluate[Norm /@ { D[r[t] /.sol,t],r[t] /.sol}],{t,0,12*2.592*10^6},AspectRatio -> 1]