Risoluzione senza invertire


22

Ho matrici e . è scarso ed è con molto grande (può essere dell'ordine di diversi milioni). è una matrice alta con piuttosto piccola ( ) e ogni colonna può disporre di una sola voce con il resto essendo s' tali che . è enorme, quindi è davvero difficile da invertire, e posso risolvere un sistema lineare come usando iterativamente un metodo subspaziale di Krylov come , ma non hoG A n × n n G n × m m 1 < m < 1000 1 0 G T G = I A A x = b B i C G S t a b ( l ) A - 1AGAn×nnGn×mm1<m<100010GTG=IAAx=bBiCGStab(l)A1 esplicitamente.

Voglio risolvere un sistema di forma: , dove e sono vettori di lunghezza. Un modo per farlo è utilizzare un algoritmo iterativo all'interno di un algoritmo iterativo per risolvere per ogni iterazione dell'algoritmo iterativo esterno. Questo sarebbe estremamente costoso dal punto di vista computazionale, tuttavia. Mi chiedevo se esiste un modo computazionalmente più semplice per risolvere questo problema.x b m A - 1(GTA1G)x=bxbmA1


Ho appena aggiunto alla mia risposta un'osservazione sullo sfruttamento della struttura 0-1.
Arnold Neumaier,

Risposte:


19

Introduci il vettore e risolvi il grande sistema accoppiato , per contemporaneamente, usando un metodo iterativo. Se è simmetrico (come sembra probabile anche se non lo si afferma esplicitamente), il sistema è simmetrico (ma indefinito, anche se quasidefinito se è definito positivo), che potrebbe aiutarti a scegliere un metodo appropriato. (parole chiave pertinenti: matrice KKT, matrice quasidefinite).A y + G x = 0 G T y = - b ( y , x )y:=A1GxAy+Gx=0GTy=b(y,x)AAA

Modifica: poiché è simmetrica complessa, lo è anche la matrice aumentata, ma non esiste una qualità di quaside. Puoi comunque usare la routine per calcolare ; pertanto è possibile adattare un metodo come QMR ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (progettato per sistemi reali, ma è possibile riscriverlo facilmente per sistemi complessi, utilizzando l'aggiunta in luogo della trasposizione) per risolvere il tuo problema.A x A x = ¯ A ¯ xAAxAx=Ax¯¯

Edit2: In realtà, la struttura (0,1) di significa che puoi eliminare simbolicamente e i componenti di , finendo così con un sistema più piccolo da risolvere. Questo significa fare confusione con la struttura di , e paga solo quando viene dato in modo esplicito in formato sparse piuttosto che come operatore lineare.x G T y A AGxGTyAA


Grazie! A è simmetrico complesso. C'è motivo di aspettarsi che le condizioni della matrice aumentata siano peggiori di quelle della matrice originale ? Se m è piccolo, la matrice aumentata è solo leggermente più grande della dimensione di A, quindi sospetterei che risolvere questo sistema aumentato in modo iterativo non dovrebbe essere molto più difficile di risolvere un sistema con A? A
Costis,

Il numero di condizione dei due sistemi è generalmente abbastanza non correlato; dipende molto su ciò che è. - Ho aggiunto alla mia risposta informazioni su come sfruttare la simmetria complessa. G
Arnold Neumaier,

Ciao ragazzi! Grazie per tutte le risposte; questo posto è fantastico! Un'estensione alla domanda originale: supponiamo ora che io abbia , dove G e A hanno lo stesso significato della domanda originale ma B è un rango di matrice nxn carente (stessa dimensione di A) e l'intero è il grado completo. Come si va di risolvere il nuovo sistema, dal momento che ora l'inverso di B non esiste in modo da non può avere . Non penso che funzionerebbe semplicemente con lo pseudoinverso di B. G T A - H B A - 1 G A B - 1 A H(GTAHBA1G)x=bGTAHBA1GAB1AH
Costis,

1
Introduci e e procedi in analogia al caso risolto. (Probabilmente devi anche considerare il fattore in matrici di rango intero e introdurre un vettore intermedio aggiuntivo.)z : = A - H B y By:=A1Gxz:=AHByB
Arnold Neumaier,

Ciao Arnold. Grazie, questo funziona davvero! L'ho provato con alcuni esempi di test molto piccoli e funziona benissimo. Tuttavia, il mio risolutore iterativo sta avendo enormi problemi a invertire la matrice aumentata. Mentre occorrono solo circa 80 iterazioni (pochi secondi) per risolvere un sistema della forma con la matrice A originale, il sistema con la matrice aumentata (che è 2n + mx 2n + mo 2n-mx 2n-m usando l'approccio di @ wolfgang-bangerth) sono necessarie decine di migliaia di iterazioni (diverse ore) per risolvere un RHS. Esistono strategie per accelerare la convergenza? forse un precondizionatore? Ax=b
Costis,

7

Dopo la risposta di Arnold, c'è qualcosa che puoi fare per semplificare il problema. In particolare, riscrivere il sistema come . Quindi nota che dall'affermazione che è alto e stretto e che ogni riga ha solo 1 e zeri altrimenti, allora l'istruzione significa che un sottoinsieme degli elementi di ha un valore fisso, vale a dire gli elementi di .G G T y = - b y - bAy+Gx=0,GTy=bGGTy=byb

Supponiamo che per semplicità abbia colonne e righe e che esattamente le prime righe ne contengano una e che riordinando gli elementi di I riesca a far sì che abbia la matrice identità nella in alto e una matrice zero in basso. Quindi posso partizionare in elementi "limitati" e "liberi" in modo che . Posso anche partizionare modo che . Dall'equazionem n m x G m × m n - m × m y = ( y c , y f ) m n - m y c = - b A A = ( A c c A c f A f c A f f ) A y + G x = 0 A c c y cGmnmxGm×mnm×my=(yc,yf)mnmyc=bAA=(AccAcfAfcAff)Ay+Gx=0 Poi ottengo quanto segue: e usando ciò che sappiamo di noi hanno dalla seconda di queste equazioni e di conseguenza In altre parole, l'unica matrice che devi invertire è il sottoinsieme di cui righe e colonne non sono menzionate in (lo spazio nullo di ). Questo si può facilmente fare: (i) calcolare ; (ii) usa qualunque risolutore che hai per risolvere ; (iii) calcolare .y c A f f y f = A f c b x = A c c b - A c f A - 1 f f A f c b . A G G z = A f c b A f f h = z x

Accyc+Acfyf+x=0,Afcyc+Affyf=0
yc
Affyf=Afcb
x=AccbAcfAff1Afcb.
AGGz=AfcbAffh=zx=AccbAcfh

In altre parole, data la struttura di , risolvendo il sistema lineare si ha in realtà non è più difficile che la soluzione di un unico sistema lineare con .AGA


0

Ma conosciamo , e , quindiG T AGGTA

GTA1Gx=b

GGTA1Gx=Gb

Poiché , quindi , quindi :G T = G - 1 G G T = IGTG=IGT=G1GGT=I

A1Gx=Gb

AA1Gx=AGb

Gx=AGb

GTGx=GTAGb

x=GTAGb

A meno che non abbia perso qualcosa, non hai bisogno di alcuna iterazione o risolutore per calcolare x dati , e .GAb


3
GT essendo un inverso sinistro di non implica che sia anche un inverso destro. Considerare , dove è un'inversa sinistra, ma . GG=e1GT=e1TGGT=e1e1TI
Jack Poulson,

1
G T G = I m × m G G TI n × nGCnCm , quindi , ma . Piuttosto è un proiettore su un sottospazio. GTG=Im×mGGTIn×n
Deathbreath,
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.