Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Change language to: Français - Português - 日本語

See the recommended documentation of this function

intg

definite integral

Calling Sequence

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

Arguments

a,b

real numbers

f

external (function or list or string)

ea, er

real numbers

ea

absolute error required on the result. Default value: 1.d-14

er

relative error required on the result. Default value: 1.d-8

err

estimated absolute error on the result.

Description

`intg(a,b,f)` evaluates the definite integral from `a` to `b` of `f(t)dt`. The function `f(t)` should be continuous.

The evaluation hopefully satisfies following claim for accuracy: `abs(I-v)<= max(ea,er*abs(I))` where I stands for the exact value of the integral.

`f` is an external :

If `f` is function its definition must be as follows `y = f(t)`

If `f` is a list the list must be as follows: `list(f,x1,x2,...)` where `f` is a function with calling sequence `f(t,x1,x2,...)`.

If `f` is a string it refers to a the name of a Fortran function or a C prodedure with a given calling sequence:

In the fortran case the calling sequence should be ```double precision function f(x)``` where `x` is also a double precision number.

In the C case the calling sequence should be ```double f(double *x)```.

Examples

```// Function written in the Scilab language
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)

// Function with an argument written in the Scilab language
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)

// Function written in Fortran (a Fortran compiler is required)
// define a Fortran function
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')

// compile the function

// add the function to the working environment

// integrate the function
I=intg(0,2*%pi,'ffun')
abs(exact-I)

// Function written in C (a C compiler is required)
// define a C function
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')

// compile the function

// add the function to the working environment

// integrate the function
I=intg(0,2*%pi,'cfun')
abs(exact-I)```

Used Functions

The associated routines can be found in SCI/modules/differential_equations/src/fortran directory :