Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Boost::ublasで行列計算する その4:粗行列

疎行列
出典: フリー百科事典『ウィキペディアWikipedia)』

疎行列(そぎょうれつ、英: sparse matrix)とは、成分のほとんどが零である行列のことをいう。スパース行列とも言う。
(中略)
数値解析の分野では、疎行列を前提とした解法が多い。疎行列であれば格納方式を工夫することで次元数を増やすことができる上に、ベクトル-行列積が比較的低計算量で求められるためである。

実際、制御などで行列を使おうとした場合動かさない軸が結構多かったりします。
メモリは可能な限り小さくしたほうが何かとありがたいですよね。

実際のところ

格納法は3種あります。
具体的には連想配列、行圧縮格納、座標格納です。

#include <boost/numeric/ublas/matrix_sparse.hpp> 

//...

using namespace boost::numeric::ublas;
mapped_matrix<double> mat_sp_mp(3,100, 3*100);   //  doubleの 3 行 1000 列の疎行列(連想配列式)
compressed_matrix<double> mat_sp_cm (3, 3, 3 * 3);   //  doubleの 3行 x 3列 の疎行列(行圧縮格納式)
coordinate_matrix<double> mat_sp_cm (7, 3, 7 * 3);   //  doubleの 7行 x 3列 の疎行列(座標格納式)