Contents
- Introduction à Matlab
- accès aux valeurs, index (ligne,colonne)
- L'opérateur ":"
- L'opérateur []
- Transpose '
- Produit vectoriel
- Produit scalaire
- Produit matriciel
- Multiplication éléments à éléments, l'opérateur '.'
- Inversion inv()
- SVD
- Itération (for)
- Affichage de points et courbes (Plot)
- Affichage de droites
- Résolution de système d'équation simple avec SVD
Introduction à Matlab
créer une matrice, on ajoute un point virgule pour ne pas afficher le résultat de la commance
M = [1 2 3 4 5 6 7 8 9] disp(size(M))
M = 1 2 3 4 5 6 7 8 9 3 3
accès aux valeurs, index (ligne,colonne)
M(1,1)=18
M = 18 2 3 4 5 6 7 8 9
L'opérateur ":"
%L'opérateur : permet d'acceder à toute une ligne (ou colonne), on peut %l'utiliser pour accéder ou modifier toute une ligne (ou colonne) M(4,:)=9 %ajoute une nouvelle ligne et inscrit la valeur 9 %il permet aussi de générer des suites disp(1:5) % 1 à 5 disp(1:0.5:2) %1 à 2 avec un pas de 0.5
M = 18 2 3 4 5 6 7 8 9 9 9 9 1 2 3 4 5 1 1.5 2
L'opérateur []
%L'opérateur [] efface une matrice ou peut retirer une ligne (ou colonne) M(4,:) = [] %il permet aussi de concacténer des matrices ou vecteur MMM= [M M M]
M = 18 2 3 4 5 6 7 8 9 MMM = 18 2 3 18 2 3 18 2 3 4 5 6 4 5 6 4 5 6 7 8 9 7 8 9 7 8 9
Transpose '
%Les lignes deviennent les colonnes et vice versa
M2 = M';
M
M2
M = 18 2 3 4 5 6 7 8 9 M2 = 18 4 7 2 5 8 3 6 9
Produit vectoriel
%le produit vectoriel donne un nouveau vecteur perpendiculaire au 2 vecteur %donné en argument v1 = [1 0 0]'; v2 = [1 1 0]'; v3 = cross(v1,v2); disp(v3)
0 0 1
Produit scalaire
%le produit scalaire scalaire = v1'*v3; %devrait donner 0 pour 2 vecteurs perpendiculaires disp(scalaire)
0
Produit matriciel
M*M2;
Multiplication éléments à éléments, l'opérateur '.'
M.*M2; %noter le . devant * M(:,1).*M(:,2); %multiplie les éléments de la 1ere colonne de M avec ceux de la 2iem. M.^4; %exposant, chaque éléments de M est élevé à la 4; M.*M.*M,M.^3
ans = 5832 8 27 64 125 216 343 512 729 ans = 5832 8 27 64 125 216 343 512 729
Inversion inv()
Minv = inv(M);
%multiplier une matrice par son inverse doit donner la matrice identité
disp(M*Minv)
1 0 0 -5.5511e-017 1 1.7764e-015 -1.1102e-016 0 1
SVD
[U,S,V] = svd(M);
U
S
V
%M est le produit de ces trois matrices particulières
USV = U*S*V'
M
U = -0.76366 0.64503 -0.027757 -0.33698 -0.43488 -0.83506 -0.55071 -0.62834 0.54946 S = 22.428 0 0 0 10.245 0 0 0 0.22197 V = -0.84488 0.53419 0.028619 -0.33966 -0.577 0.74276 -0.41329 -0.61782 -0.66894 USV = 18 2 3 4 5 6 7 8 9 M = 18 2 3 4 5 6 7 8 9
Itération (for)
%similaire à c++ %le produit éléments par éléments M.*M for i=1:size(M,1) %toutes les lignes for j=1:size(M,2) %toutes les colonnes M3(i,j) = M(i,j)*M(i,j); end end M3 M.*M
M3 = 324 4 9 16 25 36 49 64 81 ans = 324 4 9 16 25 36 49 64 81
Affichage de points et courbes (Plot)
clear all %efface les variables crées dans la premiere partie de l'introduction x = [-pi:0.1:pi]; %crée un vecteur qui varie entre -pi et pi avec un pas de 0.1 y = 3*sin(x); % y est le sinus de chaque valeur de x multiplié par 3 figure(1),clf %clf efface le contenu de la figure subplot(1,2,1) %subplot permet d'avoir plusieurs axes sur la meme figure plot(x,y,'b-') %consulter l'aide pour connaitre les arguments de plot title('Courbe sinus d''amplitude 3') %ajoute une titre xlabel('X') %nomme les axes ylabel('Y') axis equal subplot(1,2,2) plot(x,y,'b.') axis equal title('Points d''un sinus d''amplitude 3') xlabel('X') ylabel('Y')

