Universite de Provence. Preparation Agregation.
Epreuve de modelisation, option Probabilite-Statistique.
. .
Correction du TP1: prise en main de Matlab
1 Utiliser l’aide en ligne-sauvegarder
>> help help
HELP Display help text in Command Window.
HELP, by itself, lists all primary help topics. Each primary topic
corresponds to a directory name on the MATLABPATH.
HELP / lists a description of all operators and special characters.
HELP FUN displays a description of and syntax for the function FUN.
When FUN is in multiple directories on the MATLAB path, HELP displays
information about the first FUN found on the path and lists
PATHNAME/FUN for other (overloaded) FUNs.
HELP PATHNAME/FUN displays help for the function FUN in the PATHNAME
directory. Use this syntax to get help for overloaded functions.
HELP DIR displays a brief description of each function in the MATLAB
directory DIR. DIR can be a relative partial pathname (see HELP
PARTIALPATH). When there is also a function called DIR, help for both
the directory and the function are provided.
etc....
>> doc help
>> lookfor matrix
mldivide.m: %\ Backslash or left matrix divide.
mpower.m: %^ Matrix power.
mrdivide.m: %/ Slash or right matrix divide.
mtimes.m: %* Matrix multiply.
slash.m: %Matrix division.
1
COMPAN Companion matrix.
DIAG Diagonal matrices and diagonals of a matrix.
EYE Identity matrix.
FLIPDIM Flip matrix along specified dimension.
etc....
>> 0.5*realmax
ans =
8.9885e+307
>> 2*realmax
ans =
Inf
>> 1/0
Warning: Divide by zero.
ans =
Inf
>> 0/0
Warning: Divide by zero.
ans =
NaN
>> capital=-3.1575691856*10^4;
>> format long
>> capital
capital =
2
-3.157569185600000e+04
>> format short
>> capital
capital =
-3.1576e+04
>> V1=[1 2 4]
V1 =
1 2 4
>> V2=[3 5 6]’
V2 =
3
5
6
>> save Tpinit.mat V1 V2 capital
>> save Tpinit.txt V1 V2 capital -ascii
>> whos
Name Size Bytes Class
V1 1x3 24 double array
V2 3x1 24 double array
ans 1x1 8 double array
capital 1x1 8 double array
cc 1x6 12 char array
d 1x16 32 char array
runningWindows 1x1 1 logical array
v 1x18 36 char array
vers4Startup 1x1 8 double array
3
zzSTIXENV 1x22 44 char array
Grand total is 72 elements using 197 bytes
>> clear V1 V2 capital
>> whos
Name Size Bytes Class
ans 1x1 8 double array
cc 1x6 12 char array
d 1x16 32 char array
runningWindows 1x1 1 logical array
v 1x18 36 char array
vers4Startup 1x1 8 double array
zzSTIXENV 1x22 44 char array
>> clear
>> whos
>> load Tpinit
>> whos
Name Size Bytes Class
V1 1x3 24 double array
V2 3x1 24 double array
capital 1x1 8 double array
Grand total is 7 elements using 56 bytes
2 Vecteurs et matrices:
1. >> v=[45 3 -7 38]; w=[0 1];
>> v*w’
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> v=[-1:-1:-90]; w=[1:90];
>> v*w’
4
ans =
-247065
>> v=[0:0.01:1]; w=[-1:0.01:2];
v*w’
??? Error using ==> mtimes
Inner matrix dimensions must agree.
2. Par exemple, A =
(
1 00 1
)
, et B =
(
0 11 0
)
.
3. >> A=rand(3,3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
>> B=diag(diag(A))
B =
0.9501 0 0
0 0.8913 0
0 0 0.8214
4. >> A=[1 -1;4 3;3 0]; B=[2 -8 1; 0 0 -2]; v=[1 4 3]’;
>> C=A*B;
>> x=B*v;
>> y=A*x
y =
-21
-126
-81
5
>> z=C*v
z =
-21
-126
-81
On a bien y = z!... C est une matrice 3x3, obtenue comme le produitd’une matrice 3x2, et d’une matrice 2x3. C est donc au mieux de rang2, et n’est donc pas inversible.
>> inv(C)
Warning: Matrix is singular to working precision.
ans =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf
5. >> A=[6 1 -5;2 2 3;4 -9 7]; b=[10 11 12]’;
>> det(A)
ans =
374
>> x=A\b
x =
2.6310
0.8717
1.3316
>> A*x
6
ans =
10.0000
11.0000
12.0000
On retrouve bien b.
>> A(3,:)=[8 3 -2]
A =
6 1 -5
2 2 3
8 3 -2
>> det(A)
ans =
0
>> x=A\b
Warning: Matrix is singular to working precision.
x =
Inf
-Inf
Inf
A n’est pas inversible. L’equation Ax = b n’a pas de solution si b /∈ℑ(A), ou a une infinite de solutions si b ∈ ℑ(A). Dans ce cas, lessolutions sont du type x = x0 + v, ou x0 est une solution particuliere,et v est un vecteur quelconque de Ker(A). Pour savoir si Ax = b a unesolution, i.e. pour savoir si b ∈ ℑ(A), on peut utiliser la commanderref
7
>> rref([A b])
ans =
1.0000 0 -1.3000 0
0 1.0000 2.8000 0
0 0 0 1.0000
La troisieme colonne est une combinaison lineaire des deux premieres,ce qui montre que A est de rang 2. La quatrieme colonne n’est pas unecombinaison lineaire des deux premieres, ce qui montre que b n’est pasdans ℑ(A). Donc, l’equation Ax = b n’a pas de solution.
>> A=[1 2 3 4;2 3 4 1; -2 4 -5 2; 8 1 -1 3]; b=[1 -2 0 1]’;
>> det(A)
ans =
910
>> y=A\b
y =
-0.0857
-0.6143
-0.1736
0.7088
>> A*y
ans =
1.0000
-2.0000
0
1.0000
On retrouve b.
8
6. >> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> ones(3,1)
ans =
1
1
1
>> pascal(6)
ans =
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
>> magic(3)
ans =
9
8 1 6
3 5 7
4 9 2
eye(n) est la matrice Identite de dimension n. ones(n,p) est unematrice n×p dont toutes les entrees sont 1. pascal(n) est une matricesymetrique n×n contenant les coefficients binomiaux. Son entree (i, j)est
pascal(n)i,j
= Cj−1
i+j−2 .
magic(n) cree un carre magique d’ordre n, i.e. une matrice n × n acoefficients entiers, telle que les sommes sur les lignes et les colonnessont egales.
>> ones(3)^3
ans =
9 9 9
9 9 9
9 9 9
>> ones(3)^4
ans =
27 27 27
27 27 27
27 27 27
>> ones(5)^4
ans =
125 125 125 125 125
125 125 125 125 125
10
125 125 125 125 125
125 125 125 125 125
125 125 125 125 125
ones(n)2 = n ones(n), et par recurrence, ones(n)m = nm−1ones(n).
>> ones(3)*magic(3)
ans =
15 15 15
15 15 15
15 15 15
Si A est une matrice n × p, ones(n) ∗ A est une matrice n × p, dontl’entree (i, j) est la somme sur la j-ieme colonne de A. Si A est uncarre magique, on obtient donc une matrice dont toutes les entreessont egales.
7. La commande sparse permet de creer des matrices avec un grand nom-bre de 0, sans surcharger inutilement la memoire. On garde juste enmemoire les places et les valeurs des entrees non nulles. Les comman-des full et spy permettent de “visualiser” ces matrices. full rend lamatrice entiere, en mettant des 0 ou besoin est. spy cree un graphiqueindiquant la place des entrees non nulles.
>> A=sparse(10,10,2.1)
A =
(10,10) 2.1000
>> B=full(A)
B =
Columns 1 through 8
11
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
Columns 9 through 10
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 2.1000
>> spy(A)
8. La sequence
S=[eye(n) zeros(n,1)]; S=S(:,2:n+1); A=2*eye(n)-S-S’
cree la matrice An.
La sequence
D=diag(ones(n,1)); SD=diag(diag(D),-1); A=2*D-SD-SD’;
produit une erreur, car la matrice SD est en fait de dimension (n+1)×(n + 1), alors que D est de dimension n × n. Pour corriger, il fauttronquer la matrice SD. Par exemple, pour n = 3,
12
>> D=diag(ones(3,1))
D =
1 0 0
0 1 0
0 0 1
>> SD=diag(diag(D),-1)
SD =
0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
>> A=2*D-SD-SD’
??? Error using ==> minus
Matrix dimensions must agree.
>> SD=SD(1:3,1:3)
SD =
0 0 0
1 0 0
0 1 0
>> A=2*D-SD-SD’
A =
2 -1 0
-1 2 -1
0 -1 2
La sequence
13
e=ones(n,1); b=2*e; A=spdiags([-e b e],-1:1,n,n)
produit la matrice An sous forme “sparse”. Si n est grand, c’est cettesequence qu’il faut preferer aux autres.
>> n=10;
>> e=ones(n,1); b=2*e; A=spdiags([-e b e],-1:1,n,n)
A =
(1,1) 2
(2,1) -1
(1,2) 1
(2,2) 2
(3,2) -1
(2,3) 1
(3,3) 2
(4,3) -1
(3,4) 1
(4,4) 2
(5,4) -1
(4,5) 1
(5,5) 2
(6,5) -1
(5,6) 1
(6,6) 2
(7,6) -1
(6,7) 1
(7,7) 2
(8,7) -1
(7,8) 1
(8,8) 2
(9,8) -1
(8,9) 1
(9,9) 2
(10,9) -1
(9,10) 1
(10,10) 2
14
>> full(A)
ans =
2 1 0 0 0 0 0 0 0 0
-1 2 1 0 0 0 0 0 0 0
0 -1 2 1 0 0 0 0 0 0
0 0 -1 2 1 0 0 0 0 0
0 0 0 -1 2 1 0 0 0 0
0 0 0 0 -1 2 1 0 0 0
0 0 0 0 0 -1 2 1 0 0
0 0 0 0 0 0 -1 2 1 0
0 0 0 0 0 0 0 -1 2 1
0 0 0 0 0 0 0 0 -1 2
>> spy(A)
>> n=100;
>> e=ones(n,1); b=2*e; A=spdiags([-e b e],-1:1,n,n);
>> spy(A)
9. >> A=[2 3; 6 5];
>> det(A)
ans =
-8
>> [V,D]=eig(A)
V =
-0.7071 -0.4472
0.7071 -0.8944
D =
15
-1 0
0 8
>> A*V
ans =
0.7071 -3.5777
-0.7071 -7.1554
>> V*D
ans =
0.7071 -3.5777
-0.7071 -7.1554
V est la matrice des vecteurs propres. D est la matrice diagonale, dontles elements diagonaux sont les valeurs propres. On a A = V DV −1.
>> eig(A)
ans =
-1
8
Avec un seul argument de sortie, on obtient le vecteur des valeurspropres.
>> B=[2 3 4; 7 6 5; 2 8 7];
det(B)
ans =
63
>> eig(B)
16
ans =
15.3332
-0.1666 + 2.0201i
-0.1666 - 2.0201i
>> [V,D]=eig(B)
V =
0.3497 0.0355 + 0.4017i 0.0355 - 0.4017i
0.6325 0.5793 - 0.2662i 0.5793 + 0.2662i
0.6911 -0.6565 -0.6565
D =
15.3332 0 0
0 -0.1666 + 2.0201i 0
0 0 -0.1666 - 2.0201i
Ici, les valeurs propres et vecteurs propres sont complexes.
>> A=[1 -1; 4 3; 3 0]; B=[2 -8 1; 0 0 -2]; C=A*B;
>> ker=null(C)
ker =
-0.9701
-0.2425
0.0000
>> C*ker
ans =
1.0e-14 *
17
0.1468
0.2130
0.2578
null(C) donne une base du noyau de C, mais a cause des ecrituresapprochees des reels, on n’obtient pas tout a fait 0 quand on refaitC*ker. Il vaut mieux utiliser la commande null(C,’r’) qui cherche,quand c’est possible, a donner la base avec des nombres rationnels.
>> ker=null(C,’r’)
ker =
4
1
0
>> C*ker
ans =
0
0
0
3 Graphiques
3.1 Polygones
1. >> abs=[0 0.2 0.4 0.7 1 0.8 0.5 0];
>> ord=[0 0.5 0.8 0.9 1 0.6 0.1 0];
>> plot(abs,ord)
2. >> i=[0:6]*pi/3; abs=cos(i); ord=sin(i);
>> plot(abs,ord)
>> axis square
18
La commande axis square permet d’avoir la meme echelle sur l’axedes abscisses et celui des ordonnees.
3.2 Courbes
1. >> abs=[0:1/50:1];
>> ord=cos(abs+1).*sin(100*abs+0.5);
>> plot(abs,ord)
La courbe obtenue n’est pas tres lisse, car on n’a pas mis assez depoints.
>> abs=[0:1/10000:1];
>> ord=cos(abs+1).*sin(100*abs+0.5);
>> plot(abs,ord)
C’est beaucoup plus joli.
2. >> xlabel(’x’)
>> ylabel(’f(x)’)
>> legend(’x --> cos(x+1)sin(100x+0.5)’)
3. >> hold on
>> abs=[0:1/50:1];
>> ord=cos(abs+1);
>> plot(abs,ord,’+r’)
4. Voila le contenu du fichier fonction1.m
function y=fonction1(x)
% FONCTION1: Ma premiere fonction!
%
% y=fonction1(x)
% Entree: -x:matrice ou vecteur.
% Sortie: -y: matrice ou vecteur de meme dimension que x
% y=(x-5)/(x-1).
y=(x-5)./(x-1);
19
>> x=[0:0.01:1];
>> x(end)=[]; % Supprime la derniere coordonnee.
>> y=fonction1(x);
>> figure(2)
>> plot(x,y)
5. >> fonction1(2)
ans =
-3
>> fonction1(exp(j*pi/2))
ans =
3.0000 + 2.0000i
>> help fonction1
FONCTION1: Ma premiere fonction!
y=fonction1(x)
Entree: -x:matrice ou vecteur.
Sortie: -y: matrice ou vecteur de meme dimension que x
y=(x-5)/(x-1).
Quand on tape help fonction1, les commentaires mis en debut deprogramme sont affiches, comme pour toutes les fonctions deja pro-gramees dans Matlab. Tres pratique!
6. >> figure(1)
>> subplot(2,1,1) % Division de la fenetre graphique en deux sous-fenetre.
% Trace du premier graphique.
>> abs=[0:1/10000:1];
>> ord=cos(abs+1).*sin(100*abs+0.5);
>> plot(abs,ord)
>> xlabel(’x’)
>> ylabel(’f(x)’)
>> legend(’x --> cos(x+1)sin(100x+0.5)’)
20
>> hold on
>> abs=[0:1/50:1];
>> ord=cos(abs+1);
>> plot(abs,ord,’+r’)
% Trace du deuxieme graphique
>> subplot(2,1,2) % On se place dans l’autre sous-fenetre,
>> plot(x,y)
7. >> clf % Nettoyage de la fenetre graphique.
>> t=[0:0.01:2*pi];
>> x=cos(2*pi*t);
>> y=sin(2*pi*t);
>> plot3(x,y,t) % Trace une courbe en dimension 3
>> grid on % Met une grille.
3.3 Histogramme
>> X=randn(1000,1); %Generation de Normales centrees reduites.
>> hist(X) % Trace un histogramme calcule sur 10 intervalles.
>> x=[-3:0.1:3];
>> n=hist(X,x); %Calcule l’histogramme sur les intervalles
% specifie par x.
>> stairs(x,n) % Diagramme en baton de l’histogramme.
>> df=exp(-x.^2/2)/(sqrt(2*pi)); % Calcul de la densite gaussienne.
>> df=1000*df*0.1; %Renormalisation pour que l’aire sous la courbe soit
%1000, en vue d’une comparaison avec l’histogramme.
>> hold on
>> plot(x,df,’r’) % Trace de la densite renormalise.
>> hold off
3.4 Surfaces
On parametrise la surface:
x = cos(θ) cos(φ) ; y = 1+1√2
cos(θ) sin(φ) ; z = 2+sin(θ) ; θ ∈ [0, 2π] ; φ ∈ [−π
2;π
2] .
>> th=[0:0.1:2*pi];
>> phi=[-pi/2:0.1:pi/2];
21
>> x=cos(th)’*cos(phi);
>> y=1+cos(th)’*sin(phi)/sqrt(2);
>> z=2+sin(th)’*ones(1,length(phi));
>> clf
>> surf(x,y,z) % Essayez aussi les commandes suivantes.
>> mesh(x,y,z)
>> surfc(x,y,z)
>> meshc(x,y,z)
>> meshz(x,y,z)
>> surfl(x,y,z)
4 Programmes-procedures
Voici le contenu du fichier programme1.m.
% PROGRAMME1.
%
% Ma Premiere procedure.
clear
% Premiere methode de construction, utilisant une boucle.
n=10^4;
tic;
V=zeros(1,n);
for j=1:n
V(j)=j^2;
end
t1=toc;
% Deuxieme methode sans boucle.
tic;
V=[1:n].^2;
t2=toc;
% Affichage des resultats.
disp([’Temps pour la methode avec boucle: ’ num2str(t1)])
disp([’Temps pour la methode sans boucle : ’ num2str(t2)])
Voici ce que ca donne:
22
>> programme1
Temps pour la mthode avec boucle: 0.0022805
Temps pour la mthode sans boucle : 0.0005776
C’est beaucoup plus rapide sans boucle! Et la plupart du temps, eneffectauant des calculs matriciels, on peut et on DOIT EVITER les boucles.
23