partie 1
Présentation :
Matlab (MATrix LABoratory) est un logiciel pour effectuer des calculs numériques. Il a été conçu pour faciliter le traitement des matrices. Présentation :
Avant d'entammer cette présentation , j'aimerai préciser , qu'un tutoriel bien expliqué détaillé n'existe pas ,alors ce travail est fait pour les débutants ceux qui n'ont jamais entendu parler de MATLAB ,et pour une raison ou une autre ils se sont decidé d'affronter le destin de l'apprendre , alors dans cette partie qu'on abordera tous c'est un petit tutoriel qui vous servira de référence , comme première partie , et la deuxième partie des exercices avec solutions , c'est un travail personnel au bout du doigt jusqu'aux angle , wallah .
L'essentiel, c'est de le lire en entier dans l'ordre. Après, ça passe tout seul et vous vous étonnerez bientôt de ce que vous êtes capable de faire !
L'essentiel, c'est de le lire en entier dans l'ordre. Après, ça passe tout seul et vous vous étonnerez bientôt de ce que vous êtes capable de faire !
Intérêts :
Programmation infiniment plus rapide pour le calcul et pour l’affichage ,une librairie très riche avec la possibilité d’inclure un programme en C/C++ , le langage interprété ne présente pas de compilation donc pas d’attente pour compiler , il présente aussi la particularité d’exécuter du code en dehors du programme ainsi que le code est facile à comprendre et très lisible, une aide très bien faite et comporte un aide et des exemples
Inconvénients :
le principale inconvénient c'est qu'il est payant (équivalent gratuit scilab) la vitesse de calcul moins rapide qu’en C/C++ , (personnellement je ne ressent pas trop la différence vu que seulement des petites secondes , ses application auto-exécutable peu pratique ou plutôt trop oublié
vu que je m'adresse aux débutant en matière , les experts ne sont pas bienvenu , allez améliorer ailleurs vos compétences , sauf si vous avez des suggestions ou un aide qui enrichisera le contenu :) .
une petite familiarisation avec l'interface , à signaler , l'interface peut être personnalisée , le but étant de vous satisfaite petit bon à rien :) ; et Oui par simple jeu de sourie vous pouvez modifier l'emplacement , des différents fenêtre . la petite flèche en raccourci ,comme celle sur des raccourcis de votre bureau peut isoler la fenetre de la fenetre principale , et le contraire ,patati patata ....

