Vous êtes sur la page 1sur 12

TP no 2 - MATLAB

Exercice 1.

1.Créez un tableau tab contenant les entiers pairs de 0 à 42, puis écrivez un
script qui parcourt le tableau et remplace chacune des valeurs par son carré.
Réponse :
>> tab = 0:2:42;
puis dans un script :
for i = 1:size(tab,2)
tab(i) = tab(i).^2;
end
La fonction size renvoie les dimensions d’une matrice. Ici tab est un tableau d’une
ligne et 22 co-lonnes, mais seule la seconde dimension (nombre de colonnes)
nous intéresse, d’où size(tab, 2) qui demande la taille de tab dans la deuxième
dimension.

Exercice 2.

Matlab est particulièrement adapté lorsque l’on veut faire des applications
numériques sur des matrices.
Voyons quelques méthodes permettant de les manipuler.
1.Définissez une matrice M = [1 2 ; 3 4] puis essayez les opérations suivantes
dans l’interpré-teur :
> 2*M+3
> M+M
> sqrt(M)
> M*M
> M .* M
> ones(4)
> ones(3, 5)
Quelle est la différence entre les opérateurs * et .* ? Que fait la fonction ones ?
Réponse : L’opérateur * désigne le produit de deux matrices (comme vous l’avez
vu en maths), tandis que .* désigne le résultat du produit terme à terme de deux
matrices de mêmes dimensions : la case (i; j) du résultat est le produit des cases
(i; j) de chacune des deux matrices de départ.
La fonction ones crée une matrice ayant les dimensions indiquées ne contenant
que des 1.
2. Comment peut-on créer facilement une matrice 54 42 ne contenant que des
7?
Réponse :
>> M = 7 * ones(54, 42);
Si l’on veut créer une matrice (ai;j) de dimensions 8 9 définie par ai;j = i + j, on peut
utiliser un script et des boucles for. Cependant dans ce cas une seule boucle ne
suffit pas, et il va falloir en utiliser deux
«imbriquées » : une première boucle qui parcourt les lignes de la matrice (les
différentes valeurs de i) et une seconde boucle qui parcourt les colonnes (les valeurs
de j).
3.En supposant que l’on ne s’intéresse qu’à une ligne i particulière de la matrice
(donc ici i est une constante dont on suppose que la valeur est définie), écrivez
une boucle for qui parcourt les différentes valeurs de j possibles (de 1 à 9 dans
notre exemple) et pour chacune définit a(i,j) = i+j.

Exercice 1.

Nous avons vu comment les scripts permettaient de demander à Matlab d’exécuter


une séquence d’ins-tructions, et comment une boucle for permettait de demander
qu’une même instruction soit répétée un certain nombre de fois (en changeant un
paramètre si l’on veut).
Nous allons maintenant voir comment on peut demander à un script de changer son
comportement en fonction de la situation, à l’aide du mot-clé if.

Définissez une fonction test(x) en recopiant le code suivant dans un script nommé
test.m :
function reponse = test(x)
if x == 42
reponse = ’C’’est vrai !’ ;
elseif x == 41
reponse = ’Presque...’ ;
else
reponse = ’C’’est faux !’ ;
end
2.Le double symbole égal et la double apostrophe dans le script sont tous les
deux importants... À votre avis à quoi servent-ils ?
Réponse : Le double symbol égal sert à tester l’égalité (et non à l’affectation,
contrairement au sim-bole égal), la double apostrophe sert à afficher une
apostrophe à l’intérieur d’une chaine de carac-tères.
\ Que renvoie la fonction si on l’appelle avec l’argument 12 ? Et avec 42 ? Et
avec 41 ? Avez-vous compris la signification des mots-clés if, elseif et else ?
Réponse : Les mots clés it, elseif et else servent à faire des disjonctions de cas
en fonction des résultats du test en argument du if. Le code juste après le if est
exécuté uniquement si la condition est vraie, le code après le elseif (qui est
facultatif et que l’on peut répéter autant de fois que l’on veut) est exécuté
uniquement si la condition après celui-ci est vraie et que les précédentes ne
l’étaient pas. Le code après le else n’est executé que si aucune des conditions le
précédent n’a été satisfaite.
\ Écrivez une fonction pair(x) qui prend en argument un entier x et qui renvoie
vrai si l’entier est pair et faux sinon.
Indication : Utilisez la fonction mod(a, b) qui renvoie la valeur de a modulo b pour
obtenir la parité de x.
Réponse :
function r=pair(x)
if mod(x,2)==0
r=’vrai’;
else
r=’faux’;
end

