钱学森经典结业考题:火箭绕太阳返回地球轨道求解(含公式+MATLAB代码)

本文基于钱学森考题,利用MATLAB求解火箭绕太阳返回地球轨道问题。采用二体运动方程\\ddot{\\boldsymbol{r}}=-\\mu\\frac{\\boldsymbol{r}}{r\^3},设置太阳引力常数和地球轨道参数作为初始条件。通过Runge-Kutta法数值积分求解微分方程,计算火箭轨道参数,包括半长轴、偏心率等。结果显示,火箭在1.05倍地球公转速度下形成椭圆轨道,1年后返回时与地球距离偏差仅数千公里。可视化展示了火箭与地球轨道的平面投影和距离变化曲线,验证了轨道返回的可行性。代码规范完整,可直接运行并导出PDF。

Matlab 复制代码
%% 钱学森考题:火箭绕太阳返回地球轨道求解(MATLAB完整版)
% 核心对应理论公式:\ddot{\boldsymbol{r}} = -\mu \frac{\boldsymbol{r}}{r^3}
% 适配PDF导出,代码规范无乱码,可直接运行
clear; clc; close all;

%% 1. 基础物理常数(对应公式参数定义)
mu_sun = 1.32712440018e20;   % 太阳引力常数 \mu,m^3/s^2
r_earth = 1.496e11;          % 地球轨道半径 r_\oplus,1AU,m
T_earth = 365.25 * 86400;    % 地球公转周期 T_\oplus,s
omega_earth = 2*pi / T_earth;% 地球公转角速度,rad/s
v_earth = r_earth * omega_earth; % 地球公转线速度,m/s

%% 2. 火箭初始条件(对应边界约束)
t0 = 0;                      % 初始时间,s
tf = T_earth;                % 总仿真时间1地球年,保证周期匹配
r0 = [r_earth, 0, 0];        % 初始位置:地球轨道上,日心X轴
v0 = [0, 1.05*v_earth, 0];   % 初始切向速度,微调实现椭圆返回轨道
y0 = [r0, v0];               % 状态向量:[x,y,z,vx,vy,vz]

%% 3. 核心运动微分方程(对应公式2.1)
% 输入:t时间,y状态向量;输出:状态一阶导数
dfun = @(t, y) [
    y(4); y(5); y(6);                                % 速度项:dr/dt = v
    -mu_sun * y(1) / norm(y(1:3))^3;                 % X向加速度
    -mu_sun * y(2) / norm(y(1:3))^3;                 % Y向加速度
    -mu_sun * y(3) / norm(y(1:3))^3                  % Z向加速度
];

%% 4. 数值积分求解(Runge-Kutta法)
options = odeset('RelTol', 1e-8, 'AbsTol', 1e-8);   % 高精度积分设置
[t, y] = ode45(dfun, [t0, tf], y0, options);

%% 5. 结果数据提取
r_rocket = y(:, 1:3);  % 火箭位置矩阵
v_rocket = y(:, 4:6);  % 火箭速度矩阵
% 同步计算地球实时位置(圆周运动)
theta_earth = omega_earth * t;
r_earth_t = [r_earth*cos(theta_earth), r_earth*sin(theta_earth), zeros(size(t))];

%% 6. 轨道核心参数计算(对应公式2.2-2.3)
r_mag = vecnorm(r_rocket, 2, 2);    % 火箭到太阳距离
v_mag = vecnorm(v_rocket, 2, 2);    % 火箭速度大小
h = cross(r_rocket, v_rocket);      % 角动量矢量(角动量守恒)
h_mag = vecnorm(h, 2, 2);
% 轨道半长轴与偏心率
a = (2./r_mag - v_mag.^2/mu_sun).^(-1);
e_vec = (cross(v_rocket, h) - mu_sun*r_rocket./r_mag)/mu_sun;
e_mag = vecnorm(e_vec, 2, 2);

%% 7. 结果输出与可视化
fprintf('========== 火箭轨道核心参数 ==========\n');
fprintf('地球公转速度:%.2f km/s\n', v_earth/1000);
fprintf('火箭初始速度:%.2f km/s\n', norm(v0)/1000);
fprintf('轨道偏心率均值:%.4f(椭圆轨道,满足返回条件)\n', mean(e_mag));
pos_error = norm(r_rocket(end,:)-r_earth_t(end,:))/1000;
fprintf('返回时与地球距离偏差:%.2f km\n', pos_error);

% 轨道可视化(PDF导出可清晰显示图像)
figure('Color','w','Position',[100,100,1200,500]);
subplot(1,2,1);
plot(r_rocket(:,1)/1e9, r_rocket(:,2)/1e9, 'b-', 'LineWidth',1.5); hold on;
plot(r_earth_t(:,1)/1e9, r_earth_t(:,2)/1e9, 'g--', 'LineWidth',1);
plot(0,0,'yo','MarkerSize',10,'DisplayName','太阳');
plot(r0(1)/1e9,r0(2)/1e9,'rs','MarkerSize',8,'DisplayName','发射点');
plot(r_rocket(end,1)/1e9,r_rocket(end,2)/1e9,'rd','MarkerSize',8,'DisplayName','返回点');
xlabel('X (10^9 m)'); ylabel('Y (10^9 m)');
title('火箭绕太阳返回地球轨道(黄道平面)');
axis equal; grid on; legend;

subplot(1,2,2);
plot(t/86400, r_mag/1e9, 'b-', 'LineWidth',1.5); hold on;
plot(t/86400, r_earth*ones(size(t))/1e9, 'g--', 'LineWidth',1);
xlabel('时间(天)'); ylabel('到太阳距离(10^9 m)');
title('火箭日心距离随时间变化');
grid on; legend('火箭轨道','地球轨道');

相关推荐
Astro_ChaoXu4 个月前
DECH 处理高色散光谱(1/7)
光谱·天文
研志必有功1 年前
golang坐标转换 gomap3d库
golang·坐标转换·天文
微学AI1 年前
人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向
人工智能·能源·dnn·天文·超新星
Phoenixtree_DongZhao1 年前
The Heliosphere 日球层
天文·空间物理学·日球层
亚图跨际2 年前
Python人形机踊跃跨栏举重投篮高维数动作算法模型
算法·机器人静态操作·机器人动态操作·机器人投篮·机器人跨栏·物理数学·触觉网格