Vous êtes sur la page 1sur 20

Corrigé TP1

November 24, 2021

1 TP1: Exercices d’initiation à Matlab


1.1 Exercice1 (Vecteurs et Courbes)
π
a) Définir la variable x = 4, et calculer y1 = sin(x) et y2 = cos(x), puis z = tan(x) à partir de
y1 et y2 .

[2]: x=pi/4
y1=sin(x)
y2=cos(x)
z=y1/y2

x =

0.7854

y1 =

0.7071

y2 =

0.7071

z =

1.0000

b) Définir la variable x = [ π6 , π4 , π3 ], et calculer y1 = sin(x) et y2 = cos(x).


Calculer alors z = tan(x) en utilisant exclusivement les vecteurs y1 et y2 précédents.

[3]: x=[pi/6,pi/4 pi/3]


y1=sin(x)
y2=cos(x)

1
z=y1./y2

x =

0.5236 0.7854 1.0472

y1 =

0.5000 0.7071 0.8660

y2 =

0.8660 0.7071 0.5000

z =

0.5774 1.0000 1.7321

c) Définir la variable x = [0 : 0.1 : 2π]. Combien y a t-il de valeurs dans ce vecteur? Afficher la
courbe du sinus.
Faire varier le pas. Qu’affiche exactement la commande plot?

[4]: x=0:0.1:2*pi;
figure()
plot(x,sin(x))
x1=0:0.01:2*pi;
figure()
plot(x1,sin(x1))

2
3
1.2 Exercice 2 (Manipulation de matrices)
a) Définir le vecteur V = [0 1 2 . . . 49 50]. Quelle est la taille de ce vecteur?
Définir le vecteur W contenant le cinq premiers éléments de de V, et le vecteur X contenant
les cinq premiers et les cinq derniers éléments.
Définir ensuite le vecteur Z = [0 2 4 . . . 48 50] à partir de V .

[5]: V=0:50;
length(V)
W=V(1:5)
X=[W V(end-4:end)]
Z=V(1:2:end)

ans =

51

W =

0 1 2 3 4

4
X =

0 1 2 3 4 46 47 48 49 50

Z =

Columns 1 through 13

0 2 4 6 8 10 12 14 16 18 20 22 24

Columns 14 through 26

26 28 30 32 34 36 38 40 42 44 46 48 50

b) Définir la matrice
 
1 2 3 4 5 6 7 8 9 10
M = 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

Extraire de cette matrice la matrice  


1 2
N = 11 12
21 22

et la matrice  
8 9 10
P = 18 19 20
28 29 30

puis la matrice ( )
3 7
Q=
23 27

Extraite de la matrice M la matrice R obtenue en prenant dans la matrice M une colonne sur 2.

[6]: M=reshape(1:30,10,3)'
N=M(:,1:2)
P=M(:,end-2:end)
Q=M([1,3],[3,7])
R=M(:,1:2:end)

M =

1 2 3 4 5 6 7 8 9 10

5
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

N =

1 2
11 12
21 22

P =

8 9 10
18 19 20
28 29 30

Q =

3 7
23 27

R =

1 3 5 7 9
11 13 15 17 19
21 23 25 27 29

c) Définir la matrice M = [2468 . . . 100] et N = [−1 − 3 − 5 . . . − 99], puis le vecteur P =


[−12 − 34 − 58 . . . − 99100].

[7]: M=2:2:100
N=-1:-2:-99
P=reshape([N;M],1,100)

M =

Columns 1 through 13

2 4 6 8 10 12 14 16 18 20 22 24 26

Columns 14 through 26

28 30 32 34 36 38 40 42 44 46 48 50 52

6
Columns 27 through 39

54 56 58 60 62 64 66 68 70 72 74 76 78

Columns 40 through 50

80 82 84 86 88 90 92 94 96 98 100

N =

Columns 1 through 13

-1 -3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25

Columns 14 through 26

-27 -29 -31 -33 -35 -37 -39 -41 -43 -45 -47 -49 -51

Columns 27 through 39

-53 -55 -57 -59 -61 -63 -65 -67 -69 -71 -73 -75 -77

