TP2 Matlab Correction
TP2 Matlab Correction
TP2 Matlab Correction
TP2
Correction
Exercice 1.
>> x=rand(1,5) => crée un vecteur ligne de 5 termes de valeurs aléatoires comprises entre 0
et 1
>> std(x) => calcule l’écart type des termes du vecteur x: std(x) =
√ ∑ ( xi−mean( x ))2
i=1
N
>> median(x) => retourne la valeur médiane des termes de x: si x1<x2<x3<x4<x5 alors x3 est la
valeur médiane
>> sort(x) => trie les termes de x du plus petit au plus grand
>> A=rand(3) => crée une matrice 3x3 par des valeurs aléatoires comprises entre 0 et 1
>> sort(A) => trie chaque colonne de la matrice A de manière ascendante (du plus petit au
plus grand)
>> [B, I]=sort(A) => retourne dans la matrice B la matrice A triée, et la matrice I contient des
indices qui spécifie comment le terme ij de A a été réarrangé dans B : for j = 1:n, B(:,j) =
A(I(:,j),j)
>> max(A) => retourne un vecteur qui contient la valeur maximum de chaque colonne de la
matrice A
>> max(A') => retourne un vecteur qui contient la valeur maximum de chaque ligne de la
matrice A
>> max(max(A)) => retourne la valeur maximum de tous les termes de la matrice A
>> sum(A) => retourne un vecteur contenant la somme des termes de chaque colonne de la
matrice A
>> cumsum(A) => retourne une matrice de la même taille que A où chaque colonne est une
somme cumulative de la colonne de A : si B= cumsum(A), alors pour chaque colonne j ;
B(i+1)j = A(i+1)j + Aij pour i=1, 2
>> prod(A) => rerourne un vecteur contenant le produit des termes de chaque colonne de A
>> D=A([1,2],1:3) => D contient la sous matrice de A contenant les lignes 1 et 2 et les 3
colonnes
>> sum(D,1) => retourne un vecteur colonne dont les termes sont la somme des termes de
chaque colonne de D
>> sum(D,2) => retourne un vecteur ligne dont les termes sont la somme des termes de
chaque ligne de D
Exercice 2.
Soit X une matrice 2xn contenant les coordonnées de n points du plan. Comment faire pour
obtenir une matrice où les points sont ordonnés par ordre croissant des abscisses ? (sans
utiliser les boucles)
Réponse :
>> B = sortrows(X')' => la matrice B à la même dimension que A et contient les coordonnées
des n points avec des abscisses croisants
En effet, la fonction sortarrows permet de trier les colonnes d’une matrice comme un groupe.
Vu qu’on souhaite trier les lignes de A alors en fait >> sortrows(A') le résultat est une matrice
nx2. Enfin, transpose le résultat pour obtenir une matrice 2xn
>> X = rand(2,10)
X=
0.0971 0.6948 0.9502 0.4387 0.7655 0.1869 0.4456 0.7094 0.2760 0.6551
0.8235 0.3171 0.0344 0.3816 0.7952 0.4898 0.6463 0.7547 0.6797 0.1626
>> sortrows(X')
ans =
0.0971 0.8235
0.1869 0.4898
0.2760 0.6797
0.4387 0.3816
0.4456 0.6463
0.6551 0.1626
0.6948 0.3171
0.7094 0.7547
0.7655 0.7952
0.9502 0.0344
ans =
0.0971 0.1869 0.2760 0.4387 0.4456 0.6551 0.6948 0.7094 0.7655 0.9502
0.8235 0.4898 0.6797 0.3816 0.6463 0.1626 0.3171 0.7547 0.7952 0.0344
Remarque : Pour trouver la fonction « sortarrows » il faut regarder les fonctions qui ont une
relation avec la fonction principale qui est « sort ». Ces fonctions sont toujours proposer par
le help de la fonction principale
Exercice 3.
1. Soit le vecteur de dimension 8 de composantes : 3.2; 4.8; 3.3; 3.2; 3.1; 4.2; 3.2; 3.3
Construisez le vecteur y = (yi)i=1;…;8 correspondant.
2. Construisez, à l'aide des fonctions vectorielles (sans utiliser les boucles), une fonction
moyenne.m qui a comme argument d’entrée n et qui permet de calculer la suite des
moyennes mobiles:
3. Donner la valeur de
Réponse :
yn = sum(y(1:n))/n;
end
-------------------------------------------------------------------------------------------------------------
3. y 8 = sum(y(1:8)) = 3.5375
Remarque : étant donné que y contient 8 terme alors y 8 est finalement la moyenne de y,
donc on peut aussi retrouver le même résultat en faisant >> y 8=mean(y)
Exercice 4.
Soit la matrice A :
Réponse :
Etant donné de « find » est déjà une fonction de matlab, et afin d’éviter tout conflit, on crée
une fonction appelée « find_A »
-------------------------------------------------------------------------------------------------------------
function [I,J] = find_A(k)
%FIND_A retourne les positions ij des termes égaux à k de la matrice A
% I est le vecteur des indices i et J est le vecteur des indices j
% la matrice A
A=[1 2 3; 2 3 1 ; 3 1 2];
%initialisation
I=zeros(3,1);
J=zeros(3,1);
e=1;
l=1;
for i=1:3
for j=1:3
if A(i,j)==k
I(e)= i;
J(l)= j;
e=e+1;
l=l+1;
end
end
end
-------------------------------------------------------------------------------------------------------------
Pour vérifier que ma fonction est juste, je vais comparer son résultat au résultat de la
fonction « find » de Matlab.
Exemple pour k= 2:
>> [I,J]=find_A(2)
I=
1
2
3
J=
2
1
>> [J,I]=find(A==2)
J=
2
1
3
I=
1
2
3
On retrouve bien les mêmes positions des termes égaux à 2, la seule différence est que le
premier argument de ma fonction find_A est le vecteur des indices i et le deuxième argument
et celui des indices j. Contrairement à la fonction « find » de Matlab pour laquelle le premier
argument est le vecteur des indices j et le deuxième est celui des indices i.
Remarque : Il faut toujours bien lire les notices des fonctions Matlab pour mieux comprendre
et bien utiliser les arguments d’entrée et de sortie de ces fonctions.
Exercice 5.
3. Ecrire un script qui permet de construire un vecteur logique z tel que la ième
coordonnée de ce vecteur sera 1 si la ième coordonnée du vecteur y est à l'extérieur
de l'intervalle :
Réponse :
>> r=existe(y,3.3)
r=
'oui'
>> r=existe(y,1)
r=
'non'
3. –Créer un fichier script appelé ici logic.m
- Y mettre le code suivant :
-------------------------------------------------------------------------------------------------------------
%initialisation des variables
y= [3.2; 4.8;3.3; 3.2; 3.1; 4.2; 3.2; 3.3];
n= size(y);
z = zeros(n);
% la racine carré de la variance est égale à l'écart type
sigma = std(y);
% la moyenne de y
ym = mean(y) ;
% les valeurs de l'intervale
inf = ym-sigma;
sup = ym + sigma;
for i=1:n
if (inf <= y(i)) && (y(i) <= sup)
z(i) = 1;
end
end
-------------------------------------------------------------------------------------------------------------
En exécutant logic dans la console Matlab et en affichant z, on obtient :
>> logic
>> z
z=
1
0
1
1
1
0
1
1