Vous êtes sur la page 1sur 34

Introduction au logiciel MATLAB Version 6 et 6.

ALIA. Med

CHAPITRE E LES EXPRESSIONS


Comme la plupart des autres langages de programmation, MATLAB fournit des expressions mathmatiques, mais la diffrence de la plupart des langages de programmation, ces expressions impliquent les matrices entires. Les modules des expressions sont : **- Variables **- Numbers **- Operators **- Functions **E.1: ..-Les variables: MATLAB n'exige aucun type dclarations ou rapports de dimension. Quand MATLAB rencontre un nouveau nom variable, il cre automatiquement la variable et assigne la quantit approprie de stockage. Si la variable existe dj, MATLAB change son contenu et, au besoin, assigne le nouveau stockage. Par exemple: num_students = 25 Cre une matrice 1-par-1 appele num_students et stocke la valeur 25 dans son simple lment. Les noms variables se composent d'une lettre, suivie de tout nombre de lettres, des chiffres, ou des soulignages. MATLAB emploie seulement les 31 premires lettres de l'alphabet pour designer les variables. MATLAB est sensible; il distingue les lettres majuscules et minuscules. A et a ne sont pas la mme variable. Pour visualiser la matrice assigne la variable, il suffit d'crire simplement le nom de la variable. ** E.2 : ..- Les Nombres: MATLAB emploie la notation dcimale conventionnelle, avec une virgule dcimale et des signes (facultatifs pour les positifs) ou sans le signe, pour des nombres. La notation scientifique emploie la lettre e pour indiquer la puissance de dix. Les nombres imaginaires emploient i ou j comme suffixe. Quelques exemples des nombres lgaux sont : 3 -99 0.0001 9.6397238 1.60210e-20 6.02252e23 1i -3.14159j 3e5i Tous les nombres sont stocks intrieurement en utilisant le format long indiqu par la norme point mobile. Les nombres point mobile ont une prcision finie d'approximativement 16 chiffres dcimaux significatifs et d'une gamme finie approximativement de 10.^-308 10.^308. **E.3 : ..- Les oprateurs: Les expressions emploient les oprateurs arithmtiques familiers et les rgles de priorit. + Addition ; - Subtraction ; * Multiplication / Division ; \ Left division ; ^ Power ' Complex conjugate transpose; ( ) Specify evaluation order **E.4 : ..- Les fonctions: MATLAB fournit un grand nombre de fonctions mathmatiques lmentaires standard, y compris l'abs, le sqrt, l'exp, le sinus,... Le calcul de la racine carre ou du logarithme d'un nombre ngatif n'est pas une erreur ; le rsultat est un complexe appropri et automatiquement produit. MATLAB fournit galement beaucoup plus de fonctions mathmatiques avances, y compris celles Bessel et la fonction gamma. La plupart de ces fonctions acceptent des arguments complexes. Pour prendre connaissance de la liste des fonctions mathmatiques lmentaires, taper la commande "help elfun". Pour une liste des fonctions mathmatiques les plus avances, taper la commande "help specfun". Pour les matrices, taper "help elmat". Certaines fonctions, comme la sqrt (la racine carr) et le sinus, sont intgres. Elles font partie du noyau de MATLAB ainsi elles sont trs efficaces, mais les dtails de leur programmation ne sont pas aisment accessibles. D'autres fonctions, comme gamma et le sinh (sinus hyper), sont mises en application (programmes) dans les M-files. On peut voir leurs codes et mme les modifier convenance. Plusieurs fonctions spciales fournissent des valeurs des constantes utiles:

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

pi 3.14159265... ; i ou j imaginaire eps : Floating-point relative precision=2.^-52 eps : la plus petite valeur pour les testes realmin : le plus petit nombre virgule flottante= 2.^1022=2.2251e-308 realmax : le plus grand nombre virgule mobile= 1.7977e+308 inf : infini,est produit lors du dplacement de realmax ou lors de la division d'un nombre non nulle par zro NAN : Non Nombre lorsque il n'y a pas de chiffre afficher Les noms de ces fonctions ne sont pas rservs. Il est possible de recouvrir n'importe laquelle avec une nouvelle variable, comme eps = 1.e-6, et employer alors cette valeur dans les calculs suivants. La fonction originale peut tre reconstitue laide de la commande : clear eps **E.5: ..- Exemples d'expression: 1) ali=(1+sqrt(5))/2 ali= 1.6180 3) z=sqrt(besselk(4/3,ali-1)) z= 0.3730+0.3214i 5)Salim=pi*ahmed Salim= Inf | 2) a=abs(3+4i) | a= | 5 |4)ahmed=exp(log(realmax)) | ahmed= | 1.7977e+308 | | | CHAPITRE - M MANIPULATION DES MATRICES **M.1: ..- Saisir une matrice : ================ Pour crire une matrice: Ou A=[1 2 3 A=[1 2 3;4 5 6;7 8 9] Ou bien A=[1,2,3;4,5,6;7,8,9] Pour passer la ligne suivante utiliser la touche entre 456 7 8 9] Pour gnrer la matrice magique d'ordre n il suffit de taper: B=magic(n) =>Ex : C=magic(6) ; donne: c= 35 1 6 3 32 7 31 9 2 8 28 33 30 5 34 4 36 29 26 21 22 17 12 13 19 23 27 10 14 18 24 25 20 15 16 11

**M.2: ..- Saisir un Vecteur : ================ M.2.1--Vecteur ligne: X=[x1 x2 x3 x4 ... xn] ; => Ex : T= [10 11 21 35] Ou bien X=[x1,x2,x3,x4,...,xn] ; => Ex : T= [10,11,21,35] Ce qui donne: T= 10 11 21 35

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

M.2.3--Vecteur colonne: Y=[y1;y2;y3;...;yn]; Donne le rsultat: S= 10 11 21 35 **M.3: ..- Manipulation l'intrieur d'une matrice : ================================= Oprateurs : a) (+) Addition de matrices. A + B addition de A et B. Les matrices A et B doivent avoir les mmes dimensions, moins qu'on soit en prsence de scalaires. b)( -) Soustraction de matrices. A - B soustrait B de A. A et B doit avoir les mmes dimensions, moins que l'un soit un scalaire. c) (*) Multiplication de matrice. A*B est le produit algbrique linaire de A et le nombre de colonnes de B. Le nombre de colonne de A doit galer le nombre de ranges (ou de lignes) de B, moins que l'un soit une grandeur scalaire. d) Multiplication de ranges (ou de ligne) A.*B est le produit d'entre-par-entre (remarquer le point aprs A et avant le signe*) de A et B. A et B doit avoir les mmes dimensions, moins que l'un soit un scalaire. e) (\) Division destine pour les matrices de types X = A\B qui rsout les quations linaires symboliques du problme frquent : A*X=B. Noter qu'A\B est rudement quivalent inv(A)*B. Des messages d'avertissement sont produits si X n'existe pas ou n'est pas unique. Les matrices rectangulaires A sont permises, mais les quations doivent tre conformes ; une solution des moindres carrs ne peut pas tre calcule. f) (.\) Division gauche par range. A.\B est la matrice avec des entres B(i, j)/A(i, j). A et B doivent avoir les mmes dimensions, moins qu'on soit scalaire. g) / Division droite de matrice. X=B/A rsout l'quation linaire symbolique X*A=B. Noter que B/A est identique (A.'\B.'). Des messages d'avertissement sont produits si X n'existe pas ou n'est pas unique. Les matrices rectangulaires sont permises, mais les quations doivent tre conformes ; une solution des moindres carrs ne peut pas tre calcule. h) (./) Division droite des lignes de A par B. le quotient de A./B est la matrice avec des entres A(i, j)/B(i, j). A et B doivent avoir les mmes dimensions, moins que l'un soit un scalaire. i) (^) Puissance de matrice. X^P lve la matrice carre X la puissance P .Si X est une grandeur scalaire et P une matrice carre, X^P lve la matrice X la puissance P , en utilisant des valeurs propres et des vecteurs propres. Avec X^P, o X et P sont les deux des matrices, un message d'erreur est produit. j) (. ^) Puissance des lignes. A.^B est la matrice avec des entres A(i, j)^B(i, j). A et B doivent avoir les mmes dimensions, moins que l'un soit un scalaire. k) (') La matrice Hermitienne transpose. Si A est complexe, A 'est la transpos du complexe conjugu. l) (.') La transpose des lignes. A.' est le transpos du rel A. A.' ne donne pas le conjugu des entres complexes. M.3.1--Calcul de la somme de tous les lments des colonnes: Soit la matrice A=[a11,a12,a13,...,a1n a21,a22,a23,...,a2n ............. an1,an2,an3,....,anm] La commande : sum(A) donne le rsultat: sum(A)= a11+a21+a31+...+an1 ; a12+a22+a32+a42+...+an2 ; ... ...; a1n+a2n+a3n+...+amn => Ex: alpha=[1 2 3 456 7 8 9] sum (alpha) Donne le rsultat : sum(alpha) ans = 12 15 18 M.3.1--Transposition: Dfinition : Transposer c'est rendre les lignes des colonnes M.3.1.1--Pour transposer le vecteur X il suffit de donner la commande X' M.3.1.2--Pour transposer la matrice N il suffit de donner la commande N' => Ex :S=[10;11;21;35]

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

=> Ex : Alpha' donne alpha' ans = 1 4 7 2 5 8 3 6 9 M.3.2--Affichage des lments de la diagonale d'une matrice: La commande est : daig(A) => Ex:A=[11 21 13 36 39 38 25 28 227] Produit le rsultat: diag(A) ans = 11 39 227 M.3.3--Inverser lordre d'criture des colonnes d'une matrice : La commande est : fliplr(A) => Ex : C=[35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11] fliplr(C) ans = 24 25 20 15 16 11 19 26 23 21 27 22 10 17 14 12 18 13 6 1 35 7 32 3 2 9 31 33 28 8 34 5 30 29 36 4

