金子邦彦研究室プログラミングGSL の活用GSL (GNU Scientific Library) を用いた補間と数値微分

GSL (GNU Scientific Library) を用いた補間と数値微分

GSL の補間,数値積分の機能について一部分を紹介する.

前準備

GSL のインストール

Windows での GSL のインストール(ソースコードを使用)(MSYS2,configure,make を利用): 別ページ »で説明

補間

【要点】

  1. MSYS2 MINGW64 を実行する

    スタートメニューで,「MSYS2」の下の「MSYS2 MINGW64」を選ぶ.

  2. プログラムの準備
    #include<stdio.h>
    #include<math.h>
    #include<gsl/gsl_spline.h>
         
    #define N 8
    int main (int argc, char **argv)
    {
      double x[N], y[N];
      gsl_interp_accel *acc = gsl_interp_accel_alloc();
      gsl_spline *spline = gsl_spline_alloc(gsl_interp_cspline, N); 
      
      /* 三角関数の値を入れる */ 
      int i;
      for(i = 0; i < N; i++) {
        x[i] = (double)i/N; 
        y[i] = sin( x[i] );
      }
    
      // 初期化
      gsl_spline_init(spline, x, y, N);
    
      // 補間
      double xi, yi;
      for(xi = 0; xi < x[N-1];) {
        yi = gsl_spline_eval(spline, xi, acc); 
        fprintf( stderr, "%f, %f\n", xi, yi ); 
        xi = xi + 0.04; 
      }
    
      gsl_spline_free(spline);
      gsl_interp_accel_free(acc);
    
      return 0;
    }
    
  3. ビルドして実行
    gcc -I"C:\gsl\include" -c -o a.o a.c
    gcc -L"C:\gsl\lib" -o a.exe a.o -lgsl -lgslcblas
    ./a.exe
    

    [image]

補間のまとめ

数値微分

【要点】

  1. MSYS2 MINGW64 を実行する

    スタートメニューで,「MSYS2」の下の「MSYS2 MINGW64」を選ぶ.

  2. プログラムの準備
    #include<stdio.h>
    #include<gsl/gsl_math.h>
    #include<gsl/gsl_deriv.h>
    
    double f( double x, void* params )
    {
      return sin(x);
    }
    
    int main(int argc, char** argv)
    {
      gsl_function F;
      double result;
      double abserr;
      double x;
      double step;
      F.function = &f;
      F.params = 0;
     
      x = 0.01;
      step = 1e-07;
      gsl_deriv_central(&F, x, step, &result, &abserr);
      fprintf(stderr, "result = %f, abserr = %f\n", result, abserr);
    
      return 0;
    }
    
  3. ビルドして実行
    gcc -I"C:\gsl\include" -c -o a.o a.c
    gcc -L"C:\gsl\lib" -o a.exe a.o -lgsl -lgslcblas
    ./a.exe
    

    [image]

数値積分のまとめ