Calculer numériquement l’intégrale définie d’une fonction

Ce billet vous présente une méthode numérique pour approcher la valeur d’une intégrale définie d’une fonction. La méthode présentée est celle de la méthode des trapèzes car il s’agit d’une méthode très simple à comprendre et à programmer.
Le billet vous présente également une mise en place de cette méthode sous Octave (ou Matlab).

Concept mathématique
Je vais vous expliquer ce que représente une intégrale définie d’une fonction de manière intuitive. Cette approche est tout à fait suffisante pour comprendre et mettre en place la méthode des trapèzes.

Une intégrale définie entre deux points a et b, correspond à l’aire algébrique entre la coubre de la fonction et l’axe des x. Aire algébrique sous-entend que si la courbe est sous l’axe des x, l’aire est considérée comme négative.

Méthode des trapèzes
La méthode consiste à découper l’axe des x en intervalles (réguliers ou non). Aux extrémités de chacun de ces intervalles, les images de la fonction représentent les deux sommets supérieurs du trapèze sur cet intervalle.
Méthode des trapèzes
On peut ainsi approcher l’aire sous la courbe par la somme des aires des différents trapèzes, bien sûr plus le nombre d’intervalles est grand, meilleure est l’approximation.
Intervalle méthode trapèze
L’aire du trapèze de l’intervalle compris entre x=a et x=b est obtenue grâce à la formule suivante:
formule aire trapèze

Programmation de la méthode sous Octave
La méthode consiste donc à sommer l’aire de n trapèzes. Si le domaine total d’intégration s’étend de a à b et qu’on la subdivise en n intervalles, alors cette somme vaut:
omme des aires des trapèzes
Il apparaît que les images extérieures n’apparaisse qu’une fois et que toutes les autres interviennent deux fois.
Nous allons utiliser la gestion des matrices d’Octave pour éviter d’utiliser une boucle et ainsi considérablement accélérer l’exécution du calcul.

Tout d’abord, définissons notre fonction Octave qui attend une fonction à intégrer, les limites du domaines a et b, ainsi que le nombre n de sous-intervalles. Par exemple:

function aire = trapezes(fonction,a,b,n)

Nous allons découper le domaine en intervalles réguliers. Nous définissons ainsi la base des trapèzes et les différents points délimitant les intervalles:

base = (b-a)/n;
x = a:base:b;

Il faut maintenant créer un vecteur contenant les images de ces différents points par la fonction à intégrer, ce qui se fait par:

f = fonction(x);

Nous multiplions par 2 tous les éléments sauf le premier et le dernier, sachant que l’indice du premier élément est 1 et du dernier est n+1.

f(2:n) = 2*f(2:n);

Il ne nous reste plus qu’à faire la somme de ces termes et de le multiplier par la moitié de la base.

aire = (base/2)*sum(f);

Voici le code final, j’ai juste ajouté un test sur les valeurs de a et b pour s’assurer que b est plus grand que a.

function aire = trapezes(fonction,a,b,n)
% Calcule l’intégrale définie de la fonction entre a et b en utilisant la méthode des trapèzes

% b doit être plus grand que a
if b<a
% sinon on permute
save = a;
a = b;
b = save;
end

% base des trapèzes
base = (b-a)/n;

% bornes des intervalles
x = a:base:b;

% images des bornes
f = fonction(x);

% Méthode des trapèzes
f(2:n) = 2*f(2:n);
aire = (base/2)*sum(f);

Utilisation de la fonction
Pour intégrer une fonction mathématique, il vous faudra créer un fichier .m contenant une fonction Octave qui prend en argument la variable et qui retourne l’image de cette variable par la fonction mathématique. Par exemple pour f(x)=x²-1:

function f = fonction(x)

f = x.^2 – 1;

Si je veux intégrer cette fonction de 0 à 5, il me suffit d’appeller la fonction trapezes que nous avons programmé juste au-dessus en spécifiant le nom du fichier .m précédé de @, des bornes et du nombre d’intervalles souhaité.
trapezes(@fonction,0,5,10)
Ceci me retourne 36.8750, ce qui est assez proche de la bonne réponse 36.6667 (que vous pouvez obtenir en utilisant la fonction quad d’Octave).

Pour obtenir une meilleure précision, il suffit d’augmenter le nombre d’intervalles, bien sûr au détriment du temps d’exécution. Ainsi
trapezes(@fonction,0,5,1000)
me renvoit 36.6667 ! :D

Bravo à vous, vous avez programmé une méthode qui intègre une fonction mathématique !
Bien sûr, il existe bien d’autres méthodes beaucoup plus performantes mais elles demandent beaucoup plus d’acquis mathématiques.
La méthode des trapèzes est très simple et permet tout de même d’avoir une certaine approximation de l’intégrale.

Une réponse vers «Calculer numériquement l’intégrale définie d’une fonction»

  1. poulacou Dit:

    et comme autre exemple en changeant juste la fonction à integrer : 4/(1+x*x) sur l’intervalle 0 à 1 on obtient une approximation de pi.
    sinon très bon article : clair, efficace et pédagogique


Laisser un commentaire