0% ont trouvé ce document utile (0 vote)
179 vues26 pages

Introduction à MATLAB et SIMULINK

Transféré par

Rachid Saim
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
179 vues26 pages

Introduction à MATLAB et SIMULINK

Transféré par

Rachid Saim
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

INTRODUCTION Introduction (2)

• MATrix LABoratory
• Logiciel qui permet, de manière
interactive :
– de faire des calculs matriciels ;
– d ’analyser les données ;
– de visualiser les résultats en 2D et 3D ...

• Langage de programmation
• Toolboxes : ensemble de fonctions
(fichiers .M) développées pour des
domaines d ’applications spécifiques
• SIMULINK : interface graphique
interactive de MATLAB

L ’espace de travail :
Fonctionnement
le Workspace (1)
• Mode interactif :
Données Espace de travail
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

Historique

•1
L ’espace de travail (2) L ’espace de travail (3)
• Supprimer une (ou toutes les) variable(s) :
• Déclarer des variables : >> clear x
>> x =12.5 ; y = [1 -5 0 2] ; >> clear all
– définies et dimensionnées automatiquement
au fur et à mesure de leur déclaration • Entrer une valeur au clavier :
– stockées dans l ’espace de travail >> x = input(‘Valeur de x =’)
Valeur de x =12
• S ’informer sur les variables : x=
>> who 12
Your variables are:
x y • Afficher un texte à l ’écran :
>> whos >> disp(‘ Ceci est un test ’)
Name Size Bytes Class Ceci est un test
x 1x1 8 double array
y 1x4 32 double array >> disp([‘ x vaut ’, num2str(x)])
Grand total is 5 elements using 40 bytes x vaut 12

L ’espace de travail (4) L ’aide sous MATLAB


>> helpdesk

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


>> pathtool

>> help nom de commande fournit de


l ’aide sur l ’utilisation de la commande (et
• Editer les commandes : ou lettre + les rubriques connexes).

(ou double clic dans l’historique) >> lookfor mot-clé fournit la liste des
fonctions contenant le mot-clé.

•2
Plan

1. Vecteurs et matrices

2. La programmation MATLAB

3. Les graphiques

4. Les polynômes et l ’analyse numérique

5. L’import/export de données

•3
VECTEURS ET MATRICES Les scalaires (1)

• Scalaires et opérations scalaires • Le scalaire : une matrice 1x1


>> s =2.5 ;
>> size(s)
• Vecteurs et opérations vectorielles ans =
1 1
• Matrices et opérations matricielles ou
>> [i,j] = size(s)
• Tableaux multidimensionnels i=
1
j=
• Structures 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 scalaires (3)


• Les complexes : • Les opérations arithmétiques
>> x=1+j >> 3 +7 - 2 * 9
x=
1.0000 + 1.0000i ans =
-8
• Les constantes prédéfinies :
>> pi divisions droite (/) et gauche (\)
ans = élévation à une puissance (^)
3.1416
>> eps
• Quelques fonctions
ans = – fonctions trigo : cos acos cosh
2.2204e-016 – exponentielle : exp
>> 1/0 – log népérien : log
Warning : Divide by zero – log décimal : log10
Inf – racine : sqrt
>> 0/0 – |x|ou ||x||: abs
Warning : Divide by zero – Re & Im : real imag
NaN – arrondis : round ceil floor fix

•4
Créer un vecteur (1) Créer un vecteur (2)

• Vecteur ligne • Le vecteur : une matrice 1xn


>> v1= [1 2 -5] ; >> size(v1)
ou ans =
>> v1(1) =1; v1(2) =2;v1(3)=-5; 1 3
ou
longueur d ’un vecteur
>> v1(1) = [1, 2 ,-5] ;
>> long_v1 = length(v1)
• Vecteur colonne long_v1 =
>> v2=[-7;3]; 3

• Transposition : • Concaténation
>> v4 =[v1 v3]
>> v3=v2 ’
v4 =
v3 =
1 2 -5 -7 3
-7 3
• Vecteur vide
>> v =[ ] ;

Créer un vecteur (3) Opérations vectorielles (1)


• Extraction
• Génération automatique >> v4(3)
composantes espacées d ’un pas constant ans =
-5
syntaxe : v =debut : pas : fin >> v4(2:4)
>> v5=1:0.5:3 ans =
v5= 2 -5 -7
1.000 1.500 2.000 2.500 3.000 • Extraction selon un critère
⇔ v =linspace(1, 3, 5) >> i =find(v4 <0)
i=
3 4
par défaut (pas = 1) v =debut : fin
>> v4(i)
ans =
espacement logarithmique de 10debut à 10fin -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 >> v = [1 2 -5 -7 3]
>> s = [2 1 -1]+ [1 -3 5] – somme des éléments d ’un vecteur
s= >> sum(v)
3 -2 4 ans =
– ajout d ’un scalaire -6
>> s + 2
ans = – produit des éléments d ’un vecteur
5 0 6 >> prod(v)
– produit de vecteurs de même dimensions ans =
>> p = [2 1 -1] * [1 -3 5] ’ 210
p=
– moyenne : mean(v)
-6
– médiane : median(v)
– produit élément par élément
>> [2 1 -1] .* [1 -3 5] – écart-type : std(v)
ans = – minimum : min(v)
2 -3 -5 – maximum : max(v)

Créer une matrice (1) Créer une matrice (2)


• par concaténation
• Saisie d ’une matrice >> M2= [0 7 12];
– lignes séparées par un point virgule >> M3 = [M1 ; M2]
>> M1=[1 0 3;2 5 1] M3 =
M1 = 1 0 3
1 0 3 2 5 1
2 5 1 0 7 12

– lignes séparées par un retour chariot • par transformation


>> M1=[1 0 3 >> reshape(M3, 1,9)
2 5 1] ans =
M1 =
1 0 3 1 2 0 0 5 7 3 1 12
2 5 1

• Dimensions • par extraction : triu tril


>> size(M1)
Îmatrices triangulaires supérieures et infé-
ans = rieures
2 3

•6
Les matrices spéciales (1) Les matrices spéciales (2)

• Matrices identité, nulle et unité • Matrices aléatoires


>> IDENTITE = eye( 2,3) – Distribution normale (m = 0 , σ = 1) :
IDENTITE = >> y = randn(10000,1) ;
1 0 0
0 1 0 – Distribution uniforme (m = 1/2 , σ = 1/12) :
>> y = rand(10000,1) ;
– ones (m,n) : matrice m x n dont tous les
éléments valent 1
800

– zeros(m,n) : matrice m x n dont tous les 600

éléments valent 0 400

200

Si m=n, spécifier une seule dimension 0


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

>> UNITE = ones( 2) 250

200

UNITE = 150

100

1 1 50

0
1 1 0 0.2 0.4 0.6 0.8 1

Opérations matricielles (1) Opérations matricielles (2)


• Extraction • Comparaison
>> M3 = [1 0 3 ; 2 5 1 ; 0 7 12] ;
– d ’un élément :
>> M4 = ones(3) ;
>> M3(3,2) >> M3(6)
ans = ans = >> M3 > M4 %find(M3 > 1)
7 7 ans =
0 0 1
– d ’une ligne : 1 1 0
>> M3(2, : ) 0 1 1
ans =
2 5 1 • Extension des instruction min, max ...
– d ’une colonne : >> max(M3) %maximum par colonnes
ans =
>> M3( : ,2)
2 7 12
ans =
0 >> max(M3(:)) %max(max(M3))
5 ans =
– d ’une sous-matrice : ?? 12

•7
Opérations matricielles (3) Opérations matricielles (4)

• Produit classique • Transformations


Rappel : le produit de A(mxn) par B(pxq) >> M = [1 2 ; 3 4]
n ’est possible que si n = p et le résultat est >> fliplr(M) %retournement gauche/droite
de dimension mxq ans =
• Produit de Hadamard 2 1
4 3
ou produit élément par élément de deux
>> flipud(M) %retournement haut/bas
matrices de mêmes dimensions
ans =
>> A = [1 2 ; 3 4] 3 4
>> A * A >> A .* A 1 2
>> rot90(M) %transposition + flipud
ans = ans =
ans =
7 10 1 4 2 4
15 22 9 16 1 3

Opérations matricielles (5) Vecteurs et valeurs propres

• Fonctions diverses >> M = [2 1 ; 1 2] ;


– déterminant : • Polynôme caractéristique : |λI - M| = 0
>> det(M)
>> poly(M)
– norme
ans =
>> norm(M)
1 -4 3
– rang
>> rank(M)
• Vecteurs et valeurs propres
– inverse (et pseudo-inverse)
>> [vec val] = eig(M)
>> inv(M) >> pinv(M)
vec =
– conditionnement
>> cond(M) 0.7071 0.7071
– exponentielle - 0.7071 0.7071
expm : vecteurs et valeurs propres val =
expm1 : approximation de Padé 1 0
expm2 : série de Taylor 0 3

•8
Les tableaux Les structures (1)
multidimensionnels Structure = regroupement de variables
• Extension à n dimensions : (champs) de type différents (chaînes,
– vecteur (1D) : 1 indice entiers ...) dans une même variable.
– matrice (2D) : 2 indices, ligne et colonne exemple : fichier des élèves d’un établissement
– tableau tridimensionnel : 3 indices, ligne, scolaire :
colonne et page Î nom
– ... Î notes
exemple : Î adresse ...
>> M1 =ones(3) ;
nom=struct(‘ch1’,{v1,v2...}, ’ch2 ’,{v1,v2
>> M2 =zeros(3) ; ...})
>> M3 =cat(3,M1,M2) ;
M3( : , : , 1) = >>eleve=struct(‘nom’,{‘paul’,’eve’,’jean’}, ’note1’,
1 1 1 {12,8,11}, ’note2’,{14,15,3})
1 1 1
1 1 1 eleve =
M3( : , : , 2) = 1x3 struct array with fields :
0 0 0 nom
0 0 0 note1
0 0 0
note2

Les structures (2) Les structures (3)


• Liste des champs Manipulation indirecte
>> fieldnames(eleve)
ans = Înécessite de créer des vecteurs de données
‘nom’ tampons
‘note1’
‘note2’ >> liste1 = cat(1,eleve.note1)

• Extraction : on utilise l ’opérateur ‘.‘ liste1 =


>> eleve(2).nom 12
ans = 5
eve 17
>> liste2 = cat(1,eleve.note2) ;
• Affectation directe
>> moy=mean(mean([ liste1 liste2 ])
>> eleve(4).nom = ‘toto’;
moy =
eleve =
1x4 struct array. with fields : 13.1250
.
.

•9
LA PROGRAMMATION Opérateurs logiques
MATLAB • == égalité
• ~= différence
• Les opérateurs logiques • <( <=) inférieur (ou égal)
• Les chaînes de caractères • >( >=) supérieur (ou égal)
• & ET logique (AND)
• Les commandes structurées • ~ NON logique (NOT)
• | OU logique (OR)
• Les scripts et les fonctions • xor OU exclusif (XOR)
• La programmation Exemple :
>> a = [1 0 0 1] ;
>> b = [1 1 0 1] ;
>> a | b
ans =
1 1 0 1

Chaînes de caractères (1) Chaînes de caractères (2)


• Généralités
– chaîne = vecteur ligne • Ecriture de chaînes formatées
syntaxe :
– nombre de composantes = longueur de
text=sprintf(‘ format1 format2... ’, data1,
la chaîne data2 ...)
exemple :
• Affectation >> pi2 = pi^2
>> ch = ‘ bonjour monsieur ’ pi2 =
>> size(ch) 9.8696
>> text = sprintf(‘ le carré de pi vaut %3.2f ’,
ans = pi2)
1 16 text =
le carré de pi vaut 9.87
• Conversions
num2str : nombre chaîne • Exécution d’une chaîne :
mat2str : matrice chaîne exemple :
str2num : chaîne nombre >> name = ‘c:/bin/data’
>> eval([‘load’, name]); %load(name)

•10
L ’instruction FOR (1) L ’instruction FOR (2)
• parcours d'un intervalle
syntaxe : • On peut utiliser un incrément (pas) autre
que 1 (valeur par défaut).
for variable =debut : fin
instructions syntaxe :
.......... for variable =debut:pas:fin
instructions
end • Les bornes ne sont pas nécessairement
exemple : créer le vecteur [1 2 22 24 .... 210] des entiers.
>> x=[ ]
x= • Le pas peut être négatif.
[]
>> for n=0:10 ; x =[x 2^n] ; end
• Il est possible d ’imbriquer les boucles
ou directement
>> for n=0:10; x(n +1) =2^n; end Penser à l ’indentation !!
! bouton droit Æ smart indent
programmation matricielle ??

La boucle WHILE Les ruptures de boucle


• Il est possible de provoquer une sortie
• tant que . . . faire prématurée d'une boucle de contrôle.
syntaxe :
break termine l ’exécution d ’une boucle.
while expression
instructions
for variable1 = debut1 : fin1
.......... instructions
instructions ..........
for variable2 = debut2 : fin2
end instructions
..........
exemple: calculer le plus petit entier n tel que break
2n soit supérieur à un réel a donné. instructions
>> max =2002 ; n=1; end
>> while (2^n <max);n=n+1;end; instructions
end
>> n
n= return provoque un retour au programme
11 appelant (ou au workspace).

•11
L ’instruction IF (1) L ’instruction IF (2)
• La séquence d ’instructions intérieure • Permet de choisir entre deux options.
est exécutée si expression est vrai (=1 syntaxe
logique). if expression
syntaxe instructions 1
if expression else
instruction
........ instructions 2
instruction end
end • si expression n ’est pas vérifier alors
• expression peut être simple ou 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) L ’instruction SWITCH


