AccueilđŸ‡«đŸ‡·Chercher

Scilab

Scilab (prononciation : [saÉȘləb] contraction de Scientific Laboratory en anglais) est un logiciel libre de calcul numĂ©rique multi-plateforme fournissant un environnement de calcul pour des applications scientifiques. Il possĂšde un langage de programmation orientĂ© calcul numĂ©rique de haut niveau. Il peut ĂȘtre utilisĂ© pour le traitement du signal, l’analyse statistique, le traitement d’images, les simulations de dynamique des fluides, l’optimisation numĂ©rique, et la modĂ©lisation et simulation de systĂšmes dynamiques explicites et implicites.

Il est disponible pour Windows, MacOS, GNU/Linux et BSD.

La syntaxe et les possibilitĂ©s offertes par Scilab sont similaires Ă  celles de MATLAB, mais les deux logiciels ne sont pas compatibles bien qu’un traducteur de MATLAB vers Scilab existe[2].

Historique

Le projet est né à l'Inria en 1982 sous le nom de Blaise, à partir de Matlab[3] - [4]. Il s'agit donc initialement d'une surcouche de Fortran permettant une programmation structurée, la syntaxe étant proche du Pascal. L'Inria fonde en 1984 une jeune-pousse, Simulog, pour commercialiser le produit sous le nom de Basile.

Dans les annĂ©es 1990, Simulog cesse la distribution de Basile et le projet, alors baptisĂ© Meta2, devient le fruit d'une collaboration de chercheurs de l'Inria et de l’Ecole Nationale des Ponts et ChaussĂ©es. La premiĂšre version de Scilab, nommĂ©e alors Κlab[5] (Psilab, mĂȘme prononciation), est mise Ă  disposition en 1994. Le dĂ©veloppement de Scicos commence Ă  la mĂȘme Ă©poque, en tant que boĂźte Ă  outils graphique.

En 1998, un ancien doctorant du projet Meta2, Habib Jreige, fonde la jeune pousse Saphir-Control pour fournir une assistance aux entreprises privées utilisant Scilab.

L'équipe Metalau est fondée en 2000 pour développer un traducteur Matlab/Scilab et assurer l'intégration de bibliothÚques graphiques orientées objet, et en particulier d'une interface graphique en Java.

DĂ©but 2003, l'Inria dĂ©cide de crĂ©er le Consortium Scilab, avec le soutien de sociĂ©tĂ©s et d’organisations acadĂ©miques pour faire face Ă  l’augmentation du nombre de personnes tĂ©lĂ©chargeant et utilisant Scilab et assurer son avenir et son dĂ©veloppement. En 2005, le Consortium Scilab dĂ©cide de se tourner vers un dĂ©veloppement Java ; l'Ă©quipe Metalau dĂ©cide de rester sur la technologie Gtk et crĂ©e donc une scission (fork) appelĂ©e ScilabGtk basĂ©e sur Scilab 4 ; ce projet sera renommĂ© ScicosLab.

Dans la lignĂ©e d'un dĂ©veloppement industriel, le Consortium Scilab intĂšgre la Fondation de coopĂ©ration scientifique Digiteo en pour fournir un environnement propice Ă  la croissance soutenue de l’opĂ©ration et prĂ©parer son transfert progressif vers une structure privĂ©e.

Ainsi en , Scilab Enterprises est créée sur le modÚle économique Open Source classique pour assurer le développement du logiciel Scilab gratuit basé sur un code ouvert et proposer des services professionnels payants. A partir de , le logiciel Scilab est hébergé par Scilab Enterprises.

En 2015, l'Inria et OCamlPro mettent en place un projet commun d'interpréteur en OCaml nommé Scilint. Cela donne naissance à Sciweb, un interpréteur expérimental accessible par un navigateur web, bien qu'incomplet et plus lent[6]. Jamais publié, Sciweb est à la base de Scilab Cloud développé et commercialement exploité par Scilab Enterprises puis ESI.

En février 2017, ESI group fait l'acquisition de Scilab Enterprises et intÚgre son équipe opérationnelle. Depuis février 2019 (Scilab 6.0.2), la version MacOS de Scilab est construite et distribuée par l'UTC.

En août 2022, Scilab est acquis par Dassault SystÚmes[7].

Licence

DistribuĂ© gratuitement et avec son code source via Internet depuis 1994, il est disponible prĂ©compilĂ© pour un grand nombre d’architectures. NĂ©anmoins, il ne s’agissait ni d’un logiciel Open source selon l’Open Source Initiative ni d’un Logiciel libre. En effet, l’ancienne licence Scilab[8] n’autorise pas la distribution commerciale d’une version modifiĂ©e. Selon la classification de la FSF, il s’agissait donc plutĂŽt d’un logiciel semi-libre[9]. Scilab est donc devenu un logiciel libre lors du changement de licence : il est distribuĂ© sous la licence CeCILL v2 Ă  partir de la version 5.0, licence libre compatible GNU GPL[10]. Les versions 6.0 et ultĂ©rieures sont distribuĂ©es sous licence GNU GPL [11].

PrĂ©sentation succincte de l’utilisation

