Sympy:为什么cholesky不适用于此对称矩阵?

时间:2019-07-15 09:04:59

标签: python matrix linear-algebra sympy

我想用Sympy找到一个象征性的Cholesky因式分解。矩阵M(请参见示例)是实对称的(因此为埃尔米特式)。但是Sympy提出ValueError:矩阵必须是Hermitian。

两个问题:

  1. 为什么会出错?
  2. 我需要怎么做才能找到我的霍乱因素?
from sympy import *
x, y = symbols('x y')

M = Matrix([
    [ exp(x**2), exp(x*y)],
    [  exp(x*y), exp(y**2)]
])

print(M == M.T) #True
L = M.cholesky() #ValueError: Matrix must be Hermitian.

1 个答案:

答案 0 :(得分:2)

  1. 矩阵M不是Hermitian,因为对于值xy而言,没有复杂的限制。
  2. 由于M不是必需的埃尔米特语,因此您应该使用

    M.cholesky(hermitian=False)
    
    Out[17]: 
    Matrix([
    [         sqrt(exp(x**2)),                                       0],
    [exp(x*y)/sqrt(exp(x**2)), sqrt(exp(y**2) - exp(-x**2)*exp(2*x*y))]])
    

hermitian是出现在sympy version 1.4中的参数。您可以找到更改on this page。对于较早的版本,cholesky方法可直接用于您的示例。