M.3.4.--Affichage d'un lment : La commande est A(i,j); cela affiche l'lment dont les indices sont i et j. A(i,j) : Signifie afficher l'lment qui se trouve dans : la ieme ligne | la jeme colonne ; => Ex : A(5,4) : Affichera le 5eme lment de la 4eme colonne. M.3.5--Affichage d'une colonne : A(:,j) ; o j est la colonne afficher M.3.6--Addition, soustraction, multiplication de certains lments d'une matrice: Il faut indiquer chaque lment par ses indices (A(i,j); i= le ieme lment, de la jieme=colonne o il se trouve)et indiquer l'opration effectuer. => Ex: a) B(1,3)+B(5,4)+B(1,5) b) B(1,2)-B(4,1)+b(6,4) c) B(1,1)/B(2,3)+B(4,8)*B(2,2) => Ex numrique : A= 123 456 789 B= 10 11 12 13 14 15 16 17 18

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

1) A(1,2)+A(3,3)+A(2,1) ans = 15 2) A(1,2)+A(3,3)+A(2,1)-B(1,1)*A(3,2) ans = -65 3) t=A(2,1) t= 4 4) X=A; X= 123 456 789 X(2,1) ans = 4 **M.4: ..- Inversion de matrice : =================== Pour cela il suffit de taper la commande: inv(A), o A est la matrice inverser. ==> Ex:B = 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 D=inv(B) D= -0.0049 0.0512 -0.0354 0.0012 0.0034 0.0431 -0.0373 -0.0046 0.0127 0.0015 -0.0303 0.0031 0.0031 0.0031 0.0364 0.0047 -0.0065 0.0108 0.0435 -0.0370 0.0028 0.0050 0.0415 -0.0450 0.0111 Remarque :Il faut vrifier le produit par : B*inv(B) ;qui doit donner la matrice identit I = D*B ans = 1.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 1.0000 0 -0.0000 0.0000 0 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.0000 **M.5: ..- Dfinir une matrice partir d'une autre : =============================== Si l'on veut dfinir la matrice A partir de certaines colonne de B la commande utiliser est : A=B (:,[k1 k2 k3]) O k1, k2, k3... sont les indices des lignes ==> Ex : B=magic(5) A=B(:,[1 3 2]) B=magic(5) B= 17 24 1 23 5 7 4 6 13 10 12 19 11 18 25 A=B(:,[1 3 2]) 8 15 14 16 20 22 21 3 2 9

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

A= 17 1 24 23 7 5 4 13 6 10 19 12 11 25 18 Remarques : Pour plus dinformation: 1) Taper "help elmat" 2)taper: a) pascal(5,0); b)pascal(5,1); c)pascal(5,2) d) pascal(5,3) **M.6: ..- Gnrer des matrices particulires : =========================== M.6.1 Matrice nulle, la commande est : zeros(n,m) ===> Ex : zeros(3,6) M.6.2 Matrice unit, la commande est: ones(n,m) ===> Ex : ones(4,5) M.6.3 Matrice Normale (loi normale) mais alatoire, la commande est: randn(n,m) ===> Ex : randn(3,5) M.6.4 Matrice uniforme, la commande est:rand ===> Ex : rand(6,3) M.6.5 On peut utiliser les commandes suivantes. a) F=5*ones(n,m) ===> Matrice unit multiplie par 5. b) N=fix(10*rand(1,10)) ===> Affiche les parties fixes des chiffres. M.6.6 Utiliser les crochets [ ] pour gnrer des tableaux ou de matrices; pour cela on procdera de la manire suivante : a) Dfinir une srie de valeur comme par exemple : x=(pi:pi/10:2*pi)' b) Dfinir les sries de valeurs, par des expressions mathmatique, que le tableau doit contenir; sous la forme : nomination=[expression1 expression 2 ... expression n] o "nomination" dsigne le nom du tableau (Ex : T1, Ahmed,...) expression1, expression 2,...sont des expressions telle que : sin(x), x.^3,2*x, exp(x.^3)... M6.7 Utiliser z=speaks(n) : Distribution de Gausse. **M.7: ..- Concatnation : ================== *- Dfinition : La concatnation est le processus de joindre de petites matrices pour en faire une plus grands. En fait, on devrait avoir dfinit au pralable la premire matrice en enchanant ses diffrents lments. *- La paire de crochets, [ ], est l'oprateur de concatnation. ===> Ex : Commencez par crer une matrice magic de 4-par-4 ensuite dfinissez B=[A A+32; A+48 A+16]. Le rsultat devrait tre le suivant : A=magic(4) A= 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

B=[A A+32;A+48 A+16] B= 16 2 3 13 48 34 35 45 5 11 10 8 37 43 42 40 9 7 6 12 41 39 38 44 4 14 15 1 36 46 47 33 64 50 51 61 32 18 19 29 53 57 52 59 55 62 58 54 63 56 60 49 21 25 20 27 23 30 26 22 31 24 28 17

**M.8: ..- Suppression de colonne ou de ligne : ============================= M.8.1--Suppression de colonne : Pour supprimer une colonne la commande est : [ ] A: tant la matrice concerne par la suppression; j : la colonne supprimer. A(:,j)=[ ] ===> Ex : A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 A(:,2)=[ ] A= 16 3 13 5 10 8 9 6 12 4 15 1 ===> Exercice : Essayer les commandes: A(1:2:5), A(1:2:10),... M.8.2--Suppression d'un lment: La commande : A(i,j)=[ ]; gnre une erreur **M.9: ..-- ALGEBRE LINEAIRE : ====================== Officieusement, les termes matrices et son rang sont souvent employs l'un pour l'autre dans la littrature anglaise. Avec plus de prcision, une matrice est un ensemble de ranges numriques bidimensionnelles qui reprsente une transformation linaire. Les oprations mathmatiques dfinies sur des matrices relvent de l'algbre linaire. (Consulter un manuel de mathmatique). M.9.1--L'addition d'une matrice (A) et de sa transpos (A) devrait produire une matrice symtrique. La commande est : A+A' => Ex : A=[1 2 3 456 7 8 9] A= 1 2 3 4 5 6 7 8 9 A+A' ans = 2 6 10 6 10 14 10 14 18

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

M.9.2--La multiplication de la transpose par la matrice originelle produit aussi une matrice symtrique. La commande est : A'*A ===> Ex : A=[1 2 3 456 7 8 9] A'*A ans = 66 78 90 78 93 108 90 108 126 M.9.3--Dterminant d'une matrice : La commande est : det(A) ===> Ex :[1 2 3 456 7 8 9] det(A) ans =0 Ce qui indique que la matrice A est singulier. M.9.4--Forme rduit un chelon d'une matrice: Pour avoir la forme rduite un chelon la commande est : rref(A) ===> Ex :A=[1 2 3 456 7 8 9] rref(A) ans = 1 0 -1 0 1 2 0 0 0 M.9.5--Valeurs propres d'une matrice: La commande qui affiche les valeurs propres d'une matrice est : eig(A). *-Il est recommand de voir les cours de Math concernant les valeurs propres. *-Jeter un coup d'oeil sur le help de MATLAB : Linear Algebra. **M.10: ..-- Oprations sur les matrices : ======================= (+) : Adition de matrices. (-) : Soustraction de matrice. (.*) : Multiplication lment par lment. (./) : Division lment par lment. (.\) : Division gauche lment par lment. (.^ ): Elvation la puissance lment par lment. (.') : Enlever, la conjugaison d'un complexe (cest--dire on retrouve le complexe originel), ou annule la transposition dune matrice (cest--dire on retourne la matrice originelle). **M.11: ...-- Donnes multi variables : ================================ MATLAB emploie l'analyse colonne-oriente pour des donnes statistiques multi-variables. Chaque colonne dans un ensemble de donnes reprsente une variable et chaque range (ou ligne) une observation. L'lment (i,j) est la ieme observation de la jeme variable. Comme exemple, considrer une donne avec trois variables (concernant une personne) : . Frquence cardiaque . Poids (en livre) . Heures d'exercice par semaine Pour cinq observations, on a enregistr les rsultats suivant concernant ces trois variables peuvent tre consignes dans une matrice :

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

D= 72 81 69 82 75

134 201 156 148 170

3.2 3.5 7.1 2.4 1.2

La premire range (ligne) contient la frquence cardiaque, le poids, et des heures d'exercice pour le patient N1, pour un deuxime patient on peut avoir des donnes similaires, et ainsi de suite. Maintenant on peut appliquer plusieurs fonctions d'analyse de donnes de MATLAB ces donnes. Par exemple, pour obtenir l'cart type moyen et de chaque colonne : mu = mean(D), sigma = std(D) mu = 75.8 161.8 sigma = 5.6303 25.499

3.48 2.2107

Pour une liste des fonctions d'analyse de donnes disponibles dans MATLAB, taper : help datafun Pour acceder la boite outils de la statistique taper: help stats **M.12: ...-- Format d'criture : ================= Pour avoir des chiffres sous diffrentes formes envisager les exemples suivants : x = [4/3 1.2345e-6] format short 1.3333 0.0000 format short e 1.3333e+000 1.2345e-006 format short g 1.3333 1.2345e-006 format long 1.33333333333333 0.00000123450000 format long e 1.333333333333333e+000 1.234500000000000e-006 format long g 1.33333333333333 1.2345e-006 format bank 1.33 0.00 format rat 4/3 1/810045 format hex 3ff5555555555555 3eb4b6231abfd271 Vectorisation: ========= Pour avoir une rapide excution des programmes de calculs, en dehors de la commande de MATLAB il est prfrable de vectoriss lalgorithme dans un fichier M-files. L o dautres programmes demandent lutilisation des boucles, MATLAB vous offre la possibilit dutiliser des vecteurs ou des matrices. Prenons lexemple qui permet de dresser une table logarithmique : x = 0.01; for k = 1:1001 y(k) = log10(x); x = x +0.01; end La version vectorise de ce petit programme est : x =0 .01:0.01:10; y = log10(x); Pour un code plus compliqu, les options de vectorisation ne sont pas toujours si videntes. , cependant, pour avoir des vitesses importantes vous devriez toujours rechercher, dune manire ou dune autre, vectoris vos algorithmes.

10

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

CHAPITRE - G LES GRAPHES **G.1 : ...-- Pour en avoir une premire ide : ======================================= Excuter se petit programme pour dbuter ce chapitre: x = 0:pi/100:2*pi;

y = sin(x); y2 = sin(x-.25); y3 = sin(x-.5); plot(x,y,x,y2,x,y3); legend('sin(x)','sin(x-.25)','sin(x-.5)');grid