Columns 40 through 50

-79 -81 -83 -85 -87 -89 -91 -93 -95 -97 -99

P =

Columns 1 through 13

-1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13

Columns 14 through 26

14 -15 16 -17 18 -19 20 -21 22 -23 24 -25 26

Columns 27 through 39

-27 28 -29 30 -31 32 -33 34 -35 36 -37 38 -39

Columns 40 through 52

40 -41 42 -43 44 -45 46 -47 48 -49 50 -51 52

Columns 53 through 65

7
-53 54 -55 56 -57 58 -59 60 -61 62 -63 64 -65

Columns 66 through 78

66 -67 68 -69 70 -71 72 -73 74 -75 76 -77 78

Columns 79 through 91

-79 80 -81 82 -83 84 -85 86 -87 88 -89 90 -91

Columns 92 through 100

92 -93 94 -95 96 -97 98 -99 100

d) Définir une matrice M aléatoire à 3 lignes et 7 colonnes. Combien de nombres dans cette
matrice sont plus grands que 0.5? que 0.8? où sont-ils situés?
Construire alors la matrice P obtenue à partir de la matrice M en remplaçant tous les nombres
de M inférieurs à 0.4 par 0, et ceux supérieurs à 0.4 par 1.
Construire de même la matrice Q obtenue à partir de la matrice M en remplaçant tous les
nombres de M inférieurs à 0.5 par -3 et tous les nombres supérieurs à 0.5 par 14.

[8]: M=rand(3,7)
length(find(M>=0.5));
length(find(M>=0.8));
[rows,cols]=find(M>=0.5);
[rows,cols]=find(M>=0.8);
P=M;
I=find(M>=0.4);
P(I)=1;
I=find(M<0.4);
P(I)=0;
P
Q=M;
I=find(M>=0.5);
Q(I)=14;
I=find(M<0.5);
Q(I)=-3;
Q

M =

0.8147 0.9134 0.2785 0.9649 0.9572 0.1419 0.7922


0.9058 0.6324 0.5469 0.1576 0.4854 0.4218 0.9595
0.1270 0.0975 0.9575 0.9706 0.8003 0.9157 0.6557

P =

8
1 1 0 1 1 0 1
1 1 1 0 1 1 1
0 0 1 1 1 1 1

Q =

14 14 -3 14 14 -3 14
14 14 14 -3 -3 -3 14
-3 -3 14 14 14 14 14

e) Créer un vecteur N de valeurs binaires (0 ou 1) tel que 10% de ses valeurs soient des 1.

[16]: N=rand(1,100)
I=find(N>0.9);
N(I)=1;
I=find(N<0.9);
N(I)=0;
N

N =

Columns 1 through 7

0.9619 0.0046 0.7749 0.8173 0.8687 0.0844 0.3998

Columns 8 through 14

0.2599 0.8001 0.4314 0.9106 0.1818 0.2638 0.1455

Columns 15 through 21

0.1361 0.8693 0.5797 0.5499 0.1450 0.8530 0.6221

Columns 22 through 28

0.3510 0.5132 0.4018 0.0760 0.2399 0.1233 0.1839

Columns 29 through 35

0.2400 0.4173 0.0497 0.9027 0.9448 0.4909 0.4893

Columns 36 through 42

0.3377 0.9001 0.3692 0.1112 0.7803 0.3897 0.2417

9
Columns 43 through 49

0.4039 0.0965 0.1320 0.9421 0.9561 0.5752 0.0598

Columns 50 through 56

0.2348 0.3532 0.8212 0.0154 0.0430 0.1690 0.6491

Columns 57 through 63

0.7317 0.6477 0.4509 0.5470 0.2963 0.7447 0.1890

Columns 64 through 70

0.6868 0.1835 0.3685 0.6256 0.7802 0.0811 0.9294

Columns 71 through 77

0.7757 0.4868 0.4359 0.4468 0.3063 0.5085 0.5108

Columns 78 through 84

0.8176 0.7948 0.6443 0.3786 0.8116 0.5328 0.3507

Columns 85 through 91

0.9390 0.8759 0.5502 0.6225 0.5870 0.2077 0.3012

