以最优方式数值求解矩阵方程

时间:2013-09-25 18:28:51

标签: c++ matrix linear-algebra lapack armadillo

给定一个复杂的方阵 G 和一个方阵 M ,我可以从 G 快速计算,我需要有效地计算由矩阵方程 G' M = <定义的矩阵 G'我的C ++程序中的strong> G 。然后可以丢弃原来的 G

由于我对数值线性代数的经验有限,我到目前为止依赖于Armadillo库,它具有非常好的语法并且可以提供良好的性能。那么我的方法是采用等式两边的转置并解决问题 M ⋅( G' = G 致电

using namespace arma;
G = trans(solve(M, trans(G));

但如果我正确理解了基于模板的大量代码,这将涉及实际执行转置并围绕LAPACK例程cgesv复制数据。当然,与实际线性求解器的O(N 3 )相比,这些是O(N 2 )运算,但在这种情况下我仍然宁愿避免使用它们。

到目前为止,我从未直接使用过LAPACK,但是通过直接调用LAPACK例程而不必实际执行转置,是否有可能获得性能?或者你会建议一种不同的方法吗?


1 个答案:

答案 0 :(得分:0)

我曾经为lapack提供过C ++代码。看看我的答案,它提供了一个如何使用原始Fortran库中的lapack的示例。

Understanding LAPACK calls in C++ with a simple example