Python 如何求解一组含有奇异矩阵的线性微分方程组而不需要伪逆?
我试图用scipy的solve_ivp函数来解一组矩阵形式的微分方程:Python 如何求解一组含有奇异矩阵的线性微分方程组而不需要伪逆?,python,numpy,scipy,ode,matrix-inverse,Python,Numpy,Scipy,Ode,Matrix Inverse,我试图用scipy的solve_ivp函数来解一组矩阵形式的微分方程:L*dx/dt=B*u-R*x L_inv = np.linalg.pinv(L) def func(t,x,B,u,L_inv,R): # Calculate derivatives dx = np.dot(L_inv,(np.dot(B,u) - np.dot(R,x))) return dx x = solve
L*dx/dt=B*u-R*x
L_inv = np.linalg.pinv(L)
def func(t,x,B,u,L_inv,R):
# Calculate derivatives
dx = np.dot(L_inv,(np.dot(B,u) - np.dot(R,x)))
return dx
x = solve_ivp(func,[min(time),max(time)],y0,t_eval=time,args=(B,u,L_inv,R),vectorized=True)
问题是,L几乎总是一个奇异矩阵,因此不可逆。使用np.linalg.pinv或np.linalg.lstsq计算的伪逆远远不正确,例如:
L = np.array([[712e-3,712e-3],[712e-3,712e-3]])
L_inv = np.linalg.pinv(L)
np.dot(L,L_inv)
>>>array([[0.5, 0.5],
[0.5, 0.5]])
知道dx是x的导数,我可以用手解这些微分方程。有没有办法实现这一点?具有单数
L
的系统是DAE。scipy没有DAE解算器,您需要其他软件包。GEKKO:,Julia:,Sundals Assimulo:///您如何手动解决此系统?