27
Introduction au logiciel Scilab Marie Postel * Version r´ evis´ ee janvier 2009 Scilab est un logiciel de calcul num´ erique d´ evelopp´ e par l’Institut National de Recherche en Informatique et en Automatique (INRIA) et distribu´ e gratuitement sur presque tout type d’ordi- nateurs (PC Windows, Linux, Unix, MacIntosh). Pour plus d’information et pour t´ el´ echarger ce logiciel, vous pouvez consulter le site Internet de l’INRIA : http ://www.scilab.org. Scilab poss` ede son propre langage de programmation (tr` es proche de celui de Matlab), de nombreuses fonctions pr´ eprogramm´ ees, et des possibilit´ es ´ etendues de visualisation graphique. Il est tr` es simple, tr` es convivial et s’impose de plus en plus comme un outil incontournable dans l’enseignement, la recherche et le d´ eveloppement. C’est un des logiciels utilis´ es pour l’´ epreuve d’analyse num´ erique de l’agr´ egation de math´ ematiques. Il permet de r´ ealiser des simulations num´ eriques bas´ ees sur des algorithmes d’analyse num´ erique. Il sera donc utilis´ e pour la r´ esolution approch´ ee d’´ equations diff´ erentielles, d’´ equations aux d´ eriv´ ees partielles ou de syst` emes lin´ eaires, non lin´ eaires, etc... Le pr´ esent document d´ ecrit les rudiments du langage et les commandes indispensables. * Laboratoire Jacques-Louis Lions, Universit´ e Pierre et Marie Curie 1

Notice Scilab

  • Upload
    trinhtu

  • View
    284

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Notice Scilab

Introduction au logicielScilab

Marie Postel∗

Version revisee janvier 2009

Scilab est un logiciel de calcul numerique developpe par l’Institut National de Recherche enInformatique et en Automatique (INRIA) et distribue gratuitement sur presque tout type d’ordi-nateurs (PC Windows, Linux, Unix, MacIntosh). Pour plus d’information et pour telecharger celogiciel, vous pouvez consulter le site Internet de l’INRIA:

http ://www.scilab.org .Scilab possede son propre langage de programmation (tres prochede celui deMatlab ), denombreuses fonctions preprogrammees, et des possibilites etendues de visualisation graphique. Ilest tres simple, tres convivial et s’impose de plus en pluscomme un outil incontournable dansl’enseignement, la recherche et le developpement. C’est un des logiciels utilises pour l’epreuved’analyse numerique de l’agregation de mathematiques.Il permet de realiser des simulationsnumeriques basees sur des algorithmes d’analyse numerique. Il sera donc utilise pour la resolutionapprochee d’equations differentielles, d’equationsaux derivees partielles ou de systemes lineaires,non lineaires, etc...Le present document decrit les rudiments du langage et lescommandes indispensables.

∗Laboratoire Jacques-Louis Lions, Universite Pierre et Marie Curie

1

Page 2: Notice Scilab

Table des matieres

1 Fonctionnement general 31.1 Premiere utilisation deScilab . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 La barre de menu horizontale . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 41.3 Utilisation de l’aide en ligne . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 5

2 Type de donnees 52.1 Constantes speciales . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 52.2 Vecteurs (“vectors”...) . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 62.3 Matrices (“matrix” ...) . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 72.4 Autres objets mathematiques . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 11

3 Programmation 113.1 Edition de scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . 113.2 Fonctions ou macros (“function” or “macros”... ) . . . . . .. . . . . . . . . . . . 113.3 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.5 Utilisation de fonctionsScilab . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.5.1 fsolve : systemes d’equations non lineaires . . . . . . . . . . . . . . . .173.5.2 ode : solveur d’equations differentielles ordinaires . . . . .. . . . . . . . 18

4 Entr ees / Sorties sousScilab 204.1 Interaction avec l’utilisateur . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 204.2 Sauvegarde de resultats en binaire . . . . . . . . . . . . . . . . .. . . . . . . . . 214.3 Fichiers ascii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 22

5 Sorties graphiques 235.1 La fenetre graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 235.2 Les traces en 2 dimensions . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 235.3 Les graphiques dans l’espace . . . . . . . . . . . . . . . . . . . . . . .. . . . . . 25

2

Page 3: Notice Scilab

1 Fonctionnement general

Scilab presente plusieurs fonctionnalites dont un langage de programmation propre, prochedans sa syntaxe des langages informatiques courants (Fortran, C, Pascal) qui est traduit par uninterpreteur. Il possede en outre un grand nombre d’algorithmes preprogrammes (dans ce langageainsi que des librairies de procedures ecrites en Fortranet en C) . Enfin depuis la version 2.7Scilab propose un editeur integre permettant d’ecrire les scripts sans sortir de l’environnementUne des particularites deScilab qui sera largement exploitee dans ce module est la simplicitede sa syntaxe pour tout ce qui concerne le calcul matriciel. Les operations elementaires sur lesmatrices, comme l’addition, la transposition ou la multiplication sont effectuees immediatement.D’autres avantages moins specifiques a l’analyse numerique sont appreciables au niveau de laconception des programmes.Scilab permet a l’utilisateur de creer ses propres fonctions etses librairies tres facilement. Les fonctions sont trait´ees comme des objets et a ce titre peuventetre passees en argument d’autres fonctions. Notons enfinl’interface possible avec des sous-programmes Fortran ou C.La premiere partie de cette notice donne le mode d’emploi g´eneral deScilab , son utilisationen mode “calculatrice” et detaille les principales fonctionnalites accessibles par les boutons de lafenetre. La partie2 presente les principaux types de donnees et les operations permettant de lesmanipuler. La partie3 s’attaque a des aspects plus complexes de programmation - lesboucles etlestests , qui necessitent la mise en œuvre defonctions et l’ecriture descripts . La partie4 presente les entrees/sorties sur fichiers et les graphiques font l’objet de la partie5.

1.1 Premiere utilisation de Scilab

