首页 > 解决方案 > 如何求解一组包含奇异矩阵而没有伪逆的线性微分方程?

问题描述

我正在尝试以矩阵形式求解一组微分方程:L* dx/dt = B*u - R*x使用 scipy 的 solve_ivp 函数。

    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 的导数,我可以手动求解这些微分方程。有没有办法实现这个?

标签: pythonnumpyscipyodematrix-inverse

解决方案


推荐阅读