Columns 92 through 98

0.4709 0.2305 0.8443 0.1948 0.2259 0.1707 0.2277

Columns 99 through 100

0.4357 0.3111

N =

Columns 1 through 13

1 0 0 0 0 0 0 0 0 0 1 0 0

Columns 14 through 26

0 0 0 0 0 0 0 0 0 0 0 0 0

Columns 27 through 39

10
0 0 0 0 0 1 1 0 0 0 1 0 0

Columns 40 through 52

0 0 0 0 0 0 1 1 0 0 0 0 0

Columns 53 through 65

0 0 0 0 0 0 0 0 0 0 0 0 0

Columns 66 through 78

0 0 0 0 1 0 0 0 0 0 0 0 0

Columns 79 through 91

0 0 0 0 0 0 1 0 0 0 0 0 0

Columns 92 through 100

0 0 0 0 0 0 0 0 0

1.3 Exercice 3 (Fonctions graphiques)


1
On considère la fonction f (t) = 1+αt 2.
a) créer le vecteur t = 0 : 0.1 : 100; Quel est le nombre de points? Quelle est la place utilisée en
mémoire?
b) Représenter sur une figure à 4 cadrans la fonction demandée pour les valeurs α = 1, 10, 20 et 30.
Mettre les titres et les légendes de chaque graphique. c) Représenter sur une même figure les 4
graphes de la question précédente. Mettre les titres et les légendes de chaque graphique.

[10]: t=0:0.1:100;
length(t)
whos

figure(1)

a=1;
subplot(2,2,1)
y1=1./(1+a*t.^2);
plot(t,y1)
legend('alpha=1')
title('tracé de la fonction f')
xlabel('t')
ylabel('f')

11
a=10;
subplot(2,2,2)
y2=1./(1+a*t.^2);
plot(t,y2)
legend('alpha=10')
title('tracé de la fonction f')
xlabel('t')
ylabel('f')

a=20;
subplot(2,2,3)
y3=1./(1+a*t.^2);
plot(t,y3)
legend('alpha=20')
title('tracé de la fonction f')
xlabel('t')
ylabel('f')

a=30;
subplot(2,2,4)
y4=1./(1+a*t.^2);
plot(t,y4)
legend('alpha=30')
title('tracé de la fonction f')
xlabel('t')
ylabel('f')

figure(2)
plot(t,y1)
hold on
plot(t,y2)
plot(t,y3)
plot(t,y4)
legend('alpha=1','alpha=10','alpha=20','alpha=30')
title('tracé de la fonction f')
xlabel('t')
ylabel('f')

ans =

1001

Name Size Bytes Class Attributes

I 1x91 728 double


M 3x7 168 double
N 1x100 800 double

12
P 3x7 168 double
Q 3x7 168 double
R 3x5 120 double
V 1x51 408 double
W 1x5 40 double
X 1x10 80 double
Z 1x26 208 double
ans 1x1 8 double
cols 10x1 80 double
rows 10x1 80 double
t 1x1001 8008 double
x 1x63 504 double
x1 1x629 5032 double
y1 1x3 24 double
y2 1x3 24 double
z 1x3 24 double

13
1.4 Exercice 4 (Création de fonctions)
a) créer à partir de votre fichier de commande une fonction qui trace la courbe de l’exercice 3 en
fonction de la variable α passée en parmètre et qui retourne les valeurs prises par la fonction f .

b) Ajouter un “flag” passé à la fonction qui permet de choisir ou non la visualisation de la courbe
(nargin).

[3]: t=0:0.1:10;
y=zeros(size(t));
%function f_alpha
type f_alpha.m
y=f_alpha(t,10);

function y=f_alpha(t,alpha)
y=1./(1+alpha.*t.^2);
plot(t,y)
title(strcat('graphe de la fonction f pour alpha=',num2str(alpha)))
xlabel('t')

14
ylabel('y')
end

[12]: t=0:0.1:100;
y=zeros(size(t));
%function f_alpha_flag
type f_alpha_flag.m
%utilisation de la fonction f_alpha_flag
y=f_alpha_flag(t,10,0);

