• Aucun résultat trouvé

INTRODUCTION. Introduction (2) Espace de travail. Fonctionnement. le Workspace (1) Mode interactif : Mode programme : Type de variables :

N/A
N/A
Protected

Academic year: 2022

Partager "INTRODUCTION. Introduction (2) Espace de travail. Fonctionnement. le Workspace (1) Mode interactif : Mode programme : Type de variables :"

Copied!
26
0
0

Texte intégral

(1)

INTRODUCTION

• MATrix LABoratory

• Logiciel qui permet, de manière interactive :

– de faire des calculs matriciels ; – d ’analyser les données ;

– de visualiser les résultats en 2D et 3D ...

• Langage de programmation

Toolboxes : ensemble de fonctions (fichiers .M) développées pour des domaines d ’applications spécifiques

• SIMULINK : interface graphique interactive de MATLAB

Introduction (2)

Fonctionnement

Mode interactif :

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

Mode programme :

MATLAB exécute, ligne par ligne, les instructions d ’un fichier .M

Type de variables : unique : la matrice

L ’espace de travail : le Workspace (1)

Espace de travail Données

Historique

(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 :

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

(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 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

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

!

(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 + 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

(7)

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

(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 .* 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

(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 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

(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

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

(11)

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

(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<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

(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 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

(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-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

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

(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 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

(17)

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

(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 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

(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 figure

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

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

. . .

(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’) ; 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])

(23)

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

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

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

(26)

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)

Références

Documents relatifs

Donc le nombre dérivé de f en 0 est égal à 0... Première STG Exercices sur le chapitre 15 : E2. Je me déplace de une unité vers la droite. Puis je descends de une unité vers le

Celle qui correspond à la dépense minimale est la droite parallèles à d 5 qui a une ordonnée à l'origine minimale tout en ayant au moins un point dans l'ensemble des

lesquels il repose, on ameliorcra considerablement l'efficacite du personnel d'appui intermediaire dans les offices nationaux de statistique et autrcs secteurs. C'est pourquoi

Dans l’exemple ci-dessous la fonction affiche reçoit en paramètre un nombre a et un pointeur sur une fonction. Elle appelle la fonction pointée avec le paramètre a, reçoit en

[r]

- réciter la comptine en déplaçant un élément de la collection à chaque fois qu’un mot-nombre est prononcé, -réciter la comptine numérique en pointant mentalement un élément

a) Quelle est, en octets puis en mégaoctets, la place mémoire nécessaire pour enregistrer une séquence audio/vidéo de 10 secondes ?. b) Même chose pour l’ensemble des

La fusion est la réaction entre 2 noyaux, généralement petits, qui s'assemblent pour donner un noyau plus lourd. Cette transformation a besoin de plusieurs millions de degrés