Sto trasferendo un codice esistente da MATLAB a C ++ e ho un sistema lineare per risolvere (piuttosto che la forma più tipica A x = b )
La matrice è densa e di forma generale, ma non è più grande di 1000x1000. Quindi in MATLAB, la soluzione è trovata dalla funzione o dalla notazione di barramrdivide(b,A)
x = b/A;
Come devo risolvere questo nel mio codice C ++ usando le routine BLAS e LAPACK?
Conosco la routine LAPACK DGESV
che risolve per x .
Quindi, ho pensato che avrei dovuto fare alcune manipolazioni usando le identità di trasposizione della matrice:
Quindi risolvi il modulo finale usando le DGESV
operazioni sulla trasposta . (quindi costo per trasporre A e costo per risolvere il sistema)
Esiste un approccio più efficiente o comunque migliore ?
Sto lavorando con le classi di matrici e vettori, nonché l'implementazione BLAS dalla libreria BOOST uBLAS, nonché i collegamenti alle routine della libreria LAPACK. Ho usato questa configurazione con successo per altre operazioni e spero di trovare una soluzione limitata a queste librerie.
Inoltre, dovrei notare che eseguo questo tipo di operazione solo alcune volte durante l'impostazione del codice, quindi le prestazioni non sono un problema critico.
Forse questa documentazione MATLAB su mrdivide
è utile per gli altri.
boost::numeric::bindings::lapack::gesvx()
, ma questo non fa parte della mia domanda qui. Se avrò successo, tornerò con una nota su come farlo.