Scilab peut exĂ©cuter des instructions en ligne de commande, ainsi que des fichiers de commande (scripts) contenant des instructions (format texte). On peut exĂ©cuter des programmes Fortran ou C Ă  partir de Scilab. Il est Ă©galement possible d'utiliser le moteur de Scilab depuis une application externe grĂące Ă  l'API call_scilab. Scilab est complĂ©tĂ© par un environnement graphique Xcos (basĂ© sur Scicos) comparable Ă  l’environnement graphique Simulink fourni avec Matlab.

Syntaxe élémentaire en ligne de commande

L’invite de la ligne de commande (prompt) est constituĂ©e d’une « flĂšche » : deux tirets et un signe supĂ©rieur -->. L’instruction est tapĂ©e puis validĂ©e avec la touche de retour chariot (Enter, Return). Le rĂ©sultat est affichĂ© Ă  la suite, sauf si la ligne se termine par un point-virgule auquel cas le rĂ©sultat est cachĂ©. Par exemple :

-->a = 1;
-->A = 2;
-->a + A
 ans =
 
 3.

La premiĂšre commande associe la valeur « 1 » Ă  la variable « a » (rĂ©sultat cachĂ©), la seconde commande associe la valeur « 2 » Ă  la variable « A » (la syntaxe est sensible Ă  la casse), la troisiĂšme commande calcule la somme des deux (ans est l’abrĂ©viation de answer qui signifie « rĂ©ponse » en anglais).

On peut Ă©crire plusieurs instructions sur la mĂȘme ligne en les sĂ©parant d’une virgule, ou d’un point-virgule si l’on ne veut pas en afficher le rĂ©sultat. On peut aussi mettre une instruction sur plusieurs lignes (par exemple pour des raisons de prĂ©sentation) en mettant trois points « ... » avant de presser la touche de retour chariot.

Scilab utilise les fonctions et opĂ©rateurs classiques (+, -, *, /, ^ ou **, sqrt() pour la racine carrĂ©e, cos() pour le cosinus, int() pour la partie entiĂšre, round() pour l’arrondi au plus proche, abs() pour la valeur absolue
) et quelques autres (par exemple rand pour avoir un nombre alĂ©atoire entre 0 et 1). La fonction who affiche les variables dĂ©clarĂ©es. La variable ans contient le dernier rĂ©sultat.

Le sĂ©parateur dĂ©cimal est le point. Pour entrer l’imaginaire i, il faut utiliser %i ; il figure simplement sous la forme « i » dans les rĂ©sultats. Pour entrer l’infini ∞, il faut utiliser %inf ; il figure simplement sous la forme « inf » dans les rĂ©sultats. La valeur de π s’obtient par %pi, et la constante de Neper e par %e.

Booléens

Lorsque l’on assigne une valeur boolĂ©enne, on utilise %T pour « vrai » (true) et %F pour « faux » (false). Le rĂ©sultat de l’opĂ©ration affichĂ© est respectivement T ou F.

L’opĂ©rateur Ou est notĂ© « | » (tube), Et est notĂ© « & » (esperluette), Non est notĂ© « ~ » (tilde). Exemple

-->(%T & %F) | %F
ans =
 
F.

Un boolĂ©en peut Ă©galement s’obtenir en comparant deux valeurs, avec les relations d’égalitĂ© == et de diffĂ©rence <> ou ~=, et les relations d’ordre <, <=, > et >=.

PolynĂŽmes et fractions rationnelles

Il s’agit ici non pas de fonctions polynomiales qui ne permettraient que leur Ă©valuation numĂ©rique, mais de polynĂŽmes formels.

La dĂ©claration d’un polynĂŽme se fait avec deux fonctions. La premiĂšre fonction, x = poly(0, "x") qui dĂ©finit « x » comme l’indĂ©terminĂ©e d’un polynĂŽme, puis l’énoncĂ© du polynĂŽme utilisant cette indĂ©terminĂ©e. Exemple

-->x = poly(0, "x"); p = x ^ 2 + 2 * x + 1
p =
 
          2
1 + 2x + x

La fonction roots(p) donne les racines du polynĂŽme p, la fonction coeff(p) donne une matrice dont les coefficients sont les coefficients du polynĂŽme p. La fonction varn(p) renvoie le nom de l’indĂ©terminĂ©e de p (ici, x).

En fait, la commande x = poly(0, "x") dĂ©finit que x est le polynĂŽme le plus simple dont l’indĂ©terminĂ©e est le caractĂšre « x » et dont la racine est 0, c’est-Ă -dire le monĂŽme x. La commande x = poly(2, "x") dĂ©finit de mĂȘme le polynĂŽme le plus simple ayant pour racine 2, c’est-Ă -dire x - 2.

Cette fonction permet de dĂ©finir un polynĂŽme ayant plusieurs racines, en utilisant une matrice ligne au lieu d’un simple nombre. Par exemple, x=poly([1 2], "x") dĂ©finit le polynĂŽme le plus simple ayant pour racines 1 et 2, soit le polynĂŽme x2 - 3x + 2.

On peut aussi utiliser cette fonction pour gĂ©nĂ©rer un polynĂŽme dont les coefficients sont contenus dans une matrice ligne, en ajoutant le caractĂšre 'c' Ă  la fin des arguments. Par exemple, x = poly([a0, a1, 
, an], "x", "c") dĂ©finit le polynĂŽme a0 + a1·x +
 + an·xn.

