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 を適用した場合…

Boost.uBLAS の補完ライブラリ

uBLAS は行列とベクトルに関する基本的な線形代数の演算を提供していますが,一部の演算は未だ実装されていません. 例えば,uBLAS には行列のトレース(Trace)やベクトルの外積(Cross product)を計算する関数はありません. そこで,uBLAS に実装されていな…

Boost.uBLAS の遅延評価について

今回は uBLAS の遅延評価について説明します. uBLAS が他の数ある行列演算ライブラリと比べもっとも性質を異にしているものがこの遅延評価です. これは uBLAS 最大の特徴であり,Expression template という技法により実現されています. その実装はとても…

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…

Boost.uBLAS で行列式

前回は逆行列を紹介しました.逆行列の次にくるものと言えば,やはり行列式でしょう(どちらかというと逆かもしれませんが). 逆行列のときと同様に,行列式を求める関数もuBLASには存在しないため,自分で作るなりどこかからもってくるなりしなくてはなり…

Boost.uBLAS で逆行列

Boost.uBLASを使い始めて,一番最初に疑問に思うことの多くは 「uBLASには逆行列を計算する関数はないのか」 だと思います. 残念ながらuBLASにはそのような関数はありません. しかし,多くの先人が既にこの問題を解決してくれています. 具体的には次のサ…

C++ の行列演算ライブラリ

こんにちは.このブログでは主に Boost.uBLAS と Boost.Bindings, lapack(clapack) というライブラリを用いた行列計算のライブラリの構築手順と,その実装例を紹介していこうと思います. C++ には uBLAS という有名な行列計算を行うライブラリがあり,基本…