Vous êtes sur la page 1sur 17

Travaux Pratiques d’Analyse Numérique

avec MATLAB

Première Science: Programmation MATLAB

Hafid LALIOUI

Email: hafid.lalioui@edu.uiz.ac.ma

Université Ibn Zohr, Ecole Nationale des Sciences Appliquées, Première Année Cycle d’Ingénieur

April 2021
Contents

1 Quelque Type de variables en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Scripts, Fonctions et Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.1 Script Vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 Script Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.3 Fonction Norme Euclidienne, Distance et Factoriel . . . . . . . . . . . . . . . 4

2.4 Classe Personne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Boucles et Structures Conditionelles . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.1 Structure Conditionnelle: If et Switch . . . . . . . . . . . . . . . . . . . . . . 6

3.2 Boucles: For et While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4 Quelques applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.1 Script Statistique Descriptive . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.2 Fonction Décomposition Binaire et Fonctions Trie . . . . . . . . . . . . . . . 9

4.3 Classe Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

i
Programmation MATLAB H. LALIOUI

1 Quelque Type de variables en MATLAB

1 >> clear;
2 >> a=5
3
4 a =
5
6 5
7
8 >> Name='ENSA';
9 >> Boolean=true
10
11 Boolean =
12
13 1
14
15 >> Int=int64(a)
16
17 Int =
18
19 5
20
21 >> Veteur=[1 4 5 8 74]
22
23 Veteur =
24
25 1 4 5 8 74
26
27 >> Matrice=[1 4;5 9]
28
29 Matrice =
30
31 1 4
32 5 9
33
34 >> CharVacteur=[1 4 Name Name]
35
36 CharVacteur =
37
38 ENSAENSA
39
40 >> whos
41 Name Size Bytes Class Attributes
42
43 Boolean 1x1 1 logical
44 CharVacteur 1x10 20 char
45 Int 1x1 8 int64
46 Matrice 2x2 32 double
47 Name 1x4 8 char
48 Veteur 1x5 40 double
49 a 1x1 8 double

1
Programmation MATLAB H. LALIOUI

Remark:
Dans tout ce qui suit vous remplacer le signe différent par sont expression en MATLAB. Effectuer
une recherche Google: ”not équal en matlab”.
Exemple: Vous remplacer ici

1 if length(X(:))6= 2 | | length(Y(:))6=2

2 Scripts, Fonctions et Classes

2.1 Script Vecteur

1 clc;
2 clear;
3 %Vector
4 v=[4 2 7 12];
5 Dim=length(v);
6 Element=v(4);
7 vN=[v,5 18 1,v];
8 vn=vN(1:2:11);
9 V=[v;[3 4 1 2];v];
10 DIM=size(V);
11 NumR=size(V,1);
12 NumC=size(V,2);
13 [R,C]=size(V);
14 RandV=rand(1,5);
15 %Operations
16 Sum=sum(v);
17 Addition=v+v;
18 InnerProduct=v*v.';
19 ElementsMultiplication=v.*v;
20 ComplexV=[4−3i 2+2i 3+2*1i];
21 ComplexTraspose=ComplexV';
22 NormalTranspose=ComplexV.';
23 InnerProduct1=sum(ElementsMultiplication);
24 AddNum=v+3;
25 %Caracterization
26 p=2;
27 NormP=norm(v,p);
28 NormInf=norm(v,Inf);
29 %Height Dimension Matrix
30 Hvector=v;
31 Hvector(:,:,2)=v+1;
32 Hvector(:,:,4)=v.ˆ2;
33 Helement=Hvector(1,1,:,1);
34 Hvector(:,:,4,2)=v−1;
35 %Gradiant
36 syms x y z;
37 f = xˆ2*exp(y)−x*zˆ2;
38 Gradient=gradient(f,[x,y,z]);
39 %whos;

2
Programmation MATLAB H. LALIOUI

2.2 Script Matrice

