Sympy:为什么 cholesky 不适用于这个对称矩阵?
Sympy: Why is cholesky not working for this symmetric matrix?
我想用 Sympy 找到一个符号 Cholesky 分解。矩阵 M(见示例)是实对称的(因此是厄密矩阵)。但是 Sympy 引发了 ValueError: Matrix must be Hermitian.
两个问题:
- 为什么会出错?
- 我需要做什么才能找到我的 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.
- 矩阵
M
不是 Hermitian,因为没有限制值 x
和 y
是复数。
因为 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
方法按原样与您的示例一起使用。
我想用 Sympy 找到一个符号 Cholesky 分解。矩阵 M(见示例)是实对称的(因此是厄密矩阵)。但是 Sympy 引发了 ValueError: Matrix must be Hermitian.
两个问题:
- 为什么会出错?
- 我需要做什么才能找到我的 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.
- 矩阵
M
不是 Hermitian,因为没有限制值x
和y
是复数。 因为
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
方法按原样与您的示例一起使用。