Scilab gĂšre de la mĂȘme maniĂšre les fractions rationnelles. Il suffit de dĂ©clarer un monĂŽme avec poly() et dĂ©finir ensuite la fraction rationnelle. Exemple

-->x = poly(0, "x"); f = (1 + x) / (1 - x)
f = 
 
1 + x
-----
1 - x
 
-->1/f
ans =
 
1 - x
-----
1 + x

Pour avoir le numĂ©rateur de ƒ, il suffit de taper f.num ; le dĂ©nominateur de ƒ s’obtient avec f.den.

La fonction derivat(p) donne la dĂ©rivation formelle du polynĂŽme ou d’une fraction rationnelle p. La fonction simp(q) fait la simplification de la fraction rationnelle q.

L’utilisation du polynîme ou d’une fraction rationnelle en tant que fonction se fait par la fonction horner[alpha 1] : horner(p,2) calcule p(2).

CaractĂšre

Les caractÚres isolés ou les chaßnes de caractÚres sont notés entre apostrophes simples, ou bien entre guillemets doubles : 'abc' ou "abc".

L’apostrophe indique la fin d’une chaĂźne ; pour mettre une apostrophe dans une chaĂźne, il faut en Ă©crire deux accolĂ©es '', et pour y mettre un guillemet double, il faut Ă©galement en Ă©crire deux accolĂ©s "".

L’addition + sur des chaĂźnes de caractĂšres produit la concatĂ©nation. Une chaĂźne de caractĂšre peut ĂȘtre Ă©valuĂ©e, c’est-Ă -dire transformĂ©e en commande Scilab, par la fonction evstr().

Matrices

Scilab a Ă©tĂ© conçu pour le calcul matriciel. Toutes les fonctions s’appliquent Ă  des matrices ; par exemple si M est une matrice, alors log(M) sera la matrice dont les coefficients sont les logarithmes des coefficients de M. Les Ă©lĂ©ments des matrices peuvent ĂȘtre de tout type (nombre rĂ©el, nombre complexe, boolĂ©en, polynĂŽme, fraction rationnelle, chaĂźne de caractĂšres
).

Pour dĂ©finir une matrice Ă  partir de ses coefficients, on les place entre deux crochets [
]. Les Ă©lĂ©ments d’une ligne sont sĂ©parĂ©s d’une espace ou d’une virgule, les lignes sont sĂ©parĂ©es d’un point-virgule. À l’affichage, la matrice est reprĂ©sentĂ©e comme un tableau sans encadrement (sauf les matrices de chaĂźnes de caractĂšres qui sont encadrĂ©es par des points d’exclamation). Par exemple :

-->[1, 2, 3 ; 0, 1, 0 ; 0, 0, 1]
ans =
 
 1. 2. 3. 
 0. 1. 0. 
 0. 0. 1.

La matrice vide est notĂ©e par []. L’expression M(i,j) dĂ©signe l’élĂ©ment (i, j) de la matrice M. Le caractĂšre : (deux-points) signifie « tous les indices », par exemple M(1, :) est la premiĂšre ligne de la matrice (c’est un vecteur ligne). Le caractĂšre $ (dollar) dĂ©signe le dernier indice (ligne ou colonne) d’une matrice.

L’expression N1:N' permet de gĂ©nĂ©rer une matrice-ligne dont le premier coefficient est N1, le dernier est infĂ©rieur ou Ă©gal Ă  N', et le pas entre les coefficients est 1. L’expression N1:pas:N2 permet de gĂ©nĂ©rer une matrice-ligne en choisissant le pas. Par exemple

-->1.1:5.2
ans = 
 
! 1.1 2.1 3.1 4.1 5.1 !
 
--> 1:2:5
ans =
 
! 1 3 5 !
-->"a":"d"
ans =
 
abcd

La fonction zeros(m,n) crĂ©e une matrice m×n remplie de 0 ; la fonction ones(m,n) crĂ©e une matrice m×n remplie de 1. La fonction eye(n,n) crĂ©e une matrice unitĂ© n×n. On peut aussi passer une matrice M en paramĂštre de ces fonctions ; elles crĂ©ent alors une matrice de mĂȘme dimension que la matrice M. Par exemple, M = zeros(M) met tous les coefficients de M Ă  zĂ©ro.

Si ƒ est une fonction extĂ©rieure (c’est-Ă -dire dĂ©finie par deff ou par function, voir ci‐aprĂšs), et que x et y sont des vecteurs, alors la fonction feval permet de bĂątir une matrice z = ƒ(x, y)

z = feval(x, y, f) : on a z(i, j) = ƒ(x(i), y(j))

La fonction size(M) renvoie la taille de la matrice sous la forme d’une matrice 2×1 contenant le nombre de lignes puis le nombre de colonnes.

Les opérations spécifiques aux matrices classiques sont :

  • la transposition : il suffit de mettre un point suivi d'une apostrophe .’ aprĂšs la matrice ; l'utilisation de l'apostrophe seule ' fait la transposition de la matrice conjuguĂ©e (opĂ©rateur adjoint) ;
  • le produit de matrices : * ;
  • produit et rapport Ă©lĂ©ment par Ă©lĂ©ment : .* et ./ ;
  • le produit tensoriel .*. ;
  • le dĂ©terminant d’une matrice carrĂ©e M : det(M) (determ() pour une matrice de polynĂŽmes et detr() pour une matrice de fraction rationnelle) ;
  • la trace d’une matrice carrĂ©e M : trace(M) ;
  • l’inverse d’une matrice inversible M : inv(M).

