Tutorials:AleaHOWTO/ja

From ALPS
Revision as of 08:02, 16 March 2012 by Kota (talk | contribs)

Jump to: navigation, search

ALEAライブラリ

Alea ライブラリは次の機能をもちます。

  • モンテカルロ計算の測定
  • ビンニング解析(ジャックナイフ法)を用いた誤差と自己相関時間の計算
  • 計測した関数の平均値と誤差の計算

モンテカルロ計算の測定

C++で、ALEAライブラリをインクルードします。

#include <alps/alea.h>

まず、observableを生成する必要があります。

alps::RealObservable obs_a("observable a");

ここで、コンストラクタの引数にobservableの名前を与えます。値は簡単に "<<"演算子を使用して、observableに追加できます。例えば

obs_a << 1.2;

観測値"obs_a"に1.2を与えました。

すべてのモンテカルロシミュレーションは熱化を必要とします。 熱化ステップのある回数をおこなった後、観測値を次のようにリセットしなければなりません。

obs_a.reset(true);

観測値の出力は次のように記述してください。

std::cout << obs_a;

全コードです。

#include <iostream>
#include <alps/alea.h>
#include <boost/random.hpp> 

int main()
{
 //DEFINE RANDOM NUMBER GENERATOR
 typedef boost::minstd_rand0 random_base_type;
 typedef boost::uniform_01<random_base_type> random_type;
 random_base_type random_int;
 random_type random(random_int);

 //DEFINE OBSERVABLE
 alps::RealObservable obs_a("observable a");

 //ADD 1000 MEASUREMENTS TO THE OBSERVABLE
 for(int i = 0; i < 1000; ++i){ 
   obs_a << random();
 }

 //RESET OBSERVABLES (THERMALIZATION FINISHED)
 obs_a.reset(true);

 //ADD 10000 MEASUREMENTS TO THE OBSERVABLE
 for(int i = 0; i < 10000; ++i){
   obs_a << random();
 }

 //OUTPUT OBSERVABLE
 std::cout << obs_a;       
}

Functions of Obervables

観測値の関数を作成することができます。例えば、obs_a,obs_bの値から、obs_c=obs_a/obs_bを計算したい場合、次のように記述します。

alps::RealObsevaluator obseval_a(obs_a);
alps::RealObsevaluator obseval_b(obs_b);
alps::RealObsevaluator obseval_c;
obseval_c = obseval_b / obseval_a;
std::cout << obseval_c;

シンプルなサンプルプログラムはALPSソースディレクトリ"test/alea"にあります。参照してください。