INTRODUCTION Introduction (2) · • SIMULINK : interface graphique interactive de MATLAB...

26
•1 INTRODUCTION 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 Introduction (2) Fonctionnement Mode interactif : Les instructions sont exécutées au fur et à mesure qu ’elles sont entrées par l ’utilisateur Mode programme : MATLAB exécute, ligne par ligne, les instructions d ’un fichier .M Type de variables : unique : la matrice L ’espace de travail : le Workspace (1) Espace de travail Données Historique

Transcript of INTRODUCTION Introduction (2) · • SIMULINK : interface graphique interactive de MATLAB...

  • •1

    INTRODUCTION

    • 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

    Introduction (2)

    Fonctionnement

    • Mode interactif :Les instructions sont exécutées au fur et à mesure qu ’elles sont entrées par l ’utilisateur

    • Mode programme : MATLAB exécute, ligne par ligne, les instructions d ’un fichier .M

    • Type de variables :unique : la matrice

    L ’espace de travail :le Workspace (1)

    Espace de travailDonnées

    Historique

  • •2

    L ’espace de travail (2)

    • Déclarer des variables :>> x =12.5 ; y = [1 -5 0 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 :>> whoYour variables are:x y >> whosName Size Bytes Classx 1x1 8 double arrayy 1x4 32 double arrayGrand total is 5 elements using 40 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 =12x =

    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)

    • Gérer les accès aux répertoires / fichiers>> pathtool

    • Editer les commandes : ou lettre +(ou double clic dans l’historique)

    L ’aide sous MATLAB>> helpdesk

    >> 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é.

  • •3

    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

  • •4

    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)ans =

    1 1ou>> [i,j] = size(s)i =

    1j =

    1• Les format d ’affichage

    format short 0.0333format long 0.033333333333format short e 3.3333E-002format long e 3.333333333334E-002 format rat 1/30format bank 0.03

    Les scalaires (2)

    • Les complexes :>> x=1+jx =

    1.0000 + 1.0000i

    • Les constantes prédéfinies : >> pians =

    3.1416

    >> epsans =

    2.2204e-016

    >> 1/0Warning : Divide by zero

    Inf

    >> 0/0Warning : Divide by zero

    NaN

    Les scalaires (3)

    • Les opérations arithmétiques>> 3 +7 - 2 * 9ans =

    -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 : log10– racine : sqrt– |x|ou ||x||: abs– Re & Im : real imag– arrondis : round ceil floor fix

  • •5

    Créer un vecteur (1)

    • 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

    Créer un vecteur (2)

    • Le vecteur : une matrice 1xn>> size(v1)ans =

    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 automatiquecomposantes espacées d ’un pas constant

    syntaxe : v =debut : pas : fin

    >> v5=1:0.5:3v5=

    1.000 1.500 2.000 2.500 3.000

    ⇔ v =linspace(1, 3, 5)

    par défaut (pas = 1) v =debut : fin

    espacement logarithmique de 10debut à 10fin

    syntaxe : v =logspace(debut, fin, N)

    • Extraction>> v4(3) ans =

    -5>> v4(2:4) ans =

    2 -5 -7

    • Extraction selon un critère>> i =find(v4 > v4(i) ans =

    -5 -7

    Sous MATLAB, le premier indice d ’un tableau est 1

    Opérations vectorielles (1)

    !

  • •6

    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 + 2ans =

    5 0 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]ans =

    2 -3 -5

    Opérations vectorielles (3)

    >> v = [1 2 -5 -7 3]– somme des éléments d ’un vecteur

    >> sum(v)ans =

    -6

    – produit des éléments d ’un vecteur>> prod(v)ans =

    210

    – 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 0 3;2 5 1]M1 =

    1 0 32 5 1

    – lignes séparées par un retour chariot>> M1=[1 0 3

    2 5 1]M1 =

    1 0 32 5 1

    • Dimensions>> size(M1) ans =

    2 3

    Créer une matrice (2)• par concaténation >> M2= [0 7 12]; >> M3 = [M1 ; M2] M3 =

    1 0 32 5 10 7 12

    • par transformation >> reshape(M3, 1,9)ans =1 2 0 0 5 7 3 1 12

    • par extraction : triu tril

    matrices triangulaires supérieures et infé-rieures

  • •7

    Les matrices spéciales (1)

    • Matrices identité, nulle et unité>> IDENTITE = eye( 2,3)IDENTITE =

    1 0 00 1 0

    – 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 0

    Si m=n, spécifier une seule dimension>> UNITE = ones( 2)UNITE =

    1 11 1

    Les matrices spéciales (2)

    • Matrices aléatoires– Distribution normale (m = 0 , σ = 1) :

    >> y = randn(10000,1) ;

    – Distribution uniforme (m = 1/2 , σ = 1/12) :>> y = rand(10000,1) ;

    -4 -3 -2 -1 0 1 2 3 40

    200

    400

    600

    800

    0 0.2 0.4 0.6 0.8 10

    50

    100

    150

    200

    250

    Opérations matricielles (1)

    • Extraction– d ’un élément :

    >> M3(3,2) >> M3(6)ans = ans =

    7 7

    – d ’une ligne :>> M3(2, : )ans =

    2 5 1

    – d ’une colonne :>> M3( : ,2)ans =

    05

    – d ’une sous-matrice : ??

    Opérations matricielles (2)

    • Comparaison>> M3 = [1 0 3 ; 2 5 1 ; 0 7 12] ;>> M4 = ones(3) ;>> M3 > M4 %find(M3 > 1)ans =

    0 0 11 1 00 1 1

    • Extension des instruction min, max ...>> max(M3) %maximum par colonnesans =

    2 7 12

    >> max(M3(:)) %max(max(M3))ans =

    12

  • •8

    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 .* Aans = ans =

    7 10 1 415 22 9 16

    Opérations matricielles (4)

    • Transformations>> M = [1 2 ; 3 4] >> fliplr(M) %retournement gauche/droiteans =

    2 14 3

    >> flipud(M) %retournement haut/basans =

    3 41 2

    >> rot90(M) %transposition + flipudans =

    2 41 3

    Opérations matricielles (5)

    • 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 propresexpm1 : approximation de Padéexpm2 : série de Taylor

    Vecteurs et valeurs propres

    >> M = [2 1 ; 1 2] ;

    • Polynôme caractéristique : |λI - M| = 0>> poly(M)ans =

    1 -4 3

    • Vecteurs et valeurs propres>> [vec val] = eig(M)vec =

    0.7071 0.7071- 0.7071 0.7071

    val =1 00 3

  • •9

    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 11 1 11 1 1

    M3( : , : , 2) =0 0 00 0 00 0 0

    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 :

    nomnotesadresse ...

    nom=struct(‘ch1’,{v1,v2...}, ’ch2 ’,{v1,v2 ...})

    >>eleve=struct(‘nom’,{‘paul’,’eve’,’jean’}, ’note1’,{12,8,11}, ’note2’,{14,15,3})

    eleve =1x3 struct array with fields :nomnote1note2

    Les structures (2)• Liste des champs

    >> fieldnames(eleve)ans =

    ‘nom’‘note1’‘note2’

    • Extraction : on utilise l ’opérateur ‘.‘>> eleve(2).nomans =

    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 =

    125

    17>> liste2 = cat(1,eleve.note2) ;>> moy=mean(mean([ liste1 liste2 ])moy =

    13.1250

  • •10

    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• =) supérieur (ou égal)• & ET logique (AND)• ~ NON logique (NOT)• | OU logique (OR)• xor OU exclusif (XOR)

    Exemple :

    >> a = [1 0 0 1] ;>> b = [1 1 0 1] ;>> a | bans =

    1 1 0 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)ans =

    1 16

    • Conversionsnum2str : nombre chaînemat2str : matrice chaînestr2num : 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^2pi2 =

    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)

  • •11

    L ’instruction FOR (1)• parcours d'un intervalle

    syntaxe :for variable =debut : fin

    instructions .......... instructions

    end exemple : créer le vecteur [1 2 22 24 .... 210] >> x=[ ]x =

    [ ]>> for n=0:10 ; x =[x 2^n] ; end ou directement

    >> for n=0:10; 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 2n soit supérieur à un réel a donné. >> max =2002 ; n=1;>> while (2^n > 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 : fin1instructions .......... for variable2 = debut2 : fin2

    instructions .......... breakinstructions

    endinstructions

    end

    return provoque un retour au programme appelant (ou au workspace).

  • •12

    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

  • •13

    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

    >> lettre = ‘d’ ;>> trouvenom

    ‘didier’

    %trouvenom.m%trouve les noms commençant par %lettre

    liste(find(liste(:,1) == lettre),:)

    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)

    >> clear all>> help trouveretourne la liste des noms …>> nom = trouve(liste,‘c’) ;>> nomnom =

    ‘catherine’

    syntaxes : s = f(e1, e2, …)[s1, s2, …] = f(e1, e2, …)

    function noms = trouve (liste,lettre)%retourne l’ensemble des noms %commençant par lettre%IN liste, lettre %OUT nomsnoms=liste(find(liste(:,1) == lettre),:);

    Fonctions (3)

    • Evaluation d ’une fonction définie dans un fichier (f1.m)

    >> x = -10:0.1:10;>> y =feval(‘ f1 ’, x) ;>> plot(x,y)

    -10 -5 0 5 10-50

    0

    50

    100

    150

    200

    250

    300

    function y = f1(x)y = 2*x.^2 - 5*x +1

  • •14

    Fonctions (4)

    • Fonctions privées– placées dans un répertoire private– seuls les fichiers .M du répertoire parent

    peuvent y accéder

    M-files11M-files12M-files13

    M-files21M-files22

    Fonction privée

    REP2

    REP1

    private

    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 foncinstructionsx = sous_fonc( ... )instructions

    %%%%%%%%%%%%%%%%%%%%

    function x =sousfonc( ... )%help sous_foncinstructions

    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

    >> global A B C >> A = 1 ; B = 3 ; C = -1 ; >> x = -10:0.1:10;>> y = f2(x) ;

    function y = f2(x)global A B Cy = A*x.^2 + B*x + C

    Programmation (1)

    Forme générale d ’une application MATLAB

    Fonction 1 Fonction 2 Fonction 3

    Fonction 21

    Fonction 22

    SCRIPT

    Fonctions privéeset/ou

    sous fonctions

  • •15

    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(200);>> tic ; inv(A ’*A) ; tocelapsed_time =

    12.4100

    • Le profiler ( >> help profile )>> profile reporttemps d ’exécution total (en secondes)>> profile report NN 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.mOn line 2 ==> x(4)

    Programmation (4)

    • Boucles et programmation matricielle>> A = rand(200) ;>> x = 0 ;>> tic>> for i = 1 : 200

    for j = 1 : 200x = x + A(i,j) ;

    endend

    >> tocelapsed_time =

    4.5000

    >> tic ; sum(A(:)) ; tocelapsed_time =

    0.0600

    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 debugDebugging command ...

  • •16

    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 xavec les attributs (facultatifs) s.

    >> x =[-10:0.1:10];>> y1 =x.^2;>> plot(x, y1, ’r’)

    -10 -5 0 5 100

    10

    20

    30

    40

    50

    60

    70

    80

    90

    100

    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 =0.5*x.^2 - x + 1 ;>> plot(x, y1, ’r’, x, y2, ’b’)

    -10 -5 0 5 100

    10

    20

    30

    40

    50

    60

    70

    80

    90

    100

    Légender une courbe (1)

    • Insérer un titre>> title(‘Tracé de x^2 et 0.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’)

    • Insérer du texte>> gtext(‘x^2’)>> gtext(‘0.5x^2 - x + 1’)

    • Ajouter un quadrillage>> grid

  • •17

    Légender une courbe (2)

    -10 -5 0 5 100

    10

    20

    30

    40

    50

    60

    70

    80

    90

    100

    x : axe des absisses

    y : a

    xe d

    es o

    rdon

    nées

    Tracé de x2 et 0.5x2-x+1

    x2

    0.5x2 - x + 1

    Manipuler un graphique (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)

    • La commande axis permet de changer les bornes de visualisation

    syntaxe:axis([xmin xmax ymin ymax])

    • 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)

    -10 -5 0 5 100

    50

    100

    -10 -5 0 5 100

    20

    40

    60

    80

  • •18

    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 =0:0.1:4*pi;>> fplot (‘sin’, x)

    0 2 4 6 8 10 12-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Histogrammes

    • Tracés à l ’aide de la commande hist>> y = randn(1000,1) ;>> hist (y, 50) >> title(‘ distribution normale : répartition en 50 classes ’)

    (par défaut N_classe = 10)

    -3 -2 -1 0 1 2 30

    5

    10

    15

    20

    25

    30

    35

    40

    45

    50distribution normale : répatition en 50 classes

    Courbes paramétrées

    • Exprimer x et y en fonction de t

    exemple : courbe de Lissajous>> t =0:0.1:2*pi;>> x = cos(3*t) ;>> y = sin(t) ;>> plot(x, y)

    -1 -0.5 0 0.5 1-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1x(t) = cos(3t) y(t) = sin(t)

    Tracer une courbe 3D

    Syntaxe : plot3(x, y, z, s)

    >> t =0:0.1:25;>> x = exp(-0.05*t).*cos(t) ;>> y = exp(-0.05*t).*sin(t) ;>> z = t ;>> plot3(x, y,z)

    -1-0.5

    00.5

    1

    -1

    -0.5

    0

    0.5

    10

    5

    10

    15

    20

    25

  • •19

    Tracer une surface (1)>> x = -pi/2 : pi/30 : pi/2 ;>> y = x ;>> [X,Y] = meshgrid(x,y) ;>> Z =sinc(X.^2 + Y.^2) ;>> mesh(X, Y, Z)

    • meshc meshz : idem avec contours

    Tracer une surface (2)>> colormap(‘ cool ’)>> surf (X, Y, Z)

    • surfc : avec contours• surfl : avec jeu d ’ombres

    Orienter un graphe 3D

    rotate3D + bouton gauche

    ou view(azimut, élévation)exemple :

    >>subplot(121), surf(X,Y,Z), view(0,0)>>subplot(122), surf(X,Y,Z), view(0,90)

    Gérer un graphique

    • 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 figurepuis coller (sous Word, Powerpoint ...)

  • •20

    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

    Les polynômes

    • Vecteur ligne ensemble de données

    • Vecteur ligne polynôme de degré np(x) = anxn + an-1xn-1 + ... + a1x + a0>> p =[an an-1 ... a1 a0] ;>> length(p)ans =

    n + 1

    >> p1 =[1 0 2] ; %p1(x) = x2 + 2>> p2 =[2 4 0] ; %p2(x) = 2x2 +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 0

    p3(x) = 2x4 + 4x3 + 4x2 + 8x

    • Extension à n polynômes

    p4(x) = x(x + 2)(2x - 3)>> p4 =conv([1 0],conv([1 2],[2 -3]))p4 =

    2 1 -6 0

    • Division de polynômes>> p1 = deconv(p3, p2)p1 =

    1 0 2

    Fonctions polynomiales

    • L ’instruction polyval permet d ’éva-luer les variations d ’une fonction polynomiale sur un intervalle x.>> f =[-1 -5 1 0] ; %f(x)=- x3 - 5x2 +x>> x =-10 :10 ;>> y =polyval(f, x) ;>> plot(x,y)

    -10 -5 0 5 10-1500

    -1000

    -500

    0

    500graphe de f(x) = -x3 - 5x2 + x

    x

    y

  • •21

    Interpolation (1)• Interpolation polynomiale au sens des

    moindres carrés :>> p=polyfit(x, y, ordre) ;

    • Importance de l ’ordre du polynôme d ’interpolation :

    %fonction sigmoïde bruitéex = -5:0.1:5 ;mes=1./(1+exp(-x))+0.05*randn(1,length(x)) ;

    %interpolation d'ordre 1p = polyfit(x, mes, 1) ;res = polyval(p,x) ;plot(x,mes,'b+',x, res,'r',x,mes - res, 'g')

    %interpolation d'ordre 5p = polyfit(x, mes, 5) res = polyval(p,x) ;plot(x,mes,'b+',x, res,'r',x,mes -_res, 'g')

    Interpolation (2)• Ordre 1 : erreur σ = 0.0113

    • Ordre 5 : erreur σ = 0.0023

    -5 -4 -3 -2 -1 0 1 2 3 4 5-0.5

    0

    0.5

    1

    1.5

    -5 -4 -3 -2 -1 0 1 2 3 4 5-0.5

    0

    0.5

    1

    1.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 =0:10 ; >> y = cos(x) ; >> z = 0:0.1:10 ; %pas de z < pas de x>> f =interp1(x,y,z) ; %par défaut : linear>> plot(x,y, ’bo ’,z,f, ’r+ ’)

    Interpolation (4)

    • De même :

    interp2 interpolation dans l ’espace 3Dinterp3interpn

    0 2 4 6 8 10-1

    -0.8

    -0.6

    -0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    .

    .

    .

  • •22

    Régression linéaire• Détermination du modèle linéaire

    y=f(x) reliant deux séries de mesure x et y.

    yi = axi + b

    vecteur optimal (au sens des moindres carrés)

    construction de la matrice Φ :>> phi =[x’ ones(length(x),1)] ;

    détermination de θ :>> teta =nnls(phi,y’) ;

    yy

    y

    xx

    x

    11

    1

    ab

    y

    1

    2

    n

    1

    2

    n

    T T

    ⎢⎢⎢⎢

    ⎥⎥⎥⎥

    =

    ⎢⎢⎢⎢

    ⎥⎥⎥⎥

    ⎣⎢

    ⎦⎥

    =

    = −y

    ( )Φ

    Φ Φ Φ

    θ

    θ 1

    .

    .

    .

    .

    .

    .

    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 x0

    fzero(‘ fonc_nl ’, x0)

    utiliser la fonction fsolve pour déter-minerl’ensemble des racines de l’équation dans l ’intervalle (xd, xf)

    fsolve(‘ fonc_nl ’, xd : xf)

    >> x =-3:3 ; >> plot(x,foncnl(x)), grid

    >> fzero(‘foncnl ’,0.5)ans =

    0.2826>> fsolve(‘foncnl ’,0 : 2)ans =

    0.2826 0.9505

    function f_nl = foncnl =(x)%fonction non linéairef_nl = cos(x).*exp(-0.1*x).*sin(-2*x).+5 ;

    -3 -2 -1 0 1 2 3-0.4

    -0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    1.2

    1.4

    1.6

    Recherche de minima (1)

    • Fonctions à une variable : la valeur qui minimise localement une fonction (enregistrée dans fonc.m) dans l’intervalle (xd, xf) s ’obtient par :

    fminbnd(‘ fonc ’, xd, xf) exemple :>> xmin= fminbnd(‘foncnl ’,0,2)xmin =

    0.5989

    • Fonctions à plusieurs variables : même principe mais l ’argument d’appel est un vecteur :

    fminsearch(‘ fonc ’, [x0 y0])

  • •23

    Recherche de minima (2)

    exemple :

    >> minxy =fminsearch(‘fonc2 ’,[0 0])minxy =

    0.2500 -0.5000

    >> minf =fonc2(minxy)minf =

    7.5053valeur minimale de la fonction

    function f2 =fonc2(X)

    f2 = 2*X(1)^2 +X(2)^2 - X(1) +X(2) +1

  • •24

    IMPORT/EXPORT DE DONNEES

    • Fichiers .mat

    • Fichiers externes

    • Formats spécifiques

    Fichiers .mat (1)

    • Sauvegarde et restitution des données de l’espace de travailsyntaxe : 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 x1Sauvegarde de la variable x1 dans le fichier nom.mat

    >> clear all>> load nom>> whoYour 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)>> whoYour variables are :nomfich x1

    • Sauvegarde dans un fichier texte >> save nom2 x1 - ascii>> type nom21.0000000e+000 1.0000000e+0001.0000000e+000 1.0000000e+000

    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)

  • •25

    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

    fclose(‘ all ’)ferme tous les fichiers

    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)

    ligne : chaîne de caractères contenant la ligne courante du fichier FID

    Fichiers binaires (1)

    • Lecture

    [data, compt] =fread(FID,taille,type,saut)

    data : matrice de stockage des données lues (réels double)

    compt : nombre d ’éléments lus avec succèsFID : identificateur du fichiertaille : nombre d ’éléments à lire (facultatif)type : type (nombre d ’octets) de l ’élément

    à lire (‘char’, ‘int’, ‘long’ ...)saut : nombre d ’octets à ignorer après

    chaque lecture (facultatif)

    intéressant pour l ’extraction de champs non contigus mais de longueur fixe

    Fichiers binaires (2)

    • Ecriture

    compt=fwrite(FID,data,type,saut)

    compt : nombre d ’éléments lus avec succèsFID : identificateur du fichierdata : matrice des données à écriretype : type (nombre d ’octets) de l ’élément

    à écriresaut : nombre d ’octets à ignorer avant

    chaque écriture (facultatif)

  • •26

    Fichiers binaires (3)• Positionnement

    statut =fseek(FID,offset,origine)

    statut : 0 en cas de succès,-1 encas d’échecoffset : nombre d’octets au-delà de origine

    (positif ou négatif) origine : position

    ‘ bof ’ début de fichier‘ cof ’ position courante du pointeur‘ eof ’ fin de fichier

    statut =feof(FID)

    statut : 1 si la fin du fichier est atteinte, 0autrement

    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 virgulecsvread(nom)csvwrite(nom, data)

    • WK1 : fichiers Lotus 123wk1read(nom)wk1write(nom, data)