Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP2 Matlab Correction

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

Introduction au calcul scientifique avec Matlab

TP2

Correction

Exercice 1.

Observer l'effet des instructions suivantes.

>> x=rand(1,5) => crée un vecteur ligne de 5 termes de valeurs aléatoires comprises entre 0
et 1

>> mean(x) => calcule la valeur moyenne des termes du vecteur x


5

>> 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)

>> sort(A') => voir explication sort(A)

>> 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

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020
>> diff(A) => retourne une matrice 2x3 don’t chaque colonne correspond au vecteur
difference de la colonne de A: [A(2:n,:) - A(1:n-1,:)]

>> 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

Exemple pour n=10 :

>> 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

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020
>> sortrows(X')'

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 :

1. >> y= [3.2; 4.8;3.3; 3.2; 3.1; 4.2; 3.2; 3.3]

2. - Créer un fichier moyenne.m


- Y mettre le code suivant :
-------------------------------------------------------------------------------------------------------------
function [yn] = moyenne(n)
%MOYENNE calcule le terme n de la suite des moyennes mobiles du vecteur y
% vecteur y
y= [3.2; 4.8;3.3; 3.2; 3.1; 4.2; 3.2; 3.3];

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 :

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020
Construisez, à l’aide des opérateurs logiques, la fonction find.m qui a pour argument d’entrée
un scalaire k et qui permet de retourner les termes égaux à k ainsi que leur position.

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 »

- Créer un fichier find_A.m


- Y mettre le code suivant :

-------------------------------------------------------------------------------------------------------------
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

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020
3

>> [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.

Reprenez le vecteur y de l’exercice 3.


1. Ecrire une fonction existe.m qui a comme argument un vecteur quelconque z et un
scalaire k et qui permet de retourner la réponse à la question suivante : existe-t-il une
coordonnée du vecteur z inférieur à k.
2. Utiliser la fonction existe.m pour répondre à la question suivante : existe-t-il une
coordonnée du vecteur y inférieure à 3.3

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 :

Où σ8 est la racine carrée de la variance d'échantillonnage.

Réponse :

1. - Créer un fichier existe.m


- Y mettre le code suivant :
-------------------------------------------------------------------------------------------------------------
function [r] = existe(z,k)
%EXISTE permet de répondre à la question existe-t-il une coordonnée du vecteur z inférieur
àk
n=size(z);
r='non';
for i=1:n

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020
if z(i) < k
r = 'oui';
end
end
end
-------------------------------------------------------------------------------------------------------------

2. Exemple pour z=y, k=3.3 et k=1 :

>> 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

FEKAK Fatima-Ezzahra, ENSA, Fès


CP1, 2019-2020

Vous aimerez peut-être aussi