ublasのpermutation_matrixについて

ublasでLU分解を行う際に使用するpermutation_matrixについ
てはまったのでメモしておく.
permutation_matrixはlu_factorize, lu_substituteと同様にlu.hppに含まれる.
問題はlu_factorize(m, pm)を行った際に, 行列mがsingularでないのにアサーション(BOOST_UBLAS_CHECK
(pm (i) == i_norm_inf, external_logic ());でひっかかる)がでるということだった. 色々と見ていくと,
permutation_matrixを初期化していた以下の行が悪いということがわかった.

pm.clear()
pm.resize( m.size1() )
いたって問題ないようだが, 正しくは,
pm.clear()
pm = permutation_matrix< M::size_type >( m.size1() )

する必要がある.
lu.hppを覗いてみると, permutation_matrixの実態は基本的にただのvectorで,
異なる点はそのコンストラクタで全てのiについて(*this)( i ) = iとしていることだとわかった. 要するに0でなくて,
入れ替えのないindexの並びで初期化しなければならない.
permutation_matrixの意味を考えればあたりまえのことであるが.