私はあなたがEigen
間違って使用しているとかなり確信しています。ランダムな1000x1000行列をオクターブ(MATLABの無料の代替、おそらくわずかに最適化されていない)と次のEigenコードで反転してみました。Octaveは約1秒、Eigenは約1.5秒かかりboost::timer
ます(タイミングソリューションの代わりに使用していますが、面倒が少ないためです):
#include <iostream>
#include <Eigen/Dense>
#include <boost/timer/timer.hpp>
using Eigen::MatrixXcd;
int main() {
MatrixXcd m,mi;
{
boost::timer::auto_cpu_timer t;
m = MatrixXcd::Random(1000,1000);
}
{
boost::timer::auto_cpu_timer t;
mi = m.inverse();
}
std::cout << mi(4,4) << std::endl;
}
私が考えることができる最初の考えられる原因は、コンパイラオプションです。-O2
少なくともC++コードをコンパイルしましたか?
行列が特殊な構造を持っている可能性があるため、数値を考慮すると、特定の場合に固有アルゴリズムが遅くなりますが、それを検討する前に、他の場所で問題を探します。