INTRODUCTION Introduction (2) MATrix LABoratory Logiciel qui permet, de manière interactive : de faire des calculs matriciels ; d analyser les données ; de visualiser les résultats en 2D et 3D... Langage de programmation Toolboxes : ensemble de fonctions (fichiers.m) développées pour des domaines d applications spécifiques SIMULINK : interface graphique interactive de MATLAB Fonctionnement Mode interactif : Les instructions sont exécutées au fur et à mesure qu elles sont entrées par l utilisateur L espace de travail : le Workspace (1) Données Espace de travail Mode programme : MATLAB exécute, ligne par ligne, les instructions d un fichier.m Type de variables : unique : la matrice Historique 1
L espace de travail (2) Déclarer des variables : >> x =12.5 ; y = [1-5 2] ; définies et dimensionnées automatiquement au fur et à mesure de leur déclaration stockées dans l espace de travail S informer sur les variables : >> who Your variables are: x y >> whos Name Size Bytes Class x 1x1 8 double array y 1x4 32 double array Grand total is 5 elements using 4 bytes L espace de travail (3) Supprimer une (ou toutes les) variable(s) : >> clear x >> clear all Entrer une valeur au clavier : >> x = input( Valeur de x = ) Valeur de x =12 x = 12 Afficher un texte à l écran : >> disp( Ceci est un test ) Ceci est un test >> disp([ x vaut, num2str(x)]) x vaut 12 L espace de travail (4) L aide sous MATLAB >> helpdesk Gérer les accès aux répertoires / fichiers >> pathtool Editer les commandes : ou lettre + (ou double clic dans l historique) >> help nom de commande fournit de l aide sur l utilisation de la commande (et les rubriques connexes). >> lookfor mot-clé fournit la liste des fonctions contenant le mot-clé. 2
Plan 1. Vecteurs et matrices 2. La programmation MATLAB 3. Les graphiques 4. Les polynômes et l analyse numérique 5. L import/export de données 3
VECTEURS ET MATRICES Scalaires et opérations scalaires Vecteurs et opérations vectorielles Matrices et opérations matricielles Tableaux multidimensionnels Structures Les scalaires (1) Le scalaire : une matrice 1x1 >> s =2.5 ; >> size(s) 1 1 ou >> [i,j] = size(s) i = 1 j = 1 Les format d affichage format short.333 format long.33333333333 format short e 3.3333E-2 format long e 3.333333333334E-2 format rat 1/3 format bank.3 Les scalaires (2) Les complexes : >> x=1+j x = 1. + 1.i Les constantes prédéfinies : >> pi 3.1416 >> eps 2.224e-16 >> 1/ Warning : Divide by zero Inf >> / Warning : Divide by zero NaN Les scalaires (3) Les opérations arithmétiques >> 3 +7-2 * 9-8 divisions droite (/) et gauche (\) élévation à une puissance (^) Quelques fonctions fonctions trigo : cos acos cosh exponentielle : exp log népérien : log log décimal : log1 racine: sqrt x ou x : abs Re& Im : real imag arrondis : round ceil floor fix 4
Créer un vecteur (1) Créer un vecteur (2) Vecteur ligne >> v1= [1 2-5] ; ou >> v1(1) =1; v1(2) =2;v1(3)=-5; ou >> v1(1) = [1, 2,-5] ; Vecteur colonne >> v2=[-7;3]; Transposition : >> v3=v2 v3 = -7 3 Le vecteur : une matrice 1xn >> size(v1) 1 3 longueur d un vecteur >> long_v1 = length(v1) long_v1 = 3 Concaténation >> v4 =[v1 v3] v4 = 1 2-5 -7 3 Vecteur vide >> v =[ ] ; Créer un vecteur (3) Génération automatique composantes espacées d un pas constant syntaxe : v =debut : pas : fin >> v5=1:.5:3 v5= 1. 1.5 2. 2.5 3. v =linspace(1, 3, 5) par défaut (pas = 1) v =debut : fin espacement logarithmique de 1 debut à 1 fin syntaxe : v =logspace(debut, fin, N) Extraction >> v4(3) -5 >> v4(2:4) 2-5 -7 Extraction selon un critère >> i =find(v4 <) i = 3 4 >> v4(i) -5-7! Opérations vectorielles (1) Sous MATLAB, le premier indice d un tableau est 1 5
Opérations vectorielles (2) opérations élémentaires somme de vecteurs de même dimensions >> s = [2 1-1]+ [1-3 5] s = 3-2 4 ajout d un scalaire >> s + 2 5 6 produit de vecteurs de même dimensions >> p = [2 1-1] * [1-3 5] p = -6 produit élément par élément >> [2 1-1].* [1-3 5] 2-3 -5 Opérations vectorielles (3) >> v = [1 2-5 -7 3] somme des éléments d un vecteur >> sum(v) -6 produit des éléments d un vecteur >> prod(v) 21 moyenne : mean(v) médiane : median(v) écart-type : std(v) minimum : min(v) maximum : max(v) Créer une matrice (1) Saisie d une matrice lignes séparées par un point virgule >> M1=[1 3;2 5 1] M1 = 1 3 2 5 1 lignes séparées par un retour chariot >> M1=[1 3 2 5 1] M1 = 1 3 2 5 1 Dimensions >> size(m1) 2 3 Créer une matrice (2) par concaténation >> M2= [ 7 12]; >> M3 = [M1 ; M2] M3 = 1 3 2 5 1 7 12 par transformation >> reshape(m3, 1,9) 1 2 5 7 3 1 12 par extraction : triu tril matrices triangulaires supérieures et inférieures 6
Les matrices spéciales (1) Les matrices spéciales (2) Matrices identité, nulle et unité >> IDENTITE = eye( 2,3) IDENTITE = 1 1 ones (m,n) : matrice m x n dont tous les éléments valent 1 zeros(m,n) : matrice m x n dont tous les éléments valent Si m=n, spécifier une seule dimension >> UNITE = ones( 2) UNITE = 1 1 1 1 Matrices aléatoires Distribution normale (m =, σ = 1) : >> y = randn(1,1) ; Distribution uniforme (m = 1/2, σ = 1/12) : >> y = rand(1,1) ; 8 6 4 2 25 2 15 1 5-4 -3-2 -1 1 2 3 4.2.4.6.8 1 Opérations matricielles (1) Extraction d un élément : >> M3(3,2) >> M3(6) 7 7 d une ligne : >> M3(2, : ) 2 5 1 d une colonne : >> M3( :,2) 5 d une sous-matrice :?? Opérations matricielles (2) Comparaison >> M3 = [1 3 ; 2 5 1 ; 7 12] ; >> M4 = ones(3) ; >> M3 > M4 %find(m3 > 1) 1 1 1 1 1 Extension des instruction min, max... >> max(m3) %maximum par colonnes 2 7 12 >> max(m3(:)) %max(max(m3)) 12 7
Opérations matricielles (3) Produit classique Rappel : le produit de A(mxn) par B(pxq) n est possible que si n = p et le résultat est de dimension mxq Produit de Hadamard ou produit élément par élément de deux matrices de mêmes dimensions >> A = [1 2 ; 3 4] >> A * A >> A.* A 7 1 1 4 15 22 9 16 Opérations matricielles (4) Transformations >> M = [1 2 ; 3 4] >> fliplr(m) %retournement gauche/droite 2 1 4 3 >> flipud(m) %retournement haut/bas 3 4 1 2 >> rot9(m) %transposition + flipud 2 4 1 3 Opérations matricielles (5) Vecteurs et valeurs propres Fonctions diverses déterminant : >> det(m) norme >> norm(m) rang >> rank(m) inverse (et pseudo-inverse) >> inv(m) >> pinv(m) conditionnement >> cond(m) exponentielle expm : vecteurs et valeurs propres expm1 : approximation de Padé expm2 : série de Taylor >> M = [2 1 ; 1 2] ; Polynôme caractéristique : λi - M = >> poly(m) 1-4 3 Vecteurs et valeurs propres >> [vec val] = eig(m) vec =.771.771 -.771.771 val = 1 3 8
Les tableaux multidimensionnels Extension à n dimensions : vecteur (1D) : 1 indice matrice (2D) : 2 indices, ligne et colonne tableau tridimensionnel : 3 indices, ligne, colonne et page... exemple : >> M1 =ones(3) ; >> M2 =zeros(3) ; >> M3 =cat(3,m1,m2) ; M3( :, :, 1) = 1 1 1 1 1 1 1 1 1 M3( :, :, 2) = Les structures (1) Structure = regroupement de variables (champs) de type différents (chaînes, entiers...) dans une même variable. exemple : fichier des élèves d un établissement scolaire : nom notes adresse... nom=struct( ch1,{v1,v2...}, ch2,{v1,v2...}) >>eleve=struct( nom,{ paul, eve, jean }, {12,8,11}, note2,{14,15,3}) eleve = 1x3 struct array with fields : nom note1 note2 note1, Les structures (2) Liste des champs >> fieldnames(eleve) nom note1 note2 Extraction : on utilise l opérateur. >> eleve(2).nom eve Affectation directe >> eleve(4).nom = toto ; eleve = 1x4 struct array with fields :... Les structures (3) Manipulation indirecte nécessite de créer des vecteurs de données tampons >> liste1 = cat(1,eleve.note1) liste1 = 12 5 17 >> liste2 = cat(1,eleve.note2) ; >> moy=mean(mean([ liste1 liste2 ]) moy = 13.125 9
LA PROGRAMMATION MATLAB Les opérateurs logiques Les chaînes de caractères Les commandes structurées Les scripts et les fonctions La programmation Opérateurs logiques == égalité ~ = différence <( <=) inférieur (ou égal) >( >=) supérieur (ou égal) & ET logique (AND) ~ NON logique (NOT) OU logique (OR) xor OU exclusif (XOR) Exemple : >> a = [1 1] ; >> b = [1 1 1] ; >> a b 1 1 1 Chaînes de caractères (1) Généralités chaîne = vecteur ligne nombre de composantes = longueur de la chaîne Affectation >> ch = bonjour monsieur >> size(ch) 1 16 Conversions num2str : nombre chaîne mat2str : matrice chaîne str2num : chaîne nombre Chaînes de caractères (2) Ecriture de chaînes formatées syntaxe : text=sprintf( format1 format2..., data1, data2...) exemple : >> pi2 = pi^2 pi2 = 9.8696 >> text = sprintf( le carré de pi vaut %3.2f, pi2) text = le carré de pi vaut 9.87 Exécution d une chaîne : exemple : >> name = c:/bin/data >> eval([ load, name]); %load(name) 1
L instruction FOR (1) parcours d'un intervalle syntaxe : for variable =debut : fin instructions... instructions end exemple : créer le vecteur [1 2 2 2 2 4... 2 1 ] >> x=[ ] x = [ ] >> for n=:1 ; x =[x 2^n] ; end ou directement >> for n=:1; x(n +1) =2^n; end programmation matricielle?? L instruction FOR (2) On peut utiliser un incrément (pas) autre que 1 (valeur par défaut). syntaxe : for variable =debut:pas:fin Les bornes ne sont pas nécessairement des entiers. Le pas peut être négatif. Il est possible d imbriquer les boucles! Penser à l indentation!! bouton droit smart indent La boucle WHILE tant que... faire syntaxe : while expression instructions... instructions end exemple: calculer le plus petit entier n tel que 2 n soit supérieur à un réel a donné. >> max =22 ; n=1; >> while (2^n <max);n=n+1;end; >> n n = 11 Les ruptures de boucle Il est possible de provoquer une sortie prématurée d'une boucle de contrôle. break termine l exécution d une boucle. for variable1 = debut1 : fin1 instructions... for variable2 = debut2 : fin2 instructions... break instructions end instructions end return provoque un retour au programme appelant (ou au workspace). 11
L instruction IF (1) La séquence d instructions intérieure est exécutée si expression est vrai (=1 logique). syntaxe if expression instruction........ instruction end expression peut être simple ou composée. exemple if (a< & b<) disp( a et b négatifs ) end L instruction IF (2) Permet de choisir entre deux options. syntaxe if expression instructions 1 else instructions 2 end si expression n est pas vérifier alors les instructions 2 sont exécutées L instruction IF (3) Permet une sélection multiple. syntaxe if expression1 instructions 1 elseif expression2 instructions 2 elseif expression3 instructions 3........... else expressionn instructions N end L instruction SWITCH Permet une sélection multiple. syntaxe switch variable case valeur1 instructions 1 case valeur2 instructions 2.......... Otherwise instructions (erreur) end 12
Script Fichier (trouvenom.m par exemple) contenant une suite d instructions matlab. Exécuté séquentiellement dans l espace de travail, il accède aux variables (locales) qui s y trouvent. Pour écrire un script, utiliser l éditeur : >> edit %trouvenom.m %trouve les noms commençant par %lettre liste(find(liste(:,1) == lettre),:) >> lettre = d ; >> trouvenom didier Fonctions (1) Fichier (trouve.m par exemple) contenant une suite d instructions matlab. Commence par le mot réservé function. Reçoit un (ou plusieurs) paramètre(s) d entrée. Peut renvoyer un (ou plusieurs) paramètre(s) en sortie ou n en renvoyer aucun.! Nom du fichier = nom de la fonction Fonctions (2) function noms = trouve (liste,lettre) %retourne l ensemble des noms %commençant par lettre %IN liste, lettre %OUT noms noms=liste(find(liste(:,1) == lettre),:); >> clear all >> help trouve retourne la liste des noms >> nom = trouve(liste, c ) ; >> nom nom = catherine syntaxes : s = f(e1, e2, ) [s1, s2, ] = f(e1, e2, ) Fonctions (3) Evaluation d une fonction définie dans un fichier (f1.m) function y = f1(x) y = 2*x.^2-5*x +1 >> x = -1:.1:1; >> y =feval( f1, x) ; >> plot(x,y) 3 25 2 15 1 5-5 -1-5 5 1 13
Fonctions privées Fonctions (4) placées dans un répertoire private seuls les fichiers.m du répertoire parent peuvent y accéder REP1 M-files11 M-files12 M-files13 REP2 M-files21 M-files22 private Fonction privée Fonctions (5) Sous fonctions un fichier.m peut contenir plusieurs fonctions la première est la fonction primaire les suivantes sont des sous fonctions accessible à la fonction primaire et aux autres sous fonctions du fichier.m l aide ne peut accéder qu aux lignes de commentaires de la fonction primaire function foncprim(... ) %help fonc instructions x = sous_fonc(... ) instructions %%%%%%%%%%%%%%%%%%%% function x =sousfonc(... ) %help sous_fonc instructions Les variables : locales ou globales? Les variables des scripts sont locales à l espace de travail Les variables des fonctions sont locales à la fonction Une variable définie comme globale à l espace de travail (ou à un script) sera modifiable par toutes les fonctions l ayant déclarée globale Programmation (1) Forme générale d une application MATLAB SCRIPT Fonction 1 Fonction 2 Fonction 3 function y = f2(x) global A B C y = A*x.^2 + B*x + C >> global A B C >> A = 1 ; B = 3 ; C = -1 ; >> x = -1:.1:1; >> y = f2(x) ; Fonctions privées et/ou sous fonctions Fonction 21 Fonction 22 14
Programmation (2) Quelques recommandations Choisir des noms significatifs pour les variables et les fonctions Documenter les fonctions (help) Vérifier le nombre d arguments d entrée (nargin) et de sortie (nargout) des fonctions Eviter (autant que possible!) les boucles for et while Dimensionner les variables Programmation (3) Mesure de complexité algorithmique temps d exécution (en secondes) : >> A = rand(2); >> tic ; inv(a *A) ; toc elapsed_time = 12.41 Le profiler ( >> help profile ) >> profile report temps d exécution total (en secondes) >> profile report N N lignes demandant le plus de temps d exécution (en % du temps total) Les messages d erreur :??? Index exceeds matrix dimensions. Error in ==> C:\MATLAB\bin\test.m On line 2 ==> x(4) Programmation (4) Boucles et programmation matricielle >> A = rand(2) ; >> x = ; >> tic >> for i = 1 : 2 for j = 1 : 2 x = x + A(i,j) ; end end >> toc elapsed_time = 4.5 >> tic ; sum(a(:)) ; toc elapsed_time =.6 Programmation (5) Le débogage permet de corriger : les erreurs de programmation (nombre d arguments d entrée et de sortie, syntaxe des commandes...) les erreurs logiques (bugs) Utiliser : le point virgule ; le mode clavier : keyboard K>> le debugger >> help debug Debugging command... 15
LES GRAPHIQUES Les graphes en 2D Les graphes en 3D L exportation de graphes Tracer une courbes 2D (1) La commande plot(x,y,s) affiche le vecteur y en fonction du vecteur x avec les attributs (facultatifs) s. >> x =[-1:.1:1]; >> y1 =x.^2; >> plot(x, y1, r ) 1 9 8 7 6 5 4 3 2 1-1 -5 5 1 Tracer une courbes 2D (2) plot(y) permet de tracer directement le vecteur y en fonction de ses indices. plot(x,y1,s1,x,y2,s2,...) trace y1, y2... en fonction de x sur le même graphe avec les attributs s1, s2... >> y2 =.5*x.^2 - x + 1 ; >> plot(x, y1, r, x, y2, b ) Légender une courbe (1) Insérer un titre >> title( Tracé de x^2 et.5x^2-x+1 ) Légender l axe des abscisses >> xlabel( x : axe des abscisses) Légender l axe des ordonnées >> ylabel( y : axe des ordonnées ) 1 9 8 7 6 5 4 3 2 Insérer du texte >> gtext( x^2 ) >> gtext(.5x^2 - x + 1 ) Ajouter un quadrillage >> grid 1-1 -5 5 1 16
Légender une courbe (2) Manipuler un graphique (1) 1 9 8 Tracé de x 2 et.5x 2 -x+1 La commande zoom (2D seulement) permet de zoomer sur une partie de courbe avec le bouton gauche de la souris (le bouton droit annule le zoom) y : axe des ordonnées 7 6 5 4 3 x 2 La commande axis permet de changer les bornes de visualisation syntaxe: axis([xmin xmax ymin ymax]) 2 1.5x 2 - x + 1-1 -5 5 1 x : axe des absisses Dans les deux cas : focalisation sur une partie intéressante de la courbe Lecture précise du point d intersection entre deux courbes Manipuler un graphique (2) Manipulation interactive du graphique Tracer plusieurs courbes Sur un même graphique >> plot(x, y1, r ) >> hold on >> plot(x, y2, b ) Sur plusieurs graphiques différents >> subplot(211), plot(x, y1, r ) >> subplot(212), plot(x, y2, r ) (Nb écrans vertical, Nb écrans horizontal, N écran) 1 5-1 -5 5 1 8 6 4 2-1 -5 5 1 17
Tracer le graphe d une fonction La commande fplot( f,x) permet d afficher les variations de la fonction f1 (enregistrée dans le fichier f1.m) sur l intervalle x. >> x =:.1:4*pi; >> fplot ( sin, x) Histogrammes Tracés à l aide de la commande hist >> y = randn(1,1) ; >> hist (y, 5) >> title( distribution normale : répartition en 5 classes ) 5 45 distribution normale : répatition en 5 classes 4 1.8.6.4.2 -.2 -.4 -.6 35 3 25 2 15 1 5-3 -2-1 1 2 3 -.8-1 2 4 6 8 1 12 (par défaut N_classe = 1) Courbes paramétrées Exprimer x et y en fonction de t exemple : courbe de Lissajous >> t =:.1:2*pi; >> x = cos(3*t) ; >> y = sin(t) ; >> plot(x, y) Tracer une courbe 3D Syntaxe : plot3(x, y, z, s) >> t =:.1:25; >> x = exp(-.5*t).*cos(t) ; >> y = exp(-.5*t).*sin(t) ; >> z = t ; >> plot3(x, y,z) 1 x(t) = cos(3t) y(t) = sin(t).8.6 25.4 2.2 15 -.2 1 -.4 5 -.6 1 -.8-1 -1 -.5.5 1.5 -.5-1 -1 -.5.5 1 18
Tracer une surface (1) >> x = -pi/2 : pi/3 : pi/2 ; >> y = x ; >> [X,Y] = meshgrid(x,y) ; >> Z =sinc(x.^2 + Y.^2) ; >> mesh(x, Y, Z) Tracer une surface (2) >> colormap( cool ) >> surf (X, Y, Z) meshc meshz : idem avec contours surfc : avec contours surfl : avec jeu d ombres Orienter un graphe 3D Gérer un graphique rotate3d + bouton gauche ou view(azimut, élévation) exemple : >>subplot(121), surf(x,y,z), view(,) >>subplot(122), surf(x,y,z), view(,9) Gestion des fenêtres ouvrir une nouvelle fenêtre : figure fermer une fenêtre : close fermer toutes les fenêtres : close all Exportation créer un fichier postcript (qu il est possible d importer dans un traitement de texte). Son nom est alors fig.ps : print -deps fig sous Windows, utiliser edit copy figure puis coller (sous Word, Powerpoint...) 19
y LES POLYNOMES ET L ANALYSE NUMERIQUE Polynômes Opérations polynomiales Interpolation et régression Résolution d équations non linéaires Recherche de minima Vecteur ligne Les polynômes ensemble de données Vecteur ligne polynôme de degré n p(x) = a n x n + a n-1 x n-1 +... + a 1 x + a >> p =[a n a n-1... a 1 a ] ; >> length(p) n + 1 >> p1 =[1 2] ; %p1(x) = x 2 + 2 >> p2 =[2 4 ] ; %p2(x) = 2x 2 +4x! coefficients disposés suivant les puissances décroissantes de x Opérations polynomiales Multiplication de 2 polynômes >> p3 =conv(p1, p2) p3 = 2 4 4 8 p 3 (x) = 2x 4 + 4x 3 + 4x 2 + 8x Extension à n polynômes p 4 (x) = x(x + 2)(2x - 3) >> p4 =conv([1 ],conv([1 2],[2-3])) p4 = 2 1-6 Division de polynômes >> p1 = deconv(p3, p2) p1 = 1 2 Fonctions polynomiales L instruction polyval permet d évaluer les variations d une fonction polynomiale sur un intervalle x. >> f =[-1-5 1 ] ; %f(x)=- x 3-5x 2 +x >> x =-1 :1 ; >> y =polyval(f, x) ; >> plot(x,y) 5-5 -1 graphe de f(x) = -x 3-5x 2 + x -15-1 -5 5 1 x 2
Interpolation (1) Interpolation polynomiale au sens des moindres carrés : >> p=polyfit(x, y, ordre) ; Importance de l d interpolation : ordre du polynôme %fonction sigmoïde bruitée x = -5:.1:5 ; mes=1./(1+exp(-x))+.5*randn(1,length(x)) ; %interpolation d'ordre 1 p = polyfit(x, mes, 1) ; res = polyval(p,x) ; plot(x,mes,'b+',x, res,'r',x,mes - res, 'g') %interpolation d'ordre 5 p = polyfit(x, mes, 5) res = polyval(p,x) ; plot(x,mes,'b+',x, res,'r',x,mes -_res, 'g') Interpolation (2) Ordre 1 : erreur σ =.113 1.5 1.5 -.5-5 -4-3 -2-1 1 2 3 4 5 Ordre 5 : erreur σ =.23 1.5 1.5 -.5-5 -4-3 -2-1 1 2 3 4 5 Interpolation (3) Relier des points (ensemble de données) expérimentaux par une courbe formée de segments de droite ou de courbes polynomiales syntaxe : interp1(x,y,z, type ) type : linear interpolation linéaire spline interpolation par splines cubic interpolation cubique >> x =:1 ; >> y = cos(x) ; >> z = :.1:1 ; %pas de z < pas de x >> f =interp1(x,y,z) ; %par défaut : linear >> plot(x,y, bo,z,f, r+ ) De même : 1.8.6.4.2 -.2 -.4 -.6 -.8 Interpolation (4) interp2 interpolation dans l espace 3D interp3 interpn -1 2 4 6 8 1... 21
Régression linéaire Détermination du modèle linéaire y=f(x) reliant deux séries de mesure x et y. y i = ax i + b construction de la matrice Φ : >> phi =[x ones(length(x),1)] ; détermination de θ : >> teta =nnls(phi,y ) ; y1 x1 1 y 2 x2 1 a =.. b.... yn xn 1 y = Φθ T 1 T vecteur optimal θ = ( ΦΦ) Φy (au sens des moindres carrés) Résolution d équations non linéaires Détermination des racines d une fonction non linéaire par la méthode de Newton-Raphson enregistrer l expression littérale de la fonction dans un fichier (foncnl.m) utiliser la fonction fzero pour déterminer une racine de l équation au voisinage de x fzero( fonc_nl, x) utiliser la fonction fsolve pour déter-miner l ensemble des racines de l équation dans l intervalle (x d, x f ) fsolve( fonc_nl, xd : xf) function f_nl = foncnl =(x) %fonction non linéaire f_nl = cos(x).*exp(-.1*x).*sin(-2*x).+5 ; >> x =-3:3 ; >> plot(x,foncnl(x)), grid 1.6 1.4 1.2 1.8.6.4.2 -.2 -.4-3 -2-1 1 2 3 >> fzero( foncnl,.5).2826 >> fsolve( foncnl, : 2).2826.955 Recherche de minima (1) Fonctions à une variable : la valeur qui minimise localement une fonction (enregistrée dans fonc.m) dans l intervalle (x d, x f ) s obtient par : fminbnd( fonc, xd, xf) exemple : >> xmin= fminbnd( foncnl,,2) xmin =.5989 Fonctions à plusieurs variables : même principe mais l argument d appel est un vecteur : fminsearch( fonc, [x y]) 22
Recherche de minima (2) exemple : function f2 =fonc2(x) f2 = 2*X(1)^2 +X(2)^2 - X(1) +X(2) +1 >> minxy =fminsearch( fonc2,[ ]) minxy =.25 -.5 >> minf =fonc2(minxy) minf = 7.553 valeur minimale de la fonction 23
IMPORT/EXPORT DE DONNEES Fichiers.mat Fichiers externes Formats spécifiques Fichiers.mat (1) Sauvegarde et restitution des données de l espace de travail syntaxe : save nom var1 var2... varn >> x1 =ones(2) ; x2 =[4.5; 2.1; -6.2] ; >> save nom Sauvegarde de toutes les variables de l espace de travail dans le fichier nom.mat >> save nom x1 Sauvegarde de la variable x1 dans le fichier nom.mat >> clear all >> load nom >> who Your variables are : x1 Fichiers.mat (2) Si le nom du fichier de sauvegarde est généré par programme >> nomfich = nom1 >> save(nomfich, x1 ) >> clear x1 >> load(nomfich) >> who Your variables are : nomfich x1 Sauvegarde dans un fichier texte >> save nom2 x1 - ascii >> type nom2 1.e+ 1.e+ 1.e+ 1.e+ Fichiers externes (1) 1. Ouverture de fichiers FID =fopen(nomfich, attribut) nomfich : chaîne de caractères attribut : chaîne de caractères précisant le mode d ouverture du fichier : r ouverture en lecture seule w création en écriture seule a ouverture et placement en fin de fichier en écriture seule r+ ouverture pour mise à jour ou w+ création (lecture et écriture) a+ ouverture pour mise à jour et placement en fin de fichier (lecture et écriture) 24
Fichiers externes (2) Par défaut : ouverture des fichiers en binaire. Pour ouvrir un fichier texte ajouter la lettre t ( rt, wt...) 2. Lecture/ecriture : fread fwrite fscanf... 3. Fermeture fclose(fid) ferme le fichier ayant pour identificateur FID Fichiers textes Lecture et écriture formatées [data, compt] =fscanf(fid, format, taille) data : vecteur colonne représentant les valeurs lues compt : nombre d éléments lus (facultatif) format : format ( %d, %c, %3.2f...) et séparateurs ( \n \t...) compt=fprintf(fid, format, data) ligne=fgetl(fid) fclose( all ) ferme tous les fichiers ligne : chaîne de caractères contenant la ligne courante du fichier FID Lecture Fichiers binaires (1) [data, compt] =fread(fid,taille,type,saut) Ecriture Fichiers binaires (2) compt =fwrite(fid,data,type,saut) data : compt : FID : taille : matrice de stockage des données lues (réels double) nombre d éléments lus avec succès identificateur du fichier nombre d éléments à lire (facultatif) compt : FID : data : type : nombre d éléments lus avec succès identificateur du fichier matrice des données à écrire type (nombre d octets) de l élément à écrire type : type (nombre d octets) de l élément à lire ( char, int, long...) saut : nombre d octets à ignorer avant chaque écriture (facultatif) saut : nombre d octets à ignorer après chaque lecture (facultatif) intéressant pour l extraction de champs non contigus mais de longueur fixe 25
Fichiers binaires (3) Positionnement statut =fseek(fid,offset,origine) statut : offset : origine : statut =feof(fid) en cas de succès,-1 encas d échec nombre d octets au-delà de origine (positif ou négatif) position bof début de fichier cof position courante du pointeur eof fin de fichier statut : 1 si la fin du fichier est atteinte, autrement frewind(fid) positionne le pointeur sur le premier octet Formats spécifiques ASCII : fichiers textes manipulables par un éditeur de textes et contenant des données présentées sous formes de matrice load nom ASCII délimité (DLM =,,, ;...) data =dlmread(nom, DLM) dlmwrite(nom, data,) CSV : ASCII délimité per une virgule csvread(nom) csvwrite(nom, data) WK1 : fichiers Lotus 123 wk1read(nom) wk1write(nom, data) 26