matlab实现绘制卫星绕地球静态轨道

题设:有一颗卫星,在给定任意的速度与高度的条件下,绘制出卫星轨道。

绘制场景

将地球球心放在坐标系原点,然后自己设定卫星(不单独画出来,就当作点状)的相关参数如速度矢量、位置矢量。

%绘制地球
alpha=0:pi/40:2*pi;
earth_x=R*cos(alpha);
earth_y=R*sin(alpha);

设定参数:

%设定卫星位置矢量与速度矢量以及所受引力
i=1;
%以下为可修改区域
vx(i)=-50; %卫星速度在x轴上的分量m/s
vy(i)=6070; %卫星速度在y轴上的分量m/s
rx(i)=18164*1000; %卫星位置坐标x(单位m)
ry(i)=-8600*1000; %卫星位置坐标y(单位m)
%以上为可修改区域
Fx(i)=-z*m*rx(1)/((rx(1)^2+ry(1)^2)^1.5);
Fy(i)=-z*m*ry(1)/((rx(1)^2+ry(1)^2)^1.5);

原理介绍

已知卫星的初始位置矢量\vec{r_0}、速度矢量\vec{v_0}与所受的引力\vec{F_0},那么在dt后,新的速度矢量为\vec{v_1}=\vec{v_0}+\frac{\vec{F_0}}{m}dt,进而求出新的位置矢量\vec{r_1}=\vec{r_0}+\vec{v_1}dt,然后再用\vec{r_1}求出新的位置所受的引力\vec{F_1},以此类推迭代出下一步新的位置矢量与速度矢量。

迭代实现

%开始迭代
while i<130*3600 %可改卫星运行时间
    %卫星开始运行至绕地球一周
    vx(i+1)=vx(i)+Fx(i)/m*dt;
    vy(i+1)=vy(i)+Fy(i)/m*dt;
    rx(i+1)=rx(i)+vx(i)*dt;
    ry(i+1)=ry(i)+vy(i)*dt;
    Fx(i+1)=-z*m*rx(i+1)/((rx(i+1)^2+ry(i+1)^2)^1.5);
    Fy(i+1)=-z*m*ry(i+1)/((rx(i+1)^2+ry(i+1)^2)^1.5);
    i=i+1; 
end

 注意,因为用米做单位,程序内的数字基本上是非常大的数字,这些数字作大小比较就会出现非常大的误差,所以程序最大的bug就是卫星运行时间需要自己一步一步地手动输入数字去拟合。

额外数据设定

同样可以数据更新以实现可视化。 

%计算数据
T=i;%运行时间(单位秒)
dx=diff(rx);
dy=diff(ry);
ds=sqrt(dx.^2+dy.^2); %弧微分
road=sum(ds); %轨迹长度
%开始绘图
figure();
plot(rx,ry,'r-',earth_x,earth_y,'b-');
axis equal;
axis([-15*R 15*R -15*R 15*R]);
grid on;

xlabel('轨迹长度是'+string(road)+'m');
ylabel('运动周期是'+string(T)+'s');
legend('卫星轨迹','地球外围');
title('卫星轨迹模拟');

%若出现轨迹与地球相交,则说明卫星在此模拟情形中会做向心运动直至撞向地球

运行结果展示

1.模拟地球同步卫星: 

2.模拟大椭圆轨道:

3.模拟抛物线轨道中的一部分:

 

代码可能有误或亟需优化的地方,恳请各位大佬斧正指点。 

编写卫星地球轨道MATLAB程序涉及到多个步骤和方面。首先,我们需要确定卫星的初始位置和速度,以及地球的质量和大小。然后,我们可以使用牛顿万有引力定律来计算卫星地球引力作用下的运动轨迹。 在MATLAB中,我们可以定义一个函数来计算卫星在某一时刻的加速度。该函数可以根据卫星当前的位置和速度、地球的质量和位置来计算卫星受到的引力加速度,并考虑其他外力的影响(例如大气阻力)。我们可以使用Euler方法或其他数值积分方法来更新卫星的位置和速度。 在编写程序时,我们还可以考虑卫星轨道形状。例如,我们可以使用椭圆轨道模型,根据卫星的离心率和半长轴来确定轨道的形状,并计算卫星在不同时间点的位置。我们可以使用MATLAB的绘图函数来可视化卫星的轨迹。 此外,我们还可以通过编写一个函数来模拟卫星的发射和轨道控制过程。该函数可以根据卫星的初始位置、速度和发射角度模拟卫星的发射,并考虑推力和推力方向变化对卫星轨道的影响。我们可以通过改变发射角度、发射时刻和推力参数来探索不同的轨道设计方案。 综上所述,MATLAB编写卫星地球轨道的程序需要考虑多个因素,包括卫星的运动模型、轨道形状、初始条件和轨道控制等。通过开发合适的数值计算和绘图方法,我们可以模拟和可视化卫星轨道运动,为卫星轨道设计和控制提供有价值的工具和技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值