**G.2 : ...-- Dmarche basique pour tracer des graphes : =================================== MATLAB a des quipements tendus pour montrer des vecteurs et des matrices comme graphiques, aussi bien qu'annoter et imprimer ces graphiques. Cette section dcrit quelques unes des fonctions de graphiques les plus importantes et fournit des exemples de quelques applications typiques. La fonction "plot" a diffrentes formes, selon les arguments d'entre. Si y est un vecteur, la fonction plot(y) produit un graphique par morceaux linaire des lments de y en fonction l'index des lments du y. Si l'on indique deux vecteurs la fonction, x et y, c'est--dire : plot(x, y) produit un graphique de y en fonction x. Par exemple, ce programme emploie l'oprateur de deux points (:) pour crer un vecteur x s'tendant de zro 2*pi, calcule le sinus de ces valeurs, et trace le rsultat. ===> Ex : x = 0:pi/100:2*pi; y = sin(x); plot(x,y) Maintenant marquons les axes et ajoutons un titre au graphe. Le caractres ( \pi) crent le symbole de pi. *- La commande "xlabel" cre sur l'axe des xx le texte que l'on souhaite indiquer. *- La commande "ylabel" cre sur l'axe des yy le texte que l'on souhaite indiquer. *- La commande "zlabel" cre sur l'axe des zz le texte que l'on souhaite indiquer. *- La commande "title" ajout le titre du graphe. *- La commande "grid" ajout une grille. ===> Ex : xlabel('x = 0:2\pi') ylabel('Sine of x') title('Plot of the Sine Function','...FontSize',12) Comme exemple de tracer complet runissons les deux Exemples prcdents x = 0:pi/100:2*pi; y = sin(x); plot(x,y) xlabel('x = 0:2\pi') ylabel('Sine of x') title('Plot of the Sine Function','FontSize',12) grid *- Pour avoir des axes identiques donner la commande : "axis equal" juste aprs la commande "plot" **G.3 : ...-- Tracer de plusieurs courbes sur un mme graphe: ======================================= Afin de tracer des courbes sur un mme graphe la commande "plot" doit comporter l'ensemble des arguments et des fonctions tracer telle que plot(x,y1,x,y2,x,y3,...,yn) o x : est l'argument ou la variable yi: sont les fonctions tracer. ===> Ex : x=-pi: pi/100 : 2*pi; y1=sin(x); Y2=sin(x-.25); y3=sin(x-.5); z =cos(2*x); plot(x,y1,x,Y2,x,y3,x,z); legend('sin(x)','sin(x-0.25)','sin(x-0.5)','cos(2*x)'); grid; Ou bien : legend('y1','y2','y3','z')

11

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

*- Pour mieux identifier les courbes on utilise la lgende "legend" qui donne chaque courbe une couleur d'identification. **G.4 : ...-- Spcification du style de la ligne du tracer et de sa couleur : ========================================= Il est possible de spcifier la couleur, le style, et le marquage de la ligne (comme + ou carr...), pour cela, lors du traage des donnes, user de la commande : plot(x,y,'couleur_style_marque'). *- O couleur peut tre l'une de ces lettres: 'c' :couleur cyan ; 'm' : magenda ; 'y' : yellow ; 'r' : red ; 'g' : green 'b' : blue ; 'w' : white ; 'k' : black. *- Pour le style de la ligne : '-' : pour solide(continue) ; '--' :pour dash (pointiell). ':' :pour des points ; '-.' :pour tiret point. 'none' : pour aucune ligne *- Le marquage : '+' ; 'o'; '*'; 'x'; 's' : Pour un carr ; '^' :pour un triangle vers le haut. 'd' : Pour diamant ; 'v' :pour un triangle vers le bas. '>' : Pour un triangle vers la droite. '<' : Pour un triangle vers la gauche. 'p' : Pour pentagone. 'h' : Pour hexagone. 'none': Pour aucune marque *- Si on indique uniquement le marquage et non le style MATLAB dessine seulement le marqueur,mais il ne les lie pas entre eux. ===> EX : plot(x,y,'ks') *- On peut combiner : c, m, y ,r g, b ,w ,k avec +, o, *, x, s, d, <, >, p, h ; comme par exemple : 'c+','cs'... ===> EX :x=0:pi/100:pi; y1=sin(x); plot(x,y,'m+') Pour plus d'exercices essayer les commandes : plot(x,y1,'k<') plot(x,y1,'mp') plot(x,y1,'m+') plot(x,y1,'mo') plot(x,y1,'r:+') plot(x,y1,'b:-') plot(x,y1,'b:o') plot(x,y1,'b:p') plot(x,y1,'b:<') plot(x,y1,'b:h') Traiter l'exemple suivant : x1 = 0:pi/100:2*pi; x2 = 0:pi/10:2*pi; plot(x1,sin(x1),'r:',x2,sin(x2),'r+') **G.5 : ...-- Donne sous forme d'imaginaire et de complexe : =================================== Quand les arguments tracer sont complexes, la partie imaginaire est ignore moins que la commande comporte un argument complexe simple; cest dire "plot(z)". Pour ce cas spcial, la commande "plot" est un raccourci pour le tracer la partie relle en fonction de la partie imaginaire par consquent, la commande : "plot(Z)" est quivalente : "plot(real(Z),imag(Z))".O Z est un vecteur ou une matrice complexe. Considrons l'exemple : t = 0:pi/10:2*pi; plot(exp(i*t),'-o') axis equal

12

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Dessine un polygone 20 cots avec de petits cercles aux sommets. La commande, "axe gal", marques les diffrents incrmentations des longueurs gales sur l'axe des xx et axes ordonnes, ce qui rend cette figure parfaitement circulaire dans le plan. **G.6 : ...-- Ajouter un autre graphe un graphe qui existe dj : =========================================== La commande "hold on"(tenir dessus ou ajouter dessus) nous permet d'ajouter des graphes un graphique existant. Quand on tape "hold on"MATLAB ne remplace pas le graphique existant quand on met une autre commande de traage ; il ajoute les nouvelles donnes au graphique courant, il rchelonne au besoin les axes si ncessaire. Par exemple, ces programmes crent d'abord une courbe de la fonction "peaks" et dcoupe des crtes, puis superposent une courbe de pseudo couleur de la mme fonction. ==> Ex : [x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading interp hold off **G.7 : ...-- Fentre du graphe (Figure Windows) : ================================ La fonction graphique ouvre automatiquement une nouvelle fentre s'il n'y a pas une fentre dj ouverte sur l'cran. Par contre s'il y a une fentre ouverte MATLAB l'utilise pour le nouveau graphe. Quand il y a plusieurs fentres ouvertes il utilisera la fentre courante (cest dire la dernire ouverte). Pour faire d'une figure existante une fentre courante, on peut cliqueter, l'aide de la souris, sur son indicateur, ou on peut taper: figure(n); o n est le N de la figure. ===> Ex : x=0:pi/100:2*pi; y=sin(x); z=sin(x-.25); figure(1);plot(x,y,'ro');grid; figure(2);plot(x,z,'b*');grid Utiliser alors la commande "figure (1)" ou "figure (2)" pour visualiser l'une ou l'autre des figures. *-Pour ouvrir une nouvelle fentre de figure taper : figure. **G.8 : ...-- Multiples graphes sur une mme figure : La commande "subplot(m,n,p)nous permet de tracer plusieurs graphes dans une mme fentre, et nous pouvons les imprimer. Dtaillons "subplot(m,n,p) : a) Divise la fentre m par n partie; chacune tant une petite fentre. b) Puis elle slectionne le nom du graphe par p ===> Ex : t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X) subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z) ===> Ex : x=0:pi/100:2*pi; y1=sin(x); y2=sin(x-0.25); y3=sin(x-0.5); subplot(2,2,1);plot(x,y1,'r+');grid; subplot(2,2,2);plot(x,y2,'b<');grid; subplot(2,2,3);plot(x,y3,'g>');grid; **G.9 : ...-- Contrle des axes : ================= La commande "axis" soutient un certain nombre d'options pour placer les graduations, l'orientation, et l'aspect du graphe. O peut galement placer ces options interactivement.

================================

13

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

G.9.1--Fixer des limites d'Axe : Par dfaut, MATLAB trouve les maximums et les minimums des donnes. Pour choisir les limites d'axes placer les valeurs dans la commande "axis" ; cela nous permet d'indiquer nos propres limites: axis([Xmin Xmax YminYymax]) Avec : Xmin : Borne infrieure de lintervalle des xx Xmax : Borne suprieure de lintervalle des xx Ymin : Borne infrieure de lintervalle des yy Xmax : Borne suprieure de lintervalle des yy Pour un graphe tridimensionnel : axis([xmin xmax ymin ymax zmin zmax]) ===> Ex : axis([-pi pi -2 3]) G.9.2--User de la commande "axis auto"pour permettre de nouveau MATLAB un choix automatique de la limite des axes. G.9.3--Rglage de l'tendue des axes : La commande "axis" nous permet aussi certains nombres de modes prdfinis. Par exemple : a) axis square ; qui gnre des axes xx et yy de mme longueur. b) axis equal ; gnre des axes avec les mmes chelles. ===> Ex : x=0:pi/10:2*pi; y=sin(x); subplot(2,2,1);plot(x,y);axis square; subplot(2,2,2);plot(x,y);axis equal; G.9.4--Visibilit et non visibilit des axes: - a) La commande "axis on" rend les axes visibles. - b) La commande "axis off" rend les axes non visibles. G.9.5--Grille visible ou non : -a)"grid on" : grille visible. -b)"grid off" : gille non visible. G.9.6--Libeller les axes, le graphe et mettre du texte l'intrieur du graphe : -Les fonctions "xlabel","ylabel" et "zlabel" commande la nomination des axes xx, yy et zz. -La fonction "title" nous permet d'crire un titre sur le graphe. -La fonction "TeX" produit la notation grecque. -La fonction "text" insre une du texte l'intrieur du graphe. Remarque: Pour les lettres grec voir le help et taper: Txt [1]. ===> Ex: t = -pi:pi/100:pi; y = sin(t); plot(t,y) axis([-pi pi -1 1]) xlabel('-\pi \leq {\itt} \leq \pi') ylabel('sin(t)') title('Graph of the sine function') text(1,-1/3,'{\itNote the odd symmetry.}') Amusez vous excuter ce petit programme : theta=-pi:pi/100:pi; y=sin(theta); plot(theta,y); ylabel('sin{(}theta{)}') xlabel('-pi\leq\theta\leq\sigma') **G.10 : ...-- Sauvegarde des figures : ===================== Pour sauver une figure, choisie "Save" du menu File. Pour le sauver choisissez les formats graphiques, comme TIFF, pour un usage antrieur ou "Export" pour l'exporter vers d'autres applications, toujours dans le menu File. On peut galement le sauver l'aide de "save as"qui inclue toutes les options de la sauvegarde la figure dans un format diffrent.

