16. Integration numérique

16.1. Méthode des Trapèzes

  1. Définir les fonctions \(I=]-1,1[\to\R\) suivantes :

    • \(f_0:x\mapsto \cos(x)\)
    • \(f_1:x\mapsto (1+x^2)^{-1}\)
    • \(f_2:x\mapsto e^{-x^2}\)
    • \(f_3:x\mapsto \sqrt{1+x^2}\)
    • \(f_4:x\mapsto {\mathds 1}_{x\geq 0}\)
    • \(f_5:x\mapsto \cos(x)\exp(\sin(x))\)

    et calculer leurs valeurs exactes \(R_1,\dots R_5\).

    solution ⇲ ⇱ solution
    f0(x):=cos(x);
    f1(x):=1/(1+x^2);
    f2(x):=exp(-x^2);
    f3(x):=sqrt(1+x^2);
    f4(x):=x<0?0:1;
    f5(x):=cos(x)*exp(sin(x));
    
    F := [f0,f1,f2,f3,f4,f5];
    R := seq(int(F[j](x),x,-1,1),j=0..5);
    
  2. Écrire une fonction rectangles(f,a,b,n) qui calcule la somme des rectangles de \(f\) sur \(n\) points équirépartis sur \([a,b]\).

    solution ⇲ ⇱ solution
    rectangles(f,a,b,n) : = {
      1/n*sum(f(a+k*(b-a)/n),k,0,n-1)
    }
    
  3. Représenter graphiquement la convergence de la méthode des rectangles (diagramme du nombre de chiffres corrects en fonction du nombre de subdivisions) pour les fonctions ci-dessus. On fera des calculs en précision de 60 chiffres.

    solution ⇲ ⇱ solution
    Digits:=80;
    
    for(k:=0;k<=5;k++) {
      plotlist(seq([n,-logb(R[k]-rectangles(F[k],-1,1,n),10)],n=1..10),color=k,epaisseur=2)
    }
    
    %plotlist(seq([n,-log(Pi/4-rectangles(f1,-1,1,n))],n=1..10))
    %plotlist(seq([n,[seq(R[k]-rectangles(F[k],-1,1,n),k=0..5)]],n=1..25))
    
  4. Écrire la fonction trapezes(f,a,b,n) qui implante la méthode des trapèzes, comparer sa convergence.

    solution ⇲ ⇱ solution
    trapezes(f,a,b,n) := {
      1/n*sum(f(a+k*(b-a)/n),k,0,n-1)
    }
    
    plotlist(seq([n,-logb(R[k]-rectangles(F[k],-1,1,n),10)],n=1..10),color=k,epaisseur=2)
    

16.2. Généralisation de Newton-Cotes

La méthode de Newton-Cotes d’ordre \(k\) consiste à remplacer sur chaque subdivision une fonction par son polynôme interpolateur de Lagrange \(L_f\) d’ordre \(k\) en des points régulièrement espacés (comprenant les extrémités du segment).

\[\int_a^b f(x)\d x \approx \int_a^b L_f(x)\d x = (b-a)\sum_{i=0}^k w_i f(x_i)\]

\(x_j=a+\frac{(b-a)j}k\), \(w_i=\int_0^1 L_i(x)\d x\) et

\[L_i(x) = \prod_{0\leq j\neq i\leq k}\frac{x-j/k}{i/k-j/k}.\]

Par exemple, la méthode des trapèzes est la méthode de Newton-Cotes d’ordre 1 (la fonction est remplacée par le segment affine qui joint les deux extrémités du segment).

  1. Calculer les coefficients \(w_i\) pour les méthodes d’ordre \(3\) (Simpson) et \(5\) (Boole), en vérifiant qu’ils sont indépendants de l’intervalle \([a,b]\). On pourra utiliser la fonction lagrange.

    solution ⇲ ⇱ solution
    int(lagrange(seq(j/2,j,0,2),seq(X^j,j,0,2)),x=0..1)
    int(lagrange(seq(j/4,j,0,4),seq(X^j,j,0,4)),x=0..1)
    
  2. Écrire une fonction coeffNewtonCotes(k) qui renvoie la liste des coefficients de la méthode pour \(k\) points. Que se produit-il à partir du rang 8 ?

    solution ⇲ ⇱ solution
    coeffNewtonCotes := proc(k)
      I := int(lagrange(seq(j/k,j,0,k),seq(X^j,j,0,k)),x=0..1)
      return coeffs(I,X)
    end proc;
    
  3. Écrire une fonction NewtonCotes(f,k,a,b,n) qui calcule l’intégrale de \(f\) sur \([a,b]\) avec \(n\) points par la méthode de Newton-Cotes d’ordre \(k\) (effectuer \(\floor{n/k}\) subdivisions).

    solution ⇲ ⇱ solution
    NewtonCotes:=proc(f,k,a,b,n)
      wk := coeffNewtonCotes(k);
      delta := (b-a)/(n*k);
      xj := a;
      res := 0;
      for(l:=0;l<n;l++) {
        for(j:=0;j<=k;j++) {
          if(j!=0) xj += delta;
          res += wk[j]*f(xj);
        }
      }
      return res*(b-a)/n;
    end proc;
    
  4. Faire le graphique de la convergence de la méthode de Boole (Newton-Cotes d’ordre 5).

    solution ⇲ ⇱ solution
    for(k:=0;k<=5;k++) {
    plotlist(seq([n,-logb(R[k]-NewtonCotes(F[k],5,-1,1,n),10)],n=1..10),color=k,epaisseur=2);
    plotlist(seq([n,-logb(R[k]-rectangles(F[k],-1,1,n),10)],n=2..100),color=k,epaisseur=2)
    }
    