• Permet une sélection multiple. • Permet une sélection multiple.
syntaxe syntaxe
if expression1 switch variable
instructions 1 case valeur1
elseif expression2 instructions 1
instructions 2 case valeur2
elseif expression3 instructions 2
instructions 3 ..........
........... Otherwise
instructions (erreur)
else expressionN
instructions N end
end

•12
Script Fonctions (1)
• Fichier (trouvenom.m par exemple)
• Fichier (trouve.m par exemple)
contenant une suite d ’instructions
matlab. contenant une suite d ’instructions
matlab.
• Exécuté séquentiellement dans
l ’espace de travail, il accède aux
• Commence par le mot réservé
variables (locales) qui s ’y trouvent.
function.
• Pour écrire un script, utiliser l’éditeur :
>> edit • Reçoit un (ou plusieurs) paramètre(s)
%trouvenom.m d ’entrée.
%trouve les noms commençant par
%lettre • Peut renvoyer un (ou plusieurs)
liste(find(liste(:,1) == lettre),:) paramètre(s) en sortie ou n ’en
renvoyer aucun.
>> lettre = ‘d’ ;
>> trouvenom
‘didier’ ! Nom du fichier = nom de la fonction

Fonctions (2) Fonctions (3)


function noms = trouve (liste,lettre)
%retourne l’ensemble des noms • Evaluation d ’une fonction définie
%commençant par lettre dans un fichier (f1.m)
%IN Æ liste, lettre
%OUT Æ noms function y = f1(x)
noms=liste(find(liste(:,1) == lettre),:);
y = 2*x.^2 - 5*x +1

>> clear all >> x = -10:0.1:10;


>> help trouve >> y =feval(‘ f1 ’, x) ;
retourne la liste des noms … >> plot(x,y)
>> nom = trouve(liste,‘c’) ; 300

>> nom 250

nom = 200

‘catherine’ 150

100

syntaxes : s = f(e1, e2, …) 50

[s1, s2, …] = f(e1, e2, …) -50


-10 -5 0 5 10

•13
Fonctions (5)
Fonctions (4)
• Sous fonctions
– un fichier .M peut contenir plusieurs
• Fonctions privées fonctions
– placées dans un répertoire private – la première est la fonction primaire
– seuls les fichiers .M du répertoire parent – les suivantes sont des sous fonctions
peuvent y accéder – accessible à la fonction primaire et aux
autres sous fonctions du fichier .M
– l ’aide ne peut accéder qu’aux lignes de
REP1 commentaires de la fonction primaire
M-files11
function foncprim( ... )
M-files12 %help fonc
M-files13 instructions
REP2 x = sous_fonc( ... )
M-files21
instructions
M-files22 %%%%%%%%%%%%%%%%%%%%
private function x =sousfonc( ... )
%help sous_fonc
Fonction privée instructions

