【发布时间】:2020-08-21 22:53:04
【问题描述】:
所以,我尝试使用 Bulirsch-Stoer 自适应方法解决 EDO,但我收到了溢出警告。如何解决?
from math import sin,cos,pi
from numpy import arange, array, empty, shape,float64
import matplotlib.pyplot as plt
import time
tempo_inicial = time.time()
#Definindo as constantes do exercicio
a = 1
b = 3
ti = 0
tf = 20
prec = 10e-10
x0 = y0 = 0
H = 20
nmax = 8
#Definindo as funções
def f(r,t):
x = r[0]
y = r[1]
f0 = 1-(b+1)*x+a*x**2*y
f1 = b*x-a*x**2*y
return(array([f0,f1],float64))
我的函数可以出现在 f(r,t) 中。我也尝试使用 numpy float64,但变化不大。
【问题讨论】:
-
当前形式的问题是题外话,因为您询问 ODE 系统的理论属性。没有提供可能是错误的代码。方程的多项式特征很可能会导致正反馈,从而导致解在有限时间内爆炸,这将在任何求解器中产生溢出错误。
-
由于使用
scipy.integrate.odeint时不会发生动态爆炸,因此错误必须出现在此处未显示的部分代码中。 -
Bulirsch-Stoer 的实现与 stackoverflow.com/questions/38945920/… 的实现有何不同?您是否知道这种方法不合标准,就像 Euler 不如 RK4 一样?
标签: python numerical-methods numerical-integration