系数符号翻转时 scipy odeint 的精度问题

问题描述

设置

我正在尝试求解一个二阶微分方程,其中系数仅以数值方式已知(在下面的公式中,让后缀 d 为导数,即 Tdd 是 T 的二阶导数)

-Tdd - alpha * Td + beta * T == 0

方法

我使用 scipy.integrate.odeint(scipy 版本 1.5.2)以 2 个一阶 ODE 系统的形式求解这个方程。作为精度的衡量标准,我只是将 T 的解代入方程(并期望得到 0)。

问题

下图显示,在 beta 将符号从正数翻转为负数的那一点,精度如何下降到巨大的绝对值。

Precision in blue and the beta coefficient in orange. The horizontal line at 0 is just for orientation. The x axis is the coefficient of the array

到目前为止我尝试过的/有效的

这些解决方案还不错,并且在物理上接近我们的预期,但是从上下文中我知道它们有一个错误或 O(1e-4),这对于我们的案例来说太大了。解决方案当然表现良好,没有表现出任何激烈的行为。

我尝试了 100 到 1e8 步,但精度没有发生质的变化。

我在 odeint 中随机玩了很多参数,没有更深入地了解它们的作用,所有这些都没有改变精度/精度中的驼峰。

欢迎任何建议或提示:D

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)