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.
źródło
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ć.gesvx()
, ale nie bez przeszkód po drodze. Gdy argumentem TRANS jest „T”, dokumentacja LAPACK mówi, żegesvx
rozwiązuje , ale tak naprawdę rozwiązuje A T X T = B T, ponieważ oczekuje się, że postać argumentów wejściowych X i B nie będzie transponowana Formularz. Tak więc argument A jest transponowany, podczas gdy X i Bgesvx
formularza transpozycjiboost::numeric::bindings
. Zawiń transponowaną macierz w funkcji. To identyfikuje parametr jako typ transpozycji :trans()
boost::numeric::bindings::lapack::gesvx( FACT, boost::numeric::bindings::trans(Atransposed), af, ipiv, equed, r, c, b, x, rcond, ferr, berr );
Możesz obliczyć pseudo odwrotność , używając powiedzmy dekompozycji SVD, które są zawarte w LAPACK.ZA
źródło