Przenoszę istniejący kod z MATLAB do C ++ i mam liniowy system do rozwiązania (zamiast bardziej typowej formy A x = b )
Matryca jest gęsta i ma ogólną formę, ale nie jest większa niż 1000 x 1000. Tak więc w MATLAB rozwiązaniem jest funkcja lub notacja ukośnika do przodumrdivide(b,A)
x = b/A;
Jak mam rozwiązać ten problem w kodzie C ++ przy użyciu procedur BLAS i LAPACK?
Znam procedurę LAPACK, DGESV
która rozwiązuje dla x .
Jedną z moich myśli było wykonanie pewnych manipulacji przy użyciu macierzy transponujących tożsamość:
Następnie rozwiązać ostateczny kształt za pomocą DGESV
działających na transponowana . (więc koszt transpozycji A i koszt rozwiązania systemu)
Czy istnieje podejście bardziej wydajne lub w inny sposób lepsze ?
Pracuję z klasami macierzy i wektorów, a także implementacją BLAS z biblioteki BOOST uBLAS, a także powiązaniami z procedurami biblioteki LAPACK. Korzystałem z tej konfiguracji z powodzeniem do innych operacji i mam nadzieję znaleźć rozwiązanie ograniczone do tych bibliotek.
Powinienem również zauważyć, że wykonuję ten typ operacji tylko kilka razy podczas konfiguracji kodu, więc wydajność nie jest krytyczna.
Może to MATLAB dokumentacja na mrdivide
to pomocne dla innych.
boost::numeric::bindings::lapack::gesvx()
, ale to nie jest część mojego pytania tutaj. Jeśli mi się uda, wrócę z notatką, jak to zrobić.