Scilab (prononciation : 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 Microsoft 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, voir aussi ..
Historique Le projet est né à l'Inria en 1982 sous le nom de Blaise, à partir de MATLAB... 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’École nationale des Ponts et Chaussées. La première version de Scilab, nommée alors Ψlab. (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. À 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. Jamais publié, Sciweb est à la base de Scilab Cloud développé et commercialement exploité par Scilab Enterprises puis ESI.
En , ESI group fait l'acquisition de Scilab Enterprises et intègre son équipe opérationnelle. Depuis (Scilab 6.0.2), la version macOS de Scilab est construite et distribuée par l'UTC.
En , Scilab est acquis par la société Dassault Systèmes..
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 ScilabLicence de Scilab 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.. 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.. Les versions 6.0 et ultérieures sont distribuées sous licence GNU GPL..
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 , 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 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 x - 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·x.
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 hornerLe 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 : . : 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ères 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.