14

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

**G.11 : ...-- Edition de graphes : ================== Pour diter un graphe MATLAB permet de : - Utiliser la sourie. - Utiliser la ligne de commande. - Utiliser les M-file. Pour plus de dtaille voir : "Using Plot Editing Mode, "Using the Property Editor" ou les fonctions d'dition telle que "Handle Graphics". **G.12 : ...-- Tracer des surfaces et maillage (Mesh and surface plots): ============================================= MATLAB dfinit une surface par la coordonne z des points au-dessus d'une grille dans le plan de (x y), en utilisant les lignes droites pour relier les points adjacents. La "mesh" (maille) et la" surf "(surface) traant les surfaces de visualisation de la fonction trois dimensions.La "mesh" et " surf" sont des fonctions traant les surfaces de visualisation trois dimensions. la "mesh" produit les surfaces de wireframe qui colorent seulement les lignes reliant les points de dfinition."surf" montre les lignes de connections de et les faces de la surface en couleurs. G.12.1--Visualiser des fonctions deux variables : z=f(x,y) -a) Gnrer deux matrices X et Y qui contiennent les couples de points du domaine o l'on trace la courbe. -b) Utiliser les matrices X et Y pour valuer la fonction et tracer son graphe. La fonction "meshgrid" transforme le domaine spcifi en (a) par un seul ou deux vecteurs x et y en deux matrices X et Y afin d'valuer les fonctions deux variables. Les lignes de X sont copies dans le vecteur x et les colonne de Y sont copies dans le vecteur y. Ex : Graphe de la fonction sinc (c.--d. sin(R)/R au voisinage de 0): Cet exemple value et trace la fonction "sinc" dans trois dimensions. R est la distance l'origine. Pour viter la division par zro on doit user de la petite valeur "eps". [X,Y]=meshgrid(-8:.5:8); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z) surf(X,Y,Z,'EdgeColor','red') Ex : Utilisation de la commande "surf" [X,Y]=meshgrid(-8:.5:8); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; surf(X,Y,Z,'FaceColor','red','EdgeColor','none'); camlight left; lighting phong % Ajoute un aspect de brillance. view(-15,65) % les dimension de la vue. Ex : load clown surface(peaks,flipud(X),... 'FaceColor','texturemap',... 'EdgeColor','none',... 'CDataMapping','direct') colormap(map) view(-35,45) **G.13 : ...-- Impression des graphes : ===================== On peut imprimer les figures de MATLAB directement sur une imprimante relie notre ordinateur comme on peut les exporter vers un des fichiers de formats standard compatible avec MATLAB. Il y a deux manires d'imprimer et dexporter des figures : -a) User de l'option "print" dans le menu File (o lon trouve Prin stup et Print preview). -b) User de la commande "print" Explicitons ces deux points : a) Imprimer partir du Menu File :

15

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Il y en a quatre options d'impression sous le Menu File : *** L'option "Page Setup" qui ouvre une boit de dialogue, nous permettant d'ajuster les caractristiques du graphe sur la page imprimer. *** L'option de "Print Setup" montre une zone de dialogue qui imprime par dfauts, mais qui n'actualise pas rellement la figure. *** L'option de "Print Preview" permet davoir un aperu de la figure telle qu'elle sera imprime. *** L'option de "Print" montre une zone de dialogue qui donne le choix des options d'impression standard et imprimer la figure. **G.14 : ...-- Manipulation des Graphes: ======================= Quand on emploie une commande de traage, MATLAB cre le graphique en utilisant de divers objets de graphiques, tels que les lignes, le texte, et les surfaces (voir Graphics Objects pour une liste complte).Tous les objets de graphiques ont des proprits qui commandent l'aspect et le comportement de l'objet. MATLAB nous permet dexaminer la valeur de chaque proprit et de placer la valeur de la plupart des proprits.Chaque fois que MATLAB cre les graphiques objets, il assigne une marque (appele Handle= poigne) l'objet. On peut utiliser cette poigne, Handle, pour accder aux proprits de l'objet. Les handle-graphiques sont trs utile si on veut : *- Modifier l'apparence des graphes. *- Crer des commandes personnalises de traage par l'inscription dans des M-File qui crent et manipulent des objets directement. G.14.1--Graphes Objects: Graphics objects sont les lments de base employs pour montrer des graphiques et des lments d'interface utilisateur. Le tableau suivant prsente les graphiques objects: Object Root Figure Axes Uicontrol Uimenu Uicontextmenu Image Light Line Patch Rectangle Surface Text Description Dessus de la hirarchie correspondant l'cran d'ordinateur La fentre montrait des graphiques et des interfaces utilisateur. Axes pour montrer des graphiques dans une figure Commande d'interface utilisateur qui excute une fonction en rponse l'interaction d'utilisateur le menu de la fentre Figure dfinie pour l'utilisateur Le menu instantan appel par bon cliqueter droit sur des graphes objects. Image bidimensionnelle base sur des Pixels (donne sous forme de Pixels) Sources lumineuses qui affectent la coloration des de pice rapporte et des surfaces objets Ligne employe par des fonctions telles que plot, plot3, semilogx. Polygone rempli avec des bords. Forme bidimensionnelle changeante des rectangles aux ovales. Reprsentation tridimensionnelle des donnes de matrice cres par le plotting, la valeur de ces donnes est de la taille plan x/y Chane de caractres.

Remarque: Pour les lettres Grec voir le help et taper: Text[1]. G.14.2--Hirarchie des Objects: Les objets sont organiss dans une hirarchie structure par arbre refltant leur interdpendance. Par exemple, la ligne objets exige des Axes objects comme cadre de rfrence. Tour tour, les Axes objets existent seulement dans l'object figure. Ce diagramme illustre la structure arborescente:(voir help: Graphics objects). G.14.3--Cration d'objets: Chaque objet a une fonction associe qui cre l'objet. Ces fonctions ont le mme nom que les objets qui ils crent. Par exemple, la fonction textes cre des objets textes, la fonction figure cre l'objets figure, et ainsi de suite.Les fonctions niveau lev des graphiques de MATLAB (comme la "plot" et la" surf") appellent la fonction de bas niveau approprie pour tracer leurs graphiques respectifs. Pour plus d'informations sur un objet et une description de ses proprits, voir la page de rfrence pour la fonction de la cration de l'objet. Les fonctions de cration d'objet ont le mme nom que l'objet. Par exemple, la fonction de cration d'objet pour la cration des axes objets s'appellera axes.

16

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

G.14.4--Commandes pour travailler avec des objets: Ce tableau prsente des commandes gnralement utilises pour travaillant avec des objets. |-----------------------------------------------------| | Fonction | Ce que la fonction ralise -------------------------------------------------------| | copyobj | Copoie les graphiques objets. | delete | suprime les objets. | findobje | Trouver les entres des objets ayant t spcifis | | par les valeurs de leurs proprits. | gca | Renvoyer la manipulation des axes courant | gcf | Renvoyer la manipulation des figures courantes | gco | Renvoyer la manipulation des objet courant. | get | Vrifie la valeur des proprits d'objets. | set |Placer la valeur des proprits des d'objets |----------------|-------------------------------------| G.14.5--Placer des proprits d'objet: Toutes les proprits d'objet ont des valeurs par dfaut. Cependant, on peut trouver utile de changer quelques proprits et des arrangements pour les adapter notre graphique (notre cas). Il y a deux manires pour placer des proprits d'objet : a)En spcifiant la valeur lors de la cration de l'objet. b)Placer la valeur de proprit sur un objet qui existe dj G.14.5.1-Placer des proprits dans les commandes plot: On peut indiquer des valeurs de proprit d'objet comme des arguments pour objecter des fonctions de cration aussi bien qu'avec les fonctions tracer, telle que la "plot", la "mesh", et "surf". Par exemple, les commandes de traage (ploting) qui crent des lignes ou des surfaces nous permettent d'indiquer la valeur de la proprit name/property par paire d'arguments. Par exemple la commande: plot(x,y,'LineWidth',1.5)Trace les donnes qui se trouvent dans les variables x et y en utilisant des lignes ayant une proprit de largeur des trais rgle 1.5 point (un point = 1/72 pouce).On peut placer n'importe quelle ligne de proprit d'objet de cette faon. ===> Ex : x=0:pi/100:pi; y=sin(x); plot(x,y,'LineWidth',1.5) --------------===> Ex : x=0:pi/100:pi; y=sin(x); plot(x,y,'LineWidth',1.5,'color','r') ===> Ex : x=0:pi/100:pi; y=sin(x); plot(x,y,'LineWidth',3,'color','b') G.14.5.2-Placer des proprits dans des objets qui existent: Pour modifier les valeurs de proprit des objets existants, on peut employer la commande "set" ou, si le mode de l'diteur de"plot" nous le permet: "Property Editor" . "Property Editor" fournit une interface utilisateur graphique plusieurs proprits d'objet. Cette section dcrit comment employer la commande "set".Voire Using the Property Editor pour plus d'information. Beaucoup de commandes de traage peuvent renvoyer des entres de cration d' objets ainsi on peut modifier les objets en utilisant la command "set". Par exemple, ces programmes tracent cinq-par-cinq la matrice (crant cinq lignes, une par colonne) et puis placent le marqueur leur place et le MarkerFaceColor au vert: Ex: h = plot(magic(5)); set(h,'Marker','s','MarkerFaceColor','g') Dans ce cas-ci, h est un vecteur contenant cinq dclarations, une pour chacune des cinq lignes dans "plot".L'ensemble des dclarations place les proprits de marquage et de MarkerFaceColor de toutes les lignes aux mmes valeurs. Ex : h=plot(magic(5)); set(h,'Marker','s',...

