29
Année universitaire 2015/2016 Initiation à Scilab Franck Boyer, Florence Hubert et Flore Nabet Table des matières 1 Première utilisation de Scilab, l’aide en ligne 3 2 Les matrices dans Scilab 4 2.1 Création de matrices ......................................... 4 2.2 Opérations sur les matrices ..................................... 7 2.3 Opérations sur les coefficients d’une matrice ............................ 10 2.4 Le calcul vectoriel .......................................... 11 2.5 Matrices vues comme des vecteurs ................................. 11 3 Programmation en Scilab 12 3.1 Les fonctions élémentaires ...................................... 12 3.2 Créer une fonction ou un script ................................... 12 3.2.1 Les fonctions ......................................... 12 3.2.2 Bibliothèque de fonctions .................................. 13 3.2.3 Remarque importante - "fonction de fonction" ...................... 13 3.2.4 Les scripts ........................................... 14 3.2.5 Exécuter un script par Scilab ................................ 15 3.2.6 Syntaxe des opérations logiques ............................... 16 3.2.7 Syntaxe des boucles ..................................... 16 3.2.8 Structure de choix ...................................... 17 3.3 Conseils de programmation ..................................... 17 3.4 Enregistrer ou lire des données créées par Scilab ......................... 18 3.5 Ecrire dans un fichier texte ..................................... 18 3.6 Dialoguer avec Scilab ......................................... 19 4 Graphisme dans Scilab 20 4.1 Graphe de points en 2D ....................................... 20 4.2 Graphe d’une fonction ........................................ 21 4.3 Graphe d’une courbe dans l’espace ................................. 21 4.4 Graphe d’une surface ......................................... 22 4.5 Graphe d’une fonction de deux variables réelles ou d’une surface paramétrée .......... 22 4.6 Gestion des figures .......................................... 23 4.6.1 Ouvrir une figure ...................................... 23 4.6.2 Ouvrir plusieurs figures ................................... 23 4.6.3 La commande clf ...................................... 23 4.6.4 Créer plusieurs graphes sur une même figure ....................... 23 4.6.5 Sauvegarde et export d’une figure ............................. 23 4.7 Animation de graphisme ...................................... 23 4.8 Un exemple plus compliqué ..................................... 24

Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

  • Upload
    habao

  • View
    220

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

Année universitaire 2015/2016

Initiation à Scilab

Franck Boyer, Florence Hubert et Flore Nabet

Table des matières1 Première utilisation de Scilab, l’aide en ligne 3

2 Les matrices dans Scilab 42.1 Création de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Opérations sur les matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 Opérations sur les coefficients d’une matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4 Le calcul vectoriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.5 Matrices vues comme des vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Programmation en Scilab 123.1 Les fonctions élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Créer une fonction ou un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2.1 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2.2 Bibliothèque de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.3 Remarque importante - "fonction de fonction" . . . . . . . . . . . . . . . . . . . . . . 133.2.4 Les scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2.5 Exécuter un script par Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.6 Syntaxe des opérations logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.7 Syntaxe des boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.8 Structure de choix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.3 Conseils de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.4 Enregistrer ou lire des données créées par Scilab . . . . . . . . . . . . . . . . . . . . . . . . . 183.5 Ecrire dans un fichier texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.6 Dialoguer avec Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4 Graphisme dans Scilab 204.1 Graphe de points en 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2 Graphe d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3 Graphe d’une courbe dans l’espace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.4 Graphe d’une surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.5 Graphe d’une fonction de deux variables réelles ou d’une surface paramétrée . . . . . . . . . . 224.6 Gestion des figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.6.1 Ouvrir une figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.6.2 Ouvrir plusieurs figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.6.3 La commande clf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.6.4 Créer plusieurs graphes sur une même figure . . . . . . . . . . . . . . . . . . . . . . . 234.6.5 Sauvegarde et export d’une figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.7 Animation de graphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.8 Un exemple plus compliqué . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Page 2: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

TABLE DES MATIÈRES 2

5 Equations différentielles 275.1 Les commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275.2 L’exemple proie-prédateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

6 Autres commandes utiles 286.1 Interpolation numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.2 Intégration numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.3 Equations aux dérivées partielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.4 Algorithmes de minimisation et de recherche de racines . . . . . . . . . . . . . . . . . . . . . 286.5 Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296.6 Zéros de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296.7 Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Page 3: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

IntroductionScilab est un programme de calcul numérique. La grande majorité des objets en jeu dans Scilab sont des

matrices, y compris les scalaires (matrices 1× 1).Avec quelques petits efforts, vous pourrez (en utilisant Scilab) mettre en oeuvre les différentes méthodes

que vous connaissez (ou que vous ne tarderez pas à connaître) pour :I Résoudre des systèmes linéaires du type Ax = b ou calculer des valeurs propres et vecteurs propres de

matrices.I Calculer des valeurs approchées d’intégrales.I Résoudre des équations non-linéaires du type f(x) = 0.I Calculer des solutions approchées d’équations différentielles ordinaires.I Calculer des solutions approchées d’équations aux dérivées partielles.I Tracer les solutions des problèmes ci-dessus de la manière la plus propre possible pour que les résultats

soient exploitables. On pourra même faire afficher une animation montrant l’évolution de la solutionen fonction du temps.

I Et bien d’autres choses ....

Nous proposons ici des rappels non exhaustifs des commandes utiles en calcul scientifique. Les exemplesdonnés ont été effectués avec Scilab 4.1.1 mais doivent fonctionner à l’identique dans les versions plus récentes.

1 Première utilisation de Scilab, l’aide en ligneUne fois Scilab lancé, les instructions que l’utilisateur va donner à Scilab doivent suivre le sigle –>.Les instructions ainsi données au logiciel sont exécutées (ou pas s’il y a une erreur de syntaxe !) au moment

ou vous validez la ligne de commandes avec la touche ENTREE.Par exemple :

-->1+1ans =

2.

-->%pi%pi =

3.1415927

-->%eps%eps =

2.220E-16

-->%i^2ans =

- 1.

-->t=1+1t =

2.

-->t=1+1;

-->tt =

2.

Page 4: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 4

-->u=sin(t)u =

0.9092974

-->v=exp(u)v =

2.4825777

-->format(’e’,20);

-->vv =

2.4825777280150E+00

-->format(’v’,6);

-->vv =

2.48258

-->exit