Un vecteur est une matrice ligne ou colonne (matrice 1 × n ou n × 1) ; l’expression V(i) dĂ©signe la composante i du vecteur V. Si V1 et V2 sont des vecteurs colonnes, alors le produit scalaire est V1.' * V2 ; si ce sont des vecteurs lignes, le produit scalaire est V1 * V2.'.

Calcul numérique

Scilab peut effectuer des calculs numériques.

On peut en faire une utilisation triviale comme calculatrice, en entrant simplement les opérations à effectuer.

La fonction deff permet de dĂ©finir de nouvelles fonctions (appelĂ©es « fonctions externes ») pouvant s’exprimer avec les opĂ©rateurs dĂ©jĂ  prĂ©dĂ©finis (les « fonctions primitives »). On passe deux chaĂźnes de caractĂšres comme paramĂštre ; la premiĂšre indique le nom de la fonction et les variables utilisĂ©es en entrĂ©e et en sortie, et la deuxiĂšme indique la formule. Par exemple, la fonction

ƒ(x) = 2 · x

peut se définir par

deff("[y] = f(x)", "y = 2 * x")

(voir aussi la section Programmation).

Intégration
integrate("expression", "x", x0, x1) calcule numĂ©riquement l’intĂ©grale de la fonction dĂ©crite par expression (c’est une chaĂźne de caractĂšres interprĂ©table par Scilab, comme "sin(x)"), x Ă©tant la variable d’intĂ©gration, entre les valeurs x0 et x1.
RĂ©solution d’équations
Scilab dispose de plusieurs primitives permettant la rĂ©solution d’équations (voir Solveur d'Ă©quations), entre autres :
  • linsolve : rĂ©solution d’un systĂšme d'Ă©quations linĂ©aires,
    syntaxe : [x0, kerA] = linsolve(A, b)
    oĂč A est la matrice rĂ©elle des coefficients du systĂšme d’équations, et b un vecteur de constantes ; les solutions de A × x + b = 0 sont de la forme x0 + w × kerA, w Ă©tant un rĂ©el arbitraire ;
  • solve : rĂ©solution symbolique d'un systĂšme linĂ©aire,
    syntaxe : w = solve(A, b)
    oĂč A est une matrice triangulaire supĂ©rieure de caractĂšres (les coefficients du systĂšme d’équation), b est un vecteur de caractĂšres (la partie Ă  droite des signes Ă©gal), et w est la matrice rĂ©sultat de A × w = b ;
  • ode : rĂ©solution d’une Ă©quation diffĂ©rentielle ordinaire (ordinary differential equation) ; si l’équation diffĂ©rentielle est dy/dt = ƒ(t), alors ƒ ayant Ă©tĂ© dĂ©finie (fonction externe), la syntaxe pour dĂ©terminer y(t) est
    y = ode(y0, t0, t, f)
    oĂč y0 et t0 sont les valeurs initiales du systĂšme, t est un vecteur de valeurs pour lesquelles on calcule les solutions, et y est le vecteur de solutions (plot(t, y) permet de tracer le graphique des solutions) ;
    la primitive ode admet des arguments permettant de rĂ©soudre des situations spĂ©cifiques : "roots" pour rajouter une Ă©quation g(t, y) = 0, "discrete" pour calculer de maniĂšre rĂ©cursive y(k + 1) = ƒ(k, y(k)) Ă  partir d’un Ă©tat initial y(k0).
Il existe d’autres primitives pour des systĂšmes spĂ©cifiques.

Tracé 2D

Le tracĂ© d’une fonction se fait en deux Ă©tapes

  1. dĂ©finir l’étendue de la variable abscisse et le pas, sous la forme d’un vecteur colonne, par exemple x = [dĂ©but:pas:fin]' ;
  2. tracer la fonction avec la commande plot(x, f(x)) si ƒ est la fonction.

On peut tracer simultanément plusieurs fonctions en les mettant dans une matrice, par exemple plot(x, [f1(x) f2(x) f3(x)]).

On note en fait que ƒ(x) est elle-mĂȘme un vecteur. On peut de maniĂšre gĂ©nĂ©rale dĂ©finir un vecteur des valeurs de x et un vecteur des valeurs de y, et la fonction plot(x, y) tracera le nuage de points.

Si ƒ est une fonction externe (par exemple dĂ©finie avec deff, voir ci-dessus, ou function, voir ci-aprĂšs), alors on peut tracer directement la fonction avec fplot2d(x, f). On peut aussi dĂ©finir y par y = feval(x, f), puis tracer avec plot(x,y).

La fonction xgrid permet d’afficher une grille correspondant aux graduations.

Les fonctions plot2di, utilisĂ©es Ă  la place de plot, permettent de faire varier l’apparence gĂ©nĂ©rale du tracĂ© :

  • plot2d : trait « normal » ; identique Ă  plot, mais permet l’utilisation de marqueurs ;
  • plot2d2 : trait en escalier ;
  • plot2d3 : tracĂ© en barres ;
  • plot2d4 : tracĂ© en « flĂšches » (pour un champ de vecteurs) ;

Ces fonctions plot2di acceptent des arguments modifiant le tracé, sous la forme plot2di(x, y, arguments). Les arguments sont de la forme mot-clef = valeur, et sont séparés par des virgules.

Pour placer des marqueurs, on utilise l’argument style = n ou n est un entier positif ou nĂ©gatif (par exemple plot2d(x, y, style = 1)) ; un nombre nĂ©gatif remplace les points par des marqueurs (une Ă©toile pour -10, des ronds pour -9, 
, des petits points pour 0, la liste s’obtient en tapant la commande getsymbol) et un nombre positif indique un trait plein mais de couleur dĂ©terminĂ©e (selon la carte de couleur dĂ©finie, voir ci-aprĂšs).

Si le tracĂ© comporte plusieurs courbes (donc mis dans une matrice ligne Y), l’argument style est une matrice, la valeur de chaque Ă©lĂ©ment indiquant le style de chaque courbe, par exemple

Y = [cos(x), sin(x)]; plot2d(x, Y, style = [-2, -1])

On peut utiliser la commande legend() pour inscrire des légendes, par exemple

legend("cosinus", "sinus")

Pour une Ă©chelle logarithmique, on utilise l’argument logflag = type oĂč type est une chaĂźne de deux caractĂšres, « n » (pour normal) ou « l » (pour logarithmique), le premier caractĂšre correspondant Ă  l’axe des x et le second Ă  l’axe des y. Par exemple

  • plot2d(x, y, logflag = "nl") pour un axe des x linĂ©aire et un axe des y logarithmique ;
  • plot2d(x, y, logflag = "ll") pour avoir deux Ă©chelles logarithmiques.

On peut choisir le type d’axe avec l’argument axesflag = n oĂč n est un entier positif : 0 pour ne pas avoir d’axe, 1 pour des axes « classiques » se recoupant en bas Ă  droite, 4 pour des axes « classiques » se coupant au centre, 5 pour des axes se coupant en (0, 0)


On peut dĂ©finir le nombre de graduations et de sous‐graduations des axes avec l’argument nax = [nx, Nx, ny, Ny] oĂč Nx est le nombre de graduations de l’axe x, nx le nombre de sous-graduations


L’argument rect = [xmin, ymin, xmax, ymax] permet de limiter le tracĂ© Ă  la zone comprise dans le rectangle dĂ©fini par les valeurs dans la matrice.

La fonction polarplot réalise un tracé en coordonnées polaires. La fonction r(theta) se trace par la commande :

polarplot(theta,r)

oĂč r et theta sont deux matrices de mĂȘme dimension.

Carte d’un champ

Si x est un vecteur colonne de m Ă©lĂ©ments, y un vecteur colonne de n Ă©lĂ©ments et z une matrice m × n, alors la fonction

grayplot(x, y, z)

va associer une couleur à chaque valeur de z et tracer une carte de couleurs, chaque point (x(i), y(j)) ayant la couleur associée au coefficient z(i, j).

Les niveaux de couleur sont indiqués par la fonction

xset('colormap', cmap)

oĂč cmap est une matrice de trois colonnes dont chaque ligne contient la couleur associĂ©e Ă  un niveau, sous la forme RVB (les Ă©lĂ©ments de la matrice allant de 0 Ă  1). La premiĂšre ligne de la matrice correspond au plus bas niveau, la derniĂšre ligne au plus haut. Cette matrice peut ĂȘtre gĂ©nĂ©rĂ©e de maniĂšre automatique par les fonctions 
colormap, par exemple graycolormap(n) (n niveaux de gris entre le noir et le blanc), jetcolormap(n) dĂ©gradĂ© entre le bleu et le rouge) ou hotcolormap(n) (dĂ©gradĂ© entre le rouge et le jaune).

