Я переношу існуючий код з MATLAB на C ++ і маю лінійну систему для вирішення (а не більш типову форму )
Матриця щільна і загальної форми, але не більше 1000х1000. Отже, у MATLAB рішення знайдено за функцією або позначенням вперед-косою рисоюmrdivide(b,A)
x = b/A;
Як я можу це вирішити у своєму коді C ++ за допомогою підпрограм BLAS та LAPACK?
Я знайомий з програмою LAPACK, DGESV
яка вирішує для .
Отже, одна думка, яку я маю, - це зробити кілька маніпуляцій, використовуючи матричні транспозитні ідентичності:
Потім вирішити остаточну форму з допомогою DGESV
працюючих на транспонованою . (так коштує перенести та вартість рішення системи)
Чи є підхід більш ефективним чи інакше кращим ?
Я працюю з матричними та векторними класами, а також реалізацією BLAS з бібліотеки BOOST uBLAS, а також прив'язкою до підпрограм бібліотеки LAPACK. Я успішно використовую цю установку для інших операцій і сподіваюся знайти рішення, обмежене цими бібліотеками.
Також слід зазначити, що я виконую цей тип операцій лише кілька разів під час налаштування коду, тому продуктивність не є критичною проблемою.
Можливо, ця документація на MATLAB mrdivide
корисна для інших.
boost::numeric::bindings::lapack::gesvx()
, але це не є частиною мого питання. Якщо я маю успіх, я повернусь із запискою про те, як це зробити.