1 clear;
2 clc;
3 %Matrix
4 A=[3 5 4;8 7 9;2 4 1];
5 Element=A(1,1);
6 Column=A(:,1);
7 CDim=length(A(:,1));
8 Row=A(2,:);
9 RDim=length(A(2,:));
10 Dim=size(A);
11 AllElements=A(:);
12 SumElements=sum(A(:));
13 Diagonale=diag(A);
14 UpDiagonale=diag(A,1);
15 DownDiagonale=diag(A,−2);
16 AN=[A;A];
17 An=AN(1:4,2:3);
18 %Operations
19 B=[2, 4, 3;1, 4, 6;1, 4, 3];
20 Multiplication=A*B;
21 ElementsMultiplication=A.*B;
22 Division=A/B;
23 ElementsDivision=A./B;
24 Addition=A+B;
25 Soustraction=A−B;
26 %Caracterization
27 IsSymmetric=issymmetric(A);
28 p=inf;
29 NormP=norm(A,p);
30 Transpose=transpose(A);
31 Determinant=det(A);
32 Inverse=Aˆ−1;
33 [EigVector,EigValue]=eig(A);
34 %technics
35 n=5;
36 I=eye(n);
37 v2=[4 7 2 6];
38 D1=diag(v2,1);
39 C=diag(v2,1)+I+diag([12 3 9],−2);
40 D=C+ones(n);
41 E=rand(4);
42 %Height Dimension Matrix
43 Helement=A(1,1,1,1,1,1,1,1,1,1);
44 Hmatrix=A;
45 Hmatrix(:,:,:,:,:,:);
46 Hmatrix(:,:,2)=B;
47 Hmatrix(:,:,2,3)=B;
48 size(Hmatrix);
49 HmatrixElements=Hmatrix(1,1,:,1);
50 HmatrixElements1=Hmatrix(1,1,:,1);
51 %Special Jacobian Hessien
52 syms x y z;
53 f = [x*y + 2*z*exp(xˆ2), x*y+y*z+sin(x),xˆ2+yˆ2*z, x*y*z];
54 Jacobian=jacobian(f,[x,y,z]);
55 g = xˆ2*exp(y)−x*zˆ2;
56 Hessian=hessian(g,[x,y,z]);
57 %whos;

3
Programmation MATLAB H. LALIOUI

2.3 Fonction Norme Euclidienne, Distance et Factoriel

Fonction Norme Euclidienne et Distance

1 function [ Normx,Normy,D ] = MyNormDistance( X,Y )


2 if length(X(:))6= 2 | | length(Y(:))6=2
3 error('Error: Enter a one columm two rows parameters')
4 else
5 D=sqrt((X(1)−Y(1))ˆ2+(X(2)−Y(2))ˆ2);
6 Normx=sqrt(X(1)ˆ2+X(2)ˆ2);
7 Normy=sqrt(Y(1)ˆ2+Y(2)ˆ2);
8 end
9 end

Exemple

1 >> x=[2 3]
2 x =
3 2 3
4 >> y=[4 2]
5 y =
6 4 2
7 >> [ Normx,Normy,D ] = MyNormDistance( x,y )
8 Normx =
9 3.6056
10 Normy =
11 4.4721
12 D =
13 2.2361

Fonctions Factoriel

1 function [ fact ] = MyFactoriel( n )


2 if n==0
3 fact=1;
4 else
5 fact=n*MyFactoriel( n−1 );
6 end
7
8 function fact = MyFactoriel2( n )
9 fact=1;
10 for i=2:n
11 fact=fact*i;
12 end
13 end

Exemple

1 >> Fact 7=MyFactoriel(7)


2 Fact 7 = 5040
3 >> Fact2 5=MyFactoriel2(5)
4 Fact2 5 = 120

4
Programmation MATLAB H. LALIOUI

2.4 Classe Personne

1 classdef Person
2 properties %Fields
3 name
4 born
5 gender
6 end
7 methods
8 function obj=Person(name, born, gender) %Constructor
9 obj.name=name;
10 obj.born=born;
11 obj.gender=gender;
12 end
13 function age=Age(person) %Method Age
14 age=datetime('now').Year−person.born;
15 end
16 end
17 end

Exemple

1 >> P=Person('Mohamed',2000,15)
2 Error using Person (line 14)
3 Argument must, respectively, be of type: char, bouble and char
4
5 >> P=Person('Mohamed',2000,'male')
6
7 P =
8
9 Person with properties:
10
11 name: 'Mohamed'
12 born: 2000
13 gender: 'male'
14
15 >> agePerson=Age(P)
16
17 agePerson =
18
19 21
20
21 >> AgePerson=P.Age
22
23 AgePerson =
24
25 21

5
Programmation MATLAB H. LALIOUI

3 Boucles et Structures Conditionelles

3.1 Structure Conditionnelle: If et Switch

Structure If

1 yourNumber = input('Enter a number: ');


