你好,有人能告诉我一个简单的代码来显示地球围绕太阳公转轨道用常微分方程。

248(30天)
函数Earthsorbit
e = 2;
y0 =[1 0 2 *π-π];
tspan = [0, 10];
选择= odeset (“RelTol”1的军医,“AbsTol”1的军医);
[t、y] =数值(@earthorbit tspan, y0,选项);
i = 1:长度(t)
流(' % 2我% 7.5 f % 7.5 f \ n”,我,t (i), y (i));
结束
情节(t y (: 1),“- - -”);
标题(的解决方案将给我们身体在二维的轨道。);
包含(“t”);
ylabel (“解决方案y”);
结束
函数f = earthorbit (t, y)
f = 0 (4,1);
通用= 4 *π^ 2;
r =√(1) ^ 2 + y (3) ^ 2);%对象之间的距离
f (1) = y (2);
f (2) = - - - GM * y (1) / r ^ (3/2);
f (3) = y (4);
f (4) = - - - GM * y (3) / r ^ (3/2);
结束
不是显示我圆我的欲望。
5个评论

登录置评。

答案(2)

阿尔瓦罗·罗梅罗卡尔沃
这就跟你问声好!
如果你想要一个简单的2的身体在2 d不考虑扰动方法,看看这个(参数提取 美国国家航空航天局 ):
函数(r, v, T) = simpleorbit
%执行2 d集成在地球轨道太阳2具尸体
%方程
%的轨道参数:
e = 0.0167;%的轨道离心率
mu_S = 132712439935.5;%太阳参数(公里/ s ^ 3 ^ 2)
R_S = 6.957 * 10 ^ 5;%太阳半径(公里)
= 149.6 * 1 e6;%半长轴(公里)
theta0 = 0;
%的时间
T = 2 *π*√(^ 3 / mu_S);
tfin = T;
%集成电路:
rx0 = a *(单电子^ 2)/ (1 + e * cos (theta0));
vy0 =√2 * mu_S / rx0-mu_S / a);
X0 = [vy0 rx0, 0, 0, 0, 0);
选择= odeset (“Reltol”1 e15汽油,“AbsTol”1 e15汽油);
%集成:
(T, X) = ode113 ([0, tfin], @dynamics X0,选项,mu_S);
r = [(: 1), X (:, 2), X (:, 3)];
v = [(:, 4), X (:, 5), X (:, 6)];
%额外的结果:
h =交叉(r, v);
ev =交叉(v (1:), h (1:)) / mu_S-r(1:) /规范(r (1:));
%画出地球
[sx, sy,深圳]=球(100);
冲浪(R_S * sx, R_S * sy, R_S *深圳,“EdgeColor”,“没有”,“FaceColor”,“y”)
%的方面
持有
平等的
网格
轴([2 * 2 * 2 *,2 *,2 * R_S, 2 * R_S])
%的情节:
% quiver3 (0, 0, 0, h (1, 1), h (1、2), h (1、3))
quiver3(0, 0, 0,电动汽车(1),电动汽车(2),电动汽车(3))
comet3 (r (: 1), r (:, 2), r (:, 3))
quiver3 (r(1:10:结束,1),r(1:10:结束,2)、r(1:10:结束,3),v(1:10:结束,1),v(1:10:结束,2),v(1:10:结束,3))
结束
函数(dX) =动力学(~,X,μ)
rx = X (1);
ry = X (2);
rz = X (3);
vx = X (4);
v = X (5);
vz = X (6);
r =√rx。^ 2 +。^ 2 + rz。^ 2);
dX (1,1) = vx;
dX (2, 1) = v;
dX (3,1) = vz;
dX(4,1) =μ* rx / r。^ 3;
dX(5、1) =μ*国家/ r。^ 3;
dX(6,1) =μ* rz / r。^ 3;
结束
对于先进的轨道计算,您将需要使用一个传播算子(如高斯方程)。
希望它可以帮助!
9日评论

登录置评。


