2
使用LAPACK和BLAS 对求解
我正在将现有代码从MATLAB移植到C ++,并具有一个线性系统来解决(而不是更典型的形式)A x = bxA=bxA=bxA=bAx=bAx=bAx=b 矩阵是密集的,具有一般形式,但不大于1000x1000。因此在MATLAB中,可以通过函数或正斜杠表示法找到解决方案AAAmrdivide(b,A)x = b/A; 如何使用BLAS和LAPACK例程在C ++代码中解决此问题? 我熟悉的LAPACK程序DGESV解决了为。xAx=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对转置的进行运算来求解最终形式。(因此转置成本和解决系统的成本)一ATATA^TAAA 有没有一种方法更有效或以其他方式更好? 我正在使用矩阵和向量类以及BOOST uBLAS库中的BLAS实现以及与LAPACK库例程的绑定。我已经成功地将此设置用于其他操作,并希望找到限于这些库的解决方案。 另外,我应该注意,我在代码设置期间仅执行了几次此类操作,因此性能并不是关键问题。 也许此MATLAB 文档对其mrdivide他人有帮助。