关于2的身体帮助行星模拟

15的观点(30天)
你好,
我一直负责创建一个简单的2 d行星仿真涉及固定太阳和3轨道行星。我开始试图创建一个模拟涉及太阳和地球1只和简化它们的质量和常数g .我相信应该恒定加速度这意味着一旦我找到加速度将重用它找到新的速度和位置。
我很新的MatLab和这样的我想应该是简单的代码。我们解决这个任务是使用牛顿的引力定律。另外的行星只能从太阳引力的影响(和太阳不应该受到任何行星的引力)。
这是我的尝试:
% %常量
全球G m_0 1
m_0 = 1000;%的太阳质量
1 = 1;%地球质量
G = 10 ^ (3);%引力常数
n = 1000;%的步骤
dt = 0.1;% Stepsize
% %方程
% R_se =√x ^ 2 + y ^ 2);%地球和太阳之间的距离
% F_se = G * m_0 * 1 / R_se ^ 2;%的太阳会影响地球的力量
% a_se = G * m_0 / R_se ^ 2;%现代= f / 1与牛顿发现2。法律f = m *
% xdotdot = - g * m_0 * x / R_se ^ acc (3/2) %。在x
% ydotdot = y - g * m_0 * / R_se ^ acc (3/2) %。在y
% %开始为太阳和地球pos.和速度
%的太阳——静止
x_sun = 0;
y_sun = 0;
vx_sun = 0;
vy_sun = 0;
% %地球——这些值是随机选择但我希望使用Ephimerides(?)来自Nasa与实际值一旦我得到我的代码工作
x = -10;
y = 11;
vx = 9;
v = 5;
计算
% %发现半径和acc的开始值。(因为我假设acc。常数,恐怕不会是真的)
R_se =√x ^ 2 + y ^ 2);
ax = - g * m_0 * x / R_se ^ (3/2);
唉= y - g * m_0 * / R_se ^ (3/2);
n = 1: n - 1
% %寻找新的值半径、速度和位置。
vx_new = vx + ax * dt;
vy_new = v + ay * dt;
x_new = x + vx_new * dt;
y_new = y + vy_new * dt;
R_se_new =√x_new ^ + y_new ^ 2);
vx = vx_new;
v = vy_new;
x = x_new;
y = y_new;
R_se = R_se_new;
持有
情节(x_new y_new),“。”);
轴([-100 100 -100 100]);
drawnow;
结束
所以我的想法是,首先我找到加速度将常数。然后我找到了新的速度在x和y平面通过使用旧的速度。从我发现新的位置使用旧的位置和新速度乘以stepsize。然后我找到一个新的半径在地球和太阳之间使用新的职位。
一旦超过我说旧的值是新的,这样循环回旧值时将新的和更新的值将由新的。(如果你知道我的意思)。
存在的问题:
当我运行这个我做图但根据开始值我选择为地球我得到2移动的点只在x飞机。我已经尝试改变很多次的值没有运气。
首先太阳不应该移动,应该只显示为一个固定的点和第二所有地球应该围绕太阳转着圈。
对不起大墙的文本!
3评论
图像分析
图像分析 2016年12月17日
是的这是更好的,虽然你可能会摆脱双间距的你可能在当你不知道如何正确地将其格式化。一定要读约翰的回答如下。

登录置评。

接受的答案

约翰D 'Errico
约翰D 'Errico 2016年12月17日
编辑:约翰D 'Errico 2016年12月17日
首先,你为什么需要全局变量?你不是叫什么呢!
学会将变量作为参数传递给函数,将会需要他们。全局变量是一个新手编程你从来都不需要拐杖,但是会导致你的问题在未来,通过代码bug和调试更加困难。
接下来,你继续谈论加速度是一个常数。没有什么可以进一步从真相!而引力常数是一个常数,加速度随时间!如果加速度假设地球是一个常数,那么你的行星将在一条直线,速度越来越快,最终超过光速。我希望你计划添加相对论运动仿真。否则,当地球超过光速,事情可能会变得很有趣。
看代码,实际上,你设置ax和ay以外的循环,没有改变过。这是你在做什么。太空船地球、报告义务!这颗行星是太阳系的外,并很快,星系。
关键是,为了一颗行星维持一个轨道,x和y方向上的加速度将确实有所不同。事实上,地球的加速度将永远是尖向内,向太阳。但方向的加速度会有所不同,不同的行星绕着太阳。
你可以把这个在极坐标形式。所以总是径向向内的加速度。这可能是你在想什么,在极坐标,只要半径保持不变,然后加速确实是常数。但径向向量的方向不断变化当你移动一个圈。速度将正交加速,如果地球在轨道上。所以你的行星保持不断加速向太阳,但保持在轨道上。是的,隐约似乎自相矛盾,但这是轨道运动是如何工作的。
所以,是的,你需要让G一个常数。他们称之为引力常数的一个很好的理由。但是你不能让ax和ay常数!
我还指出,太阳的位置本身不是常数。所以更好的模型有太阳反应部队,朝着小圆圈本身。从本质上讲,太阳和地球音乐会,部队上的每个代理他们的感觉。
最后,有一件事你会意识到的是,在很长一段时间,身体将积累的预测位置错误。您正在使用欧拉方法整合实际上是一个微分方程组。这将是一个更好的选择使用这个问题的更好的方法。所以你可能会制定问题作为一组微分方程,然后喂到这样的ODE求解器数值。
我不是说数值是你真正需要使用你的问题,但这将是一个更好的方法来解决一般问题。好消息是你允许的解算器做所有的工作。由专家编写良好的编程实践使用工具来解决你的问题。不懂的,你需要自己写这些连接器。事实上,太多的人认为他们所做的。他们学会了如何解决问题,在一些基本的类编程或数学,从而解决颂歌,优化等等。当他们是时候做一些严肃的工作,他们认为他们需要代码牛顿法。错了。
4评论
约翰D 'Errico
约翰D 'Errico 2016年12月18日
我同意让太阳静止不动是一个有效的近似。我还解释了为什么这是一个有效的近似,以及如何知道为什么会这样。我的观点是,这是一个近似值,它可能的一件事会添加到一个更完整的太阳系的模型。
看起来你已经接近一个可行的模型,现在正在计算加速度与每个迭代。
以确保它正常工作,我首先仔细检查模型中的参数,因为您正在使用一种非正宗的单位系统。
m_0和1我可以接受,因为这些单位千克。
接下来,我会看看G,并仔细确认它是正确的单元系统的非盟作为一个单位的距离,时间单位为天。
编程风格的一点,我不会使用这里m_0和1作为变量名。相反,m_sun和m_earth一样容易类型,并使您的代码更容易验证和调试。编号的变量,如可以迷惑和将来会导致头痛。
所以只要你有两个物体,m_sun m_earth工作。如果你要添加的行星,那么您可以使用一个向量长度(9)对地球质量。存储位置,速度,加速度每个在自己的向量或数组。更好的将是地球位置存储在一个9 x2数组,因此第一列坐标,第2列是y。那么地球将被发现在xy (3:)。
再一次,这是你想要开始考虑未来,如果你想扩展这个模型。
你现在变得更近。

登录置评。

更多的答案(0)

类别

找到更多的在地球和行星科学帮助中心文件交换

社区寻宝

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

开始狩猎!