1
On peut également effectuer des tests un peu plus complexes :
– a ~= b signifie que a est différent de b ;
– a < b (resp. a <= b) signifie que a est inférieur (resp. inférieur ou égal) à b (ne
fonctionne que si les éléments sont comparables...) ;
– (a == b) && (a == c) signifie que les deux conditions (a == b) et (a == c) sont vraies
à la fois ;

– (a == b) || (a == c) signifie que l’une des deux conditions est vraie (pas


nécessairement les deux).

2
Réponse :
for j = 1:9
a(i,j) = i+j;
end
4.Écrivez une boucle for qui pour chaque valeur possible de i (de 1 à 8) exécute
la boucle précé-demment écrite.
Réponse :
for i = 1:8
for j = 1:9
a(i,j)=i+j;
end
end
5. Vérifiez que vous avez bien défini la matrice (ai;j) de dimensions 8 9 telle que
ai;j = i + j.
Réponse :
>> disp(a);
6.En utilisant deux boucles, écrivez un script qui calcule la somme de deux
matrices A et B, de mêmes dimensions n m.
Réponse :
for i = 1:n
for j = 1:m
C(i,j) = A(i,j) + B(i,j);
end
end
7.Si vous êtes motivé, et que vous avez bien compris le fonctionnement des deux
boucles imbri-quées, essayez d’écrire un script qui calcule le produit matriciel de
deux matrices carrées A et B de dimension n n.
Réponse :
for i = 1:n
for j = 1:n
x =0
for k = 1:n
x = x + A(i,k)*B(k,j);
end C(i,j) =
x

end
end
Graphique 2D

Traçage de courbes :

Pour afficher des courbes dans une fenêtre graphique, voir les fonctions de help graph2d. On
ne présente ici que les fonctions les plus courantes. L'utilisation d'une instruction d'affichage
graphique crée automatiquement une fenêtre graphique si aucune fenêtre n'a déjà été créée.
On peut également initialiser une fenêtre graphique en faisant appel à l’instruction figure(n)
où n est le numéro de la fenêtre. Les fenêtres sont numérotées à partir de 1.

>> help graph2d % intro. au graphisme 2D et tableau des fonctions disponibles

Courbes: plot

Exemple :

3. x=linspace(0,2*pi,30);

4. y=sin(x);

5. plot(x,y)

>> title(’Trigonométrie’) % Le titre de la figure

Atelier de Mathématiques Amel CHERIF, Taher


BENYOUSSEF
Graphiques 10

Quelques améliorations:

Un quadrillage (grille), donne plus de lisibilité au graphique. La commande grid off supprime le
quadrillage du graphique courant.

>> grid on

Les valeurs de x entre 0 et 2*pi et les valeurs de y entre -1 et 1 : axis([ 0 2*pi -1 1]) , les deux
premiers éléments caractérisent l’axe des abscisses et les deux deuxièmes caractérisent l’axe
des ordonnés.

>> axis([ 0 2*pi -1 1])

% add a second curve

>> hold on % Pour tracer plusieurs courbes sur le même graphique

\ z=cos(x)

\ plot(x,z,’c+’)

>> clf % efface la figure

Atelier de Mathématiques Amel CHERIF, Taher BENYOUSSEF


Graphiques 10

semilogx, semilogy et loglog sont semblables à plot mais permettent de faire des plots log .

Exemple 2 :

Représenter la fonction f(x)=x2 (parabole) sur [-

4,4], >> a=[-4 : 4] ; b= a.^2 ; plot(a,b)

