我想以矩阵形式求解一个耦合的ODE系统,其形式如下:
y'_n =((m_n)** 2)* y_n +(C * y)_n,m'_n = -4 * m_n * y_n
其中C
是矩阵[2 1, -1 3]
。
另一方面,我想解决这些方程:
y'1 = m1 ** 2 * y1 + 2 * y1 + y2
y'2 = m2 ** 2 * y2-y1 + 3 * y3
m'1 = -4 * m1 * y1,
m'2 = -4 * m2 * y2
Y1(0)= Y2(0)= - 15。并且m1(0)= m2(0)= 0.01
以矩阵形式,我写了以下程序:
import numpy as np
from pylab import plot,show
from scipy.integrate import odeint
C=np.array([[2,1],[-1,3]])
dt=0.001
def dy_dt(Y,time):
y,m=Y
m=m+dt*(-4.*m*y)
dy=m**2*y+np.dot(C,y)
return dy
m_init=np.ones(2)*0.01
time=np.linspace(0,4,1/dt)
y_init=np.ones(2)*-15.
y_tot=odeint(dy_dt,[y_init,m_init],time)
plot(time,y_tot[0])#y_1
plot(time,y_tot[1])#y_2
plot(time,y_tot[2])#m_1
plot(time,y_tot[3])#m_2
show()
但是我遇到了以下错误:
y_tot=odeint(dy_dt,[y_init,m_init],time)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/odepack.py", line 215, in odeint
ixpr, mxstep, mxhnil, mxordn, mxords)
ValueError: Initial condition y0 must be one-dimensional.
答案 0 :(得分:1)
odeint的初始值必须是数组,而不是矩阵。尝试使用Array.find()
并将其作为初始值(y0是odeint的第二个参数)。