17

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

'MarkerFaceColor','b') G.14.5.3--Mettre et manipuler de multiples valeurs de proprit: Si on veut placer des proprits de chaque ligne une valeur diffrente, on peut employer des ranges de cellules pour stocker toutes les donnes et pour les passer la commande "set". Par exemple, crer un "plot" et sauver la ligne d'entrs. Ex : h = plot(magic(5)); Supposer que l'on veut ajouter diffrents marqueurs chaque ligne et colorer la face c du marqueur la mme couleur que la ligne. On doit dfinir deux ranges de cellules - une contenant les noms de proprit et l'autre qui contient les valeurs dsires des proprits. Par exemple: La range de cellules de "prop_name" contient deux lments: prop_name(1) = {'Marker'}; prop_name(2) = {'MarkerFaceColor'}; La range de cellules de prop_values contient 10 valeurs - cinq valeurs pour la proprit de marqueur et cinq valeurs pour la proprit de MarkerFaceColor. Noter que les prop_values est une range bidimensionnelle de cellules. La premire dimension indique quelle entre dans h les valeurs sont appliques et la deuxime dimension indique quelle proprit la valeur est assigne. prop_values(1,1) = {'s'}; prop_values(1,2) = {get(h(1),'Color')}; prop_values(2,1) = {'d'}; prop_values(2,2) = {get(h(2),'Color')}; prop_values(3,1) = {'o'}; prop_values(3,2) = {get(h(3),'Color')}; prop_values(4,1) = {'p'}; prop_values(4,2) = {get(h(4),'Color')}; prop_values(5,1) = {'h'}; prop_values(5,2) = {get(h(5),'Color')}; Le MarkerFaceColor est toujours assign la valeur de la couleur correspondante ligne (obtenue par la proprit de couleur grce la commande "Color" amene par la commande get). Aprs avoir dfini les ranges de cellules, on appelle "set" pour indiquer les nouvelles valeurs de proprit: set(h,prop_name,prop_values) G.14.5.4--Trouver les entres (handles) des objets existants: La commande de "findobj" nous permet d'obtenir les entrs (handles) des objets graphiques en recherchant les objets avec des valeurs de proprit particulires. Avec la "findobj" on peut indiquer la valeur de n'importe quelle combinaison des proprits, qui rend facile la slectionner (ou de trouver) d'un objet parmi d'autre. Par exemple, on peut vouloir trouver la ligne bleue avec le marqueur carr ayant la couleur des faces bleues. On peut galement indiquer quelles figures (ou axes) rechercher, s'il y a plus d'un. Les sections suivantes fournissent des exemples illustrant comment employer la"findobj". G.14.5.4.1--Trouver tous les objets d'un certain type: Puisque tous les objets ont un type proprit qui identifie le type d'objet, on peut trouver les enttes (handles) de toutes les occurrences d'un type particulier d'objet. Par exemple Par exemple, trouver les enttes (handles) de toutes les lignes object: h = findobj('Type','line'); G.14.5.4.2--Trouver des objets qui ont des proprits particulires: On peut indiquer de multiples proprits pour cerner la recherche. Par exemple chercher toutes les enttes (handles) des lignes pointilles rouge('r' dans le programme) h = findobj('Type','line','Color','r','LineStyle',':'); G.14.5.4.3--Limitation de la porte de la recherche: On peut indiquer le point de dpart dans la hirarchie d'objet en passant lentte (handle) de commencement de la figure ou des axes comme premier argument. Par exemple, trouver la chane pi/2 seulement dans les axes courants: h = findobj(gca,'Type','text','String','\pi/2');

18

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

G.14.5.4.4--Employer la "findobj" comme argument: Puisque la "findobj" renvoie les enttes (handles) qu'il trouve, on peut alors employer ces enttes comme argument afin de raffiner la recherche. Par exemple, trouver toutes lignes rouges et ensembles des lignes (modle) a pointill: set(findobj('Type','line','Color','red'),'LineStyle',':') **G.15: ...--Utilation de l'interface graphique (Graphics User Interfaces) --Graphical User Interface Design Tools. --Animations --Erase Mode Method --Creating Movies RESTE A DEVELOPPER **G.16 : Voir : SPARSE MATRICE L = numgrid('L',65); A = delsq(L); [v,d] = eigs(A,1,0); Iteration 1: a few Ritz values of the 20-by-20 matrix: 0 L(L>0) = full(v(L(L>0))); x = -1:1/32:1; contour(x,x,L,15) axis square. QUELQUES EXEMPLES : -------------------1) x = -2.9:0.2:2.9; bar(x,exp(-x.*x)) colormap hsv ------------------2) Y = round(rand(5,3)*10); subplot(2,2,1) bar(Y,'group') title 'Group' subplot(2,2,2) bar(Y,'stack') title 'Stack' subplot(2,2,3) barh(Y,'stack') title 'Stack' subplot(2,2,4) bar(Y,1.5) title 'Width = 1.5' -------------------3)Y = cool(7); subplot(3,2,1) bar3(Y,'detached') title('Detached') subplot(3,2,2) bar3(Y,0.25,'detached') title('Width = 0.25') subplot(3,2,3) bar3(Y,'grouped') title('Grouped') subplot(3,2,4) bar3(Y,0.5,'grouped') title('Width = 0.5') subplot(3,2,5) bar3(Y,'stacked') title('Stacked') subplot(3,2,6) bar3(Y,0.3,'stacked')

19

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

title('Width = 0.3') colormap([1 0 0;0 1 0;0 0 1]) ----------------------4)surf(peaks) axis vis3d off for x=-200:5:200 campos([x,5,10]) drawnow end ----------------------5)surf(peaks); axis vis3d xp=linspace(-150,40,50); xt=linspace(25,50,50); for i=1:50camup([xp(i),25,5]) Warning: Unmatched "end". (Type "warning off MATLAB:m_warning_end_without_block" to suppress this warning.) camup([xp(i),25,5]); drawnow end ---------------------6) axis([0 10 0 10]) hold on % Initially, the list of points is empty. xy = []; n = 0; % Loop, picking up the points. disp('Left mouse button picks points.') disp('Right mouse button picks last point.') but = 1; while but == 1 [xi,yi,but] = ginput(1); plot(xi,yi,'ro') n = n+1; xy(:,n) = [xi;yi]; end % Interpolate with a spline curve and finer spacing. t = 1:n; ts = 1: 0.1: n; xys = spline(t,xy,ts); % Plot the interpolated curve. plot(xys(1,:),xys(2,:),'b-'); hold off

CAPITRE P ************************************* PROGRAMMER avec MATLAB ************************************* ** P.1 : ..--Champs de contrle de MATLAB : ========================== MATLAB a plusieurs champs de contrles constitus par: * if Dclaration * switch Dclarations * for Boucles * while Boucle * continue Dclaration * break Dclaration P.1.1-- if :

20

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

La dclaration "if" value une expression logique et excute un groupe de dclaration quand l'expression est vraie. L'"elseif" facultatif et les mots-cls "else" (autre) prvoient l'excution des groupes alternatifs de dclarations. Un mot-cl "end" (fin), qui assortit l'"if", termine le dernier groupe de dclaration. Les groupes de dclarations ne sont traces par les quatre mots cls aucun croisement ou parenthse n'est impliqu. L'algorithme de MATLAB pour produire de matrices (ou table) magique d'ordre (n); implique trois cas diffrents : quand (n) est impair, quand (n) est pair mais non divisible par 4, ou quand (n) est divisible par 4. Ceci est dcrit dans cet exemple, les trois cas sont mutuellement exclusifs, mais s'ils ne l'taient pas, le premier tat vrai serait excut: if rem(n,2) ~= 0 M = odd_magic(n) elseif rem(n,4) ~= 0 M = single_even_magic(n) else M = double_even_magic(n) end Il est important de comprendre comment les relations des oprateurs des dclarations de "if " travaillent avec des matrices. Quand on veut vrifier l'galit entre deux variables, on pourrait employer: If A = = B, ... Ce code lgal (correcte) de MATLAB, tant que A et B sont des grandeurs scalaires. Mais quand A et B sont des matrices, A = = B n'examine pas s'ils sont gaux, il examine o elles ne le sont pas; le rsultat est une matrice de 0 et 1, produite en comparant lgalit dlment par lment quand les lments sont gaux un un le chiffre est 1 sinon c'est 0.Enfin, si A et B ne sont pas de la mme taille, MATLAB indique une erreur: A = = B is an error. La manire approprie de vrifier l'galit entre deux variables est d'employer la fonction "isequal", if isequal(A,B), ... Voici un autre exemple pour souligner ce point. Si A et B sont des grandeurs scalaires, le programme suivant n'atteindra jamais la situation attendue. Mais pour la plupart des paires de matrices, y compris nos matrices magiques avec des colonnes inter changes, aucune des conditionnes A > B, le A = = B , A < B nest vraie pour tous les lments et ainsi la condition "else" est excute. if A > B 'greater' % Ecrire "greater" = plus grande elseif A < B 'less' % Ecrire "less" =moins elseif A = = B 'equal' % Ecrire "equal"=gale else error ('Unexpected situation') % Ecrire situation inattendue. end Plusieurs fonctions sont utiles pour ramener les rsultats des comparaisons de matrices aux conditions de comparaisons des scalaires pour cela il est utile de se servir des dclarations: - isequal (est ce qu'ils sont gaux) - isempty (est ce qu'ils sont vides) - all (est ce qu'ils sont tous non nuls) - any (est ce qu'il y a qui sont nuls) * isequal : Teste l'galit. Ex : A=[1 0;0 1]; B=[0 1;0 1]; C=[0 1;0 0] isequal(A,B) ans= 1 % Proposition vraie car A=B ----------------isequal(A,C) ans= 0 % Proposition fausse car A#C. ----------------isequal(A,C,B)

21

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

ans= 0

% Proposition fausse car A#C et B#C

