检查快速的方法,如果一个矩阵是奇异? (不可逆的,DET = 0)(Fast method to

2019-06-25 00:32发布

什么是最快的算法(C或C ++示例的链路将降温),以检查是否一个小的方形矩阵(<16种* 16个元素)是单数(不可逆的,DET = 0)?

Answer 1:

最好的方法是计算条件数经由SVD,并检查它是否大于1 /ε,其中小量是机器精度越大。

如果允许假阴性(即矩阵是有缺陷的,但你的算法可能无法检测到它),你可以使用MAX(a_ii)/分钟(a_ii)公式从维基百科的文章作为条件数的代理,但你必须首先计算QR分解(式适用于三角矩阵):A = QR,其中R正交,然后COND(A)= COND(Q)。 也有技术来计算Q的与O(N)的操作条件数,但也有比较复杂的。



Answer 2:

我同意高斯消元法。 http://math.nist.gov/javanumerics/jama/doc/Jama/LUDecomposition.html文件LU分解-从矩阵构建LU分解后,你可以调用它的方法来获得的决定因素。 我的猜测是,它至少是值得定时这与任何更专业的方案进行比较。



Answer 3:

最快的方式可能是硬编码为您希望处理各大小矩阵行列式功能。

下面是N = 3的一些伪代码,但如果检查出的Leibniz公式为决定因素图案应该清楚所有N.

function is_singular3(matrix) {
    det = matrix[1][1]*matrix[2][2]*matrix[3][3]
        - matrix[1][1]*matrix[2][3]*matrix[3][2]
        - matrix[1][2]*matrix[2][1]*matrix[3][3]
        + matrix[1][2]*matrix[2][3]*matrix[3][1]
        + matrix[1][3]*matrix[2][1]*matrix[3][2]
        - matrix[1][3]*matrix[2][2]*matrix[3][1];

     if(det==0) return true
     else return false
}


文章来源: Fast method to check if a Matrix is singular? (non-invertible, det = 0)