function y=f_alpha_flag(t,alpha,flag)
y=1./(1+alpha.*t.^2);
if flag==1
plot(t,y)
title(strcat('graphe de la fonction f pour alpha=',num2str(alpha)))
xlabel('t')
ylabel('y')
end

15
1.5 Exercice 5 (Recherche d’un élément dans un vecteur)
a) Ecrire une fonction trouve qui prend en argument un vecteur v et un nombre x et qui retourne
1 si x est un élément du vecteur v et 0 sinon. Une version avec la boucle for+if, une autre
version avec while et une autre avec compraison globale == (et find ou nnz)

[13]: %affichage de la premiere version de la fonction trouve (trouve1.m)


type trouve1.m
%exemple
u=1:20
trouve1(u,18) %ça doit afficher 1 car 18 appartient au vecteur u
trouve1(u,30) %ça doit afficher 0 car 30 n'appartient pas au vecteur u

%affichage de la deuxieme version de la fonction trouve (trouve2.m)


type trouve2.m

%exemple
u=1:20
trouve2(u,18) %ça doit afficher 1 car 18 appartient au vecteur u
trouve2(u,30) %ça doit afficher 0 car 30 n'appartient pas au vecteur u

%affichage de la troisieme version de la fonction trouve avec find (trouve3.m)


type trouve3.m
%exemple
u=1:20
trouve3(u,18) %ça doit afficher 1 car 18 appartient au vecteur u
trouve3(u,30) %ça doit afficher 0 car 30 n'appartient pas au vecteur u

%affichage de la quatrieme version de la fonction trouve avec nnz (trouve4.m)


type trouve4.m
%exemple
u=1:20
trouve4(u,18) %ça doit afficher 1 car 18 appartient au vecteur u
trouve4(u,30) %ça doit afficher 0 car 30 n'appartient pas au vecteur u

function u=trouve1(v,x)
u=0;
for i=1:length(v)
if v(i)==x u=1;
end
end

u =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

16
Columns 14 through 20

14 15 16 17 18 19 20

ans =

ans =

function u=trouve2(v,x)
u=0;
i=1;
while v(i) ~= x & i<length(v),
i=i+1;
u=0;
end
if v(i) == x u=1;
end
end

u =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

Columns 14 through 20

14 15 16 17 18 19 20

ans =

ans =

function u=trouve3(v,x)

17
y=find(v==x);
u=1;
if isempty(y) u=0;
end

u =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

Columns 14 through 20

14 15 16 17 18 19 20

ans =

ans =

function u=trouve4(v,x)
y=x*ones(size(v));
u=1;
if nnz(v-y)==length(v) u=0;
end

u =

Columns 1 through 13

1 2 3 4 5 6 7 8 9 10 11 12 13

Columns 14 through 20

14 15 16 17 18 19 20

ans =

18
ans =

1.6 Exercice 6 (Matrices et systèmes linéaires)


a) Ecrire une fonction n’utlisant aucune boucle (for,while,…) qui prend comme paramètre un
entier n et qui construit la matrice suivante (eye, diag):
 
1 1 0 ... 0 0 0
 1 2 n−1 0 0 0 0 
 n 2 n 
 0 3 ... 0 0 0 
 n 
 .. .. .. .. .. .. .. 
 . . . . . . . 
 
 0 0 0 ... n − 1 n 2
0 
 
 0 0 0 . . . n−1 n 1 
n n
0 0 0 ... 0 1 n+1

b) Avec Matlab, résoudre le système:


    
6 1 −5 x 10
 2 2 3   y  =  11 
4 −9 7 z 12

[14]: %affiche de la fonction matrice.m qui construit la matrice ci-dessus en␣


,→fonction de n

type matrice.m

function M=matrice(n)
M=diag([1:n]/n,-1)+diag([n:-1:1]/n,1)+diag(1:n+1);
end

[15]: A=[6 1 -5;2 2 3;4 -9 7]


b=[10;11;12]
X=A\b

A =

6 1 -5
2 2 3
4 -9 7

b =

10
11

19
12

X =

2.6310
0.8717
1.3316

20

Vous aimerez peut-être aussi