* isempty : Teste si la variable/matrice est vide(empty) ou non. Elle retourne 1 si la variable/matrice est vide. Elle retourne 0 si la variable/matrice est non vide. Ex : d=[;] isempty(d) ans=1 % Proposition vraie d est vide ----------------b=[0,0;0,0] isempty(b) ans =0 % Proposition fausse car b n'est pas vide. * all : Teste si tous les lments sont non nuls. Ex : A[1 2 3;6 5 4] all(A) ans=1 1 1 % Proposition vraie. ------------------Ex : A[0 2 3; 5 6 7] all (A) ans=0 1 1 ------------------Ex : A=[0 2 3;6 5 0] all(A) ans=0 1 0 * any : Teste si tous les lments sont nuls. Ex : A=[0 6 7;3 0 1] any(A) ans=1 1 1 ------------------Ex : A=[0 0 0;3 0 0] any(A) ans= 1 0 0 ------------------Ex : A=[0 0 0;0 0 0] any(A)=0 0 0 ------------------Ex : A=[0.8,.75,.95;.52,.63,.46] any(A<.5) % Teste les lments de A qui sont <0,5. ans=0 0 1 % Un seul : 0,46 P1.2-- switch and case: La dclaration "switch" excute des groupes de dclarations bass sur la valeur d'une variable ou d'une expression. Les mots-cls "case" et "otherwise" tracent les groupes. Seulement le premier cas assorti est excut. On doit toujours avoir une "end" pour sortir de "switche". La logique de l'algorithme de la matrice "magic" peut galement tre dcrite par: Ex : switch (rem(n,4)==0) + (rem(n,2)==0)

22

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

case 0 M = odd_magic(n) case 1 M = single_even_magic(n) case 2 M = double_even_magic(n) otherwise error('This is impossible') end P1.3-- for : La boucle "for" rpte un groupe de dclarations un nombre de fois fixe et prdtermin. Une "end" ncessaire pour sortir de la boucle "for". Ex : for n=3:32 r(n)= rank(magic(n)); end r Remarques : 1) Le point virgule terminant la dclaration intrieure supprime l'impression rpte lcran, et le r aprs la boucle montre le rsultat final. 2) C'est une bonne ide de denteler les boucles pour la lisibilit des programme, particulirement quand elles sont imbriques. Ex : for i = 1:m for j = 1:n H(i,j) = 1/(i+j); end end P1.4.-- while : La boucle "while" rpte un groupe de dclarations un nombre de fois indfini sous la commande d'un tat logique. La dclaration "end" mtra fin "while". Voici un programme complet, illustrant l'"while", " if", "else", et "end", l'utilisation de la bissection d'intervalle pour trouver la racine d'un polynme. Ex : a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end x Ce programme donnera le rsultat x=2,09455148154233. Les affirmations comportant les comparaisons de matrices qui sont discutes dans la section sur la dclaration de "if" s'appliquent galement la dclaration de "while". P1.5.-- continue : La dclaration "continue" passe la main la prochaine itration de la boucle "for" ou de "while" dans laquelle elle apparat, sautant toutes les dclarations restantes dans le corps de la boucle. Dans les boucles imbriques (c--d l'intrieur de continue), "continue" passe la main la prochaine itration de la boucle de "for" ou de "while" l'enfermant. L'exemple ci-dessous montre une boucle "continue" qui compte les lignes du code dans le dossier, magic.m, sautant tous les interlignes(cest dire les lignes blanche qui ne contiennent rien) et les commentaires. Une dclaration "continue" est employ pour avancer la prochaine ligne dans magic.m sans incrmenter le comptage chaque fois qu'un interligne ou la ligne de commentaire est rencontre.

23

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

fid = fopen('magic.m','r'); count = 0; while ~feof(fid) line = fgetl(fid); if isempty(line) | strncmp(line,'%',1) continue end count = count + 1; end disp(sprintf('%d lines',count)); La dclaration "break" nous permet de sortir tt d'une boucle "for" ou de "while".L'instruction "break" nous donne le moyen de sortir de la seule boucle o elle est incluse. Voici une amlioration sur l'exemple de la section prcdente. Est ce que c'est une bonne ide? a = 0; fa = -Inf; b = 3; fb = Inf; while b-a > eps*b x = (a+b)/2; fx = x^3-2*x-5; if fx == 0 break elseif sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end x P1.6 Autres structure de donnes: P1.6.1 Multidimensional Arrays:(Array=tableau, vecteur, matrice,...) Les donnes multidimensionnelles (matrices, vecteurs, tableau) dans MATLAB sont des ranges avec plus de deux indices. Elles peuvent tre cres en invoquant les matrices "zros", "ones", l"rand", ou "randn" avec plus de deux arguments. Par exemple: R = randn(3,4,5); Cette commande cre une range 3-par-4-par-5 (5 matrices de 4 colonnes par 3 lignes)avec un total de 3x4x5 = 60 lments alatoires normalement distribus. Une range tridimensionnelle pourrait reprsenter des donnes physiques tridimensionnelles, disent la temprature dans une chambre, prleve sur une grille rectangulaire. Et il pourrait reprsenter un ordre des matrices, de l'A(k), ou des chantillons d'une matrice dpendant du temps, A(t).Dans ces derniers cas,l'lment (I, j) de la matrice de k, ou de la kieme matrice , est not par A(i, j, k). Les versions de MATLAB et de Drer qui gnrent des matrices carres magiques d'ordre 4 diffrent par un change de deux colonnes diffrentes matrices carres magiques peuvent tre produites en changeant des colonnes. La dclaration : p=perms(1:4); Gnre 4!=24 permutations de 1:4 .La kime permutation est le vcteur ligne p(k,:). *** Pour la suite voir : **- Multidimensionel array (matrices). **- Cellules arrays **- Caractere et texts **- Structures.

Types de donnes et programmation


MATLAB est un langage de haut niveau qui inclut des structures de donnes, des fonctions, des commandes dacheminement et dexcution des commandes, d'entre-sortie, et des possibilits de programmation d'objet orient. Cette section prsente les dispositifs de programmation et les techniques de MATLAB.

24

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

* Programmation des M-File - Dcrit des langages de constructions et comment crer des programmes de MATLAB (M-

Files).Il couvre des types de donnes, le contrle de lexcution, l'indexation de range (lment des), la linarisation, et d'autres matires. * Les ensembles de caractres - Couvre le support de MATLAB les chaines de donnes, incluant comment crer des ensembles de caractres et des ranges de cellules de chaines, les manires de reprsenter des chaines, comment excuter les chaines d'oprations, et la conversion entre les chaines et les formats numriques.

Multidimensional Arrays (Les espaces multidimensionnels) Les functions ( ne pas confondre avec les fonctions mathmatiques)
Les functions sont des M-file qui acceptent des arguments d'entre et des arguments de retour ou de sortie. Elles oprent sur, ou utilise, des variables qui se trouvent dans leur propre zone de travail. Cela spare l'espace de travail de la zone de commande de MATLAB. Cette section couvre les points suivants concernant des fonctions : * * * * * * Simple Script Example : Un simple exemple de scripte Basic Parts of a Function M-File : Les lments de base des fonctions crites dans M-file Function Names : Nomination des fonctions How Functions Work : Ce que peut faire une fonction Checking the Number of Function Arguments : Vrification du nombre d'arguments dune fonction Passing Variable Numbers of Arguments : Dpassement du nombre de variables d'arguments

Simple Exemple de Fonction : La fonction "average" (moyenne) est un M-file simple qui calcule la moyenne des lments dun vecteur : 1) Commencer par ouvrir un M-file. 2) crire se qui suit: function y = average(x) % AVERAGE Mean of vector elements % AVERAGE(X), where X is a vector is the mean of vector elements % Non-vector input results in an error. [m,n] = size(x); if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) error('Input must be a vector') end y = sum(x)/length(x); % Actual computation 3) Sauver le sous le nom de la fonction average 4) Chaque fois que vous voulez calculer la moyenne des lments dun vecteur il suffirait de donner le vecteur et excuter la commande average ; si les donns ne sont pas relatives un vecteur le rsultat est un message derreur : error('Input must be a vector') 5) Vrifier le rsultat en jetant un coup dail sur la valeur de y Si vous voudrais, essayer ces commandes, que vous avez not dans le M-file a appel "average.m". La fonction "average" accepte un argument simple comme entre et renvoie un argument simple de sortie. Pour excuter la fonction "average", faites entrer le vecteur z est calculer la moyenne de ces lments : z = 1:99; average(z) % Le rsultat sera : ans = 50

25

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Les lments de Base des Fonctions crites Dans les M-File : Un M-File d'une fonction se compose de : * The Function Definition Line : Dfinition de la fonction * The H1 Line : La ligne H1. * Help Text : Texte de laide. * The Function Body : Le corps de la function. * Comments : Commentaires. Dfinition la ligne de la fonction : La ligne de dfinition de fonction qui doit informer MATLAB que le M-File contient, et la spcification de l'argument d'appel de la fonction sont indiqus par le schmas qui suit. Comme exemple la ligne de dfinition de la fonction pour la" moyenne" est :

Ligne de la function

