per la classe Devo scrivere il mio risolutore di equazioni lineari per matrici sparse. Sono libero di utilizzare qualsiasi tipo di struttura dati per matrici sparse e devo implementare diversi risolti, incluso il gradiente coniugato.moltiplicazione matrice sparse veloce
Mi chiedevo se esiste un modo famoso per memorizzare matrici sparse in modo tale che la moltiplicazione con un vettore sia relativamente veloce.
In questo momento le mie matrici sparse sono fondamentalmente implementate con un std::map< std::pair<int, int>, double>
impacchettato che memorizza i dati, se presenti. Questo trasforma la moltiplicazione di una matrice con dal vettore in una complessità di O (n²) in una O (n²log (n)) poiché devo eseguire la ricerca di ogni elemento della matrice. Ho esaminato il formato della matrice Sparse Yale e sembra che il recupero di un elemento sia anche in O (log (n)) quindi non sono sicuro se sarebbe molto più veloce.
Per riferimento, ho una matrice 800x800 che viene popolata con 5000 voci. Ci vogliono circa 450 secondi per risolvere un tale sistema con il metodo del gradiente coniugato.
Pensi che sia possibile farlo molto più rapidamente con un'altra struttura dati?
grazie!
Leggere prima wikipedia. http://en.wikipedia.org/wiki/Sparse_matrix ha un buon elenco dei metodi di archiviazione comuni che ti daranno operazioni efficienti. –
@Song Wang: lo scopo della classe è fondamentalmente quello di lanciare il nostro risolutore del metodo degli elementi finiti – lezebulon