Matlab 中的非平滑集成:Cash-Karp vs Dormand-Prince

计算科学 时间积分 龙格库塔
2021-12-20 06:02:31

如何使用 Matlab 集成非平滑函数?可以使用现金卡普方法吗?Dormand-Prince 方法在集成非平滑解时似乎会出错。

我正在使用 MATLAB ODE45 来积分我的常微分方程。

在此处输入图像描述

{q}是长度为 14 的列向量。右侧的激振力以下列形式变化

在此处输入图像描述

在哪里{hp},{gp},{hg}, 和{gg}是长度为 6 的列向量

我称它为不光滑是因为{Fexcit}Fmf.

方程组可以在以下情况下求解Fmf=0. 什么时候Fmf是非零,我收到一个警告,实际上表明无法执行积分。

Warning/Error Message in Matlab

Warning: Failure at t=1.821477e+00.  Unable to meet
integration tolerances without reducing the step 
size below the smallest value
allowed (3.552714e-15) at time t.

我确实尝试过 ODE15S,但错误出现的时间比 ODE45 早得多。两者都给了我同样的错误

我用方括号来表示矩阵,用花括号来表示向量。

1个回答

您确实没有提供足够的信息来诊断问题的原因(例如,我不知道您的 q 向量的维度是两百万还是两百万)但是根据您的错误消息猜测,我怀疑它有什么与强制功能的“平滑度”有关。

通常,当您收到您显示的错误消息时,调试这些 MATLAB ODE 求解器的方法是重复分析,在故障时间(例如 1.8 秒)之前停止。您希望以足够的时间步长保存解决方案,以便将一些关键因变量绘制为时间的函数。我认为这些中的一个或多个很可能会在最后一次附近出现正负无穷大。

其原因很可能是您的公式或 ode45 输入中的错误。

第二种可能性是您的系统本质上是不稳定的。

第三种可能性是您的 ODE 系统僵硬,这导致 ode45 出现问题。ode45 不是为求解刚性 ODE 系统而设计的。更改为具有不同 Runge-Kutta 对的 ode 求解器或其他一些显式求解器将无法解决此问题。您显示的形式的刚性系统的首选 MATLAB 求解器是 ode15s。