2 if yourNumber < 0
3 disp('Negative')
4 elseif yourNumber > 0
5 disp('Positive')
6 elseif yourNumber == 0
7 disp('Zero')
8 else
9 disp('Error')
10 end

Structure Switch

1 D = '21−Dec−2020';
2 [DayNumber,DayName] = weekday(D,'long');
3 switch DayName
4 case 'Monday'
5 disp('Start of the work week')
6 case 'Tuesday'
7 disp('Day 2')
8 case 'Wednesday'
9 disp('Day 3')
10 case 'Thursday'
11 disp('Day 4')
12 case 'Friday'
13 disp('Last day of the work week')
14 otherwise
15 disp('Weekend!')
16 end

6
Programmation MATLAB H. LALIOUI

3.2 Boucles: For et While

1 A = zeros(5,10);
2 for m = 1:5
3 for n = 1:10
4 A(m, n) = 1/(m + n − 1);
5 end
6 end
7 A
8 N = 1;
9 NFactorial = 1;
10 while N ≤6
11 NFactorial = NFactorial * N;
12 N = N + 1;
13 end
14 NFactorial
15 if factorial(6)6=NFactorial
16 message=error('Error: Wrong Factorial(%d) Result',N−1)
17 else
18 message=sprintf('Right Factorial(%d) Result',N−1)
19 end

7
Programmation MATLAB H. LALIOUI

4 Quelques applications

4.1 Script Statistique Descriptive

1 clear;
2 clc;
3 Vector=[2 2 1 4 5 8 7 3];
4 M=sum(Vector)/length(Vector);
5 IsMeanTrue='False';
6 if M==mean(Vector)
7 IsMeanTrue='True';
8 end
9 Sigma=(sum((Vector−M).ˆ2)/(length(Vector)))ˆ0.5;
10 SigmaAdjusted=(sum((Vector−M).ˆ2)/(length(Vector)−1))ˆ0.5;
11 IsSigmaTrue='False';
12 if SigmaAdjusted==std(Vector)
13 IsSigmaTrue='True';
14 end
15 Skewness=(sum((Vector−M).ˆ3)/(length(Vector)*Sigmaˆ3));
16 IsSkewnessTrue='False';
17 if Skewness==skewness(Vector)
18 IsSkewnessTrue='True';
19 end
20 %Example 50 Marks
21 VectorMarks=[1 1.25 1.5 1.75 2 2.3 4 4 5 8 8 8 8 8 8 8.5 9 9.25 9.25 9.5 9.5 ...
22 9.5 9.5 9.75 10 10 10 10.5 12 12 13 13.5 14 14 14.25 14.75 14.75 15 18];
23 figure(1);
24 histogram(VectorMarks);
25 xlabel('Marks');
26 ylabel('Students');
27 title('Histogram');
28 MMarks=mean(VectorMarks);
29 SigmaAdjMarks=std(VectorMarks);
30 SkewnessMarks=skewness(VectorMarks);
31 %Variance Covariance Nested function

8
Programmation MATLAB H. LALIOUI

4.2 Fonction Décomposition Binaire et Fonctions Trie

Fonction Décomposition Binaire

1 function [ y ] = MyDec2Bin( x )
2 if size(x,1)==1 && size(x,2)==1 && isinteger(x)
3 i=1;
4 z=x;
5 s(1,1)=1;
6 while z/26=0
7 if mod(z,2)==0
8 s(1,i)=0;
9 z=z/2;
10 else
11 s(1,i)=1;
12 z=(z−1)/2;
13 end
14 i=i+1;
15 end
16 y=num2str(s(1,i−1:−1:1));
17 else
18 error('Arguments! Integer or 1x1 array');
19 end
20 end

Exemple :

1 >> y=MyDec2Bin( 2021 )


2 Error using MyDec2Bin (line 18)
3 Arguments! Integer or 1x1 array
4
5 >> intmax('int16')
6
7 ans =
8
9 32767
10
11 >> y=MyDec2Bin( int16(2021) )
12
13 y =
14
15 1 1 1 1 1 1 0 0 1 0 1
16
17 >> d=dec2bin(2021)
18
19 d =
20
21 11111100101

9
Programmation MATLAB H. LALIOUI

Fonction Trie

1 function [ y ] = MySort( x )
2 if isa(x,'double') && size(x,1)==1
3 i=1;
4 while (i≤length(x)−1)
5 if (x(i+1)<x(i))
6 s=x(i);
7 x(i)=x(i+1);
8 x(i+1)=s;
9 if i>1
10 i=i−2;
11 end
12 end
13 i=i+1;
14 end
15 y=x;
16 else
17 error('Enter a Vector of Type Double')
18 end
19 end

