In un progetto software a cui sto lavorando, alcuni calcoli sono molto più facili per matrici dense di basso rango. Alcune istanze problematiche coinvolgono dense matrici di basso rango, ma mi vengono fornite per intero, piuttosto che come fattori, quindi dovrò controllare il rango e fatturare la matrice se voglio sfruttare la struttura di basso rango .
Le matrici in questione sono in genere completamente o quasi completamente dense, con n che vanno da cento a qualche migliaio. Se una matrice ha un rango basso (diciamo meno di 5 a 10), vale la pena calcolare il SVD e usarlo per una fattorizzazione di basso rango. Tuttavia, se la matrice non è di basso rango, lo sforzo sarebbe sprecato.
Quindi mi piacerebbe trovare un modo rapido e ragionevolmente affidabile per determinare se il grado è basso o meno prima di investire lo sforzo di fare una piena fattorizzazione SVD. Se in qualsiasi momento diventa chiaro che il rango è al di sopra del valore soglia, il processo può arrestarsi immediatamente. Se la procedura dichiara erroneamente che la matrice è di livello basso quando non lo è, questo non è un grosso problema, dal momento che farei comunque un SVD completo per confermare il livello basso e trovare una fattorizzazione di basso livello.
Le opzioni che ho considerato includono una classifica che rivela la fattorizzazione LU o QR seguita da un SVD completo come controllo. Ci sono altri approcci che dovrei considerare?