Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Avant-propos
Cet ouvrage s'adresse aux étudiants en 2ièm année Sciences et Techniques (ST) en forma-
tion du Master. Son objectif est de donner au lecteur un outil lui permettant de travailler
de manière autonome à l'aide de questions détaillées et progressives, et d'une construction
pas à pas des programmes.
Contrairement à ce qui a été le cas pour les systèmes d'équations linéaires, la résolution
des systèmes non-linéaires s'avère beaucoup plus délicate. En général il n'est pas possible
de garantir la convergence vers la solution correcte et la complexité des calculs croît très
vite en fonction de la dimension du système.
Dans ce cas la solution du système d'équations s'obtient en résolvant une succession de
systèmes récursifs et de systèmes interdépendants. Dans la suite on supposera toujours
que le système à résoudre est interdépendant.
Parmi les approches des calculs récursifs constituent les techniques les plus souvent utili-
sées pour la résolution de systèmes d'équations non-linéaires :
- Méthode de Dichotomie (Bissection),
- Méthode du point xe,
- Méthode de Newton-Raphson,
- Méthode de Lagrange,
- Méthode de Régula-Falsi (fausse position),
- Résolution par minimisation, ...
Ce support est dédié aux étudiants de 2ème année Sciences et Techniques (ST) toutes les
options, ce support du TP s'articule autours des objectifs diérents comme :
- la résolution des systèmes non linéaires par la programmation de diérentes méthodes
numériques sous MATLAB,
- La connaissance des autres langages de programmation comme C et le Fortran,
- La conclusion et la comparaison entre ces diérentes méthodes.
Ce polycopié, a pour but de présenter un exposé de TP sur la programmation sous MAT-
LAB des méthodes d'approximation et d'optimisation numérique pour résoudre des équa-
tions non linéaires. Il est destiné aux ingénieurs, physiciens, mathématiciens ainsi qu'aux
étudiants en Troisième année Licence Electronique et Electrotechnique.
Le contenu de ce support de TP se décompose principalement en six chapitres de TP sur
les méthodes d'approximation et d'optimisation numérique programmée sous Matlab.
iii
Pour atteindre ces objectifs nous proposons une approche pédagogique pour participer à
la formation des concepteurs en génie électrique, en les dotant d'outils méthodologiques,
mais plus encore en les mettant dans un état d'esprit propice aux fonction de program-
mation, caractérisé par la volonté de maîtriser au lieu de subir.
iv
Syllabus
(Plan du TP)
Année : 2eme année Sciences et techniques (ST).
Semestre : 4
UE : Méthodologique.
Matière : TP-Méthodes numériques.
Enseignant responsable de l'UE :
Enseignant responsable de la matière : Khatir KHETTAB
Objectifs de l'enseignement :
- Constituer les banques des connaissances du MATLAB,
-Approfondir les connaissances en programmation sous MATLAB des méthodes d'ap-
proximation numériques.
Contenu de la matière :
TP1. Rappels et notions sur les calculs matriciels,
TP2. Méthode de Dichotomie (Bissection),
TP3. Méthode du Point-xe,
TP4. Méthode de Newton,
TP5. Méthode de Lagrange,
TP6. Méthode de Régula-falsi (fausse position) ...
Mode d'évaluation : L'examen continu ainsi que les travaux pratiques contribueront
chacun au quart de la note globale qui englobe :
La note de la présence et participation, la note du compte rendu et la note du test pratique.
Table des matières
1 TP N1 : Rappels et historiques sur Matlab 1
1.1 Introduction : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Quelles sont les particularités de MATLAB ? . . . . . . . . . . . . . 2
1.1.2 MATLAB peut-il s'en passer de la nécessité de Fortran ou du C ? . 3
1.1.3 Ecriture d'un programme m-le par MATLAB : . . . . . . . . . . . 4
1.2 Commandes structurées dans Matlab (Boucles et structures) . . . . . . . . 4
1.2.1 Manipulation 01 : Multiplication de matrices . . . . . . . . . . . . . 4
1.2.2 Manipulation 02 : somme des n termes d'une série . . . . . . . . . . 4
1.2.3 Manipulation 03 : Lire des variables et faire la somme des n termes
d'une série . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 Programmes sous Matlab . . . . . . . . . . . . . . . . . . . . . . . . 5
Annexes 43
Bibliographie 43
Table des gures
2.1 Organigramme de la méthode de Dichotomie. . . . . . . . . . . . . . . . . 9
Préambule :
L'étude générale des fonctions à variables réelles nécessite de temps à autre
linéaires, cest-à-dire les valeurs réelles α telles que f (α) = 0 ; ou, ce qui est
1.1 Introduction :
diérents paramètres des graphiques pour les adapter selon nos souhaits.
- la programmation facile,
- l'outil graphique qui inclus les fonctions d'interface graphique et les uti-
litaires,
structures)
∑m
cij = k=1 aik ∗ bkj ; avec i = 1···n et j = 1···p
∑n (−1)k k
S1 = k=1 2k
1.3 Solutions
s=0 ;
for k=1 :n
s = s + (−1)k ∗ k/2k ;
end
fprintf('la somme des %g termes de la série sont %f \n',n,s) ;
b- boucle whileend :
n=input('nombr de term n ?')
s=0 ;
k=1 ;
while (k<=n)
s = s + (−1)k ∗ k/2k ;
k=k+1 ;
end
fprintf('la somme des %g termes de la série sont %f \n',n,s)
2.1 But
f (x) = 0
On considère un intervalle [a, b] et une fonction f continue de [a, b] dans
R. On suppose que f (a) ∗ f (b) < 0 et que l'équation f (x) = 0 admet une
unique solution α sur l'intervalle ]a, b[.
| | | Aecter la valeur c à a
| | Fin de si
| Fin de Tant que
| | Acher "La solution est comprise entre a et b"
Fin de si
f1 (x) = x − esin(x)
(2.1)
[a, b] = [1, 10]
f2 (x) = x3 − 12x2 − 60x + 46
(2.2)
[a, b] = [0, 1]
f3 (x) = x3 − 12x2 + 1
(2.3)
[a, b] = [0, 1]
f4 (x) = cos(x) − x3
(2.4)
[a b] = [0 1]
2.5 Solutions
clc
clear all
x=1 :0.1 :10 ;
f=inline('x-exp(sin(x))') ;
plot(x,f(x)), grid ;
a=1 ; fa=f(a) ;
b=10 ; fb=f(b) ;
i=0 ; Nmax=20 ;
eps=1.0e-3 ;
if ((fa*fb)<0)
for (i=0 :Nmax)
x=(a+b)/2 ;
i=i+1 ;
if (sign(f(x)) == sign(fa))
a=x ; fa=f(x) ;
else
b=x ; fb=f(x) ;
end
fprintf('dans lititation i=%d \t la solution est x0=f \t f(x0)= %f
\n',i,x,f(x))
end ;
fprintf('La solution nale est x0 = %f \n',x)
else
disp('On ne peut pas faire de Dichotomie dans cet intervalle ! !')
end
i=i+1 ;
if (sign(f(x)) == sign(fa))
a=x ; fa=f(x) ;
else
b=x ; fb=f(x) ;
end
fprintf('dans l'ititation i=%d \t la solution est x0=f \t f(x0)= f
\n',i,x,f(x))
end
fprintf('La solution nale est x0 = %f \n ',x)
else
disp('On ne peut pas faire de Dichotomie dans cet intervalle ! !')
end
2.5.2 Programme en C
#include <stdio.h>
#include <math.h>
#dene g(x) (pow(x, 3) − 12 ∗ x + 1)
int main()
{
oat a,b,x0,eps,e,p,n ;
int i ;
printf("donner a,b et eps \n") ;
scanf("%f%f%f",&a,&b,&eps) ;
i=0 ;
if (g(a)*g(b)<0)
{
do
{
i++ ;
x0=(a+b)/2.0 ;
if(g(a)*g(x0)<0)
{
b=x0 ;
e=fabs(a-x0) ;
}
2.5 Solutions 13
else
{
a=x0 ;
e=fabs(b-x0) ;
} printf("\n %d x0= %f g(x0)= %f e= %f",i,x0,g(x0),e) ;
}
while (e>eps) ;
}
else
{printf("pas de solution, SVP tapey un autre intervalle") ;}
getch() ;
}
Chapitre 3
TP N3 : Méthode du Point-xe
3.1 But
f (x) = 0
|xn − x| < ϵ
16 TP N3 : Méthode du Point-xe
|xn+1 − xn | < ϵ
3.3 Algorithmique
On souhaite calculer une valeur approchée d'un point xe d'une fonction
g à partir de choix d'un point x0 donné. Le point xe doit être calculé avec
une précision de ϵ donnée.
Quels sont les paramètres d'entrée ?
- Quels sont les paramètres de sortie ?
3.4 Travail à réaliser 17
3.4.2 Algorithme :
1. On commence par choisir le point initial x0 (n = 0) ;
2. On calcule xn+1 = g(xn ) ;
3. Si |xn+1 − xn | < alors la méthode a convergé, et on s'arrête ;
4. Si niter atteint Nmax alors la méthode a divergé, ou elle n'a pas pu conver-
ger avec Nmax itérations et on s'arrête ;
5. Sinon, on passe à l'étape 2 pour une nouvelle itération n + 1 (n devient
n + 1).
3.4.3 Application :
a). Considérons l'équation non linéaire : f (x) = x3 + 4x2 − 10 = 0, qui
admet une racine x0 dans l'intervalle [1, 2].
Trouvez trois façons d'écrire f =0 sous la forme d'un point-xe (g1 , g2 et
g3 ) ?
1. on fait un plot des (g1 avec x) , (g2 avec x) et (g3 avec x).
2. Appliquez la fonction Matlab `pointxe.m' que vous avez créé sur g1 (x), g2 (x) et g3 (x),
en mettant : x0 = 1.5,ϵ=0.001, Nmax = 50.
3. Quelle est la fonction (g1 , g2 ou g3 ) qui donne la convergence la plus rapide.
3.5 Exercice
3.6 Solutions
3.6.2 Programmes en C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x){
return x+1 ;
}
///la fonction g(x)
double g(double x){
double y= x-f(x) ;
//3*x
return y ;}
int main(int argc, char *argv[])
{
int i,n ;
double x[100] ;
double x0,EPS ;
printf("Precision voulue : ") ;
3.6 Solutions 21
scanf("%lf",&EPS) ;
printf("entrer la valeur initiale X0 : ") ;
scanf("%f",&x0) ;
x[0] = x0 ; // Initialisation de la valeur de départ
int k=0 ;
do{
x[k+1] = g(x[k]) ; // calcul des termes de la série x(k+1)
if(fabs(x[k+1]-x[k])<=EPS ) // critère de convergence
{
printf(" Nombre d'Iterations K=%d La solution X =%f", k, x[k+1]) ;
goto n ;
}
k++ ;
} while(fabs(x[k+1] - x[k])> EPS ) ;// continuer les calcul tant que le critère
n'est pas atteind n : system("PAUSE") ;
return 0 ;
}
22 TP N3 : Méthode du Point-xe
Chapitre 4
TP N4 : Méthode de Newton
4.1 But
f (x) = 0
f (xn )
xn+1 = xn − f ′ (xn )
thode de Newton pour des fonctions ayant une concavité déterminée (convexe
ou concave).
Soit f : [a, b] ∈ R de classe C2 vériant :
- f (a) × f (b) < 0,
′
- f (x) ̸= 0, ∀x ∈ [a, b],
′′
- f (x) ̸= 0, ∀x ∈ [a, b].
Alors la suite (xn ) dénie par :
x ∈ [a, b] : f (x0 ) × f ′′ (x0 ) > 0
(4.1)
x = x − f (xn )
n+1 n f ′ (xn )
4.2.3.1 Exemple
Pour illustrer la méthode, recherchons le nombre positif x vériant cos(x) =
3
x . Reformulons la question pour introduire une fonction devant s'annuler :
on recherche le zéro positif (la racine) de f (x) = cos(x) − x3 , la dérivée est
′
f (x) = −sin(x) − 3x . 2
Comme cos(x) ≤ 1 pour tout x et x > 1 pour x > 1, nous savons que notre
3
26 TP N4 : Méthode de Newton
f1 (x) = x − esin(x)
(4.4)
[a, b] = [1, 10]
f2 (x) = x3 − 12x2 − 60x + 46
(4.5)
[a, b] = [0, 1]
ton
4.6 Exercice
4.7 Solutions
ddf=inline('−cos(x) − 6 ∗ x') ;
if (df(a)== 0) && (df(b)== 0)
disp('On peut pas calculer la racine') ;
end
if (f(a)*ddf(a)>0) %initialisation de x0
x0=a ;
else x0=b ;
end
for (i=0 :Nmax)
x0 = x0 - (f(x0)/df(x0)) ;
err=abs(f(x0)/df(x0)) ;
if err>=eps
fprintf('i=%d
racine=%2.8f
f(x0)=%2.8f err=%2.8f \n',i,x0,f(x0),err) ;
end
fplot(f,[a b]) ;
hold all ;
plot(x0,f(x0),'ro') ;
4.7 Solutions 29
hold o ; grid on ;
pause(1)
end
ddf=inline('−cos(x) − 6 ∗ x') ;
if (df(a)== 0) && (df(b)== 0)
disp('On peut pas calculer la racine') ;
end
if (f(a)*ddf(a)>0) %initialisation de x0
x0=a ;
else x0=b ;
end
err=1 ; i=0 ;
while (err >= eps)
i=i+1 ;
x0 = x0 - (f(x0)/df(x0)) ;
err=abs(f(x0)/df(x0)) ;
if err>=eps
fprintf('i=%d racine=%2.8f f(x0)=%2.8f err=%2.8f \n',i,x0,f(x0),err) ;
end
fplot(f,[a b]) ;
hold all ;
plot(x0,f(x0),'ro') ;
hold o ; grid on ;
pause(1)
end
4.7.2 Programmes en C
#include <stdio.h>
#include <math.h>
oat FONCTION (oat x) return (pow((x),3.0)-12*x+1) ;}
30 TP N4 : Méthode de Newton
5.1 Introduction
5.2 Objectifs
Ici, xn+1 dépend de xn et de xn−1 : on dit que c'est une méthode à deux pas ;
nous avons d'ailleurs besoin de deux itérés initiaux x0 et x1 .
L'avantage de cette méthode est qu'elle ne nécessite pas le calcul de la dérivée
f ′. l'inconvénient est que nous perdons la convergence quadratique.
La fonction g correspondante vérie :
xn − xn−1
xn+1 = g(xn ) = xn − f (xn ) . (5.3)
f (xn ) − f (xn−1 )
5.4 Convergence 33
5.4 Convergence
5.5 Manipulation
5.6 Solutions
if (f(a)*ddf(a)<0)
x0=a ;
c=b ;
else x0=b ;
c=a ;
end
for (i=0 :nmax)
x0 = (f (x0) ∗ c − x0 ∗ f (c))/(f (x0) − f (c)) ;
err = abs(x0 − (f (x0) ∗ c − x0 ∗ f (c))/(f (x0) − f (c))) ;
if (err>=eps)
fprintf('i=%d racine=%2.8f f(x0)=%2.8f err=%2.8f\n',i,x0,f(x0),err) ;
end
fplot(f,[a b]) ;
hold all ;
plot(x0,f(x0),'ro') ;
hold o ; grid on ;
end
2- Avec la boucle whileend :
clear all ; close all ; clc ;
a=input('donner a= ') ;
b=input('donner b= ') ;
eps=input('donner eps= ') ;
nmax=input('donner nmax= ') ;
′
f=inline( cos(x) − x3′ ) ;
ddf=inline('-cos(x)-6*x') ;
if (f(a)*ddf(a)<0)
x0=a ;
c=b ;
else x0=b ;
c=a ;
end
err=1 ; i=0 ;
while (err>=eps)
i=i+1 ;
x0 = (f (x0) ∗ c − x0 ∗ f (c))/(f (x0) − f (c)) ;
err = abs(x0 − (f (x0) ∗ c − x0 ∗ f (c))/(f (x0) − f (c))) ;
if (err>=eps)
fprintf('i=%d racine=%2.8f f(x0)=%2.8f err=%2.8f\n',i,x0,f(x0),err) ;
end
5.6 Solutions 35
fplot(f,[a b]) ;
hold all ;
plot(x0,f(x0),'ro') ;
hold o ; grid on ;
pause(1)
end
5.6.2 Programmes en C
#include<stdio.h>
#include<math.h>
oat f(oat x) return (x-exp(sin(x))) ;
#dene df(x) (1-cos(x)*exp(sin(x)))
#dene d2f(x) ((sin(x)-cos(x)*cos(x))*exp(sin(x)))
int main()
{
oat a, b,c, x0,eps,e ;
oat fa,fb,dfa,dfb,d2fa ;
int i ;
printf("Donner a=") ;
scanf("%f",a) ;
printf("Donner b=") ;
scanf("%f",b) ;
printf("Donner eps=") ;
scanf("%f",eps) ;
fa=f(a) ; fb=f(b) ; dfa=df(a) ; dfb=df(b) ; d2fa=d2f(a) ;
if((dfa==0) (dfb==0))
{ printf("Impossible !") ;}
else
{ if(fa*d2fa<0)
{ x0=a ; c=b ;
}
else
{ x0=b ; c=a ; }
e=fabs(b-a) ;
i=0 ;
while(e>eps)
{ i++ ;
36 TP N5 : Méthode de Lagrange
x0=(f(x0)*c-x0*f(c))/(f(x0)-f(c)) ;
e=fabs(x0-(f(x0)*c-x0*f(c))/(f(x0)-f(c))) ;
printf("\n %d x0=%f (x0)= %f e= %f",i, x0,f(x0),e) ; printf("\n") ; }}
system("pause") ;
return 0 ;
}
Chapitre 6
TP N6 : Méthode de Regula-falsi
(fausse position)
6.1 But
x(0) = a, x(1) = b.
Ce point est donné par l'équation suivante qui se vérie très simplement :
6.2.1 Algorithme
entrées : x, f (x), a et b;
sorties : solution x0 ;
1. Choisir un intervalle [x(0) = a; x(1) = b] tel que f (a) ∗ f (b) < 0 :
2. Calculer la valeur de la fonction en x(i)
3. On retient comme nouvel intervalle [a, x(i)] en respectant la condition de
1.
On est alors assuré de toujours encadrer la racine.
4. Répéter les étapes 2 et 3 jusqu'à l'obtention de la précision désirée, c'est
à dire jusqu'à ce que abs(f (x(i)) < ϵ; ϵ étant la précision désirée.
i désigne le nombre d'itérations.
6.3 Travail à réaliser 39
f1 (x) = x − esin(x)
(6.1)
[a b] = [1 10]
f2 (x) = x3 − 12x2 − 60x + 46
(6.2)
[a b] = [0 1]
f3 (x) = x3 − 12x2 + 1
(6.3)
[a b] = [0 1]
f4 (x) = cos(x) − x3
(6.4)
[a b] = [0 1]
40 TP N6 : Méthode de Regula-falsi (fausse position)
6.5 Solutions
6.5.2 Programme en C
#include<stdio.h>
#include<conio.h>
#include<math.h>
oat f(oat x)
{
42 TP N6 : Méthode de Regula-falsi (fausse position)
return(2*x-log10(x)-6) ;
}
void main()
{
oat x,x1,a,b,err=0.00005 ;
int itr=1,n ;
clrscr() ;
printf("enter the values of a,b and maximum iterations \n") ;
scanf("%f%f%d",&a,&b,&n) ; x=a-(((b-a)/(f(b)-f(a)))*f(a)) ;
printf("iteration %d=%f \n",itr,x) ;
itr++ ;
while(itr<n)
{
if(f(a)*f(x)<0)
b=x ;
else
a=x ;
x=a-(((b-a)/(f(b)-f(a)))*f(a)) ;
printf("iteration %d x=%f ",itr,x) ;
if(fabs(x1-x)<err)
{
printf(" \n after %d iterations, the value of root is %f \n",itr,x) ;
break ;
}
else
itr++ ;
x1=x ;
}
if(itr==n)
printf("\n solution does not exist as iterations are not sucient") ;
getch() ;
return 0 ;
}
Bibliographie
[1]. M. Mokhtari et A. Mesbah : `Apprendre et Maîtriser MATLAB' Sprin-
ger (1998).
[2]. Chokri Bekkey et Zouhaier Helali : `Résolution numérique de l'équation
f (x) = 0', Projet Tempus, Action JEP-31147 (2003).
[3]. A. Bjorck : `Numerical Methods for Least Squares Problems'. SIAM.
Philadelphia, PA, (1996).
[4]. Najed Ksouri : `Méthodes d'approximation numérique pour le pricing
des options vanilles et asiatiques dans le modèle de Heston de volatilité sto-
chastique'. [Rapport Technique] 2007. https ://hal.inria.fr/inria-00157141v1.
[5]. Eric Goncalvès Da Silva : `Méthodes et Analyse Numériques'. Engi-
neering school. Institut Polytechnique de Grenoble, 2007, pp.99.
https ://cel.archives-ouvertes.fr/cel-00556967.
[6]. M. Gilli : `Méthodes numériques'. Département d'économétrie, Uni-
versité de Genève, version de l'ouvrage (Mars 2006).
[7]. S. Drapier et R. Fortunier : `Méthodes numériques d'approximation
et de résolution en mécanique' , École Nationale Supérieure des Mines de
Saint-Étienne 158, cours Fauriel ; 42023 Saint-Étienne Cedex2, Janvier 2015-
Version-β .
[8]. R.L. Burden and J. Douglas Faires : `Numerical Analysis', Ninth Edi-
tion, Library of Congress Control Number : 2010922639, Boston-USA (2011).
Webographie