Tôi đang chuyển một mã hiện có từ MATLAB sang C ++ và có một hệ thống tuyến tính để giải (chứ không phải là dạng A x = b điển hình hơn )
Ma trận dày đặc và có dạng chung, nhưng không lớn hơn 1000x1000. Vì vậy, trong MATLAB, giải pháp được tìm thấy bởi hàm hoặc ký hiệu dấu gạch chéomrdivide(b,A)
x = b/A;
Tôi nên giải quyết vấn đề này như thế nào trong mã C ++ của mình bằng các thói quen BLAS và LAPACK?
Tôi quen thuộc với thói quen LAPACK DGESV
giải cho x .
Vì vậy, một suy nghĩ tôi có là thực hiện một số thao tác bằng cách sử dụng danh tính chuyển vị ma trận:
Sau đó giải quyết các hình thức cuối cùng bằng cách sử dụng DGESV
hoạt động trên chuyển đổi . (vì vậy chi phí để chuyển đổi A và chi phí để giải quyết hệ thống)
Có cách tiếp cận nào hiệu quả hơn hay tốt hơn không ?
Tôi đang làm việc với các lớp ma trận và vectơ cũng như triển khai BLAS từ thư viện BBLST uBLAS cũng như các ràng buộc với các thói quen của thư viện LAPACK. Tôi đã sử dụng thiết lập này thành công cho các hoạt động khác và hy vọng tìm thấy một giải pháp giới hạn cho các thư viện này.
Ngoài ra, tôi cần lưu ý rằng tôi chỉ thực hiện loại hoạt động này một vài lần trong khi thiết lập mã, vì vậy hiệu suất không phải là vấn đề quan trọng.
Có lẽ MATLAB này tài liệu trên mrdivide
là hữu ích cho người khác.
boost::numeric::bindings::lapack::gesvx()
, nhưng đây không phải là một phần câu hỏi của tôi ở đây. Nếu tôi thành công, tôi sẽ quay lại với một lưu ý về cách thực hiện.