Nous presentons dans ce paragraphe l’utilisation deScilab dans l’environnement WINDOWS.Dans un premier temps, pour se familiariser avec la syntaxe,il est plus facile d’utiliserScilabcomme une super calculatrice.Cliquer sur l’iconeScilab (ou scilex ). Vous allez voir apparaıtre une nouvelle fenetreXScilab comme sur la figure 1.En haut de la fenetre, se trouve une barre de menu :File Control Demos Graphic Help EditorA l’interieur de cette fenetre, on peut rentrer une suite d’instructions sur la ligne materialisee parune fleche−− > qu’executera ensuite le logiciel apres un retour chariot. Si l’instruction est suivied’un point virgule, elle est simplement executee. Si elleest suivie d’une virgule ou simplementd’un return / entr ee le resultat apparaıt dans la fenetre. Dans le cas ou l’instruction necomporte pas d’affectation (signe=) a une variable, le resultat apparaıt a la suite du mot “an-s” answer=reponse). Les appels a des fonctions graphiques entraınent l’ouverture d’une fenetrespecifique. Les instructions tres longues peuvent etre tapees sur plusieurs lignes en utilisant lesymbole de continuation... a la fin de la ligne.

Les valeurs prises par les differentes variables au terme de l’execution sont conservees en memoireet il est possible (et parfois utile) d’afficher l’une d’elles a posteriori en tapant simplement sonnom. A noter aussi que l’historique des instructions entrees depuis le debut de la session sur la

3

Page 4: Notice Scilab

FIG. 1 – Fenetre de commandeScilab

ligne de commande est accessible par pressions successivesde la touche↑. Enfin, pour effacerles donnees en memoire (par exemple avant d’executer un nouveau calcul), il suffit d’utiliser lacommandeclear .

1.2 La barre de menu horizontale

Boutonfile. Si vous etes curieux de voir commentScilab est installe sur votre machine vouspouvez aller visiter les differents sous-repertoires dela distribution par l’intermediaire du menufile puis en cliquant surScilab . Vous pourrez vous deplacer dans l’arborescence :• bin contient les executables.• demoscontient les demonstrations. Le scriptalldems.dem permet d’ajouter un nouvel itemau menudemos.• examplesexamples de correspondance d’un autre langage aScilab .• macros librairies de fonctions utilisables interactivement.• routines code de ces fonctions.• testsprogrammes d’evaluation pour testerScilab sur une machine.• tmp programmes ecrits par les utilisateurs pendant des cours.Ce menufile vous permet d’acceder egalement a vos propres fichiers encliquant surHome.Scilab voit les fichiers dans le repertoire courant. Au depart,home est celui ou vous etiezquand vous avez demarre la session, souslinux , ou bien le repertoire de travail par defaut souswindows . Les commandespwd etcd peuvent etre utilisees depuis la fenetre de commandes pourchanger de repertoire.La barre de menu horizontale en bas de la fenetre qui s’ouvrequand on clique surfile permetde charger des donnees (load ) ou des fonctions (getfc et getf ) ou executer un script de com-mandes (exec ). Nous reviendrons sur ces fonctionnalites au debut de lapartie Programmation 3.BoutonControl . Ce sous-menu permet d’interrompre les calculsScilab avecstop , de lesreprendre avecresume ou de les abandonner avecabort .BoutonDemos. Ouvre un sous-menu permettant de lancer les scripts de presentation du logiciel.

4

Page 5: Notice Scilab

BoutonGraphic Window . Ouvre un sous-menu permettant de passer d’une fenetre graphique aune autre, les creer et les effacer.BoutonHelp. Ouvre un sous-menu permettant d’ouvrir la fenetre d’aideen ligne (Help browser )(voir ci-dessous paragraphe 1.3), ou bien a obtenir de l’aide sur une commande dont on connaıt lenom (Apropos ).BoutonEditor . Ouvre une fenetre d’edition pour ecrire les scripts ou les fonctionsScilab (voirci dessous paragraphe 3.1).

1.3 Utilisation de l’aide en ligne

Une aide en ligne sur toutes les commandesScilab , les fonctions preprogrammees, les types dedonnees, etc, est disponible en cliquant sur le boutonhelp puis sur les differents sous-menus. Onpeut court-circuiter l’arborescence de l’aide en faisant une recherche par mot-clef en cliquant surla loupe en haut a gauche de la fenetre d’aide.Cette aide est redigee en anglais ; a part ce petit inconv´enient, son utilisation est tres pratique. Enfait il est indispensable d’apprendre rapidement a s’en servir car c’est la seule maniere de retrouverles modalites d’utilisation des quelques centaines de fonctions preprogrammees. Noter qu’on peutaussi taper les demandes d’aides au clavier, par exemple

help() // donne des informations g enerales sur l’aide en ligneapropos motclef // donne toutes les fonctions Scilab qui ont un// rapport avec le mot-clef sp ecifi ehelp nomdefonction //ouvre la fen etre d’aide pour utiliser la// fonction Scilab nomdefonction

En cas d’erreur de syntaxe,Scilab affiche un message d’erreur juste en dessous de l’instructionfautive avec un point d’exclamation localisant eventuellement l’erreur dans cette instruction. Lemessage explicatif est parfois laconique - et en anglais - donc il peut etre utile de vous constituerun petit lexique des erreurs les plus frequentes.

2 Type de donnees

Les differents types scalaires sont les constantes, les booleens, les polynomes, les chaınes de car-acteres et les rationnels. Avec ces objets on peut definir des matrices. Il existe aussi des listes et desfonctions. Le tableau 1. rassemble les principales fonctions sur les scalaires prevues parScilab

2.1 Constantes speciales

Elles sont precedees du caractere%. Voici la liste des plus utilisees. La liste complete est obtenueen tapant la commandewho

%F %T %z %s %nan %inf %t %f %eps %io %i %e %pi

5

Page 6: Notice Scilab

2.2 Vecteurs (“vectors”...)

Pour definir un vecteur la syntaxe est une des suivantes :

-->v=[2,-3+%i,7] //vecteur ligne! 2. - 3. + i 7. !