Les variables :
Programmation (1)
locales ou globales ?
• Les variables des scripts sont locales à Forme générale d ’une
l ’espace de travail application MATLAB
• Les variables des fonctions sont
locales à la fonction SCRIPT
• 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 Fonction 1 Fonction 2 Fonction 3

function y = f2(x)
global A B C
y = A*x.^2 + B*x + C Fonctions privées
Fonction 21
et/ou
>> global A B C sous fonctions
>> A = 1 ; B = 3 ; C = -1 ; Fonction 22
>> x = -10:0.1:10;
>> y = f2(x) ;

•14
Programmation (2) Programmation (3)
• Mesure de complexité algorithmique
• Quelques recommandations – temps d ’exécution (en secondes) :
>> A = rand(200);
– Choisir des noms significatifs pour les >> tic ; inv(A ’*A) ; toc
variables et les fonctions elapsed_time =
12.4100
– Documenter les fonctions (help)
• Le profiler ( >> help profile )
– Vérifier le nombre d ’arguments d ’entrée >> profile report
(nargin) et de sortie (nargout) des
temps d ’exécution total (en secondes)
fonctions
>> profile report N
– Eviter (autant que possible !) les boucles N lignes demandant le plus de temps
for et while d ’exécution (en % du temps total)

– Dimensionner les variables • Les messages d’erreur :


??? Index exceeds matrix dimensions.
Error in ==> C:\MATLAB\bin\test.m
On line 2 ==> x(4)

Programmation (4) Programmation (5)


• Boucles et programmation matricielle • Le débogage permet de corriger :
>> A = rand(200) ; – les erreurs de programmation (nombre
>> x = 0 ; d’arguments d’entrée et de sortie, syntaxe
>> tic des commandes ...)
>> for i = 1 : 200 – les erreurs logiques (bugs)
for j = 1 : 200
x = x + A(i,j) ; • Utiliser :
end
end – le point virgule ;
>> toc – le mode clavier : keyboard
elapsed_time = K>>
4.5000 – le debugger
>> tic ; sum(A(:)) ; toc >> help debug
elapsed_time = Debugging command ...
0.0600

•15
LES GRAPHIQUES Tracer une courbes 2D (1)

• Les graphes en 2D • La commande plot(x,y,s) affiche le


vecteur y en fonction du vecteur x
• Les graphes en 3D avec les attributs (facultatifs) s.

• 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 -5 0 5 10

Tracer une courbes 2D (2) Légender une courbe (1)


• plot(y) permet de tracer directement le
vecteur y en fonction de ses indices. • Insérer un titre
>> title(‘Tracé de x^2 et 0.5x^2-x+1’)
• plot(x,y1,s1,x,y2,s2,...) trace y1, y2 ...
• Légender l ’axe des abscisses
en fonction de x sur le même graphe >> xlabel(‘x : axe des abscisses)
avec les attributs s1, s2 ...
>> y2 =0.5*x.^2 - x + 1 ; • Légender l ’axe des ordonnées
>> plot(x, y1, ’r’, x, y2, ’b’) >> ylabel(‘y : axe des ordonnées’)
100

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

50

40 • Ajouter un quadrillage
30
>> grid
20

10

0
-10 -5 0 5 10

•16
Légender une courbe (2) Manipuler un graphique (1)
2 2
Tracé de x et 0.5x -x+1 • La commande zoom (2D seulement)
100
permet de ‘ zoomer ‘ sur une partie de
90
courbe avec le bouton gauche de la
80
souris (le bouton droit annule le zoom)
70
2
x
• La commande axis permet de changer
y : axe des ordonnées

60

50
les bornes de visualisation
40 syntaxe:
30 axis([xmin xmax ymin ymax])
20
2
0.5x - x + 1 • Dans les deux cas :
10
– focalisation sur une partie ‘ intéressante ’
0
-10 -5 0 5 10 de la courbe
x : axe des absisses
– Lecture précise du point d ’intersection
entre deux courbes

