2008-10-01から1ヶ月間の記事一覧

Boost.uBLAS でコレスキー分解

今回はコレスキー分解を実装します.コレスキー分解はLU分解の特別な場合であり,入力行列 A が正値対称行列なら,これを A = L x trans(L) あるいは A = trans(U) x U に分解することができます.コレスキー分解は lapack.dpotrf で計算することができます…

Boost.uBLAS で行列式 - lapack版

今回は前回実装した行列式を lapack を用いて実装してみます. 前回と同様にまずLU分解をして,その結果を基に行列式を計算する流れになります. LU分解は前回と同じく lapack.dgetrf を用います.その結果である上三角行列の対角成分の積を計算するだけで行…

Boost.uBLAS で逆行列 - lapack版

今回は前回実装した逆行列を lapack を用いて実装してみます. 前回と同様にまずLU分解をして,その結果を基に逆行列を計算する流れになります. LU分解は前回と同じく lapack.dgetrf を用います.その結果を lapack.dgetri に渡すだけで逆行列を計算できま…

Boost.uBLAS でLU分解 - lapack版

今回は前回実装したLU分解を lapack を用いて実装してみます. 前回は正方行列に限定してLU分解しましたが,今回は PA = LU の形に分解するため,任意の行列をLU分解できます. その代償としてLU分解後の行列の切り出しの処理が必要になり,コード量が増えて…

Boost.uBLAS でLU分解

今回はLU分解を実装します.LU分解を計算する関数はもちろん lapack にもあるのですが,それは次回紹介するとして,今回は uBLAS に実装されている lu_factorize を用いてLU分解してみようと思います.uBLAS の lu_factorize の結果を三角行列に切り出すだけ…

OpenCV での画素値の安全な取得

OpenCV の開発者は非常に多くの機能を実装し提供してくれていますが,最も基本となる画素値への参照にはあまり関心がないようです.CV_IMAGE_ELEM や cvGet*D cvSet*D という機能は用意されていますが,使いにくくしかも安全ではありません. というのも,画…

Boost で正規乱数の生成

シミュレーション実験を行っていると正規乱数が必要になることがよくあります.正規乱数はかなり基本的な乱数であるためさまざまなライブラリに実装されているのですが,私は Boost をよく使っているので,正規乱数でも Boost を使用して発生させています. …

Boost.uBLAS の補完ライブラリの使い方 - その4

今回はベクトルの外積と,前回紹介したuBLASの補完ライブラリの外積の使い方について説明します. 今回説明するのは次の機能です. cross_prod uBLAS には外積を計算する関数がありません.outer_prod というそれらしい名前のものがありますが,これは外積で…

Boost.uBLAS の補完ライブラリの使い方 - その3

今回も前回紹介したuBLASの補完ライブラリの一部の機能について説明します. 今回説明するのは次の機能です. sum trace diag_prod sum は行列の全成分の和を返します.これは boost.numeric.ublas.sum の行列版です. boost.numeric.ublas.sum は何故かベク…

Boost.uBLAS の補完ライブラリの使い方 - その2

今回も前回紹介したuBLASの補完ライブラリの一部の機能について説明します. 今回説明するのは次の機能です. norm_2_sq norm_frobenius_sq これらはそれぞれ ublas.norm_2, ublas.norm_frobenius の自乗を返します. しかし,皆さんはこれらの機能を冗長だ…

Boost.uBLAS の補完ライブラリの使い方 - その1

今回は前回紹介したuBLASの補完ライブラリの一部の機能について説明します. 今回説明するのは次の機能です. abs sqrt square log log10 apply_to_all 使い方はとても簡単で,行列やベクトルにこれらの関数を適用するだけです. 例えば abs を適用した場合…