在 Matlab/Octave 中计算大矩阵条件数的最快算法

计算科学 线性代数 矩阵 条件数
2021-12-20 07:39:03

从条件数的定义来看,似乎需要矩阵求逆来计算它,我想知道对于通用方阵(或者如果对称正定更好)是否可以利用一些矩阵分解来计算条件数更快的方式。

3个回答

计算条件数(甚至在 2 的因数内近似)似乎与计算因式分解具有相同的复杂性,尽管在这个方向上没有定理。

来自稀疏的 Cholesky 因子R对称正定矩阵的,或来自稀疏的QR因式分解(隐式Q) 的一般方阵,可以通过计算的稀疏逆子集获得 Frobenius 范数中的条件数(RTR)1,这比计算完整的逆要快得多。(与此相关的是我的论文:Hybrid norms and bounds for overdetermined linear systems, Linear Algebra Appl. 216 (1995), 257-266. http://www.mat.univie.ac.at/~neum/scan/74 .pdf )

编辑:如果A=QR那么对于任何酉不变的norn,

cond(A)=cond(R)=cond(RTR).
对于稀疏 QR 分解的计算,请参见例如
http://dl.acm.org/citation.cfm?id=174408
对于稀疏逆的计算,请参见例如我的论文:Restricted maximum似然估计稀疏线性模型中的协方差,Genetics Selection Evolution 30 (1998), 1-24。
https://www.mat.univie.ac.at/~neum/ms/reml.pdf 成本大约是分解成本的 3 倍。

使用对称矩阵的特征值/特征向量分解或一般矩阵的 SVD 来计算条件数当然很容易,但这些并不是特别快速的方法。

有一些迭代算法可以计算对大多数目的有用的条件数的估计,而无需进行所有计算工作A1. 参见例如condestMATLAB 中的函数。

对于稀疏 Hermitian 矩阵H,您可以使用 Lanczos 算法来计算其特征值。如果H不是厄米特,您可以通过计算的特征值来计算其奇异值HTH.

由于可以非常快地找到最大和最小特征值/奇异值(很久之前三对角化完成),因此 Lanczos 方法对于计算条件数特别有用。