最終更新: 2013/9/17
ublasの使い方
1 概要
boostライブリに含まれるublasは、行列計算を行うテンプレートライブラリである。
行列やベクトルの各要素はテンプレートになっており、doubleや
floatばかりでなくintervalを入れたり、自作の型を入れることも出来る。
自動微分などの特殊な型を使うことが多い非線形計算の精度保証には
うってつけのライブラリであると言える。
なお、blasという名前から高速に動作するようなイメージを持つかも
知れないが、blasと同等のインターフェースを持つという意味で
ublasと名付けられており、特に高速なわけではない
(自分でforループを回して書いたプログラムと同程度)。
2 使い方
詳細は
Boost Library Documentation
の中の
ublasの項を参照のこと。
日本語の解説も参考になるかも。
boost::numeric::ublas 線形代数ライブラリの使い方
も大変参考になる。
なお、STLの一部としてstd::vectorが存在するため、
using namespace std;している場合などに
boost::numeric::ublas::vectorと衝突してエラーになりやすい
(test-ublas2.cc)。
test-ublas3.ccのように
ublasのvectorは明示的に指定することにしてusing namespaceに頼らないのが
安全かも知れない。
3 マクロNDEBUGについて
ublasではExpression Templateと呼ばれる技法を用い、
余分な一時変数を作成しないことで高速化を図っている。
但し、この機能はコンパイル時に -DNDEBUGを付けて
NDEBUGマクロを定義した場合のみ有効になる。
NDEBUGはC++においてrelease版(debug版で無い)を
makeする場合に付加するマクロとして一般的であり、実際Visual C++で
release版としてbuildすると自動的にこのマクロが付加される。
なお、ublasでは、NDEBUGマクロが定義されていない場合は
配列の添字溢れのチェックが行われるが、NDEBUGを定義すると
チェックが省かれて高速化されるようになっている。