La soluzione di un sistema lineare di equazioni può essere approssimata solo per le prime variabili?


15

Ho un sistema lineare di equazioni di dimensione mxm, dove m è grande. Tuttavia, le variabili che mi interessano sono solo le prime n variabili (n è piccola rispetto a m). Esiste un modo per approssimare la soluzione per i primi valori m senza dover risolvere l'intero sistema? In tal caso, questa approssimazione sarebbe più veloce della soluzione del sistema lineare completo?


2
A meno che la tua funzione di forzatura non sia limitata alle prime n variabili. Se lo è, puoi formare il complemento di Schur, sebbene sia probabilmente denso. Se l'operatore originale è scarso, potrebbe non valerne la pena.
Jack Poulson,

1
Suppongo che potresti usare l'eliminazione gaussiana partendo dall'angolo in basso a destra della matrice. Questo sarebbe circa 2 volte più veloce della normale eliminazione gaussiana se ti preoccupi solo dei primi elementi e ti fermi a metà. Non so come si paragonerebbe ai metodi iterativi.
Dan

4
@OscarB: Per favore no. La regola di Cramer è un'atrocità nell'aritmetica in virgola mobile. Non ho mai sentito parlare del suo utilizzo per calcoli seri, e ci vuole una discreta quantità di pensiero per evitare la complessità fattoriale , dove non è ancora competitivo con l'eliminazione gaussiana.
Jack Poulson,

1
@Paul: la maggior parte della riduzione dell'ordine dei modelli viene utilizzata nel contesto di grandi sistemi ODE o DAE. A volte, le metodologie di riduzione sono motivate da sistemi ODE o DAE derivanti dalla discretizzazione dei PDE. Non ho visto la riduzione del modello usata su equazioni puramente algebriche. (In caso affermativo, vi prego di inviarmi riferimenti, perché sto facendo la mia tesi sui metodi di riduzione del modello e sarei molto interessato a vederlo.) Se lo desideri, potrei delineare quale potrebbe essere la riduzione del modello se trattiamo equazioni algebriche come caso degenerato di un sistema di equazioni differenziale-algebriche.
Geoff Oxberry,

1
@JackPoulson - ti dispiace riassumere il tuo commento come risposta? Penso che sia la soluzione più corretta e non la voglio perdere nei commenti.
Aron Ahmadia,

Risposte:


13

Come altri hanno sottolineato, questo è difficile da fare con un risolutore diretto. Detto questo, non è così difficile avere a che fare con i solutori iterativi. A tal fine, si noti che la maggior parte dei solutori iterativi in ​​un modo o nell'altro minimizzano l'errore rispetto ad alcune norme. Spesso questa norma è indotta dalla matrice stessa, ma a volte è anche solo la norma del vettore l2. Ma questo non deve essere il caso: puoi scegliere in quale norma vuoi minimizzare l'errore (o residuo) e potresti, ad esempio, scegliere una norma in cui pesare i componenti a cui tieni con 1 e tutti gli altri con 1e-12, cioè per esempio qualcosa come (1e-24)N i = 6 x 2 i e corrispondente prodotto scalare. Quindi scrivi tutti i passaggi del solutore iterativo rispetto a questa norma e al prodotto scalare e otterrai un solutore iterativo che presta molta più attenzione agli elementi vettoriali che ti interessano rispetto agli altri.||X||2=Σio=15Xio2+Σio=6NXio2

La domanda ovviamente è se hai bisogno di meno iterazioni rispetto al prodotto standard / scalare che pesa tutti i componenti allo stesso modo. Ma dovrebbe davvero essere così: supponiamo che ti interessino solo i primi cinque elementi vettoriali. Quindi dovresti avere bisogno al massimo di cinque iterazioni per ridurre l'errore di un fattore 1e12 poiché cinque iterazioni sono ciò che è necessario per il sistema 5x5 che le descrive. Questa non è una prova, ma sono abbastanza certo che dovresti davvero cavartela con un numero molto più piccolo di iterazioni se il peso nella norma (1e-12 sopra) è inferiore alla tolleranza con cui vuoi risolvere il sistema lineare in modo iterativo .


