Académique Documents
Professionnel Documents
Culture Documents
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.
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 ;
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.
Courbes: plot
Exemple :
3. x=linspace(0,2*pi,30);
4. y=sin(x);
5. plot(x,y)
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.
\ z=cos(x)
\ plot(x,z,’c+’)
semilogx, semilogy et loglog sont semblables à plot mais permettent de faire des plots log .
Exemple 2 :
Une diminution du pas permet d’augmenter le nombre de points et avoir une courbe
parabolique plus claire :
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.
Type de ligne : . o + * - -. –
Exemple :
>> xlabel('x') ;
>> 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.
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 ω.
subplot(m , n , p) :
qui suit cette instruction dans la zone de numéro p (la numérotation se fait de
3. t = linspace(0, 10*pi);
4. plot3(sin(t), cos(t), t)
6. grid on
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)
5. clf
6. x = linspace(-3, 3, 30);
7. y = linspace(-3, 3, 30);
8. [X Y] = meshgrid(x,y);