Python 如何求解一组含有奇异矩阵的线性微分方程组而不需要伪逆?

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

我试图用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_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:///您如何手动解决此系统?