2
Hmm, buon punto. Sarei interessato a vedere un esempio reale, poiché mi preoccupo in qualche modo degli effetti del tentativo di risolvere solo alcuni gradi di libertà; anche se il residuo potrebbe essere piccolo, forse la norma dell'errore è ancora piuttosto grande (fare per ignorare efficacemente la maggior parte dell'operatore).
Jack Poulson,

Intuitivamente, questo sembra funzionare solo se i componenti di un sistema molto piccolo dominano veramente la risposta in un senso L2 (o la norma in cui capisci il tuo errore da misurare). Altrimenti, penso che la preoccupazione di Jack sia valida, ma sarei sicuramente interessato a vedere anche una prova numerica di questo ...
Aron Ahmadia,

Uno dovrebbe assicurarsi di prendere un metodo che minimizza l' errore , non il residuo. Penso che MinErr potrebbe essere un buon punto di partenza.
Wolfgang Bangerth,

@WolfgangBangerth: non ho familiarità con MINERR: è questo il riferimento principale?
Jack Poulson,

1
Anche questo non è abbastanza, perché sarai impreciso. Non è possibile ottenere con precisione alcuni componenti utilizzando questa ponderazione.
Matt Knepley

17

Formare il complemento di Schur

Supponiamo di aver permutato e partizionato la tua matrice nel modulo

UN=(UN11UN12UN21UN22),

tale che contiene i tuoi gradi di libertà di interesse ed è molto più piccolo di A 11 , quindi si può formare il complemento di SchurUN22UN11

S22: =UN22-UN21UN11-1UN12,

o attraverso una fattorizzazione LU parziale corretta o la formula esplicita, e quindi può essere compreso nel seguente senso:S22

S22X=y(UN11UN12UN21UN22)(X)=(0y),

dove rappresenta la parte "non interessante" della soluzione. Pertanto, purché un lato destro che sia solo diverso da zero nei gradi di libertà del complemento di Schur S 22 , dobbiamo solo risolvere contro S 22 per ottenere la parte della soluzione corrispondente a quei gradi di libertà.S22S22

Complessità computazionale in caso denso non strutturato

Impostazione N all'altezza di e n all'altezza di A 22 , allora il metodo standard per calcolare S 22 è di primo fattore L 11 U 11 : = A 11 (Ignoriamo pivotante per ora) in circa 2 / 3 ( N - n ) 3 lavori, quindi da formareUNnUN22S22L11U11: =UN112/3(N-n)3

S22:=A22(A21U111)(L111A12)=A22A21A111A12

usando due solubili triangolari che richiedono lavori ciascuno, quindi eseguendo l'aggiornamento ad A 22 in 2 n 2 ( N - n ) .n(Nn)2A222n2(Nn)

Pertanto, il lavoro totale è di circa . Quando n è molto piccola, N - n N , quindi il costo può essere vista circa 2 / 3 N 3 , che è il costo di una fattorizzazione completa.2/3(Nn)3+2n(Nn)2+2n2(Nn)nNnN2/3N3

Il vantaggio è che, se c'è un numero molto grande di lati di destra da risolvere con lo stesso sistema di equazioni, allora potrebbe essere potenzialmente riutilizzato un gran numero di volte, dove ogni soluzione richiederebbe solo 2 n 2 lavori (piuttosto che lavorare con 2 N 2 ) se S 22 è preso in considerazione.S222n22N2S22

Complessità computazionale nel caso (tipico) scarso

