Java 使用Jama.矩阵测试可逆性

Java 使用Jama.矩阵测试可逆性,java,linear-algebra,jama,matrix-inverse,Java,Linear Algebra,Jama,Matrix Inverse,我有一个程序,使用和需要测试的是一个矩阵可以倒。我知道我可以尝试并捕获一个异常,但这似乎是一个坏主意(将catch块作为“正常”代码路径的一部分似乎是一种糟糕的形式) 最好使用同样返回逆运算的测试(或以比逆运算更好的O()运行)。通常,如果无法求解矩阵,则为singluar(不可逆)。我相信JAMA这样做的方式是尝试使用LU分解来求解矩阵,如果失败,它将为isSingular()返回“true” 实际上,没有一种通用的方法可以仅仅查看矩阵的元素并确定它是否是奇异的——您需要检查每一列,看看它是否

我有一个程序,使用和需要测试的是一个矩阵可以倒。我知道我可以尝试并捕获一个异常,但这似乎是一个坏主意(将catch块作为“正常”代码路径的一部分似乎是一种糟糕的形式)


最好使用同样返回逆运算的测试(或以比逆运算更好的O()运行)。

通常,如果无法求解矩阵,则为singluar(不可逆)。我相信JAMA这样做的方式是尝试使用LU分解来求解矩阵,如果失败,它将为isSingular()返回“true”

实际上,没有一种通用的方法可以仅仅查看矩阵的元素并确定它是否是奇异的——您需要检查每一列,看看它是否与其他列正交(即,矩阵的零空间为0)。LU分解相当快,通常。。。然而,有时它需要大量的操作


你有没有想要克服的实际速度问题?

对于一个方阵,你可以检查它---当且仅当矩阵是单数时返回零。当然,您也需要注意矩阵。

如果抛出异常,您的恢复位置是什么


如果您执行LU分解并发现它是单数的,您是否会捕获异常并尝试SVD(单数值分解)?

听起来您想估计条件数的倒数

看起来有点前途

另见。(如果您没有副本,请购买一份。)

…或者,谁是数值方法的权威。除了解析数学有点困难。。。就像穿过树莓灌木丛一样/


或者可以查看八度音源的版本。我找到了。

它没有性能。我只是不想让代码总是抛出(这将是循环出口)你是对的,我的内存很差。得到LU分解,然后检查isnonsigular:IIRC在一般情况下O()对于det是exp(n),inv是n^3。哎哟,我想我们需要看看它实际上是如何实现的。有些方法可以比n做得更好按照你的建议,我们可以使用LU/Cholesky/QR分解得到n^3。在这种情况下,我终止。我试图抓住一个(常见的)角点情况,它恰好有一个不需要求逆的平凡解。条件数只是一个指标,用于在精度有限的机器上进行数值计算-它不会让你洞察矩阵本身是否是奇异的。我对你使用“仅”一词感到有趣。单数是高条件数的一种极端情况。如果一个矩阵可以反转,但它的条件数很高,那么你就在可逆性的边缘徘徊。当然。但这并不能真正回答海报的问题。