clear;
clc;
close all
h = 0.5; %步长
t = 0:100000; %时间范围
N = length(t)/h; %迭代次数
G = 2.95912208286e-4; %万有引力常数
%初始位置
q1 = [0, 0, 0]’;
q2 = [-3.5023653, -3.8169847, -1.5507963]’;
q3= [9.0155314, -3.0458353, -1.6483708]’;
q4 = [8.3101420, -16.2901086, -7.2521278]’;
q5 = [11.4707666, -25.7294829, -10.8169456]’;
q6 = [-15.5387357, -25.2225594, -3.1902382]’;
q = [q1 q2 q3 q4 q5 q6];
q
%初始质量
m1 = 1; %太阳的质量
m2 = 0.000954786104043; %Jupiter木星的质量
m3 = 0.000285583733151; %Saturn土星的质量
m4 = 0.0000437273164546; %Uranus天王星的质量
m5 = 0.0000517759138449; %Neptune海王星的质量
m6 = 1/(1.3*10^8); %Pluto冥王星的质量
m = [m1 m2 m3 m4 m5 m6];
m
%初始速度
v1 = [0, 0, 0]’;
v2 = [0.00565429,-0.00412490,-0.00190589]’;
v3 = [0.00168318,0.00483525,0.00192462]’;
v4 = [0.00354178,0.00137102,0.00055209]’;
v5 = [0.0028930,0.00114527,0.00039677]’;
v6 = [0.00276725,-0.00170702,-0.00136504]’;
v = [v1 v2 v3 v4 v5 v6];
%动量
p1 = m1 * v1;
p2 = m2 * v2;
p3 = m3 * v3;
p4 = m4 * v4;
p5 = m5 * v5;
p6 = m6 * v6;
p = [p1 p2 p3 p4 p5 p6];
p
%万有引力
f1 = -G*(m1*m2*(q1-q2)/norm(q1-q2)^3+m1*m3*(q1-q3)/norm(q1-q3)^3+…
m1*m4*(q1-q4)/norm(q1-q4)^3+m1*m5*(q1-q5)/norm(q1-q5)^3+m1*m6*(q1-q6)/norm(q1-q6)^3);
f2 = -G*(m2*m1*(q2-q1)/norm(q2-q1)^3+m2*m3*(q2-q3)/norm(q2-q3)^3+…
m2*m4*(q2-q4)/norm(q2-q4)^3+m2*m5*(q2-q5)/norm(q2-q5)^3+m2*m6*(q2-q6)/norm(q2-q6)^3);
f3 = -G*(m3*m1*(q3-q1)/norm(q3-q1)^3+m3*m2*(q3-q2)/norm(q3-q2)^3+…
m3*m4*(q3-q4)/norm(q3-q4)^3+m3*m5*(q3-q5)/norm(q3-q5)^3+m3*m6*(q3-q6)/norm(q3-q6)^3);
f4 = -G*(m4*m1*(q4-q1)/norm(q4-q1)^3+m4*m2*(q4-q2)/norm(q4-q2)^3+…
m4*m3*(q4-q3)/norm(q4-q3)^3+m4*m5*(q4-q5)/norm(q4-q5)^3+m4*m6*(q4-q6)/norm(q4-q6)^3);
f5 = -G*(m5*m1*(q5-q1)/norm(q5-q1)^3+m5*m2*(q5-q2)/norm(q5-q2)^3+…
m5*m3*(q5-q3)/norm(q5-q3)^3+m5*m4*(q5-q4)/norm(q5-q4)^3+m5*m6*(q5-q6)/norm(q5-q6)^3);
f6 = -G*(m6*m1*(q6-q1)/norm(q6-q1)^3+m6*m2*(q6-q2)/norm(q6-q2)^3+…
m6*m3*(q6-q3)/norm(q6-q3)^3+m6*m4*(q6-q4)/norm(q6-q4)^3+m6*m5*(q6-q5)/norm(q6-q5)^3);
f = [f1 f2 f3 f4 f5 f6];
Time=[];H=[];
x1=[]; y1=[]; z1=[];
x2=[]; y2=[]; z2=[];
x3=[]; y3=[]; z3=[];
x4=[]; y4=[]; z4=[];
x5=[]; y5=[]; z5=[];
x6=[]; y6=[]; z6=[];
for k= 1:N-1 %Störmer-Verlet格式
x1=[x1 q1(1)]; y1=[y1 q1(2)]; z1=[z1 q1(3)];
x2=[x2 q2(1)]; y2=[y2 q2(2)]; z2=[z2 q2(3)];
x3=[x3 q3(1)]; y3=[y3 q3(2)]; z3=[z3 q3(3)];
x4=[x4 q4(1)]; y4=[y4 q4(2)]; z4=[z4 q4(3)];
x5=[x5 q5(1)]; y5=[y5 q5(2)]; z5=[z5 q5(3)];
x6=[x6 q6(1)]; y6=[y6 q6(2)]; z6=[z6 q6(3)];
p1 = p1 + h*f1/2;
p2 = p2 + h*f2/2;
p3 = p3 + h*f3/2;
p4 = p4 + h*f4/2;
p5 = p5 + h*f5/2;
p6 = p6 + h*f6/2;
q1 = q1 + h*p1/m1;
q2 = q2 + h*p2/m2;
q3 = q3 + h*p3/m3;
q4 = q4 + h*p4/m4;
q5 = q5 + h*p5/m5;
q6 = q6 + h*p6/m6;
q = [q1 q2 q3 q4 q5 q6];
f1 = -G*(m1*m2*(q1-q2)/norm(q1-q2)^3+m1*m3*(q1-q3)/norm(q1-q3)^3+…
m1*m4*(q1-q4)/norm(q1-q4)^3+m1*m5*(q1-q5)/norm(q1-q5)^3+m1*m6*(q1-q6)/norm(q1-q6)^3);
f2 = -G*(m2*m1*(q2-q1)/norm(q2-q1)^3+m2*m3*(q2-q3)/norm(q2-q3)^3+…
m2*m4*(q2-q4)/norm(q2-q4)^3+m2*m5*(q2-q5)/norm(q2-q5)^3+m2*m6*(q2-q6)/norm(q2-q6)^3);
f3 = -G*(m3*m1*(q3-q1)/norm(q3-q1)^3+m3*m2*(q3-q2)/norm(q3-q2)^3+…
m3*m4*(q3-q4)/norm(q3-q4)^3+m3*m5*(q3-q5)/norm(q3-q5)^3+m3*m6*(q3-q6)/norm(q3-q6)^3);
f4 = -G*(m4*m1*(q4-q1)/norm(q4-q1)^3+m4*m2*(q4-q2)/norm(q4-q2)^3+…
m4*m3*(q4-q3)/norm(q4-q3)^3+m4*m5*(q4-q5)/norm(q4-q5)^3+m4*m6*(q4-q6)/norm(q4-q6)^3);
f5 = -G*(m5*m1*(q5-q1)/norm(q5-q1)^3+m5*m2*(q5-q2)/norm(q5-q2)^3+…
m5*m3*(q5-q3)/norm(q5-q3)^3+m5*m4*(q5-q4)/norm(q5-q4)^3+m5*m6*(q5-q6)/norm(q5-q6)^3);
f6 = -G*(m6*m1*(q6-q1)/norm(q6-q1)^3+m6*m2*(q6-q2)/norm(q6-q2)^3+…
m6*m3*(q6-q3)/norm(q6-q3)^3+m6*m4*(q6-q4)/norm(q6-q4)^3+m6*m5*(q6-q5)/norm(q6-q5)^3);
f = [f1 f2 f3 f4 f5 f6];
p1 = p1 + h*f1/2;
p2 = p2 + h*f2/2;
p3 = p3 + h*f3/2;
p4 = p4 + h*f4/2;
p5 = p5 + h*f5/2;
p6 = p6 + h*f6/2;
%动能
T = 0.5*((p1’*p1)/m1+(p2’*p2)/m2+(p3’*p3)/m3+…
(p4’*p4)/m4+(p5’*p5)/m5+(p6’*p6)/m6);
%势能
V = -G*(m2*m1/norm(q2-q1)+m3*m1/norm(q3-q1)+m3*m2/norm(q3-q2)+m4*m1/norm(q4-q1)+…
m4*m2/norm(q4-q2)+m4*m3/norm(q4-q3)+m5*m1/norm(q5-q1)+m5*m2/norm(q5-q2)+…
m5*m3/norm(q5-q3)+m5*m4/norm(q5-q4));
Time=[Time k*h];
H=[H sum(T+V)];
k = k+1;
end
%plot(Time,H) %时间-哈密顿量绘图
plot3(x1,y1,z1) %行星轨迹图
hold on %保留图层不被覆盖
plot3(x2,y2,z2)
plot3(x3,y3,z3)
plot3(x4,y4,z4)
plot3(x5,y5,z5)
plot3(x6,y6,z6)