# intg

定積分

## 呼び出し手順

    [v,err]=intg(a,b,f [,ea [,er])

## パラメータ

a, b

  実数

f

  外部 (関数またはリストまたは文字列)

ea, er

  実数

ea

  結果に指定する絶対誤. デフォルト値: 1.d-14.

er

  結果に指定する相対誤差. デフォルト値: 1.d-8.

err

  結果に関する絶対誤差の推定値.

## 説明

`intg(a,b,f)` は, `f(t)dt`の `a` から `b`までの 定積分を計算します. 関数 `f(t)` は連続である必要があります.

この計算は以下の精度を満たすことが期待されます: `abs(I-v)<= max(ea,er*abs(I))` ただし `I` はこの積分の真値を意味します.

`f` は以下のような外部ルーチンです :

`f` が関数の場合, `y = f(t)` のように定義されている必要があります.

`f` がリストの場合, このリストは以下のようである必要があります: `list(f,x1,x2,...)` ただし `f` は呼び出し手順が `f(t,x1,x2,...)` の関数です.

`f` が文字列の場合, 以下の規定の呼出し手順を有する Fortran関数またはCプロシージャの名前を指しています:

Fortran の場合, 呼出し手順は `double precision function f(x)` とします. ただし, `x` も倍精度実数となります.

Cの場合, 呼出し手順は `double f(double *x)` とします.

## 例

    //Scilabで記述された外部関数
    function y=f(x),y=x*sin(30*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
    exact=-2.5432596188;
    I=intg(0,2*%pi,f)
    abs(exact-I)

    //1つの引数を有するScilabで記述された関数
    function y=f1(x,w),y=x*sin(w*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
    I=intg(0,2*%pi,list(f1,30))
    abs(exact-I)

    // Fortranで記述された外部関数 (Fortranコンパイラが必要)
    // Fortranコードの記述
    cd TMPDIR;
    F=['      double precision function ffun(x)'
       '      double precision x,pi'
       '      pi=3.14159265358979312d+0'
       '      ffun=x*sin(30.0d+0*x)/sqrt(1.0d+0-(x/(2.0d+0*pi))**2)'
       '      return'
       '      end'];
    mputl(F,fullfile(TMPDIR,'ffun.f'))

    // Fortranコードをコンパイル
    l=ilib_for_link('ffun',fullfile(TMPDIR,'ffun.f'),[],'f');

    // インクリメンタルリンクの実行
    link(l,'ffun','f')

    // 関数の積分
    I=intg(0,2*%pi,'ffun')
    abs(exact-I)

    // Cで記述された外部関数 (Cコンパイラが必要)
    // Cコードの記述
    C=['#include <math.h>'
       'double cfun(double *x)'
       '{'
       '  double y,pi=3.14159265358979312;'
       '  y=*x/(2.0e0*pi);'
       '  return *x*sin(30.0e0**x)/sqrt(1.0e0-y*y);'
       '}'];
    mputl(C,fullfile(TMPDIR,'cfun.c'))

    // Cコードをコンパイル
    l=ilib_for_link('cfun',fullfile(TMPDIR,'cfun.c'),[],'c');

    // インクリメンタルリンクの実行
    link(l,'cfun','c')

    // 関数の積分
    I=intg(0,2*%pi,'cfun')
    abs(exact-I)

## 参照

- intc
- intl
- inttrap
- intsplin
- ode

## 使用される関数

関連するルーチンは SCI/modules/differential_equations/src/fortran ディレクトリにあります :

quadpackのdqag0.f および dqags.f