C ++ için MATLAB mevcut bir kodu taşıma ve çözmek için bir lineer sistem bilgisi am (yerine daha tipik bir şekilde daha A x = b )
matrisi yoğun ve genel formda olmakla birlikte 1000x1000'den daha büyük değildir. MATLAB'da çözüm, işlev veya eğik çizgi işareti ile bulunurmrdivide(b,A)
x = b/A;
BLAS ve LAPACK yordamlarını kullanarak bu C ++ kodumda nasıl çözmeliyim?
Ben LAPACK rutin aşina olduğum DGESV
çözer için x .
Yani, düşündüğüm bir şey, matris devrik kimliklerini kullanarak bazı manipülasyonlar yapmaktır:
Sonra DGESV
transpozisyon üzerinde çalışarak nihai formu çözmek . (bu yüzden A'yı aktarmanın maliyeti ve sistemi çözmenin maliyeti)
Daha verimli veya daha iyi bir yaklaşım var mı ?
Ben matris ve vektör sınıfları yanı sıra BOOST uBLAS kitaplığından BLAS uygulaması yanı sıra LAPACK kitaplığı rutinleri için bağları ile çalışıyorum. Bu kurulumu diğer işlemler için başarıyla kullanıyorum ve bu kütüphanelerle sınırlı bir çözüm bulmayı umuyorum.
Ayrıca, kod kurulumu sırasında yalnızca birkaç kez bu tür bir işlem gerçekleştirdiğimi, bu yüzden performans kritik bir endişe olmadığını not etmeliyim.
Belki bu MATLAB belgeleri üzerinde mrdivide
diğerleri için yararlıdır.
boost::numeric::bindings::lapack::gesvx()
, ama bu benim sorumun bir parçası değil. Başarıya ulaşırsam, nasıl yapılacağına dair bir notla geri döneceğim.