Spazio nullo di una matrice densa rettangolare


16

Data una matrice densa

ARm×n,m>>n;max(m)100000
qual è il modo migliore per trovare la sua base di spazio nullo entro una certa tolleranza ϵ ?

Sulla base di tale base, posso quindi dire che alcuni cols sono linearmente dipendenti in ϵ ? In altre parole, avendo una base di spazio nullo calcolata, quali colonne di A devono essere rimosse per ottenere una matrice non singolare?

I riferimenti sono apprezzati.

Risposte:


12

I metodi standard per determinare lo spazio nullo di una matrice sono l'uso di una decomposizione QR o un SVD. Se la precisione è fondamentale, si preferisce SVD; la decomposizione QR è più veloce.

Usando SVD, se , allora le colonne di V corrispondenti a piccoli valori singolari (cioè piccole voci diagonali di Σ ) costituiscono la base per lo spazio nullo. La tolleranza pertinente qui è ciò che si considera un "piccolo" valore singolare. MATLAB, ad esempio, richiede che il valore minimo sia max ( m , n ) ε , dove è correlato alla precisione della macchina (vedere qui nella documentazione di MATLAB ).A=UΣVHVΣmax(m,n)εε

Usando la decomposizione QR, se , e il rango di A è r , allora le ultimecolonne n - r di Q compongono lo spazio nullo di A , supponendo che la decomposizione QR sia rivelatrice di rango. Per determinare r , calcolare il numero di voci sulla diagonale principale di R la cui grandezza supera una tolleranza (simile a quella utilizzata nell'approccio SVD).AT=QRArnrQArR

Non utilizzare la decomposizione LU. Nell'aritmetica esatta, è un approccio praticabile, ma con l'aritmetica in virgola mobile, l'accumulo di errori numerici lo rende inaccurato.

Wikipedia tratta questi argomenti qui .


Geoff, parlando in termini di QR, supponiamo che io abbia la decomposizione, come posso quindi collegare la base dello spazio null e le colonne nella matrice originale? In altre parole, da quali colonne devo rimuovere per eliminare lo spazio nullo? Il punto qui è lavorare con A stesso e non con la sua decomposizione. AA
Alexander,

Le routine che calcolano la decomposizione QR normalmente includono un'opzione per restituire un vettore di permutazione che indica come le colonne sono permutate per ottenere la fattorizzazione QR. Le ultime voci di quel vettore di permutazione corrisponderebbero alle righe di A (colonne di A T ) che si trovano nello spazio nullo. Le prime voci r di quel vettore corrispondono alle colonne dinrAATr che sono linearmente indipendenti. Non sono sicuro di cosa intendi per "sbarazzarsi dello spazio nullo". Vuoi dire che vuoi rimuovere le colonne di A per ottenere una matrice non singolare? ATA
Geoff Oxberry,

Sì, intendo quello. Guarderò la permutazione, grazie.
Alexander,

Questa è una domanda diversa. Che si sarebbe poi fare invece è calcolare la decomposizione QR (o SVD) di . Se si calcola la decomposizione QR di A , è possibile calcolare il rango di A come nella risposta sopra (non è necessario trasporre la matrice), quindi le prime voci r (dove r è il rango di A ) del vettore di permutazione corrispondono alle colonne indipendenti di a . Lo stesso tipo di algoritmo si applica a SVD; se è possibile restituire un vettore di permutazione insieme alla decomposizione, ciò dovrebbe fornire le informazioni necessarie. AAArrAA
Geoff Oxberry,

8

Se , come la tua domanda indica, è possibile risparmiare un po 'di lavoro in primo luogo la scelta di un insieme di indici che di p 5 n (diciamo) file casuali e utilizzando la fattorizzazione ortogonale A T I : = Q R . (La fattorizzazione QR è quella in cui Q è quadrata e R è rettangolare del rango r , e le restanti colonne n - r di R sono zero. L'uso di una fattorizzazione QR permutata migliorerà la stabilità; la permutazione deve quindi essere considerata in un ricetta più dettagliata.)mnIp5nAI:T=QRQRrnrR

In genere, questo vi darà un sottospazio molto più basso dimensionale attraversato dalle colonne di , l'ultima n - r colonne di Q . Questo sottospazio contiene lo spazio nullo di A . Ora scegliere un altro, disgiunte set indice casuale e calcolare la fattorizzazione QR di ( A I : N ) T . Moltiplica lo spazio nullo risultante a sinistra per N per ottenere una N migliorata di dimensione probabilmente anche inferiore. Iterate fino a quando la dimensione di N non diminuisce più. Quindi probabilmente hai lo spazio nullo corretto e puoi verificare calcolando A NNnrQA(AI:N)TNNNAN. Se ciò non è ancora trascurabile, eseguire ulteriori iterazioni con le righe più significative.

Modifica: una volta che hai , puoi trovare un insieme massimo J di colonne linearmente indipendenti di A mediante una fattorizzazione ortogonale di N T = Q R con perno. In effetti, l'insieme J di indici non scelti come pivot avrà questa proprietà.NJANT=QRJ


+1 per un modo efficiente per determinare lo spazio nullo di una matrice di grandi dimensioni. Dovrò ricordare di consultare questa risposta più tardi quando ne avrò bisogno.
Geoff Oxberry,

In effetti, sembra ragionevole, tuttavia le mie matrici si adattano a 16 GB di RAM, quindi rimarrei con il matlab standard qr.
Alexander,

Prof. Neumaier, ho deciso di testare questo algoritmo, ma non capisco esattamente cosa sia e cosa significhi "calcolare la fattorizzazione QR di ( A I : N ) T "? Potresti spiegare un po 'di più. N(AI:N)T
Alexander

Ho modificato un po 'la mia risposta. è calcolato dalla ricetta di Geoff Oxberry. N
Arnold Neumaier,

Grazie. L'ho implementato. Tuttavia, per quanto vedo, questo algoritmo non permette di definire me un insieme di colonne linearmente indipendenti di (dal scomponiamo A T I : piuttosto che A I : ), ma solo aiuta a stimare base spazio nullo se stessa? AAI:TAI:
Alexander
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.