我有一个程序使用 美国医学会杂志 并且需要测试的是矩阵是否可以求逆。我知道我可以尝试它并捕获异常,但这似乎是一个坏主意(将 catch 块作为“正常”代码路径的一部分似乎是不好的形式)。

最好还返回逆运算(或以比逆运算更好的 O() 运行)的测试。

有帮助吗?

解决方案

在一般情况下,如果不能求解矩阵,它的singluar(非可反转)。我相信,JAMA做这个工作,试图解决使用LU分解矩阵的方式,如果失败,则返回isSingular()。

“真”

有是不是真的只是看一个矩阵的元素,并确定它是否是单数的一般方法 - 你需要检查每一列,看它是否是正交与他人(即对矩阵零空间是0)。 LU分解是相当快的,通常...存在其中需要大容量的操作的次数,但是。

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

其他提示

如果一个异常被抛出,什么是你的恢复位置?

如果你做一个LU分解,发现它的奇异,你捕获异常并尝试一个SVD(奇异值分解)来代替?

听起来像你想估计条件数的倒数。

本网站看起来有点前途...

请参阅也戈卢布和Van贷款,第128-130 。 (如果你没有一个副本,送一。)

...或海厄姆,谁对数值方法的权威。但它是一种很难解析数学...想通过覆盆子灌木的灌木丛走去。 :/

或许检查八度来源及其版本的 MATLAB的rcond() 。我发现这个帖子

对于方阵,你可以检查它的 行列式 --- 矩阵.det() 当且仅当矩阵是奇异的时才返回零。当然,您还需要注意 病态的 矩阵也是。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top