既存のコードをMATLABからC ++に移植しており、を解決する線形システムを持っています(より一般的な形式A x = bではなく)
行列は高密度で一般的な形式ですが、1000x1000以下です。そのため、MATLABでは、解は関数またはスラッシュ表記法で見つかりますmrdivide(b,A)
x = b/A;
BLASおよびLAPACKルーチンを使用して、C ++コードでこれを解決するにはどうすればよいですか?
私は、LAPACKルーチンに精通していDGESV
解きするために、X。
したがって、私が考えていたのは、行列の転置恒等式を使用していくつかの操作を行うことです。
次にDGESV
、転置操作を使用して最終形式を解きます。(Aを転置するコストとシステムを解決するコスト)
より効率的なアプローチや他の方法でより良いアプローチがありますか?
BOOST uBLASライブラリからのBLAS実装だけでなく、LAPACKライブラリルーチンへのバインドと同様に、マトリックスクラスとベクトルクラスを使用しています。私はこのセットアップを他の操作に正常に使用してきましたが、これらのライブラリに限定されたソリューションを見つけたいと思っています。
また、コードのセットアップ中にこのタイプの操作を実行するのは数回だけなので、パフォーマンスは重要な問題ではありません。
たぶん、このMATLABのドキュメント上には、mrdivide
他人のために有用です。
boost::numeric::bindings::lapack::gesvx()
に苦労していますが、これはここでの私の質問の一部ではありません。成功した場合は、その方法についてのメモをお送りします。