如何在本征中找到条件编号?

ale*_*nde 3 math eigen

在Matlab中有condrcond,在LAPACK中也有。Eigen中是否有任何例程可以查找矩阵的条件号?

我有一个矩阵的Cholesky分解,我想检查它是否接近奇点,但是在文档中找不到类似的函数。

更新: 我想我可以使用类似这种算法的东西,该算法利用了三角分解。Ilya的方法对于更准确的答案很有用,因此我将其标记为正确。

Ily*_*pov 5

计算条件数的最简单方法是使用以下表达式:

cond(A) = max(sigma) / min(sigma)
Run Code Online (Sandbox Code Playgroud)

其中sigma是奇异值的数组,是SVD的结果。本征作者建议使用以下代码:

JacobiSVD<MatrixXd> svd(A);
double cond = svd.singularValues()(0) 
    / svd.singularValues()(svd.singularValues().size()-1);
Run Code Online (Sandbox Code Playgroud)

其他方式(效率较低)

cond(A) = max(lambda) / min(lambda)
cond(A) = norm2(A) * norm2(A^-1)
Run Code Online (Sandbox Code Playgroud)

其中lambda是特征值数组。

看来Cholesky分解在这里没有直接帮助,但目前我不能确定。