function y=average(X) Argument dentre Nom de la fonction Argument de sortie Mot cl utilis par MATLAB
Fig.1 : Dfinition de la ligne de function Toutes les fonctions de MATLAB ont une ligne de dfinition de fonction qui suit ce modle. Si la fonction a de multiples valeurs de retour ou de sortie, il faut joindre la liste de ces arguments (de sortie) entre crochets ( [] ). Les arguments d'entre, s'ils sont prsents, il faut les mettre entre parenthses. Employer les virgules pour sparer les arguments (d'entre ou de sortie) les un des autres. Voici un exemple un peu compliqu : function [x,y,z] = sphere(theta,phi,rho) S'il n'y a aucun argument de sortie (ici x, y ou z), laisser sa place libre c'est dire un "blanc". Exemple : function printresults(x) Ou l'utilisation de crochets vides function [ ] = printresults(x) Les variables que l'on passe la fonction n'ont pas besoin d'avoir le mme nom que ceux dans la ligne de dfinition de fonction. La ligne H1 La ligne H1, ainsi appele parce que c'est la premire ligne des textes d'aide, est une ligne de commentaire juste aprs la ligne de dfinition de fonction. Puisqu'elle se compose du texte de commentaire, la ligne H1 commence par un signe pour cent signent, "%." Pour la fonction moyenne, la ligne H1 est : % AVERAGE Mean of vector elements.

26

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

C'est la premire ligne du texte qui apparat quand un utilisateur sollicite laide en crivant dans la commande : "help function_name". La fonction "lookfor" permet de rechercher et de montre seulement la ligne H1. Puisque cette ligne fournit des informations rcapitulatives importantes au sujet du M-File concern, il est important de le rendre aussi descriptif que possible c'est--dire le commentaire dans la ligne H1 doit fournir les informations ncessaires au sujet de la fonction. Texte daide : On peut crer l'aide en ligne pour nos M-Files en crivant le texte sur une ou plusieurs lignes de commentaire, commenant par la ligne juste aprs la ligne H1.Le texte d'aide pour la fonction "moyenne" est : % AVERAGE(X), where X is a vector, is the mean of vector elements. % Nonvector input results in an error. En tapant la commande "help function_name", MATLAB montre les lignes de commentaire qui apparaissent entre la ligne de dfinition de fonction et la premire la premire qui ne comporte aucun commentaire (excutable ou blanche).Le systme d'aide ignore toutes les lignes de commentaire qui apparaissent aprs ce bloc d'aide. Par exemple, le rsultat de "help sin" est: SIN Sine. SIN(X) is the sine of the elements of X. Overloaded methods help sym/sin.m

Le Corps de la Fonction :
Le corps de fonction contient tout le code de MATLAB qui excute des calculs et assigne des valeurs aux arguments de retour. Les instructions dans le corps de fonction peuvent se composer des appels de fonction, programmant des constructions comme la commande d'excution et l'entre-sortie interactive, des calculs, des tches, des commentaires, et des interlignes. Par exemple, le corps de la fonction "moyenne" contient un certain nombre d'instructions de programmations simples : [m,n] = size(x); if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) % Flow control error('Input must be a vector') % Error message display end y = sum(x)/length(x); % Computation and assignment

Commentaires :
Comme cit prcdemment, les lignes de commentaire commencent par un signe de pourcentage (%). Les lignes de commentaire peuvent apparatre n'importe o dans un M-File, et on peut ajouter des commentaires l'extrmit d'une ligne de code. Par exemple: % Add up all the vector elements. y = sum(x) % Use the sum function. La premire ligne de commentaire juste aprs la ligne de dfinition de fonction est considre comme la ligne H1 pour la fonction. La ligne H1 et toutes les lignes de commentaire juste aprs elle constituent l'entre en ligne d'aide pour le dossier. En plus des lignes de commentaire, on peut insrer les interlignes n'importe o dans un M-File. Des interlignes sont ignors. Cependant, un interligne peut indiquer l'extrmit de l'enregistrement de texte d'aide pour un M-File.

Nom de la Fonction :
Les noms des fonctions de MATLAB ont les mmes contraintes que les noms des variables. MATLAB emploie les 31 premiers caractres des noms. Les noms de fonction doivent commencer par une lettre ; les caractres restants peuvent tre n'importe quelle combinaison des lettres, des nombres, et des soulignages. Quelques logiciels d'exploitation peuvent limiter des noms de fonction des longueurs plus courtes. Les textes dfinissant le nom du dossier qui contient une fonction de MATLAB comprennent l'extension .m. Par exemple : average.m Si le nom de fichier et la ligne nom de dfinition de fonction sont diffrents, le nom interne est ignor. Ainsi, alors si le nom de fonction spcifi sur la ligne de dfinition de fonction n'est pas identique celui du fichier, la fonction est ignore ; nous recommandons vivement d'employer le mme nom pour tous les deux.

27

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Quel est le travail quexcute une fonction :


On peut appeler les fonctions inscrites sur les M-Files partir de la ligne de commande de MATLAB ou de dans d'autres M-Files. Il faut s'assurer d'inclure tous les arguments ncessaires, en inserant les arguments d'entre entre parenthses et des arguments de sortie entre crochets. Cette section fournit les informations suivantes sur l'appel des fonctions de MATLAB :

* Function Name Resolution * What Happens When You Call a Function * Creating P-Code Files * How MATLAB Passes Function Arguments * Function Workspaces Execution des Functions Nommes:

: Nom dexcution de la fonction. : Ce qui se produit quand tu appelles une fonction. : Crer des dossiers qui contiennent des P-Code. : Comment MATLAB passe les arguments aux fonctions. : Les espaces de travail des fonctions.

Quand MATLAB agit sur un nouveau nom spcifique d'une fonction, il le rsout l'une aprs l'autre ces tapes : 1) Vrifie pour voir si le nom est une variable. 2) Vrifie pour voir si le nom est une subfunction, une fonction de MATLAB qui rside dans le mme M-File que la fonction appelante. Les Subfunctions sont discuts dans la section, Subfunctions 3) Vrifie pour voir si le nom est une fonction prive, une fonction de MATLAB qui rside dans un annuaire priv, un annuaire accessible seulement aux M-Files dans l'annuaire immdiatement au-dessus de lui. Des annuaires privs sont discuts dans la section, les fonctions prives 4) Vrifie pour voir si le nom est une fonction sur le chemin de recherche de MATLAB. MATLAB emploie le premier dossier rencontr dont le nom indiqu. Si on invoque des noms de fonction, MATLAB excute celui trouv en premier d'abord en utilisant les rgles ci-dessus. Il est galement possible de surcharger des noms de fonctions. Ceci emploie des rgles d'expdition additionnelles et est discut dans la section, How MATLAB Determines Which Method to Call (comment MATLAB dtermine quelle mthode appeler).

Ce qui se produit quand on appelle une fonction :


Quand tu appelles un M-File de fonction partir de la ligne de commande ou d'un autre M-File, MATLAB analyse la fonction dans le pseudo-code et la stocke dans la mmoire. Ceci empche MATLAB de la rechercher de nouveau (elle reste sous sa disposition) et l'utilise chaque fois qu'on lui fait appel, pendant la session. Le pseudo-code demeure dans la mmoire jusqu' ce que on le dgages en employant la fonction "clair", ou jusqu' ce que l'on stoppe MATLAB. On peut employer "clair" de n'importe manires pour supprimer des fonctions dans la zone de travail de MATLAB.

Cration P-Code Files :


On sauve la version d'une fonction au cours de prparation ou d'un manuscrit, dans les dossiers appele P-code, pour des sessions postrieures de MATLAB en utilisant la fonction "pcode". Par exemple: pcode average Analyse "average.m" et sauve le pseudo-code rsultant au dossier appel "average.p". Ceci donne MATLAB la possibilit de recourir "average.m" la premire fois qu'on l'appelle en chaque session. Ainsi MATLAB fait trs rapidement l'analyse de la fonction dans le "pcode" avec une vitesse incomparable. Une situation o le pcode fournit un avantage, de vitesse certaine, est pour de grandes applications de "GUI". Dans ce cas-ci, beaucoup de M-Files doivent tre analyss avant que l'application devienne vidente. Une autre situation pour "pcode" est quand, pour des raisons de proprit industrielle, on veut cacher des algorithmes que l'on a crs dans un M-File.

Comment MATLAB Fait Passer Arguments aux Fonctions :


De la perspective du programmeur, MATLAB semble passer tous les arguments de fonction par valeur. En fait, cependant, MATLAB passe par valeur seulement ces arguments qu'une fonction modifie. Si une fonction ne change pas un argument mais l'emploie simplement dans un calcul, MATLAB passe l'argument en se rfrant l'optimisation l'utilisation de la mmoire.

28

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Zones de Travail de Fonction :


Chaque fonction de M-file a un secteur de mmoire, spar de la zone de base de travail de MATLAB, dans laquelle il fonctionne. Ce secteur s'appelle la zone de travail de fonction, avec chaque fonction ayant son propre contexte de zone de travail. Tout en utilisant MATLAB, les seules variables auxquelles on acced sont celles se trouvant dans le contexte appelant, ou celle qui se trouvent dans la base de zone de travail ou celle d'une autre fonction. Les variables que l'on passes une fonction doivent tre dans le contexte appelant, et la fonction renvoie ses arguments de sortie au contexte appelant de zone de travail.On peut cependant, dfinir des variables en tant que variables globales explicitement, permettant plus d'un contexte de zone de travail d'y accder.

Vrification du nombre d'arguments de fonction :


Les fonctions " nargin"et "nargout" nous permettent de dterminer combien des arguments d'entre et de sortie une fonction peut faire appel. On peut alors employer des codes conditionnels pour accomplir diffrentes tches selon le nombre d'arguments. Ex : function c = testarg1(a,b) if (nargin == 1) c = a.^2; elseif (nargin == 2) c = a + b; end Cette fonction permet de : - Si on lui donner un simple argument d'entre, cette fonction ajuste la valeur d'entre. - lui donner deux arguments dentrs, elle les ajoute ensemble. Voici un exemple plus avanc qui trouve la premire marque dans une chane de caractres. Une marque est un ensemble de caractres dlimits par un espace blanc ou un autre caractre. Donner une entre, la fonction, elle assume une dlimitation par dfaut c'est un espace blanc ; si on lui donne deux donns d'entres, elle nous laisse indiquer un autre dlimitation si on le dsir. Elle tient compte galement de deux listes possibles d'argument de sortie : function [token,remainder] = strtok(string,delimiters) % Function requires at least one input argument if nargin < 1 error('Not enough input arguments.'); end token = []; remainder = []; len = length(string); if len == 0 return end % If one input, use white space delimiter if (nargin == 1) delimiters = [9:13 32]; % White space characters end i = 1; % Determine where non-delimiter characters begin while (any(string(i) == delimiters)) i = i + 1; if (i > len), return, end end % Find where token ends start = i; while (~any(string(i) == delimiters)) i = i + 1; if (i > len), break, end end finish = i - 1; token = string(start:finish);

29

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

% For two output arguments, count characters after % first delimiter (remainder) if (nargout == 2) remainder = string(finish + 1:end); end La fonction " strtok " est un M-file de MATLAB dans l'annuaire de " strfun"

Note :
L'ordre dans lequel les arguments de retour apparaissent dans la ligne de dclaration de fonction est important. L'argument que la fonction renvoie dans la plupart des cas apparat d'abord dans la liste. Des arguments additionnels et facultatifs sont annexs la liste.

Dpassement du Nombres de Variables des Arguments :