On remarque que :I Par défaut, tout calcul est affecté dans la variable ans (pour « answer » en anglais).I Les variables %pi, %eps, %i sont déjà affectées et ne peuvent être réaffectées.I L’affectation se fait grâce au sigle =I Le résultat d’une affectation est imprimé sauf si cette affectation est suivie du sigle ;I La commande format permet de modifier l’affichage du format des différentes variables.I La commande clear efface le contenu de toutes les variables utilisées.Attention : il très fortement déconseillé d’utiliser des noms de variables déja utilisées par Scilab.Pour sortir de Scilab, il suffit d’utiliser les commandes quit ou exit. Lorque l’on veut interrompre un

programme, la commande CTRL-c permet de récupérer la main.Une façon efficace de découvrir Scilab est d’utiliser son aide en ligne.I help : "help" tout seul donne la liste des aides générales possibles.I help nom de commande : exemple, help plot indique la syntaxe des graphes en 2D.I apropos nom de commande : exemple, apropos plot donne une liste de toutes les commandes qui

ont un rapport avec plot.Attention, il n’est pas possible de sauvegarder la fenêtre de commande de Scilab. Pour sauvegarder un

travail, il est conseillé de travailler dans une fenêtre d’édition. On peut utiliser l’éditeur de Scilab et ouvrirou créer un fichier en cliquant sur File puis Open ou New. Tout autre éditeur de texte (Emacs, Nedit,...)convient également. Pour exécuter les commandes d’un fichier qui s’appelle toto.sce, il suffit alors de taperexec toto.sce ou exec ’toto.sce’ dans la fenêtre de commandes de Scilab.

2 Les matrices dans Scilab

2.1 Création de matricesI Construction à la main A = [a11 . . . a1m; . . . ; an1 . . . anm]

Exemple :

-->A=[1 2 3 4;2 3 4 1;3 4 1 2;4 1 2 3]A =

1. 2. 3. 4.

Page 5: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 5

2. 3. 4. 1.3. 4. 1. 2.4. 1. 2. 3.

I Construction élément par élémentExemple :

-->for i=1:3,for j=1:4, F(i,j)=i+(j-1)*3;end;end;

-->FF =

1. 4. 7. 10.2. 5. 8. 11.3. 6. 9. 12.

I Quelques matrices prédéfinies

-->B=zeros(2,3)B =

0. 0. 0.0. 0. 0.

-->C=ones(3,2)C =

1. 1.1. 1.1. 1.

-->Id=eye(2,3)Id =

1. 0. 0.0. 1. 0.

-->D=rand(4,4)D =

0.8784126 0.5896177 0.3493615 0.34353370.1138360 0.6853980 0.3873779 0.37601190.1998338 0.8906225 0.9222899 0.73409410.5618661 0.5042213 0.9488184 0.2615761

-->E=rand(3,4,’normal’)E =

- 1.7350313 - 2.0735088 - 0.4534087 - 1.23170660.5546874 2.5891773 - 1.6565358 - 0.1325739

- 0.2143931 0.0424792 1.7224151 - 1.7242355zeros(n,m) construit une matrice nulle de taille n×m,ones(n,m) construit une matrice dont tous les éléments sont égaux à un et de taille n×m,eye(n,m) construit une matrice de taille n×m dont tous les éléments diagonaux sont égaux à un,rand(n,m) construit une matrice de taille n ×m dont tous les éléments sont choisis aléatoirement

avec la loi uniforme sur [0, 1],rand(n,m,’normal’) construit une matrice de taille n×m dont tous les éléments sont choisis aléa-

toirement avec la loi normale centrée réduite.I Construction de matrices diagonales, tridiagonales, ....

On utilise la commande diag(v) ou diag(v,i). Si v est un vecteur de taille n, diag(v) contruit unematrice diagonale de taille n× n dont les coefficients diagonaux sont les coefficients du vecteur v. La

Page 6: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 6

commande diag(v,i) contruit une matrice diagonale de taille (n+ |i|)× (n+ |i|) dont les coefficientsde la diagonale i (Akl avec k − l = i) sont les coefficients du vecteur v.Exemple :

--> v=[1 3 1 3]’;-->diag(v)ans =

1. 0. 0. 0.0. 3. 0. 0.0. 0. 1. 0.0. 0. 0. 3.

-->diag(v(1:3),1)ans =

0. 1. 0. 0.0. 0. 3. 0.0. 0. 0. 1.0. 0. 0. 0.

-->diag(v(1:3),-1)ans =

0. 0. 0. 0.1. 0. 0. 0.0. 3. 0. 0.0. 0. 1. 0.

-->n=4;AA=2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1)AA =

2. - 1. 0. 0.- 1. 2. - 1. 0.0. - 1. 2. - 1.0. 0. - 1. 2.

I Vecteurs issus de discrétisation xmin:dx:xmax désigne l’ensemble des points de la forme xmin + i dx, pour i ∈ N, qui sont compris

entre xmin et xmax, l’extrémité xmin étant toujours incluse. Par exemple, 1:3:7 ou 1:3:9 désignentle vecteur [1,4,7]

xmin : xmax idem avec par défaut dx=1. La commande linspace permet de définir des progressions arithmétiques, autrement dit des dé-

coupages d’un intervalle de R en un certain nombre d’intervalles de longueurs égales. Exemple :

-->linspace(0,1,10)ans =

column 1 to 7

0. 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667

column 8 to 10

0.7777778 0.8888889 1.Remarquez que le résultat contient 10 points et donc 9 intervalles.

Page 7: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 7

2.2 Opérations sur les matricesI La commande size permet d’obtenir la taille de la matrice, la commande length permet d’obtenir

la taille d’un vecteur :

-->size(A)ans =

4. 4.

-->size(F)ans =

3. 4.

-->size(F,1)ans =

3.

-->size(F,2)ans =

4.

-->length(A(1,:))ans =

4.

I La matrice transposée

-->F’ans =

1. 2. 3.4. 5. 6.7. 8. 9.10. 11. 12.

I Le vecteur qui contient les éléments diagonaux de la matrice

-->v=diag(A)v =

1.3.1.3.

I la partie diagonale, les parties triangulaires inférieure et supérieure, les parties triangulaires inférieureet supérieure strictes de la matrice,

-->diag(diag(A))ans =

1. 0. 0. 0.0. 3. 0. 0.0. 0. 1. 0.0. 0. 0. 3.

Page 8: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 8

-->tril(A)ans =

1. 0. 0. 0.2. 3. 0. 0.3. 4. 1. 0.4. 1. 2. 3.

-->triu(A)ans =

