给定一个复杂的方阵 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例程而不必实际执行转置,是否有可能获得性能?或者你会建议一种不同的方法吗?
答案 0 :(得分:0)
我曾经为lapack提供过C ++代码。看看我的答案,它提供了一个如何使用原始Fortran库中的lapack的示例。