espace de travail : le Workspace (1)

Transcription

espace de travail : le Workspace (1)
INTRODUCTION
Introduction (2)
• MATrix LABoratory
• Logiciel qui
interactive :
permet,
de
manière
– 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
interactive de MATLAB
graphique
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)
L ’espace de travail (3)
• Supprimer une (ou toutes les) variable(s) :
• 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 :
>> 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 40 bytes
L ’espace de travail (4)
>> 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 ’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
Les scalaires (1)
VECTEURS ET MATRICES
• Scalaires et opérations scalaires
• Vecteurs et opérations vectorielles
• Matrices et opérations matricielles
• Tableaux multidimensionnels
• Structures
• Le scalaire : une matrice 1x1
>> s =2.5 ;
>> size(s)
ans =
1
1
ou
>> [i,j] = size(s)
i=
1
j=
1
• Les format d ’affichage
format short
format long
format short e
format long e
format rat
format bank
Les scalaires (2)
• Les complexes :
>> x=1+j
x=
1.0000 + 1.0000i
• Les constantes prédéfinies :
>> pi
ans =
0.0333
0.033333333333
3.3333E-002
3.333333333334E-002
1/30
0.03
Les scalaires (3)
• Les opérations arithmétiques
>> 3 +7 - 2 * 9
ans =
-8
divisions droite (/) et gauche (\)
élévation à une puissance (^)
3.1416
>> eps
ans =
2.2204e-016
>> 1/0
Warning : Divide by zero
Inf
>> 0/0
Warning : Divide by zero
NaN
• Quelques fonctions
–
–
–
–
–
–
–
–
fonctions trigo :
exponentielle :
log népérien :
log décimal :
racine :
|x|ou ||x||:
Re & Im :
arrondis :
cos acos cosh
exp
log
log10
sqrt
abs
real imag
round ceil floor fix
•4
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)
Opérations vectorielles (1)
• Extraction
• Génération automatique
composantes espacées d ’un pas constant
syntaxe : v =debut : pas : fin
>> v5=1:0.5:3
v5=
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
>> v4(3)
ans =
-5
>> v4(2:4)
ans =
2
-5
-7
• Extraction selon un critère
>> i =find(v4 <0)
i=
3
4
>> v4(i)
ans =
-5
-7
syntaxe : v =logspace(debut, fin, N)
!
Sous MATLAB, le premier indice
d ’un tableau est 1
•5
Opérations vectorielles (2)
Opérations vectorielles (3)
• 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
ans =
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
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 3
2 5 1
– lignes séparées par un retour chariot
>> M1=[1 0 3
2 5 1]
M1 =
1 0 3
2 5 1
• Dimensions
>> size(M1)
ans =
2
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 :
médiane :
écart-type :
minimum :
maximum :
mean(v)
median(v)
std(v)
min(v)
max(v)
Créer une matrice (2)
• par concaténation
>> M2= [0 7 12];
>> M3 = [M1 ; M2]
M3 =
1 0 3
2 5 1
0 7 12
• par transformation
>> reshape(M3, 1,9)
ans =
1 2 0 0 5 7
• par extraction : triu
3
1
12
tril
Îmatrices triangulaires supérieures et inférieures
•6
Les matrices spéciales (1)
• Matrices identité, nulle et unité
>> IDENTITE = eye( 2,3)
IDENTITE =
1
0 0
0
1 0
– ones (m,n) : matrice m x n dont tous les
éléments valent 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) ;
800
– zeros(m,n) : matrice m x n dont tous les
éléments valent 0
600
400
200
Si m=n, spécifier une seule dimension
>> UNITE = ones( 2)
-3
-2
-1
0
1
2
3
4
250
200
UNITE =
1
1
0
-4
150
100
1
1
50
0
0
Opérations matricielles (1)
– d ’une ligne :
>> M3(2, : )
ans =
2
5
– d ’une colonne :
>> M3( : ,2)
ans =
0
5
– d ’une sous-matrice : ??
0.4
0.6
0.8
1
Opérations matricielles (2)
• Comparaison
• Extraction
– d ’un élément :
>> M3(3,2)
ans =
7
0.2
>> M3(6)
ans =
7
1
>> M3 = [1 0 3 ; 2 5 1 ; 0 7 12] ;
>> M4 = ones(3) ;
>> M3 >
ans =
0
1
0
M4
0
1
1
%find(M3 > 1)
1
0
1
• Extension des instruction min, max ...
>> max(M3)
ans =
2
7
%maximum par colonnes
12
>> max(M3(:)) %max(max(M3))
ans =
12
•7
Opérations matricielles (3)
• Produit classique
Opérations matricielles (4)
• Transformations
Rappel : le produit de A(mxn) par B(pxq)
n ’est possible que si n = p et le résultat est
de dimension mxq
7
10
1
4
15
22
9
16
>> M = [1 2 ; 3 4]
>> fliplr(M) %retournement gauche/droite
ans =
2
1
4
3
>> flipud(M) %retournement haut/bas
ans =
3
4
1
2
>> rot90(M) %transposition + flipud
ans =
2
4
1
3
Opérations matricielles (5)
Vecteurs et valeurs propres
• 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
ans =
ans =
• 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| = 0
>> poly(M)
ans =
1
-4
3
• Vecteurs et valeurs propres
>> [vec val] = eig(M)
vec =
0.7071
- 0.7071
val =
1
0
0
3
0.7071
0.7071
•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) =
0
0
0
0
0
0
0
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 :
Î nom
Î notes
Î adresse ...
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 :
nom
note1
note2
Les structures (2)
• Liste des champs
>> fieldnames(eleve)
ans =
‘nom’
‘note1’
‘note2’
• Extraction : on utilise l ’opérateur ‘.‘
>> eleve(2).nom
Les structures (3)
Manipulation indirecte
Înécessite de créer des vecteurs de données
tampons
>> liste1 = cat(1,eleve.note1)
liste1 =
12
5
ans =
eve
• Affectation directe
>> eleve(4).nom = ‘toto’;
eleve =
1x4 struct array. with fields :
17
>> liste2 = cat(1,eleve.note2) ;
>> moy=mean(mean([ liste1 liste2 ])
moy =
13.1250
.
.
•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
•
•
•
•
•
•
•
•
==
~=
<( <=)
>( >=)
&
~
|
xor
égalité
différence
inférieur (ou égal)
supérieur (ou égal)
ET logique (AND)
NON logique (NOT)
OU logique (OR)
OU exclusif (XOR)
Exemple :
>> a = [1 0 0 1] ;
>> b = [1 1 0 1] ;
>> a | b
ans =
1
1
0
Chaînes de caractères (1)
• Généralités
– chaîne = vecteur ligne
– nombre de composantes = longueur de
la chaîne
>> ch = ‘ bonjour monsieur ’
>> size(ch)
16
• Conversions
num2str : nombre
mat2str
: matrice
str2num : chaîne
Chaînes de caractères (2)
• Ecriture de chaînes formatées
syntaxe :
text=sprintf(‘ format1 format2... ’, data1,
data2 ...)
exemple :
• Affectation
ans =
1
1
chaîne
chaîne
nombre
>> 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)
•10
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
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
ou directement
Penser à l ’indentation !!
>> for n=0:10; x(n +1) =2^n; end
!
bouton droit Æ smart indent
programmation matricielle ??
La boucle WHILE
• tant que . . . faire
Les ruptures de boucle
• Il est possible de provoquer une sortie
prématurée d'une boucle de contrôle.
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 <max);n=n+1;end;
>> n
n=
11
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)
L ’instruction IF (2)
• 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
• Permet de choisir entre deux options.
syntaxe
if expression
instructions 1
else
instructions 2
end
être
simple
ou
• si expression n ’est pas vérifier alors
les instructions 2 sont exécutées
composée.
exemple
if (a<0 & b<0)
disp(‘ a et b négatifs ’)
end
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
L ’instruction SWITCH
• Permet une sélection multiple.
syntaxe
switch variable
case valeur1
instructions 1
case valeur2
instructions 2
..........
Otherwise
instructions (erreur)
end
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
function.
>> clear all
>> help trouve
retourne la liste des noms …
>> nom = trouve(liste,‘c’) ;
>> nom
nom =
‘catherine’
le
mot
réservé
• 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),:);
par
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 = -10:0.1:10;
>> y =feval(‘ f1 ’, x) ;
>> plot(x,y)
300
250
200
150
100
syntaxes : s = f(e1, e2, …)
50
0
[s1, s2, …] = f(e1, e2, …)
-50
-10
-5
0
5
10
•13
Fonctions (4)
• Fonctions privées
– placées dans un répertoire private
– seuls les fichiers .M du répertoire parent
peuvent y accéder
REP1
M-files11
M-files12
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
M-files13
REP2
M-files21
M-files22
%%%%%%%%%%%%%%%%%%%%
private
Fonction privée
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
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 = -10:0.1:10;
>> y = f2(x) ;
function x =sousfonc( ... )
%help sous_fonc
instructions
Programmation (1)
Forme générale d ’une
application MATLAB
SCRIPT
Fonction 1
Fonctions privées
et/ou
sous fonctions
Fonction 2 Fonction 3
Fonction 21
Fonction 22
•14
Programmation (2)
Programmation (3)
• Mesure de complexité algorithmique
• Quelques recommandations
– Choisir des noms significatifs pour les
variables et les fonctions
– temps d ’exécution (en secondes) :
>> A = rand(200);
>> tic ; inv(A ’*A) ; toc
elapsed_time =
12.4100
– Documenter les fonctions (help)
• Le profiler ( >> help profile )
– Vérifier le nombre d ’arguments d ’entrée
(nargin) et de sortie (nargout) des
fonctions
>> profile report
– Eviter (autant que possible !) les boucles
for et while
N lignes demandant le plus
d ’exécution (en % du temps total)
– Dimensionner les variables
temps d ’exécution total (en secondes)
>> profile report N
de
temps
• 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(200) ;
>> x = 0 ;
>> tic
>> for i = 1 : 200
for j = 1 : 200
x = x + A(i,j) ;
end
end
>> toc
elapsed_time =
4.5000
>> tic ; sum(A(:)) ; toc
elapsed_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 debug
Debugging command ...
•15
LES GRAPHIQUES
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.
• Les graphes en 2D
• Les graphes en 3D
• L ’exportation de graphes
>> x =[-10:0.1:10];
>> y1 =x.^2;
>> plot(x, y1, ’r’)
100
90
80
70
60
50
40
30
20
10
0
-10
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’)
-5
0
5
10
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’)
100
• Insérer du texte
90
>> gtext(‘x^2’)
>> gtext(‘0.5x^2 - x + 1’)
80
70
60
50
• Ajouter un quadrillage
40
>> grid
30
20
10
0
-10
-5
0
5
10
•16
Légender une courbe (2)
2
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)
2
Tracé de x et 0.5x -x+1
100
90
80
70
2
y : axe des ordonnées
x
• La commande axis permet de changer
les bornes de visualisation
60
50
syntaxe:
axis([xmin xmax ymin ymax])
40
30
20
• Dans les deux cas :
2
0.5x - x + 1
10
0
-10
-5
0
x : axe des absisses
5
10
Manipuler un graphique (2)
– focalisation sur une partie ‘ intéressante ’
de la courbe
– Lecture précise du point d ’intersection
entre deux courbes
Tracer plusieurs courbes
• Sur un même graphique
ÎManipulation interactive du 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)
100
50
0
-10
-5
0
5
10
-5
0
5
10
80
60
40
20
0
-10
•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 =0:0.1:4*pi;
>> fplot (‘sin’, x)
Histogrammes
• Tracés à l ’aide de la commande hist
>> y = randn(1000,1) ;
>> hist (y, 50)
>> title(‘ distribution normale : répartition
en 50 classes ’)
distribution normale : répatition en 50 classes
50
45
40
35
1
30
0.8
0.6
25
0.4
20
0.2
15
0
10
-0.2
5
-0.4
0
-3
-0.6
-2
-1
0
1
2
3
-0.8
-1
0
2
4
6
8
10
(par défaut N_classe = 10)
12
Courbes paramétrées
Syntaxe : plot3(x, y, z, s)
• 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)
x(t) = cos(3t)
Tracer une courbe 3D
>>
>>
>>
>>
>>
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)
y(t) = sin(t)
1
0.8
0.6
25
0.4
20
0.2
15
0
10
-0.2
5
-0.4
0
1
-0.6
0.5
-0.8
1
0.5
0
-1
-1
-0.5
0
0.5
1
0
-0.5
-0.5
-1
-1
•18
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)
Tracer une surface (2)
>> colormap(‘ cool ’)
>> surf (X, Y, Z)
• surfc : avec contours
• meshc meshz : idem avec contours
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)
• surfl : avec jeu d ’ombres
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 figure
puis coller (sous Word, Powerpoint ...)
•19
LES POLYNOMES ET
L ’ANALYSE NUMERIQUE
Les polynômes
• Vecteur ligne
ensemble de données
• Polynômes
• Vecteur ligne
polynôme de degré n
p(x) = anxn + an-1xn-1 + ... + a1x + a0
• Opérations polynomiales
• Interpolation et régression
>> p =[an an-1 ... a1 a0] ;
• Résolution d’équations non linéaires
>> length(p)
ans =
• Recherche de minima
n+1
>> p1 =[1 0 2] ;
%p1(x) = x2 + 2
>> p2 =[2 4 0] ;
%p2(x) = 2x2 +4x
!
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
coefficients disposés suivant les
puissances décroissantes de x
Fonctions polynomiales
• L ’instruction polyval permet d ’évaluer 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)
p4(x) = x(x + 2)(2x - 3)
3
2
graphe de f(x) = -x - 5x + x
500
>> p4 =conv([1 0],conv([1 2],[2 -3]))
p4 =
2
1
-6
0
y
0
-500
• Division de polynômes
>> p1 = deconv(p3, p2)
p1 =
1
0
2
-1000
-1500
-10
-5
0
x
5
10
•20
Interpolation (1)
• Interpolation polynomiale au sens des
moindres carrés :
Interpolation (2)
• Ordre 1 : erreur σ = 0.0113
1.5
>> p=polyfit(x, y, ordre) ;
1
• Importance de l ’ordre du polynôme
d ’interpolation :
%fonction sigmoïde bruitée
x = -5:0.1:5 ;
mes=1./(1+exp(-x))+0.05*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')
0.5
0
-0.5
-5
-4
-3
-2
-1
0
1
2
3
4
5
4
5
• Ordre 5 : erreur σ = 0.0023
1.5
1
0.5
%interpolation d'ordre 5
p = polyfit(x, mes, 5)
res = polyval(p,x) ;
plot(x,mes,'b+',x, res,'r',x,mes -_res, 'g')
0
-0.5
-5
-4
Interpolation (3)
• Relier des points (ensemble de données)
expérimentaux par une courbe formée
de segments de droite ou de courbes
polynomiales
-3
-2
-1
0
1
2
3
Interpolation (4)
1
0.8
0.6
0.4
0.2
0
syntaxe : interp1(x,y,z, ’type’)
-0.2
-0.4
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+ ’)
-0.6
-0.8
-1
0
2
4
6
8
10
• De même :
interp2 interpolation dans l ’espace 3D
.
interp3
.
.
interpn
•21
Régression linéaire
• Détermination du modèle linéaire
y=f(x) reliant deux séries de mesure x
et y.
⎡ y1 ⎤ ⎡ x1 1⎤
⎢ y ⎥ ⎢ x 1⎥ a
⎢ . 2 ⎥ = ⎢ . 2 ⎥⎡ ⎤
⎢ . ⎥ ⎢ . ⎥ ⎢⎣ b⎥⎦
⎢. ⎥ ⎢ . ⎥
⎣ yn ⎦ ⎣ x n 1⎦
y = Φθ
yi = axi + b
vecteur optimal θ = ( ΦTΦ)−1 ΦT y
(au sens des moindres carrés)
construction de la matrice Φ :
>> phi =[x’ ones(length(x),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-miner
l’ensemble des racines de l’équation dans
l ’intervalle (xd, xf)
fsolve(‘ fonc_nl ’, xd : xf)
détermination de θ :
>> teta =nnls(phi,y’) ;
function f_nl = foncnl =(x)
%fonction non linéaire
f_nl = cos(x).*exp(-0.1*x).*sin(-2*x).+5 ;
>> x =-3:3 ;
>> plot(x,foncnl(x)), grid
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 :
1.6
1.4
1.2
fminbnd(‘ fonc ’, xd, xf)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-3
-2
-1
0
1
>> fzero(‘foncnl ’,0.5)
ans =
0.2826
>> fsolve(‘foncnl ’,0 : 2)
ans =
0.2826
0.9505
2
3
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])
•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 ’,[0 0])
minxy =
0.2500
-0.5000
>> minf =fonc2(minxy)
minf =
7.5053
Î 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.0000000e+000
1.0000000e+000
1.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)
•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
fclose(‘ all ’)
Îferme tous les fichiers
Fichiers binaires (1)
• Lecture
Fichiers textes
• Lecture et écriture formatées
[data, compt]
=fscanf(FID, format, taille)
data :
vecteur colonne
valeurs lues
compt :
format :
nombre d’éléments lus (facultatif)
représentant
les
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 (2)
• Ecriture
[data, compt]
=fread(FID,taille,type,saut)
compt
=fwrite(FID,data,type,saut)
data :
matrice de stockage des données lues
(réels double)
nombre d ’éléments lus avec succès
compt :
FID :
taille :
type :
nombre d ’éléments lus avec succès
compt :
FID :
data :
type :
saut :
nombre d ’octets à ignorer avant
chaque écriture (facultatif)
saut :
nombre d ’octets à ignorer après
chaque lecture (facultatif)
identificateur du fichier
nombre d ’éléments à lire (facultatif)
type (nombre d ’octets) de l ’élément
à lire (‘char’, ‘int’, ‘long’ ...)
identificateur du fichier
matrice des données à écrire
type (nombre d ’octets) de l ’élément
à écrire
Î 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 :
0 en cas de succès,-1 encas d’échec
origine :
position
‘ bof ’ début de fichier
‘ cof ’ position courante du pointeur
‘ eof ’ fin de fichier
nombre d’octets au-delà de origine
(positif ou négatif)
statut =feof(FID)
statut :
1 si la fin du fichier est atteinte, 0
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