1. 2. 3. 4.0. 3. 4. 1.0. 0. 1. 2.0. 0. 0. 3.

-->tril(A)-diag(diag(A))ans =

0. 0. 0. 0.2. 0. 0. 0.3. 4. 0. 0.4. 1. 2. 0.

-->triu(A)-diag(diag(A))ans =

0. 2. 3. 4.0. 0. 4. 1.0. 0. 0. 2.0. 0. 0. 0.

-->triu(A,1)ans =

0. 2. 3. 4.0. 0. 4. 1.0. 0. 0. 2.0. 0. 0. 0.

-->triu(A,-1)ans =

1. 2. 3. 4.2. 3. 4. 1.0. 4. 1. 2.0. 0. 2. 3.

I la trace, le rang, le déterminant

-->trace(A)ans =

8.

Page 9: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 9

-->rank(A)ans =

4.

-->det(A)ans =

160.I Addition ou soustraction

-->F+Eans =

0.3714058 4.3247476 7.4620729 10.8440490.3814665 4.7792285 7.1368225 9.33134112.5659409 5.7027756 9.4870404 10.389694

I Multiplication, la puissance nieme

-->F*Aans =

70. 52. 46. 52.80. 62. 56. 62.90. 72. 66. 72.

-->A^3ans =

240. 244. 256. 260.244. 256. 260. 240.256. 260. 240. 244.260. 240. 244. 256.

I L’inverse

-->inv(A)ans =

- 0.225 0.025 0.025 0.2750.025 0.025 0.275 - 0.2250.025 0.275 - 0.225 0.0250.275 - 0.225 0.025 0.025

On pourra également utiliser les commandes suivantes (voir l’aide de Scilab pour plus de détails) :I Réduction d’une matrice spec Valeurs propres et vecteurs propres. expm Exponentielle de matrice. svd Décomposition en valeurs singulières. kernel Noyau. range Image. sqrtm Racine carrée d’une matrice.

I Norme et conditionnement d’une matrice cond, condest Conditionnement d’une matrice. norm Normes de matrice.

I Décompositions classiques pour les matrices chol Factorisation de Choleski. hess Forme de Hessenberg. lu Factorisation LU. Attention, la matrice L donnée par scilab n’est pas toujours triangulaire

inférieure, elle ne l’est qu’à une permutation près. qr Décomposition QR. rref Forme échelonnée.

Page 10: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 10

schur Décomposition de Schur.

2.3 Opérations sur les coefficients d’une matriceUne matrice peut être considérée élément par élément, c’est alors un tableau. Les opérations élémentaires

élément par élément sur les tableaux sont alors les suivantes :I Addition ou soustraction : pas de changements.I Multiplication, la puissance nieme

-->D.*Aans =

0.8784126 1.1792355 1.0480846 1.37413490.2276719 2.0561939 1.5495115 0.37601190.5995013 3.5624899 0.9222899 1.46818812.2474643 0.5042213 1.8976369 0.7847284

-->A.^3ans =

1. 8. 27. 64.8. 27. 64. 1.27. 64. 1. 8.64. 1. 8. 27.

Remarque 2.1 Si les tailles des tableaux ou matrices ne sont pas adaptées, Scilab donne des messagesd’erreurs de la forme :

-->F.*A!--error 9999

inconsistent element-wise operation

On peut également utiliser les fonctions suivantes :I max Coefficient maximal.I min Coefficient minimal. Noter sur l’exemple ci-dessous que l’on peut également récuperer la position

de ces valeurs minimale ou maximale :

->A=[1 2 3;4 5 6];[mi,kmin]=min(A)kmin =

1. 1.mi =

1.

-->[ma,kmax]=max(A)kmax =

2. 3.ma =

6.I mean Moyenne des coefficients.I median Valeur médiane des coefficients.I gsort Tri par ordre croissant des coefficients.I prod Produit des coefficients.I sum Somme des coefficients.

Page 11: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

2 LES MATRICES DANS SCILAB 11

2.4 Le calcul vectorielPour accelérer vos programmes, vous pouvez/devez éviter l’utilisation de boucles et travailler directement

sur les lignes ou les colonnes des matrices. Pour cela, on utilise les commandes suivantes :I A(i,:) désigne la iieme ligne de la matrice AI A(2:3,:) désigne la sous matrice formée des 2ieme et 3ieme lignes de la matrice AI A(:,j) désigne la jieme colonne de la matrice AI A(:,1:2:m) désigne la sous matrice formée des colonnes impaires de la matrice AI A(2,$) désigne l’élément de la matrice A situé sur la deuxième ligne, dernière colonne.I A($,2) désigne l’élément de la matrice A situé sur la dernière ligne, deuxième colonne.I A($,:)=[] supprime la dernière ligne de la matrice

2.5 Matrices vues comme des vecteursPar défaut, les vecteurs dans Scilab sont écrits en colonne :

-->for i=1:3, V(i)=i;end;

-->VV =

1.2.3.

-->size(V)ans =

3. 1.

Une matrice n×m est stockée colonnes après colonnes dans Scilab comme un vecteur de taille nm :

-->for i=1:3,for j=1:4, F(i,j)=i+(j-1)*3;end;end;

-->FF =

1. 4. 7. 10.2. 5. 8. 11.3. 6. 9. 12.

-->F(4)ans =

4.

-->F(8)ans =

8.

De même, on peut affecter directement les éléments d’une matrice, après avoir défini sa taille :

-->F=zeros(3,4);

-->for i=1:12,F(i)=i;end

-->FF =

Page 12: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 12

1. 4. 7. 10.2. 5. 8. 11.3. 6. 9. 12.

3 Programmation en Scilab

3.1 Les fonctions élémentairesUn certain nombre de fonctions élémentaires sont prédéfinies par exp, sin, cos, abs,... La plupart

de ces fonctions agissent également sur des matrices ou vecteurs :

-->x=[0:0.5:%pi]x =

0. 0.5 1. 1.5 2. 2.5 3.

-->sin(x)ans =

0. 0.4794255 0.8414710 0.9974950 0.9092974 0.5984721 0.1411200

3.2 Créer une fonction ou un scriptOn va créer un fichier « texte » que l’on appelera nomdefonction.sci ou un script que l’on appelera

nomdescript.sce. Vous pouvez utiliser l’éditeur de Scilab (cliquer en haut à droite sur Editor) mais aussi,n’importe quel éditeur de texte. emacs, nedit, Text editor, ...