On peut par exemple utiliser xset("colormap", graycolormap(32)) pour avoir 32 niveaux de gris. On peut réaliser un dégradé du noir vers le rouge avec

cmap = graycolormap(32); cmap(:, 2:3) = 0

ou avec

r = linspace(0, 32, 32)'; cmap = [r zeros(32, 2)]

et un dégradé du bleu vers le blanc avec

cmap = graycolormap(32); cmap(:, 2:3) = 1

ou avec

r = linspace(0, 32, 32)'; cmap = [r ones(32, 2)]

Les niveaux de couleur sont Ă©galement utilisĂ©s lorsque l’on trace plusieurs courbes sur le mĂȘme graphique. Dans ce cas-lĂ , des dĂ©gradĂ©s ne fournissent pas un contraste permettant de distinguer facilement des courbes voisines ; on peut obtenir les niveaux de couleur par dĂ©faut avec get(sdf(), "color_map").

On peut tracer une courbe de niveaux avec la fonction

contour2d(x, y, z, n)

oĂč n est le nombre de niveaux que l’on veut voir figurer ; on peut aussi donner les valeurs des niveaux z1, z2, 
, zn par un vecteur

contour2d(x, y, z, [z1, z2, 
, zn])

On peut Ă©galement tracer un champ de vecteurs. Pour cela, il faut une matrice vx ayant les composantes selon x du champ de vecteur, une matrice vy ayant les composantes selon y de ce champ, et utiliser la fonction