Une diminution du pas permet d’augmenter le nombre de points et avoir une courbe
parabolique plus claire :

>> a=[-4 :0.01 : 4] ; b= a.^2 ; plot(a , b)

On peut ajouter à plot un troisième paramètre pour indiquer la couleur et le type de tracé

(continu ou discontinu) de la courbe. Ce paramètre est une chaîne formée au plus de trois

caractères.

Couleurs : y (jaune), m (violet), r (rouge), g (vert), b (bleu), w (blanc), k (noir)

Type de ligne : . o + * - -. –

Exemple :

>>x=[0 : 0.1 : 4*pi] ; y=sin(x) ; plot(x , y,'*k')

Le titre de l’axe des abscisses :

>> xlabel('x') ;

Le titre de l’axe des ordonnée :

>> ylabel('y') ;

Graphique multiple :

On peut tracer plusieurs graphiques dans la même fenêtre en utilisant l’instruction subplot
pour diviser la fenêtre en plusieurs parties.

Diviser la fenêtre en deux parties (2 x 1) :


Atelier de Mathématiques Amel CHERIF, Taher BENYOUSSEF
Graphiques 10

Exemple :

représenter les diagrammes de Bode du système linéaire ayant pour fonction de transfert : H(p) =
225/(p2 + 3.p +225) , ce qui revient à déterminer le gain (en Décibel) et la phase en fonction de
la pulsation ω.

Taper une à une les instructions suivantes suivies d’une validation :

>>w = logspace(0,3,1000); p=j*w;

>>H=225./(p.^2+3*p+225); AdB=20*log10(abs(H)); phase=angle(H)*(180/pi);

>>subplot(2,1,1), semilogx(w,AdB),grid, xlabel('w (rad/s)') , ylabel('Amplitude (dB)')

>>subplot(2,1,2), semilogx(w,phase),grid, xlabel('w(rad/s)'), ylabel('Amplitude (dB)')

subplot(m , n , p) :

divise la fenêtre graphique courante en (m x n) zones graphiques (m lignes et n colonnes) et trace


le graphique

qui suit cette instruction dans la zone de numéro p (la numérotation se fait de

gauche à droite et ligne par ligne).


Diviser la fenêtre en deux parties (1 x 2) :

Diviser la fenêtre en quatre parties (2 x 2) :

Diviser la fenêtre en quatre parties (4 x 2) :


Graphiques à 3D

>> help graph3d % introduction au graphisme 3D et tableau des fonctions disponibles

ligne dans l’espace: plot3

3. t = linspace(0, 10*pi);

4. plot3(sin(t), cos(t), t)

5. xlabel(’sin(t)’), ylabel(’cos(t)’), zlabel(’t’)

6. grid on

Construction d’un maillage dans le plan (x,y) : meshgrid

Pour la représention d’une surface f(x, y), on a besoin de connaître les triplets de coordonnées (xi,
yj, Zi,j), avec Zi,j=f(xi,yj), pour un certain nombre de points (xi, yj) où i=1, ..., N, j=1, ..., M. On
voit que Z a la structure d’une matrice {Zi,j}. Par soucis d’harmonisation, Matlab utilise
également une représentation matricielle pour les coordonnées x et y dans le plan. Matlab fournit
la fonction meshgrid pour générer les matrices {Xi,j} et {Yi,j} à partir des vecteurs {xi} et {yi}.

Exemple :

10
« clear

« x = logspace(0, 2, 3)

« y = linspace(0, 100, 5) % meshgrid fournit les matrices X et Y à partir des vecteurs x et y :

« [X Y] = meshgrid(x, y) % La maille (4, 2) est donnee par :

« P_4_2 = [X(4,2) ; Y(4,2)]

grillage en perspective: mesh

5. clf

6. x = linspace(-3, 3, 30);

7. y = linspace(-3, 3, 30);

8. [X Y] = meshgrid(x,y);

>> mesh(X, Y, Z) % grillage 3D

>> meshc(X, Y, Z) % grillage 3D avec les contours sur le plan de base

Vous aimerez peut-être aussi