Soluzione esplicita numericamente stabile di piccolo sistema lineare


11

Ho un sistema lineare disomogeneo

Ax=b

dove è una matrice n × n reale con n 4 . Lo spazio nullo di A è garantito per essere di dimensione zero, quindi l'equazione ha un inverso univoco x = A - 1 b . Poiché il risultato entra nella parte destra di un ODE, che intendo risolvere usando un metodo adattivo, è importante che la soluzione sia regolare rispetto alle piccole variazioni degli elementi di A e b . A causa di questo requisito e della piccola dimensionalità, ho pensato di implementare formule esplicite per A - 1 bAn×nn4Ax=A1bAbA1b. Gli elementi possono essere esattamente zero o assumere valori molto diversi. La mia domanda è se questo ha senso per te e se ci sono espressioni stabili conosciute per questo. Sto codificando in C per sistemi x86.


So che arriva molto tardi, ma ecco il mio suggerimento: poiché l'eliminazione gaussiana con il pivot totale è nota per essere stabile, può avere senso codificare in modo rigido l'algoritmo per le dimensioni minuscole. Il pivot complica la materia in quanto vi sono modi per scegliere i pivot successivi, portando a ( n ! ) 2 diversi set di formule; puoi ridurre questa complessità scambiando ciò che deve essere scambiato, riducendo il numero di casi a 1 2 + 2 2 + n 2 . (n!)2(n!)212+22+n2
Yves Daoust,

Risposte:


6

Prima di implementare formule esplicite, mi porrei la domanda: "ne vale la pena?":

  • Vale la pena dedicare del tempo a scrivere, eseguire il debug e convalidare queste formule esplicite mentre è possibile collegarsi facilmente a BLAS + LAPACK che utilizzano l'eliminazione gaussiana classica?
  • Ti aspetti di ottenere stabilità? Non penso che la programmazione di formule esplicite (come la regola di Cramer) ti dia una migliore stabilità, al contrario.
  • Ti aspetti di guadagnare velocità? Hai già profilato l'intero programma? Quale frazione di tempo viene impiegata per risolvere questi sistemi 4x4?
  • Qual è la probabilità che, in un anno, tu migliori il tuo modello e hai bisogno di 5 equazioni invece di 4?

Il mio consiglio: usa prima la combinazione BLAS / LAPACK, vedi se funziona, profila l'intero programma, chiedi a uno studente di implementare formule esplicite (scusami, essendo sarcastico qui) e fai un confronto su velocità e robustezza.


Lo sforzo necessario per implementarlo è di circa 15 minuti, perché inserisco semplicemente una matrice generale 1x1, 2x2, 3x3 e 4x4 in un CAS (Maple per me) e lo inverto. Restituirà un risultato esplicito (simile a C) (presumibilmente basato sulla regola di Cramer). Il tuo secondo punto è esattamente la mia preoccupazione. Nel risultato ci saranno prodotti di ordine superiore degli elementi della matrice. Ovviamente questo potrebbe introdurre errori dovuti alla "quasi cancellazione" dei diversi termini. Ma la domanda è: se è possibile scrivere il risultato in una forma in cui ciò non si verifica. La velocità non è la preoccupazione principale in questo luogo.
highsciguy

6

O(n3)

AAdet(A)0xbxA

Per sicurezza, probabilmente è meglio assicurarsi che non sia neanche numericamente carente di rango (cioè, non abbia piccoli valori singolari).A

Il problema con la regola di Cramer è che le sue proprietà di stabilità sono sconosciute ad eccezione di (che è stabile in avanti, ma non stabile all'indietro). (Vedi Accuracy and Stability of Numerical Algorithms , 2nd edition, di N. Higham.) Non è considerato un algoritmo affidabile; L'eliminazione gaussiana con rotazione parziale (GEPP) è preferita.n=2

Mi aspetterei che il problema con l'uso di BLAS + LAPACK per eseguire GEPP in una soluzione ODE sarebbe qualsiasi differenza finita utilizzata in un metodo ODE implicito. So che le persone hanno risolto i programmi lineari come parte di una valutazione sul lato destro, e poiché lo hanno fatto in modo così ingenuo (appena inserito il programma lineare risolvere nel lato destro, chiamando un algoritmo simplex), hanno notevolmente ridotto l'accuratezza del loro soluzione calcolata e sostanzialmente aumentato il tempo impiegato per risolvere il problema. Un mio compagno di laboratorio ha capito come risolvere tali problemi in un modo molto più efficiente e preciso; Dovrò cercare di vedere se la sua pubblicazione è stata ancora pubblicata. Potresti avere un problema simile indipendentemente dal fatto che tu scelga di utilizzare GEPP o Cramer's Rule.

Se c'è un modo per calcolare una matrice analitica giacobina per il tuo problema, potresti voler farlo per risparmiare un po 'di mal di testa numerici. Sarà più economico valutare, e probabilmente più accurato, di un'approssimazione di differenza finita. Le espressioni per la derivata della matrice inversa possono essere trovate qui se ne hai bisogno. La valutazione della derivata della matrice inversa sembra che richiederebbe almeno due o tre soluzioni lineari di sistema, ma sarebbero tutte con la stessa matrice e diversi lati di destra, quindi non sarebbe considerevolmente più costoso di un singolo sistema lineare risolvere.

E se c'è un modo per confrontare la tua soluzione calcolata con una soluzione con valori di parametro noti, lo farei, in modo da poter diagnosticare se hai riscontrato una qualsiasi di queste insidie ​​numeriche.


Quando scrivi liscio qui, vuoi dire che è anche liscio quando valutato con precisione finita, cioè stabile (questo è quello che ho cercato di dire). Vedi anche il mio commento alla risposta di GertVdE. Penso di poter escludere matrici quasi singolari (suppongo che in questi casi l'analisi del mio problema fisico debba essere riformulata).
highsciguy

1
Voglio dire "è almeno due volte continuamente differenziabile". Penso che la mappa inversa della matrice sia infinitamente continuamente differenziabile per tutti tale che . Adet(A)0
Geoff Oxberry,

Il tuo commento su "differenziazione finita utilizzata in un metodo ODE implicito" si applica a me. Poiché la dimensione di è molto più piccola della dimensione del mio sistema ODE (questa matrice si pone semplicemente in una mappatura di poche variabili), la robustezza è molto più importante in questa fase della velocità. In particolare dal momento che nella fase di sviluppo non saprò mai dove si verificano errori numerici se non mi assicuro che i singoli componenti siano sicuri. nA
highsciguy

-2

Non sono sicuro che possa aiutare, ma penso solo quando parli di una soluzione stabile, stai parlando di metodi di approssimazione. Quando si calcolano le cose in modo esplicito, la stabilità non ha senso. Ciò significa che devi accettare una soluzione approssimativa se vuoi guadagnare stabilità.


5
L'approssimazione in virgola mobile (arrotondamento, cancellazione, ecc.) Conta tutti quando si tratta di stabilità. Anche se hai una formula per la risposta, devi capire se può essere calcolata accuratamente in aritmetica a precisione finita.
Bill Barth,

Non vedo questa risposta così negativa come gli altri sembrano vederla. Naturalmente il problema della stabilità esiste anche per risultati espliciti. Ma credo che ctNGUYEN volesse solo dire che una soluzione approssimativa come l'espansione in una piccola quantità può effettivamente essere più precisa del risultato esplicito completo che, a mio avviso, è corretto. In un certo senso chiedo soluzioni esplicite che trattino casi così difficili, in modo tale che la formula sia sempre stabile.
highsciguy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.