-->v’ // vecteur transpos e conjugu eans =

! 2. !! - 3. - i !! 7. !-->v.’ // vecteur transpos e

ans =! 2. !! - 3. + i !! 7. !-->w=[-3;-3-%i;2] // vecteur colonne

w =! - 3. !! - 3. - i !! 2. !-->v’+w //somme de deux vecteurs

ans =! - 1. !! - 6. - 2.i !! 9. |-->v * w //produit scalaire euclidien

ans =18.

-->w’. * v // produit des composantes (essayer aussi avec ./)ans =

! - 6. 8. - 6.i 14. !

Les composantes sont separees par des blancs (dangereux)ou des virgules pour les vecteurs ligneset par des points-virgules pour les vecteurs colonnes. Des messages erreurs sont affichees si uneoperation impossible est tentee (par exemple l’additionde vecteurs de longueurs differentes).Et pour aller plus vite...

-->v=1:5.1:23 //vecteur a incr ement constantv =

! 1. 6.1 11.2 16.3 21.4 !-->ones(v)

ans =

6

Page 7: Notice Scilab

! 1. 1. 1. 1. 1. !-->ones(1:4)

ans =! 1. 1. 1. 1. !-->3 * ones(1:5)

ans =! 3. 3. 3. 3. 3. !-->zeros(1:3)

ans =! 0. 0. 0. !

2.3 Matrices (“matrix” ...)

Les matrices suivent la meme syntaxe que les vecteurs. Les composantes des lignes sont separeespar des virgules et chaque ligne est separee de l’autre parun point virgule.

-->// une mani ere de d efinir une matrice 3 x 3:-->A=[1,2,3;0,0,atan(1);5,9,-1];

-->// une autre syntaxe pour faire la m eme chose-->A=[1 2 3--> 0 0 atan(1)--> 5 9 -1]

A =! 1. 2. 3. !! 0. 0. .7853982 !! 5. 9. - 1. !

-->// a ne pas confondre avec ce groupe d’instructions-->A=[1 2 3...-->0 0 atan(1)...-->5 9 -1]

A =! 1. 2. 30. 0. 0.7853982 5. 9. - 1. !

-->-->v=1:5;W=v’ * v // multiplication de matrices

W =! 1. 2. 3. 4. 5. !! 2. 4. 6. 8. 10. !! 3. 6. 9. 12. 15. !! 4. 8. 12. 16. 20. !

7

Page 8: Notice Scilab

Fonction Descriptionabs valeur absolueexp exponentiellelog logarithme neperienlog10 logarithme en base 10cos cosinus (argument en radian)sin sinus (argument en radian)tan tangente (argument en radian)cotg cotangente (argument en radian)acos arccosasin arcsinatan arctangentecosh ch, cosinus hyperboliquesinh sh, sinus hyperboliquetanh th, tangente hyperboliqueacosh argchasinh argshatanh argthsqrt racine carreefloor partie entiere (E(x) ≤ x < E(x) + 1)ceil partie entiere superieure (n < x ≤ E(x) + 1)int partie entiere anglaise (floor six > 0 et ceil sinon)round arrondi (E(x + 0.5))

erf fonction erreur erf(x) =2√π

∫x

0

exp(−t2)dt

erfc complementaire erfc(x) = 1−erf(x)

gamma Γ(x) =

∫∞

0

tx−1e−tdt

gammaln ln(Γ(x))

dlgammad

dxln(Γ(x))

TAB. 1 – Fonctions elementaires sur les scalaires.

8

Page 9: Notice Scilab

! 5. 10. 15. 20. 25. !-->-->W(1,:) //extraction de la premi ere ligne

ans =! 1. 2. 3. 4. 5. !-->-->W(:,$) //extraction de la derni ere colonne $

ans =! 5. !! 10. !! 15. !! 20. !! 25. !-->-->A=eye(3,3) // Matrice identit e

A =! 1. 0. 0. !! 0. 1. 0. !! 0. 0. 1. !-->-->B=toeplitz([2,1,0,0]) // Matrice de Toeplitz sym etrique

B =! 2. 1. 0. 0. !! 1. 2. 1. 0. !! 0. 1. 2. 1. !! 0. 0. 1. 2. !

Le tableau 2. resume les principales fonctions affectant ou effectuant des operations sur des ma-trices. Noter que les fonctions du tableau 1. peuvent aussi s’appliquer a des matrices, composantepar composante, comme dans l’exemple suivant

-->u=[0:1:4]u =

! 0. 1. 2. 3. 4. !

-->v=sin(u)v =

! 0. .8414710 .9092974 .1411200 - .7568025 !

9

Page 10: Notice Scilab

Fonction Descriptionones(i,j) cree un tableau de i lignes j colonnes contenant des 1zeros(i,j) cree un tableau de i lignes j colonnes contenant des 0eye(i,j) cree un tableau de i lignes j colonnes avec des 1 sur la diagonale principale

et 0 ailleurstoeplitz(u) cree une matrice de Toeplitz symetrique dont la premiereligne est le vecteur udiag(u) cree une matrice carree avec le vecteur u sur la diagonale et 0 ailleursdiag(U) extrait la diagonale de la matrice Utriu(A) renvoie la partie superieure de Atril(A) renvoie la partie inferieure de Alinspace(a,b,n) cree un vecteur de n composantes uniformement repartiesde a a blinsolve(A,b) resolution du systeme lineaireAu+b=0A\b resolution du systeme lineaireAu=bcond(A) conditionnement d’une matrice (norme euclidienne)det(A) determinant d’une matricerank(A) rang d’une matriceinv(A) inverse d’une matricepinv(A) pseudo inverse d’une matricesvd(A) valeurs singulieres d’une matricenorm(A) norme matricielle ou vectorielleu’ prend le transpose conjugue de uu.’ prend le transpose conjugue de uu*v multiplication matricielleu+v addition matricielleu-v soustraction matricielleu.* v multiplication des tableaux u et v terme a termeu./v division du tableau u par le tableau v terme a terme

TAB. 2 – Principales operations sur les matrices.

10