Se il tuo sistema rado è nato da un qualche tipo di differenza finita o approssimazione di elementi finiti, i risolutori sparsi-diretti saranno quasi sicuramente in grado di sfruttare parte della struttura; Sistemi 2d possono essere risolti con lavoro e O ( N log N ) immagazzinamento, mentre i sistemi 3D possono essere risolti con O ( N 2 ) lavoro e O ( N 4 / 3 ) di stoccaggio. I sistemi fattorizzati possono quindi essere risolti con la stessa quantità di lavoro dei requisiti di archiviazione.O(N3/2)O(NlogN)O(N2)O(N4/3)

Il punto di evidenziare le complessità computazionali è che, se e hai un sistema 2d, quindi poiché il complemento di Schur sarà probabilmente denso, la complessità della risoluzione dato il complemento di Schur fattorizzato saràO(n2)=O(N), a cui manca solo un fattore logaritmico rispetto alla soluzione completa sistema! In 3d, richiedeO(N)opera invece diO(N 4 / 3 ).nNO(n2)=O(N)O(N)O(N4/3)

È quindi importante tenere presente che, nel tuo caso in cui , ci saranno risparmi significativi solo se lavori in diverse dimensioni e hai molti lati destri da risolvere.n=N


1
Questo è un ottimo riassunto del metodo del complemento schur e quando è computazionalmente efficiente usarlo!
Paolo

6

L'approccio di riduzione del modello

Da quando Paul ha chiesto, parlerò di cosa succede se si utilizzano metodi di riduzione del modello basati sulla proiezione su questo problema. Supponiamo che tu possa inventare un proiettore tale che l'intervallo di P , indicato con R ( P ) , contenga la soluzione al tuo sistema lineare A x = b e abbia dimensione k , dove k è il numero di incognite per cui desidera risolvere in un sistema lineare.PPR(P)UNX=BKK

Una decomposizione del valore singolare di produrrà la seguente matrice partizionata:P

P=[V*][dioun'g(1K)000][WT*].

Le matrici oscurate dalle stelle contano per altre cose (come la stima dell'errore, ecc.), Ma per ora eviteremo di trattare dettagli estranei. Ne consegue che

P=VWT

è una decomposizione rango pieno di .P

In sostanza, risolverai il sistema

PUNX=PB

in maniera intelligente, perché e W hanno anche la proprietà che W T V = I . Moltiplicando entrambi i lati di P A x = P b perVWWTV=ioPUNX=PBWTy=VX^X

WTUNX^=WTB.

X^VyX

Perché l'approccio del complemento di Schur è probabilmente migliore

Per cominciare, devi scegliere qualche modo. Se la soluzione di A x = b è in R ( P ) , allora y = x , ePUNX=BR(P)y=XyyXPXy . È possibile utilizzare un SVD di A , ad esempio, e selezionare P per essere il prodotto dei primi k vettori singolari a sinistra di A e l'aggiunta dei primi k vettori singolari a destra di A , supponendo che i vettori singolari siano disposti in ordine decrescente di valore singolare. Questa scelta del proiettore equivarrebbe a eseguire una corretta decomposizione ortogonale su A e minimizzerebbe l'erroreL 2 nella soluzione approssimativa.PUNPKUNKUNUN2

VWP

Gli svantaggi sono molto simili all'approccio di JackPoulson, tranne per il fatto che non stai sfruttando appieno la struttura che hai citato.


4

La lunga risposta è ... in un certo senso.

K

K

n-Kn

Inoltre, tenete a mente che limitare l'ordine in cui si sta per eseguire back-substituion possono limitare la forma della matrice (si toglie la capacità di colonne di scambio) che potrebbe eventualmente portare ad un sistema malato condizionata, ma io non sono certo, solo qualcosa da tenere a mente.


O(n3)O(n2)n

ecco perché la risposta è "sorta di" invece di "sì" =)
drjrm3

Ha senso che possa essere fatto in questo modo ... Tuttavia, la maggior parte del calcolo in un'eliminazione gaussiana si trova nella fase di eliminazione in avanti, producendo una complessità O (n ^ 3) nonostante la fase di sostituzione all'indietro troncata. Speravo ci fosse un metodo più veloce ...
Paul
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.