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