Page 11: Notice Scilab

2.4 Autres objets mathematiques

Un grand nombre d’objets mathematiques ou logiques peut intervenir dans un programme de sim-ulation (entier, reel, fonction, polynome, matrice, booleen, etc...). Il est donc indispensable deconnaıtre la maniere d’affecter puis de manipuler chacund’eux : Le tableau 3 dresse un recapitulatifde la syntaxe a respecter. La demonstrationIntroduction to Scilab permet egalementde faire defiler en mode pause differents exemples d’affectation et d’utilisation de ces objets (il estnecessaire de faire un retour chariot pour que le programmeexecute chaque nouvelle ligne).

3 Programmation

3.1 Edition de scripts

Des que le calcul a effectuer implique un enchaınement decommandes un peu complique, il vautmieux ecrire unscript .Si vous avez installe la derniere version du logicielScilab , vous avez aussi a votre dispositionun editeur integre qu’on lance en cliquant sur le boutonEditor . Cet editeur gere les suffixes desfichiers que vous creez : s’il s’agit d’une fonction qui se termine par la commandeEndFunction ,le fichier prendra automatiquement le suffixesci , dans le cas contraire, c’est unscript , unenchaınement de commandesScilab , et il prendra le suffixesce . Le boutonExecute dansla fenetre d’edition permet de lancer l’execution du script courant dans la fenetre de commandes(Load into Scilab ). Les fonctions, si elles sont definies dans un fichier independant, doiventd’abord etre chargees (avec la commandegetf ) et utilisees avec la syntaxe d’appel detaillee dansle paragraphe 3.2.Nous allons maintenant detailler quelques regles de programmation qui pour la plupart ne devraientpas surprendre outre mesure si on connaıt deja un autre langage (C ou Fortran).

3.2 Fonctions ou macros (“function” or “macros”... )

Les fonctions sont des enchaınements de commandesScilab qui sont executees a part. Ellespeuvent etre creees et executees de plusieurs manieres. Elles peuvent avoir des arguments d’ap-pel, de retour, inclure des tests conditionnels, des boucles et s’appeler recursivement. Enfin ellespeuvent elles-memes etre des arguments de fonctions.Une fonction ne comportant qu’un petit nombre d’instructions peut etre definie directement dansla fenetre de commandes de la maniere suivante

-->deff(’[s]=angle(x,y)’,’s=180 * atan(y/x)/%pi’)-->angle(4,5)

ans =51.340192

La fonctionangle donne la mesure en degre de l’angle entre le segment forme par l’origine et lepoint de coordonnees(x, y) et l’axe des abscisses.

11

Page 12: Notice Scilab

Instruction Description

a=2 affectation de la valeur reelle2 a a

a=%t affectation du booleenvrai aa

p=poly([%i -%i],’z’) affectation du polynome(z − i)(z + i) = z2 + 1 ap

z=poly(0,’z’) ;

q=1+3 * z+4.5 * zˆ2 affectation du polynome1 + 3z + 4.5z2 aq

r=p/q affectation d’une fraction rationnelle ar

A=[a+1 2 ; atan(1) -3] affectation d’une matrice reelle2 × 2 aA

rand(3,3,’u’) matrice aleatoire3 × 3 (loi uniforme sur[0, 1])

rand(3,3,’n’) matrice aleatoire3 × 3 (loi gaussienne centree)

eye(4,4) matrice identiteI4 ∈ M4(IR)

ones(1,2) ;1 :2 :7 vecteurs lignes(1, 1) et (1, 3, 5, 7)

B=toeplitz([4 1 0 0]) matrice tridiagonale symetrique dansM4(IR)

C=B’ * B calcul deC = tBB (matrice4 × 4)

D=C.* B multiplication terme a terme deCparB

f=C(1 :4,1) ou f=C( :,1) extraction des termes de la premiere colonne deC

g=D\f division a gauche def parD (Dg=f)

deff(’y=f(a,b)’,’y=a+b’) definition la fonction f(a,b)=a+b

TAB. 3 – Instructions syntaxiques et commandes elementaires.

12

Page 13: Notice Scilab

Des que la fonction necessite plusieurs instructions, ilvaut mieux definir les fonctions dans unfichier a part a l’aide de l’editeur de texte. Pour l’exemple precedent on peut creer le fichier “an-gle.sci” contenant les lignes :

function [s]=angle(x,y)s=180 * atan(y/x)/%pi; // Calcule l’angle en degr esxpoly([x,0,x],[0,0,y],"lines") // Visualise le triangleendfunction

puis dans la fenetre de commandes on tape

getf("angle.sci","c");

et on peut maintenant utiliser la fonction “angle” comme pr´ecedemment. En plus de la mesure del’angle en degre, la fonction affiche graphiquement le triangle forme par l’origine et les points decoordonnees(x, 0) et (x, y). Dans l’exemple ci-dessus le parametre′′c′′ dans l’appel agetf estoptionnel. Il requiert la compilation des fonctions contenues dans le fichier toto.sci au moment deleur chargement.

Il existe de nombreux algorithmes preprogrammes dansScilab pouvant etre utilises dans desprogrammes de simulation plus complexes comme “boite noire”. Ils sont chargees automatique-ment au lancement de la session. Tous sont repertories et brievement presentes dans l’aide en ligne.Il est tres utile de connaıtre au moins le nom des instructions associees a ces derniers (au nombred’une quinzaine) sans retenir forcement leur syntaxe complete, facilement retrouvable avec l’aideen ligne (ou l’instructionhelp ).

De maniere generale, la syntaxe de definition d’une fonction externe est

function [y_1,...,y_m]=toto(x_1,....,x_n)......endfunction

ou toto est le nom de la fonction,x1, ....xn, lesn arguments d’entree et[y1, ...ym] lesmargumentsde sortie. Reprenons l’exemple precedent de la fonction angle, qui calcule et dessine l’angle formepar le segment d’extremites(0,0) et (x,y) avec l’horizontale.Le passage des arguments d’entree dans les fonctions se fait par valeur. Aussi, meme si elles sontmodifiees dans la fonction les valeurs des parametres ne sont pas modifiees dans le programmeappelant.Si une des variables de la procedure n’est pas definie a l’interieur de celle-ci et non plus en argu-ment d’entree, elle prend la valeur definie dans le programme appelant. Ceci permet d’appeler lesfonctions avec moins de parametres d’entree que prevu. Ainsi

