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]])