Ich suche nach einer schnellen (wage ich zu sagen, optimal?) Expliziten Lösung für das lineare 3x3-Problem, , .
Matrix ist allgemein, aber nahe an der Identitätsmatrix mit einer Bedingungsnummer nahe 1. Da tatsächlich Sensormessungen mit einer Genauigkeit von etwa 5 Stellen sind, macht es mir nichts aus, mehrere Zahlen aufgrund von Zahlen zu verlieren Probleme.
Natürlich ist es nicht schwer, eine explizite Lösung zu finden, die auf einer beliebigen Anzahl von Methoden basiert, aber wenn sich etwas als optimal in Bezug auf die FLOPS-Anzahl erwiesen hat, wäre dies ideal (schließlich das gesamte Problem) wird wahrscheinlich in die FP-Register passen!).
(Ja, diese Routine wird oft aufgerufen . Ich habe bereits tief hängende Früchte entfernt und dies steht als nächstes in meiner Profilliste ...)
quelle
Antworten:
Sie können eine explizite Formel nicht schlagen. Sie können die Formeln für die Lösung auf ein Blatt Papier schreiben . Lassen Sie den Compiler die Dinge für Sie optimieren. Jede andere Methode enthält fast zwangsläufig Anweisungen oder Schleifen (z. B. für iterative Methoden), die Ihren Code langsamer machen als jeder gerade Code.x = A.- 1b
if
for
quelle
Da die Matrix der Identität so nahe kommt, konvergieren die folgenden Neumann-Reihen sehr schnell:
Abhängig von der erforderlichen Genauigkeit kann es sogar gut genug sein, um nach 2 Begriffen abzuschneiden:
Dies ist möglicherweise etwas schneller als eine direkte Formel (wie in Wolfgang Bangerths Antwort vorgeschlagen), allerdings mit viel geringerer Genauigkeit.
Sie könnten mehr Genauigkeit mit 3 Begriffen erhalten:
Wenn Sie jedoch die Eintrag-für-Eintrag-Formel für schreiben , sehen Sie eine vergleichbare Anzahl von Gleitkommaoperationen wie die direkte inverse 3x3-Matrixformel (müssen Sie nicht mache aber eine Teilung, was ein wenig hilft).( 3 I.- 3 A + A.2) b
quelle
FLOPS zählen basierend auf den obigen Vorschlägen:
LU, kein Schwenken:
Gaußsche Elimination mit Rücksubstitution, kein Schwenken:
Cramer-Regel über Cofaktor-Erweiterung
Explicit Inverse dann multiplizieren:
MATLAB Proof-of-Concepts:
Cramer-Regel über Cofaktor-Erweiterung :
LU (kein Schwenken) und Rücksubstitution:
Explizite Umkehrung und dann Multiplikation:
Gaußsche Eliminierung:
Hinweis: Sie können diesem Beitrag auch Ihre eigenen Methoden und Zählungen hinzufügen.
quelle
Wahrscheinlich Cramers Regel. Wenn Sie ein Schwenken vermeiden können, möglicherweise eine LU-Faktorisierung. Es ist eine 3x3-Matrix, daher wäre es einfach, die Schleifen manuell abzuwickeln. Alles andere wird wahrscheinlich eine Verzweigung beinhalten, und ich bezweifle, dass eine Krylov-Subraummethode in 1 oder 2 Iterationen oft genug konvergiert, damit es sich lohnt.
quelle