Eigen ー C++で線形代数を!(3)

前回(といってもずいぶん前のことですが)は eigen の基本的な使い方について書きました。

Eigen ー C++で線形代数を!
Eigen ー C++で線形代数を!(2)

今回は連立方程式を解くための一つの方法である LU 分解を eigen から使う方法について書いてみたいと思います。

毎度のことですが、より詳細な情報についてはマニュアルを読んでください。英語ですがわかりやすく書いてあります。ちなみに今回使っている Eigen のバージョンは 3.0 です。

Eigen を使うと非常に簡単に LU 分解を計算することができます。余計なお世話かもしれませんが、こんなに簡単だとついついブラックボックスとして使いがちです。しかし、LU分解による求解は数値解析の観点からはベストの方法であるとは限りません。特に、疎行列のケースでは(CG法系列の)別の解法を使ったほうがよいでしょう。Eigen も sandbox レベルでは BiCG などの疎行列用の解法が存在しています。Eigen の疎行列ライブラリを使って自分で実装してもそんなに問題はないと思います。

いきなり御託を並べてしまいましたが、気を取り直して、先に進みましょう。
続きを読む

Eigen ー C++で線形代数を!(2)

(このエントリーは旧ブログからの転載です)

ここではC++用線形代数ライブラリ eigen を個人的に習得するために作ったサンプルプログラムを公開しています(一部、本家のチュートリアルと重複しています)。使ってみて感じたのは C++ という言語で ruby や R 的な配列の柔軟さを実現していてすごいなーということでした。ブロードキャストの例に出てくるメソッドチェーンなんて結構感動(式テンプレートのおかげで、おそらくパフォーマンスは落ちない)。すばらしいライブラリです。以下、ライブラリの基本的な説明です。固有値計算などいわゆる線形代数特有の演算についてはいずれ書きます。

【追記】 続きを書きました。Eigen ー C++で線形代数を!(3)

続きを読む

Eigen ー C++で線形代数を!

このエントリーおよび続くエントリーで、C++ で書かれた線形代数ライブラリ Eigen を使うためのメモなどを書いてみようと思います(このエントリーは旧ブログからの転載です)。

とはいっても本家のほうに非常にわかりやすいマニュアルが整備されているので、「この部分はマニュアルを見てね」的な部分も出てくるかもしれませんが。
最終的には微分方程式とか最適化とかの応用問題について書いてみたいと思います。

(現時点(2011/2)で私が触っているのはバージョン 2.0 ですが、もうすぐバージョン 3.0 が出るようです)
続きを読む