On va décrire la syntaxe de ces fichiers à l’aide de deux exemples.I Pour charger en mémoire une fonction définie dans nomdefonction.sci on tape la commande

--> exec ’nomdefonction.sci’;On peut alors disposer de la fonction définie dans le fichier comme toute autre fonction de Scilab.

I Pour exécuter les commandes contenues dans un script nomdescript.sce on tape la commande--> exec ’nomdescript.sce’;

3.2.1 Les fonctions

On va créer une fonction f : (x, l)→ 1x2+l . Le premier exemple est édité sous le nom f1.sci.

function [y]=f1(x,l)y=1/(l+x^2);// on peut agrémenter tous ces fichiers par des// commentaires qui seront précédés du sigle //

endfunction

Une autre possibilité permet de travailler avec des variables x qui seront des tableaux (fichier f2.sci) :

function [y]=f2(x,l)y=ones(x)./(l+x.^2);// Les opérateurs agissant sur les éléments des tableaux// sont les opérateurs classiques précédés d’un point// on utilise la commande ones(x) pour créer un tableau// qui ne contient que des 1 de la meme taille que x

endfunction

Avec les exemples ci-dessus essayer les instructions suivantes

Page 13: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 13

--> f1(1,1)--> f2(1,1)--> f1(1,[1,2])--> f1(1,[1,2]’)--> f2(1,[1,2])--> f2(1,[1,2]’)--> f1([1,2],[2,1])--> f2([1,2],[2,1])--> f2([1,2,3],[1,2])

Remarque 3.1 Il est également possible de définir des fonctions simples grâce à la commande commandedeff comme le montre l’exemple qui suit.

deff(’[y]=f(x)’,’y=sin(2*x)+x^2’);

3.2.2 Bibliothèque de fonctions

On peut mettre plusieurs fonctions dans un même fichier nomdebibliotheque.sci et les charger toutessimultanément grâce à la commande exec. Le nom du fichier peut être quelconque et sans lien avec les nomsdes fonctions qu’il définit.

Exemple : contenu d’un fichier mesfonctions.sci

function [y]=f1(x,l)y=1/(l+x^2);

endfunction

function [z]=f2(x,y)z=ones(x)./(y+x.^2);

endfunction

Remarque 3.2 Notez bien que les noms des variables utilisées en entrée et en sortie d’une fonction n’ontaucune importance sur l’action d’une fonction. Ces variables sont muettes, et elles sont seulement définiesà l’intérieur de la fonction ; elles sont inconnues du programme qui les appelle.

ATTENTION : Quand vous modifiez les définitions des fonctions dans une bibliothèque de fonctions,il ne faut pas oublier de recharger la bibliothèque avec la commande exec sinon les modifications ne serontpas prises en compte.

Scilab vous prévient d’ailleurs qu’une fonction a changé par un message du type

Warning :redefining function: f

3.2.3 Remarque importante - "fonction de fonction"

Dans Scilab, les fonctions sont des variables comme les autres. En particulier, on peut passer une fonctionen paramètre d’une autre fonction.

Par exemple, la fonction suivante calcule une approximation de l’intégrale d’une fonction f sur un inter-valle [a, b] par la méthode des rectangles à gauche :

function [I]=integrale(f,a,b,N)x=linspace(a,b,N+1);h=x(2:N+1)-x(1:N);I=sum(h.*f(x(1:N)));

endfunction

Si maintenant on définit les différentes fonctions suivantes

Page 14: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 14

function [y]=f1(x)y=cos(x);

endfunction

function [y]=f2(x)y=sin(x);

endfunction

On peut utiliser la fonction integrale à ces deux fonctions comme suit

-->integrale(f1,0,1,100)ans =

0.8437625

-->integrale(f2,0,1,100)ans =

0.4554865

3.2.4 Les scripts

Quand on définit une fonction et qu’on la charge dans Scilab, aucun calcul n’est effectué. On ne fait quedonner à Scilab des définitions de fonctions qu’il utilisera par la suite. Les calculs ne sont effectués que lorsde l’appel des fonctions.

A contrario un script (ou programme) est une suite d’instructions Scilab qui vont être exécutées immé-diatement par le logiciel lors du chargement du script en question.

En général, un script utilise un certain nombre de fonctions définies par l’utilisateur et rassemblées dansune bibliothèque de fonctions (i.e. un fichier .sci). C’est pourquoi l’une des toutes premières ligne d’unscript correspond très souvent au chargement d’une telle bibliothèque.

Exemple : On se donne une discrétisation de l’intervalle [0, 1] de pas h, et on crée un script qui calculeles vecteurs X et F de composantes X(i) = (i− 1)× h et F (i) = f((i− 1)× h, l), où f(x, l) = 1

l+x2 .Le premier programme est sauvegardé sous le nom essai1.sce et fait appel à la fonction f1 qui est

définie dans la librairie mesfonctions.sci introduite au paragraphe 3.2.2.

//essai1.sceexec mesfonctions.sci; // On charge les fonctions dont on a besoin

l=1;h=0.1;N=floor(1/h); // partie entièrefor i=1:N+1, X(i)=(i-1)*h;endfor i=1:N+1, F(i)=f1((i-1)*h,l);enddisp(h)disp(X,’valeur de X =’)F

Le deuxième programme est sauvegardé sous le nom essai2.sce, fait appel à la fonction f2 qui se trouvedans la même librairie et utilise le calcul vectoriel, la variable h est laissée comme paramètre à choisirultérieurement. Si on ne donne pas de valeur à cette variable avant l’exécution du script, Scilab arrêteral’exécution et retournera un message d’erreur.

//essai2.sceexec mesfonctions.sci;

l=1;X=[0:h:1];

Page 15: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 15

F=f2(X,l);XF

Remarque 3.3I Les commentaires situés juste après la première ligne d’une fonction lambda.sci sont accessibles dans

Scilab par la commande help lambda.I On peut déclarer une fonction à l’intérieur d’un script à l’aide de la syntaxe function. On peut

également emboîter les définitions de fonctions.

3.2.5 Exécuter un script par Scilab

Il faut utiliser la commande exec suivi du nom du script et d’un point-virgule (si on ne veut pas que lescommandes s’affichent à l’écran).

-->exec test2.sce;

0.1

valeur de X=

0.0.10.20.30.40.50.60.70.80.91.

ans =

1.0.99009900.96153850.91743120.86206900.80.73529410.67114090.60975610.55248620.5

Remarquez les différences entre les trois façons proposées pour afficher des variables en utilisant (ou pas) lacommande disp.

