gslを使うとC言語などでベクトル計算、積分計算、行列計算、特殊計算、最適化などができる。
フリーのライブラリ。
cygwinでgccとgslをインストールしているとして、
の状況を書く。
参考1:
http://www.db.is.kyushu-u.ac.jp/rinkou/cygwin/gslfuncs.html
1)例1 特殊関数
#include<stdio.h> #include<gsl/gsl_sf_bessel.h> int main(){ double y; y=gsl_sf_bessel_J0(1.2); printf("%lf\n",y); }
コンパイルと実行。
gcc netnagashi.c -lgsl
./a.exe
0.67113
gcc netnagashi.c -lgsl -lgslcblas ./a.exe 0.67113
2)例2 0べクトルの作成
ベクトル出力関数: gsl_vector_fprintf(stream s,gsl_vector v,format f)
ゼロベクトル作成関数(要素i個):gsl_vector_calloc(int i);
#include<stdio.h> #include<gsl/gsl_vector.h> int main(){ gsl_vector *v=gsl_vector_calloc(4); gsl_vector_fprintf(stdout,v,"%E"); close(f); gsl_vector_free(v); }
コンパイル実行
$gcc test2.c -lgsl $ ./a.exe 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00
例3)ベクトルの四則演算とファイル出力。
四則演算
gsl_vector_add(gsl_vector v1,gsl_vector v2);
v1=v1+v2 という処理。
gsl_vector_sub(v1,v2);
gsl_vector_mul(v1,v2);
gsl_vector_div(v1,v2);
など。
ファイル出力
gsl_vector_fprintf(stream f,gsl_vector v1,format "%E");
ベクトルの初期化
gsl_vector_set_all(gsl_vector v1,double c);
すべての要素をcにする。
v1=(c,c,c,c)のベクトルにする。
#include<stdio.h> #include<gsl/gsl_vector.h> int main(){ FILE *f; f=fopen("test.txt","w"); gsl_vector *v1=gsl_vector_calloc(4); gsl_vector *v2=gsl_vector_calloc(4); gsl_vector_set_all(v1,1.0); gsl_vector_set_all(v2,3.0); fprintf(f,"Initial\n") ; gsl_vector_fprintf(f,v1,"%E"); gsl_vector_fprintf(f,v2,"%E"); fprintf(f,"Tashizan \n") ; gsl_vector_add(v1,v2); gsl_vector_fprintf(f,v1,"%E"); fprintf(f,"Hikizan \n") ; gsl_vector_sub(v1,v2); gsl_vector_fprintf(f,v1,"%E"); fprintf(f,"Kakezan \n") ; gsl_vector_mul(v1,v2); gsl_vector_fprintf(f,v1,"%E"); fprintf(f,"Warizan \n") ; gsl_vector_div(v1,v2); gsl_vector_fprintf(f,v1,"%E"); fprintf(f,"Teisuubai \n") ; gsl_vector_scale(v1,0.0003); gsl_vector_fprintf(f,v1,"%E"); fprintf(f,"Teisuwa \n") ; gsl_vector_add_constant(v1,5); gsl_vector_fprintf(f,v1,"%E"); close(f); gsl_vector_free(v1); gsl_vector_free(v2); }
コンパイル実行。
$ gcc gsltest3.c -lgsl $ ./a.exe $cat test.txt Initial 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 3.000000E+00 3.000000E+00 3.000000E+00 3.000000E+00 Tashizan 4.000000E+00 4.000000E+00 4.000000E+00 4.000000E+00 Hikizan 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 Kakezan 3.000000E+00 3.000000E+00 3.000000E+00 3.000000E+00 Warizan 1.000000E+00 1.000000E+00 1.000000E+00 1.000000E+00 Teisuubai 3.000000E-04 3.000000E-04 3.000000E-04 3.000000E-04 Teisuwa 5.000300E+00 5.000300E+00 5.000300E+00 5.000300E+00