Manipuler un graphique (2) Tracer plusieurs courbes


• Sur un même graphique
>> plot(x, y1, ’r’)
>> hold on
ÎManipulation interactive du graphique >> 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

80

60

40

20

0
-10 -5 0 5 10

•17
Tracer le graphe d ’une
Histogrammes
fonction
• La commande fplot(‘ f ’,x) permet • Tracés à l ’aide de la commande hist
d ’afficher les variations de la fonction >> y = randn(1000,1) ;
f1 (enregistrée dans le fichier f1.m) sur >> hist (y, 50)
l ’intervalle x. >> title(‘ distribution normale : répartition
en 50 classes ’)
>> x =0:0.1:4*pi;
distribution normale : répatition en 50 classes

>> fplot (‘sin’, x) 50

45

40

35
1

0.8
30

0.6 25

0.4 20

0.2 15

0 10

-0.2 5
-0.4
0
-3 -2 -1 0 1 2 3
-0.6

-0.8

-1
0 2 4 6 8 10 12
(par défaut N_classe = 10)

Courbes paramétrées Tracer une courbe 3D


• Exprimer x et y en fonction de t Syntaxe : plot3(x, y, z, s)

exemple : courbe de Lissajous >> t =0:0.1:25;


>> t =0:0.1:2*pi;
>> x = exp(-0.05*t).*cos(t) ;
>> x = cos(3*t) ;
>> y = exp(-0.05*t).*sin(t) ;
>> y = sin(t) ;
>> z=t;
>> plot(x, y)
>> plot3(x, y,z)
x(t) = cos(3t) y(t) = sin(t)
1

0.8

0.6
25
0.4
20
0.2
15
0
10
-0.2

5
-0.4

-0.6 0
1

-0.8 0.5 1
0 0.5
-1 0
-1 -0.5 0 0.5 1 -0.5
-0.5
-1 -1

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

• surfc : avec contours


• meshc meshz : idem avec contours • surfl : avec jeu d ’ombres

Orienter un graphe 3D Gérer un graphique


rotate3D + bouton gauche • Gestion des fenêtres
ou view(azimut, élévation) – ouvrir une nouvelle fenêtre : figure
exemple :
– fermer une fenêtre : close
>>subplot(121), surf(X,Y,Z), view(0,0)
>>subplot(122), surf(X,Y,Z), view(0,90) – 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 [Link] :
print -deps fig
– sous Windows, utiliser
edit Æ copy figure
puis coller (sous Word, Powerpoint ...)

•19
LES POLYNOMES ET Les polynômes
L ’ANALYSE NUMERIQUE
• Vecteur ligne ensemble de données
• Polynômes
• Vecteur ligne polynôme de degré n
• Opérations polynomiales
p(x) = anxn + an-1xn-1 + ... + a1x + a0
• Interpolation et régression >> p =[an an-1 ... a1 a0] ;
>> length(p)
• Résolution d’équations non linéaires
ans =
• Recherche de minima 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 Fonctions polynomiales


• Multiplication de 2 polynômes
• L ’instruction polyval permet d ’éva-
>> p3 =conv(p1, p2)
luer les variations d ’une fonction
p3 =
2 4 4 8 0 polynomiale sur un intervalle x.
>> f =[-1 -5 1 0] ; %f(x)=- x3 - 5x2 +x
p3(x) = 2x4 + 4x3 + 4x2 + 8x >> x =-10 :10 ;
>> y =polyval(f, x) ;
• Extension à n polynômes >> plot(x,y)
p4(x) = x(x + 2)(2x - 3) 500
3 2
graphe de f(x) = -x - 5x + x

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


p4 = 0

2 1 -6 0
-500
y

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

p1 =
1 0 2 -1500
-10 -5 0
x
5 10

•20
Interpolation (1) Interpolation (2)
• Interpolation polynomiale au sens des • Ordre 1 : erreur σ = 0.0113
moindres carrés :
1.5

>> p=polyfit(x, y, ordre) ;


1

• Importance de l ’ordre du polynôme 0.5

d ’interpolation : 0

-0.5
%fonction sigmoïde bruitée -5 -4 -3 -2 -1 0 1 2 3 4 5

