我在模拟太阳系(太阳、地球和月球)。当我第一次开始做这个项目的时候,我用的是基本单位:米代表距离,秒代表时间,米每秒代表速度。因为我处理的是太阳系,这个数字很大,例如地球和太阳之间的距离是150·10⁹ m。
当我将系统与scipy.solve_ivp进行数值集成时,结果是完全错误的。这里是地球和月球轨道的一个例子。

但是后来我从一个朋友那里得到了一个建议,我应该使用标准化的单位:天文单位 (AU)表示距离,使用年份表示时间。模拟开始完美无缺地工作!
我的问题是:为什么对于像我这样的问题,这是一个普遍有效的建议?(请记住,这不是我已经解决的具体问题,而是解决办法的原因。)
发布于 2021-07-23 20:05:06
如果下列情况下,大多数集成模块(如果不是所有集成模块)都能最好地发挥作用:
这在天文模拟中通常是失败的,因为在典型单位中,数量级不同,数值和时间尺度往往很大。
造成积分器以上行为的原因是它们使用了步长适配,即调整积分步骤以将估计误差保持在定义的水平上。步长适配又由许多参数决定,如绝对公差、相对公差、最小时间步长等。通常可以调整这些参数,但如果不调整,则需要有一些默认值,而这些默认值是根据上述设置选择的。
离题
您可能会问自己:这些参数不能更动态地选择吗?作为集成模块的开发人员和维护者,我大致预期引入这样的自动化会产生以下后果:
https://stackoverflow.com/questions/68500704
复制相似问题