数值求解具有时间相关参数的 ODE 的算法

计算科学 龙格库塔
2021-12-15 02:09:11

谁能解释一下用时间相关参数求解 ODE 的 IVP 系统的数学算法是什么。例如

   dy1/dt = a1(t) * y2 -b1(t)* y3 -c1(t) y1;
   dy2/dt = a2(t) * y1 -b2(t)* y1 -c2(t) y3;
   dy3/dt = a3(t) * y2 -b3(t)* y3 -c3(t) y1;

y(0)=c; 到目前为止,我的想法是,对于固定的时间步长,我应该形成一个 a、b、c 的向量,并假设 a、b、c 在该时间段内保持不变。如果系统僵硬怎么办?谁能给我一个想法如何使用c ++ boost库来解决它?先感谢您。

1个回答

给定一个 ODEy˙(t)=f(y(t),t),大多数(如果不是全部)算法在指定点简化为函数评估和雅可比评估ty. 为了说明,显式欧拉的一步是

yn+1=yn+(tn+1tn)f(yn,tn).

如果您有一个与时间相关的参数,请将其视为f,函数评估(分别对于隐式方法,也将其视为雅可比评估的一部分)。类似的策略适用于求解 ODE 的更复杂的方法(多阶段方法,例如 Runge-Kutta、刚性系统的隐式方法等)。此策略不同于假设您的参数在一个时间步长上保持不变 - 对于多阶段方法,假设您的参数在一个时间步长上保持不变将导致中间阶段的函数评估不准确并降低您的方法的顺序。

至于使用 C++ Boost 库解决它,您可以尝试查看Boost odeint文档。