En utilisant l’autre script essai2.sce, comme h est laissé en paramètre dans le programme, on lance lecalcul de la façon suivante

-->h=0.1;

-->exec test3.sce;

0.1

valeur de X=

Page 16: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 16

column 1 to 9

0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

column 10 to 11

0.9 1.ans =

column 1 to 6

1. 0.9900990 0.9615385 0.9174312 0.8620690 0.8

column 7 to 11

0.7352941 0.6711409 0.6097561 0.5524862 0.5

Notons que dans ce programme, X est un vecteur ligne et donc F aussi. Malgré cette différence, les résultatssont bien sûr les mêmes que précédemment.

3.2.6 Syntaxe des opérations logiques

I == égalitéI >= supérieur ou égalI ˜= différentI & « et »logiqueI | « ou »logiqueI ˜la négation

Les valeurs vrai (en anglais : TRUE) et faux (en anglais : FALSE) correspondent aux variables prédéfinies%T et %F.

3.2.7 Syntaxe des boucles

I for i=imin : imax< commandes > ;

endoufor i=imin : h : imax< commandes > ;

endExemples (remarquez la virgule après le imax dans le cas où on met tout sur une seule ligne) :

-->for i=1:2:10,X(i)=i;end

-->XX =

1.0.3.0.5.0.7.0.9.

Page 17: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 17

-->for i=10:-1:1,Y(i)=10-i;end

-->YY =

9.8.7.6.5.4.3.2.1.0.

I while < test >,< commandes >

endI if< test >,

< commandes >elseif < test >,< commandes >

else < commandes >,end

3.2.8 Structure de choix

select < nomdevariable >case < valeur1 > then< commandes à exécuter si la variable vaut exactement valeur1 >

case < valeur2 > then< commandes à exécuter si la variable vaut exactement valeur2 >

case < valeur3 > then< commandes à exécuter si la variable vaut exactement valeur3 >

...else< commandes à exécuter dans tous les autres case >

end

3.3 Conseils de programmationPour gagner du temps en Scilab, il faut éviter le plus possible les grandes boucles dans les programmes.Illustrons ce fait sur un exemple :

// test.sceN=1000;a=1000*ones(N,N);z=zeros(N,N);tic // initialise le tempsfor i=1:N, for j=1:N, z(i,j)=a(i,j); end; end;toc // affiche le temps écoulé depuis le dernier tic

ticz=a;toc

qui donne à l’exécution

Page 18: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 18

-->exec test.sce;ans =

7.599ans =

0.014

Par ailleurs, il est toujours bon d’initialiser les tableaux à 0 (ou toute autre valeur) en indiquant à Scilabla bonne taille du tableau.

Par exemple, le script suivant (semblable au précédent mais sans l’initialisation de la variable z)

// test2.sceclear // On efface toutes les variables de la mémoireN=1000;a=1000*ones(N,N);ticfor i=1:N, for j=1:N, z(i,j)=a(i,j); end; end;toc

donne le résultat suivant

-->exec test2.sce;ans =

18.308

à comparer aux résultats obtenus avec le script précédent.

3.4 Enregistrer ou lire des données créées par ScilabI save(’nomdefichier’) :

sauve toutes les variables existantes dans le fichier nomdefichier.I save(’nomdefichier’,F,X)

sauve les variables F et X dans le fichier nomdefichier.Le format du fichier obtenu est dit binaire, c’est-à-dire qu’il n’est pas lisible dans un éditeur de texte.Il ne peut être utilisé qu’avec la commande Scilab load (voir plus loin).

I nomdufichier=’ah=’+string(h);save(nomdufichier,‘F’,‘X’)sauve les variables F et X dans le fichier nomdufichier, la commande string permet de transformerun nombre en une chaîne de caractères.

I load nomdufichiercharge les données qui sont dans le fichier (Scilab affecte à nouveau automatiquement les variables Fet X).

I La commande savematfile permet de sauver les variables dans un format utilisable dans le logicielMATLAB.

I clearefface toutes les variables et données existantes.

3.5 Ecrire dans un fichier texteVoici un exemple de programme pour écrire dans un fichier sortie.txt.

// Ecriture dans un fichiern=2;A=rand(n,n);fd=mopen(’sortie.txt’,’wt’)mfprintf(fd,’Mon premier fichier de sauvegarde \n’)mfprintf(fd,’n= %i\n’,n)

Page 19: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

3 PROGRAMMATION EN SCILAB 19

mfprintf(fd,’Premiere sauvegarde de la matrice A a la main \n’)mfprintf(fd,’A=[’)for i=1:n

for j=1:nmfprintf(fd,’%f ’,A(i,j))

endif i<n

mfprintf(fd, ’;’)end

endmfprintf(fd,’]n’)mfprintf(fd,’Deuxieme sauvegarde de la matrice A en une commande \n’)mfprintf(fd,’ %f %f\n’,A);mfprintf(fd,’Autre astuces : \n’)mfprintf(fd,’n=%i A(1,1)=%f\n’,n,A(1,1))mfprintf(fd, ’pour écrire des fichier en latex, attention mettre un double \\ \n’)mclose(fd)

Le fichier obtenu est le suivant :

Mon premier fichier de sauvegarden= 2Premiere sauvegarde de la matrice A a la mainA=[0.269312 0.405195 ;0.632574 0.918471 ]Deuxieme sauvegarde de la matrice A en une commande0.269312 0.4051950.632574 0.918471Autre astuces :n=2 A(1,1)=0.269312pour écrire des fichier en latex, attention mettre un double

On a utilisé les commandes suivantes :I mopen : ouvre un fichier en scilab.I mclose : ferme un fichier en scilab.I mfprintf : converti, formate et écrit dans un fichier.

Noter que la commande mprintf est analogue à la commande mfprintf, à la différence près que les infor-mations sont écrites dans la console.

3.6 Dialoguer avec ScilabDans un programme qui nécessite le choix de paramètres, de fonctions, on peut créer des boites de

dialogues pour faciliter ces choix. Voici un exemple simple.

//Exemple de dialogue pour la saisie de parametresdisp(’On va tracer une fonction’)intervalle=evstr(x_dialog(’Choisisser un intervalle’,[’0.0 1.0 ’]))dx=evstr(x_dialog(’Entrer le pas de la discrétisation’,’0.1’))x=intervalle(1):dx:intervalle(2);f=x_choose([’sin’,’cos’],’Choisisser la fonction a tracer’,’Terminer’);select fcase 0

disp(’pas de fonction a tracer’)case 1