- Command window : Permet d’exécuter des commandes en dehors de programme et affiche les résultats.
Exemple : taper 1+1 - Current Directory : Contenu du répertoire courant où doit se situer vos programmes.
- Workspace : Affiche l’ensemble des variables utilisés.
- Commande History : Permet de visualiser les dernières commandes exécutées. Il est possible de faire glisser ces commandes vers la fenêtre de commande. On peut aussi y accéder en appuyant sur flèche haut ou pour des commandes plus anciennes en tapant la première lettre de l’expression puis flèche haut
- Choix du répertoire courant. c'est le dossier où doit se situer vos programmes (fichiers *.m). Vous pouvez mettre vos programmes dans un autre dossier mais dans ce cas il faut l'inclure dans File >> Set Path
Devellopement :
L'éditeur Matlab est l'interface qui permet d'écrire les fonctions. Il peut être lancé en tapant "edit NomDeFichier" dans le command window ou en cliquant sur File>>New>>M-file.
Vous pouvez réaliser soit des scripts soit des fonctions:
•Les scripts sont des programmes sans argument dont le contenu s'exécute comme si il était copié dans le command window. Les scripts ont accès aux variables stockées dans le workspace. Aucun entête n'est nécessaire.
Pour l'exécuter, il suffit de taper le nom du fichier dans le command window
•Les fonctions sont des programmes qui reçoivent des arguments en entrée et qui renvoie un ou plusieurs résultats en sortie. Pour réaliser une fonction, il faut que la première ligne du fichier soit :
function [output1,output2, ...]=NomDeFonction(Input1,Input2,...)
Le fichier contenant la fonction doit avoir le même nom que celle-ci. Il est cependant possible d'insérer plusieurs fonctions dans un fichier mais celles-ci ne seront accessible qu'à l'intérieur même du fichier.
Les commentaires insérer dans les premières lignes (Signalés avec un "%") seront afficher lorsque vous taperez "help NomDeFichier". Voici un exemple de fonction réalisant la somme et la différence de 2 nombres :
:function [s,d]=sumdif(a,b)
% Effectue la somme et la différence de deux nombres
%
% Syntaxe :
% [s,d]=sumdif(a,b);
%
% Sorties :
% s somme
% d différence
s=a+b;
d=a-b;
ce n'est qu'un exemple , vous pouvez devellopez compéhension ensuite votre compréhension , ne paniquez surtout pas on verra vers la fin des exemple banale qui mériterons votre sourrire :D ... maintenant au travail que les vrais choses commencent :
FOnction de bases
alors que dans matlab , un monde de fonctions avec un aide et exemple existe en tapant la commande help help dans l'éditeur , mais comme c'est vaste , je vous présente les fonctions de base pour une belle initiation :) , toujours pas de panique avec la pratqiue tout deviendra un jeu d'enfants , promi ;)
- help NomDeFonction : Permet d'obtenir l'aide sur une fonction (dans la command window).
- doc NomDeFonction : Ouvre la fenêtre d'aide de Matlab sur la fonction .
- save NomDeFichier/load NomDeFichier : Permet d'enregistrer/charger les variables courantes (Il est possible de n'enregistrer que certaines variables en les ajoutant à la suite).
- commande; : Exécute la commande sans afficher le résultat.
commande : (sans ";") Exécute la commande et affiche le résultat. - i=1; : Affecte 1 à i.
- plot(sin(2*pi*5*(1:100)/100)) : Affiche une sinusoïde de 5 périodes sur 100 points
- Boucles for :
( for i=debut:pas:fin Permet d'exécuter une boucle en faisant varier i de debut à fin par pas de pas.) - Boucles while :
- Blocs if :
Opérateurs de comparaison :
- == : Egal
- ~= : Différent
- <= : inférieur ou égal
- >= : Supérieur ou égal
- &&: Et
- || : Ou
- ~ : Contraire
- true : Equivalent à 1
- false: Equivalent à 0
- why Répond à toute sorte de question comme pourquoi vous êtes sur terre ou pourquoi vous n'êtes pas chez vous en train de regarder la télé?
maintenant qu'on a fait un passage en revue des fonctions de bases , vous avez le droit absolu de poser la question , ou est ce que vous nous emmène ?, eh bein , je ne sais rien , vous êtes au milieu de l'echelle , patience vous avez dépassé la partie la plus difficile ;) , et pour vous poussez vers l'avant , nous allons entammer la partie qui est mieux devellopé que dans n'importe quel logiciel c'est le calcul et la manipulation des matrices :)
La manipulation de matrice est particulièrement bien pensée sous Matlab. Voici quelques exemples de commandes pour créer des matrices :
- a=[1 2 3;4 5 6] : créé une matrice de 2 lignes et 3 colonnes contenant les éléments 1 2 3 sur la première ligne et 4 5 6 sur la deuxième.
- b=[1 ;2 ;3] : Créé un vecteur colonne valant 1 2 3.
- a=[1,2,3] (identique a =[1 2 3]) : créé le vecteur ligne 1 2 3 .
- b=[a;1 2 3] : Créé une matrice dont la première ligne vaut a et la deuxième ligne vaut 1 2 3.
- a=1:5 : Créé un vecteur valant 1 2 3 4 5.
- a=1:2:10 : Créé un vecteur valant 1 3 5 7 9.
- a=[1 3:5] : Créé un vecteur valant 1 3 4 5.
- a=(1:3)’ : donc réalise un vecteur colonne valant 1 2 3 (' permet de faire la transposée).
- a=zeros(3) : Créé une matrice de 0 de taille 3x3.
- a=ones(2,4) : Créé une matrice de 1 de taille 2x4.
- a=zeros(2,3,4) : Créé une matrice de 0 de taille 2x3x4.
- a=linspace(1,10,5) Créé un vecteur de 5 éléments linéairement réparti entre 1 et 10.
- a=logspace(1,10,5) Créé un vecteur de 5 éléments logarithment réparti entre 1 et 10.
1 2 3 4 5 6 7 8 9
2 4 6 8 0 1 2 3 4
2 2 2 2 2 2 2 2 2
Solution : (Sélectionner pour voir la solution)
au fur et à mesure je vous ferais part des exercice résolu sous matlab :) , et ceci pour que vous y trouvez tous votre joie de continuer , pour ceux qui veulent restez nul et bein , la solution la plus simple c'est de lire la solution , ça ne vous aidera à rien juste que vous serez coinçé et que vous donnerez une mauvaise image à mon cours :( !!!!!
Prenons A=[1+i 2+i 0;1 2 3;1 i 0] une matrice complexe et B=[1 2 3;4 5 6;7 8 9].
- A' : Adjoint de A (Conjugué de la transposée).
- A.' : transposée de A.
- C=B^-1; : Inverse de B.
- C*B : Produit matriciel.
- C.*B : Produit terme à terme.
- C+B : Somme.
- C^2 : C*C (puissance matricielle).
- C.^B : Puissance terme à terme.
- C./B : division terme à terme.
- C\B : équivalent à B^-1*C mais plus rapide car ne calcul pas l'inverse de B.
- B/C : Equivalent à (C'\B')'.
Exemple : Soit a un vecteur quelconque (ex. a=rand(1,100)) et x un reel (ex x=2;)
En utilisant les opérations vectorielles, écrire de façon la plus concise possible une séquence d’instructions qui évalue le polynôme
Solution : (Sélectionner pour voir la solution)
pour que votre programmation soit plus cohérente , essayer de comprendre ceci :
La première chose à comprendre pour afficher les résultats est l'utilisation du ";". Si celui-ci est omis, Matlab affiche la sortie de la fonction. Par exemple, soit la fonction :
- f(1); : Affiche 3 (Résultat de la ligne B=x+2)
- f(1) : Même chose mais affiche en plus la première sortie de la fonction, c'est à dire A qui vaut 2
- [A,B]=f(1) : Affiche les deux sorties A=2 et B=3
- disp(f(1)) : Affiche la première sortie sans ligne blanche avant et apres.
- disp('texte') : Affiche "texte"
- disp(['Résultat : ' num2str(f(1))]) : Affiche : Résultat : 2
- fprintf('hello %d - %f\n',1,2); Affiche : hello 1 - 2.000000
- fprintf('hello %d %f\n',[1 2 3;4 5 6]); Affiche :
hello 1 4.000000
hello 2 5.000000
hello 3 6.000000 - openvar('A') Ouvre le "variable editor" pour la variable "A"
reste à signaler que vous pourrez être sélectif , il y a des choses que dont vous aurez besoin , plus que d'autres , à vous de voir ,vous êtes les maitres de vous même :d j'en doute pas , mais ca n'empêche pas que t'es toujours un con , ^^ allons toujours en avant :) et faisons le point sur un élément nouveau :
LES COURBES :
Soit les listes : x=[.1:.1:1]; et y=[1:10].^2;
- plot(y) : Dessine y avec une ligne continue (l'axe de x correspond aux indices)
- plot(x,y) : Dessine y en fonction de x
- plot(y,'r+') : Dessine y en rouge avec des "+" pour chaque points
- plot(x,y,x,x+y) : Dessine y en fonction de x (bleu) et x+y en fonction de x(vert)
- bar(y) : Affiche y sous forme d'histogramme
- semilogx(...) : Même chose que plot à l'exception que l'axe des x est représenté par une échelle logarithmique base 10
- semilogy(...) : Même chose que plot à l'exception que l'axe des y est représenté par une echelle logarithmique base 10
- loglog(...) : Même chose que plot à l'exception que les deux axes sont représentés par une échelle logarithmique base 10
- figure : Ouvre une nouvelle figure
- subplot(2,3,5); plot(y) Décompose la figure en 6 parties (2 lignes, 3 colonnes) et affiche y sur la 5ème partie (ligne 2 colonne 2)
- I=rand(25);imshow(I) Affiche une image de 25x25 pixels dont les niveaux de gris sont définis aléatoirement.
Pour une matrice I réel, 0 (ou moins) correspond à un pixel noir et 1 (ou plus) correspond à un pixel blanc.
Si I est en uint8, 0 correspond au noir et 255 correspond au blanc (même principe pour le uint16).
Pour une matrice I de dimension X x Y x 3 imshow(I) affiche l'image en RGB (rouge vert bleu). - image(I) Même principe que imshow mais plus pratique pour afficher les axes et remplir l'écran. Pour le niveau de gris 0 correspond au noir et 255 au blanc même pour des réels.
Figures et Axes :
Une "figure" correspond à une fenêtre. Les dessins de courbes s’effectuent dans un "axes" (correspondant à un panneau à l'intérieur de la fenêtre). Une figure peut éventuellement comporter plusieurs "axes" (ex. subplot). Lorsque vous utiliser une commande d'affichage (ex. : plot(y)), vous affichez le résultat dans la figure et l'axes courant (c'est à dire le dernier ouvert).
Figure et axes sont des classes et ont donc certaines propriétés (modifiables en lignes de commandes) que vous pouvez consulter en regardant l'aide sur "figure properties" et "axes properties". Vous pouvez également modifier ces propriétés dans la fenêtre en allant sur edit >> figure properties et edit >> axes properties.
Un axis correspond à un graphique en 3 dimensions (La 3ème dimension est souvent caché). Vous pouvez régler les limites de visibilité de chaque axes la position des ticks et leur contenu, le titre des axes etc.
Quelques commandes utiles pour personnaliser l'affichage :
•h=figure; h est l'objet de la nouvelle figure
•gcf; objet de la figure courante
•a=axes; creer un nouvelle axes et l'affecte à a.
•gca; objet de l'axes courant
•set(gca,) axis permet de modifier les propriétés de l'axes, xlim
•cla
•clf
partie 2 :
ouvrez votre logiciel matlab
cliquez sur "new"
choisissez : m-file
cad un fichier Matlab , ca sert à tapez votre programme, votre tout premier programme :)
je vous suggère de commencer par entrer ce petit exercice , on prendra l'habitude d'écrire nos programmes en bleu , la solution sera caché ,vous devriez la selectionnez :
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
copier le dans ton editeur !
pour exécuter "F5" , votre programme a besoin en un premier temps d'etre sauvegardé sous un nom de votre choix , le résultat est affiché dans "le command windows" .
résultats : selectionnez sous dessous pour la visualisez :
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
explication :
la matrice que nous avons fait entrer , est une matrice carré , chaque ligne se termine dès que ; est atteint , pour les vecteurs même principe sauf qu'on pas besoin du "point virgule" j'imagine que maintenant vous savez comment entrez vos matrice ca n'a rien de secret , passons maitenant à quelque calcul matriciel élémentaire , servez vous de la premiere partie pour faire ce que vous chante , mais comme même on continuera de vous guider bande de con ;) , copiez ce programme en bleu dans votre programme ou ouvrez un nouveau c'est pas mon problème ,
A = [1 2 4 ;5 3 8 ;8 1 0]
B=ones(3)
A+B
A^2 % c'est le carré de la matrice
A^-1 % calcul l'inverse de A
les resultats sont donc :
A =
1 2 4
5 3 8
8 1 0
B =
1 1 1
1 1 1
1 1 1
ans = % A+B
2 3 5
6 4 9
9 2 1
ans = % le carré de A
43 12 20
84 27 44
13 19 40
ans = % l'inverse de A
-0.1818 0.0909 0.0909
1.4545 -0.7273 0.2727
-0.4318 0.3409 -0.1591
:) comme promi ce sont simple , il suffit maintenant de commencer à manipuler , faites vos miels :)
passons maintenant à un autre petit défiqui necessite de l'observation
B = [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]
A = B(:,[1 3 2 4])
le résultat est :
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
explication : on observe que la deuxieme et la troisieme colonne sont permutée :) .
dans Matlab il existe beaucoup d'astuce , que je vous conseille de passer en revue , histoire de s'en souvenir en cas de besoin et vous l'aurez tout simplement avec une petite recherche dans le "HELP" :D
jusqu'ici vous devez savoir entrer une matrice , calculer la somme , la soustraction le produit , la matrice inverse et diverses manipulation .
Pour l'affichage , à force d'exécuter le tableau deviens encombré alors je rapelle que la comande "clc" pour effacer le tableau , "clear all " pour effacer les mémoirs du programme :) !
donc passons maintenant à un stade un peu plus poussé qu'avant , pour ceux qui se sentent à l'aise et un peu dérangé par la lenteur :D patience , c'est comme ça le niveau débutant :D et pour ceux se sentent toujours cons , ce n'est pas grave ,avec le temps vous acquierai plus de notions et de mécanisme !!
Pour résoudre le système AX=B , A,B deux matrices données , il ya des conditions mathématique que vous devriez connaitre à savoir l'homogénéité , A est il inversible ou non etc etc... !
dans Matlab :
X = A\B solution de matrix équation AX = B. marix est matrice an anglais !
X = B/A solution de matrix équation XA = B.
dans le code Matlab , un code matlab est un programme voyons ;)
A=[ 0 6 4 0; 3 9 1 6 ;5 8 2 1 ; 2 1 1 1 ]; % entrer la matrice .
B=[4 1 6 2; 3 0 1 6 ;4 2 2 1 ; 2 1 3 1]; %
X=A\B % solution de l'équation A X=B
Y=B/A % solution de l'équation YA=B
A*X % pour vérification : il doit être égal à B
Y*A % pour vérification : il doit être égal à B
jusqu'ici vous devez savoir entrer une matrice , calculer la somme , la soustraction le produit , la matrice inverse et diverses manipulation .
Pour l'affichage , à force d'exécuter le tableau deviens encombré alors je rapelle que la comande "clc" pour effacer le tableau , "clear all " pour effacer les mémoirs du programme :) !
donc passons maintenant à un stade un peu plus poussé qu'avant , pour ceux qui se sentent à l'aise et un peu dérangé par la lenteur :D patience , c'est comme ça le niveau débutant :D et pour ceux se sentent toujours cons , ce n'est pas grave ,avec le temps vous acquierai plus de notions et de mécanisme !!
Pour résoudre le système AX=B , A,B deux matrices données , il ya des conditions mathématique que vous devriez connaitre à savoir l'homogénéité , A est il inversible ou non etc etc... !
dans Matlab :
X = A\B solution de matrix équation AX = B. marix est matrice an anglais !
X = B/A solution de matrix équation XA = B.
dans le code Matlab , un code matlab est un programme voyons ;)
A=[ 0 6 4 0; 3 9 1 6 ;5 8 2 1 ; 2 1 1 1 ]; % entrer la matrice .
B=[4 1 6 2; 3 0 1 6 ;4 2 2 1 ; 2 1 3 1]; %
X=A\B % solution de l'équation A X=B
Y=B/A % solution de l'équation YA=B
A*X % pour vérification : il doit être égal à B
Y*A % pour vérification : il doit être égal à B
attention :Une verification est necessaire !! au fur et à mesure quand vous commencer à programmer , l'inspiration vous guidera , un code matlab cohérent doit être lisible , bien commenté, bien présenté et bref.
Fonction matricielle :
A = magic(5) % crée matrice magique dont la somme sur les lignes et sur les cloones les diago dont égaux
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
A = rand(5) % génére une matrice aléatoire d'element contenu entre zéro et un
0.4966 0.6602 0.7271 0.7027 0.7948
0.8998 0.3420 0.3093 0.5466 0.9568
0.8216 0.2897 0.8385 0.4449 0.5226
0.6449 0.3412 0.5681 0.6946 0.8801
0.8180 0.5341 0.3704 0.6213 0.1730
A = [12 62 93 -8 22];
B = diag(A) % mettre les élts en diagonale
B =
12 0 0 0 0
0 62 0 0 0
0 0 93 0 0
0 0 0 -8 0
0 0 0 0 22
B = diag(A,-1) % à vous de voir ;) même mécanisme !!
maintenant que vous savez ce que c'est le rand et ones bien évidement ; ce code est pour vous montrer comment concaténer de matrice A et B
A = ones(2, 5) * 6; %
B = rand(3, 5); %
C = [A; B] %
voici d'autre exemples de concaténation , que je vous laisse le soin de découvrir sous forme de petit code :)A = ones(2, 5) * 6 %
B = rand(3, 5) %
C = cat(1, A, B) % Concatenation selon premiere dimension
C = vertccat(A, B) % Concatenation verticale
B = rand(3, 5) %
C = cat(1, A, B) % Concatenation selon premiere dimension
C = vertccat(A, B) % Concatenation verticale
****************
A = magic(5)
A(4:5,:) = [] % exclut la 4 eme et la 5éme ligne.
B = magic(3)*100
B = magic(3)*100
C = horzcat(A,B) % Horizontale concaténations de A et B
*****************
A=eye(2) % matrice de test , c'est une matrice unitéB = repmat(A,3,4) % fonction qui a reproduit A , 3fois en ligne et 4 fois en colonne
********************
A = [2 6 9; 4 2 8; 3 0 1];
linearindex = sub2ind(size(A), 3, 2)
[row col] = ind2sub(size(A), 6)je sais les code devien de plus en plus dure , ne lachez pas le fil , c'est à la vrais programmation ou vous allez vous sentir à l'aise :) et puis ces codes en dessus c'est toujours pour comprendre , et si vous avez une ambiguité quelque part , allez à ma page d'acceuil , un petit message , et je vous aiderai dés que je serais libre !!
revenons à nous moutons , et analysons les petits codes suivants :
- x = ones(1,8);
n = length(x) % c essentiel pour la programmation - n = ndims(A)
- a = magic(4)
a(:,:,2) = a'
a(:,:,1)
a(:,:,2)
numel(a) - m = size(rand(2,3,4),2) % essentiel aussi il faut le comprendre :D
je donne un exemple parce que c'est la premiere fois :)
dans la "command wondows" tapez : help isa
une autre fenêtre s'affiche indiquant la syntaxe de isa sa défition ou parfois l'algorithme associé , et enfin un exemple :)
les autres fonctions à voir :
SI VOUS ARRIVEZ A COMPRENDRE CES FONCTIONS ,SAVOIR LES UTILISER ,CONGRATULATIONS VOUS ËTES DES EXPERTS EN MATRICE ET EN PROGRAMMATION MATRICIELLE ,TOUT COMME MOI :D OU PEUT ÊTRE MIEUX , CA ME GÊNE PAS DU TOUT ;)
bon maintenant j'ai plus le droit de vous appelez les petits cons ; mais ne prennez pas la grosse tête le chemin est toujours ouvert pour d'autres conquêtes :)
dans la premiere partie nous avons vu des exemples , des boucles WHILE ,IF et FOR .
maintenant vous pouvez donnez un peu d'espace à votre imagination , pour vous aider plongeons un peu dans ces exercices résolu :