Fonction Trie Optimale

1 function [ y ] = MySortOptimal( x )
2 if size(x,1)==1 && isa(x,'double')
3 y(1,1)=x(1);
4 for j=1:length(x)
5 pos=1;
6 for i=1:length(x)−1
7 if x(i+1)<x(pos)
8 pos=i+1;
9 end
10 end
11 y(1,j)=x(pos);
12 x(pos)=[];
13 end
14 else
15 error('Enter a Vector of Type Double')
16 end
17 end
18 %Task 2: MySortOptimal1

Exemple :

1 >> x=[8 4 2 1 13 7 84 9 5 6 3 9 25 4 86 12 15];


2 >> y=MySort( x )
3 y =
4 1 2 3 4 4 5 6 7 8 9 9 12 13 ...
15 25 84 86
5 >> x1=rand(1,2500);
6 >> tic,y1=MySort( x1 ),toc;
7 . . . Elapsed time is 0.783647 seconds.
8 >> tic,y1=sort( x1 ),toc;
9 . . . Elapsed time is 0.041796 seconds.
10 >> tic,y1=MySortOptimal( x1 ),toc;
11 . . . Elapsed time is 0.144944 seconds.

10
Programmation MATLAB H. LALIOUI

4.3 Classe Matrice

1 classdef Matrix
2 properties
3 M
4 end
5 methods
6 function ObjMatrix = Matrix(M)
7 if isa(M,'double')==0
8 error('Argument must be of type bouble');
9 else
10 ObjMatrix.M=M;
11 end
12 end
13 function [r,c] = Dimension(MatrixM)
14 if isa(MatrixM,'Matrix')==0
15 error('Give a Matrix argument');
16 else
17 r=size(MatrixM.M,1);
18 c=size(MatrixM.M,2);
19 end
20 end
21 function [Boolean] = MyIsSymmetric(MatrixM)
22 Boolean=true;
23 if isa(MatrixM,'Matrix')==0
24 error('Give a Matrix argument');
25 else
26 [r,c]=Dimension(MatrixM);
27 if r6=c
28 error('Give a nxn Matrix');
29 else
30 for i=1:r
31 for j=1:c
32 if MatrixM.M(i,j)6=MatrixM.M(j,i)
33 Boolean=false;
34 break;
35 end
36 end
37 end
38 end
39 end
40 end
41 function [Boolean,Type] = MyIsTriangularDiagonalNull(MatrixM)
42 Boolean=false;
43 Type=num2str(nan);
44 if isa(MatrixM,'Matrix')==0
45 error('Give a Matrix argument');
46 else
47 [r,c]=Dimension(MatrixM);
48 if r6=c
49 error('Give a nxn Matrix');
50 else
51 s1=0;
52 s2=0;
53 for i=1:r−1
54 s1=s1+sum(diag(MatrixM.M,i));
55 s2=s2+sum(diag(MatrixM.M,−i));
56 end
57 if s1==0 && s2==0
58 if sum(diag(MatrixM.M))6=0
59 Boolean=true;
60 Type='Diagonal Matrix';
61 else
62 Boolean=true;
63 Type='Null Matrix';
64 end

11
Programmation MATLAB H. LALIOUI

