INTRODUCTION Introduction (2) · • SIMULINK : interface graphique interactive de MATLAB...
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)