Corrigé TP1
Corrigé TP1
Corrigé TP1
[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
1
z=y1./y2
x =
y1 =
y2 =
z =
c) Définir la variable 𝑥 = [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 𝑉 = [0 1 2 … 49 50]. Quelle est la taille de ce vecteur?
Définir le vecteur 𝑊 contenant le cinq premiers éléments de de V, et le vecteur 𝑋 contenant
les cinq premiers et les cinq derniers éléments.
Définir ensuite le vecteur 𝑍 = [0 2 4 … 48 50] à partir de 𝑉 .
[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
𝑀= ⎛
⎜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
𝑁= ⎛
⎜11 12⎞
⎟
⎝21 22⎠
et la matrice
8 9 10
𝑃 = ⎛
⎜18 19 20⎞
⎟
⎝28 29 30⎠
puis la matrice
3 7
𝑄= ( )
23 27
Extraite de la matrice 𝑀 la matrice 𝑅 obtenue en prenant dans la matrice 𝑀 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
[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
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
Columns 27 through 39
Columns 40 through 52
Columns 53 through 65
7
-53 54 -55 56 -57 58 -59 60 -61 62 -63 64 -65
Columns 66 through 78
Columns 79 through 91
d) Définir une matrice 𝑀 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 𝑃 obtenue à partir de la matrice 𝑀 en remplaçant tous les nombres
de 𝑀 inférieurs à 0.4 par 0, et ceux supérieurs à 0.4 par 1.
Construire de même la matrice 𝑄 obtenue à partir de la matrice 𝑀 en remplaçant tous les
nombres de 𝑀 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 =
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 𝑁 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
Columns 8 through 14
Columns 15 through 21
Columns 22 through 28
Columns 29 through 35
Columns 36 through 42
9
Columns 43 through 49
Columns 50 through 56
Columns 57 through 63
Columns 64 through 70
Columns 71 through 77
Columns 78 through 84
Columns 85 through 91
Columns 92 through 98
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
0 0 0 0 0 0 0 0 0
a) créer le vecteur 𝑡 = 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
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 𝑓.
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 𝑣 et un nombre 𝑥 et qui retourne
1 si 𝑥 est un élément du vecteur 𝑣 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)
%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
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 1 0 … 0 0 0
⎛
⎜ 1
2 𝑛−1
0 0 0 0 ⎞
⎟
⎜
⎜
𝑛
2
𝑛 ⎟
⎟
⎜ 0 3 … 0 0 0 ⎟
⎜
⎜
𝑛 ⎟
⎟
⎜ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⎟
⎜
⎜ 2 ⎟
⎟
⎜ 0 0 0 … 𝑛−1 𝑛 0 ⎟
⎜ ⎟
⎜ 0 0 0 … 𝑛−1
𝑛 𝑛 1
𝑛
⎟
⎝ 0 0 0 … 0 1 𝑛+1 ⎠
b) Avec Matlab, résoudre le système:
6 1 −5 𝑥 10
⎛
⎜ 2 2 3 ⎞
⎟⎛⎜ 𝑦 ⎞
⎟=⎛
⎜ 11 ⎞
⎟
⎝ 4 −9 7 ⎠ ⎝ 𝑧 ⎠ ⎝ 12 ⎠
type matrice.m
function M=matrice(n)
M=diag([1:n]/n,-1)+diag([n:-1:1]/n,1)+diag(1:n+1);
end
A =
6 1 -5
2 2 3
4 -9 7
b =
10
11
12
19
X =
2.6310
0.8717
1.3316
20