从条件数的定义来看,似乎需要矩阵求逆来计算它,我想知道对于通用方阵(或者如果对称正定更好)是否可以利用一些矩阵分解来计算条件数更快的方式。
在 Matlab/Octave 中计算大矩阵条件数的最快算法
计算科学
线性代数
矩阵
条件数
2021-12-20 07:39:03
3个回答
计算条件数(甚至在 2 的因数内近似)似乎与计算因式分解具有相同的复杂性,尽管在这个方向上没有定理。
来自稀疏的 Cholesky 因子对称正定矩阵的,或来自稀疏的因式分解(隐式) 的一般方阵,可以通过计算的稀疏逆子集获得 Frobenius 范数中的条件数,这比计算完整的逆要快得多。(与此相关的是我的论文: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 )
编辑:如果那么对于任何酉不变的norn,
对于稀疏 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 来计算条件数当然很容易,但这些并不是特别快速的方法。
有一些迭代算法可以计算对大多数目的有用的条件数的估计,而无需进行所有计算工作. 参见例如condest
MATLAB 中的函数。
对于稀疏 Hermitian 矩阵,您可以使用 Lanczos 算法来计算其特征值。如果不是厄米特,您可以通过计算的特征值来计算其奇异值.
由于可以非常快地找到最大和最小特征值/奇异值(很久之前三对角化完成),因此 Lanczos 方法对于计算条件数特别有用。
其它你可能感兴趣的问题