I는 C ++로 MATLAB에서 기존 코드를 포팅하고 해결하는 선형 시스템이 오전 (오히려 더 일반적인 형태보다 X = B를 )
행렬 는 밀도가 높고 일반적인 형태이지만 1000x1000보다 크지 않습니다. MATLAB에서 솔루션은 함수 또는 슬래시 표기법으로 찾을 수 있습니다.mrdivide(b,A)
x = b/A;
BLAS 및 LAPACK 루틴을 사용하여 C ++ 코드에서이 문제를 어떻게 해결해야합니까?
나는 LAPACK 루틴을 잘 알고있어 DGESV
해결 X = B를 위한 X .
그래서 내가 가진 생각 중 하나는 행렬 전치 ID를 사용하여 약간의 조작을 수행하는 것입니다.
그런 다음 DGESV
조옮김 된 를 조작 하여 최종 양식을 푸십시오 . ( A 를 바꾸는 비용과 시스템 해결 비용)
보다 효율적이거나 더 나은 접근법이 있습니까?
BOOST uBLAS 라이브러리의 BLAS 구현뿐만 아니라 LAPACK 라이브러리 루틴에 대한 바인딩뿐만 아니라 행렬 및 벡터 클래스로 작업하고 있습니다. 다른 작업 에이 설정을 성공적으로 사용했으며 이러한 라이브러리로 제한된 솔루션을 찾고 싶습니다.
또한 코드 설정 중에이 유형의 작업 만 몇 번만 수행하므로 성능은 중요한 문제가 아닙니다.
어쩌면이 MATLAB의 문서 에는 mrdivide
다른 사람을 위해 도움이됩니다.
boost::numeric::bindings::lapack::gesvx()
있지만 여기에서는 제 질문의 일부가 아닙니다. 성공하면 어떻게하는지에 대한 메모가 다시 올 것이다.