plot(x,sin(x))case 2

plot(x,cos(x))enddisp(’On peut egalement rentrer des matrices’)

Page 20: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 20

A=evstr(x_dialog(’entrer une matrice 3x3’,[’[0 0 0’;’0 0 0’;’0 0 0]’]))disp(’Un autre exemple’)param=[’a’;’b’;’c’;’d’]par=x_mdialog(’Choisisser les parametres du modele proie predateur’,param,[’1.0’;’1.0’;’1.0’;’1.0’])a=evstr(par(1))b=evstr(par(2))c=evstr(par(3))d=evstr(par(4))function y=proiepredateur(t,x)

y(1)=x(1)*(a-b*x(2))y(2)=x(2)*(-c+d*x(1))

endfunctionxx=0:0.2:2figure(1)clf(1)fchamp(proiepredateur,0,xx,xx)

On a utilisé les commandes suivantes :I disp : permet d’afficher dans la console des chaines de caractères, la valeur de variables,...I evstr : évalue les valeurs d’une matrice de chaines de caractères.I x_dialog : boîte de dialogue permetant de choisir un paramêtreI x_mdialog : boîte de dialogue permettant de choisir une série de paramêtres.I x_choose : boîte de dialogue permettant de faire des choix.

4 Graphisme dans Scilab

4.1 Graphe de points en 2DSoient Y et Z deux vecteurs de taille n.I Définir une courbe, première possibilité :

plot(Z) relie les points de coordonnées (i, Z(i)).I Définir une courbe, deuxième possibilité :

plot(Y,Z) relie les points de coordonnées (Y (i), Z(i)).I Définir une courbe, troisième possibilité :

plot2d(Y,Z) relie les points de coordonnées (Y (i), Z(i)).I Définir deux ou plusieurs courbes, première possibilité :

plot(Y,Z,Y,cos(Z)), graphes des points de coordonnées (Y (i), Z(i)) et de coordonnées (Y (i), cosZ(i)).I Définir deux ou plusieurs courbes, deuxième possibilité :

plot(Y,Z,’r’);plot(Y,cos(Z),’b’), graphes des points de coordonnées (Y (i), Z(i)) (en rouge) etde coordonnées (Y (i), cosZ(i)) (en bleu). Les deux graphes sont tracés sur la même figure.

I Définir deux ou plusieurs courbes, troisième possibilité :plot2d(Y,Z,5);plot2d(Y,cos(Z),2), graphes des points de coordonnées (Y (i), Z(i)) (en rouge) etde coordonnées (Y (i), cosZ(i)) (en bleu). Les deux graphes sont tracés sur la même figure.

I Définir le style des courbes :plot(Y,Z,’-r’,Y,cos(Z),’:’) on peut pour chacune des courbes imposer un style de ligne, un stylede point, une couleur. Quelques styles de lignes :

- ligne pleine,: pointillés, ... Quelques couleurs :

y jaune, r rouge, b bleu, g vert, w blanc, k noir, ... Quelques styles de points :

+,o,., square, diamond, none, ...I Contrôler les axes des courbes : la taille des axes est gérée automatiquement par Scilab. Pour imposer

la taille des axes, il faut utiliser :a=gca(); a.data_bounds=[xmin,xmax,ymin,ymax].Pour obtenir la même échelle sur les deux axes, taper square(xmin,ymin,xmax,ymax) avant le plot.

I Utiliser une échelle logarithmique. a=gca(); a.log_flags=’lnn’ ou a=gca(); a.log_flags=’nln’ou a=gca(); a.log_flags=’lln’. Dans le premier cas, on impose une échelle logarithmique surl’abscisse, dans le deuxième cas sur l’ordonnée, dans le dernier cas sur les deux.

Page 21: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 21

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1Exemple de courbes

Y

Z

sincos

Figure 1 – La figure obtenue avec l’exemple précédent

I Rajouter des annotations sur le graphe : title ajoute un titre au graphe, xlabel ajoute une légende à l’axe horizontal du graphe, ylabel ajoute une légende à l’axe vertical du graphe, legend ajoute des légendes aux différentes courbes.

Pour plus de précisions utiliser la commande help plot.Exemple (le résultat est donné dans la figure 1) :

--> Y=[0:0.05:1];Z1=sin(2*%pi*Y);Z2=cos(2*%pi*Y);--> plot(Y,Z1,’:b’,Y,Z2,’+k’);--> title(’Exemple de courbes’);--> xlabel(’Y’);ylabel(’Z’);--> legend(’sin’,’cos’);

De nombreuses autres commandes de graphisme existent (champ, contour2d, plot2d, ...)Regardons de plus près sur un exemple la commande plot2d.

--> x=1:0.1:2;y=exp(x);z=exp(1.2*x);--> plot2d(x,y,-1);plot2d(x,z,1);--> legend(’exp(x)’,’exp(1.2 x)’);--> plot2d(x,y,-1,logflag=’nl’);plot2d(x,z,1,logflag=’nl’);--> title(’Echelle logarithmique en ordonnees’)--> legend(’exp(x)’,’exp(1.2 x)’);

4.2 Graphe d’une fonctionLe graphe d’une fonction sur un intervalle I se ramène au graphe d’un vecteur, en choisissant une

discrétisation de cet intervalle I.Exemple :

-->x=linspace(0,%pi,100);-->plot(x,sin(x));-->plot(x,f2(x,1));

Page 22: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 22

Figure 2 – Courbes obtenues à l’aide de la commande plot2d.

4.3 Graphe d’une courbe dans l’espaceSoient X, Y et Z trois vecteurs de taille n. Il s’agit donc d’une courbe paramétrique.param3d(X,Y,Z) donne le graphe des points (X(i), Y (i), Z(i))

4.4 Graphe d’une surfaceSoient X et Y deux vecteurs de tailles n et m, et Z une matrice de taille n ×m (resp. soit X, Y et Z

trois matrices de taille n×m ).La génération des surfaces se fait à l’aide des deux commandes surf et mesh.I surf(Z) trace une surface « pleine » passant par les points de coordonnées (i, j, Z(i, j)).I surf(X,Y,Z) trace une surface « pleine » passant , si X et Y sont des vecteurs, par les points

(X(i), Y (j), Z(i, j)) ou si X et Y sont des matrices par les points (X(i, j), Y (i, j), Z(i, j)).I mesh(Z) trace un maillage du style « fil de fer » passant par les points (i, j, Z(i, j)).I mesh(X,Y,Z) trace un maillage (« fil de fer ») passant , si X et Y sont des vecteurs, par les points