x = -5:0.1:5 ;
mes=1./(1+exp(-x))+0.05*randn(1,length(x)) ; • Ordre 5 : erreur σ = 0.0023
%interpolation d'ordre 1 1.5

p = polyfit(x, mes, 1) ;
1
res = polyval(p,x) ;
plot(x,mes,'b+',x, res,'r',x,mes - res, 'g')
0.5

%interpolation d'ordre 5
p = polyfit(x, mes, 5) 0

res = polyval(p,x) ;
plot(x,mes,'b+',x, res,'r',x,mes -_res, 'g') -0.5
-5 -4 -3 -2 -1 0 1 2 3 4 5

Interpolation (3) Interpolation (4)


• Relier des points (ensemble de données) 1

0.8
expérimentaux par une courbe formée 0.6

de segments de droite ou de courbes 0.4

polynomiales 0.2

syntaxe : interp1(x,y,z, ’type’) -0.2

-0.4

type : ‘ linear ’ interpolation linéaire -0.6

-0.8

‘ spline ’ interpolation par splines -1


0 2 4 6 8 10

‘ cubic ’ interpolation cubique


>> x =0:10 ; • De même :
>> y = cos(x) ;
>> z = 0:0.1:10 ; %pas de z < pas de x interp2 interpolation dans l ’espace 3D
>> f =interp1(x,y,z) ; %par défaut : linear interp3 .
.
>> plot(x,y, ’bo ’,z,f, ’r+ ’) interpn .

•21
Régression linéaire Résolution d ’équations
• Détermination du modèle linéaire non linéaires
y=f(x) reliant deux séries de mesure x
et y. • Détermination des racines d’une
fonction non linéaire par la méthode de
⎡ y1 ⎤ ⎡ x1 1⎤ Newton-Raphson
⎢ y ⎥ ⎢ x 1⎥ a
yi = axi + b ⎢ . 2 ⎥ = ⎢ . 2 ⎥⎡ ⎤ Îenregistrer l’expression littérale de la
⎢ . ⎥ ⎢ . ⎥ ⎢⎣ b⎥⎦ fonction dans un fichier (foncnl.m)
⎢. ⎥ ⎢ . ⎥
⎣ yn ⎦ ⎣ x n 1⎦ Îutiliser la fonction fzero pour déterminer
y = Φθ une racine de l’équation au voisinage de x0
vecteur optimal θ = ( ΦTΦ)−1 ΦT y fzero(‘ fonc_nl ’, x0)
(au sens des moindres carrés)
Îutiliser la fonction fsolve pour déter-miner
l’ensemble des racines de l’équation dans
construction de la matrice Φ : l ’intervalle (xd, xf)
>> phi =[x’ ones(length(x),1)] ;
fsolve(‘ fonc_nl ’, xd : xf)
détermination de θ :
>> teta =nnls(phi,y’) ;

function f_nl = foncnl =(x)


%fonction non linéaire
Recherche de minima (1)
f_nl = cos(x).*exp(-0.1*x).*sin(-2*x).+5 ;
>> x =-3:3 ; • Fonctions à une variable :
>> plot(x,foncnl(x)), grid
la valeur qui minimise localement une
1.6
fonction (enregistrée dans fonc.m) dans
1.4 l’intervalle (xd, xf) s ’obtient par :
1.2

0.8
fminbnd(‘ fonc ’, xd, xf)
0.6

0.4
exemple :
0.2 >> xmin= fminbnd(‘foncnl ’,0,2)
0

-0.2
xmin =
-0.4
-3 -2 -1 0 1 2 3
0.5989

>> fzero(‘foncnl ’,0.5) • Fonctions à plusieurs variables :


ans = même principe mais l ’argument d’appel est
0.2826 un vecteur :
>> fsolve(‘foncnl ’,0 : 2)
ans = fminsearch(‘ fonc ’, [x0 y0])
0.2826 0.9505

