GNU Scientific Library(GSL)、数学フリーライブラリでVisual Studio C++数値計算 C++プログラミング入門 しおたに・ドット・チャイナ

006.png

HOME > GNU Scientific Library(GSL)、数学フリーライブラリでVisual Studio C++数値計算

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 をここではダウンロードしました。

2011121201.jpg


2.解凍したgslフォルダ(GSL\1.10\win32_vc71\include\gslフォルダ、.hヘッダファイル群)を、VC++のincludeフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\includeフォルダ)にコピーします。


2011121202.jpg
解凍したgslフォルダ(GSL\1.10\win32_vc71\include\gslフォルダ)


2011121203.jpg
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フォルダ)にコピーします。

2011121204.jpg
解凍したlibフォルダ(GSL\1.10\win32_vc71\libフォルダ)


2011121205.jpg
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」を追加する。

2011121206.jpg



2.VC++のプロジェクトを右クリックして、「追加>既存の項目」で、さきほどコピーしたVC++のlibフォルダ(C:\Program Files\Microsoft Visual Studio 10.0\VC\libフォルダ)にある「gsl.lib」を追加する。


2011121207.jpg


追加されると、プロジェクトのエクスプローラーに「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の分散2011121209.pngの式は、下記となる。そのため、プログラム中では、nではなく、(n-1)で除算してある。

2011121208.png



GSL関連サイト

1.GNU Scientific Library(公式)

2.GSL日本語訳(産業技術総合研究所 富永大介氏訳)

3.CERN(欧州原子核研究機構) LCG(LHC Computing Grid) GSL VCバイナリ