Méthodes d`approximations - Bienvenue sur le site des

Transcription

Méthodes d`approximations - Bienvenue sur le site des
TP - Turbo Pascal
Lycée Dominique Villars
ECE 2
Différents problèmes liés aux méthodes d’approximations
A. Méthodes d’approximation d’une solution de l’équation f (x) = 0
1. Utilisation du théorème du point fixe.
Lorsque l’on cherche à déterminer la valeur approchée de ℓ unique solution de f (ℓ) = 0, il peut être utile de
remarquer que :
f (ℓ) = 0
⇐⇒
f (ℓ) + ℓ = ℓ
Ainsi en définissant la fonction g : x → f (x) + x, on a
ℓ est une racine de la fonction f
f (ℓ) = 0
⇐⇒
⇐⇒
ℓ est un point fixe de g
g(ℓ) = ℓ
Afin d’approcher ℓ, il est donc possible, selon les conditions, d’utiliser une suite récurrente (un )n telle que
∀ n∈N
un+1 = g(un )
Exercice 1.
Le but de l’exercice est de déterminer une valeur approchée à 10−3 près de la solution positive de l’équation:
2e−x − e−2x − x = 0
Soit g la fonction définie sur R+ par
g(x) = 2e−x − e−2x
Soit (un ) la suite définie par: u0 =
1
2
et pour tout n ∈ N,
un+1 = g(un )
1. Après étude des variations de la fonction g (continue sur R), nous pouvons montrer que l’équation g(x) = x
a une unique solution positive notée α et que 1/2 6 α 6 1.
2. Nous avons démontrer que : pour tout n ∈ N,
|un − α| 6
1
2n+1
Ecrire un programme en PASCAL qui calcule une valeur de un qui soit une valeur approchée de α à 10−p
près, où p est un entier entré par l’utilisateur. On stockera pour celà les valeurs successives de un dans une
variable pouvant être nommé u.
2. Methode de NEWTON ou méthode de la tangente
Principe de la méthode de Newton :
Nous avons déjà vu par le passé, la méthode de dichotomie permettant de déterminer une valeur approchée de α,
unique solution de l’équation
f (x) = 0
sur un intervalle [a , b] tel que f (a) × f (b) < 0.
La méthode de Newton est une alternative plus efficace (sous certaines conditions) à la méthode de dichotomie.
A chaque étape de l’algorihme, elle consiste à :
• remplacer la courbe représentant la fonction f par la tangente à la courbe en A(a, f (a)) (. . . ou B = (b, f (b)) ;
• puis à modifier la valeur approximant α en remplacant la valeur a (. . . ou b) par la valeur c de l’abscisse du
point d’intersection de cette tangente avec l’axe des abscisses.
Dans le cas où A(a, f (a)) est choisi, l’équation de la tangente à Cf en A est :
y = f ′ (a) (x − a) + f (a)
La valeur de c est donc solution de f ′ (a) (x − a) + f (a) = 0, ainsi
c=a −
f (a)
f ′ (a)
En réitérant la méthode, on obtient une suite définie par la relation de récurrence suivante :
xn+1 = xn −
f (xn )
f ′ (xn )
Exercice 2 - ECRICOME 2006
On considère la fonction f définie pour tout réel x par :
f (x) = x + 1 + 2ex
Il existe un unique réel ℓ, élément de l’intervalle [−2, −1] tel que
f (ℓ) = 0
On souhaite donner une valeur approchée de α. Pour cela, l’on s’intéresse à la suite (xn )n∈N définie par son
premier terme x0 = −1 et par la relation
∀n ∈ N , xn+1 = xn −
f (xn )
f ′ (xn )
Il est possible de démontrer (cf. sujet Ecricome 2006) que pour tout entier naturel n :
0 6 xn − ℓ 6
1
e2n − 1
Écrire un programme en langage Pascal permettant, lorsque l’entier naturel p est donné par l’utilisateur,
de calculer une valeur approchée de ℓ, de telle sorte que l’on ait :
0 6 xn − ℓ 6 10−p
B. Approximation d’une intégrale par la méthode des rectangles
Principe : on souhaite déterminer une valeur approchée de I =
1. on découpe l’intervalle [a, b] en n sous-intervalles réguliers.
Rb
a
f (t) dt
2. sur chacun de ces sous-intervalles on approche la fonction f par une fonction constante (par exemples : la
valeur de f à la borne inférieure de l’intervalle Ou la valeur de f à la borne supérieure de cet intervalle)
Approximation d’une intégrale par méthode des rectangles.
Si f est une fonction continue sur l’intervalle [a, b] alors
Z
b
f (t) dt =
a
lim Sn (f ) =
n→+∞
lim Sn′ (f )
n→+∞
lorsque pour tout entier n ∈ N∗ , on définit les sommes de Riemann :
n−1
b−aX
f
Sn (f ) =
n
k=0
b−a
a+k
n
n
Sn′ (f )
b−aX
f
=
n
k=1
b−a
a+k
n
Exercice 3.
Ecrire un programme en Turbo Pascal permettant de calculer une valeur approchée de l’intégrale
Z 2
2
e−t dt
I=
1
Ce programme devra :
• demander à l’utilisateur une valeur entière n non nulle
• rendre en sortie la valeur de Sn (f ) ou Sn′ (f ).
Majoration de l’erreur Soit f une fonction de classe C 1 sur [a; b] et n un entier naturel non nul alors :
h
i
Z b
supx∈[a,b] |f ′ (x)| (b − a)2
f (t) dt − Sn (f ) 6
2n
a
suite Exercice 3.
Ecrire un programme en Turbo Pascal permettant de déterminer une valeur approchée de l’intégrale I à ε près.
Ce programme devra :
• demander à l’utilisateur ε = marge d’erreur tolérée
• rendre en sortie, à l’aide d’une des sommes de Riemann Sn (f ) ou Sn′ (f ), une valeur approchée de I à ε
près.
C. Comparaison méthode des rectangles et méthodes des trapèzes
Principe : on souhaite déterminer une valeur approchée de I =
1. on découpe l’intervalle [a, b] en n sous-intervalles réguliers.
Rb
a
f (t) f t
2. sur chacun de ces sous-intervalles on approche la fonction f par la fonction affine dont la représentation est
le segment reliant les deux points de Cf aux extrémités de l’intervalle
Rappel : Aire du trapèze =
(B + b) × h
.
2
Approximation d’une intégrale par méthode des trapèzes.
Si f est une fonction continue sur l’intervalle [a, b] alors
Z
b
f (t) dt =
a
lim Tn (f )
n→+∞
lorsque pour tout entier n ∈ N∗ :
"
#
n−1 Sn (f ) + Sn′ (f )
b−a
b − a f (a) + f (b) X
+
=
f a+k
Tn (f ) =
n
2
n
2
k=1
Exerice 4 - Comparaison des deux méthodes
On considère l’intégrale
J=
1. Calculer par IPP, la valeur exacte de J.
2.
Z
1
t et dt
0
Ecrire un programme Turbo Pascal qui
• demande à l’utilisateur ε = marge d’erreur tolérée
• rende en sortie la plus petite valeur de n (notée n1 ) telle que |Sn (f ) − J| 6 ε ainsi que la plus petite valeur
de n (notée n2 ) telle que |Tn (f ) − J| 6 ε.
3. Exécuter ce programme pour différentes valeurs de ε. Que conclure d’après vos observations?
Majoration de l’erreur (méthode des trapèzes)
Soit f une fonction de classe C 2 sur [a; b] et n un entier naturel non nul alors :
h
i
Z b
supx∈[a,b] |f ′′ (x)| (b − a)3
f (t) dt − Tn (f ) 6
12n2
a
Exercice 1 - Suite récurrente - Theorème du point fixe
Program Pointfixe ;
VAR n, p : integer ; u : real ;
Function g(x:real) : real;
BEGIN
g:= 2*exp(-x) - exp(-2*x) ;
END;
Function puissance(x:real, n:integer) : real ;
VAR i : integer ; p : real ;
BEGIN
p:=1 ;
FOR i:=1 TO n DO p:=p * x ;
puissance:= p ;
END;
BEGIN
WRITELN(’Entrer la valeur de p’);
READLN(p);
u:=1/2;
n:=0 ;
WHILE 1/puissance(2,n+1) > 1/puissance(10,p) DO
BEGIN
u:= g(u) ;
n:=n+1 ;
END ;
WRITELN(’une valeur approchée de ℓ à la précision souhaitée est’ , u , ’elle est obtenue au rang n= ’, n);
END.
Exercice 2 - Méthode de NEWTON
Program Newton ;
VAR n, p : interger ; u : real ;
Function puissance(x:real, n:integer) : real ;
VAR i : integer ; p : real ;
BEGIN
p:=1 ;
FOR i:=1 TO n DO p:=p * x ;
puissance:= p ;
END;
BEGIN
WRITELN(’Entrer la valeur de p’);
READLN(p);
u:= -1;
on initialise les valeurs de la suite
n:= 0 ;
WHILE 1/(exp(puissance(2,n)) -1) > 1/puissance(10,p) DO
BEGIN
u:= u - (u+1+2*exp(u))/(1+2*exp(u)) ;
on calcule la valeur du terme suivant dans la suite u
n:= n+1 ;
on modifie l’indice correspond au rang
END ;
WRITELN(’une valeur approchée de ℓ à la précision recherchée est’ , u , ’elle est obtenue au rang n= ’, n );
END.
Exercice 3.
Program Riemann ;
VAR
........................... ;
BEGIN
writeln(’entrer la valeur de n’) ; readln(n) ;
FOR i:= ...... TO ..... DO
BEGIN
S := S + .............................................. ;
END ;
writeln(’la somme de Riemann à gauche/droite au rang ’, n , ’ vaut ’, S) ;
END.
Exercice 3 suite.
Program Riemannsuite ;
VAR
........................... ;
BEGIN
writeln(’entrer une valeur pour la précision souhaitée, epsilon’) ; readln(eps) ;
n:=1 ;
WHILE ............................ DO n:=n+1 ;
FOR i:= ...... TO ..... DO
BEGIN
S := S + .............................................. ;
END ;
writeln(’une somme de Riemann donnant une valeur approchée convenable de I est ’, S) ;
END.
Exercice 4.
Program comparaison ;
VAR
........................... ;
BEGIN
writeln(’entrer une valeur pour la précision souhaitée, epsilon’) ; readln(eps) ;
n:=1 ; n1:=1 ; n2:=1 ;
S:= .................. ;
Sprime := ............... ;
T:= (S+Sprime)/2 ;
WHILE abs(S-1)>eps OR abs(T-1)>eps DO
BEGIN
n:=n+1 ;
FOR i:= ...... TO ..... DO
BEGIN
S := S + .............................................. ;
Sprime := Sprime + .............................................. ;
END ;
T=(S+Sprime)/2 ;
IF abs(S-1)>eps DO n1:= n ;
IF abs(T-1)>eps DO n2:= n ;
END ;
writeln(’la valeur de n1 est ’, n1 , ’ et celle de n2 est ’, n2) ;
END.
Exercice +. Méthode d’approximation aléatoire dite méthode de Monte-Carlo
Program montecarlo ;
VAR
c, i, n : integer ; X, Y : real
BEGIN
randomize ;
writeln(’entrer une valeur entiere non nulle’) ; readln(n) ;
c:= 0 ;
FOR i = 1 TO n DO
BEGIN
X:= .............. ; Y:=......... ;
IF ............ then ............ ;
END.
wrtieln(..............) ;
Compléter ce programme afin qu’il affiche une valeur aléatoire pouvant être interprétée comme une valeur approchée de
Z 1
2
e−t dt
I=
0