champ(x, y, vx, vy)

Avec la fonction champ1, les vecteurs tracĂ©s ont tous la mĂȘme longueur, la norme du champ est indiquĂ©e par la couleur du vecteur, suivant le principe exposĂ© pour grayplot.

Tracé 3D

Scilab permet Ă©galement le tracĂ© de surfaces Ă  trois dimensions (x, y, z). Si x est une matrice colonne de m Ă©lĂ©ments, y une matrice colonne de n Ă©lĂ©ments, et z une matrice m × n, alors la fonction

plot3d(x, y, z)

va tracer la surface des points (x(i), y(j), z(i, j)). S’il s’agit d’une surface reprĂ©sentative d’une fonction ƒ, on a

z(i, j) = f(x(i), y(j)).

Si ƒ est une fonction « externe » (par exemple dĂ©finie par deff ou function), on peut dĂ©finir z avec la fonction feval (voir plus haut), ou bien utiliser fplot3d(x, y, f).

La fonction param3d(fx(t), fy(t), fz(t)) trace la courbe paramétrique ; t est un vecteur contenant les valeurs successives du paramÚtre.

Les fonctions plot3d1, fplot3d1 et param3d1 permettent d’utiliser des niveaux de couleurs pour indiquer la valeur de z. L’utilisation est identique Ă  celle de plot3d, mais les niveaux de couleur sont indiquĂ©s par la fonction

xset("colormap", cmap)

(voir ci-dessus).