13

Page 14: Notice Scilab

-->clear-->getf(‘‘angle.sci’’)-->angle(4)

!--error 4undefined variable : yat line 2 of function angle called by :angle(4)

donne une erreur car le parametrey n’est pas affecte. En revanche

-->clear-->getf(‘‘angle.sci’’)-->y=2

y =2.

-->angle(4)ans =

1.1071487-->

s’execute correctement en utilisant pour le parametrey la valeur connue dans le script principal.La recuperation des valeurs calculees par la fonction sefait par les parametres de sortie ([y1, ...yn]dans la definition detoto ci-dessus). S’il n’y a qu’un resultat comme dans l’exemplede la fonc-tion angle , on peut se dispenser de le recuperer dans une variable, enrevanche s’il y a plus d’unparametre de sortie, il faut recuperer leurs valeurs dans des variables dans le script d’appel. Regar-dons par exemple l’utilisation de la fonctionpolaire definie ci-dessous et sauvee dans le fichierpolaire.sci

function [r,theta]=polaire(x,y)r=sqrt(xˆ2+yˆ2)theta=atan(y,x)

Pour l’utiliser a partir de la fenetreScilab on tape les instructions suivantes

-->;getf("polaire.sci");

-->polaire(2,3) // Si seulement le rayon nous int eresseans =

3.6055513

-->// Si on veut r ecup erer a la fois le rayon et l’angle

14

Page 15: Notice Scilab

-->[r,t]=polaire(2,3)t =

.9827937r =

3.6055513

Enfin pour clore ce paragraphe d’introduction a la programmation sousScilab , notez que cer-taines commandes speciales ne peuvent s’utiliser que dansune fonction :argn : donne le nombre de parametres d’entree et de sortie de la fonctionerror : interrompt l’execution de la fonction, affiche le message d’erreur et retourne dans leprogramme appelant.warning : imprime le message mais ne retourne pas dans le programme appelantpause : interrompt l’execution jusqu’a ce que l’utilisateur tape unreturnbreak : sort d’une boucle.return : retourne dans le programme appelant et renvoie des valeurs locales.Depuis la version 2.7 les fonctions peuvent etre definies `a l’interieur du script appelant, avantd’etre utilisees. Elles doivent dans ce cas se terminer par l’instruction endfunction , qui n’estpas obligatoire si elles sont definies dans un fichier de fonctions externes.

3.3 Les boucles

Il y en a de deux types enScilab : les boucleswhile et les bouclesfor . La bouclefor parcourtun vecteur d’indices et effectue a chaque pas toutes les instructions delimitees par l’instructionend .

-->x=1; for k=1:4,x=x * k, endx =

1.x =

2.x =

6.x =

24.

la bouclefor peut parcourir un vecteur (ou une matrice) en prenant comme valeur a chaque pasles elements (ou les colonnes) successifs.

-->v=[-1 3 0]v =

! - 1. 3. 0. !

-->x=1; for k=v, x=x+k, end

15

Page 16: Notice Scilab

x =0.

x =3.

x =3.

La bouclewhile effectue une suite de commandes tant qu’une condition est satisfaite.

-->x=1; while x<14,x=x+5,endx =

6.x =

11.x =

16.

Les deux types de boucles peuvent etre interrompus par l’instructionbreak . Dans les bouclesimbriqueesbreak n’interrompt que la boucle la plus interne.

3.4 Tests

DansScilab on dispose du classiqueif-then-else agremente duelseif parfois bienutile. La syntaxe est par exemple

-->x=16x =

16.

-->if x>0 then, y=-x, else y=x, endy =

- 16.

Dans le cas ou le test doit departager un “grand nombre” (superieur a deux...) de possibilites, on aaussi la possibilite d’utiliser leselect-case , equivalent duswitch-case en C.

-->n=round(10 * rand(1,1))-->select n-->case 0 then--> printf(’cas numero 0’)-->case 1 then--> printf(’cas numero 1’)-->else--> printf(’autre cas’)-->end

16

Page 17: Notice Scilab

francais anglais testScilabet and &ou or |non not ˜egal equal ==

different different <> ou ˜=plus petit que lower than <plus grand que greater than >

plus petit ou egal a lower than or equal <=plus grand ou egal a larger than or equal >=

TAB. 4 – Les operateurs logiques dans les tests.

3.5 Utilisation de fonctionsScilab

Dans ce paragraphe nous detaillons l’utilisation de deux fonctionsScilab , fsolve qui sert aresoudre des systemes d’equations non lineaires etode pour resoudre des equations differentiellesordinaires. La description exhaustive de ces deux programmes est disponible en anglais dans l’aideen ligne

3.5.1 fsolve : systemes d’equations non lineaires

La fonctionfsolve calcule les solutions de systemes d’equations non lineaires. La syntaxe d’ap-pel la plus simple estx=fsolve(x0,fct)et peut etre precisee avec des arguments optionnels :[x [,v [,info]]]=fsolve(x0,fct [,fjac] [,tol]) .Ces parametres d’appels et de sortie sont :x0 : un vecteur de reels (valeurs initiales de l’argument de lafonction).fct : une fonction externe.fjac : une fonction externe.tol : un scalaire reel pour la tolerance sur l’erreur : la recherche des racines s’arrete quand l’al-gorithme estime que l’erreur entre les solutions etx est majoree partol (La valeur par defaut esttol=1.d-10 ).x : vecteur de reels contenant la solution du systeme.v : vecteur de reels contenant la valeur de la fonction enx .info : indicateur de fin :0 : mauvais parametres d’entree.1 : calcul correct avec une erreur inferieure a la tolerancetol .2 : nombre maximum d’appels a la fonction atteint.3 : tol est trop petit, l’algorithme ne peut plus progresser.4 : l’algorithme ne progresse plus.

17

Page 18: Notice Scilab

DescriptionLa fonction fsolve trouve les solutions d’un systeme d’equations non lineaires donne sous laforme0 = fct(x)fct est une fonction externe dont la syntaxe d’appel estv=fct(x) .jac est aussi une fonction externe qui renvoie le jacobien defct c’est-a-direv=d(fct)/dx(x)

Exemples

// Un exemple simple : syst eme non lin eairedeff(’[y]=fsol1(x)’,...

’y=[x(1)ˆ2+2 * x(1) * x(2)+1; 2 * x(1) * x(2)+x(2)ˆ2+2]’);deff(’[y]=fsolj1(x)’,...

’y=[2 * x(1)+2 * x(2), 2 * x(1) ; 2 * x(2), 2 * x(1)+2 * x(2)]’);[xres]=fsolve([100;100],fsol1)fsol1(xres)[xres]=fsolve([100;100],fsol1,fsolj1)fsol1(xres)

Les deux methodes donnent le meme resultat, mais la premiere laisse le programme evaluer lejacobien de la fonction par differences finies alors que la deuxieme lui fournit la fonctionfsol1pour calculer les derivees partielles. Dans ce cas simpleles performances en temps de calcul sontlegerement en faveur de la deuxieme methode.

3.5.2 ode : solveur d’equations differentielles ordinaires

Le nom de ce programme vient de l’acronyme anglaisode - ordinary differential equation solver.

La syntaxe d’appel la plus simple esty=ode(y0,t0,t,f) ou y0 est le vecteur des conditions initiales,t0 est le temps initial,test le vecteur des temps ou on veut calculer la solution ety est la matrice contenant la solutiony=[y(t(1)),y(t(2)),...] .L’argumentf deode est une fonction externe dont la syntaxe d’appel doit etre la suivanteydot = f(t,y)ou t est un scalaire reel (le temps) ety un vecteur de reels. Cette fonction est le second membredu systeme differentieldy/dt = f(t, y).L’argumentf peut aussi etre unelisteScilab , avec la structurelst=list(f,u1,u2,...un) ,ou f est alors une fonction avec comme syntaxe d’appel :ydot = f(t,y,u1,u2,...,un)ce qui permet d’utiliser des parametres en argument def .

Des syntaxes d’appel avec des parametres optionnels d’appel et de sortie sont possibles

18

Page 19: Notice Scilab

[y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac])[y,rd,w,iw]=ode("root",y0,t0,t [,rtol [,atol]],f [,jac ])

Les parametres supplementaires sont :

type : une des chaınes de caracteres suivantes : ”adams” ”stiff” ”rk” ”rkf” ”fix” ”discrete””roots”ode est l’interfaceScilab pour utiliser differents solveurs d’equations differentielles, en parti-culier ODEPACK. le type de probleme et la methode utilisee pour le resoudre sont definis dansle premier argument (optionnel). Par defaut, le solveurlsoda de ODEPACK est utilise. Cesolveur selectionne automatiquement la methode la plus adaptee, parmi les methodes de prediction-correction d’Adams et la methode BDF ( Backward Differentiation Formula).Si le premier parametretype est precise, il peut s’agir par exemple de :”adams” : Pour les problemes non raides.”stiff” : Pour les problemes raides.”rk” : Methode de Runge-Kutta adaptative d’ordre 4.

rtol,atol : vecteurs de constantes reelles vectors de la meme tailleque y .Des parametres optionnels peuvent preciser l’erreur toleree sur la solutionrtol et atol sont lesseuils pour les erreurs relative et absolue.

jac : fonction externe .Pour des problemes raides, il est preferable de fournie `a ode le jacobien de la fonction secondmembre, sous la forme d’une fonction externe dont la syntaxed’appel seraJ=jac(t,y)La matriceJ contient les valeurs dedf/dy en (t,y) , c’est-a-direJ(k,i) = dfk /dyi oufk est lakieme composante def et yi est laiieme composante dey .

