Numerisch stabile explizite Lösung eines kleinen linearen Systems


11

Ich habe ein inhomogenes lineares System

Ax=b

wobei A eine reelle n×n Matrix mit n4 . A wird garantiert, dass der Nullraum von A eine Dimension von Null hat, sodass die Gleichung eine eindeutige Umkehrung von x=A1b . Da das Ergebnis auf der rechten Seite einer ODE eingeht, die ich mit einer adaptiven Methode lösen möchte, ist es wichtig, dass die Lösung in Bezug auf kleine Variationen der Elemente von A und glatt ist b. Aufgrund dieser Anforderung und der geringen Dimensionalität dachte ich, explizite Formeln für A - 1 b zu implementierenA1b. Die Elemente können genau Null sein oder sehr unterschiedliche Werte annehmen. Meine Frage ist, ob dies für Sie sinnvoll ist und ob dafür stabile Ausdrücke bekannt sind. Ich codiere in C für x86-Systeme.


Ich weiß, dass es sehr spät ist, aber hier ist mein Vorschlag: Da die Gaußsche Eliminierung mit totalem Schwenken als stabil bekannt ist, kann es sinnvoll sein, den Algorithmus für die winzigen Größen hart zu codieren. Das Schwenken erschwert die Materie, da es (n!)2 Möglichkeiten gibt, die aufeinanderfolgenden Drehpunkte auszuwählen, was zu (n!)2 verschiedenen Formelsätzen führt; Sie können diese Komplexität reduzieren, indem Sie das austauschen, was ausgetauscht werden muss, und die Anzahl der Fälle auf reduzieren 12+22+n2.
Yves Daoust

Antworten:


6

Bevor ich explizite Formeln implementiere, würde ich mir die Frage stellen: "Lohnt es sich?":

  • Lohnt es sich, diese expliziten Formeln zu schreiben, zu debuggen und zu validieren, während Sie leicht auf BLAS + LAPACK verlinken können, das die klassische Gaußsche Eliminierung verwendet?
  • Erwarten Sie Stabilität? Ich glaube nicht, dass das Programmieren expliziter Formeln (wie Cramers Regel) im Gegenteil zu einer besseren Stabilität führt.
  • Erwarten Sie, Geschwindigkeit zu gewinnen? Haben Sie bereits Ihr gesamtes Programm profiliert? Wie viel Zeit wird für die Lösung dieser 4x4-Systeme aufgewendet?
  • Wie hoch ist die Wahrscheinlichkeit, dass Sie in einem Jahr Ihr Modell verbessern und 5 statt 4 Gleichungen benötigen?

Mein Rat: Verwenden Sie zuerst die BLAS / LAPACK-Kombination, prüfen Sie, ob sie funktioniert, profilieren Sie das gesamte Programm, bitten Sie einen Schüler, explizite Formeln zu implementieren (sorry, hier sarkastisch zu sein) und vergleichen Sie Geschwindigkeit und Robustheit.


Der Implementierungsaufwand beträgt ca. 15 Minuten, da ich einfach eine allgemeine 1x1-, 2x2-, 3x3- und 4x4-Matrix in ein CAS (Maple for me) eingebe und sie invertiere. Es soll ein explizites (C-ähnliches) Ergebnis zurückgeben (angeblich basierend auf Cramers Regel). Ihr zweiter Punkt ist genau mein Anliegen. Im Ergebnis gibt es Produkte höherer Ordnung der Matrixelemente. Offensichtlich könnte dies zu Fehlern führen, da die verschiedenen Begriffe fast storniert werden. Die Frage ist jedoch, ob es möglich ist, das Ergebnis in einer Form zu schreiben, in der dies nicht der Fall ist. Geschwindigkeit ist an diesem Ort nicht das Hauptanliegen.
Highsciguy

6

O(n3)

AAdet(A)0xbxA

Um sicher zu gehen, ist es wahrscheinlich am besten sicherzustellen, dass keinen numerischen Rangmangel aufweist (dh keine kleinen Singularwerte hat).A

Das Problem mit der Cramer-Regel ist, dass ihre Stabilitätseigenschaften unbekannt sind, mit Ausnahme von (das vorwärts stabil, aber nicht rückwärts stabil ist). (Siehe Genauigkeit und Stabilität numerischer Algorithmen , 2. Auflage, von N. Higham.) Es wird nicht als zuverlässiger Algorithmus angesehen. Die Gaußsche Eliminierung mit partiellem Schwenken (GEPP) wird bevorzugt.n=2

