Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Português - Русский - 日本語

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Aide de Scilab >> Calcul différentiel, Intégration > intg

intg

intégration numérique adaptative

Séquence d'appel

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

Paramètres

a, b

nombres réels.

f

fonction externe (fonction Scilab ou chaîne de caractères ou liste).

ea, er

nombres réels.

ea

erreur absolue désirée (1.d-14 par défaut).

er

erreur relative (1.d-8 par défaut).

err

estimation de l'erreur absolue sur le résultat.

ierr

numéro d'erreur (= 0 si absence d'erreur).

Description

intg(a,b,f) approche l'intégrale de a à b de f(t)dt. La fonction f doit être continue.

L'évaluation satisfait si possible abs(I-v)<= max(ea,er*abs(I))I représente la valeur exacte de l'intégrale.

f est une fonction externe :

Si f est une fonction Scilab elle doit avoir la liste d'appel : y = f(t)

Si f est une liste, cette liste doit avoir la structure suivante : list(f,x1,x2,...)f est une fonction Scilab avec la liste d'appel : f(t,x1,x2,...).

Si f est une chaîne de caractères, ce paramètre désigne le nom d'un fonction Fortran ou d'une procédure C ayant une liste d'appel fixée:

Dans le cas Fortran la liste d'appel doit être: double precision function f(x)x est aussi un nombre double precision.

Dans la cas C la liste d'appel doit être: double f(double *x) .

Limitation connue

Comme tous les intégrateurs, intg est susceptible de manquer des pics.

Une fonction plate contenant un pic sera considérée totalement plate si le pic est suffisamment raide.

Cela ne peut pas être évité, on comprend facilement pourquoi dès que l'on comprend comment l'intégrateur opère. En effet, intg utilise la méthode des 21 points de Gauss-Kronrod, donc s'il y a un pic entre deux points d'intégration consécutifs, il ne sera pas détecté, la fonction sera considérée lisse.

Cependant, un warning s'affichera si la fonction est considérée très lisse, qui suggèrera à l'utilisateur de réduire l'intervalle d'intégration, s'il pense que des pics ont été manqués.

Les graphes suivants illustrent ce phénomène.

Se situant entre les 9è and 10è points d'intégration, le pic n'est pas détecté et intg considère la fonction comme plate. Dans l'image suivante, le pic est suffisamment large pour être détecté.

Si l'utilisateur veut afficher la solution même si le solveur a rencontré une erreur, il doit ajouter le troisième argument de sortie ierr, ce qui transformera les erreurs en warnings. Ceci est surtout utilisé dans les cas d'erreurs d'arrondi.

Exemples

//External écrit en 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)

//External écrit en Scilab avec un argument
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)

// External écrit en Fortran (un compilateur Fortran est nécessaire)
// Ecriture du code 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'))

// compilation du code Fortran
l=ilib_for_link('ffun',fullfile(TMPDIR,'ffun.f'),[],'f');

// link incrémental
link(l,'ffun','f')

// integration de la fonction
I=intg(0,2*%pi,'ffun')
abs(exact-I)

// External écrit en C (un compilateur C est nécessaire)
// Ecriture du code 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'))

// compilation du code C
l=ilib_for_link('cfun',fullfile(TMPDIR,'cfun.c'),[],'c');

// incremental linking
link(l,'cfun','c')

// integration de la fonction
I=intg(0,2*%pi,'cfun')
abs(exact-I)

Voir aussi

  • intc — intégrale de Cauchy
  • intl — Cauchy integral
  • inttrap — intégration approchée de données expérimentales avec la méthode des trapèzes.
  • intsplin — intégration approchée de données expérimentales utilisant une interpolation par une spline.
  • ode — solveur d'équations différentielles ordinaires

Fonctions Utilisées

Les programmes correspondants (dqags.f et dqagse.f de quadpack) se trouvent dans le répertoire SCI/modules/differential_equations/src/fortran/.

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 13:54:29 CEST 2014