微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决系数符号翻转时 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 举报,一经查实,本站将立刻删除。