我想用Sympy找到一个象征性的Cholesky因式分解。矩阵M(请参见示例)是实对称的(因此为埃尔米特式)。但是Sympy提出ValueError:矩阵必须是Hermitian。
两个问题:
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.
答案 0 :(得分:2)
M
不是Hermitian,因为对于值x
和y
而言,没有复杂的限制。由于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
方法可直接用于您的示例。