【问题标题】:Computing pseudo inverse of a matrix using sympy使用 sympy 计算矩阵的伪逆
【发布时间】:2013-03-15 07:05:45
【问题描述】:

我应该如何使用 sympy 计算矩阵的伪逆(不使用 numpy,因为矩阵具有符号常量,我希望逆也为符号)。普通的inv() 不适用于 sympy 中的非方阵。例如如果M = Matrix(2,3, [1,2,3,4,5,6]), pinv(M) 应该给

-0.9444   0.4444
-0.1111   0.1111
 0.7222  -0.2222

【问题讨论】:

    标签: python matrix sympy


    【解决方案1】:

    我认为,既然这都是象征性的,那么使用线性代数课中教授的教科书公式应该是可以的(例如,请参阅Moore–Penrose pseudoinverse 上的维基百科文章中的特殊情况列表)。对于数值评估pinv 使用奇异值分解 (svd)。

    您有线性独立的行(全行排名),因此您可以使用“右”逆公式:

    >>> import sympy as sy
    >>> M = sy.Matrix(2,3, [1,2,3,4,5,6])
    
    >>> N = M.H * (M * M.H) ** -1
    
    >>> N.evalf(4)
    [-0.9444,  0.4444]
    [-0.1111,  0.1111]
    [ 0.7222, -0.2222]
    >>> M * N
    [1, 0]
    [0, 1]
    

    对于全列排名,将 M 替换为 M.H,转置结果,并简化以得到以下“左”逆公式:

    >>> M = sy.Matrix(3, 2, [1,2,3,4,5,6])
    
    >>> N = (M.H * M) ** -1 * M.H
    
    >>> N.evalf(4)
    [-1.333, -0.3333,  0.6667]
    [ 1.083,  0.3333, -0.4167]
    >>> N * M
    [1, 0]
    [0, 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      相关资源
      最近更新 更多