Boost

Boost とはC++ のためのオープンソースライブラリのことで、 いろいろと便利なライブラリを含んでいます。 例えば、乱数発生だとか、特殊関数の計算だとかができます。 ただ、使い方がちょっと分かりにくいので、 備忘録としてメモを書いておきます。

なお、Ubuntu のバージョンは 10.04LTSです。

注意: あくまで個人的な備忘録ですので、 Boostライブラリについての理解や使い方について、 これで正しいと保証するものではありません。 この記事を元に何かをした結果、 何らかの損害が発生したとしても、 当方は一切の責任を負いません。 実行は自己責任でお願いします。

参考サイト

インストール

まず C++ のコンパイラ g++ は標準ではインストールされていないので、
sudo apt-get install g++
でインストールしておきます。そして、boost を
sudo apt-get install libboost-dev
でインストールします。 /usr/include/boost 以下にライブラリがインストールされます。

乱数発生

シミュレーションなどでは、浮動小数点(実数)の乱数が必要になることが 多いと思います。以下は、Mersenne Twister という方法で [0,1] の一様乱数を得るサンプルプログラムです。
  #include <boost/random.hpp> //乱数発生用ヘッダファイル
  #include <iostream> //確認の出力用
  #include <ctime> //乱数の種に time を使う場合に必要

  double UniformRandom() //一様乱数を発生させる関数
  {
    static boost::mt19937 gen( static_cast<unsigned int>(time(0)) );
    static boost::uniform_real<> dst(0,1);
    static boost::variate_generator< boost::mt19937&, boost::uniform_real<> > rand(gen, dst);
    return rand();
  }

  int main()
  {
    for(int i=0; i<10; ++i)
       std::cout << UniformRandom() << std::endl;
  }
上の内容をrandom.cpp というファイルに保存して、 コンパイル
g++ random.cpp
して実行
./a.out
すると[0,1]乱数が10個出力されるはずです。

説明

関数 UniformRandom() 内の記述について、説明します。

main 関数側では、UniformRandom() を呼び出すだけです。

その他

特殊関数(第1種変形ベッセル関数)

例として、第1種変形ベッセル関数の値を得る方法です。
  #include <boost/math/special_functions/bessel.hpp> // ベッセル関数関係のヘッダファイル
  #include <iostream> //確認の出力用

  int main()
  {
      std::cout << boost::math::cyl_bessel_i(0,0.5) << std::endl;
  }
cyl_bessel_i というのが第1種変形ベッセル関数の値を返す関数で、 名前空間 boost::math にあるようです。 cyl_bessel_i の引数は、第1引数が第1種変形ベッセル関数の次数(実数)で、 第2引数が計算したい点(複素数)です。 第2引数は複素数と書いていますが、複素数で試したことはないので 正しい値が得られるかはわかりません。

他にもいろんな特殊関数が用意されています。


Last modified: Tue Apr 9 11:45:54 JST 2013