Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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,TMPDIR+'/ffun.f') // Fortranコードをコンパイル l=ilib_for_link('ffun','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,TMPDIR+'/cfun.c') // Cコードをコンパイル l=ilib_for_link('cfun','cfun.f',[],'c'); // インクリメンタルリンクの実行 link(l,'cfun','c') // 関数の積分 I=intg(0,2*%pi,'cfun') abs(exact-I)
使用される関数
関連するルーチンは SCI/modules/differential_equations/src/fortran ディレクトリにあります :
quadpackのdqag0.f および dqags.f
<< integrate | Differential Equations, Integration | intl >> |