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.
Développé par | Dassault SystÚmes |
---|---|
DerniĂšre version | 2023.1.0 ()[1] |
DĂ©pĂŽt | https://gitlab.com/scilab |
Ătat du projet | actif |
Ăcrit en | C++, C, Java, Fortran et Tcl/Tk (d) |
Interface | GTK |
SystĂšme d'exploitation | Linux, Microsoft Windows, macOS et Berkeley Software Distribution |
Environnement | Windows, Linux, MacOS |
Langues | Multilingue |
Type | Calcul numérique |
Licence | GPLv2, anciennement CeCILL v2 |
Site web | www.scilab.org, |
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 etdetr()
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) esty = 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 primitiveode
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
- 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]'
; - 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
ety_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 instructionsplot
,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
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
oufor variable = dĂ©but : pas : fin, âŠ, end
- boucle itérative antéconditionnée :
while condition do, âŠ, end
ouwhile 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
- 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
- « Scilab 2023.1.0 » (consulté le )
- « mfile2sci (fonction de conversion de M-file MATLAB vers Scilab) » (consulté le ), voir aussi « Aide à la conversion MATLAB vers Scilab » (consulté le ).
- « Scicos >History », sur scicos.org (consulté le ).
- « scilab.org/scilab/history »(Archive.org ⹠Wikiwix ⹠Archive.is ⹠Google ⹠Que faire ?).
- « META2.3.1.1.html META2.3.1.1 », sur inria.fr (consulté le ).
- « Sciweb » (consulté le )
- « [Scilab-users] Scilab is joining 3DS », sur The Mail Archive, .
- Licence de Scilab
- DĂ©finition dâun logiciel semi-libre
- Annonce du changement de licence
- Précision des licences applicables
Voir aussi
Articles connexes
Outil associé
Logiciels similaires
- GNU Octave
- R
- SciPy, Scientific Computing Tools for Python
- SageMath
- FreeMat
- Julia (langage de programmation)
- MATLAB