TP : Atelier Mathématique ISET Nabeul
Institut Supérieur des Etudes Technologiques de Nabeul
Filière : 1ére Année Licence, Génie Electrique
Matière : Atelier Mathématique
Travaux Pratiques N°05
Calcul numérique avec MATLAB
Objectifs :
L'objectif de ce TP est de présenter brièvement des routines de calcul numérique fournies
dans la version de base de MATLAB.
Savoir rechercher des zéros d’une fonction ;
Graphe de la dérivée d’une fonction f ’(x) ;
Calcul d'intégrale ;
Calculer le minimum d’une fonction.
1. Recherche des zéros d'une fonction
Problème : On cherche x0 tel que f(x0)=0.
La fonction fzero permet de résoudre ce problème. Il faut fournir d'une part la fonction
f elle-même, et d'autre part une estimation de f.
L'efficacité de l'algorithme est comme toujours dépendante de la valeur estimée choisie. La
fonction f peut-être définie par une directive inline ou bien écrite dans un fichier.
Exemple:
Par exemple on cherche le zéro de : Une approche graphique permet souvent de trouver une
estimation de x0 . La figure suivante montre ainsi que les fonctions x x et x cos(x) se
coupent en un point sur [-pi , pi] . Une valeur raisonnable pour l'estimation de x0 est par
exemple 0.
Imen AZZOUZ Page 1
TP : Atelier Mathématique ISET Nabeul
Estimation de x0 par approche graphique
On peut donc écrire, en utilisant inline :
1 >> f = inline('x-cos(x)')
2 >> fzero(f,0)
4 Zero found in the interval: [-0.9051, 0.9051].
5 ans =
6 0.7391
On remarquera que la variable f envoyée à la fonction fzero est elle-même une fonction. Toutes
les routines de calcul numérique de MATLAB nécessitant l'écriture d'une fonction par
l'utilisateur fonctionnent selon ce principe.
On peut également écrire la fonction dans un fichier f.m :
1 function y = f(x)
3 y = x-cos(x);
et ensuite on écrira :
1 >> fzero('f',0)
2 Zero found in the interval: [-0.9051, 0.9051].
3 ans =
4 0.7391
Imen AZZOUZ Page 2
TP : Atelier Mathématique ISET Nabeul
Attention:
On remarquera ici que le symbole f est mis entre quotes. Cela vient du fait qu'ici, la définition
de la fonction f est faite dans un fichier. Il est préférable en général de définir les fonctions
dans des fichiers car cela offre une plus grande souplesse.
Un dernier point important : comment faire lorsque la définition de la fonction dépend en plus
d'un paramètre ?
Par exemple, on veut chercher le zéro de la fonction où m est un paramètre susceptible de
varier entre deux exécutions. On ne peut pas rajouter un argument à la définition de notre
fonction f car fzero impose que f ne dépende que d'une variable. Une solution serait
d'affecter m dans le corps de la fonction mais elle est mauvaise car :
lorsque l'on veut changer la valeur de m il faut modifier la fonction,
cette fonction sera peut-être appelée des dizaines voire des centaines de fois par fzero, et
on répétera à chaque fois la même instruction d'affectation de m.
Exemple :
1 function y = f(x)
3 global m
4 y = x-cos(m*x);
et on cherchera son zéro en écrivant :
1 >> global m
2 >> m = 1;
3 >> fzero(f,0)
Notons enfin que l'on aura tout intérêt à mettre les trois lignes ci-dessus dans un fichier de
commandes, et à lancer ce fichier de commandes en bloc.
2. Minimum d’une fonction f(x)
Fonction :
Fmin (version 4.2.)
Fminbnd (version 6.5.)
Exemple :
Imen AZZOUZ Page 3
TP : Atelier Mathématique ISET Nabeul
Il faut commencer par créer le fichier .m associé à cette fonction :
Dessinons maintenant le graphe de cette fonction :
>> fplot( 'f1' , [ -10 10 ] )
>> grid on
Cherchons le minimum de cette fonction dans l’intervalle 0 à 5 :
>> fmin ( 'f1' , 0 , 5 )
ans =
2.1177
>> f1(ans)
ans =
0.0903
Travail demandé 2 :
Soit les fonctions :
5
𝑓1 𝑡 = cos 2𝑡 + 1 − 3𝑡 +
𝑡2
Imen AZZOUZ Page 4
TP : Atelier Mathématique ISET Nabeul
5𝑡
𝑓2 𝑡 = sin t 2 + 3𝑡 + 4𝑡 2 +
𝑡+3
1. Présenter graphiquement les fonctions dans deux courbes séparées.
2. Trouver les racines des fonctions.
3. Déterminer les minimums des fonctions.
3. Calcul d'intégrale
Fonctions :
quad : algorithme de Simpson
quad8 : algorithme de Newton-Cote (version 4.2.)
quadl (version 6.5.)
Exemple :
Il faut commencer par créer le fichier .m de la fonction à intégrer :
>> fplot( 'f4', [ 0 1 ])
>> grid on
Imen AZZOUZ Page 5
TP : Atelier Mathématique ISET Nabeul
>> quad( 'f4' , 0 , 1 ) >> format long e
ans = >> quad( 'f4' , 0 , 1 )
3.1416 ans =
3.141592502458707e+000
La valeur exacte de cette intégrale est pi.
>> pi
ans =
3.141592653589793e+000
Il y a un petit écart ...
Améliorons la précision avec une tolérance de calcul de 1e-10
>> quad( 'f4' , 0 , 1 , 1e-10 )
ans =
3.141592653589792e+000
... ce qui est beaucoup mieux !
>> quad8( 'f4' , 0 , 1 , 1e-10)
ans =
3.141592653589793e+000
Imen AZZOUZ Page 6
TP : Atelier Mathématique ISET Nabeul
4. Graphe de la dérivée d’une fonction f ’(x)
Prenons l'exemple suivant :
Commençons par créer le fichier .m de la fonction :
>> [ x y ] = fplot ( 'f2' , [ 0 2*pi Une approximation de la dérivée
]) est donnée par :
x= >> dy = diff(y)./diff(x)
0 dy =
0.0126 -0.0276
0.0251 -0.0804
… -0.1292
6.2455 …
6.2643 0.1370
6.2832 0.0438
y= >> plot (x , dy)
0.5000 ??? Error using ==> plot
0.4997 Vectors must be the same
lengths.
0.4986
>> length(x)
…
ans =
0.4966
307
Imen AZZOUZ Page 7
TP : Atelier Mathématique ISET Nabeul
0.4992 >> length(dy)
0.5000 ans =
306
Problème !
Le vecteur dy a un élément de moins que le vecteur x, ce que n'apprécie pas la fonction plot.
Nous allons contourner la difficulté en ignorant le dernier élément du vecteur x :
>> plot ( x (1 : length(x)-1 , : ) , dy , '. ')
>> grid on
Comparons avec la dérivée exacte (couleur bleue) :
>> hold on
>> fplot ( 'cos(x) - 1.5*sin(3*x) - cos(5*x)' , [ 0 2*pi ] , 'b.' )
En vert, la fonction f2(x) :
>> fplot ( 'f2' , [ 0 2*pi ] , 'g.' )
Imen AZZOUZ Page 8
TP : Atelier Mathématique ISET Nabeul
Travail demandé :
Soit la fonction suivante :
1
𝑔 𝑥 = 𝑥 2 + 4 sin 𝑥 +
𝑋+2
1. Tracer le graphe de cette fonction
2. Déterminer les zéros de cette fonction
Soit la fonction suivante :
1
𝑥 = 𝑥2 +
𝑥2 + 2
a- Tracer le graphe de cette fonction
b- Calculer le dérivé de cette fonction entre [1 5]
c- Calculer l’intégrale entre [0 3] de cette fonction
Imen AZZOUZ Page 9