【发布时间】:2026-01-22 21:15:01
【问题描述】:
大师们:
用于模拟航天器运动的微分方程可以用一组加速度项来描述:
d2r/dt2 = a0 + a1 + a2 + ... + an
通常a0是物体的点质量加速度(a0 = -mu * r/r^3); “高阶”项可能与其他行星、太阳辐射压力、推力等有关。
我正在实现一组旨在用于此类系统的算法。我将从 Python 开始进行设计和原型设计,然后我将转向 C++ 或 Fortran 95。
我想设计一个类(或元类),它允许我为给定实例指定不同的加速项,类似于:
# please notice this is meant as "pseudo-code"
def some_acceleration(t):
return (1*t, 2*t, 3*t)
def some_other_acceleration(t):
return (4*t, 5*t, 6*t)
S = Spacecraft()
S.Acceleration += someacceleration + some_other_acceleration
在这种情况下,实例 S 将默认使用两个加速项,我将添加我想要的其他两个项:some acceleration 和 some_other_acceleration;他们返回一个向量(这里表示为一个三元组)。请注意,在我的“实现”中,我重载了 + 运算符。
这样,算法将为抽象的“航天器”设计,所有实际力场都将根据具体情况提供,使我能够使用简化模型、比较建模方法等。
您将如何实现一个类或元类来处理这个问题?
对于这个相当冗长且解释不清的问题,我深表歉意,但我的大脑有点模糊。
谢谢。
【问题讨论】:
-
不要敲Python,但是有专门为这样的计算繁重的任务量身定制的环境。想到了matlab。您想做的一些事情可能会更自然或更容易地实现。
-
@Carl:Python 用于在我转向更强大的编译语言之前对解决方案进行原型设计。如果逻辑和设计在 Python 中运行良好,那么我已经完成了在 C++ 中部署一个很棒的应用程序所需的 80% 的工作。至于为计算量大的任务定制解决方案,那是我的工作:)
-
根据任务的不同,我执行的一些基准测试显示在 MATLAB 和 Python 中的性能相当,并且两种语言具有相似的功能(当您将 numpy/scipy/matplotlib 与 Python 一起包含时)。我建议有人从一个切换到另一个的唯一原因是特定于您的领域(到 MATLAB)或价格(到 Python)的 MATLAB 工具箱 - 否则,我认为 MATLAB/Python 中的原型设计在优化之前是完美的......顺便说一句,我假设您找到了解决方案,因为这已经很老了?
-
是的。我选择了一个运作良好的设计。我对速度不是很感兴趣(那是次要的——设计是第一位的),因为最终一切都将在 C++ 中实现,但原型需要快速完成。
标签: python math oop simulation physics