École des Mines de Nancy Année 2015-2016
Denis Villemonais, denis.villemonais@univ-lorraine.fr
FI-MGP 1A – Mathématiques
Initiation à Matlab II
1 Expressions symboliques
Nous avons appris à définir et manipuler des fonctions symboliques à l’aide de matlab. Nous avons no-
tamment vu comment calculer des dérivées, des intégrales et résoudre des équations différentielles. Nous
allons voir à présent comment faire du calcul symbolique sur les matrices.
Activité 1. Travailler avec des expressions symboliques. Matlab peut, à condition de le lui demander,
effectuer des calculs explicites, comme le calcul de déterminant et d’inverse par exemple.
Code :
>> A=[1/2, 2;1/3,4]
>> B=sym(A)
>> det(A)
>> det(B)
>> A^(-1)
>> B^(-1)
>> B(2,1)=1/4
Commentaires :
Aest une matrice numérique,
Best une matrice symbolique obtenue à partir de
A,
Matlab effectuera les calculs de manière numé-
rique sur Aet de manière symbolique sur B,
Il est possible de modifier les coordonnées de B
une à une.
One peut également exploiter le calcul symbolique pour effectuer des calculs trigonométriques.
Code :
>> p=sym(pi)
>> sin(p/3)
>> exp(i*2*p/3)
Commentaires :
On commence ici par définir la variable pcomme
la version symbolique de π.
Remarque 1.Matlab possède des fonctions de calcul formel très avancées, dont l’étendue dépasse le
cadre de ce cours. Vous pouvez rechercher de la documentation dans l’aide ou en ligne à ce sujet. Remar-
quez que vous trouverez parfois la mention ’Use only in the MuPAD Notebook Interface, sachez alors que
l’outil MuPAD Notebook est accessible via l’onglet APPS en haut de la fenêtre Matlab.
Activité 2. Passer d’une expression symbolique à une expression numérique. Nous avons appris à dé-
finir et manipuler des expressions symboliques à l’aide de Matlab. Nous avons notamment vu comment
calculer des dérivées, des intégrales et résoudre des équations différentielles. A l’aide de la fonction vpa,
il est possible d’obtenir l’estimation numérique d’une expression symbolique ou de la valeur d’une fonc-
tion en un point donné.
1
Code :
>> syms x
>> f(x)=sin(5*x)
>> f(0.43)
>> vpa(f(0.43))
>> vpa(f(0.43),4)
>> h(x)=int(f(x)^(1/2),x)
>> h(3.5)
>> vpa(h(3.5))
Notons qu’il est préférable d’utiliser la fonction vpa lorsque Matlab ne permet pas de trouver des solu-
tions exactes à des équations ordinaires. Dans l’exemple ci-dessous, Matlab semble renvoyer un résultat
exact, or il ne s’agit que d’une approximation écrite sous la forme de fraction. Dans ce cas, il est préférable
d’en obtenir une écriture décimale ou de forcer Matlab à faire un calcul symbolique (cela ne fonctionne
pas toujours).
Code :
>> syms x
>> y = solve(x^2 - x + sin(1) == 0, x)
>> vpa(y)
>> a=sym(1)
>> y = solve(x^2 - x + sin(a) == 0, x)
2 Les fonctions Matlab
La méthode présentée ci-dessus a ses limites. Par exemple, si Matlab ne peut calculer une primitive,
alors il refusera d’estimer sa valeur à l’aide de la méthode vpa (ce qui nous aurait permis par exemple de
calculer l’intégrale de la fonction). Dans ces cas, il faudra demander explicitement à Matlab de calculer
numériquement l’intégrale d’une fonction, sans passer par l’identification d’une primitive.
Mais pour cela, nous allons devoir utiliser les fonctions Matlab. Ce sont des fonctions définies par l’utili-
sateur et que le logiciel va traîter de manière numérique. La contrepartie étant alors la perte des possibi-
lités de calcul symbolique de Matlab. Nous allons voir trois méthodes pour définir des fonctions Matlab.
Activité 3. Définition d’une fonction simple. On peut définir des fonctions Matlab en une ligne à l’aide
de @(x) expression(x). L’idée est de dire à Matlab que la fonction associe à x(qui correspond au @(x))
l’expression en xqui suit. Par exemple, le code suivant permet de définir la fonction f(x)=ex2(lnx)2.
Code :
>> f = @(x) exp(-x^2)*log(x)^2
>> f(2)
Activité 4. Définition d’une fonction simple à partir d’une fonction symbolique. Si nous avons une
fonction symbolique (obtenue par exemple comme solution d’une équation différentielle), alors il est
possible de la convertir en fonction Matlab à l’aide de la méthode matlabFunction.
2
Code :
>> syms x, y
>> g(x, y)=exp(-x^2)*log(y)^2
>> h = matlabFunction(g)
>> h(2,3)
Activité 5. Définition d’une fonction plus complexe à l’aide de l’éditeur. Dans des cas plus complexes,
il n’est pas possible de créer des fonctions en une seule ligne. Dans cette activité, nous allons créer la
fonction
k(x)=
0 si x< −1,
ln(2+x) si 1x1,
sin(x) si 1 <x.
Pour cela, ouvrir l’éditeur de Matlab (en cliquant sur le bouton New Script en haut à gauche de la fe-
nêtre).
Tapez le code suivant puis enregistrez votre fichier avec le même nom que la fonction (ici k.m).
Code :
function y=k(x)
if x < -1
y=0;
elseif (-1 <= x) & (x<=1)
y=log(2+x);
else
y=sin(x);
end
end
Commentaires :
BN’oubliez pas les ’ ;’ ! sinon Mat-
lab affichera le s calculs intermédiaires
lorsque vous appellerez la fonction k...
Remarque 2.Il est possible de créer des fonctions dans l’éditeur qui ne renvoient aucun argument, qui
en renvoient plusieurs, qui créent des graphes, etc... Il est également possible d’utiliser des boucles for
et des portes conditionnelles du type while. Comme leur apprentissage sort du cadre de ce cours de
mathématiques, nous n’en étudierons pas l’usage. Cependant, vous pouvez vous reporter à l’aide ou aux
nombreuses documentations en ligne pour découvrir ces fonctionnalités.
La fonction kainsi définie, même si elle renvoie un argument, n’a pas le même statut que celle définie
par @(x) .... Pour obtenir une fonction Matlab, que nous appellerons k0, on peut procéder de la façon
suivante.
Code :
>> k0=@(x) k(x).
Activité 6. Pour aller un peu plus loin... Il peut être utile, étant donnée une fonction à plusieurs variables,
de la transformer en une fonction à une variable. Dans l’exemple suivant, on considère la fonction à deux
variables f(x,y)=xyet on veut construire les fonctions f1(x)=x,f2(x)=x2et f3(x)=x3.
3
Code :
>> f=@(x,y) x^y
>> f1=@(x) f(x,1)
>> f2=@(x) f(x,2)
>> f3=@(x) f(x,3)
3 Calcul numérique d’intégrale et problème de vectorisation
Activité 7. Calcul numérique de l’intégrale d’une fonction simple. Une fois donnée une fonction Matlab,
il est possible d’en calculer numériquement l’intégrale à l’aide de la méthode integral.
Code :
>> f=@(x) exp(x)./(1+x.^2)
>> integral(f,-1,1)
>> integral(f,-Inf,0)
>> integral(f,0,Inf)
Commentaires :
La ligne de commande integral(f,a,b) cal-
cule l’intégrale de fentre aet b,
Nous utilisons ici les opération ./ et .^ car il
est nécessaire de pouvoir appliquer, terme à
terme, la fonction fà une matrice. Voir l’ac-
tivité suivante pour plus d’informations sur
le sujet.
Attention ! Il ne s’agit que d’une approximation, comme le montre l’exemple suivant...
Code :
>> h=@(x) log(x)
>> integral(h,0,1)
>> format long
>> integral(h,0,1)
>> syms x
>> H(x)=int(log(x))
>> H(1)-H(0)
Activité 8. Vectorisation d’une fonction. En général, Matlab demande de travailler avec des fonctions
qu’il peut appliquer terme à terme à des matrices. Par exemple, si on définit la fonction f=@(x) x^2, alors
la commande f(A) renverra une erreur si la matrice An’est pas carrée et A2sinon. Or, pour pouvoir
calculer l’intégrale de la fonction x2avec la méthode integral, il faudrait que f(A) renvoie une matrice
de la même taille que A, dont chaque coefficient est mis au carré. Pour arriver à ce comportement, on
posera f=@(x) x.^2. On dit alors que la fonction est vectorisée (les fonctions usuelles de matlab sont
vectorisées).
4
Code :
>> f=@(x) x^2
>> A=[1,1;1,1]
>> B=[1,2]
>> f(A)
>> f(B)
>> integral(f,0,1)
>> clear f
>> f=@(x) x.^2
>> f(A)
>> f(B)
>> integral(f,0,1)
Il peut être parfois difficile de vectoriser une fonction. Par exemple, la fonction kdéfinie plus haut n’est
pas vectorisée par défaut et c’est un travail difficile de la vectoriser. Afin de pallier cette difficulté, Matlab
propose la méthode arrayfun(f,A) qui applique la fonction fà chaque élément de la matrice A.
Code :
>> f=@(x) x^2
>> A=[1,1;1,1]
>> B=[1,2]
>> arrayfun(f,A)
>> arrayfun(f,B)
>> fv=@(x) arrayfun(f,x)
>> fv(A)
>> fv(B)
>> integral(fv,0,1)
Terminons cette activité en essayant de vectoriser la fonction kdéfinie plus haut.
Code :
>> k([-2,-1,1])
>> [k(-2),k(-1),k(1)]
>> integral(k,-2,1)
>> k0=@(x) k(x)
>> k0([-2,-1,1])
>> [k0(-2),k0(-1),k0(1)]
>> integral(k0,-2,1)
>> k1=@(x) arrayfun(k,x)
>> k1([-2,-1,1])
>> kv=@(x) arrayfun(k0,x)
>> kv([-2,-1,1])
>> [kv(-2),kv(-1),kv(1)]
>> integral(kv,-2,1)
Commentaires :
On observe que kn’est pas vectorisée,
De plus, comme nous l’avons mentionné, k
n’a pas un statut de fonction Matlab, ce qui
provoque des erreurs.
La fonction k0=@(x) k(x) n’est pas vectori-
sée non plus,
En revanche, Matlab ne revoie pas d’erreur...
C’est un piège, car integral(k0,-1,1) ne
renvoie pas le bon résultat ! Comme on le vé-
rifie par la suite.
BSeules les fonctions Matlab peuvent être
vectorisées, donc il faut passer par k0 pour
définir kv.
4 Les graphes de fonction
Activité 9. Tracé d’une fonction à une variable. Pour tracer une fonction, on peut utiliser la méthode
ezplot. Attention ! La fonction doit être vectorisée, sinon cela peut poser des difficultés...
5
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !