Approximation numérique de calculs intégraux

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche

Les calculs intégraux sont de nos jours beaucoup utilisés pour la création et la modification de modélisation d'éléments, ou permettre l'analyse de fonctions. Ces calculs sont parfois compliqués et nécessitent parfois beaucoup de travail. Pour nous aider, il nous est possible d'utiliser des machines qui peuvent réaliser ces calculs à notre place.

Pour cela, il nous faut construire des méthodes de calculs qui nous permettrons de réaliser ces calculs. Nous traiterons ici de 2 types de méthodes : les méthodes de quadratures de Gauss et les méthodes probabilistes.

L'ensemble des fonctions et travaux que nous avons réalisés seront ajoutés à la partie annexe de cette page.

Les méthodes de quadratures

Explication

Les méthodes de Quadrature de Gauss permet de remplacer le calcul d'une intégrale par la somme pondérée prise en certains points du domaine d'intégration.

Selon les fonctions qui sont entrées en paramètre, ainsi que le degré de précision que nous souhaitons obtenir, il existe différentes méthodes pour permettre les calculs d'intégrations.

Liste de différentes méthodes étudiée

Nous étudierons ici plusieurs méthodes :

- la méthode des rectangles
- la méthode du point du milieu
- la méthode des trapèzes
- la méthode de Simpson

Méthode des rectangles

La méthode des rectangles consiste à créer une suite d'intervalles régulier, dans lesquels nous faisons l'hypothèse que notre fonction est une fonction constante. Nous utiliserons le point le plus petit de chaque intervalle pour créer un rectangle de longueur et de largeur la taille de l'intervalle. La somme de l'aire de ses intervalles est une approximation de l'intégrale de la fonction de travail sur notre intervalle de travail .

Méthode du point du milieu

