警告,我不确定此问题是否属于此处或Math Stack Exchange。它主要是性能问题,但它主要涉及微分方程求解器。
无论如何,在Matlab中,我目前使用以下代码语法来解决微分方程:
f0 = [tot;zeros(size-1,1)];
options=odeset('RelTol',1e-7, 'AbsTol', 1e-10);
[T,S] = ode15s(@myfunc, [t0,tF], f0, options, k1, k2, k3, n, size, r);
%Rest of code, including a function myfunc
现在,我的问题如下:" size"对于我的微分方程系统,变量需要设置为10000的数字。另外,我目前正在使用ODE15s,主要是因为我正在重复使用代码:我最近发现它是为刚性微分方程设计的,而且我使用的微分方程具有相当稳定的粗糙行为,无论其如何一步的大小。现在,它需要我的代码超过一周(实际上接近两个)在一台相当快速的处理机器上运行。
所以我的问题是:切换到像ODE45或ODE23这样的非刚性ODE求解器会更快吗?我在这个主题上所做的所有谷歌搜索给了我的是,如果我的方程是僵硬的,那么使用刚性微分方程求解器会更快。
答案 0 :(得分:1)
完全是ode45!
这是因为ode45使用了4th orderrunge-kutta方法(这是明确的),但是ode15s使用了Gear的方法(这是隐含的)。这就是为什么如果你的系统不僵硬,你最好选择ode45。
对于ode23(这是bogacki shampine方法),肯定它比ode15s好,但仍然选择ode45,因为matlab也建议这样。