65 elseif s1==0
66 Boolean=true;
67 Type='Lower Triangular Matrix';
68 elseif s2==0
69 Boolean=true;
70 Type='Upper Triangular Matrix';
71 end
72 end
73 end
74 end
75 function MatrixM = Addition(MatrixM1,MatrixM2)
76 if isa(MatrixM1,'Matrix') && isa(MatrixM2,'Matrix')
77 [r1,c1] = Dimension(MatrixM1);
78 [r2,c2] = Dimension(MatrixM2);
79 if r16=r2 | | c16=c2
80 error('Rows or Columns not fitting');
81 else
82 MatrixM=Matrix(MatrixM1.M+MatrixM2.M);
83 end
84 else
85 error('Give a Matrix arguments');
86 end
87 end
88 function MatrixM = Multiplication(MatrixM1,MatrixM2)
89 if isa(MatrixM1,'Matrix') && isa(MatrixM2,'Matrix')
90 [r1,c1] = Dimension(MatrixM1);
91 [r2,c2] = Dimension(MatrixM2);
92 if r16=c2 | | c16=r2
93 error('Rows or Columns not fitting');
94 else
95 MatrixM=Matrix(MatrixM1.M*MatrixM2.M);
96 end
97 else
98 error('Give a Matrix arguments');
99 end
100 end
101 function MatrixM = Eliminate(MatrixM1,R,C)
102 if isa(MatrixM1,'Matrix') && size(R,1)==1 && size(R,2)==1 && ...
size(C,1)==1 && size(C,2)==1
103 [r,c] = Dimension(MatrixM1);
104 if r==1 && c==1
105 error('Give at least 2x2 Matrix');
106 else
107 Content=MatrixM1.M;
108 Content(R,:)=[];
109 Content(:,C)=[];
110 MatrixM=Matrix(Content);
111 end
112 else
113 error('Give a Matrix arguments and/or 1x1 Parameters');
114 end
115 end
116 function d = Determinant(MatrixM)
117 if isa(MatrixM,'Matrix')==0
118 error('Give a Matrix argument');
119 else
120 [r,c] = Dimension(MatrixM);
121 if r6=c
122 error('Give a nxn Matrix');
123 else
124 Content=MatrixM.M;
125 if r==1
126 d=Content(1,1);
127 else
128 d=0;
129 for i=1:r
130 if mod(i,2)6=0
131 d=d+Content(1,i)*Determinant(Eliminate(MatrixM,1,i));

12
Programmation MATLAB H. LALIOUI

132 else
133 d=d−Content(1,i)*Determinant(Eliminate(MatrixM,1,i));
134 end
135 end
136 end
137 end
138 end
139 end
140 %Task3: MyTranspose, MyComatrix, MyInverse
141 %Task4: Norm 1 2 p and Inf
142 end
143 end

Exemple

1 >> M=Matrix([7 4 5;1 3 2;6 9 1])


2
3 M =
4
5 Matrix with properties:
6
7 M: [3x3 double]
8
9 >> M.M
10
11 ans =
12
13 7 4 5
14 1 3 2
15 6 9 1
16
17 >> [r,c]=Dimension(M)
18
19 r =
20
21 3
22
23
24 c =
25
26 3
27
28 >> Symmetric=MyIsSymmetric(M)
29
30 Symmetric =
31
32 0
33
34 >> [TriDiaNul,Type] = MyIsTriangularDiagonalNull(M)
35
36 TriDiaNul =
37
38 0
39
40
41 Type =
42
43 NaN
44
45 >> Add=Addition(M,M)
46
47 Add =
48
49 Matrix with properties:
50

13
Programmation MATLAB H. LALIOUI

51 M: [3x3 double]
52
53 >> Add.M
54
55 ans =
56
57 14 8 10
58 2 6 4
59 12 18 2
60
61 >> Multip=Multiplication(M,M)
62
63 Multip =
64
65 Matrix with properties:
66
67 M: [3x3 double]
68
69 >> Multip.M
70
71 ans =
72
73 83 85 48
74 22 31 13
75 57 60 49
76
77 >> Elim=Eliminate(Multip,2,2)
78
79 Elim =
80
81 Matrix with properties:
82
83 M: [2x2 double]
84
85 >> Elim.M
86
87 ans =
88
89 83 48
90 57 49
91
92 >> D=Determinant(Add)
93
94 D =
95
96 −848

14
Programmation MATLAB H. LALIOUI

4.4 Exercices

1- Programmer une fonction MATLAB VarCov() qui retourne la matrice symmétrique de variance
covaraiance entre les colonnes d’une matrice données, puis comparer avec la fonction MATLAB
prédéfinie cov(matrice):

MatriceVarCov=VarCov( Matrice )

2- Programmer une fonction MATLAB SuperSort() meilleur que MySort() et MySortOptimal()


en terme de temps d’exécution:

VecteurSuperTrie=SuperSort( Vecteur )

3- Programmer une fonction MyInverse() qui retourne l’inverse d’une matrice donnée, puis comparer
avec la fonction MATLAB prédéfinie inv(matrice):

Inverse=MyInverse( Matrice )

4- Programmer une fonction MyNormP() qui retourne la norme matricielle P d’une matrice donnée,
puis comparer avec la fonction MATLAB prédéfinie norm(matrice,p):

NormP=MyNormP( Matrice )

Travaux Pratiques d’Analyse Numérique avec MATLAB


Première Science: Programmation MATLAB

hafid.lalioui@edu.uiz.ac.ma

15

Vous aimerez peut-être aussi