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

Sympy: Why is cholesky not working for this symmetric matrix?

我想用 Sympy 找到一个符号 Cholesky 分解。矩阵 M(见示例)是实对称的(因此是厄密矩阵)。但是 Sympy 引发了 ValueError: Matrix must be Hermitian.

两个问题:

  1. 为什么会出错?
  2. 我需要做什么才能找到我的 Cholesky 因子?
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. 矩阵 M 不是 Hermitian,因为没有限制值 xy 是复数。
  2. 因为 M 不是必要的 Hermitian,你应该使用

    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 方法按原样与您的示例一起使用。