読者です 読者をやめる 読者になる 読者になる

Boost.uBLAS で最小二乗法

今回は AX = B の最小二乗解(Least squares solution),あるいは最小ノルム解(Minimum norm solution)を計算します.lapack を用いてこれを計算するには dgels, dgelss, dgelsd という関数を用いればよく,対応する bindings のヘッダファイルは gels.hpp, g…

Boost.uBLAS で正値対称係数行列の線形方程式系(System of linear equations)の解の計算

今回は AX = B の解行列 X あるいは Ax = b の解ベクトル x を計算する関数を実装します.ただし,A は正値対称行列であるとします. lapack には dposv という関数があり,これが内部で係数行列をコレスキー分解して解を計算してくれます.つまり,前回と同…

Boost.uBLAS で一般係数行列の線形方程式系(System of linear equations)の解の計算 - lapack版

今回は前回の連立方程式の計算を lapack を用いて実装します. lapack には dgesv という関数があり,これが内部で係数行列をLU分解して解を計算してくれます.私たちがするべきことといえば,いつものように bindings.lapack.gesv に渡す column_major な行…

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 で対称行列の一般化固有値分解(Generalized eigenvalue decomposition)

前回の固有値分解に続き,今回は対称行列の一般化固有値問題を解きます. 一般化固有値問題には lapack.dsygv を用いるだけで,コードも固有値分解のときとほとんど同じで,簡単に実装することができます. 以下に私の実装例を示します.math.hpp #ifndef MA…

Boost.uBLAS で対称行列の固有値分解(Eigenvalue Decomposition) - 高速版

前回は lapack.dsyev による固有値分解(スペクトル分解)を紹介しました. lapack にはもう一つ固有値分解を行う関数があります. それが今回紹介する lapack.dsyevd になります. dsyev との違いは分割統治法(divide-and-conquer method)により処理を高速…

Boost.uBLAS で対称行列の固有値分解(Eigenvalue Decomposition)

前回のQR分解に続き,今回は対称行列の固有値分解(スペクトル分解)を実装します. QR分解のときと違い,lapack.dsyev を用いるだけなので,特異値分解のときと同様に非常に簡単に実装することができます. 以下に私の実装例を示します.math.hpp #ifndef M…

Boost.uBLAS でQR分解

前回の特異値分解に続いて,今回はQR分解を実装してみます. 特異値分解はあっけないほど単純に実装できたのですが,QR分解はそれよりも少し長くなります. なぜなら,特異値分解は lapack.dgesvd(lapack.dgesdd) を呼び出すだけで良かったのですが,QR分解…

Boost.uBLAS で特異値分解(SVD) - 高速版

前回は bindings.lapack.gesvd による特異値分解を紹介しました. lapack にはもう一つ特異値分解を行う関数があります. それが今回紹介する bindings.lapack.gesdd(lapack.dgesdd) になります. gesvd との違いは分割統治法(divide-and-conquer method)に…

Boost.uBLAS で特異値分解(SVD)

Boost.uBLAS と Boost.Bindings, clapack をインストールした今,特異値分解を簡単に実装することができます. というのも,Boost.Bindings を通して bindings.lapack.gesvd(lapack.dgesvd) を呼び出すだけだからです. 以下に私の実装例を示します.math.hp…

Boost と Boost.Bindings と clapack のインストール

今回は lapack の機能を使えるようにするための準備(インストール)を行います. そのためには以下の三つのコンポーネントをインストールする必要があります. boost boost-sandbox clapack 一つずつ説明していきます.boost のインストールuBLAS はこの bo…