1 回答
TA贡献1880条经验 获得超4个赞
用作求解器类(如或solve_ivp)的单行接口。使用类的正确大写。在 ODE 函数中使用正确的参数顺序(您可以使用in来使用相同的函数)。在您打算使用浮点除法的地方避免整数除法。RK45Radautfirst=Trueodeint
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# Dimensionless parameters
eps = 4e-2
q = 8e-4
f = 2.0/3
# Oregonator model
def Oregonator(t,Y):
x,z = Y;
return [(x * (1 - x) + (f*(q-x)*z) / (q + x)) / eps, x - z]
# Time span and inital conditions
ts = np.linspace(0, 10, 100)
Y0 = [1, 0.5]
# Numerical algorithm/method
NumSol = solve_ivp(Oregonator, [0, 30], Y0, method="Radau")
x, z = NumSol.y
y = (f*z)/(q+x)
t = NumSol.t
plt.subplot(221);
plt.plot(t,x,'b'); plt.xlabel("t"); plt.ylabel("x");
plt.subplot(222);
plt.plot(t,y,'r'); plt.xlabel("t"); plt.ylabel("y");
plt.subplot(223);
plt.plot(t,z,'g'); plt.xlabel("t"); plt.ylabel("z");
plt.subplot(224);
plt.plot(x,z,'k'); plt.xlabel("x"); plt.ylabel("z");
plt.tight_layout(); plt.show()
然后这会产生情节
表现出周期性振荡。
进一步的步骤可能是使用tspan
选项或“密集输出”在用户定义的采样点处获取解决方案样本。为获得可靠的结果,请手动设置误差容限。
f=0.51262
接近从收敛到振荡行为的过渡点。
添加回答
举报