(X(i), Y (j), Z(i, j)) ou si X et Y sont des matrices par les points (X(i, j), Y (i, j), Z(i, j)).I contour(Z) trace les courbes de niveaux de la surface passant par les points (i, j, Z(i, j)).I Beaucoup d’autres possibilités existent ... voir l’aide en ligne.

Remarque 4.1 La gestion des axes et des annotations graphiques est identique à celle du graphisme 2-D.

Exemple : Voici le tracé d’une surface z = f(x, y) sur [0, 1]× [0, 1]

function [z]=ma_fonction(x,y)z=cos(x+y^2);

endfunction

x=linspace(0,1,100);y=x;

surf(x,y,feval(x,y,ma_fonction));f=gcf();f.color_map=hotcolormap(32);

Notez l’utilisation de la routine feval qui permet d’évaluer une fonction sur toute une famille de points defaçon beaucoup plus concise et efficace qu’en utilisant des boucles.

La commande f.color_map=hotcolormap(32) permet de changer la palette de couleurs. La variable fdéfinie par la commande gcf() désigne un ’pointeur’ vers la dernière figure ouverte.

4.5 Graphe d’une fonction de deux variables réelles ou d’une surface paramétréeDe même que pour le graphisme 2D, on se ramène au graphe d’une courbe ou de matrices :I Courbe dans l’espace : t→ (x(t), y(t), z(t)) pour t ∈ I. On se donne une discrétisation de I : T vecteur

de taille n et on se ramène au graphe des vecteurs (x(T ), y(T ), z(T )).

Page 23: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 23

I Surface dans l’espace donnée par (x, y) → z(x, y) pour x ∈ I, y ∈ J . On se donne une discrétisationde I et de J : Ix vecteur de taille n, Jy vecteur de taille m et on se ramène au graphe de la matricez(Ix, Jy).

I Surface paramétrée donnée par (u, v) → (x(u, v), y(u, v), z(u, v)) pour u ∈ I, v ∈ J . On se donne unediscrétisation de I et de J : Iu vecteur de taille n, Jv vecteur de taille m et on se ramène au graphedes matrices (x(Iu, Jv), y(Iu, Jv), z(Iu, Jv)).

4.6 Gestion des figures4.6.1 Ouvrir une figure

Toute commande graphique (plot, surf,...) ouvre une fenêtre graphique si aucune n’est encore ouverte.On peut également ouvrir une fenêtre graphique à l’aide de la commande figure.

4.6.2 Ouvrir plusieurs figures

Toute nouvelle figure doit être ouverte à l’aide de la commande scf. Les commandes graphiques sonteffectuées dans la dernière fenêtre activée. Pour changer de fenêtre activée, on utilise la commande gcf.

4.6.3 La commande clf

Toute commande graphique (plot, surf,...) se supperpose aux précédentes si on ne change pas de fenêtreavec la commande figure. Pour effacer le contenu d’une figure, il faut utiliser la commande clf.

4.6.4 Créer plusieurs graphes sur une même figure

I Deux graphes côte à côte

>>subplot(1,2,1)%commande graphique 1>>subplot(1,2,2)%commande graphique 2

I Deux graphes l’un au-dessous de l’autre

>>subplot(2,1,1)% commande graphique 1>>subplot(2,1,2)% commande graphique 2

I Quatre graphes

>>subplot(2,2,1)% commande graphique 1% graphe situé en haut à gauche>>subplot(2,2,2)% commande graphique 2% graphe situé en haut à droite>>subplot(2,2,3)% commande graphique 3% graphe situé en bas à gauche>>subplot(2,2,4)% commande graphique 4% graphe situé en bas à droite

4.6.5 Sauvegarde et export d’une figure

On peut sauvegarder ou exporter une figure depuis les menus de la fenêtre de la figure. On peut égalementutiliser les commandes xsave, xs2eps, xs2bmp, xs2gif, etc ...

Page 24: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 24

4.7 Animation de graphisme? La méthode la plus simple

On efface le graphe courant, on intercale une pause avant de tracer la nouvelle figure de la façon suivante :

figure(1)for k=0:0.1:2

clf(1) // On effaceplot(y,sin((y+k)*%pi),’-r’); // On tracexpause(100000); // Pause de 0.1 seconde

end;

I La commande clf(i) efface le contenue de la figure i.I La commande xpause(t) permet d’effectuer une pause dans un programme d’une durée fixée par t

et exprimée en micro-secondes.

? Pour “améliorer” l’animation

Il faut activer l’option pixmap de la figure par les commandes suivantes

f=gcf();f.pixmap=’on’;

A partir de ce moment là, les commandes graphiques (y compris clf) n’afficheront pas leur résultat dansla fenêtre mais dans le dessin se fera dans la mémoire de l’ordinateur. Pour afficher le résultat final de toutesles commandes il faut utiliser la commande show_pixmap.I La commande xpause permet d’effectuer un arrêt dans un programme, en particulier entre deux

commandes plot. On peut alors faire afficher des variables, faire des calculs intermédiaires, etc ...Pour relancer le programme, il faut taper resume dans la fenêtre principale de Scilab.

I La commande halt effectue aussi une pause dans le programme. Pour relancer le programme, il suffitd’appuyer sur une touche quelconque.

Exemple :

f=gcf(); // On crée une nouvelle figuref.pixmap=’on’; // On active le mode pixmapy=0:0.1:2;for k=0:0.1:2

clf // On effaceplot(y,sin((y+k)*%pi),’-r’); // On traceshow_pixmap // On affichexpause(100000); // Pause de 0.1 seconde

end;

Attention ces commandes sont obsolètes dans les nouvelles versions de scilab. Elles sont remplacées pardrawnow/drawlater.

y=0:0.1:2;drawlaterfor k=0:0.1:2

clf // On effaceplot(y,sin((y+k)*%pi),’-r’); // On tracedrawnow // On affichexpause(100000); // Pause de 0.1 seconde

end;

Page 25: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 25

4.8 Un exemple plus compliquéL’objectif de cet exemple est de montrer comment contrôler couleurs et style des courbes avec une

animation en prime !

