maxframe.tensor.linalg.cholesky#

maxframe.tensor.linalg.cholesky(a, lower=False)[源代码]#

Cholesky 分解。

返回方阵 a 的 Cholesky 分解 L * L.H,其中 L 是下三角矩阵,.H 是共轭转置运算符(如果 a 是实数,则为普通转置)。a 必须是 Hermitian 矩阵(如果是实数则是对称矩阵)且正定。只返回 L

参数:
  • a ((..., M, M) array_like) -- Hermitian(如果所有元素都是实数则为对称)正定输入矩阵。

  • lower (bool) -- 是否计算上三角或下三角 Cholesky 分解。默认为上三角。

返回:

L -- a 的上三角或下三角 Cholesky 因子。

返回类型:

(..., M, M) array_like

抛出:

LinAlgError -- 如果分解失败,例如 a 不是正定矩阵。

备注

广播规则适用,请参阅 mt.linalg 文档了解详情。

Cholesky 分解通常用于快速求解

\[A \mathbf{x} = \mathbf{b}\]

(当 A 既是 Hermitian/对称矩阵又是正定矩阵时)。

首先,我们求解 \(\mathbf{y}\),满足

\[L \mathbf{y} = \mathbf{b},\]

然后求解 \(\mathbf{x}\),满足

\[L.H \mathbf{x} = \mathbf{y}.\]

示例

>>> import maxframe.tensor as mt
>>> A = mt.array([[1,-2j],[2j,5]])
>>> A.execute()
array([[ 1.+0.j,  0.-2.j],
       [ 0.+2.j,  5.+0.j]])
>>> L = mt.linalg.cholesky(A, lower=True)
>>> L.execute()
array([[ 1.+0.j,  0.+0.j],
       [ 0.+2.j,  1.+0.j]])
>>> mt.dot(L, L.T.conj()).execute() # verify that L * L.H = A
array([[ 1.+0.j,  0.-2.j],
       [ 0.+2.j,  5.+0.j]])
>>> A = [[1,-2j],[2j,5]] # what happens if A is only array_like?
>>> mt.linalg.cholesky(A, lower=True).execute()
array([[ 1.+0.j,  0.+0.j],
       [ 0.+2.j,  1.+0.j]])