Inscription / Connexion Nouveau Sujet
Niveau Licence-pas de math
Partager :

Ordre de convergence avec Python

Posté par
cercus
05-04-19 à 15:39

Bonjour,
dans un TP, je dois retrouver l'ordre de la méthode de simpson composite. Je rappelle la formule de Simpson composite : \int_{a}^{b}{f(x)}dx \approx \frac{h}{3}*[f(x_0) + 2 \sum_{j =1}^{(n/2)-1}{f(x_{2j}) + 4 \sum_{j=1}^{n/2}{f(x_{2j-1}) }}+ f(x_{n})]

Voici le programme python implémentant cette méthode :

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return np.exp(x)

def paire(f, n, a, b):
    # Somme des paires pour l'integrale avec Simpson
    h = (b-a)/n
    x = np.arange(a, b, h)
    I_paire = 0
    for i in range(1, int(n/2)):
        I_paire += f(x[2*i])
    return I_paire

def impaire(f, n, a, b):
    # Somme des impaires pour l'integrale avec Simpson
    h = (b-a)/n
    x = np.arange(a, b, h)
    I_impaire = 0
    for i in range(1, int(n/2 + 1)):
        I_impaire += f(x[2*i-1])
    return I_impaire

def simpson(f, n, a, b):
    # Méthode de simpson
    h = (b-a)/n
    x = np.arange(a, b, h)
    return (h/3)*(f(a) + f(b) + 2*paire(f, n, a, b) + 4*impaire(f, n, a, b))


Ce programme me donne une bonne valeur de l'intégrale pour toute les fonctions mais ça se gâte pour la convergence. Pour retrouver l'ordre de la méthode, il faut tracer l'erreur en fonction du pas h et le coefficient directeur de la droite obtenue donne l'ordre de la méthode. L'erreur est défini comme : erreur = |Iexact - Iapproché|. Voici le programme python implémentant cette méthode :

# Calcul de l'erreur pour la methode Simpson
h = []
err = []
a = 1
b = 2
I_exact = np.exp(2) - np.exp(1)
for i in range(10, 100000, 1000):
    x = np.linspace(a, b, i)
    h.append((b-a)/i)
    err.append(np.abs(I_exact - simpson(f, i, a, b)))

plt.loglog(h, err)
plt.grid()
plt.show()


Le seul problème est que si je prend un grand nombre de points (exemple un pas de 1000 entre 10 et 100 000, le graphique obtenue ne ressemble pas à une droite linéaire (image ci-joint)

Ordre de convergence avec Python

Posté par
verdurin
re : Ordre de convergence avec Python 05-04-19 à 18:23

Bonsoir,
il faut être conscient du fait que l'addition des « réels informatiques » n'est pas l'addition dans R.
Chaque addition provoque une erreur d'arrondi, quand il y a beaucoup ces erreurs deviennent plus importantes que l'erreur due à la méthode de calcul.

À mon avis, qui est peut-être faux, c'est ce que l'on voit sur ton graphique.

Posté par
cercus
re : Ordre de convergence avec Python 05-04-19 à 18:45

Il faudrait donc prendre que la partie linéaire et verifier que le coefficient directeur soit de 4 (c'est l'ordre theorique de la méthode de Simpson composite) ?

Posté par
verdurin
re : Ordre de convergence avec Python 05-04-19 à 19:06

C'est ce que je crois, mais je ne suis pas du tout spécialiste de ce genre de choses.

Il faudrait évaluer l'espérance de l'erreur due à n additions et ne pas prendre de valeurs du nombre de points telles que l'erreur due aux additions soit du même ordre de grandeur que l'erreur ( connue ) due à la méthode.
En gros il ne faut pas prendre trop de points d'interpolations.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !