Vous êtes sur la page 1sur 13

MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.

1/6

**** PARTIE A ****


Soit à résoudre un système de Cramer donné dans IRn , (S) : A.X = b, avec A matrice tridiagonale. Pour
cela, on utilise la méthode de Gauss sans permutation, en admettant, évidemment, que cela soit possible ici.
• N.B. Dans ce qui suit, nous notons aij , le coefficient en position (i, j) dans la matrice A .
..................................................................................................................
A· I - Méthode de Gauss sans permutation avec A tridiagonale : Analyse.
1◦ ) Méthode de Gauss sans permutation : c’est quoi ? Est-elle toujours applicable et/ou recomman-
dée ? Pourquoi ? Cf. Document de Cours sur la méthode de Gauss.

2 ) Aspect de la matrice A dans le cas présent :
 
a11 a12
 
 
 a21 a22 a23 
 
 
 a32 a33 a34 
 
 
 a43 a44 a45 
 

A =   .
... ... ... 
 
 a a a 
 k,k−1 k,k k,k+1 
 
 ... ... ... 
 
 
 an−1,n−2 an−1,n−1 an−1,n 
 
an,n−1 an,n

∗∗∗ Remarque/Commentaire n◦1.A :


Quand on demande l’aspect de la matrice dans ce genre d’exercice ou problème, ce n’est pas pour
orner la copie. C’est pour aider à répondre aux questions qui viennent après, notamment à repérer les
coefficients qui font ci ou ça, ou ce qu’il faut faire ou ne pas faire sur les coefficients de la matrice pour
obtenir (dans les conditions de l’énoncé) tel ou tel résultat à la sortie, en guise de réponse à telle ou
telle question posée. Ainsi, se contenter de placer des étoiles pour représenter les coefficients non nuls
de la matrice est d’une totale inefficacité dans ce contexte, voire relativement hors-sujet.

3◦ ) a) Dans ce cas, l’élimination sur la colonne n◦ 1 de A revient à « éliminer » un seul coefficient


de A. Précisons lequel, pourquoi, selon quel principe d’action et pour quel résultat à la sortie.

1. Il s’agit du coefficient a21 .


2. Raison :
Dans la méthode de Gauss sans permutation, l’élimination sur la colonne n◦ 1 de A vise à annuler tous
les coefficients en dessous de a11 , le pivot déjà placé en position (1, 1) dans A. Or, la matrice A étant
tridiagonale, son aspect précédent fait apparaître que tous les coefficients en dessous de a11 dans cette
colonne sont déjà garantis nuls, sauf a21 . Seul ce dernier a donc besoin d’être annulé dans le cas présent.
3. Principe d’action :
On s’appuye sur le principe d’Algèbre Linéaire selon lequel on ne change pas l’ensemble des solutions d’un
système linéaire si on retranche, à une équation du système, un multiple scalaire d’une autre. Ainsi, ici, si
on note Ei, l’équation n◦ i du système linéaire A.X = b, alors l’annulation de a21 sera obtenue par :
E2 ←− E2 − ℓ21 ∗E1 , avec ℓ21 = a21 /a11 , (A.1 )
i.e. on retranche, à l’équation n◦ 2 du système A.X = b, le multiple scalaire approprié de l’équation n◦ 1, le
coefficient multiplicatif ℓ21 étant précisément choisi pour qu’après cette manœuvre, a21 devienne nul.
4. Résultat garanti à la sortie :
La manœuvre (A.1 ) ci-dessus transformera le système linéaire A.X = b en un système équivalent
A(1) .X = b(1) (donc de même vecteur-solution X ∈ IRn ), et dont la matrice A(1) est telle que, dans
sa 1ère colonne, tous les coefficients en-dessous du coefficient diagonal sont nuls.
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.2/6

∗∗∗ Remarque/Commentaire n◦2.A :


C’est à dessein que le verbe « éliminer » a été mis entre guillemets dans la formulation de la
question ci-dessus. Insistons, à nouveau, sur le fait qu’ « éliminer un coefficient dans une matrice »
signifie l’annuler, et non pas le supprimer de la matrice, comme certain(e)s ont semblé l’interpréter.
En effet, après l’ « élimination » , le coefficient continuera évidemment d’exister : il aura simplement la
valeur 0. D’ailleurs, si on supprimait un de ses coefficients, la matrice ne serait plus une matrice !!!

b) Pour éliminer a21 , seuls 2 coefficients de A vont changer de valeur. Disons lesquels et pourquoi.
1. Pour éliminer a21 , les 2 seuls coefficients de A qui vont changer de valeur sont a21 lui même et a22 .
2. Justification :
Nous avons dit que, pour annuler a21 , on effectuait la manœuvre (A.1 ) ci-dessus. Or, rappelons qu’on
peut identifier l’équation n◦ i du système linéaire A.X = b à la ligne n◦ i de sa matrice augmentée (A | b),
et donc à un vecteur de IRn+1 . Ainsi, on peut écrire ici, compte tenu du fait que A est tridiagonale :
E1 = (a11 a12 0 0 0 · · · 0 | b1 )
E2 = (a21 a22 a23 0 0 · · · 0 | b2 ),

=⇒ E2 − ℓ21 ∗E1 = (0 a22 a23 0 0 · · · 0 | b2′ ), où a22 ′
= a22 − ℓ21 ∗a12 , b2′ = b2 − ℓ21 ∗b1 .
En rappelant que Ei = (Li(A) | bi), avec Li(A) = (ai1 ai2 ai3 · · · ain), on constate donc que la
manœuvre (A.1 ) a pour effet de transformer la ligne n◦ 2 de A, L2 (A) = (a21 a22 a23 0 0 · · · 0),
en L2 (A(1) ) = (0 a22 ′
a23 0 0 · · · 0). Sachant que la manœuvre (A.1 ) ne modifie que la ligne n◦ 2 de
A, laissant toutes les autres intactes, ce qui précède montre bien que les seuls coefficients de A ayant changé
de valeur dans cette opération sont a21 et a22 , . Et ceci vient du fait qu’on a : ai1 = 0, ∀ i = 3 (1) n.
c) Mais, parmi ces 2 coefficients, un seul a réellement besoin de changer de valeur dans l’algo-
rithme. Disons lequel et pourquoi lui seul.
Entre a21 et a22 , le seul qui a réellement besoin de changer de valeur dans l’algorithme est a22 .
• Raisons :
Premièrement, on sait qu’après la manœuvre (A.1 ), la nouvelle valeur de a21 sera 0, et ce jusqu’à la
fin de l’algorithme de la méthode de Gauss pour résoudre le système linéaire A.X = b. Il est alors inutile
d’affecter explicitement cette valeur 0 à a21 dans l’algorithme pendant l’élimination sur la colonne 1 de A.
Il suffit plutôt, dans la suite de l’algorithme, dans l’écriture de toute opération où a21 devrait intervenir,
de directement tenir compte de ce que sa valeur est 0, donc sans avoir besoin d’aller la lire dans a21 . Et,
fondamentalement, ceci arrive parce que a21 est un coefficient en dessous de la diagonale de A, donc dans la
« zone inutile » d’une matrice sup-triangulaire, ce qui est la forme finale en laquelle l’élimination de Gauss
va transformer A. Donc a21 ne sera, en fait, plus jamais utilisé dans la suite de l’algorithme. Ainsi, que sa
valeur soit ou pas changée à ce stade n’a aucune importance pour le déroulement ultérieur de cet algorithme.
Tel n’est pas le cas du coefficient a22 car celui-ci se trouve sur la diagonale de A, laquelle fera partie
de la « zone utile » de la matrice sup-triangulaire finale. Par conséquent, pour les besoins de la suite de
l’algorithme, il faut effectivement changer sa valeur selon la formule imposée par la manœuvre (A.1 ). En
particulier, la nouvelle valeur de a22 servira de pivot pour l’élimination dans la colonne n◦ 2 qui suivra.
∗∗∗ Remarque/Commentaire n◦3.A :
Une réponse à la question 3◦ )b), très populaire dans les copies, a consisté à affirmer que, pour
« éliminer » a21 , les 2 seuls coefficients de la matrice A qui vont changer de valeur sont a22 et a23 .
Seulement, à la question 3◦ )c) d’après, les mêmes copies ont démontré (rigoureusement. . . ) qu’en
fait a23 ne changeait pas de valeur pendant cette élimination sur la colonne 1 de A. Contradiction !!!

d) Bloc d’instructions pour l’élimination de Gauss sans permutation sur la colonne 1 de A :

Début
ℓ21 ←− a21 /a11 ;
a22 ←− a22 − ℓ21 ∗a12 ;
b2 ←− b2 − ℓ21 ∗b1 ;
Fin
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.3/6

∗∗∗ Remarque/Commentaire n◦4.A :


Certaines copies ont présenté le bloc d’instructions suivant (ou quelque chose d’analogue) :

Début
a22 ←− a22 − (a21 /a11 )∗a12 ;
b2 ←− b2 − (a21 /a11 )∗b1 ;
Fin
Autrement dit : les intéressé(e)s ont estimé superflu le calcul préalable du coefficient multiplicatif ℓ21 .
Seulement, ce qui constituerait, ainsi, une apparente simplification traduit, en réalité, une grossière
inefficacité algorithmique, car cela aboutit à calculer 2 fois l’expression a21 /a11 dans le bloc
d’instructions, donc une perte de temps inutile à l’exécution pour l’ordinateur !!!
Dans le cadre des objectifs maintes fois répétés de la conception des algorithmes dans ce Cours
d’Analyse numérique, ce genre d’inefficacité est totalement inacceptable. Avant leur « simplifi-
cation » , les intéressé(e)s auraient dû se demander : pourquoi on a même introduit les ℓik en classe ?
Même remarque pour tous les blocs d’instructions analogues dans la suite de cette Partie A.

∗∗∗ Remarque/Commentaire n◦5.A :


Une erreur conceptuelle extrêmement populaire dans les copies a consisté à « oublier » l’ins-
truction de modification de la coordonnée du 2nd membre, b2 , dans l’écriture du bloc d’instructions
ci-dessus. Et en répétant l’erreur dans les blocs d’instructions analogues requis dans la suite.
Cette erreur découlait de ce que, dans les réponses aux questions précédentes, les intéressé(e)s
parlaient des lignes Li(A) de la matrice A là où il fallait parler (comme vu ci-dessus) des équations
Ei du système. Erreur fatale !!! Car, répétons le encore une fois : une équation linéaire va
jusqu’à son 2nd membre. Modifier une ligne de la matrice A, sans porter la modification jusqu’au
2nd membre correspondant, constitue une application biaisée, et donc fausse, du principe d’Algèbre
Linéaire sur lequel les un(e)s et les autres ont prétendu s’appuyer ici.

e) Aspect de la matrice après cette élimination sur la colonne 1 de A.


L’élimination de Gauss sans permutation sur la colonne 1 a transformé A en la matrice :
 
a11 a12
 
 
 a22 a23 
 
 
 a32 a33 a34 
 
 
 a43 a44 a45 
 
(1)
A =    .
... ... ... 
 
 ak,k−1 ak,k ak,k+1 
 
 
 ... ... ... 
 
 
 an−1,n−2 an−1,n−1 an−1,n 
 
an,n−1 an,n

∗∗∗ Remarque/Commentaire n◦6.A :


Si on voulait être rigoureux, dans la matrice A(1) , on pouvait écrire a22
′ en lieu et place de a .
22
Mais ceci n’est pas indispensable car, comme le montre le bloc d’instructions précédent, dans toute la
′ est mise dans a .
suite de l’algorithme, la nouvelle valeur a22 22

4◦ ) Supposons avoir déjà effectué l’élimination des colonnes 1 à k−1, pour un indice k ∈ [ 2 (1) n−1 ].
a) Aspect de la matrice en laquelle A a été transformée à ce stade.
L’élimination de Gauss sans permutation sur les colonnes 1 à k − 1 a transformé A en la matrice :
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.4/6

 
a11 a12
 
 
 a22 a23 
 
 
 ... ... 
 
 ak−1,k−1 ak−1,k 
 
 
 
A(k−1) =  ak,k ak,k+1  .
 
 ak+1,k ak+1,k+1 ak+1,k+2 
 
 
 
 B(k−1) = ... ... ... 
 
 
 an−1,n−2 an−1,n−1 an−1,n 
 
an,n−1 an,n

∗∗∗ Remarque/Commentaire n◦7.A :


Délimiter la sous-matrice B(k−1)dans A(k−1) , comme cela a été fait ci-dessus, n’était pas requis.
La seule utilité de cette délimitation est d’aider à comprendre la réponse à la question qui suit.

b) Après l’avoir motivé préalablement en 2 ou 3 phrases, écrivons un bloc d’instructions effectuant


ici (et efficacement) l’élimination de Gauss sans permutation sur la colonne k .
On sait que, dans la méthode de Gauss, l’élimination sur la colonne k de A(k−1) revient à effectuer l’élimination
sur la colonne 1 de sa sous-matrice carrée B(k−1) allant de la ligne k à la ligne n, et de la colonne k à la colonne
n, avec les coordonnées du 2nd membre allant de bk à bn . Or, comme on peut le constater dans l’aspect de A(k−1)
ci-dessus, la sous-matrice B(k−1) est, elle aussi, tridiagonale. Ainsi, l’élimination sur la colonne k peut se
faire comme celle sur la colonne 1 précédemment en 3◦ )a) à d), avec les coefficients a11 , a21 et a22 respectivement
remplacés par : akk, ak+1,k et ak+1,k+1. D’où le bloc d’instructions pour cette élimination sur la colonne k :

Début
ℓk+1,k ←− ak+1,k/akk ;
ak+1,k+1 ←− ak+1,k+1 − ℓk+1,k ∗ak,k+1 ;
bk+1 ←− bk+1 − ℓk+1,k ∗bk ;
Fin

5◦ ) Aspect de la matrice à la fin de l’élimination de Gauss sans permutation dans (S) dans ce cas.
A la sortie, l’élimination de Gauss sans permutation (des colonnes 1 à n − 1) aura transformé A en la matrice :
 
a11 a12
 
 a22 a23 
 
 
 ... ... 
 
A (n−1) 
=  ak,k ak,k+1  .

 
 ... ... 
 
 an−1,n−1 an−1,n 
 
an,n
...............................................................................................................
A· II - Méthode de Gauss sans permutation avec A tridiagonale : Stockage optimal en mémoire.
Utiliser un tableau n×n de réels pour stocker une matrice tridiagonale dans un algorithme représente clairement
un très grossier gaspillage de la mémoire de l’ordinateur. Pour une telle matrice, il suffit de stocker sa partie utile.
Or, cette dernière peut tenir dans 3 tableaux C, D et E du type vecteur (celui utilisé en Cours pour b et X).
On admet ainsi, ici, que les tableaux C, D, E ont déjà été remplis, au début du programme, comme suit :
1 D contient la diagonale principale de A ; 2 C contient la diagonale secondaire en-dessous de la
diagonale principale de A ; 3 E contient la diagonale secondaire au-dessus de la diagonale principale de A.
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.5/6

1◦ ) a) Avec ce mode de stockage de la matrice A, on a :


∀ i = 1 (1) n, D[i] = aii , et, ∀ i = 1 (1) n − 1, C[i] = ai+1,i , E[i] = ai,i+1 .
b) Voici A avec chaque coefficient utile remplacé par la coordonnée appropriée de C ou D ou E :
  ∗∗∗ Remarque/Commentaire n◦8.A :
 D[1] E[1]  Même si C et E ont été déclarés de type
  vecteur au début du programme, donc sont
 C[1] D[2] E[2] 
 
  2 tableaux de réels avec un indice allant de 1
 C[2] D[3] E[3] 
  à n, il faut, cependant, noter que C[n] et
A =   .
 ... ... ...  E[n] n’ont pas reçu de valeur. Et il n’est pas
 
  indispensable qu’ils en reçoivent une, car on
 
 C[n − 2] D[n − 1] E[n − 1]  n’est pas obligé d’utiliser tous les éléments
 
C[n − 1] D[n] d’un tableau déclaré dans un programme.
Mathématiquement, en fait C et E ∈ IRn−1 .

2◦ ) Compte tenu de ce stockage de A dans le programme et de l’analyse effectuée en A· I , écrivons :


a) une procédure algorithmique pour l’élimination de Gauss sans permutation dans (S) :

Procédure ELIM_GAUSS_SP_TRID ( C, E : vecteur ; var D, b : vecteur) ;


/* Objectif : Elimination de Gauss sans permutation dans A.X = b, système de
Cramer dans IRn , avec A tridiagonale, stockée optimalement (3 vecteurs). */
/* Paramètre(s) entrant(s) :
− D ∈ IRn , diagonale principale de A ;
− C ∈ IRn−1 , diagonale secondaire en-dessous de la diagonale principale de A ;
− E ∈ IRn−1 , diagonale secondaire au-dessus de la diagonale principale de A ;
− b ∈ IRn , vecteur-2nd membre du système. */
/* Paramètre(s) sortant(s) :
− D et b modifiés par l’élimination de Gauss sans permutation,
quand A est devenue sup-triangulaire, i.e. A = A(n−1) et b = b(n−1) . */
Variables locales :
i, k : entier ; ℓik : réel ;

/* ** Corps de la procédure ***/


début /* ELIM_GAUSS_SP_TRID */
Pour k = 1 (1) n − 1 faire
/* Début de l’élimination dans la colonne k de A. */
i ←− k + 1 ;
ℓik ←− C[k]/ D[k] ;
D[i] ←− D[i] − ℓik ∗E[k] ;
b[i] ←− b[i] − ℓik ∗b[k] ;
/* Fin de l’élimination dans la colonne k de A. */
finPour ;
Renvoyer (D, b) ;
fin ; /* ELIM_GAUSS_SP_TRID */

∗∗∗ Remarque/Commentaire n◦9.A :


Il est important de noter que dans la procédure algorithmique ELIM_GAUSS_SP_TRID, le vecteur
E n’est pas modifié. Par contre, C devrait l’être, mais pour mettre ses coordonnées à 0, ce qui serait une
perte de temps, car celles ci sont des coefficients de A dans la zone inutile à la sortie de l’élimination.
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie A : p.6/6

b) une procédure algorithmique résolvant le système sup-triangulaire après l’élimination :

Procédure REMONTEE_SP_TRID ( D, E, b : vecteur ; var X : vecteur) ;


/* Objectif : Résolution de A.X = b, un système sup-T. issu d’une élimination de
Gauss sans permutation dans un système de Cramer tridiagonal dans IRn , avec la
matrice initiale stockée optimalement (dans 3 vecteurs). */
/* Paramètre(s) entrant(s) :
− D ∈ IRn , diagonale principale de A ;
− E ∈ IRn−1 , diagonale secondaire au-dessus de la diagonale principale de A ;
− b ∈ IRn , vecteur-2nd membre du système. */
/* Paramètre(s) sortant(s) :
− X ∈ IRn , vecteur-solution de A.X = b. */
Variable locale :
i : entier ;

/* ** Corps de la procédure ***/


début /* REMONTEE_SP_TRID */
X[n] ←− b[n]/ D[n] ;
Pour i = n − 1 (−1) 1 faire

X[i] ←− b[i] − E[i] ∗ X[i + 1] / D[i] ;
finPour ;
Renvoyer (X) ;
fin ; /* REMONTEE_SP_TRID */

c) une procédure algorithmique résolvant (S) par la méthode de Gauss sans permutation :

Procédure GAUSS_SP_TRID ( C, D, E, b : vecteur ; var X : vecteur) ;


/* Objectif : Résolution d’un système de Cramer dans IRn , A.X = b, par la méthode de
Gauss sans permutation, avec A tridiagonale, stockée optimalement (3 vecteurs). */
/* Paramètre(s) entrant(s) :
− D ∈ IRn , diagonale principale de A ;
− C ∈ IRn−1 , diagonale secondaire en-dessous de la diagonale principale de A ;
− E ∈ IRn−1 , diagonale secondaire au-dessus de la diagonale principale de A ;
− b ∈ IRn , vecteur-2nd membre du système. */
/* Paramètre(s) sortant(s) :
− X ∈ IRn , vecteur-solution de A.X = b. */
/* ** Corps de la procédure ***/
début /* GAUSS_SP_TRID */
/* Phase 1 : Elimination de Gauss sans permutation. */
[ D, b ] ←− ELIM_GAUSS_SP_TRID (C, E, D, b) ;
/* Après ceci, A est devenue sup-triangulaire : A = A(n−1) , b = b(n−1) */
/* Phase 2 : Résolution du système sup-triangulaire obtenu. */
[ X ] ←− REMONTEE_SP_TRID (D, E, b, X) ;
/* Renvoi du résultat final. */
Renvoyer (X) ;
fin ; /* GAUSS_SP_TRID */
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.1/7

**** PARTIE B ****


Soit f : [ a, b ] −→ IR, avec a, b ∈ IR donnés/ a < b. On suppose que les seules informations disponibles sur la
fonction f sont ses valeurs y0 , · · · , yn+1 en n + 2 abscisses données a0 , · · · , an+1 ∈ [ a, b ], telles que :
a = a0 < a1 < · · · < an < an+1 = b, avec, ∀ i = 0 (1) n, ai+1 − ai = hi ; et on pose ∆σ = max hi .
0 6i 6n

On décide d’approcher globalement la fonction f sur l’intervalle [ a, b ] par feS , la fonction d’interpolation spline
cubique naturelle associée à ces informations disponibles sur f , i.e. l’unique fonction de [ a, b ] −→ IR vérifiant :


 (C.1) ∀ i ∈ [ 0 (1) n ], feS est définie sur [ ai , ai+1 ] par : ∀ x ∈ [ ai , ai+1 ], feS (x) = Pi (x), avec Pi ∈ IR3 [x] ;


 (C.2) fe interpole f aux points a , · · · , a
S 0 n+1 ;

 e
 (C.3) fS est de classe C sur [ a, b ] ; 2



(C.4) fe′′ (a) = 0 et fe′′ (b) = 0.
. . . . . . . . . . . . . .S. . . . . . . . . . . . . . .S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B · I - Qualité de l’approximation de f par feS .
1◦ ) Quantité E[ a,b ] (feS | f ) utilisée pour mesurer la qualité de l’approximation globale de f par feS
sur [ a, b ] et son interprétation pratique. N.B. Avec un graphique pour illustrer l’argument.
Cf. Cours : « Erreur d’approximation globale d’une fonction sur un intervalle » et son application dans l’ « Ap-
proximation affine par morceaux » .
∗∗∗ Remarque/Commentaire n◦1.B :
La curiosité, dans le graphique demandé ici, est que, dans plus de 90% des copies, on n’a trouvé
aucune trace des ai sur l’axe des abscisses, ni d’une interpolation de f par feS en ces points !!!

2◦ ) Supposons que f ∈ C 4 ([ a, b ]) et admettons qu’alors ∃ K ∈ IR+ / ∀ x ∈ [ a, b ], | feS (x) − f (x) | 6 K∆4σ .


Déduisons que feS C.U. vers f sur [ a, b ] quand ∆σ −→ 0, et signification pratique.
Cf. Cours : partie sur la problématique analogue pour l’ « Approximation affine par morceaux » .
∗∗∗ Remarque/Commentaire n◦2.B :
e
Insistons sur le fait que « fS C.U. vers f sur [ a, b ] quand ∆σ −→ 0 » signifie que :
sup | f (x) − feS (x) | −→ 0 quand ∆σ −→ 0, (B.1 )
x ∈ [ a,b ]