16.3. Accélération de convergence de Romberg

On va appliquer un procédé d’accélération de convergence à la formule des trapèzes. Pour ce faire, il faut avoir connaissance de l’ordre de convergence de la méthode des trapèzes de pas \(h=\frac{b-a}n\). On démontre (par exemple via la formule d’Euler-MacLaurin) que, en notant \(T(f,h)\) la formule des trapèzes de pas \(h\),

\[T(f,h)=\int_a^b f +\alpha_f h^2+O(h^4).\]

Le principe de l’accélération de convergence est de faire sauter ce terme \(\alpha_f h^2\) à l’aide d’un système [1] de deux relations prises en \(h\) et \(h'<h\). On obtient alors une convergence en \(h^4\), et ainsi de suite.

[1]La formule d’Euler-MacLaurin permet d’exprimer explicitement la constante \(\alpha_f\) en terme de valeurs de \(f'\), mais l’astuce et la généralité de l’accélération de convergence consiste à se débarasser de \(\alpha_f h^2\) sans le calculer.

Pour la méthode de Romberg, on commence par calculer \(T(f,h)\) et \(T(f,h/2)\). Alors

\[4T(f,h)-T(f,h/2) = 3\int_a^b f +O(h^4).\]

On note

\[R_{1,1}(f,h)=\frac{4T(f,h)-T(f,h/2)}3\]

ce premier convergent, puis on itère le procédé.

La théorie de la formule des trapèzes montre qu’il existe \(\beta_f\) telle que \(R_{0,1}(f,h)=\int_a^b f+\beta_f h^4+O(h^6)\). On évalue \(R_{2,1}(f,h)=R_{1,1}(f,h/2)\) et on calcule

\[R_{2,2}(f,h) = \frac{4^2 R_{1,1}(f,h) - R_{2,1}(f,h)}{4^2-1}\]

qui vérifie

\[R_{2,2}(f,h) -\int_a^b f =O(h^6).\]

On définit ainsi pour tout \(m\geq n\) les convergents \(R_{m,n}\) (avec les valeurs \(R_{m,0}(f,h)=T(f,h/2^m)\)). La méthode d’intégration de Romberg consiste à calculer les convergents \(R_{m,m}\). Pour simplifier, on prend \(h=(b-a)\) dans le calcul de \(R_{0,0}\), de sorte que \(h=\frac{b-a}{2^m}\) dans \(R_{m,0}\).

  1. Vérifier expérimentalement l’existence de la constante \(\alpha_f\) pour les fonctions \(f_i\).
  2. Déterminer les formules de récurrence entre les valeurs \(R_{m,n}\).
  3. Les vérifier sur la série \(\sum_{k\geq 0} a_k h^{-2k}\).
  4. Écrire une fonction récursive qui calcule naïvement les convergents de Romberg \(R_{n,n}\). Combien de fois \(f\) est-elle évaluée ?
  5. Représenter graphiquement les points \(R_{m,n}\).
  6. Améliorer le calcul pour ne jamais évaluer \(f\) deux fois en le même point. On calculera dans une seule fonction toutes les valeurs \(R_{m,0}\).
  7. Quelle est la convergence de la méthode de Romberg ? (en fonction du nombre d’évaluations de la fonction \(f\)).

16.4. Méthode de Gauss-Legendre

La méthode de Gauss-Lengendre (de même que ses variantes Gauss-, Gauss-Hermitte…) est aussi une méthode d’interpolation. Cependant, par un choix plus judicieux des points d’interpolation, elle est exacte à un ordre beaucoup plus élevé (avec \(n+1\) points, la méthode est exacte à l’ordre \(2n-1\)).