Telechargé par ronisto19

EXERCICES MATLAB

publicité
EXERCICES MATLAB (TP TRAITEMENT DU SIGNAL)
Université Saad Dahlab de Blida
Facultés des sciences de l’ingénieur
Département d’électronique
Exercice Matlab
(Test TP introduction à la théorie et traitement du signal S5 2010-2011)
Licence TISE, ATM ,
Exercice 1
Sur un ensemble de notes entre 0 et 20, écrire un programme Matlab qui permet
de:
1- calculer le nombre de notes supérieures ou égales à 10,
2- calculer le nombre de notes supérieures à la moyenne des notes,
Le programme principal doit contenir deux fonctions Matlab qui réalisent les
deux opérations 1 et 2 citées ci-dessus. On rappelle que les notes comprises
entre 0 et 20 doivent être lu à partir du clavier.
Les variables de ce programme sont données par :
1- le vecteur de notes : NOTE,
2- le nombre de notes : TAILLE,
3- la somme des notes : SOM ;
4- la moyenne des notes : MOY ;
5- le compteur de notes supérieures ou égales à 10 : C10 ;
6- le compteur de notes supérieures à MOY : CMOY ;
7- le compteur de notes dans le vecteur : i
Solution
---------------programme principal
clear all
clc
% Demander à l'utilisateur de donner le nombre de notes
fprintf('\n-------------------------------\n');
TAILLE=input(' donner le nombre de notes: ');
% Créer un vecteur (rempli de zeros)
NOTE= zeros(1,TAILLE);
%Demander à l'utilisateur de donner les notes
for i=1:TAILLE
fprintf(' donner la %d ème note: ',i)
NOTE(i)=input(' ');
end
%calculer le nombre de notes > 10
C10 = notes_sup_10(NOTE);
fprintf('le nombre de notes>=10 est: %d \n', C10);
%calculer le nombre de notes > moyenne
[MOY,CMOY] = notes_sup_moy(NOTE);
fprintf('la moyenne des notes est: %.2f \n', MOY);
fprintf('le nombre de notes > moyenne est: %d \n', CMOY);
fprintf('\n-------------------------------\n');
-----------------------------notes_sup.m--------------------------function C10=notes_sup_10(NOTE)
TAILLE=size(NOTE,2); % ou bien length(notes)
% calcul
C10=0;
le nombre de notes >=10
for i=1:TAILLE
if(NOTE(i)>=10)
C10=C10+1;
end
end
--------------notes_sup_moy.m
function [MOY,CMOY] = notes_sup_moy(NOTE)
TAILLE=size(NOTE,2);
% calcul la moyenne des notes
MOY = sum(NOTE)/TAILLE;
% calcul
CMOY=0;
le nombre de notes > moyenne
for i=1:TAILLE
if(NOTE(i)>MOY)
CMOY=CMOY+1;
end
end
Exercice 2 :
Soit
Ecrire
un programme
(dans un fichier nommé prog.m) qui trace le signal y(t)
dans l’intervalle [-4 , +4]
avec un pas
de
.
Ecrire sur la figure du tracé de y(t) les labels "x" et "y" des axes x et
y
et dans le titre
" y=sin x si x<=0 et sin 4x si x>0 "
Ecrire une fonction posfunc (dans un fichier posfunc.m) qui renvoi les valeurs
positives du signal y(t).
Tracer sur la même fenêtre le tracé du résultat de cette fonction avec une
couleur différente.
Solution :
--------programme principal
clc
clear all
% echo on pour afficher le texte suivant en commentaire
% dans la fenetre de commande lors de l'execution du programme
echo on;
%------------------------------%génération de sin( kx )
%y=sin x si x <= 0 et sin 4x autre
%---------------------------------echo off;
x=-4*pi:pi/100:4*pi;
pas=pi/100;
x1=-4*pi:pas:0;
y1 = sin(x1);
x2=pas:pi/100:4*pi;
y2 = sin(4*x2);
x=[x1 x2];
y=[y1 y2];
yy = sin(x).*(x<=0) + sin(4*x).*(x>0);
%test logique
clf;
subplot(2,1,1)
plot([x1 x2],[yy]);
xlabel('x');
ylabel('y');
title('y=sin x si x<=0 et sin 4x si x>0 ');
grid;
hold on;
y=posfunc(yy);
subplot(2,1,2)
plot([x1 x2],[y],'r');
----posfunc.m
function z=posfunc(y)
n=length(y);
z=zeros(n,1); %créer un vecteur ligne ayant les même dimension que y
for i=1:n
if(y(i)>0)
z(i)=y(i);
end
end
Exercice 2 :
Soit la matrice A suivante :
A=[ 10 12 14 9 10;
13 11 10 10 12;
11 10 9 8 11];
Cette matrice représente les notes obtenues par trois étudiants dans 5 modules
différents. On rappelle que ces 5 modules ont le même coefficient.
On demande d’écrire un programma Matlab principal qui utilise trois fonctions
Matlab et qui réalisent les opérations suivantes :
1ère fonction : permet de calculer et afficher la moyenne de chacun des
étudiants.
2ème fonction : permet de calculer et afficher la moyenne des trois étudiants
dans chaque module,
3ème fonction : permet de calculer et afficher le nombre de notes supérieurs
ou égales à 10 pour chacun des
étudiants.
Solution:
--------programme principale
clear all
clc
%les colonnes de cette matrice representent les notes de 3 étudiants (lignes)
A=[ 10 12 14 9 10;
13 11 10 10 12;
11 10 9 8 11];
%calculer et afficher la moyenne de chacun des etudiants
calc_moy(A);
%calculer et afficher la moyenne des trois etudiants dans chaque module
calc_moy_module(A);
% calculer et afficher le nombre de notes > 10 pour chaque etudiant
calc_sup_10(A);
-----------calc_moy.m
%calcul de la moyenne du i eme étudiant
function calc_moy(A)
% le nombre de modules
nb=size(A,2);
% le nombre d'étudiants
nb_etudiant= size(A,1);
moy =zeros(nb_etudiant,1); % creer un vecteur pour stocker les moyennes
fprintf('\n---------- Moyennes des étudiants ------------\n');
for i=1:nb_etudiant
moy(i) = sum(A(i,:)) / nb;
fprintf('la moyenne de l''etudiant %d: %.2f\n',i, moy(i));
end
% il est possible de calculer la moyenne de façon vectorielle
% pour calculer la moyenne selon les lignes
% moy= mean(A,2)
---------------calc_moy_module.m
function calc_moy_module(A)
% dans ce cas la moyenne est calculée selon les colonnes
% le nombre de modules
nb=size(A,2);
% le nombre d'étudiants
nb_etudiant= size(A,1);
moy =zeros(nb_etudiant,1); % creer un vecteur pour stocker les moyennes dans
chaque module
fprintf('\n----------Moyennes des étudiants dans chaque module----- ---\n');
for i=1:nb
moy(i) = sum(A(:,i)) / nb_etudiant;
fprintf('la moyenne des étudiants dans le module %d: %.2f\n',i, moy(i));
end
% il est possible de calculer la moyenne de façon vectorielle
% pour calculer la moyenne selon les lignes
% moy= mean(A,1)
--------------------- calc_sup.m
function calc_sup_10(A)
% le nombre de modules
nb=size(A,2);
% le nombre d'étudiants
nb_etudiant= size(A,1);
nbsup =zeros(nb_etudiant,1); % creer vecteur pour stocker le nombre de note
>10
for i=1:nb_etudiant
for j=1:nb
if(A(i,j)>=10)
nbsup(i)=nbsup(i)+1;
end
end
end
fprintf('\n---------Nombre de notes >=10 pour chaque étudiant -------\n')
for i=1:size(A,1)
fprintf('l''étudiant %d a obtenu %d notes >=10 \n',j,nbsup(i));
end
Téléchargement