La méthode des points du milieu consiste à créer une suite d'intervalles régulier, dans lesquels nous faisons l'hypothèse que notre fonction est une fonction constante. Nous utiliserons le point le plus petit de chaque intervalle pour créer un rectangle de longueur (ou a et b représentent les extrémités de l'intervalle de travail) et de largeur la taille de l'intervalle. La somme de l'aire de ses intervalles est une approximation de l'intégrale de la fonction de travail sur notre intervalle de travail .

Le changement de la position du calcul du point "d'ancrage" du rectangle par rapport à la méthode des rectangles permet à cette fonction d'être aussi précise pour les fonctions polynomiales de degré 1 car l'erreur commise à gauche du point d'ancrage est le même à droite du point d'ancrage.

Méthode des trapèzes

La méthode des trapèzes consiste à créer une suite d'intervalles régulier, dans lesquels nous faisons l'hypothèse que notre fonction est une fonction polynomiale de degré 1. Nous utiliserons le point le plus petit de chaque intervalle pour créer un rectangle de longueur (ou a et b représentent les extrémités de l'intervalle de travail) et de largeur la taille de l'intervalle. La somme de l'aire de ses intervalles est une approximation de l'intégrale de la fonction de travail sur notre intervalle de travail .

Méthode de Simpson

La méthode de Simpson consiste à créer une suite d'intervalles régulier, dans lesquels nous faisons l'hypothèse que notre fonction est une fonction polynomiale de degré 2. Nous utiliserons le point le plus petit de chaque intervalle pour créer un rectangle de longueur (ou a et b représentent les extrémités de l'intervalle de travail) et de largeur la taille de l'intervalle. La somme de l'aire de ses intervalles est une approximation de l'intégrale de la fonction de travail sur notre intervalle de travail .

Différence entre les méthodes

La plus grande différence entre toutes les méthodes est la précision des différentes méthodes atteintes avec un nombre d'intervalles donné.

Chacune de ces méthodes permet une précision différente pour le calcul des intégrales : le nombre d'intervalle nécessaire pour obtenir un résultat de même précision est donc différent selon les méthodes.

Par exemple, la méthode de Simpson nécessitera un nombre d'intervalle plus petit que la méthode des rectangles pour que le résultat soit suffisamment précis.


Le calcul de l'erreur

Toutes ces méthodes possèdent un taux d'erreur qui varie selon le nombre et la taille des intervalles utilisées ainsi que l'erreur intrinsèque de la méthode. L'erreur d'une fonction se calcule en partie sur la dérivé n -ème de la fonction de travail, qui peut, selon certaines, être égal à 0 si on les associe à une certaine méthode.

Chaque méthode possède une formule pour calculer leur erreur. Elle est définie par le rang de leur méthode, par la fonction dont on cherche l'intégrale et par la taille de l'intervalle où l'on calcule l'intégrale.

Pour la méthode des rectangles, le calcul de l'erreur s'écrit de cette manière :

Après analyse du calcul, on peut remarquer qu'il est exact pour toute fonctions dont la formule de base est une constante.

En comparaison, pour la méthode des trapèzes, le calcul de l'erreur s'écrit de cette manière :

Après analyse du calcul, on peut remarquer qu'il est exact pour toute fonctions dont la formule de sa dérivée seconde est une constante.

Les méthodes probabilistes

Explication:

Il existe une autre manière de réaliser le calcul d'une intégrale qui utilise la probabilité.

Nous étudierons ici la méthode de Monte-Carlo. Elle consiste, en quelques mots, à "jeter" des points sur un espace de définition donné, puis de vérifier, pour chaque point, s’il appartient ou pas à l'aire sous la fonction. Nous réalisons ensuite une division du nombre de points qui appartiennent à cette aire par le nombre de point total que nous avons placé dans l'espace de travail.

Cela nous donnera la part de notre espace de travail qui est occupé par l'aire de la courbe de la fonction.

Il suffit ensuite de multiplier ce résultat par l'aire de notre espace de travail pour obtenir une approximation de la valeur de l'intégrale d'une fonction pour un intervalle donnée.

Points faibles de la méthode

Cette méthode parait simple et facile d'utilisation en apparence, mais possède plusieurs problèmes :

- l'espace de travail doit être recalculer lors de chaque nouveau calcul pour bien correspondre à l'espace de définition de la fonction utilisée. En effet, si l'espace de calcul est trop petit ou trop grand, il sera impossible de calculer correctement, voire parfois d'espérer obtenir un résultat qui peut fonctionner correctement.
- Cette méthode nécessite toujours un nombre important de point pour être vraiment efficace, et ce nombre augmente très vite par rapport à la taille de l'intervalle de travail.
- Ce nombre de point à calculer force le programme à être intrinsèquement (tous du moins, si on utilise le code que nous avons créé comme expliqué plus bas).

Points forts de la méthode

Mais, malgré ces quelques problèmes, cette fonction possède plusieurs gros avantages :

- Il est très facile de la modifier pour, par exemple, passer d’une fonction définie de R à R à une fonction définie de R² à R.
- Si l'espace de travail est bien définie, et que le nombre de points que nous utilisons pour réaliser les calculs est assez grand, il est possible de réaliser n'importe quel calcul d'intégrale sur n'importe quelle fonction en entrée.


Annexe

Les méthodes de quadratures

Le programme général

Avant le calcul de notre intégrale, nous devons indiquer à notre fonction la taille des intervalles que nous allons calculer.

Pour cela, nous utilisons la bibliothèque numpy de Python, qui nous permet de créer des listes de nombres espacé d'une certaine valeur, toujours identique, et dépendant du nombre d'éléments dans la liste.

Voici les lignes de codes qui permettent cela :

CalculIntervals.png

Le programme de calcul des différentes intégrales selon un nombre d'intervalle donné suit une procédure qui est toujours la même, malgré la méthode utilisée qui est différente.

Voici le programme de calcul après optimisation :

TroncPrincipal.png

Cette procédure fonctionne ainsi :

- on calcule une liste qui contient l'aire de tous les intervalles créés par une méthode donnée pour une fonction donnée
- on additionne tous les éléments de cette liste
- on renvoie le résultat de cette fonction

L'écriture des méthodes

Chacune des méthodes que nous souhaitons utiliser sont ensuite implémenté dans le code.

Voici une liste des différentes méthodes que nous avons pu réaliser :

Méthode des rectangles

MethodeRectangle.png

Méthode du point du milieu

MethodePointMilieu.png

Méthode des trapèzes

MethodeTrapeze.png

Méthode de Simpson

MethodeSimpson.png

L'écriture des fonctions utilisables

Pour terminer, nous pouvons recréer les différentes fonctions utilisables telles que sinus, cosinus ou exponentielle.

Voici 2 exemples de telles fonction :

Exponentielle.png

Sinus.png

Ces fonctions sont assez particulières, car elles utilisent une bibliothèque particulière de Python, qui se nomme numpy (ici représenté par le np).

Cette bibliothèque permet d'appliquer un certain calcul (ici sinus et exponentiel) sur une liste de valeur, ce que les fonctions sinus et exponentiel de la bibliothèque math de python ne permet pas.

La fonction d'affichage de l'erreur

Pour pouvoir réaliser une véritable comparaison entre ces erreurs, nous avons réalisé un programme qui calcul et trace sur un graphique l'évolution des erreurs de chaque fonction en fonction du nombre de points utilisés pour faire les intervalles.

La fonction de calcul

Nous avons donc commencé par créer une fonction qui calcule le taux d'erreur d'une fonction selon le nombre de point qui à servit à faire le calcul.

Voici à quoi ressemble la fonction :

FonctionCalculErreur.png

Cette fonction ce découpe en plusieurs étapes :

Pour un i allant de 0 à un certain nombre, nous réalisons les étapes suivantes :
- on récupère une liste de point découpant un intervalle  en i points
- on calcule l'intégrale d’une certaine fonction sur notre intervalle précédent
- on regarde l'écart entre la valeur obtenue par le calcul et la vraie valeur de l'intégrale de la fonction sur l'intervalle 
- on calcul de log de chacun de ces écarts
Puis nous renvoyons une liste des résultats obtenues.
La fonction d'affichage

Telle quelle, ces listes ne nous donnent pas beaucoup d'informations.

Nous avons donc réalisé une fonction supplémentaire qui nous permet d'afficher un graphe qui compare les différentes fonctions entre elles.

Voici la fonction ainsi créée.

AfficheErreurIntegrale.png

Cette fonction peut être décrite de la manière suivante :

Pour une toutes les méthodes que nous avons à notre disposition, nous réalisons le calcul des erreurs commises par la machine selon un nombre de points qui varie.
Pour chacun de ces calculs, nous associons ces résultats avec chacune des méthodes utilisées ainsi que le logarithme du nombre de points utilisé pour chacun des calculs d'erreurs.
Enfin, nous affichons le résultat sous forme de graphique.

Les méthodes probabilistes

Méthode de Monte-Carlo pour une fonction définie de R à R

Nous avons donc réalisé un programme qui réalise cette méthode de calcul pour un nombre de points donnés et une fonction de travail donnée.

Définition de l'espace de travail

Nous commençons tous d'abord par créer notre espace de travail selon l'intervalle ou nous souhaitons calculer notre intégrale ainsi que la fonction que nous allons utiliser.

Voici le code de cette fonction :

CreationEspaceTravailMonteCarlo.png

Création des points dans notre espace de travail

Nous avons ensuite créé une fonction qui permet de terminer la création de notre espace de travail, en créant une liste de différend points placer aléatoirement appartenant à notre espace de travail.

Voici le code de cette fonction :

RecuperationCoordoneeMonteCarlo.png


Vérification à l'appartenance du point à l'aire de la courbe

Après cela, nous avons réalisé 2 fonctions de vérification pour connaitre l'emplacement d'un point par rapport à la courbe de notre fonction et à l'abscisse du graphique.

Nous avons donc, grâce à ces vérifications, obtenir le nombre de points qui appartiennent à l'aire de la courbe.

Voici le code de ces fonctions :

VerificationMonteCarlo.png

Division

Nous avons aussi réalisé une dernière fonction, qui permet de réaliser la division du nombre de point dans l'aire de la fonction par le nombre de points qui ont été mis sur l'espace de travail total.

Voici le code de cette fonction :

DivisionMonteCarlo.png

Tronc principale de la fonction

Une fois toutes ces fonctions créées, nous les avons associées toutes ensemble pour créer la fonction finale, qui permet de calculer l'intégrale d'une fonction selon un nombre de points à placer à l'intérieur ainsi que d'une fonction d'étude.

Voici le code de cette fonction.

MethodeMC.png

Méthode de Monte-Carlo pour une fonction définie de R² à R

Dans le cadre de notre recherche sur la méthode de Monte-Carlo, nous avons pu réaliser une fonction qui, en exploitant le même fonctionnement que la fonction de Monte-Carlo, mais qui prend cette fois-ci une fonction définie de R² vers R.

Plusieurs fonctions ont donc dû être modifiées :

Définition de l'espace de travail

Nous avons dû revoir la définition de notre espace de travail pour qu'il puisse créer un espace utilisable pour une fonction à 2 variables.

Voici le code de ce programme :

RecuperationCoordoneeMonteCarlo2var.png

Création des points dans notre espace de travail

Les points possédants désormais 3 coordonnées au lieu de 2, nous avons dû revoir leurs créations ainsi que leur positionnement dans l'espace de travail.

Voici le code de ce programme :

CreationEspaceTravailMonteCarlo2var.png

Vérification à l'appartenance du point à l'aire de la courbe

Les fonctions de vérification des points doivent aussi être modifier pour pouvoir obtenir correctement les valeurs rechercher.

Nous avons donc, grâce à ces vérifications, obtenir le nombre de points qui appartiennent à l'aire de la courbe.

Voici le code de ces fonctions :

VerificationMonteCarlo2var.png

Tronc principale de la fonction

Le tronc principal, quant à lui, doit prendre en compte les nouvelles fonctions réalisées.

Voici le code de cette fonction.

MethodeMC2var.png