mais ne signifie pas que (comme populairement lu dans l’écrasante majorité des copies) :
∀ x ∈ [ a, b ], feS (x) −→ f (x) quand ∆σ −→ 0, (B.2 )
On peut facilement voir que l’implication (B.1 ) =⇒ (B.2 ) est vraie, mais pas celle en sens
inverse, en général. En fait, (B.2 ) signifie plutôt que « feS converge simplement vers f sur [ a, b ]
quand ∆σ −→ 0 » . Et, de par leurs souvenirs sur les suites de fonctions étudiées en Analyse Réelle,
les un(e)s et les autres sont censé(e)s savoir que la convergence uniforme est une propriété beaucoup
plus forte que la convergence simple.
..................................................................................................................
B · II - Expression et calcul effectif des polynômes Pi en un réel x donné, pour i = 0 (1) n.
1◦ ) Soit i ∈ [ 0 (1) n ]. Sans calculs, expliquons pourquoi on est sûr d’avance qu’il existe 4 constantes
réelles c0,i , c1,i , c2,i , c3,i (qu’on ne cherche pas à déterminer ici) telles que Pi s’écrive sur IR :
(x − ai )2 (x − ai )3
Pi (x) = c0,i + c1,i · (x − ai ) + c2,i ·
+ c3,i · . (P.1 )
2 6
Par hypothèse, Pi ∈ IR3 [x], lequel est un IR-espace vectoriel de dimension 4.  Or, on sait que la base de Taylor
de cet espace centrée en x = ai est : BT3, ai = 1, x − ai , (x − ai )2 , (x − ai )3 .
Comme Pi ∈ IR3 [x], alors Pi peut s’exprimer de manière unique dans cette base de IR3 [x], i.e. :
∃ ! α0,i , α1,i , α2,i , α3,i ∈ IR / ∀ x ∈ IR, Pi (x) = α0,i + α1,i · (x − ai ) + α2,i · (x − ai )2 + α3,i · (x − ai )3 .
En posant alors c0,i = α0,i , c1,i = α1,i , c2,i = 2 α2,i et c3,i = 6 α3,i , on en déduit qu’on est effectivement sûr qu’il
existe 4 constantes réelles c0,i , c1,i , c2,i , c3,i telles que (P.1 ) soit vrai pour tout x ∈ IR.
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.2/7

• On rappelle que la construction effective de la fonction feS consiste à calculer, à partir des
données, tous les c0,i , c1,i , c2,i , c3,i ( i = 0 (1) n). Ceci permettra de calculer les Pi en tout x ∈ IR.
2◦ ) a) Ensemble des données dans ce problème d’approximation numérique globale de f sur [ a, b ] :

n ∈ IN ;
a, b ∈ IR ; /* a < b */
a0 , · · · , an+1 ∈ IR ; /* a = a0 < a1 < · · · < an+1 = b */
y0 , · · · , yn+1 ∈ IR. /* ∀ i = 0 (1) n + 1, yi = f (ai). */

b) Montrons que, ∀ i ∈ [ 0 (1) n ], le coefficient c0,i est égal à l’une de ces données (qu’on précisera).
En faisant x = ai dans (P.1 ), il vient : Pi (ai ) = c0,i .
Mais ai ∈ [ ai , ai+1 ], et, par (C.1), feS = Pi sur [ ai , ai+1 ]. Il s’ensuit que feS (ai ) = Pi (ai ).
D’autre part, (C.2) =⇒ feS (ai ) = f (ai ) = yi . De ce qui précède, il vient : c0,i = yi .
Il faut noter que yi fait bien partie des données que nous avons listées à la question précédente.
• Dans la suite, on pose di = feS′′ (ai ), ∀ i ∈ [ 0 (1) n + 1 ]. Notons que les di sont des inconnues.
Néanmoins, l’objectif, dans la suite de ce B · II , est de montrer que si on les détermine, alors
on pourra en déduire aisément les valeurs de c1,i , c2,i et c3,i , ∀ i ∈ [ 0 (1) n ]. Ainsi, jusqu’à la fin
de ce B · II , on suppose (temporairement donc !) qu’on connaît les valeurs de d0 , · · · , dn+1 .
3◦ ) a) Exprimons alors c2,i et c3,i en fonction de di et/ou di+1 et/ou hi .
On a : (P.1 ) =⇒ ∀ x ∈ IR, Pi′′ (x) = c2,i + c3,i · (x − ai ),
=⇒ Pi′′ (ai ) = c2,i et Pi′′ (ai+1 ) = c2,i + c3,i · (ai+1 − ai ) = c2,i + c3,i hi . (B.3 )
Or, ai et ai+1 ∈ [ ai , ai+1 ]. Mais, par (C.1), feS = Pi sur [ ai , ai+1 ] =⇒ avec (C.3), feS′′ = Pi′′ sur [ ai , ai+1 ] ;
=⇒ Pi′′ (ai ) = feS′′ (ai ) = di et Pi′′ (ai+1 ) = feS′′ (ai+1 ) = di+1 . (B.4 )

di+1 − di
Finalement, (B.3 ) et (B.4 ) =⇒ c2,i = di et c3,i = .
hi