// On va tracer sur l’intervalle [0,1], pour i=1, 2, 3 4// les fonctions x->sin(i %pi x) et x->0.1+sin(i %pi x)x=0:0.03:1;f=scf(0)clf(0)// gestion de la couleur de chaque courbez1=addcolor(name2rgb(’gray68’)/256)z2=addcolor(name2rgb(’darkred’)/256)z3=addcolor(name2rgb(’scilabpink3’)/256)z4=5 // rougecouleur=[z1 z2 z3 z4]// gestion du style de la courbe : chiffre entre 1 et 8// trait plein =1line_style=[1 5] ;// gestion de marqueur de la courbe : chiffre entre 0 et 14mark_style=[7 2] ;// gestion de la legendefor i=1:4

leg(i)=’i=’+string(i)end// trace de la premiere famille de fonctionfor i=1:4plot2d(x,sin(i*%pi*x))a=gca()p=a.children(1).children(1)p.foreground=couleur(i)p.line_style=line_style(1)p.mark_style=mark_style(1)p.mark_foreground=couleur(i)p.mark_background=couleur(i)p.thickness=2;end// on affiche la legende des couleurs// le chiffre 3 permet de positionner la legende dans le coin SW de la figurelegend(leg,3)// trace de la deuxieme famille de fonctionsfor i=1:4plot2d(x, 0.1+sin(i*%pi*x))a=gca()p=a.children(1).children(1)p.foreground=couleur(i)p.line_style=line_style(2)p.mark_style=mark_style(2)p.mark_foreground=couleur(i)p.mark_background=couleur(i)p.thickness=2// on affiche la courbe a chaque iterationxpause(100000)end// on donne un titre a la figure et aux axestitle(’Exemples de gestion des graphiques’)xlabel(’x’)ylabel(’y ’)// on exporte en png la figure obtenue

Page 26: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

4 GRAPHISME DANS SCILAB 26

xs2png(f,’test_graph.png’)

Page 27: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

5 EQUATIONS DIFFÉRENTIELLES 27

5 Equations différentiellesL’objectif est de visualiser sur un intervalle [0, T ] des solutions approchées des systèmes différentiels de

la formey′ = f(t, y), y(t0) = y0 ∈ Rp.

On commence par se donner une discrétisation tps de l’intervalle [0, T ], autrement dit une suite de tempst0 < t1 < · · · < tN = T .

On va alors chercher une approximation yapn de la solution exacte y au temps tn : yapn ∼ y(tn).

5.1 Les commandes de baseI Discrétisation temporelle. tps=0 :0.01 :TI La commande ode. Calcule une solution approchée du probléme de Cauchy.

La syntaxe est la suivante : yap=ode(y0,t0,tps,fonction) ou yap=ode(type,y0,t0,tps,fonction),où fonction est la fonction qui définit le système différentiel, ici f . y0 est la donnée de la solution à l’instant t0. y0 est un vecteur de Rp. tps est un vecteur t1, · · · , tn de temps. yap est une matrice de taille p×n dont la composante yap(:, k) est une approximation de la solution

y(tk). type permet de spécifier la méthode numérique à utiliser. Par exemple, ’rk’ correspond à la

méthode de Runge-Kutta RK4.I Visualisation des solutions On peut visualiser en fonction du temps , chacune des composantes de la trajectoire : plot(t,yap(1,:)). Lorsque p = 2, on peut aussi visualiser les trajectoires du système dans le plan de phase (on

visualise y∗(2, :) en fonction de y∗(1, :)). Afin d’étudier qualitativement les solution du système,on peut rajouter sur ce graphe le champ de vecteurs f en utilisant la commande fchamp, dont lasyntaxe est la suivante fchamp(fonction,t,xx,yy) où– on visualise le champ fonction à l’intant t et en xx(i),yy(i)– xx et yy doivent être deux vecteurs de même taille.

Pensez à regarder les demos disponibles dans Scilab pour avoir quelques illustrations de ce qu’il estpossible de faire.

5.2 L’exemple proie-prédateur

// On definit le champ de vecteurfunction y=proiepredateur(t,x)

y(1)=x(1)*(a-b*x(2)-e*x(1));y(2)=x(2)*(-c+d*x(1)-f*x(2));

endfunction// On definit la discretisationtps=0:0.01:20;f1=figure(1);clf(1);//coefficients e=0, f=0, a=1;b=1;c=1;d=1;e=0;f=0;// condition initiale 1y0=[0.5;0.5];y1=ode(y0,0,tps,proiepredateur);plot(y1(1,:),y1(2,:),’thickness’,2)// condition initiale 2y0=[0.1;0.1];y2=ode(y0,0,tps,proiepredateur);plot(y2(1,:),y2(2,:),’k’,’thickness’,2)

// condition initiale 3y0=[1.4;0.2];y2=ode(y0,0,tps,proiepredateur);plot(y2(1,:),y2(2,:),’r’,’thickness’,2)

Page 28: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

6 AUTRES COMMANDES UTILES 28

// On affiche le champ de vecteurxx=0:0.3:5.9;fchamp(proiepredateur,0,xx,xx)plot(1+0*xx,xx,’m’,’thickness’,2)plot(xx,1+0*xx,’m’,’thickness’,2)

xlabel(’Nenuphars’)ylabel(’Canards’)// On exporte le graphexs2png(f1,’canard_nenuphar.png’)

6 Autres commandes utilesVoici quelques noms de commandes qui peuvent être utiles. Nous renvoyons le lecteur à l’aide de Scilab

pour plus de détails sur ces différentes fonctions.

6.1 Interpolation numériqueI interp1 Méthodes d’interpolation 1-D.I interp2 Méthodes d’interpolation 2-D.I interp3 Méthodes d’interpolation 3-D.I spline Interpolation par spline cubique.

6.2 Intégration numériqueI integrate,intg, int2d, int3d Méthodes de quadratures numériques.I inttrap Méthode des trapèzes.

6.3 Equations aux dérivées partiellesI diff Calcul de différences.I numdiff Approximation du gradient.

6.4 Algorithmes de minimisation et de recherche de racinesI pcg Gradient conjugué préconditionné.

Page 29: Initiation à Scilab (par F. Boyer, F. Hubert et F. Nabet)

6 AUTRES COMMANDES UTILES 29

I qmr Quasi-minimum residual préconditionné..I optim Minimisation d’une fonction.

6.5 OptimisationI reglin Régression linéaireI leastsq Approximation de problème non linéaire par moindre carrés.

6.6 Zéros de fonctionsI fsolve Résolution de f(x) = 0.I poly Définition d’un polynôme.I roots Racines d’un polynôme.

6.7 FourierI fft Transformation de Fourier rapide en 1-D.I ifft Inverse de la transformation de Fourier rapide en 1-D.I fft2 Transformation de Fourier rapide en 2-D.