Ich würde erwarten, dass das Problem bei der Verwendung von BLAS + LAPACK zur Ausführung von GEPP in einer ODE-Lösung eine endliche Differenzierung ist, die in einer impliziten ODE-Methode verwendet wird. Ich weiß, dass Menschen lineare Programme im Rahmen einer Auswertung auf der rechten Seite gelöst haben, und weil sie dies naiv getan haben (nur die lineare Programmlösung in die rechte Seite gesteckt und einen Simplex-Algorithmus aufgerufen), haben sie die Genauigkeit ihrer Programme stark reduziert berechnete Lösung und wesentlich länger die Zeit, die es dauerte, um das Problem zu lösen. Ein Labmate von mir fand heraus, wie man solche Probleme viel effizienter und genauer lösen kann. Ich muss nachsehen, ob seine Veröffentlichung bereits veröffentlicht wurde. Möglicherweise haben Sie ein ähnliches Problem, unabhängig davon, ob Sie sich für die Verwendung von GEPP oder Cramer's Rule entscheiden.

Wenn Sie auf irgendeine Weise eine analytische Jacobi-Matrix für Ihr Problem berechnen können, möchten Sie dies möglicherweise tun, um sich einige numerische Kopfschmerzen zu ersparen. Es ist billiger zu bewerten und wahrscheinlich genauer als eine Näherung mit endlichen Differenzen. Ausdrücke für die Ableitung der Matrixinverse finden Sie hier, wenn Sie sie benötigen. Die Auswertung der Ableitung der Matrixinverse sieht so aus, als würde es mindestens zwei oder drei lineare Systemlösungen erfordern, aber sie würden alle dieselbe Matrix und unterschiedliche rechte Seiten haben, so dass sie nicht wesentlich teurer wäre als ein einzelnes lineares System lösen.

Und wenn es eine Möglichkeit gibt, Ihre berechnete Lösung mit einer Lösung mit bekannten Parameterwerten zu vergleichen, würde ich das tun, damit Sie diagnostizieren können, ob Sie auf eine dieser numerischen Fallstricke gestoßen sind.


Wenn Sie hier glatt schreiben, meinen Sie damit, dass es auch glatt ist, wenn es mit endlicher Präzision ausgewertet wird, dh stabil (das habe ich versucht zu sagen). Siehe auch meinen Kommentar zur Antwort von GertVdE. Ich denke, dass ich fast singuläre Matrizen ausschließen kann (ich nehme an, dass in solchen Fällen die Analyse meines physischen Problems neu formuliert werden muss).
Highsciguy

1
Ich meine "ist mindestens zweimal kontinuierlich differenzierbar". Ich denke, die inverse Matrixkarte ist für alle unendlich kontinuierlich differenzierbar, so dass . Adet(A)0
Geoff Oxberry

Ihr Kommentar zu 'endlicher Differenzierung in einer impliziten ODE-Methode' trifft auf mich zu. Da die Dimension von viel kleiner ist als die Dimension meines ODE-Systems (diese Matrix entsteht lediglich bei der Abbildung einiger Variablen), ist die Robustheit in diesem Stadium viel wichtiger als die Geschwindigkeit. Insbesondere da ich in der Entwicklungsphase nie wissen werde, wo numerische Fehler auftreten, wenn ich nicht sicher bin, dass einzelne Komponenten sicher sind. nA
Highsciguy

-2

Ich bin mir nicht sicher, ob das helfen kann, aber ich denke nur, wenn Sie über eine stabile Lösung sprechen, sprechen Sie über Approximationsmethoden. Wenn Sie Dinge explizit berechnen, hat Stabilität keinen Sinn. Das heißt, Sie müssen eine Näherungslösung akzeptieren, wenn Sie an Stabilität gewinnen möchten.


5
Die Gleitkomma-Approximation (Abrundung, Löschung usw.) zählt alle, wenn es um Stabilität geht. Selbst wenn Sie eine Formel für die Antwort haben, müssen Sie herausfinden, ob sie mit endlicher Genauigkeit genau berechnet werden kann.
Bill Barth

Ich sehe diese Antwort nicht so negativ, wie andere es zu sehen scheinen. Natürlich besteht das Stabilitätsproblem auch für explizite Ergebnisse. Aber ich glaube, dass ctNGUYEN nur sagen wollte, dass eine ungefähre Lösung wie die Erweiterung in einer kleinen Menge tatsächlich präziser sein kann als das vollständige explizite Ergebnis, das meiner Meinung nach richtig ist. In gewissem Sinne bitte ich um explizite Lösungen, die so schwierige Fälle behandeln, dass die Formel immer stabil bleibt.
Highsciguy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.