Estoy transfiriendo un código existente de MATLAB a C ++ y tengo un sistema lineal para resolver (en lugar de la forma más típica )A x = b
La matriz es densa y de forma general, pero no es mayor que 1000x1000. Entonces, en MATLAB, la solución o la notación de barra diagonal encuentran la soluciónmrdivide(b,A)
x = b/A;
¿Cómo debo resolver esto en mi código C ++ usando rutinas BLAS y LAPACK?
Estoy familiarizado con la rutina LAPACK DGESV
que resuelve para .x
Entonces, un pensamiento que tenía es hacer algunas manipulaciones usando identidades de transposición de matriz:
Luego resuelva la forma final utilizando la DGESV
operación de la transpuesta . (por lo que cuesta transponer y cuesta resolver el sistema) A
¿Existe un enfoque más eficiente o mejor ?
Estoy trabajando con clases de matrices y vectores, así como la implementación de BLAS de la biblioteca BOOST uBLAS, así como enlaces a las rutinas de la biblioteca LAPACK. He estado usando esta configuración con éxito para otras operaciones y espero encontrar una solución limitada a estas bibliotecas.
Además, debo tener en cuenta que solo estoy realizando este tipo de operación unas pocas veces durante la configuración del código, por lo que el rendimiento no es una preocupación crítica.
Tal vez esto MATLAB documentación sobre mrdivide
es de gran ayuda para los demás.
boost::numeric::bindings::lapack::gesvx()
, pero esto no es parte de mi pregunta aquí. Si tengo éxito, volveré con una nota sobre cómo hacerlo.