Frage

Ich habe ein Programm, das JAMA und testen müssen, ist eine Matrix sein kann invertiert. Ich weiß, dass ich es einfach versuchen und eine Ausnahme zu fangen, aber das scheint wie eine schlechte Idee (einen catch-Block als Teil des „normalen“ Code Pfades scheint schlechte Form zu sein).

Ein Test, der auch die inverse zurückgibt (oder in einer besseren O Run () als die inversen Operation) würde bevorzugt werden.

War es hilfreich?

Lösung

In der Regel, wenn Sie die Matrix nicht lösen können, es ist singluar (nicht umkehrbar). Ich glaube, die Art und Weise, dass JAMA tut dies zu versuchen, die Matrix mit LU-Faktorisierung zu lösen, und wenn es scheitert, es gibt „true“ für isSingular ().

Es ist nicht wirklich eine allgemeine Möglichkeit, nur an den Elementen einer Matrix zu betrachten und bestimmen, ob es einzigartig ist - man muss jede Spalte überprüfen, um zu sehen, ob es mit den anderen orthogonal ist (dh der Nullraum für die Matrix ist 0). LU-Faktorisierung recht schnell, in der Regel ... es gibt Zeiten, wo es den größten Teil einer Operation dauert jedoch.

Haben Sie eine tatsächliche Geschwindigkeit Problem, das Sie zu überwinden sind versuchen?

Andere Tipps

Wenn eine Ausnahme ausgelöst wird, was ist Ihre Position Erholung?

Wenn Sie eine LU-Zerlegung tun und feststellen, dass es singulär, fangen Sie die Ausnahme und versuchen, einen SVD (Einzelwertzerlegung) statt?

klingt wie Sie den Kehrwert der Konditionszahl schätzen möchten.

Diese Seite etwas vielversprechend aussieht ...

Siehe auch Golub und Van Loan, p. 128-130 . (Wenn Sie nicht eine Kopie davon haben, eines bekommen.)

... oder Higham , wer ist eine Autorität auf dem numerischen Methoden. Abgesehen davon, dass es ziemlich schwer, die Mathematik zu analysieren ... wie durch ein Dickicht von Himbeersträuchern zu Fuß. : /

Oder schauen Sie vielleicht die Octave Quellen für ihre Version von MATLAB rcond() . Ich fand diesen Beitrag .

Für eine quadratische Matrix, Sie könnten Sie einfach seine überprüfen Determinante --- Matrix.det () Null, wenn zurückgibt und nur wenn die Matrix singulär ist. Natürlich müssen Sie für rel="nofollow aufpassen schlecht konditionierten zu Matrizen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top