Affichage de droites
%on peut facilement tracer une droite, il suffit d'avoir les 2 points aux %extrémités de la droite pts = [1 1 5 1 3 3]; figure(1),clf hold on %hold permet de ne pas effacer le contenu de la figure lorsqu'on veut superposer des points, courbes, droites p1 = pts(1,:); p2 = pts(2,:); line([p1(1,1) p2(1,1)], [p1(1,2) p2(1,2)]); %format line( [x1 x2], [y1 y2]) axis([0 6 0 6]); %réajuste les limites de l'axe pour bien voir le contenu clear all

Résolution de système d'équation simple avec SVD
%SVD permet de résoudre facilement un système d'équation, par exemple %trouver l'équation d'une droite passant par un ensemble de points Pts = [[1:10]' [1:10]' ones(10,1)]; %génère des points % Pts(:,1:2) = Pts(:,1:2)+rand(10,2)*2; %on pourrait ajouter un peu de bruit au coordonnées x,y des points %un point (x,y) passant par une droite L=(a,b,c)' doit respecter l'équation: %ax+by+c = 0 %en coordonnées homogènes, le points a la forme P=(x,y,1) (on ajoute %simplement un 1 à la fin du vecteur). %L'équation de la droite devient donc: % P'*L = 0 %si on a a une série de points en coordonnées homogènes: %Pts = [x1 y1 1 % x2 y2 1 % x3 y3 1 % x4 y4 1]; %l'équation reste la même : % Pts*L = 0 %Lorsque L est inconnu, on a un systeme de la forme Ax=0, il se résoue %facilement avec SVD Eqn = [ Pts(:,1) Pts(:,2) ones(size(Pts,1),1)]; %on aurait pu simplement écrire Eqn=Pts; [U,S,V] = svd(Eqn); %la solution est le vecteur singulier de Eqn qui correspond à la plus %petite valeur singulière. L'Algorithme SVD met les valeurs singulières %dans S en ordre décroissant. Donc c'est la derniere colonne de V qui est %la solution. L = V(:,end); %on normalise L pour avoir un vecteur normal unitaire. L = L./sqrt(L(1)^2+L(2)^2); %on peut tracer la droite en prenant un vecteur parallele à la droite, i.e %perpendiculaire au vecteur normal de la droite v = [-L(2) L(1) 0]'; %voici une droite tracer à +/-8 unitée du point centroid, centroid = mean(Pts,1); % la moyenne selon les lignes p1 = centroid+8*v'; %+8 fois le vecteur unitaire v p2 = centroid-8*v'; %-8 fois le vecteur unitaire v figure(1),clf,hold on plot(Pts(:,1),Pts(:,2),'b.') line([p1(1) p2(1)],[p1(2) p2(2)],'Color','g','Linewidth',2) %vérification de l'erreur: err = Pts*L; fprintf(1,'\r\nErreur moyenne: %0.2e',mean(err)); %matlab supporte la commande fprintf !
Erreur moyenne: -8.33e-016
