我想在python中解决这样的ODE: enter image description here
这是我的代码:
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def cde(y,t,r1,r2,l1,l2,m,c):
#define the vecter of dependent variables
i1,i2,uc = y
#define the system of first order equations
dy_dt = [(r2*i2*m/l2 + r1*i1 - uc) / (m**2/l2 - l1),\
(r1*i1 + l1*r2*i2/m - uc) / (m - l1*l2/m),\
i1/c]
return dy_dt
def main():
#initialize the vecter of dependent variables
y0 = [0,0,3000]
#initialize the other variables
r1 = 10 ** (-3)
r2 = 10 ** (-3)
l1 = 20 * 10 ** (-6)
l2 = 80 * 10 ** (-6)
m = 0.9 * (l1 * l2) ** (1/2)
c = 1000 * 10 ** (-6)
t = np.linspace(0, 0.1, 101)
#build the model
sol = odeint(cde, y0, t, args=(r1,r2,l1,l2,m,c))
#plot the figure of solution
plt.plot(t, sol[:, 0], 'b', label='i1')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
plt.close()
plt.plot(t, sol[:, 1], 'g', label='i2')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
plt.close()
plt.plot(t, sol[:, 1], 'r', label='uc')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
plt.close()
main()
我得到了一个完全不正确的结果 - 模型的解决方案表明它没有收敛 为什么我会得到这样的ODEintWarning? 我怎样才能得到正确的解决方案?
答案 0 :(得分:0)
计算该线性系统的特征值
dy1=cde([1,0,0],0,r1,r2,l1,l2,m,c)
dy2=cde([0,1,0],0,r1,r2,l1,l2,m,c)
dy3=cde([0,0,1],0,r1,r2,l1,l2,m,c)
np.linalg.eig([dy1,dy2,dy3])
给出结果
(array([ -1.63811579e+04, 1.60647105e+04, -1.24999684e+01]),
array([[ -6.19266551e-02, -6.11336770e-02, -4.10359481e-01],
[ -4.49479256e-04, 4.48809049e-04, 9.11909417e-01],
[ 9.98080602e-01, -9.98129487e-01, 5.12941642e-03]]))
以便有一个组件增长为exp(1.606e+04*t)
,其值10**n
有时会t=0.00014333*n
,这可以解释观察到的快速增长。