使用 scipy.odeint 求解耦合方程

计算科学 数值分析 Python scipy 一体化
2021-12-21 04:21:00

我有一组三个耦合的自治方程:
y1=y1(Ωmy13+y326.0+V(y2)2.H02)
y2=y3
y3=3y1y1y31H02v(y2)y2
我已经使用以下代码使用 scipy.odeint 来解决它:

def f(y,t):
    Xi = y[0]
    Yi = y[1]
    Zi = y[2]
    f0 = Xi*(onr/(Xi**3) + (H**2)*(Zi**2)/(2.0*rho_c) + (v0*np.exp(-l*Yi*k))/(rho_c))**(1.0/2.0)
    f1 =  Zi
    f2 =  -3*Zi*(H**2)*(onr/(Xi**3) + (H**2)*(Zi**2)/(2.0*rho_c) + (v0*np.exp(-l*Yi*k))/(rho_c))**0.5 + (l*k*v0*np.exp(-l*Yi*k))/(H**2)
    return [f0,f1,f2]

X0 = [1.0]
Y0 = [1.0]
Z0 = [c]
y0 = [X0,Y0,Z0]
t = np.linspace(start=1.0,stop=0.0,num=10001)

soln = odeint(f,y0,t)
X = soln[:,0]
Y = soln[:,1]
Z = soln[:,2]  

但是当我运行时它会ValueError: Initial condition y0 must be one-dimensional显示出来。我该怎么办?我是 python 新手,这是我第一次使用它。这里的任何帮助或解释都会很棒。

1个回答

您不应该将 、 和 定义X0Y0列表Z0就目前而言,y0是一个列表列表——即二维的。您可以通过将相应的行替换为:

X0 = 1.0
Y0 = 1.0
Z0 = c