Matlab——行星轨道问题

要求:根据牛顿第二和万有引力定律求解行星轨道方程并带入一组实际数据进行验证
Matlab——行星轨道问题_第1张图片

clear;
clc;
%给定量
M=1.9891*10^30;                    %太阳的质量
G=6.67259*10^(-20);                %引力常数km^{
     3}/kg~s,本来是6.67×10^{
     -11}m^{
     3}/kg~s
theta0=0;dr0=0;                    %初始角度和角速度
day_s=24*60*60;                    %单位换算天换成小时
%地球、金星、水星
T=[365,224.7,87.9691]*day_s;       %公转周期s
v=[29.783,35.03,47.8725];          %公转线速度km/s
r0=[147098074,107476259,46001200]; %近日点km
n=length(v);Number_of_planets=n;
%%-------------------------------------------------------------------------
%开普勒法
colordef black;
for k=1:n
    dt=1;
    t=0:dt:T(k);           %自变量
    dtheta0=v(k)/r0(k);    %公转的角速度
    %模拟先设定成0向量等会给每个元素一一赋值
    r=zeros(1,length(t));
    dr=zeros(1,length(t));
    theta=zeros(1,length(t));
    dtheta=zeros(1,length(t));
    dr(1)=dr0;r(1)=r0(k);theta(1)=theta0;dtheta(1)=dtheta0;  %初始值
    legend(['地球|金星|水星的 第',num2str(t(k))+1,' 个']);    %标明仿真的行星
    for i=1:length(t)-1
        theta(i+1)=theta(i)+dtheta(i)*dt;
        dtheta(i+1)=dtheta(i)-2*dr(i)*dtheta(i)*dt/r(i);
        r(i+1)=r(i)+dr(i)*dt;
        dr(i+1)=(r(i)*dtheta(i)^2-G*M/r(i)^2)*dt+dr(i);
    end
    polarplot(theta,r)
    title('Planetary motion')
    pause(0.02)
    hold on
    %theta-2*pi取绝对值再求最小值来找2pi对应的时间即是周期
    find(abs(theta-2*pi)==min(abs(theta-2*pi)))
end

效果如图:Matlab——行星轨道问题_第2张图片
注意事项:
1.单位统一
2.M是太阳的质量
3.角速度用近日点的线速度除以r0就可以
4.万有引力方向指向圆心 必定是负的,千万不要漏掉负号哟不然会画出来Matlab——行星轨道问题_第3张图片
6.可以用sqrt(GM/r0)来验证带入的数据是否正确
代入的初始角速度乘以r0范围应该在sqrt(GM/r0)和根二倍的sqrt(GM/r0)之间
如果不满足这一条件 一定不可能是闭合轨道
要么是双曲线轨道 要么之间撞太阳
7.找周期的方法:可以用theta-2pi然后取绝对值 再求最小值
以上思路均由饺子助教提供。

你可能感兴趣的:(Matlab,matlab)