yi+1 − yi hi hi
b) Montrons que, ∀ i ∈ [ 0 (1) n ], on a : c1,i = − di − di+1 .
hi 3 6
Comme ai+1 ∈ [ ai , ai+1 ] et, par (C.1), feS = Pi sur [ ai , ai+1 ], alors on a, avec (C.2) :
feS (ai+1 ) = Pi (ai+1 ) et feS (ai+1 ) = f (ai+1 ) = yi+1 =⇒ Pi (ai+1 ) = yi+1 . (B.5 )
Maintenant, en faisant x = ai+1 dans (P.1 ), il vient, compte tenu des valeurs déjà trouvées de c0,i , c2,i , c3,i :
h2i h3 h2 di+1 − di h3i
Pi (ai+1 ) = c0,i + c1,i · hi + c2,i · + c3,i · i = yi + c1,i · hi + di · i + ·
2 6 2 hi 6
h 2
= yi + c1,i · hi + (2 di + di+1 ) · i . (B.6 )
6
h2
(B.5 ) et (B.6 ) =⇒ yi+1 = yi + c1,i · hi + (2 di + di+1 ) · i . Il s’ensuit que :
6
yi+1 − yi hi yi+1 − yi hi hi
c1,i = − (2 di + di+1 ) · =⇒ c1,i = − di − di+1 . Cqfd.
hi 6 hi 3 6
4◦ ) Avec ce qui précède, écrivons un algorithme CALC_COEFF calculant efficacement, pour tous les
i = 0 (1) n, les réels c0,i , c1,i , c2,i , c3,i , avec pour données hi , yi , yi+1 , di , di+1 . Coût numérique ?
• Données :
y0 , · · · , yn+1 ∈ IR ; /* ∀ i = 0 (1) n + 1, yi = f (ai) */
d0 , · · · , dn+1 ∈ IR ; /* ∀ i = 0 (1) n + 1, di = fe′′(ai) */ S
h0 , · · · , hn ∈ IR ; /* ∀ i = 0 (1) n, hi = ai+1 − ai. */
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.3/7

• Résultats attendus :
c0 , c1 , c2 , c3 ∈ IRn+1 ;
/* c0 = (c0,i)0 6 i 6 n, c1 = (c1,i)0 6 i 6 n, c2 = (c2,i)0 6 i 6 n, c3 = (c3,i)0 6 i 6 n */
/* où c0,i, c1,i, c2,i, c3,i sont les coefficients du polynôme Pi dans (P.1 ), ∀ i = 0 (1) n. */
Pour l’algorithme CALC_COEFF , nous proposons ci-après 2 versions possibles, mais de même coût.
• Algorithme CALC_COEFF : Version 1. • Algorithme CALC_COEFF : Version 2.

Début Début
Pour i = 0 (1) n faire Pour i = 0 (1) n faire
c0,i ←− yi ; c0,i ←− yi ;
c2,i ←− di ; j ←− i + 1 ; c2,i ←− di ; j ←− i + 1 ;
c3,i ←− (dj − di)/hi ; c3,i ←− (dj − di)/hi ;
c1,i ←− (yj − yi)/hi − (2 ∗ di + dj ) ∗ hi/6 ; c1,i ←− (yj − yi)/hi − (di/3 + dj /6) ∗ hi ;
finPour ; finPour ;
Renvoyer (c0 , c1 , c2 , c3 ) ; Renvoyer (c0 , c1 , c2 , c3 ) ;

STOP STOP

∗∗∗ Remarque/Commentaire n◦3.B :


Pour écrire l’algorithme CALC_COEFF , on pouvait aussi introduire un tableau à 2 dimensions :
CO : tableau [ 0...3, 0...n ] de réels ;
avec la convention que CO[k, i] contiendra la valeur calculée de ck,i , ∀ k = 0 (1) 3 et ∀ i = 0 (1) n. A
titre illustratif, voici ce que serait alors devenu la Version 1 ci-dessus de l’algorithme CALC_COEFF :

Début
Pour i = 0 (1) n faire
CO[0, i] ←− yi ;
CO[2, i] ←− di ; j ←− i + 1 ;
CO[3, i] ←− (dj − di)/hi ;
CO[1, i] ←− (yj − yi)/hi − (2 ∗ di + dj ) ∗ hi/6 ;
finPour ;
Renvoyer (CO) ;

STOP

• • • Coût numérique de l’algorithme CALC_COEFF .


• Coût numérique de la Version 1 ci-dessus de l’algorithme CALC_COEFF :
A chaque passage dans la boucle Pour , on fait, comme opérations sur les réels : 1 (+), 3 (−), 2 (×), 3 (/).
On passe dans cette boucle pour chaque i = 0 (1) n, ce qui fait n+1 passages. Cela donne, pour tout l’algorithme :
n + 1 (+), 3(n + 1) (−), 2(n + 1) (×), 3(n + 1) (/) , soit, au total, 9(n + 1) o.v.f. .

• Coût numérique de la Version 2 ci-dessus de l’algorithme CALC_COEFF :


A chaque passage dans la boucle Pour , on fait, comme opérations sur les réels : 1 (+), 3 (−), 1 (×), 4 (/).
On passe dans cette boucle pour chaque i = 0 (1) n, ce qui fait n+1 passages. Cela donne, pour tout l’algorithme :
n + 1 (+), 3(n + 1) (−), n + 1 (×), 4(n + 1) (/) , soit, au total, 9(n + 1) o.v.f. .
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.4/7

∗∗∗ Remarque/Commentaire n◦4.B :


Dans les 2 coûts numériques ci-dessus, on n’a pas comptabilisé l’addition dans l’instruction
« j ←− i + 1 » . Raison : il s’agit de l’addition de 2 nombres entiers, et donc incompara-
blement plus rapide à l’exécution en machine que celle entre 2 nombres réels.
Rappelons que, en règle générale, le coût numérique d’un algorithme d’Analyse numérique est évalué
à travers le nombre d’opérations à résultat de type réel ( « type » au sens informatique du
terme). Ces opérations sont appelées opérations en virgule flottante, à cause du mode de stockage
des réels en mémoire d’ordinateur.
• Cf. Chapitre 1 : II - Comment les ordinateurs calculent .

5◦ ) Pour un indice i ∈ [ 0 (1) n ], supposons avoir obtenu, ci-dessus, les valeurs de c0,i , c1,i , c2,i , c3,i .
a) Schéma de Hörner de Pi écrit sous la forme (P.1 ), et déduction d’un algorithme EVAL_Poly
calculant efficacement la valeur de Pi en un x ∈ IR donné. Coût numérique de cet algorithme ?
•• Schéma de Hörner du polynôme Pi écrit sous la forme (P.1 ) :
 (x − ai )  (x − ai ) 
