GNU Scientific Library(GSL)、数学フリーライブラリでVisual Studio C++数値計算
GNU Scientific Library(GSL)のWindowsへのインストール(準備)
1.CERN(欧州原子核研究機構) LCG(LHC Computing Grid) GSL VCバイナリから、GSLのVC++バイナリの最新バージョンをダウンロードします。
現時点の最新バージョン、GSL_1.10__LCG_win32_vc71.tar.gz をここではダウンロードしました。
2.解凍したgslフォルダ(GSL\1.10\win32_vc71\include\gslフォルダ、.hヘッダファイル群)を、VC++のincludeフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\includeフォルダ)にコピーします。
解凍したgslフォルダ(GSL\1.10\win32_vc71\include\gslフォルダ)
VC++のincludeフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\includeフォルダ)
3.解凍したlibフォルダ(GSL\1.10\win32_vc71\libフォルダ)を、名前をgslに変更して、VC++のlibフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\libフォルダ)にコピーします。
解凍したlibフォルダ(GSL\1.10\win32_vc71\libフォルダ)
VC++のlibフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\libフォルダ)
4.解凍したlibフォルダ(GSL\1.10\win32_vc71\libフォルダ)内にある「gsl.dll」と「gslcblas.dll」をC:\WINDOWS\system32フォルダにコピーする。
VC++の設定
1.VC++の「プロジェクト>プロパティ>構成プロパティ>C/C++>プリプロセッサ>プリプロセッサの定義」を編集し、「GSL_DLL」を追加する。
2.VC++のプロジェクトを右クリックして、「追加>既存の項目」で、さきほどコピーしたVC++のlibフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\libフォルダ)にある「gsl.lib」を追加する。
追加されると、プロジェクトのエクスプローラーに「gsl.lib」が表示される。
必要に応じて、gslcblas.lib(線形代数)なども追加する。
3.VC++プログラムのinclude文で、GSLの必要なヘッダファイルを読み込む。
ここでは、データ平均や分散、標準偏差を求めるライブラリ関数を読み込むために、#include <gsl/gsl_statistics_double.h> を記述する。
平均、分散、標準偏差のC++言語サンプルプログラム
#include <iostream>
#include <math.h>
#include <gsl/gsl_statistics_double.h> //GSLライブラリのヘッダファイル指定
using namespace std;
int main(){
double a[]={0,1,2,3,4,5,6,7,8,9,10};
double ave=0.0,var=0.0,stdev=0.0; //ave:平均,var:分散,stdev:標準偏差
int n=sizeof(a)/sizeof(a[0]); //配列の要素数n=配列aのサイズ/配列1要素a[0]のサイズ
for(int i=0; i<n; i++){
ave+=a[i];
}
ave=ave/double(n);
for(int i=0; i<n; i++){
var+=pow((a[i]-ave),2.0);
}
var=var/double(n-1); //nでなく、(n-1)で除算
stdev=sqrt(var);
cout << "ave = " << ave << endl;
cout << "var = " << var << endl;
cout << "stdev = " << stdev << endl << endl;
cout << "ave = " << gsl_stats_mean(a,1,n) << endl; //平均:GSLライブラリで計算
cout << "var = " << gsl_stats_variance(a,1,n) << endl; //分散:GSLライブラリで計算
cout << "stdev = " << gsl_stats_sd(a,1,n) << endl << endl; //標準偏差:GSLライブラリで計算
return 0;
}
コンソール出力結果
ave = 5 var = 11 stdev = 3.31662 ave = 5 var = 11 stdev = 3.31662
なお、GSLの分散の式は、下記となる。そのため、プログラム中では、nではなく、(n-1)で除算してある。
GSL関連サイト
1.GNU Scientific Library(公式)
2.GSL日本語訳(産業技術総合研究所 富永大介氏訳)
3.CERN(欧州原子核研究機構) LCG(LHC Computing Grid) GSL VCバイナリ