詹姆斯Tursa
詹姆斯Tursa 2018年2月2日
编辑:詹姆斯Tursa 2018年2月2日
你最大的问题是,你有一个第4单元状态向量定义了y0(只显示x - y平面运动),但你的导数函数假设6-element 3 d运动状态向量。这是一个不匹配。选择一个或另一个,是一致的。我建议使用3 d版本……你可以设置平面运动,如果你想要的。
下一个问题是你的初始状态向量y0。为什么π参与作为状态向量元素?我可能期望看到sin(π)或cos(π)如果你是设置了最初是在一个圆,但没有直接π。
你需要定义一个μ值重力计算并传递到导数代码。例如,这样的:
μ=_____;%一些适当的值为状态向量单位使用
[t、y] =数值(@ (t, y) earthtwo (t yμ)tspan, y0,选项);
,然后改变你的签名导数函数包括μ:
函数f = earthtwo (t yμ)
所以,你需要安排你的初始状态向量,定义值μ,然后改变你的导数代码正确使用y和μ。例如,
rx = y (1);
ry = y (2);
rz = y (3);
vx = y (4);
v = y (5);
vz = y (6);
你一直在这大约一个星期了,所以我继续和修改你的代码运行在3 d制作上述修正。我继续和选择的单位是米和秒,因为这就是太阳引力的单位是我下了Wiki。但是你可以改变单位是其他的东西,程序仍然正常运行(导数函数不在乎什么单位是…它只需要μ与y)单位保持一致。最后,导数数值的函数调用的签名必须(t, y)。自传入我们也希望μ(我认为这是更好的比μ值硬编码到常规导数),清洁的方法是创建一个函数处理动态的(t, y)签名但调用实际的导数函数与任何你想要的额外参数,如μ:@ (t, y) earthtwo (t yμ)
改变代码运行的卫星绕着地球,所有你需要做的是改变μ地球重力和建立一个适当的初始状态向量和时间跨度。
函数earthmain
μ= 1.32712440018 e20;% m / s ^ 3 ^ 2
r = 149597870700;% m (= 1 AU)
vcirc =√μ/ r);% m / s(圆周速度给定值的r)
y0 = [r;0;0;0;vcirc;0);% m和m / s(启动速度与+ y轴方向)
tspan = [0, 365.25 * 86400);%一年时间跨度
选择= odeset (“RelTol”1的军医,“AbsTol”1的军医);
[t、y] =数值(@ (t, y) earthtwo (t yμ)tspan, y0,选项);
% i = 1:长度(t)
%流(' % 2我% 7.5 f % 7.5 f \ n ',我,t (i), y (i));
%结束
图;
情节(y (: 1), y (:, 2),“- - -”);%的情节只有x - y平面因为我们设置的东西
广场
网格
标题(的解决方案将给我们身体在二维的轨道。);
包含(“x (m)”);
ylabel (“y (m)”);
结束
函数f = earthtwo (t yμ)
rx = y (1);
ry = y (2);
rz = y (3);
vx = y (4);
v = y (5);
vz = y (6);
r =√rx。^ 2 +。^ 2 + rz。^ 2);
f = 0 (6,1);
f (1) = vx;
f (2) = v;
f (3) = vz;
f(4) =μ* rx / r。^ 3;
f(5) =μ*国家/ r。^ 3;
f(6) =μ* rz / r。^ 3;
结束
9日评论
詹姆斯Tursa
詹姆斯Tursa 2018年3月13日
编辑:詹姆斯Tursa 2018年3月13日
这是令人惊讶的对我来说是多么困难找到一个在线参考方程使用。有很多参考轨道力学方程的积分(从技术上讲,相对运动微分方程),和大量的引用的惯性运动微分方程,但我找不到任何引用双体的相对运动方程的问题……直到今天。这里的引用:
之间的区别是什么惯性运动方程和相对运动方程?简单地说,两体问题的惯性运动方程是一个惯性参考系(例如牛顿帧),包括12阶系统》(3位置元素和3速度为每个元素的身体对一个惯性坐标系)。相对运动方程的双体问题你减去他们的惯性运动方程,导致一个身体的位置和速度相对于另一个。这减少了最初的12日订单颂歌系统6日订单ODE体系。它的解决方案是6日订单“相对”歌唱系统,总是在文献(6积分称为轨道力学方程,6积分常数称为轨道要素)。你能找到这个相对颂歌系统在1.3节讨论上面的链接。特别是,您会注意到,方程1.33(这是你解决在ODE MATLAB代码):
方程(1.33) r2 dotdot - r1 dotdot = r dotdot = - g * (m1 + m2) r / r ^ 3
这个等式的左边可以看到两具尸体的位置衍生品减去这是最重要的线索,这些都是相对运动方程和非惯性运动方程。同样,你看到术语和群众作为G * (m1 + m2)而不是添加的质量乘以G * m1 *平方米。这是另一个线索,这些都是相对运动方程而不是惯性运动方程。这是向量 r r 点解。
这关系到你的代码如下:
r 向量相对颂歌方程(1.33)是第一个三个元素y y状态向量(1:3),和速度 r 点是最后三个元素y y状态向量(4:6)。μ代码中就是G * (m1 + m2)任期ODE方程(1.34)。从这一点,你也能很容易地关联相对赋给1.33线与你earthtwo()函数的代码。
注:卫星工作在行星的质量远远超过卫星的质量,只有地球的μ是必要的。但对于行星环绕太阳地球质量,虽然比太阳小得多,也许不应该被认为是可以忽略不计。在这种情况下,这将是技术上更合适的结合两亩。例如,在你的情况下你会使用一个μ= mu_sun + mu_earth方程。例如,
mu_sun = 1.32712440018 e20;% m / s ^ 3 ^ 2
mu_earth = 3.986004418 e14灯头;% m / s ^ 3 ^ 2
μ= mu_sun + mu_earth;

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!