是否有可能从matlab提高ODE求解器的速度? (ode45 ode15s等)

时间:2013-05-13 17:03:14

标签: matlab ode

我在matlab中使用ode45和ode15s编写了一个代码来解决系统问题。我想知道我是否可以在我的脚本中使用多核(或并行代码)来提高代码的速度。

有人试过这个吗??

由于

2 个答案:

答案 0 :(得分:5)

不,你不能。

所有数值积分器ode45和包含的朋友使用某种形式的迭代方案来求解用户实现的(耦合的)非线性(部分)微分方程。

ode45/15s/..的迭代方案中的每个新步骤(用于计算系统的新状态)取决于前一步骤(系统的旧状态),因此,这些数值积分器无法有效并行化。

你可以做的唯一可能产生重大影响的加速是优化微分方程的实现。

答案 1 :(得分:2)

根据我的经验,在MATLAB中为ODE套件解算器使用多个内核的唯一方法是使用“parfor loop”同时启动多个计算,单个计算不会更快,但你可以启动许多在漫长的等待之后,使用不同的参数并有多个解决方案因此,如果您需要多次启动ODE,可能会加快您的工作速度。

为了加快一个ODE功能,最好还是使用RelTol和AbsTol设置(从几秒钟到几小时更改时间),使用Jpattern选项也非常有帮助(我的几乎三角形模式使其运行速度提高了两倍) 。如果您的微分方程很简单,可以尝试先编译它,或者至少进行矢量化(我曾经用Java编写代码的一部分,然后指向MATLAB使用编译的.class文件)。显然,你的解决方案向量的长度起着重要的作用,所以不要让它超过几个。