Exemples

// Equation diff erentielle scalaire// dy/dt=yˆ2-y sin(t)+cos(t), y(0)=0deff("[ydot]=f(t,y)","ydot=yˆ2-y * sin(t)+cos(t)")y0=0;t0=0;t=0:0.1:%pi;y=ode(y0,t0,t,f);plot(t,y)// Simulation de dx/dt = A x(t) + B u(t) avec u(t)=sin(omega * t),// x0=[1;0]// solution x(t) d esir ee a t=0.1, 0.2, 0.5 ,1.// La matrice A et la fonction u sont pass ees a la fonction// second membre dans une liste.// La matrice B et omega sont pass es comme des variables globales

19

Page 20: Notice Scilab

deff("[xdot]=linear(t,x,A,u)","xdot=A * x+B* u(t)")deff("[ut]=u(t)","ut=sin(omega * t)")A=[1 1;0 2];B=[1;1];omega=5;ode([1;0],0,[0.1,0.2,0.5,1],list(linear,A,u));//// Notation matricielle// Int egration de l’ equation diff erentielle de Riccati// Xdot=A’ * X + X* A - X’ * B* X + C , X(0)=Identit e// Solution a t=[1,2]deff("[Xdot]=ric(t,X)","Xdot=A’’ * X+X* A-X’’ * B* X+C")A=[1,1;0,2]; B=[1,0;0,1]; C=[1,0;0,1];t0=0;t=0:0.1:%pi;X=ode(eye(A),0,t,ric)//// Calcul de exp(A) comme solution de dy/dt=Ay, avec y(0)=y0// La solution y(t)=exp(At)y0A=[1,1;0,2];e1=[1;0];e2=[0;1];deff("[xdot]=f(t,x)","xdot=A * x");[ode(e1,0,1,f),ode(e2,0,1,f)][ode("adams",e1,0,1,f),ode("adams",e2,0,1,f)]// valeur exacteexpm(A)// Avec une matrice raide, en donnant le JacobienA=[10,0;0,-1];deff("[xdot]=f(t,x)","xdot=A * x");deff("[J]=Jacobian(t,y)","J=A")[ode("stiff",e1,0,1,f,Jacobian),ode("stiff",e2,0,1, f,Jacobian)]// valeur exacteexpm(A)

