ublas

ublasのlu_factorizeはbanded_matrixには使えないのか?

http://d.hatena.ne.jp/hotoku/20110121/1295538662なんて書いて喜んだのも束の間、ublasで帯行列とLU分解の組み合わせは一筋縄では行かぬかもしれない。 LU分解関数 lu_factorizeの中のpivotingの部分で、matrix_rowクラスのswap関数を呼ぶんだけど、こいつ…

ublasのbanded_matrixとlu_factorizeで、帯行列の逆行列とベクトルの積を線形時間で

帯行列の逆行列は一般には密行列なので、帯行列の逆行列の計算は。しかし、帯行列のLU分解はで出来るので、帯行列とベクトルに対してはで計算できる。これを実装。 /*! g++ main.cpp -g -DNDEBUG */ #include <boost/numeric/ublas/banded.hpp> #include <boost/numeric/ublas/io.hpp> #include <boost/numeric/ublas/operation.hpp> #include <boost/numeric/ublas/lu.hpp> #include </boost/numeric/ublas/lu.hpp></boost/numeric/ublas/operation.hpp></boost/numeric/ublas/io.hpp></boost/numeric/ublas/banded.hpp>

banded_matrixの積はちゃんと線形時間だった件

http://d.hatena.ne.jp/hotoku/20101201/1291219911の疑問が解決した。簡単なことだ。NDEBUGマクロを定義すれば良かったのだ。ublasは、NDEBUGが無い場合はデバッグビルドと看做してサイズチェック等のテストコードを埋め込む。なので、最大の速度を求めるな…