•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 Fichiers .mat (1)
DE DONNEES
• Sauvegarde et restitution des données
de l’espace de travail
• Fichiers .mat syntaxe : save nom var1 var2 ... varN
• Fichiers externes >> x1 =ones(2) ; x2 =[4.5; 2.1; -6.2] ;
>> save nom
• Formats spécifiques ÎSauvegarde de toutes les variables de
l’espace de travail dans le fichier [Link]
>> save nom x1
ÎSauvegarde de la variable x1 dans le
fichier [Link]
>> clear all
>> load nom
>> who
Your variables are :
x1

Fichiers .mat (2) Fichiers externes (1)


• Si le nom du fichier de sauvegarde est 1. Ouverture de fichiers
généré par programme
FID =fopen(nomfich, attribut)
>> nomfich = ‘ nom1 ’
>> save(nomfich, ‘ x1 ’) nomfich : chaîne de caractères

>> clear x1 attribut : chaîne de caractères précisant le


>> load(nomfich) mode d ’ouverture du fichier :
>> who –r ouverture en lecture seule
Your variables are : –w création en écriture seule
nomfich x1 –a ouverture et placement en fin de
fichier en écriture seule
• Sauvegarde dans un fichier texte – r+ ouverture pour mise à jour ou w+
>> save nom2 x1 - ascii création (lecture et écriture)
>> type nom2 – a+ ouverture pour mise à jour et
1.0000000e+000 1.0000000e+000 placement en fin de fichier
1.0000000e+000 1.0000000e+000 (lecture et écriture)

•24
Fichiers externes (2) Fichiers textes
• Par défaut : ouverture des fichiers en • Lecture et écriture formatées
binaire.
ÎPour ouvrir un fichier texte ajouter la lettre [data, compt]
t (‘rt’, ‘wt’ ...) =fscanf(FID, format, taille)
data : vecteur colonne représentant les
2. Lecture/ecriture : fread fwrite fscanf valeurs lues
... compt : nombre d’éléments lus (facultatif)
format : format (‘%d’, ‘%c’, ‘%3.2f ’ ...) et
3. Fermeture séparateurs (‘\n’ ‘\t’ ...)
fclose(FID)
compt=fprintf(FID, format, data)
Îferme le fichier ayant pour identificateur
FID ligne=fgetl(FID)
fclose(‘ all ’) ligne : chaîne de caractères contenant la
Îferme tous les fichiers ligne courante du fichier FID

Fichiers binaires (1) Fichiers binaires (2)


• Lecture • Ecriture
[data, compt] compt
=fread(FID,taille,type,saut) =fwrite(FID,data,type,saut)
data : matrice de stockage des données lues compt : nombre d ’éléments lus avec succès
(réels double) FID : identificateur du fichier
compt : nombre d ’éléments lus avec succès data : matrice des données à écrire
FID : identificateur du fichier type : type (nombre d ’octets) de l ’élément
taille : nombre d ’éléments à lire (facultatif) à écrire
type : type (nombre d ’octets) de l ’élément saut : nombre d ’octets à ignorer avant
à lire (‘char’, ‘int’, ‘long’ ...) chaque écriture (facultatif)
saut : nombre d ’octets à ignorer après
chaque lecture (facultatif)

Î intéressant pour l ’extraction de champs


non contigus mais de longueur fixe

•25
Fichiers binaires (3) Formats spécifiques
• Positionnement • ASCII : fichiers textes manipulables par
un éditeur de textes et contenant des
statut =fseek(FID,offset,origine) données présentées sous formes de
statut : 0 en cas de succès,-1 encas d’échec matrice
offset : nombre d’octets au-delà de origine Î load nom
(positif ou négatif)
origine : position
• ASCII délimité (DLM = ‘ ‘, ‘,’, ’;’ ...)
Î data =dlmread(nom, DLM)
‘ bof ’ début de fichier
Î dlmwrite(nom, data,)
‘ cof ’ position courante du pointeur
‘ eof ’ fin de fichier • CSV : ASCII délimité per une virgule
statut =feof(FID) Î csvread(nom)
Î csvwrite(nom, data)
statut : 1 si la fin du fichier est atteinte, 0
autrement • WK1 : fichiers Lotus 123
Î wk1read(nom)
frewind(FID)
Î wk1write(nom, data)
Îpositionne le pointeur sur le premier octet

•26

Vous aimerez peut-être aussi