4 Entr ees / Sorties sousScilab

4.1 Interaction avec l’utilisateur

Pour communiquer avec l’utilisateur du programmeScilab on peut utiliser la commandeinputdont la syntaxe est :[x]=input(‘‘message’’, [‘‘string’’])‘‘message’’ est une chaıne de caracteres qui s’affiche dans la fenetrede commandes.x est la variable ou on va stocker la valeur entree par l’utilisateur en reponse a cette question. Cesera une variable de type reel, sauf si le mot-clef‘‘string’’ etait specifie en argument.

20

Page 21: Notice Scilab

Pour afficher des resultats avec un format on utilise la commandeprintf(‘‘format’’,variable)comme dans les exemples ci-dessous

-->a=1/3;

-->printf(" valeur scalaire =%f",a);valeur scalaire =0.333333

-->a=2;

-->printf(" valeur enti ere =%d",a);valeur enti ere =2

-->a="une cha ıne de caract eres";

-->printf(" pour afficher %s",a);pour afficher une cha ıne de caract eres

-->b=1;

-->a="cha ıne de caract eres";

-->printf(" pour afficher %d %s",b,a);pour afficher 1 cha ıne de caract eres

Des “interfaces utilisateurs” plus elaborees peuvent etre programmees avec des menus. L’aide enligne sur les commandesuimenu, addmenu, etc. donne quelques exemples pour demarrer.

4.2 Sauvegarde de resultats en binaire

A un moment donne, une sessionScilab dispose d’un certain nombre de donnees et de fonctions.Nous allons maintenant voir les differents moyens de sauvegarder et de recuperer ces donnees.

who : Pour en avoir la listesave : Pour sauver des variables dans un fichier.load : Pour recuperer des variables precedemment sauvees par save .clear : Pour effacer toutes ou une partie des variables.l’ exemple suivant de sauvegarde d’un vecteur illustre l’emploi des trois dernieres fonctions

-->a=[1:2:10] //d efinition du tableau aa =

! 1. 3. 5. 7. 9. !

-->// sauvegarde dans le fichier binaire ’tab_a’-->save(’tab_a’,a)

21

Page 22: Notice Scilab

-->clear a // effacement du tableau a

-->a // a n’existe plus!--error 4

undefined variable : a

-->// r ecup eration du tableau a sauv e dans ’tab_a’-->load(’tab_a’)

-->aa =

! 1. 3. 5. 7. 9. !

On peut sauvegarder, effacer, et recuperer l’ensemble d’une session en ne precisant aucune variabledans l’appel desave, clear et load .Attention ! les donnees sauvees de cette maniere ne peuvent etre relues que parScilab . Lesfichiers sont binaires et illisibles avec un editeur de texte. Pour faire communiquer des donneesavec un autre logiciel ou avec un editeur il faut utiliser des fichiersascii .

4.3 Fichiers ascii

On peut lire et ecrire dans des fichiersascii avec les commandesread etwrite dont la syntaxeest similaire a leurs homonymes en Fortran. Voyons dans l’exemple suivant comment relire lesdonnees stockees dans un fichier ascii “fichier.dat” contenant les lignes suivantes

31 2 3 45 6 7 89 10 11 12

La relecture se fera avec les instructions suivantes :

-->Nomfichier=’fichier.dat’-->fid = file(’open’,Nomfich,’old’);-->// Lecture du nombre de lignes sur le fichier-->N =read(fid,1,1);-->// Lecture des N lignes contenant chacune 4 valeurs-->// dans un tableau tmptmp = read(fid,N,4);

A l’inverse pour ecrire en “format libre” dans un fichier plusieurs enregistrements successifs, onpeut proceder de la maniere suivante

22

Page 23: Notice Scilab

N=3,M=4tmp=rand(N,M)fid = file(’open’,’NouveauFichier’,’new’);write(fid,N)write(fid,tmp)file (’close’,fid)

5 Sorties graphiques

5.1 La fenetre graphique

A l’aide du boutonGraphic Window x , on peut ouvrir plusieurs fenetres graphiques numeroteesScilabGraphicx x . Elles sont activees seulement une a la fois. Elles ont unebarre de menucomprenant quatre boutons :– 3D Rot : sert a positionner le point de vue a l’aide de la souris dansle cas de graphiques 3D

uniquement. Les coordonnees spheriques en cours sont indiquees en haut de la fenetre.– 2D Zoom : peut etre appele plusieurs fois de suite.– Unzoom : revient au graphique d’origine.– File : permet d’acceder au sous-menu suivant

– Clear : efface le graphique– Print : imprime directement vers une imprimante a selectionner.– Export : sauve le graphique dans un format utilisable en dehors deScilab (Postscript,

Postscript-Latex, Xfig)– Save : sauve le graphique dans un fichier dans le formatScilab . On pourra le recuperer,

toujours sousScilab , par la commandeload .– Close : ferme la fenetre.

Les parametres de graphique peuvent etre fixes par des parametres optionnels dans les appels auxdifferentes fonctions graphiques ou bien independamment par la fonctionxset

5.2 Les traces en 2 dimensions

• plot2d C’est la procedure de base pour representer une courbe dans un plan.

plot2d(x,y,[style,chaıne,legende,rectangle]) On ne detaille ici que les principales options. (Con-sulter l’aide en ligne pour une liste exhaustive.)– x, y sont les matrices de taille[npt,nc] contenant les abcisses et les ordonnees.nc est le

nombre de courbes etnpt le nombre de points - le meme pour toutes les courbes.– style est un vecteur de dimension(1,nc) . style(j) definit la maniere de representer la

courbe numeroj :si style(j) ≤ 0 on utilise des marqueurs de code-style(j) .si style(j) >0 on utilise des lignes pleines ou pointillees de couleurstyle(j)

23

