5

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

有人试过这个吗??

谢谢

4

2 回答 2

5

不,你不能。

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

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

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

于 2013-05-13T17:59:15.697 回答
2

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

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

于 2013-07-13T23:10:19.620 回答