モンテカルロ法および準モンテカルロ法による数値積分

このプログラムはモンテカルロ法および準モンテカルロ法による数値積分を行う。

依存システム

ダウンロード

インストール

インストール先をYOUR_INSTALL_DIRとすると、

./configure --prefix=YOUR_INSTALL_DIR
make
make install

準備

環境変数 SOBOL_PATH をインストールディレクトリ以下のshare/mcqmcintegration/に セットする。

export SOBOL_PATH=YOUR_INSTALL_DIR/share/mcqmcintegration/

LIBRARY_PATH と CPLUS_INCLUDE_PATH を適切にセットする。

注意

データファイル 'sobolbase.dat' はLittel Endianシステムで作られた バイナリファイルであり、 Big Endian システムでは正確に動作しないだろう。

使用法

準モンテカルロ法及びモンテカルロ法による数値積分の計算をするC++関数は以下のとおり。

準モンテカルロ法で使う超一様分布列の指定は以下の列挙型を使う。

返却値は次の構造体になる。

MCQMCIntegration::quasi_monte_carlo_integration()の引数

uint32_t N
積分を行う回数。この回数だけ積分を繰り返し、平均と誤差を求める。
I & integrand
I テンプレートパラメータ。被積分関数。ユーザー定義のクラス
DigitalNetID dnid
使用するデジタルネットを表す。
uint32_t s
積分領域の次元。
uint32_t m
デジタルネットの上位mビットまでの精度, また1回の積分で2^m個の点を使用する。
int probability
積分結果が誤差内に入ると期待される確率を表す整数。95, 99, 999, 9999のひとつ。

MCQMCIntegration::monte_carlo_integration()の引数

uint32_t s
積分領域の次元。
uint32_t m
1回の積分で2^m個の点を使用する。
uint32_t N
積分を行う回数。この回数だけ積分を繰り返し、平均と誤差を求める。
I & integrand
I テンプレートパラメータ。被積分関数。ユーザー定義のクラス
R & rand
R テンプレートパラメータ。擬似乱数クラス, C++11のrandomで定義されたクラス
D & dist
D テンプレートパラメータ。擬似乱数の分布のクラス。 C++11のrandomで定義された実数一様分布クラス
int probability
積分結果が誤差内に入ると期待される確率を表す整数。95, 99, 999, 9999のひとつ。

準モンテカルロ法、およびモンテカルロ法による数値積分の返却値

value
数値積分の結果の平均値。
error
絶対誤差

被積分関数の条件

被積分関数クラスは以下の条件を満たす operator() 演算子を定義する必要がある。

プログラム例

参考文献

LICENSE

    Copyright (c) 2008, Frances Y. Kuo and Stephen Joe.
    All rights reserved.

    Copyright (C) 2017 Shinsuke Mori, Makoto Matsutmoto, Mutsuo Saito
    and Hiroshima University.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.