使用MATLAB / Mathematica建模动力系统

时间:2014-06-14 08:59:26

标签: matlab wolfram-mathematica

最近,我一直在某些动力系统上进行模拟,其中所有动态量都是相互依赖的。因此,为了模拟动态,我在小的时间步长dt <1上执行循环并且在每次迭代内改变量。模拟分别在Mathematica和Matlab中完成。 我得到了很好的结果,但由于迭代过程缓慢,模拟可能需要很长时间。一般来说,我听说应该避免像我使用的那样循环,因为它们会大大减慢模拟速度。另一方面,我对如何在没有小时间步骤迭代的情况下进行模拟毫无头绪。因此,我问你:对于一个动力系统,每个数量必须以超小的时间步进改变,那么模拟动力学的可能方法是什么。

1 个答案:

答案 0 :(得分:2)

直接的方法是将问题写成一组微分方程,并使用任一系统的ODE求解能力。 MATLAB和Mathematica都有先进的(可定制的)数值微分方程求解器,它们都支持微分方程中的特殊“事件”,这些事件不能用简单的公式表示(例如球从地板反弹的事件)

对于Mathematica,首先查看NDSolveWhenEvent,然后查看Advanced Numerical Differential Equation Solving tutorial

根据您的描述,您可能会使用天真的ODE求解方法,例如Euler method。使用更好的数字ODE求解技术可以提供显着的有效加速(通过不强迫您使用“超小时间步”)。

如果性能至关重要,请考虑使用C或C ++等低级语言重新实现模拟,并可能从Mathematica(LibraryLink)调用它,以便于数据分析和可视化。