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
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 :
>> 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 (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)
• 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é.
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
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 1
ou
>>[i,j] =size(s)
i = 1 j =
1
• Les format d ’affichage format short 0.0333
format long 0.033333333333 format short e 3.3333E-002
format long e 3.333333333334E-002 format rat 1/30
format bank 0.03
Les scalaires (2)
• Les complexes :
>>x=1+j
x =
1.0000 + 1.0000i
• Les constantes prédéfinies :
>>pi ans =
3.1416
>>eps ans =
2.2204e-016
>>1/0
Warning : Divide by zero Inf
>>0/0
Warning : Divide by zero
Les scalaires (3)
• Les opérations arithmétiques
>>3 +7 -2 *9 ans =
-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
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 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 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 <0)
i =
3 4
>>v4(i) ans =
-5 -7
Sous MATLAB, le premier indice d ’un tableau est 1
Opérations vectorielles (1)
!
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 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
Opérations vectorielles (3)
>> v = [1 2 -5 -7 3]
– sommedes éléments d ’un vecteur
>>sum(v)
ans = -6
– produitdes é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 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
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 3 1 12
• par extraction : triu tril
Îmatrices triangulaires supérieures et infé- rieures
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
– 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 1
1 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 4
0 200 400 600 800
0 0.2 0.4 0.6 0.8 1
0 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 = 0 5
– 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 1
1 1 0
0 1 1
• Extension des instruction min, max ...
>> max(M3) %maximum par colonnes
ans =
2 7 12
>> max(M3(:)) %max(max(M3))
ans = 12
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
ans = ans =
7 10 1 4
15 22 9 16
Opérations matricielles (4)
• Transformations
>> 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)
• 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
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 0
0 3
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
ans = 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.1250
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 0 0 1] ;
>> b = [1 1 0 1] ;
>> a | b ans =
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
• 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)
L ’instruction FOR (1)
• parcours d'un intervalle syntaxe:
for variable =debut : fin instructions
...
instructions end
exemple: créer le vecteur [1 2 2224.... 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 ntel que 2nsoit supérieur à un réel adonné.
>> max =2002 ; 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.
breaktermine l ’exécution d ’une boucle.
forvariable1 = debut1 : fin1 instructions
...
forvariable2 = debut2 : fin2 instructions
...
break instructions end
instructions end
return provoque un retour au programme appelant (ou au workspace).
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<0 & b<0)
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 2sont 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
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 trouve
retourne la liste des noms …
>> nom = trouve(liste,‘c’) ;
>> nom nom =
‘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 Ænoms
noms=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
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-files11 M-files12 M-files13
M-files21 M-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 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
>>globalA B C
>>A = 1 ; B = 3 ; C = -1 ;
>>x = -10:0.1:10;
>>y = f2(x) ;
function y = f2(x) global A B C y = 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ées et/ou sous fonctions
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 foret while
– Dimensionner les variables
Programmation (3)
• Mesure de complexité algorithmique – temps d ’exécution (en secondes) :
>>A = rand(200);
>>tic; inv(A ’*A) ; toc
elapsed_time = 12.4100
• 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(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ébogagepermet 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 ...
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 =[-10:0.1:10];
>> y1 =x.^2;
>> plot(x, y1, ’r’)
-10 -5 0 5 10
0 10 20 30 40 50 60 70 80 90 100
Tracer une courbes 2D (2)
• plot(y)permet de tracer directement le vecteur yen 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 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
Légender une courbe (2)
-10 -5 0 5 10
0 10 20 30 40 50 60 70 80 90 100
x : axe des absisses
y : axe des ordonné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 10
0 50 100
-10 -5 0 5 10
0 20 40 60 80
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 3
0 5 10 15 20 25 30 35 40 45 50
distribution 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 1
x(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)
-0.5 0
0.5 1
-0.5 0 0.5 1 0 5 10 15 20 25
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 figure
puis coller (sous Word, Powerpoint ...)
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é n p(x) = anxn+ an-1xn-1+ ... + a1x + a0
>>p =[an an-1 ... a1a0] ;
>>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écroissantesde 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 500
graphe de f(x) = -x3 - 5x2 + x
y
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é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')
%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 σ= 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 3D interp3
interpn
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
. . .
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’) ; y y
y x x
x 1 1
1 a b
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 fsolvepour déter-miner l’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éaire
f_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])
Recherche de minima (2)
exemple:
>>minxy =fminsearch(‘fonc2 ’,[0 0])
minxy =
0.2500 -0.5000
>>minf =fonc2(minxy)
minf = 7.5053
Îvaleur minimale de la fonction
function f2 =fonc2(X)
f2 = 2*X(1)^2 +X(2)^2 - X(1) +X(2) +1
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
>> typenom2
1.0000000e+000 1.0000000e+000 1.0000000e+000 1.0000000e+000
Fichiers externes (1)
1. Ouverturede 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)
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 fichierFID
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ès FID : identificateur du fichier
taille : 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ès FID: identificateur du fichier
data: matrice des données à écrire
type: type (nombre d ’octets) de l ’élément à écrire
saut: nombre d ’octets à ignorer avant chaque écriture (facultatif)
Fichiers binaires (3)
• Positionnement
statut =fseek(FID,offset,origine) statut : 0en cas de succès,-1encas d’échec offset : 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, 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)