Les fonctions " varargin" et "varargout" nous ont laiss passer tout nombre d'entres ou renvoyer n'importe quel nombre de sorties une fonction. Cette section dcrit comment utiliser ces fonctions et galement couvertures : * Unpacking varargin Contents * Packing varargout Contents * Varargin and varargout in Argument Lists : Dballage de la table des matires de variable et arguments dentre : Table des matires de variable et arguments de sortie : Varargin (variable dentres) et varargout (variable de sortie) dans des listes d'argument

MATLAB inscrit tous les arguments indiqus d'entre dans une range de cellules, un genre spcial de range de MATLAB qui se compose des cellules au lieu des lments de range.Chaque cellule peut tenir n'importe quelle taille ou genre de donnes - l'on a pourrait fair tenir un vecteur des donnes numriques, des autres dans la mme range pourraient contenir un choix de donnes de corde, et ainsi de suite.Pour des arguments de sortie, votre code de fonction doit les inscrire dans une range de cellules de sorte que MATLAB puisse renvoyer les arguments l'utilisateur qui les appelle. Voici lexemple d' une fonction qui accepte tout nombre de vecteurs de deux lments et trace une ligne pour les relier : function testvar(varargin) for i = 1:length(varargin) x(i) = varargin{i}(1); % Cell array indexing y(i) = varargin{i}(2); end xmin = min(0,min(x)); ymin = min(0,min(y)); axis([xmin fix(max(x))+3 ymin fix(max(y))+3]) plot(x,y) Cod de cette faon, fonction testvar travail avec diverses listes d'entre ; par exemple : testvar([2 3],[1 5],[4 8],[6 5],[4 2],[2 3]) testvar([-1 0],[3 -5],[4 2],[1 1])

Dveloppement du Contenu de "varargin" (variables et argument dentre)


Puisque le "varargin" contient tous les arguments d'entre dans une range de cellules, il est ncessaire d'employer l'indexation de la range de la cellule pour en extraire les donnes. Par exemple : y(i) = varargin{i}(2); L'indexation de la range de cellules a deux composantes souscrites : * Les expressions sont indexes par des cellules, l'intersection de la ligne et de colonne auxquelles elle appartient * Le contenu de l'expression(s) est plac entre parenthses. Dans le code ci-dessus, l'indexation {i} exprime qu'il faut accder la 'iemme' cellule du "varargin". L'indexation(2)exprime ou reprsente le deuxime lment du contenu de la cellules.

Dveloppement du Contenu du "varargout " (variables et argument de sortie)


En affectant tout nombre comme arguments de sortie, on dois mettre tous ces argument de sortie dans la range des cellules de "varargout". Employer le " nargout" pour dterminer avec combien d'arguments de sortie on peut appel la fonction . Par exemple, ce code accepte une range d'entre de deux colonnes, o la premire colonne reprsente les abscisse x et la seconde reprsente les coordonns y. elle les calasse sous forme de vecteur [xi yi]que l'on peut passer dans la fonction "testvar" pour effectuer son test ; ce qui sera fait dans la page suivante la page suivante.

30

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

function [varargout] = testvar2(arrayin) for i = 1:nargout varargout{i} = arrayin(i,:) % Cell array assignment end L'instruction d'affectation l'intrieur du la boucle for emploie la syntaxe des tche assigne aux ranges de cellules. Le ct gauche de la dclaration, la range de cellules, est indexe en utilisant les croisements des lignes et des colonnes, pour indiquer que les donnes vont l'intrieur d'une cellule. Pour l'information complte sur la tche assigne aux ranges de cellules, voir "Structures and Cell Arrays". Voici comment appeler la fonction" testvar2". a = {1 2;3 4;5 6;7 8;9 0}; [p1,p2,p3,p4,p5] = testvar2(a);

" varargin et varargout dans des listes d'arguments "


La fonction "varargin" ou la fonction "varargout" doit faire apparatre le dernier argument dans la liste, aprs cela elle dcide qui des variables requires la priorit entrer parmi les variables d'ent ou de sortie. C'est--dire, que l'appel de fonction doit indiquer les arguments exigs d'abord. Par exemple, les lignes de dclaration des fonctions suivantes permettent de visualiser si la dclaration des placements est correcte ou non dans les fonctions "varargin" et "varargout" : function [out1,out2] = example1(a,b,varargin) function [i,j,varargout] = example2(x1,y1,x2,y2,flag)

Variables Locales et Globales


Les mmes directives qui s'appliquent aux variables de MATLAB s'appliquent galement la ligne de commande des variables dans les M-Files : * On n'a pas besoin d'crire (taper) ou de dclarer des variables. Avant d'assigner une variable une l'autre, cependant, il faut s'assure que la variable du ct droit doit tre assigne une valeur. * N'importe quelle opration qui assigne une valeur une variable cre la variable si ncessaire, ou recouvre sa valeur courante si elle existe dj. * Les noms variables de MATLAB se composent d'une lettre suivie de tout nombre de lettres, de chiffres, et de soulignages. MATLAB distingue les minuscules majuscules et, ainsi A et a ne sont pas la mme variable. * MATLAB emploie seulement les 31 premires lettres pour nommer les variables. D'habitude, chaque fonction de MATLAB, dfinie par un M-dossier, a ses propres variables locales, qui sont spar de ceux d'autres fonctions, et de ceux de la base de zone de travail .Cependant, si plusieurs fonctions, aussi la base de zone de travail, dclarent un nom particulier comme global, alors ces fonction ainsi que la base de la zone de travail partagent une copie simple de cette variable. En assignant n'importe quelle tche cette variable, dans n'importe quelle fonction, elle est disponible toutes les autres fonctions sous la dclaration "globale". Supposer que l'on veut tudier l'effet des coefficients d'interaction, et, dans le modle de prdateur-proie de Lotka-Volterra.
' y1 = y 1 y 1 y 2

y '2 = y 2 + y 1 y 2
Crer un M-file que lon nommera lotka.m. dans lequel on notera ce programme: function yp = lotka(t,y) %LOTKA Lotka-Volterra predator-prey model. global ALPHA BETA yp = [y(1) - ALPHA*y(1)*y(2) ; -y(2) + BETA*y(1)*y(2)]; Les commandes interactives seront alors : global ALPHA BETA

31

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

ALPHA = 0.01 BETA = 0.02 [t,y] = ode23('lotka',0,10,[1; 1]); plot(t,y) Les deux rapports globaux font les valeurs assignes l'ALPHA et BTAS au message de sollicitation de commande disponible l'intrieur de la fonction dfinie par lotka.m. Ils peuvent tre modifis interactivement et de nouvelles solutions sront obtenues sans avoir le besoin d'diter aucun dossier. Pour notre application MATLAB travailler avec des variables globales : * Dclarer la variable comme "globale" dans chaque fonction qui exige l'accs elle. Pour permettre la zone de travail d'accder la variable globale, la dclarer galement comme "globale" par la ligne de commande. * Dans chaque fonction, la commande issue de la dclaration "globale" doit tre en l'occurrence la premire avant le nom variable. La dclaration doit tre faite tout au dbut du M-File. Les noms variables globaux de MATLAB sont en gnral plus longs et plus descriptifs que des noms variables locaux, et se composent parfois de tous les caractres majuscules. Ce ne sont pas des conditions, mais dans but d'augmenter la lisibilit du code de MATLAB et d'viter de redfinir accidentellement une variable globale.

Les Variables Persistantes


Une variable peut tre dfinie comme "persistent" de sorte qu'elle ne change pas la valeur d'un appel l'autre. Des variables persistantes peuvent tre employes dans une fonction seulement. Les variables persistantes demeurent dans la mmoire jusqu' ce que le M-File soit dgag ou qu'il ait t chang. "persistant" est exactement comme "global", sauf que le nom de la variable n'est pas dans la zone de travail globalement, et la valeur est remise zro si le M-File est chang ou dgag. Trois fonctions de MATLAB portent l'utilisation des variables persistantes.

Function Description
mlock munlock mislocked

Prevents an M-file from being cleared : Empche un M-File de s'tre dgag Unlocks an M-file that had previously been locked by mlock : Ouvre un M-File qui avait t prcdemment ferm clef par la commande"mlock" Indicates whether an M-file can be cleared or not : Indique si un M-File peut tre dgag ou pas

Valeurs Spciales
Plusieurs fonctions renvoient ou retournent les valeurs spciales importantes que l'on peut employer dans vos M-File.

32

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Function Return Value


ans eps realmax realmin pi i, j inf NaN computer version

Most recent answer (variable). If you do not assign an output variable to an expression, MATLAB automatically stores the result in ans. Floating-point relative accuracy. This is the tolerance MATLAB uses in its calculations. Largest floating-point number your computer can represent. Smallest floating-point number your computer can represent.
3.1415926535897...

Imaginary unit. Infinity. Calculations like n/0, where n is any nonzero real value, result in inf. Not-a-Number, an invalid numeric value. Expressions like 0/0 and inf/inf result in a NaN, as do arithmetic operations involving a NaN. n/0, where n is complex, also returns NaN. Computer type. MATLAB version string.

Voici plusieurs exemples qui emploient ces valeurs dans des expressions de MATLAB. x = 2*pi; A = [3+2i 7-8i]; tol = 3*eps;

Types De Donnes
Il y a 14 types de donnes fondamentaux (ou classes) dans MATLAB. Chacun de ces types de donnes est sous forme de range(ou espace ou dimension).Cette range(ou espace ou dimension) est un minimum de taille de 0-par-0 et peut devenir au choix un dimensionnel de taille n ou de n'importe quelle autre taille. Les versions bidimensionnelles de ces ranges (ou espace ou dimension) s'appellent les matrices. Tous les types de donnes fondamentaux sont montrs en texte minuscule dans le diagramme ci-dessous. Un type de donnes additionnel et dfini pour l'utilisateur, montr ci-dessous comme classe d'utilisateur, est un sous-ensemble du type de structure.

33

Introduction au logiciel MATLAB Version 6 et 6.5

ALIA. Med

Le type de donnes "char" tient des caractres dans la reprsentation d'Unicode. Une chane de caractres est simplement un choix de 1-par-n caractres. On peut employer "char" pour comparer les longues chanes ont la mme longueur (c'est parce que les espaces de MATLAB doivent tre de forme rectangulaires). Pour superposer des chanes de longueurs ingales, utiliser la commande "cell".

A ce niveau vous tes bien lancs ; a vous la suite

34

Vous aimerez peut-être aussi