Le point de vue de la surface 3D est dĂ©fini par deux angles en degrĂ©s, Ξ, rotation autour de l’axe des Z, et α, rotation autour de l’axe des Y (voir aussi Angles d'Euler) : plot3d(x, y, z, theta, alpha), param3d(x, y, z, theta, alpha)
 ;

  • plot3d(x, y, z, 0, 0) donne une vue de dessus, semblable aux cartes 2D, projection de la surface sur le plan XY selon l’axe Z ;
  • plot3d(x, y, z, 90, 0) donne une vue de face, projection de la surface sur le plan XZ selon l’axe Y ;
  • plot3d(x, y, z, 0, 90) donne une vue de cĂŽtĂ©, projection de la surface sur le plan YZ selon l’axe X ;
  • plot3d(x, y, z, 45, 45) est la vue par dĂ©faut, de type perspective isomĂ©trique.

On peut également définir les limites des axes avec le mot-clef ebox :

  • plot3d(x, y, z, ebox=[xmin, xmax, ymin, ymax, zmin, zmax])
  • plot3d(x, y, z, theta, alpha, ebox=[xmin, xmax, ymin, ymax, zmin, zmax])

Représentation de données statistiques

Si x est un vecteur, la fonction histplot(n, x), n Ă©tant un entier, va dĂ©couper l’intervalle de valeurs prises par les coefficients de x en n tranches d’égale largeur, et tracer l’histogramme de rĂ©partition des valeurs selon ces tranches. Si n est un vecteur dont les coefficients sont strictement croissants, les valeurs des coefficients de n servent Ă  dĂ©terminer les tranches.

Si x est une matrice, hist3d(x) trace un histogramme 3D tel que le parallĂ©lĂ©pipĂšde situĂ© en (i, j) a pour hauteur x(i, j). Comme pour toutes les fonctions de tracĂ© en trois dimensions, on peut dĂ©finir l’angle de vue avec Ξ et α.

Dessin

Il est possible de dessiner directement des figures géométriques sur le graphique.

La fonction xpoly(x, y, "lines", 1) permet de tracer un polygone fermĂ©, x Ă©tant la liste des abscisses des sommets (sous la forme d'un vecteur ou d'une matrice) et y Ă©tant la liste des ordonnĂ©es des sommets (c'est une matrice de mĂȘme dimension que x). La fonction xfpoly(x, y, "lines", 1) permet de tracer un polygone rempli.

La fonction xrect(x, y, l, h) trace un rectangle dont le point en haut Ă  gauche est (x, y), de largeur l et de hauteur h. La fonction xfrect(x, y, l, h) trace un rectangle rempli.

La fonction xstring(x, y, "chaĂźne") Ă©crit la chaĂźne de caractĂšre chaĂźne sur le graphique, le point en bas Ă  gauche du texte Ă©tant au point (x, y).

La fonction xarc(x, y, l, h, a1, a2) trace un arc d'ellipse compris dans le rectangle dont le point en haut Ă  gauche est (x, y), de largeur l et de hauteur h. Chaque degrĂ© d’angle est divisĂ© en 64 secteurs, l’arc part de l'angle trigonomĂ©trique a1 × 64° et va jusqu'Ă  l'angle (a1 + a2) × 64°. La fonction xfarc(x, y, l, h) trace un arc d'ellipse rempli.

Pour changer les propriĂ©tĂ©s des traits des dessins, il faut utiliser la commande set("propriĂ©tĂ©", valeur). Les principales propriĂ©tĂ©s d’un objet sont :

  • line_style : type de trait ; c’est un entier, 0 pour un trait plein, 2 pour des pointillĂ©s longs, trois pour des pointillĂ©s courts, 4 pour un trait d’axe (alternance trait‐point)

  • thickness : Ă©paisseur du trait, sous la forme d’un entier positif ;
  • mark_size : dans le cas d’un tracĂ© par marqueurs, taille des marqueurs.

On peut aussi associer une variable Ă  l’élĂ©ment dessinĂ© ; cela se fait avec la fonction
variable = get("hdl")
hdl signifiant handle (littĂ©ralement « poignĂ©e », intermĂ©diaire d’action). Pour dĂ©finir la propriĂ©tĂ© de cet Ă©lĂ©ment, on fait

variable.propriété = valeur

Ces deux mĂ©thodes sont valables quel que soit l’objet (courbe, polygone, arc d’ellipse
).

Par exemple

xarc(0, 1, 0.5, 0.5, 0, 360*64) // ellipse
set("line_style", 2) // pointillés

ou bien

xarc(0, 1, 0.5, 0.5, 0, 360*64) // ellipse
a=get("hdl")
a.line_style=2 // pointillés

Mise en forme, axes et fenĂȘtrage

La fonction xset permet de dĂ©finir l’apparence :

  • police des graduations et titres : xset("font", type, taille), oĂč
    • taille est un nombre dĂ©signant la taille des caractĂšres, en unitĂ© arbitraire ;
    • type est un nombre dĂ©signant le type de police : 1 pour les lettres grecques (police Symbol), 2–5 pour une police avec empattements type Times (2 pour des lettres romanes, 3 en italique, 4 en gras, 5 en gras italique) ; 6–9 pour une police sans empattement type Arial (6 pour des lettres romaines, 7 en italique, 8 en gras, 9 en gras italique) ;
  • Ă©paisseur des traits d’axe et du tracĂ© : xset("thickness", e) oĂč e est un nombre dĂ©signant l’épaisseur en unitĂ© arbitraire ;
  • taille des marqueurs (le cas Ă©chĂ©ant, voir ci-aprĂšs) avec xset("mark size", taille).

Comme pour tous les objets graphiques, on peut changer les propriétés des axes en les affectant à une variable par la commande var = get("current_axes"). Les principales propriétés sont :

  • x_location et y_location : prennent les valeurs "top", "middle" ou "bottom" selon que l’on veut que l’axe soit en haut, passe par l’origine, ou soit en bas ;
  • isoview : vaut 'on' si l’on veut que les Ă©chelles soient identiques sur les axes, "off" si l’échelle est libre ;
  • sub_ticks : matrice [nx, ny] oĂč nx et ny est le nombre de sous-graduations (il faut 4 sous-graduations pour que la graduation principale soit divisĂ©e en 5) ;

Exemple :

a = get("current_axes")
a.x_location = "middle"
a.y_location = "middle"
a.isoview = "on"
a.sub_ticks = [4,4]

On peut placer plusieurs tracĂ©s cĂŽte Ă  cĂŽte avec l’instruction subplot :

subplot(m, n, i) place le tracĂ© qui suit l’instruction dans la ie case (dans l’ordre de lecture europĂ©en) d’un tableau m × n ; le tracĂ© peut comporter plusieurs instructions plot, xset, xtitle.

La fonction xtitle("nom du graphique", "axe des x", "axe des y") met un titre au graphique et aux axes. La fonction titlepage("titre") met un titre au milieu du graphique. La fonction clf efface la fenĂȘtre graphique.

Exemple

Exemple de graphique obtenu avec Scilab

Voici le graphique que l’on obtient avec les instructions ci-dessous.

clear; clf;
deff("[z] = f(x, y)", "z = sin(x) * cos(y)")
xset("colormap", jetcolormap(32))
x = %pi * [-1:0.05:1]';
y = x;
z = feval(x, y, f);
subplot(2, 2, 1)
grayplot(x, y, z)
subplot(2, 2, 2)
contour2d(x, y, z, 5)
subplot(2, 2, 3)
plot3d1(x, y, z, 0, 90)
subplot(2, 2, 4)
plot3d1(x, y, z, 70, 70)

Programmation

On peut mettre les instructions Scilab dans un fichier texte portant l'extension de nom de fichier .sce. On parle alors de script Scilab.

Scilab accepte un certain nombre d’instructions :

  • exĂ©cution conditionnelle if condition then, 
, else, 
, end
  • boucle itĂ©rative for variable = dĂ©but : fin, 
, end ou for variable = dĂ©but : pas : fin, 
, end
  • boucle itĂ©rative antĂ©conditionnĂ©e : while condition do, 
, end ou while condition do, 
, else, 
, end

Il est possible de définir des fonctions avec passage de paramÚtres. La fonction est un sous-programme avec ses variables propres, et qui peut contenir des boucles, des branchements conditionnels
 Par exemple, pour définir une fonction f(x) :

function [y] = f(x)
  

endfunction

Le paramĂštre x est passĂ© Ă  la fonction ƒ ; la valeur retournĂ©e par ƒ sera celle qui est attribuĂ©e Ă  y dans la fonction.

Si un fichier ne comporte que des définitions de fonctions, on lui donne alors l'extension .sci. Cela permet de créer des bibliothÚques de fonctions communes à plusieurs scripts, ce qui facilite la maintenance logicielle (les améliorations profitent à tous les scripts, une erreur apparaßtra dans tous les scripts et donc sera plus vite détectée et corrigée). Ce fichier .sci est ensuite chargé par le script avec la commande exec("chemin/nomdefichier").

On peut enregistrer l’environnement, c’est-Ă -dire l’ensemble des variables, dont notamment les fonctions, avec la commande save("fichier"). Ceci crĂ©e un fichier binaire (Scilab n’ajoute pas d’extension). Cet environnement peut ĂȘtre rechargĂ© avec la fonction load("fichier").

On peut Ă©galement Ă©crire les instructions dans un fichier texte, puis faire du copier/coller depuis l’éditeur de texte vers la ligne de commande de Scilab. Le code source peut contenir des commentaires introduits par deux barres de fraction //.

Environnement

Dans Scilab, l’environnement est l’ensemble des variables (y compris les fonctions) qui ont Ă©tĂ© dĂ©finies ; l’environnement contient un certain nombre de variables prĂ©dĂ©finies. L’ensemble des variables est donnĂ© par la commande who.

Lorsque l’on utilise une fonction, l’exĂ©cution de la fonction se fait dans un nouvel environnement, copie de l’environnement initial. Les variables qui y sont modifiĂ©es ne le sont pas dans l’environnement initial (on ne travaille qu’en variables locales), seul le rĂ©sultat de la fonction est renvoyĂ©.

On peut ouvrir Ă  dessein un environnement, avec la fonction pause ; l’invite devient alors -1->, indiquant que l’on est dans le premier niveau de sous-environnement. On est Ă©galement dans une telle configuration lorsque l’on interrompt l’exĂ©cution d’une fonction (par exemple avec la combinaison de touches CTRL + C). Pour revenir Ă  l’environnement prĂ©cĂ©dent, il faut utiliser la commande return.

Si l’on utilise return sans argument, les variables ne sont pas transmises Ă  l’environnement pĂšre. Il est possible de transmettre les variables a1, a2, 
, an dans l’environnement pĂšre, avec la syntaxe (x1, x2, 
, xn) = return(a1, a2, 
, an), oĂč x1, x2, 
, xn sont les noms des variables dans l’environnement pĂšre.

La commande clear permet de « nettoyer » un environnement, c’est-Ă -dire de supprimer toutes les variables.

Interface avec d’autres langages

Scilab s’interface facilement avec le langage de script Tcl-Tk et permet d’afficher des interfaces graphiques. La fonction TCL_EvalFile() Ă©value des scripts Tcl-Tk qui peuvent faire appel Ă  des fonctions de Scilab en passant des paramĂštres via ScilabEval.

Exemple : Calcul d’une distance dont les valeurs x, y ou z peuvent varier grĂące au mouvement d’un curseur dans l’interface graphique Ă©crite en Tcl-Tk.

On crée trois fichiers (lancement.sce, distance.sci, gui.tcl).

Les deux fichiers Scilab:

// lancement.sce - lancement de l’application
exec distance.sci;
TCL_EvalFile("gui.tcl");
// distance.sci - fonction Scilab
function dist = distance(x, y, z)
   dist = sqrt(x*x + y*y + z*z)
endfunction

Et le code Tcl-Tk:

# gui.tcl - interface graphique
global x y z dist
set x 10; set y 10; set z 10; set dist " "
toplevel .w
scale .w.scx -from 0 -to 200 -length 200 -resolution 1 -label "X" \
             -orient horiz -bd 1 -showvalue true -variable x \
             -command CalculDistance
scale .w.scy -from 0 -to 200 -length 200 -resolution 1 -label "Y" \
             -orient horiz -bd 1 -showvalue true -variable y \
             -command CalculDistance
scale .w.scz -from 0 -to 200 -length 200 -resolution 1 -label "Z" \
             -orient horiz -bd 1 -showvalue true -variable z \
             -command CalculDistance
label .w.lt -text Distance
label .w.ldist -textvariable dist -bg lightblue
eval pack [winfo children .w]
proc CalculDistance w {
 global x y z dist
 ScilabEval "dist = distance($x,$y,$z) ; TK_SetVar('dist',string(dist));"
}

Notes et références

Notes

  1. Le nom de cette fonction, horner, fait référence à la méthode de Horner utilisée pour calculer numériquement un polynÎme, en effectuant le plus petit nombre possible de multiplications : .

Références

  1. « Scilab 2023.1.0 » (consulté le )
  2. « mfile2sci (fonction de conversion de M-file MATLAB vers Scilab) » (consulté le ), voir aussi « Aide à la conversion MATLAB vers Scilab » (consulté le ).
  3. « Scicos >History », sur scicos.org (consulté le ).
  4. « scilab.org/scilab/history »(Archive.org ‱ Wikiwix ‱ Archive.is ‱ Google ‱ Que faire ?).
  5. « META2.3.1.1.html META2.3.1.1 », sur inria.fr (consulté le ).
  6. « Sciweb » (consulté le )
  7. « [Scilab-users] Scilab is joining 3DS », sur The Mail Archive, .
  8. Licence de Scilab
  9. DĂ©finition d’un logiciel semi-libre
  10. Annonce du changement de licence
  11. Précision des licences applicables

Voir aussi

Articles connexes

Outil associé

Xcos

Logiciels similaires

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.