scipy.linalg.
cholesky_banded#
- scipy.linalg.cholesky_banded(ab, overwrite_ab=False, lower=False, check_finite=True)[源代码]#
Cholesky 分解一个带状 Hermitian 正定矩阵
矩阵 a 在 ab 中以较低对角线或较高对角线顺序存储
ab[u + i - j, j] == a[i,j] (if upper form; i <= j) ab[ i - j, j] == a[i,j] (if lower form; i >= j)
ab 的示例 (a 的形状为 (6,6), u=2)
upper form: * * a02 a13 a24 a35 * a01 a12 a23 a34 a45 a00 a11 a22 a33 a44 a55 lower form: a00 a11 a22 a33 a44 a55 a10 a21 a32 a43 a54 * a20 a31 a42 a53 * *
文档编写时假设数组参数具有指定的“核心(core)”形状。但是,此函数的数组参数可以在核心形状之前添加额外的“批次(batch)”维度。在这种情况下,数组被视为低维切片的批次;详情请参阅 批量线性运算。请注意,不支持零大小批次的调用,否则将引发
ValueError。- 参数:
- ab(u + 1, M) array_like
带状矩阵
- overwrite_ab布尔值, 可选
丢弃 ab 中的数据 (可能提高性能)
- lowerbool, 可选
矩阵是否为下三角形式。(默认是上三角形式)
- check_finitebool, optional
是否检查输入矩阵是否只包含有限数值。禁用此选项可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能导致问题(崩溃、非终止)。
- 返回:
- c(u + 1, M) ndarray
a 的 Cholesky 分解,与 ab 相同的带状格式
另请参阅
cho_solve_banded求解线性方程组,给定带状 Hermitian 矩阵的 Cholesky 分解。
示例
>>> import numpy as np >>> from scipy.linalg import cholesky_banded >>> from numpy import allclose, zeros, diag >>> Ab = np.array([[0, 0, 1j, 2, 3j], [0, -1, -2, 3, 4], [9, 8, 7, 6, 9]]) >>> A = np.diag(Ab[0,2:], k=2) + np.diag(Ab[1,1:], k=1) >>> A = A + A.conj().T + np.diag(Ab[2, :]) >>> c = cholesky_banded(Ab) >>> C = np.diag(c[0, 2:], k=2) + np.diag(c[1, 1:], k=1) + np.diag(c[2, :]) >>> np.allclose(C.conj().T @ C - A, np.zeros((5, 5))) True