∀ x ∈ IR, Pi (x) = c0,i + (x − ai ) · c1,i + · c2,i + · c3,i .
2 3

•• Algorithme EVAL_Poly calculant efficacement la valeur de Pi en un x ∈ IR donné.


• Données :
ai ∈ IR ;
x ∈ IR ; /* Point en lequel on veut calculer la valeur du polynôme Pi */
c0,i, c1,i, c2,i, c3,i ∈ IR ; /* Coefficients du polynôme Pi dans (P.1 ). */
• Résultat attendu :
y ∈ IR ; /* y = Pi(x). */
Pour l’algorithme calculant y = Pi (x), nous proposons ci-après 3 versions différentes. La Version 2 est basée
sur le fait que vu le faible degré du polynôme Pi , utiliser une boucle Pour pour algorithmiser le schéma de Hörner
ci-dessus est inutilement lourd. Cela a, subsidiairement, l’avantage, par rapport à la Version 3 , d’éliminer des
calculs d’indice et de supprimer une division, évidemment superflue, par le nombre 1. La Version 1 (la plus
efficace) fait la même chose que la Version 2 , mais de manière plus compacte.
• Algorithme EVAL_Poly : Version 1.

Début
t ←− x − ai ;
y ←− c0,i + t ∗ (c1,i + (t/2) ∗ (c2,i + (t/3) ∗ c3,i)) ;
Renvoyer (y) ;

STOP

• Algorithme EVAL_Poly : Version 3.


• Algorithme EVAL_Poly : Version 2.
Début
Début
t ←− x − ai ;
t ←− x − ai ;
y ←− c3,i ;
y ←− c2,i + (t/3) ∗ c3,i ;
Pour k = 3 (−1) 1 faire
y ←− c1,i + (t/2) ∗ y ;
y ←− ck−1, i + (t/k) ∗ y ;
y ←− c0,i + t ∗ y ;
finPour ;
Renvoyer (y) ;
Renvoyer (y) ;
STOP
STOP
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.5/7

• • • Coût numérique de l’algorithme EVAL_Poly .


• Coût numérique des Versions 1 et 2 ci-dessus de l’algorithme EVAL_Poly :
3 (+), 1 (−), 3 (×), 2 (/) , soit, au total, 9 o.v.f. .
• Coût numérique de la Version 3 ci-dessus de l’algorithme EVAL_Poly :
3 (+), 1 (−), 3 (×), 3 (/) , soit, au total, 10 o.v.f. .

b) Cependant, l’algorithme EVAL_Poly ne suffit pas si on veut calculer la valeur de la fonction feS
en un réel x donné dans [ a, b ]. Précisons le point crucial qui manque.
Ce qui manque, c’est qu’étant donné que la fonction feS est définie par morceaux sur [ a, b ] à travers sa
propriété (C.1), pour calculer la valeur de feS en un réel x donné dans [ a, b ], il faut d’abord trouver à quel
« morceau » de feS ce réel x appartient. Vu (C.1), il faut donc déterminer préalablement l’indice
i ∈ [ 0 (1) n ]/ x ∈ [ ai , ai+1 ]. (B.7 )
e
Ce n’est qu’une fois l’indice i vérifiant (B.7 ) déterminé, qu’on pourra calculer la valeur de fS en x par l’algo-
rithme EVAL_Poly , car, par (C.1), on sait qu’elle est donnée par : feS (x) = Pi (x).
..................................................................................................................
B · III - Calcul des réels di = fe′′ (ai ), pour i = 0 (1) n + 1 : Principe d’action.
S
On sait que ceux-ci sont déterminés, de manière unique, par (C.4) et le fait que :
∀ i = 1 (1) n, Pi′ (ai ) = Pi−1 ′
(ai ). (P.2 )

1 ) a) Montrons que ceci équivaut à un système (S) de n équations linéaires à n inconnues (à
préciser), équations dont les coefficients et les 2nds membres sont facilement calculables à
partir des données. N.B. Chaque équation linéaire sera écrite de telle sorte qu’il n’apparaisse
aucune division au 1er membre (ou membre gauche).
(x − ai )2
Soit un indice i ∈ [ 1 (1) n ]. Notons que : (P.1 ) =⇒ ∀ x ∈ IR, Pi′ (x) = c1,i + c2,i ·(x− ai ) + c3,i · ;
2
yi+1 − yi hi hi
=⇒ Pi′ (ai ) = c1,i = − di − di+1 , (B.8 )
hi 3 6
h2 yi+1 − yi hi hi di+1 − di h2i
et Pi′ (ai+1 ) = c1,i + c2,i · hi + c3,i · i = − di − di+1 + di hi + ·
2 hi 3 6 hi 2
yi+1 − yi hi yi+1 − yi hi hi
= + (di + 2 di+1 ) · = + di + di+1 . (B.9 )
hi 6 hi 6 3
En faisant une translation d’indice de i à i − 1 dans (B.9 ) ci-dessus, on déduit qu’on a, ∀ i ∈ [ 1 (1) n + 1 ] :
′ yi − yi−1 hi−1 hi−1
Pi−1 (ai ) = + di−1 + di . (B.10 )
hi−1 6 3
Ainsi, ∀ i ∈ [ 1 (1) n ], (B.8 ) et (B.10 ) entraînent que l’égalité Pi−1 ′ (a ) = P ′ (a ) est équivalente à :
i i i
yi − yi−1 hi−1 hi−1 yi+1 − yi hi hi
+ di−1 + di = − di − di+1 ,
hi−1 6 3 hi 3 6
⇐⇒ hi−1 · di−1 + 2 λi · di + hi · di+1 = 6 · (βi − βi−1 ), (B.11 )
yi+1 − yi
où on a posé λi = hi−1 + hi , ∀ i ∈ [ 1 (1) n ], et βi = , ∀ i ∈ [ 0 (1) n ].
hi
Sachant que (C.4) ⇐⇒ d0 = dn+1 = 0, alors, en faisant successivement i = 1, i = 2, i = 3, . . . , i = n − 1
et i = n dans (B.11 ), on obtient :

 2 λ1 · d1 + h1 · d2 = 6 · (β1 − β0 )





 h1 · d1 + 2 λ2 · d2 + h2 · d3 = 6 · (β2 − β1 )






 h2 · d2 + 2 λ3 · d3 + h3 · d4 = 6 · (β3 − β2 )
