a la matlab pour le calcul scienti que -...

84
Logiciels “` a la matlab” pour le calcul scientifique Exemples avec Scilab BrunoPin¸con Institut Elie Cartan Lorraine Universit´ e de Lorraine el´ ecom Nancy La Bolle, Ecole de calcul scientifique Septembre 2014 1/84

Upload: trinhthien

Post on 13-Sep-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Logiciels “a la matlab” pour le calcul scientifiqueExemples avec Scilab

Bruno Pincon

Institut Elie Cartan LorraineUniversite de Lorraine

Telecom Nancy

La Bolle, Ecole de calcul scientifiqueSeptembre 2014

1/84

Page 2: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Plan

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

2/84

Page 3: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

3/84

Page 4: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Logiciels “a la matlab” quid ? #1

A la fin des annees 70, Cleve Moler (prof. d’analysenumerique et developpeur de LINPACK et EISPACK)ecrit un interprete (en fortran) dedie au calcul numerique.

C’est une revolution (pour les “numericiens”...)

le langage permet de manipuler matrices et vecteurs demaniere tres intuitive et compacte ;

l’interprete matlab utilise BLAS, LINPACK et EISPACK ;

assez bonnes performances pour les operations vectoriellesmais performances mediocres pour les operations scalaires(facteur 100) ;

tres grande facilite pour tester de nouveaux algorithmesnumeriques.

4/84

Page 5: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Logiciels “a la matlab” quid ? #2

Quelques “concurrents” :en 82, une equipe de l’INRIA a l’idee “d’augmenter” Matlabpour l’automatique (blaise, basile, puis scilab) ;

en 93, John Eaton sort la premiere version d’octave (devientun projet GNU) ;

par la suite : tela, FreeMat, Yorick, nsp, julia, ...

Autres logiciels :S (plutot dedie statistique) et son equivalent libre R (unprojet GNU) ;

python + numpy + scipy + matplotlib + ... + Spyder ;

Sage (calcul formel et calcul numerique).

5/84

Page 6: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Matlab aujourd’hui :

langage simple (et pas de compilation, ...)

un environnement complet de programmation (editeur integreintelligent, editeur graphique, visualisation des variables,GUI,... ) ;

possibilites graphiques etendues ;

interfacage possible avec d’autres langages (C, fortran,...) ;

tres nombreuses boıtes a outils (toolboxes) ;

un site d’echange pour les toolboxes gratuites ;

standard de facto pour les chercheurs en analyse numerique,en traitement du signal et en automatique ;

integration des meilleurs codes numeriques actuels (Sparsesuite, CGAL, ...) ;

fourni avec un BLAS optimise pour chaque plateforme ;

utilise les possibilites multi-coeurs de maniere transparente ;

compilation a la volee en assembleur dans certains cas (JIT).

6/84

Page 7: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Scilab aujourd’hui :

Logiciel libre (CeCILL), similaire a Matlab (mais pas tout a faitcompatible...) :

nombreuses primitives de calcul en algebre lineaire (matricespleines et creuses), pour resoudre des equations differentielles,pour l’optimisation, etc...assez bonnes possibilites graphiques ;environnement utilisateur d’assez bon niveau ;utilisation tres restreinte des multi-coeurs, pas de JIT ;possibilite d’utiliser MPI en recompilant ;systeme de toolboxes “officielles” avec installationautomatisee (ATOMS).

L’histoire de Scilab :commence en 1982 a l’INRIA;organisation en consortium depuis 2003 et jusqu’a Juin 2012;depuis developpement par une entreprise privee : ScilabEnterprises.

7/84

Page 8: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

8/84

Page 9: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Buts du TP

decouvrir ce type de langage et un certain nombre defonctionnalites a travers plusieurs exemples et exercicesprecedes d’explications succinctes ;

decouvrir les limites du logiciel ;

exemples et/ou exercices imposes (bases sur la notationvectorielle, la programmation et le graphique) puis differentschoix possibles... (correction de tous les exercices integree).

C’est parti : lancer scilab svp ;-)

9/84

Page 10: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

10/84

Page 11: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’environnement scilab #1

Beaucoup de fenetres ! (pour les allergiques scilab -nw)

11/84

Page 12: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’environnement scilab #2

Un principe :Toutes lignes de code scilab entrees directement dans lafenetre de commande ⇐⇒ ecrire ces lignes dans unfichier avec l’aide de l’editeur SciNotes (ou autre...) et“d’executer/charger” ce fichier dans scilab.

Executer/charger un fichier (de commandes) dans scilab :

en utilisant le menu de SciNotes ou directement en cliquantsur l’icone B

en entrant la commande “exec nom du fichier” dans lafenetre de commande.

12/84

Page 13: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’environnement scilab #3

Interactions basiques avec le systeme :

pwd // repertoire positionne par scilab

ls // fichiers de ce repertoire

cd // vers le repertoire de base (HOME)

mkdir("Exos_scilab") // creation repertoire pour le TP

cd Exos_scilab // ou bien cd("Exos_scilab")

Verifions que le graphique fonctionne :

x = linspace(-%pi,%pi,11); // maillage de [-pi,pi] a 11 pts.

y = cos(x)./(1+x.^2); // (%pi est une constante scilab)

clf() // nettoie la fenetre graphique (courante)

plot(x,y,’b’)

13/84

Page 14: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’environnement scilab #4

Pour obtenir de l’aide :

soit directement dans la fenetre du Help (cliquer sur ? si ellen’est pas presente)

ou encore en entrant help motcle dans la fenetre decommande.

Exercice 1

1 Recopier les lignes precedentes dans un fichier avec Scinote(ou autre editeur) ; la tradition est de suffixer les scripts en.sce.

2 Executer le fichier dans scilab ;

3 Modifier le script en jouant avec le nombre de points, lalongueur de l’intervalle et/ou la couleur du dessin (’b’, ’g’,’r’, ’k’, ’c’, ’m’ pour bleu, vert, rouge, noir, cyan etmagenta).

14/84

Page 15: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

15/84

Page 16: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Definir des vecteurs et des matrices I

Les objets de base de scilab sont les vecteurs et les matrices deflottants.

les scalaires sont en fait des matrices 1x1

les vecteurs sont des matrices avec une ligne ou une colonne.

Definir une matrice a partir de ses coefficients

A = [1, 2, 3; 4, 5, 6] // ";" introduit une nouvelle ligne

x = [0 ; 1; 0] // un vecteur colonne

y = [exp(%pi), sin(%e)] // un vecteur ligne

Remarques:

si la definition est terminee par un point virgule pas d’affichage

les coefficients peuvent etre donnes par des expressions.

16/84

Page 17: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Definir des vecteurs et des matrices II

Definir une matrice a partir d’autres matrices

La meme syntaxe fonctionne si les scalaires sont remplaces par desmatrices ou des vecteurs :

la virgule (ou le blanc) introduit une concatenation a droiteavec une matrice ayant le meme nombre de lignes

le point-virgule introduit une concatenation en dessous avecune matrice ayant le meme nombre de colonnes.

Testez :

B = [A ; y , 1]

C = [B, x] // C peut etre construite directement avec [[A ; y, 1],x]

17/84

Page 18: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Definir des vecteurs et des matrices III

Quelques constructeurs de vecteurs et matrices

1 linspace(a,b,n) cree un maillage uniforme de [a, b] avec npoints

2 zeros(m,n) et ones(m,n) creent de matrices m× n de 0 etde 1.

3 eye(m,n) retourne une matrice “identite” m× n.

4 A*B est le produit matriciel de A par B (ou entre un scalaireet un vecteur ou une matrice).

5 A’ correspond a la transposition de la matrice A.

6 rand(m,n) matrice de nombres aleatoires (loi uniforme dans[0,1[).

7 Si la matrice A est carree et inversible on peut resoudre lesysteme lineaire Ax = b avec x = A\b.

18/84

Page 19: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Definir des vecteurs et des matrices IV

8 Si x est un vecteur A=diag(x,k) construit une matrice“diagonale” (carree) constituee de 0 avec le vecteur x commediagonale k.

(1,1)

(2,1)

(3,1)

(4,1)

(1,2)

(2,2)

(3,2)

(4,2)

(1,3)

(2,3)

(3,3)

(4,3)

(1,4)

(2,4)

(3,4)

(4,4)

(1,5)

(2,5)

(3,5)

(4,5)

k=2k=1

k=0

k=−1

k=−2

lower

upperk=3

9 si A est une matrice (mais pas un vecteur) diag(A,k) extraitla diagonale k comme un vecteur colonne.

10 la fct size permet de recuperer les dimensions d’un tableau :[m,n] = size(A), m = size(A,1), n = size(A,2), mn =

size(A,’*’).

19/84

Page 20: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Definir des vecteurs et des matrices V

Une construction essentielle, testez :

I = 1:5

J = 1:2:6 // essayez aussi J = 1:2:7

K = 10:-1:5

II = 1:0 // on obtient une matrice vide

La syntaxe est val int:inc:lim. On obtient un vecteur ligneavec val init comme premier coefficient, les autres composantesetant obtenues en ajoutant successivement inc tant que lim n’estpas “depassee”. Remarques :

si l’increment inc n’est pas donne, il est egal a 1 ;

quand inc est positif et val_init > lim ou quand inc estnegatif et val_init < lim on obtient une matrice vide.

Tres utile pour extraire/assigner sous-vecteurs et sous-matrices etpour piloter les boucles for.

20/84

Page 21: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Exercice recapitulatif I

Exercice 2 Ecrire un script scilab exercice2.sce qui:

1 donne une valeur a la variable n puis definit la matrice n× n :

A =

2 −1 0 · · · 0

−1. . .

. . .. . .

...

0. . .

. . .. . . 0

.... . .

. . .. . . −1

0 · · · 0 −1 2

fonctions utiles : ones, diag, (eye).

2 definit un vecteur b ∈ Rn avec rand(n,1), calcule la solutionde Ax = b, on pourra :

mesurer le temps avec : tic(); x = A\b; tc = toc();

afficher avecprintf("\n n = %d; temps calcul : tc = %g\n",n,tc)

puis calcule le residu relatif ‖Ax− b‖/‖b‖ (utiliser norm).

21/84

Page 22: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Exercice recapitulatif II

3 calcule la quantite E = 12x>Ax− b>x ; (definir un autre

vecteur y ∈ Rn avec rand, calculer F = 12y>Ay − b>y et

verifier que E < F ).

4 les limites de scilab : tester avec des valeurs de n de plus enplus grande (n = 10, 100, 500, 1000, 2000, ...) ca craqued’abord avec la memoire ! Vers n = 2000 on a un messaged’erreur... Remede : stacksize(20e6) ou encorestacksize(’max’). Neanmoins ici on pourrait allerbeaucoup plus loin en utilisant la structure creuse de lamatrice.

22/84

Page 23: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

exercice 2: solution

n = 500;

v = -ones(1,n-1);

A = diag(v,-1) + 2*eye(n,n) + diag(v,1);

// autre solution

// A = diag(v,-1) + diag(2*ones(1,n)) + diag(v,1)

b = rand(n,1);

tic(); x = A\b; tc = toc();

printf("\n n = %d; temps calcul : tc = %g\n",n,tc)

res = norm(A*x-b)/norm(b)

E = 0.5*x’*A*x - b’*x

y = rand(n,1);

F = 0.5*y’*A*y - b’*y

E < F

23/84

Page 24: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

24/84

Page 25: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Assignations et extractions I

La syntaxe de base est :

nom var = expression

ou la variable nom var est cree (ou redefinie si elle existe deja)Rmq: sans partie gauche, cad avec :

expression

le resultat de expression est mis dans une variable par defautappelee ans.

Il est possible de changer juste une sous-partie d’une matrice.Attention l’indexation commence a 1 et pas a 0 :

le premier element d’un vecteur x est x(1) , pas x(0) nix[1].

25/84

Page 26: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Assignations et extractions II

Essayez :

A = rand(3,4) // creation d’une matrice

A(2,2) = -1 // modification du coef (2,2) de A

c = A(2,3) // extraction du coef (2,3) de A (mis dans c)

A(2,:) // extraction de la ligne 2 de A (mis dans ans)

A(2,:) = ones(1,4) // on change la ligne 2 de A

A(:,3) = 0 // on change la colonne 3 de A

B = A([1,3],[1 2]) // on extrait une sous-matrice (mise dans B)

A([1,3],[1 2]) = [-10,-20;-30,-40] // on modifie la meme sous-matrice

La syntaxe la plus complete est :A(row_ind,col_ind)= RHS // assignation

var = A(row_ind,col_ind) // extraction (et assignation a var)

dans laquelle on specifie dans chaque dimension un vecteurd’indices. Raccourcis utiles, le caractere : designe l’etenduecomplete d’une ligne ou d’une colonne, le caractere $ designe ledernier element (end en matlab).

26/84

Page 27: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

27/84

Page 28: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’algebre “element par element” et la fonction plot I

Les operateurs .*, ./ et .^ sont tres utiles :

1 Si x et y sont des matrices de memes dimensions:

z=x.*y est le produit element par element, cad zi,j = xi,jyi,jz=x./y est la division element par element, cadzi,j = xi,j/yi,j .Raccourci utile: si s est un scalaire, z=s./y donnezi,j = s/yi,j attention z=1./y ne fonctionne pas comme onpeut s’y attendre ! (utilisez z=1 ./y).

2 si x est une matrice et p un scalaire:

z=x.^p correspond a: zi,j = xpi,j .et =p.^x, donne zi,j = pxi,j .

La fonction plot permet de dessiner une ou plusieurs courbes :

plot(x1,y1[,style1],x2,y2[,style2], ....)

28/84

Page 29: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’algebre “element par element” et la fonction plot II

ou style est une chaıne de caracteres optionnelle permettant dedefinir la couleur, le type de la ligne et/ou le symbole utilise pourdessiner (les chaınes scilab se delimitent avec ’toto’ ou "toto").

x = linspace(0,2*%pi,31);

y1 = sin(x); y2 = cos(x);

scf(0); // selectionne la fenetre 0 (comme fenetre graphique courante)

clf(); // efface la fenetre courante

plot(x,y1,"b-",x,y2,"r--"); // des lignes bleu et rouge

scf(1); // la fenetre 1 devient la fenetre courante

clf(); //

subplot(2,1,1); // decoupe la fenetre vert. en 2, on utilise le haut

plot(x,y1,"ro",x,y2,"bx"); // dessin avec symboles

subplot(2,1,2); // idem mais on utilise la partie basse

plot(x,y1,"r--o",x,y2,"g-x"); // dessin avec lignes et symboles

Rmq : les fonctions mathematiques usuelles sin, cos, exp, log,cosh, sinh, tan,... fonctionnent aussi vectoriellement.

29/84

Page 30: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

L’algebre “element par element” et la fonction plot III

couleurs

k black c cyanb blue m magentar red y yellowg green w white

types de lignes

- solid-- dashed: dotted-. dashdot

symboles

+ + d ♦x × v Oo © s �* ∗ ^ 4

Comment jouer avec plusieurs fenetres graphiques :scf(num) selectionne num comme fenetre courante

show window() mise en avant de la fenetre courante

clf() efface la fenetre courante

xdel(num) detruit la fenetre num

Annotations graphiques :

titre : title(chaıne titre).

labels en x et y : xlabel(chaınes xlabel) etylabel(chaıne ylabel)

legende : legend(leg courbe1, leg courbe2,...)

notation latex possible en entourant les chaınes avec des $

30/84

Page 31: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

algebre “element par element” et fct plot : exercice

Exercice 3

1 Dans la fenetre 0, dessiner la fonction f(x) = 11+x2

en bleu

pour x ∈ [−4, 4] et la fonction g(x) = cos(πx)e−|x| en rougepour x ∈ [−5, 5]. Aide : la valeur absolue est abs, utiliserlinspace pour la discretisation des intervalles. Exempled’utilisation de la notation latex pour la legende :

legend(’$\frac{1}{1+x^2}$’, ’$\cos(\pi x) e^{-|x|}$’);

hleg = gce(); hleg.font_size=4;

2 Dans la fenetre 1, tracer le cercle x2 + y2 = 1 et l’ellipse(x/2)2 + (y/0.9)2 = 1. Aide : utiliser les representationsparametriques usuelles x = cos(t), y = sin(t), t ∈ [0, 2π] pourle cercle et x = 2 cos(t), y = 0.9 sin(t), t ∈ [0, 2π] pourl’ellipse. Ajouter une legende. Pour obtenir une echelleisometrique :

haxes = gca(); // identificateur du systeme d’axes courant

haxes.isoview = "on"; // "off" par defaut

31/84

Page 32: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

exercice 3 : solution I

// courbes 1 et 2 dans la fenetre 0

x1 = linspace(-4,4,101);

y1 = 1 ./(1+x1.^2);

x2 = linspace(-5,5,101);

y2 = cos(%pi*x2).*exp(-abs(x2));

scf(0);

clf();

plot(x1,y1,’b’,x2,y2,’r’);

legend(’$\frac{1}{1+x^2}$’, ’$\cos(\pi x) e^{-|x|}$’);

hleg = gce(); hleg.font_size=4;

title("Des courbes","FontSize",5);

32/84

Page 33: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

exercice 3 : solution II

// cercle et ellipse dans la fenetre 1

theta = linspace(0,2*%pi,200);

x3 = cos(theta);

y3 = sin(theta);

x4 = 2*cos(theta);

y4 = 0.9*sin(theta);

scf(1);

clf();

plot(x3,y3,’b’,x4,y4,’r’)

legend(’circle’, ’ellipse’)

hleg = gce(); hleg.font_size=3;

haxes = gca();

haxes.isoview = "on";

33/84

Page 34: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

34/84

Page 35: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation I

1 Les fonctionsUne fonction scilab est definie de la facon suivante :

function [y1,y2,...,yn] = nom_fonction(x1,x2,..xm)

// le corps de la fonction doit definir les arguments de sortie y1,...,yn

// a l’aide des arguments d’entree x1,...,xm

.............

endfunction

Une telle definition peut etre ecrite dans un script (avant lapartie du script qui l’utilise) ou dans un fichier independant(dont le nom est traditionnellement suffixe en .sci). On peutecrire autant de fonctions que l’on veut. Pour faire connaıtrela definition de ces fonctions il faut executer le fichier (commepour un script).

Rmq : difference importante avec matlab, octave,...

35/84

Page 36: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation II

Un exemple, ecrivez dans un fichier (par exemple quad.sci):

function [x1,x2] = resout_quad(a,b,c)

// solve a x^2 + b x + c = 0

delta = b^2 - 4*a*c

x1 = (-b + sqrt(delta))/(2*a);

x2 = (-b - sqrt(delta))/(2*a);

endfunction

Executez ce fichier puis essayez dans la fenetre de commande :

[r1,r2] = resout_quad(1,0,1) // scilab passe en arith. complexe

[r1,r2] = resout_quad(0,1,1) // pas une equation quadratique

resout_quad(1,0,-1) // ans retient le premier resultat

// mais la seconde racine est perdue !

[r1,r2] = resout_quad(1,0,-1) // la on recupere les 2 racines

36/84

Page 37: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation III

2 Les tests if

if expr_bool then

// bloc execute si expr_bool est vraie

.....

else

// bloc execute si expr_bool est fausse

.....

end

If en cascade :if expr_bool1 then

// bloc execute si expr_bool1 est vraie

.....

elseif expr_bool2 then

// bloc execute si expr_bool1 fausse et expr_bool2 vraie

.....

else

// bloc execute si expr_bool1 et expr_bool2 fausses

.....

end

37/84

Page 38: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation IV

3 Les boucles for . Une forme generale est :

for i = vect_ligne

// corps de la boucle

.....

end

le nombre d’iterations est egal au nb de composantes duvecteur lignea l’iteration k la variable de la boucle i est egale avect_ligne(k).Pour se ramener a des boucles “usuelles” on utilisefirst val:inc:lim comme vecteur ligne.

Essayez :

n = 5; fact_n = 1;

for i = 1:n, fact_n = i*fact_n, end

38/84

Page 39: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation V

On peut sortir prematurement d’un for avec un break :

for i = 1:n

.....

if expr_bool then, break, end

....

end

4 Les boucles while

while expr_bool

// corps de la boucle

....

end

Essayez :

x = 1;

while x < 1000, x = 2*x, end

On peut aussi sortir prematurement d’un while avec un break.

39/84

Page 40: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Elements de programmation VI

Problematique : comment ecrire des fonctions efficaces ?Si on ecrit un code scilab de maniere “classique”, c’est souventlent (car interprete). Et meme avec matlab la compilation a lavolee (JIT) impose des contraintes (pas d’appels a une autrefonction “utilisateur” dans un script ou une fonction).

Remede : il faut penser vectoriel, cad utiliser le plus possible desfonctions et operateurs qui pourront agir “globalement” sur unvecteur ou une matrice (cf exercices suivants).Rmq :

l’ecriture vectorielle est parfois naturelle, dans le cas contraireon peut obtenir des codes pas tres lisibles ;

ce n’est pas toujours possible ! D’ou l’ecriture d’une partie ducode en langage compile avec celle d’une interface (c’est unpeu lourd), d’ou le JIT de Matlab ou encore le developpementde Julia (base sur LLVM).

40/84

Page 41: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Un exemple de vectorisation I

On cherche a calculer la matrice suivante (appelee Vandermonde) :

A =

1 t1 t21 . . . tn11 t2 t22 . . . tn2...

......

......

1 tm t2m . . . tnm

Voici un premier code assez naturel :

function A=vandm1(t,n)

m=size(t,’*’)

for i = 1:m

for j = 1:n+1

A(i,j) = t(i)^(j-1)

end

end

endfunction

mais qui n’est pas optimal par rapport a la gestion de la memoire.

41/84

Page 42: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Un exemple de vectorisation II

exec exemple_vect1.sci; // fichier fourni

t = linspace(0,1,1000);

tic(); A = vandm1(t,1000); toc() // donne 3.5 s

Il faut reserver la taille de A (avec un zeros ou un ones) :

function A=vandm2(t,n)

m=size(t,’*’)

A = zeros(m,n+1) // declaration...

for i = 1:m

for j = 1:n+1

A(i,j) = t(i)^(j-1)

end

end

endfunction

tic(); A = vandm2(t,1000); toc() // donne 1.6 s

On peut continuer a optimiser ce code scalaire mais on ne gagnepas beaucoup ! La bonne methode est d’utiliser l’ecriturevectorielle.

42/84

Page 43: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Un exemple de vectorisation III

function A=vandm3(t,n)

m=size(t,’*’)

t = t(:) // t doit etre un vecteur colonne dans la suite

A=ones(m,n+1)

for i=1:n

A(:,i+1)=t.^i

end

endfunction

tic(); A = vandm3(t,1000); toc() // donne 0.058 s

et avec une optimisation sur le calcul des puissances :

function A=vandm4(t,n)

m=size(t,’*’)

t = t(:)

A=ones(m,n+1)

for i=1:n

A(:,i+1)=A(:,i).*t

end

endfunction

tic(); A = vandm4(t,1000); toc() // donne 0.030 s : on gagne un facteur 100 !

43/84

Page 44: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Un autre exemple de vectorisation I

Soit la fonction f(x) =

0 pour x ≤ −214(x+ 2)2 pour x ∈ [−2, 0]1 + sin(x) pour x ∈ [0, π]

e−(x−π) pour x ≥ π

que l’on veut ecrire “vectoriellement”. Un code naturel est :

function y=toto(x)

y = zeros(x)

for k = 1:size(x,"*")

xx = x(k)

if xx >= %pi then

y(k) = exp(-(xx-%pi))

elseif xx >= 0 then

y(k) = 1 + sin(xx)

elseif xx >= -2

y(k) = 0.25*(xx+2)^2

end

end

endfunction

44/84

Page 45: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Un autre exemple de vectorisation II

Cependant avec la boucle plus les tests, le code sera lent sur ungros vecteur... Pour diminuer le travail de l’interprete, on peututiliser la fonction find :

function y=totov(x)

y = zeros(x)

i1 = find(-2 < x & x <= 0)

i2 = find(0 < x & x <= %pi);

i3 = find(x > %pi)

y(i1) = 0.25*(x(i1)+2).^2

y(i2) = 1 + sin(x(i2))

y(i3) = exp(-(x(i3)-%pi))

endfunction

ce qui accelere le code (ici un facteur 25) :

exec exemple_vect2.sci // fichier fourni

x = linspace(-2.5,8,1e5); // un grand vecteur

tic(); y = toto(x); toc() // 0.44 s

tic(); y = totov(x); toc() // 0.017 s

45/84

Page 46: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Exercice de programmation et vectorisation I

Exercice 4 Interpolation de Lagrange.Soit x1, x2, . . . , xn, n reels distincts (les abscisses) et y1, . . . , yn nreels quelconques. On sait qu’il existe un unique polynome p dedegre ≤ n− 1 tel que p(xi) = yi, i = 1, . . . , n que l’on peutconstruire dans la base de Lagrange (associee aux abscisses xi) :

p(t) =

n∑i=1

yiLi(t), ou Li(t) =n∏j=1

j 6=i

t− xjxi − xj

1 Ecrire une fonction lagrange(t,x,y) qui calcule cepolynome en les abscisses tk du tableau t. La fonction doitretourner un tableau de meme dimension que t. Une premierepossibilite est la suivante (fichier exo4.sci) :

46/84

Page 47: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Exercice de programmation et vectorisation II

function p=lagrange1(t,x,y)

n=size(x,’*’); m = size(t,’*’); p = zeros(t)

for k = 1:m // calcul de p(k)

for i = 1:n

// calcul de Li(t(k))

Li = 1

for j = 1:n

if j ~= i then

Li = Li * ((t(k) - x(j))/(x(i) - x(j)))

end

end

p(k) = p(k) + y(i)*Li

end

end

endfunction

Le but de l’exercice d’essayer d’ecrire le code vectoriellementde maniere a se passer de la boucle externe sur lescomposantes de t (Aide : initialiser Li avec ones(t) etutiliser l’operateur .*).

47/84

Page 48: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Exercice de programmation et vectorisation III

2 Testez le gain obtenu avec la version vectorielle. Par exemple :

t = linspace(-2,2,200); // 200 abscisses d’evaluation

x = linspace(-2,2,30); y = rand(x); // 30 points d’interpolation

tic(); p = lagrange1(t,x,y); toc()

tic(); p = lagrange2(t,x,y); toc()

3 Ecrire une fonction scilab runge qui calcule la fonction deRunge x 7→ 1

1+x2“vectoriellement” (cela a deja ete fait dans

l’exercice 3).

4 Ecrire un script permettant de tester votre fonction sur lafonction sin sur [0, 2π] (ou [0, π/2]) et sur la fonction deRunge sur [−4, 4] avec n abscisses d’interpolation et mabscisses evaluation toutes equidistantes (linspace). Illustrergraphiquement (traces des courbes “exactes”, des polynomes,des points d’interpolation (symboles)) et tester votre scriptavec differentes valeurs de n (par exemple n = 7, 13, 20, ...).

48/84

Page 49: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Solution de l’exercice I

function p = lagrange2(t,x,y)

// t : abscisses d’evaluation du polynome d’interpolation

// x, y : points d’interpolation

p = zeros(t)

n = size(x,"*")

for i = 1:n

// calcul du i eme monome L_i(t) (on peut utiliser une autre fonction)

Li = ones(t)

for j = 1:n

if j ~= i then

Li = Li.*((t-x(j))./(x(i)-x(j)))

end

end

p = p + y(i)*Li

end

endfunction

function y=runge(t)

if isempty(t) then, y = t, else, y = 1 ./(1 + t.^2), end

endfunction

49/84

Page 50: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Solution de l’exercice II

// 1- test avec sinus

t = linspace(0,2*%pi,200); // abscisses d’evaluation pour visualisation

ye = sin(t); // ordonnees exactes

// points d’interpolation

n = 7;

x = linspace(0,2*%pi,n);

y = sin(x);

yi = lagrange2(t,x,y); // resultat

// visu

scf(1); clf()

plot(x,y,’ok’,t,ye,’b’,t,yi,’r’)

title(’ Interpolation de sin avec ’+string(n)+’ points’)

legend("points","sin","interp")

// 2- test avec runge

tr = linspace(-4,4,200); // abscisses d’evaluation pour visualisation

yre = runge(tr); // ordonnees exactes

// points d’interpolation

50/84

Page 51: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Solution de l’exercice III

nr = 9;

xr = linspace(-4,4,nr);

yr = runge(xr);

yri = lagrange2(tr,xr,yr); // resultat

// visu

scf(2)

clf()

plot(xr,yr,’ok’,tr,yre,’g’,tr,yri,’r’)

title(’ Interpolation de la fct de Runge avec ’+string(nr)+’ points’)

legend("points","runge","interp")

51/84

Page 52: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

52/84

Page 53: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Graphiques avec scilab I

Le systeme graphique par objets

Legend

Compound

Polyline

Polyline

(string)TextPolyline

(string)Text

Surface

(coordinates sys.)

(coordinates sys.)

(window)Axes

Axes

Figure

Le niveau “Figure” est le plus eleve de la hierarchie;l’identificateur (handle) de la figure courante est obtenu avechf = gcf();

53/84

Page 54: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Graphiques avec scilab II

Le niveau “Axes” precise a la fois une sous-partie de la fenetreet un systeme de coordonnees ; l’identicateur du systeme d’“Axes” courant s’obtient avec : ha = gca();

ha = gca();

ha.data_bounds = [xmin,ymin;xmax,ymax]; // precise le rectangle de visualisation

ha.isoview = "on"|"off"; // echelle isometrique

ha.log_flags="nn"|"nl"|"ln"|"ll"; // echelle log

Le dernier niveau est compose des objets graphiques de base“Polyline”, “Surface”, “Text”, “Legend”, etc... ou de“Compounds”, qui encapsulent plusieurs objets de base (etd’autres “Compounds”). Par exemple plot rassemble lescourbes crees (“Polylines”) dans un objet “Compound”. Onrecupere l’identificateur du dernier objet graphique cree aveche = gce().

54/84

Page 55: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Graphiques avec scilab III

Essayez :

clf();

x = linspace(0,2*%pi,81);

y1 = cos(x);

y2 = sin(x);

plot(x,y1,"b",x,y2,"r"); // dessin de cos en bleu et de sin en rouge

he = gce(); // compound des 2 polylines

hsin = he.children(1); // handle de la 2 eme courbe (ordre inverse !)

// modification de qq proprietes

hsin.thickness = 4; // trait plus epais

hsin.foreground = 6; // changement de couleur (indice d’une colormap)

//

hcos = he.children(2); // handle de la 1 ere courbe

hcos.line_style = 2; // dessin en tirets

// options de plot

clf()

plot(x,y1,"color",[0,0,1],"linestyle","--")

plot(x,y2,"color",[1,0,0],"thickness",4)

55/84

Page 56: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab I

Exemples disponibles dans le fichier galerie graphique.sce

clf();

x = linspace(0,2*%pi,11);

plot(x,sin(x),"r--o","markforeground",[0,0.3,0],"marksize",10);

ha = gca();

ha.x_location = "origin"; ha.y_location = "origin"; ha.box = "off";

title("Axes centres a l’’origine","fontsize",4,"fontname",7)

56/84

Page 57: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab II

clf();

x = linspace(-1,1,11);

y = (x+1).*(x-1);

plot(x,y,"b",x,y,"r","thickness",2)

he = gce(); hc = he.children(1); hc.polyline_style = 2;

title("Trace classique versus en escaliers","fontsize",4)

57/84

Page 58: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab III

clf();

x = -5:5;

plot(x,abs(x)-1.5,"-","foreground",[0,0.3,0],"thickness",4)

he = gce(); hc = he.children(1); hc.polyline_style = 3;

hc.line_mode = "off";

xgrid(color("grey"));

title("En batons","fontsize",4)

58/84

Page 59: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab IV

clf();

x = logspace(-3,3,100); y = x + x.^4;

plot(x,y,"-","foreground",[0.6,0,0],"thickness",4)

ha = gca(); ha.log_flags = "ll";

xgrid(color("grey"));

title("Echelle log-log","fontsize",4)

59/84

Page 60: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab V

function z = chameau(x,y)

z = (4 - 2.1*x.^2 + (x.^4)/3).*x^2 + x.*y + (-4+4*y.^2).*y.^2

endfunction

nx = 200; x = linspace(-1.9,1.9,nx);

ny = 100; y = linspace(-1.1,1.1,ny);

nv = 14; // nb de lignes isovaleurs

clf(); hf = gcf(); hf.color_map = jetcolormap(nv);

contour2d(x,y,chameau,nv); title("Le chameau a 6 bosses","fontsize",4)

60/84

Page 61: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab VI

clf()

hf = gcf(); hf.color_map = jetcolormap(64);

[X,Y] = meshgrid(x,y); Z = chameau(X,Y);

surf(X,Y,Z); he = gce(); he.color_flag = 3; he.color_mode = -1;

colorbar(min(Z),max(Z))

title("Le chameau a 6 bosses","fontsize",4)

61/84

Page 62: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab VII

function [x,y,z] = moebius(theta, rho)

x = (2 + rho.*sin(theta/2)).*cos(theta)

y = (2 + rho.*sin(theta/2)).*sin(theta)

z = rho.*cos(theta/2)

endfunction

theta = linspace(0,2*%pi,80); rho = linspace(-0.5,0.5,10);

[Theta,Rho] = meshgrid(theta,rho); [X,Y,Z] = moebius(Theta,Rho);

clf(); id1 = color("lightsteelblue"); id2 = color("steelblue")

surf(X,Y,Z); hs = gce(); hs.hiddencolor=id2; hs.color_flag=0;

hs.color_mode = id1; hs.foreground = color("black");

ha = gca(); ha.isoview = "on"; ha.cube_scaling = "off";

title("Un ruban de Moebius","fontsize",4)

62/84

Page 63: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Quelques figures realisees avec scilab VIII

Quelques autres possibilites graphiques :

trace de champs de vecteurs 2d avec champ (pour les champs3d il faut coder en utilisant la primitive xarrows) ;

courbes en 3d avec param3d ;

histogrammes avec histplot ;

representations 2d avec couleurs pour la 3 eme dimension :grayplot, Sgrayplot, et fec pour une fonction definie surune triangulation ;

“images” avec Matplot : a partir de la version 5.5 il estpossible de visualiser une image TrueColor mais pas defonction pour lire les formats usuels (png, jpg,...) : il faututiliser une toolbox externe avec ATOMS.

fonctions elementaires (segments, polygones, etc...)

dessins specialises pour l’automatique.

63/84

Page 64: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

***

1 Logiciels “a la matlab” quid ?

2 Buts du TP

3 L’environnement scilab

4 Definir des vecteurs et des matrices

5 Assignations et extractions

6 L’algebre “element par element” et la fonction plot

7 Elements de programmation

8 Graphiques avec scilab

9 Exercices (au choix)Statistiques elementaires, lecture de fichiers csvResoudre une equation differentielleIdentification des parametres d’un modele

64/84

Page 65: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv I

Exercice 5 La temperature a Nancy au mois de Juillet !Donnees obtenues sur le site http://www.infoclimat.fr. Le fichiertemp_nancy_juillet.csv a la structure suivante :

Date UTC T◦ (C)

01/07/14 00h00 12.1

01/07/14 03h00 9.8

01/07/14 06h00 13.9

........

ou les 2 champs verticaux sont separes par une tabulation (ledefaut des csv est la virgule).

1 Lecture du fichier csv : la fonction qui permet de lire un telfichier est csvRead. Dans notre cas on utilisera :

M = csvRead("temp_nancy_juillet.csv","\t",[],"string");

on recupere alors une matrice de chaınes de caracterescomportant 2 colonnes.

65/84

Page 66: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv II

Pour recuperer les donnees numeriques de la deuxiemecolonne on utilisera :

n = size(M,1); // doit etre egal a 1 + 31*8 = 249

temp = evstr(M(2:n,2)); // evstr evalue un texte comme du code scilab.

2 Dans la fenetre 0, tracer l’evolution de la temperature des 5premiers jours (jusqu’au 6 juillet a 00h), cad des8× 5 + 1 = 41 premieres composantes de temp. Pour obtenirune graduation sympatique de l’axe des “x” :

ha = gca();

pos_xticks = 1:8:41; lab_xticks = string(1:6)+" juil";

ha.x_ticks = tlist(["ticks","locations","labels"],pos_xticks,lab_xticks)

Pour rajouter une grille :idgrey = color("grey");

xgrid(idgrey)

Pour le label en “y” on pourra utiliser la chaıne M(1,2).

66/84

Page 67: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv III

3 Pour faire quelques statistiques il va etre plus simple dereformatter le vecteur des temperatures comme une matrice8× 31 ou la premiere ligne correspondra a la temperature a 0H, la deuxieme a 3 H, etc... La bonne fonction est matrix,voir le help.

4 Calculer la moyenne, la medianne et l’ecart type destemperatures pour chaque heure des releves journaliers (0 H,3 H, 6 H, etc... (fonctions : mean, median, stdev). Pourtravailler “vectoriellement” on utilisera le deuxieme argumentde ces fonctions. Sortir les resultats dans la console ; onpourra utiliser le code suivant :printf("\n stats temperatures a Nancy au mois de juillet :\n")

printf("\n heure | T◦ moy | T◦ medianne | ecart type")

printf("\n -------+--------+-------------+-----------\n")

for k = 1:8

printf(" %2d h | %3.1f | %3.1f | %2.1f \n",3*(k-1),moy(k),med(k),ec(k) )

end

67/84

Page 68: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv IV

5 Dans la fenetre 1, tracer un histogramme des temperatures a15 H (help histplot). Prendre par exemple 7 classes (premierparametre de histplot). Par defaut histplot “normalise” lesdonnees pour obtenir une densite de probabilite. Tracer lesdeux histogrammes (le “normalise” et le non normalise) dansla meme fenetre en utilisant 2 instructions subplot.

68/84

Page 69: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv V

Solution

M = csvRead("temp_nancy_juillet.csv","\t",[],"string");

n = size(M,1); // doit etre egal a 1 + 31*8 = 249

temp = evstr(M(2:n,2));

// dessin de la temperature des 5 premiers jours de juillet

scf(0); clf()

plot(temp(1:41),"bo-","thickness",2);

ha = gca();

ha.x_ticks = tlist(["ticks", "locations", "labels"],1:8:41,string(1:6)+" juil")

ha.sub_ticks = [6,1];

idgrey = color("grey");

xgrid(idgrey)

ylabel(M(1,2),"fontsize",3)

title("Courbe de temperature a Nancy des 5 premiers jours de juillet","fontsize",3)

// mise sous la forme d’un tableau 2d

Temp = matrix(temp, 8,31);

// stats

moy = mean(Temp,2);

med = median(Temp,2);

ec = stdev(Temp,2);

// impression des resultats dans la console

printf("\n stats temperatures a Nancy au mois de juillet :\n")

printf("\n heure | T◦ moy | T◦ medianne | ecart type")

printf("\n -------+--------+-------------+-----------\n")

69/84

Page 70: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Statistiques elementaires, lecture de fichiers csv VI

for k = 1:8

printf(" %2d h | %3.1f | %3.1f | %2.1f \n",3*(k-1),moy(k),med(k),ec(k) )

end

// histogrammes des temperatures a 15 h

T15 = Temp(6,:); // 6 est l’index pour 15 h

scf(1); clf();

subplot(1,2,1)

histplot(7,T15,style=2);

title("histogramme normalise","fontsize",3)

subplot(1,2,2)

histplot(7,T15,style=5,normalization=%f);

title("histogramme non normalise","fontsize",3)

70/84

Page 71: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle I

Scilab permet assez simplement de resoudre une equationdifferentielle (avec condition initiale) :{

u′ = f(t, u)u(t0) = u0

(u(t) est un vecteur de Rn, f une fonction de R× Rn −→ Rn, etu0 ∈ Rn) a l’aide de la fonction ode :

1 Il faut ecrire le second membre f comme une fonction Scilabavec la syntaxe :

function [f] = MonSecondMembre(t,u)

//

ici le code donnant les composantes de f en fonction de t et

des composantes de u.

Rmq : mettre t comme argument meme si l’equation est autonome

(cad meme si f ne depend pas explicitement de t).

endfunction

71/84

Page 72: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle II

2 Un appel a ode pour resoudre l’equation (l’integrer) de t0 aT , en partant de u0 (un vecteur colonne), et en voulantrecuperer la solution aux instantst(1) = t0, t(2), ..., t(m) = T , prendra l’allure suivante :

t = linspace(t0,T,m);

[U] = ode(u0,t0,t,MonSecondMembre)

On recupere alors une matrice de format (n,m) telle queU(i,j) est la solution approchee de ui(t(j)) (la i emecomposante a l’instant t(j)). Rmq : le nombre decomposantes que l’on prend pour t n’a rien a voir avec laprecision du calcul qui peut se regler avec des parametresoptionnels de ode.

72/84

Page 73: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle III

Exemple complet avec l’equation de Van der Pol (cf fichierexemple ode.sce) :

y′′ = c(1− y2)y′ − y

et que l’on reformule comme un systeme de deux equationsdifferentielles du premier ordre en posant u1(t) = y(t) etu2(t) = y′(t) :

d

dt

[u1(t)u2(t)

]=

[u2(t)c(1− u21(t))u2(t)− u1(t)

]function [f] = VanDerPol(t,u) // second membre pour Van der Pol (c = 0.4)

f(1) = u(2)

f(2) = 0.4*(1 - u(1)^2)*u(2) - u(1)

endfunction

73/84

Page 74: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle IV

// resolution de l’equation differentielle

m = 500 ; T = 30 ;

t = linspace(0,T,m); // les instants pour lesquels on recupere la solution

u0 = [-2.5 ; 2.5]; // la condition initiale

[u] = ode(u0, 0, t, VanDerPol);

clf()

subplot(1,2,1); plot(u(1,:),u(2,:),"b");

title("Solution dans le plan de phase")

subplot(1,2,2); plot(t,u(1,:),"g",t,u(2,:),"r"); legend("position","vitesse")

74/84

Page 75: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle V

Exercice 6 Le systeme de Lotka-Volterra est un systemedifferentiel modelisant l’evolution des populations de proies et depredateurs. Il s’ecrit :

dx

dt(t) = x(t)(a− by(t)), t ≥ 0

dy

dt(t) = −y(t)(c− dx(t)),

ou x(t) represente le nombre de proies et y(t) est le nombre depredateurs a l’instant t. Les parametres du systeme sont le taux dereproduction a des proies sans predateurs, le taux de mortalite bdes proies, le taux de mortalite c des predateurs sans proies et letaux de reproduction d des predateurs en fonction des proiesmangees. On impose des conditions initiales x(0) = x0 ety(0) = y0.

75/84

Page 76: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle VI

Resoudre avec ode le systeme proie-predateur mis sous la forme{u′(t) = f(t,u), t ≥ 0u(0) = u0,

On pourra prendre a = 2, b = 1.5, c = 2 et d = 1 commeparametre et u0 = [1.5, 2.5]> et simuler jusqu’a T = 14.Faire le dessin de l’evolution des proies et des predateurs enfonction du temps dans une fenetre et le dessin de l’evolution dansle plan de phase dans une autre (le systeme est periodique).

76/84

Page 77: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Resoudre une equation differentielle VII

Solution

function du = lotkavolterra(t,u)

a = 2; b = 1.5; c = 2; d = 1;

du = [u(1)*(a-b*u(2));...

-u(2)*(c - d*u(1))]

endfunction

u0 = [1.5; 2.5];

T = 14;

t = linspace(0,T,900);

u = ode(u0,0,t,lotkavolterra)

scf(0); clf()

plot(t,u(1,:),"r",t,u(2,:),"g","thickness",3)

legend("proies","predateurs","fontsize",3)

xlabel("$t$","fontsize",5)

scf(1); clf()

plot(u(1,:),u(2,:),"b","thickness",2)

xlabel("proies","fontsize",3)

ylabel("predateurs","fontsize",3)

77/84

Page 78: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq I

On dispose de m points (ti, yi)1≤i≤m experimentaux. La physiquenous dit que l’on devrait observer un comportement de la forme :

yi = f(ti, p∗)

ou f est une fonction de t mais aussi d’un ou de plusieursparametres p∗ inconnus. On cherche a identifier p∗ pour que lemodele “colle” aux mesures (yi ' f(ti, p∗), ∀i). La methode desmoindres carres consiste a trouver p∗ en minimisant la fonction :

F (p) :=

m∑i=1

(f(ti, p)− yi)2

Si on connaıt les ecarts types σi des erreurs sur les yi (qu’onsuppose juste en “moyenne”) alors il est preferable de minimiser :

F (p) :=

m∑i=1

(f(ti, p)− yi

σi

)2

78/84

Page 79: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq II

Exemples de modeles

1 f est, par exemple, tout simplement une droite :

f(t, p) = p2t+ p1

dans ce cas le probleme est simple et peut se resoudre avec del’algebre lineaire mais qui peut le plus peut le moins. . .

2 f est une exponentielle decroissante :

f(t, p) = p1 exp

(− t

p2

)La encore “en passant en log” on peut se ramener a unprobleme d’algebre lineaire.

3 f pourrait etre donnee par la resolution d’une equationdifferentielle...

Rmq : la methode n’est pas restreinte a des modeles de R→ R (tet f(t, p) peuvent etre des vecteurs).

79/84

Page 80: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq III

Utilisation (basique) de leastsqleastsq se propose de minimiser la somme des carres descomposantes d’une fonction g de Rn dans Rm :

g(p) = [g1(p), g2(p), . . . , gm(p)]>

c’est a dire de minimiser la fonction G : Rn → R suivante :

G(p) =

m∑i=1

gi(p)2

et l’appel le plus simple est de la forme :

[Gopt,popt] = leastsq(g,p0)

ou p0 est une estimation plus ou moins grossiere des bonsparametres.

80/84

Page 81: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq IV

Dans le contexte precedent, cette fonction g prendra la forme :

gi(p) = f(ti, p)− yi ou gi(p) =f(ti, p)− yi

σi

et il faudra lui passer les “parametres” tmes = [t1, . . . , tm]>,

ymes = [y1, . . . , ym]> voire les erreurs de mesures

σmes = [σ1, . . . , σm]> si on les connaıt. Ainsi les appels a leastsq

seront plutot de la forme :

[Gopt,popt] = leastsq(list(g,tmes,ymes),p0)

[Gopt,popt] = leastsq(list(g,tmes,ymes,sigmames),p0)

leastsq appele alors g avec les parametres supplementaires(tmes,ymes) ou (tmes,ymes,sigmames) en plus de p.

81/84

Page 82: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq V

Un exemple complet : (cf fichier exemple identification.sce)

function y = modele(t,p) // le modele (la fonction f precedente)

y = p(1)*t + p(2)

endfunction

function z = g(p,t,y) // la fonction g demandee par leastsq

// (ici version sans inclure les ecarts types des erreurs )

z = modele(t,p) - y

endfunction

// des mesures (fabriquees...)

m = 30; tmes = linspace(0,1,m)’;

ymes = -tmes + 1 + 0.02*rand(tmes,"nor")// les parametres exacts sont p(1) = -1 et p(2) = 1

// dessin des mesures

clf(); plot(tmes,ymes,"xb")

// il faut une valeur pour p0

p0 = [-0.5; 2]

// appel a leastsq

[Gopt,popt] = leastsq(list(g,tmes,ymes),p0)

// calcul de la courbe (voir graphiquement si le modele "colle" aux donnees)

t = linspace(min(tmes),max(tmes),100);

y = modele(t,popt);

plot(t,y,"r")

legend("donnees","modele opt");

82/84

Page 83: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq VI

Exercice 7 Un chercheur bavarois, Arnd Leike, a montre quelorsqu’on sert un verre de biere, juste apres la formation du nuagede mousse (cet instant etant repere par t = 0), la hauteur de lamousse diminue de maniere exponentielle au cours du temps, c’esta dire qu’en notant h(t) la hauteur a l’instant t on a le modelesuivant :

h(t) = Ce−tτ

ou C est la hauteur a l’instant t = 0 et τ la constante de tempsassociee a la decroissance exponentielle. On pourrait memereconnaıtre differents types de biere a cette constante. . . ArndLeike a recu un prix “Ig” Nobel en 2002 pour cette “decouverte”.

Identifier les parametres C et τ pour la Erdinger Weissbier (lesdonnees sont dans le fichier biere.sce).

83/84

Page 84: a la matlab pour le calcul scienti que - iecl.univ-lorraine.frBruno.Pincon/optimisation/la_bolle_bp.pdf · Logiciels \ a la matlab" pour le calcul scienti que Exemples avec Scilab

Identification des parametres d’un modele avec leastsq VII

Solution

// instants de mesure

tm = [0;15;30;45;60;75;90;105;120;150;180;210;240;300;360];

// hauteurs mesurees (pour la Erdinger Weissbier)

hm = [17;16.1;14.9;14.0;13.2;12.5;11.9;11.2;10.7;9.7;8.9;8.3;7.5;6.3;5.2];

// erreurs sur les hauteurs

dhm = [0.001;0.3;0.4;0.4;0.4;0.6;0.4;0.4;0.4;0.4;0.3;0.4;0.4;0.5;0.5];

function y = modele(t,p) // le modele (la fonction f precedente)

y = p(1)*exp(-t/p(2))

endfunction

function z = g(p,tm,hm,dhm)

z = (modele(tm,p) - hm)./dhm

endfunction

// dessin des mesures

clf(); plot(tm,hm,"xb")

// il faut une valeur pour p0

p0 = [1; 1]

// appel a leastsq

[Gopt,popt] = leastsq(list(g,tm,hm,dhm),p0)

printf("\n C = %g, tau = %g",popt(1),popt(2))

// calcul de la courbe (voir graphiquement si le modele "colle" aux donnees)

t = linspace(min(tm),max(tm),100);

y = modele(t,popt);

plot(t,y,"r")

legend("donnees","modele opt");

84/84