Page 24: Notice Scilab

– cha ıne est une chaıne de trois caracteres"xyz"si x=1 la legende est affichee, elle est fournie dans l’argumentlegende sous la forme"legende1@legende2@...."y gere le cadrage :si y=0 les bornes courantes sont utilisees.si y=1 l’argumentrectangle est utilise pour redefinir les bornesrectangle=[xmin,ymin,xmax,ymax]si y=2 les bornes sont calculees a partir des valeurs extremes dex etyz gere l’entourage du graphique :z=1 pour avoir des axes graduesz = 2 pour avoir un cadre autour du graphique

• Trois exemples tres simples :Dans le premier,plot2d trace la courbey(x) en calculant automatiquement le repere.

x=[0:1:100];y=sin(2 * %pi * x/100);z=3 * y;plot2d (x,y,[1],’121’,’y(x)’);

Dans le deuxieme, le repere est impose par les valeurs decadre :

xbasc()cadre=[min(x),min(y),max(x),max(y)];plot2d(x,y,[1],’111’,’y(x)’,cadre);

Ceci permet, comme dans le troisieme exemple, de tracer plusieurs courbes dans le meme repered’axes, avec des appels aplot2d differents

xbasc()cadre = [min(x),min(min(y),min(z)),max(x),max(max(y), max(z))]plot2d(x,y,[1,1],’111’,’y(x)’,cadre);plot2d (x,z,[2,2],’111’,’z(x)’,cadre);

Ici la premiere courbe apparait en noir avec sa legende en position 1 - ( 3eme argument[1,1] ) etla deuxieme courbe est en bleu avec sa legende en position 2( 3eme argument[2,2] )L’appel xbasc() , efface la fenetre graphique sans la fermer. On obtient le meme resultat avecclear du menufile de la fenetre graphique.

• fplot2d est utilisee pour representer des courbes definies par untableau d’abcisses et unefonction.

24

Page 25: Notice Scilab

deff(’y=f(x)’,’y=sin(x)’)fplot2d(0:%pi/30:%pi,f)

• champ ouchamp1 pour representer un champ de vecteurs.• grayplot representation bidimensionnelle d’une matrice par des niveaux de gris.

t=-%pi:%pi/50:%pi;m=sin(t)’ * cos(t);grayplot(t,t,m);

Pour les formes geometriques• xsegs trace un ensemble de segments non relies.• xrect trace un rectangle.• xfrect remplit un rectangle.• xrects dessine et/ou remplit un ensemble de rectangles.• xpoly dessine une ligne brisee.• xpolys dessine un ensemble de lignes brisees.• xfpoly remplit un polygone.• xfpolys remplit un ensemble de polygones.• xarrows dessine un ensemble de fleches

Pour les chaines de caracteres

• xstring ecrit une chaine de caracteres• xstringl, xstringb pour encadrer une chaine de caracteres avec un rectangle.• xnumb ecrit des nombres.

5.3 Les graphiques dans l’espace

• plot3d pour representer graphiquement une matrice a trois dimensions :Dans l’appel le plus simple,plot3d(x,y,z) . x, y et z sont trois matrices etz contient lesvaleurs des points de coordonnees(x,y) .• param3d pour representer des courbes parametrees en trois dimensions.• contour pour les courbes de niveaux d’une fonction 3d donnee par unematrice.• fec pour les courbes de niveaux d’une fonction donnee par ses valeurs nodales sur un maillagetriangulaire.

Pour conclure ce paragraphe, si vous etes tres satisfaitsde vos calculs et de leur representationgraphique, vous aurez envie de les imprimer. On peut le fairepar le menufile , puis le sous-menuprint de la fenetre graphique. On peut aussi sauver le graphique dans un fichierpostscript ,par le sous menuexport defile , ce qui permet de l’imprimer ou de le visualiser ulterieurementet aussi de l’inserer dans un rapport.

25

Page 26: Notice Scilab

Instruction Description

plot2d(x,y) trace de la courbe passant par les points(x,y)

plot2d1(’oll’,x,y) idem avec echelle logarithmique sur les deux axes

fplot2d(x,f) trace de la courbe(x,f(x))

champ(x,y,fx,fy) trace du champ de vecteurs(fx(x,y),fy(x,y))

plot3d(x,y,z) trace de la surface passant par les points(x,y,z)

param3d(x,y,z) trace de la courbe parametree passant en(x,y,z)

contour(x,y,z,n) trace den courbes de niveau d’une surface

histplot(n,data) histogramme de l’echantillondata divise enn classes

xbasc() effacement des fenetres graphiques

xset() modification des options graphiques

xsetech([x1,y1,x2,y2]) decoupage d’une fenetre graphique

xstring(x,y,’coucou’) inscription de caracteres sur une figure

TAB. 5 – Principales instructions graphiques

Bibliographie

Documentation en francais disponible sur internet :

• SiteScilab : http ://www.scilab.org• Ce document en format Postscript et PDF : http ://www.ann.jussieu.fr/˜postel• Le support du coursScilab LM206 http ://www.ann.jussieu.fr/ dumas/lm206.html• Un coursMatlab http ://www.ann.jussieu.fr/ postel/matlab/•Des exemples de scriptsScilab pour les equations differentielles ordinaires http ://www.ann.jussieu.fr/ pos-tel/EDO/

Des livres

• Modelisation a l’oral de l’Aggregation. Calcul Scientifique. Laurent Dumas, collection CAPES/ Agregation, Ellipses, Paris (2000).• Introduction aScilab . Exercices pratiques corriges d’algebre lineaire. Allaire, G., Kaber, S.M.,Ellipses, Paris (2002).• Cours d’Algebre Lineaire Numerique. Allaire, G., Kaber, S.M. Ellipses, Paris (2002).• Methodes d’approximation -Equations differentielles - Applications Scilab. NiveauL3. Guerre-Delabriere, S., Postel, M. Ellipses, Paris (2004).

Merci d’envoyer vos remarques et suggestions sur ce document par email a

26

Page 27: Notice Scilab

postel @ann.jussieu.fr

27