(S) .. .. ..



 . . .





 hn−2 · dn−2 + 2 λn−1 · dn−1 + hn−1 · dn = 6 · (βn−1 − βn−2 )




hn−1 · dn−1 + 2 λn · dn = 6 · (βn − βn−1 )
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.6/7

Ceci montre bien que la conjonction de (C.4) et (P.2 ) est équivalente à un système (S) de n équations linéaires
à n inconnues que sont : d1 , · · · , dn .

On constate aussi que dans l’équation linéaire n◦ i du système (S) :


– les coefficients des inconnues sont : hi−1 ou 2 λi ou hi , facilement calculables à partir des données
a0 , · · · , an , car hi−1 = ai − ai−1 , λi = ai+1 − ai−1 et hi = ai+1 − ai ;
– le 2nd membre ou (membre droit) est : 6 · (βi − βi−1 ) , facilement calculable à partir des données
a0 , · · · , an et y0 , · · · , yn . Cqfd.
b) Disons d’où sort la condition (P.2 ) parmi les propriétés imposées sur la fonction feS .
La propriété (C.1) de feS implique que feS est une fonction polynômiale par morceaux sur [ a, b ]. Or, on
sait alors, par un Théorème du Cours, que la propriété (C.2) de feS est vraie si, et seulement si :

– feS est continue sur [ a, b ] ;
– ∀ i = 1 (1) n , Pi′ (ai ) = Pi−1′ (a ) et P ′′ (a ) = P ′′ (a ).
i i i i−1 i
On constate donc que la condition (P.2 ) est incluse dans la propriété (C.2) de feS .
2◦ ) a) Mise de (S) sous forme matricielle A.d = v, avec A, d et v à préciser.
Cette forme matricielle de (S) est obtenue en prenant :
 
   
 2 λ1 h1 
  d1 β1 − β0
 h1 2 λ2 h2     
     
   d2   β2 − β1 
 h2 2 λ3 h3     
   .   .. 
A =   , d =  ..  , v = 6· .  ,
 ... ... ...     
     
   dn−1   βn−1 − βn−2 
     
 hn−2 2 λn−1 hn−1 
  dn βn − βn−1
hn−1 2 λn

yi+1 − yi
où on rappelle qu’on a posé λi = hi−1 + hi , ∀ i ∈ [ 1 (1) n ], et βi = , ∀ i ∈ [ 0 (1) n ].
hi
b) Signalons toute propriété remarquable de la matrice A, et déduisons qu’elle est inversible.
A est tridiagonale, à diagonale strictement dominante (DSD), symétrique et définie positive (SDP) .
N’importe laquelle des 2 propriétés DSD ou SDP entraîne que A est une matrice inversible.
..................................................................................................................
B · IV - Calcul effectif des réels di = fe′′ (ai ), pour i = 0 (1) n + 1 : Résolution du système (S).
S

1◦ ) Il serait pertinent de résoudre (S) par la procédure GAUSS_SP_TRID écrite en A· II , car :


1. Premièrement, A est une matrice tridiagonale ;
2. Comme, de plus, A est DSD (le même argument marche avce SDP), alors la méthode de Gauss sans permu-
tation peut être utilisée pour résoudre (S) :
2.1. sur le plan de la théorie de l’Algèbre Linéaire, car le coefficient trouvé en position (k, k) dans la matrice
du système au début de l’élimination sur la colonne k sera toujours non nul, ∀ k = 1 (1) n − 1 ;
2.2. sur le plan numérique (celui de l’exécution par ordinateur), car il est garanti qu’il n’y aura pas de
propagation désatreuse des erreurs arrondis dans l’algorithme de la méthode, et donc le vecteur d e
renvoyé par la machine après l’exécution sera très proche du vrai vecteur-solution cherché d.
2◦ ) a) Nous avons besoin des 4 vecteurs C, D, E, v. Ecrivons un algorithme INIT_SPLINE calculant
efficacement toutes leurs coordonnées respectives, avec les données de B · II -2◦ )a).
MAT 227–Analyse Numérique, Examen Final 2016-17 : Eléments sur la Correction Partie B : p.7/7

• Données :
n ∈ IN ;
a0 , · · · , an+1 ∈ IR ; /* a = a0 < a1 < · · · < an < an+1 = b */
y0 , · · · , yn+1 ∈ IR ; /* ∀ i = 0 (1) n + 1, yi = f (ai). */
• Résultats attendus :
h ∈ IRn+1 ; /* h = (hi)0 6 i 6 n, qui a son utilité, notamment dans CALC_COEFF . */
D, v ∈ IRn, C, E ∈ IRn−1 ;
/* D : diagonale principale de A ; */
/* C : diagonale secondaire en-dessous de la diagonale principale de A ; */
/* E : diagonale secondaire au-dessus de la diagonale principale de A ; */
/* b : vecteur-2nd membre du système du système (S). */

• Algorithme INIT_SPLINE :

Début
Pour i = 0 (1) n faire
hi ←− ai+1 − ai ;

βi ←− yi+1 − yi /hi ;
finPour ;
Pour i = 1 (1) n faire

D[i] ←− 2 ∗ (ai+1 − ai−1 ;

v[i] ←− 6 ∗ (βi − βi−1 ;
finPour ;
Pour i = 1 (1) n − 1 faire
C[i] ←− hi ;
finPour ;
E ←− C ;
Renvoyer (h, C, D, E, v) ;

STOP

b) Instruction du programme principal qui, ayant C, D, E, v, va calculer d1 , · · · , dn :

[ d ] ←−GAUSS_SP_TRID ( C,D, E, v, d) ;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Vous aimerez peut-être aussi