cours_scilab.pdf

Embed Size (px)

Citation preview

  • 8/19/2019 cours_scilab.pdf

    1/27

    1

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Formation Scilab

     Jean-Bernard Blaisot (MdC Univeristé de Rouen)

     Jérôme Yon (MdC INSA de Rouen)

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    PlanPlan

    Séance 1/6 : Présentation générale de Scilab

    Installation, utilisation, aide, variables, matrices, opérations

    Programmation (scripts, itérations)

    Lecture / Ecriture de fichiers

    Séance 2/6 : Environnement graphique

    Création et gestion des figures

    Exportation des figures (création de documents word-Latex)

    Utilisation des des boites de dialogue

    Séance 3/6 : Traitement du signal

    FFT, convolution, filtrage

    Manipulation de fichiers son

         J       Y

         J       B

         B

         J       B

         B

  • 8/19/2019 cours_scilab.pdf

    2/27

    2

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    PlanPlan

    Séance 4/6 : Traitement d’images

    Utilisation des Toolbox

    Application des traitement « classiques » (seuil, mesures automatiques)

    Séance 5/6 : Optimisation & Fittage

    Résoudre des systèmes d’équations différentielles

    Fittage de données expérimentales et exploitation

    Séance 3/6 : Modélisation et Applications

    Divers exercices d’application de l’outil     J       Y

         J  B

         B

         J       Y

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Scilab c’est quoi ?

    C’est un logiciel de calcul numérique fournissant un environnement de calcul pour desapplications scientifiques. L’environnement Scilab met à disposition un ensemble deméthodes (routines) près intégrées usuellement utilisée en sciences physique :

    - Résolution de systèmes linéaires, d’équations différentielles,

    - Manipulation matricielle et vectorielle optimisée (valeurs propres …),

    - Transformées de Fourrier rapides,

    -algorithmes d’optimisation…

    Scilab est équipé d’une interface graphique rendant le logiciel convivial et permettant lagénération de figures (2D et 3D) incorporables dans les documents (word, latex).

    Un atout important de la programmation Scilab est qu’elle ne nécessite pas l’appel delibrairies spécifiques et dépendantes de l’environnement utilisé (Windows, XP, 2000, Linux,Unix …). Le formalisme et la programmation Scilab sont les mêmes quelque soit le systèmed’exploitation étudié. Ainsi, les programmes sont entiAinsi, les programmes sont entièèrement compatibles drement compatibles d’’un systun systèèmemedd’’exploitationexploitation àà un autreun autre.

    Scilab est un « clone » de Matlab...

  • 8/19/2019 cours_scilab.pdf

    3/27

    3

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Différences entre Matlab et Scilab ?

    Le langage MATLAB a été conçu par Cleve Moler (professeur de Maths) à la fin des années70. Objectif : permettre à ses étudiants de pouvoir utiliser différentes bibliothèques sansconnaître le Fortran. Jack Little et Steve Bangert (ingénieurs) comprennent les capacitésd’un tel programmes. Ils créent alors la société « The MathWorks » en 1984 afin decommercialiser la première version de MATLAB. Prix industriel approximatif 2600 euros.

    Matlab :

    Scilab est développé depuis 1990 par des chercheurs de l’INRIA et de l’ENPC. Scilab estdevenu depuis mai 2003 un Consortium, développé et maintenu par l'INRIA.

    Scilab est distribué gratuitement avec son code source via l’Internet depuis 1994, il estdisponible précompilé pour un grand nombre d’architectures.Néanmoins il ne s’agit ni d’un logiciel Open source selon l'Open Source Initiative ni d’unLogiciel libre. En effet, la licence de Scilab n’autorise pas la distribution commercialed’une version modifiée. Selon la classification de la FSF, il s'agirait donc plutôt d'unlogiciel semi-libre

    Il existe des fonctionnalités permettant la traduction de la syntaxe Matlab Scilab.

    Scilab :

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Comment « démarrer » Scilab ?

    Télécharger le programme d’installation de Scilab sur le site :

    http://www.scilab.org/

    Installer le programme puis l’exécuter.

    La fenêtre principale « decommande » apparaît.

    A l’aide de cette fenêtre, on peututiliser Scilab en mode

    « calculatrice évoluée ».

  • 8/19/2019 cours_scilab.pdf

    4/27

    4

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.Exécuter l’opération de base suivante :

    >X=2;

    >Y=2*X+X^2

     Le résultat de l’affectation est affiché ou non selon

    Qu’un « ; » est présent ou non en fin de commande.

    >M=[X Y;-X 1/Y]

    >M =

    2. 8.

    - 2. 0.125

    Pour Scilab, un nombre scalaire, comme un vecteur, sont des matrices particulières :

     Première ligne de la matrice

     Seconde ligne de la matrice (colonnes séparées par un espace »

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.

    >N=[1 2;3 4];

    >MN=M+N

    >MN =

    3. 10.

    1. 4.125

    >P=[1;1];

    >N*P

    ans =

    3.

    7.

     Somme matricielle

    Vecteur colonne identité

     Produit matriciel 

    Il existe des opérations adaptées pour lesmatrices :

    >I=eye(3,3)

    >diag(N*P)

    >diag(MN)

    >C=ones(2,4)

    > CT=C’

     Matrice identité

     Matrice diagonale formée à partir d’un

    vecteurOu détermine levecteur constitué dela diagonale d’unematrice

     Matrice(2 lignes, 3 colonnes)constituée de 1.

     Défini la matricetransposée de C 

  • 8/19/2019 cours_scilab.pdf

    5/27

    5

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.>D=zeros(C)

    >triu(ones(5,5))

    >x=rand(1,3)

     Matrice nulle demême dimensionsque la matrice C 

    Vecteur constitué denombres aléatoires >0 etx=linspace(2,9,3)

    x =

    2. 5.5 9.

    >y=[2:2.5:9]

    y =

    2. 4.5 7.

     PremièrevaleurTriu (ne retient que

    la part supérieurede la matrice)

    On remarque que les variables sontdifférentiées par leur casse :

    >x= =x Comparaisonlogique

    élément par élément del’égalité proposée

    >X= =x

    Génération simplifiée de vecteurs ligne

    dernièrevaleur

     Nombred’éléments

     Premièrevaleur

    Valeurmaximale

     Dimensions et valeursextremums connues

     pas

     Dimensions et valeursextremums nonconnues

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.

    >x=linspace(0,2*%pi,50);

    >y=sin(x);

    >plot(x,y) Trace la courbe

    Les fonctions classiques s’appliquent àchaque élément de la matrice :

    ( ) x  y   sin=

    Les opérations algébriques usuellesconcernent les calcul matriciels

    Pour que les opérations d’effectuentélément par élément on insère un « . » :

    >A=[1 2;3 4] ;

    >A*A’

    ans =

    5. 11.

    11. 25.

     Produit matriciel de A par sa transposée.

    >A.*A'

    ans =

    1. 6.

    6. 16.

     L’opération .+ n’existe pas du fait de sonéquivalence àl’opération +

  • 8/19/2019 cours_scilab.pdf

    6/27

    6

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    >A=[1:1:5]

    A =

    1. 2. 3. 4. 5.

    >B=4*A

    B =

    4. 8. 12. 16. 20.

    >Scal=A*B'

    Scal =

    220.

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.Calcul du produit scalaire de deux vecteurs :

     Produit matriciel d’unvecteur ligne et d’unvecteur colonne(transposée) conduit au

     produit scalaire

     Attention, l’interversion de latransposition conduit au calcul d’unematrice :

    >Mat=A'*B

    Mat =

    4. 8. 12. 16. 20.

    8. 16. 24. 32. 40.

    12. 24. 36. 48. 60.

    16. 32. 48. 64. 80.

    20. 40. 60. 80. 100.

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.

    Il est possible de concaténer des matrices ou un vecteur :>A11=1;

    >A12=[2 2 2];

    >A21=[3;3;3];

    >A22=4*ones(3,3);

    >NewA=[A11 A12; A21 A22]

    NewA =

    1. 2. 2. 2.

    3. 4. 4. 4.

    3. 4. 4. 4.

    3. 4. 4. 4.

    >V1=[1 1 1];

    >V2=[2 2 2];

    >V3=[V1 V2]

    V3 =

    1. 1. 1. 2. 2. 2.

  • 8/19/2019 cours_scilab.pdf

    7/27

    7

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.Il est possible d’extraire des éléments d’une matrice.

    >NewA(1,2)

    ans =

    2.

    >NewA(:,2)

    ans =

    2.

    4.4.

    4.

    >B=rand(5,6);

     Élément de la ligne 1 etde colonne 2 de A

     Extraction de l’ensembledes lignes de la deuxièmecolonne.

     Extraction de la sous-matrice délimitée par leslignes 3 à 4 et lescolonnes 1 à 2 de lamatrice B.

    ->Bsub=B(3:4,1:2)

    Bsub =

    0.1199926 0.6723950

    0.2256303 0.2017173

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.

    Il est possible de modifier ou détruire des éléments d’une matrice.

    >NewA(:,3)=[];

    >size(NewA)

    ans =

    4. 3.

     Informe de ladimension d’une matrice

     Efface la colonne 3

    (affectation d’un vide)>>NewA(3,:)=7

    NewA =

    1. 2. 2. 2.

    3. 4. 4. 4.

    7. 7. 7. 7.

    3. 4. 4. 4.

     Remplace la 3ème ligne par des 7 

    >size(NewA)

    ans =

    4. 4.

    >NewA($+1,:)=0

    NewA =

    1. 2. 2.

    3. 4. 4.

    7. 7. 7.

    3. 4. 4.

    0. 0. 0.

    $ représente le dernierélément, cette opérationajoute une dernière ligneaffectée de 0.

  • 8/19/2019 cours_scilab.pdf

    8/27

    8

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode calculatrice évoluée : fonctions de base.abs() Valeur absolue ou module 

    acos() Cosinus inverse 

    acosh() Cosinus inverse hyperbolique 

    asin() Sinus inverse 

    asinh() Sinus inverse hyperbolique 

    atan() Tangente inverse 

    atanh() Tangente inverse hyperbolique 

    ceil() Partie entiere par exces 

    cos() Cosinus (en radian) 

    cosh() Cosinus hyperbolique 

    cotg() Cotangente (en radian) 

    coth() Cotangente hyperbolique 

    tan() Tangente (en radian) 

    tanh() Tangente hyperbolique 

    erfc() Fonction erreur

    exp() Exponentielle 

    fix() Partie entiere la plus proche de 0 

    foor() Partie entiere inf´erieure 

    gamma() Fonction gamma 

    log() Logarithme népérien

    log10() Logarithme décimal 

    log2() Logarithme binaire 

    round() Arrondi a l'entier le plusproche 

    sign() Fonction signe 

    sin() Sinus (en radian) 

    sinh() Sinus hyperbolique 

    sqrt() Racine carrée 

    ( ) ( )∫∞

    −−=Γ 

    0

    1 exp   dt t t  x    x 

    ( )   ( )∫   −= x 

    dt t  x erf 0

    2exp2

    1

    π  

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Les nombres et types particuliers

    Un nombre complexe se forme de la manière suivante :

    Certains nombres sont directement utilisables :

    >A=3-%i*5,B=1-%i*2

    A =

    3. - 5.i

    B =

    1. - 2.i

    >norm(B)

    ans =

    2.236068

    >A*B

    ans =

    - 7. - 11.i

     Norme du nombrecomplexe B

    >isreal(A)

    ans =

    F

    >isreal(norm(A))

    ans =

    T

    Test si un nombreest réel oucomplexe

  • 8/19/2019 cours_scilab.pdf

    9/27

    9

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte.Pour des calculs plus complexes ou l’élaboration de programmes, il est préférabled’élaborer un script. Celui-ci peut-être enregistré et peut-être modifier en facilitantgrandement son exécution.

    On identifie deux types de fichiers scripts par leurs suffixes :

     _____.sce (successions de commandes prêtes à être exécutées),

     _____.sci (ensemble de sous-programmes, pouvant être appelés pard’autres scripts)

    Il faut pour cela cliquer sur « Editeur » et l’éditeur de script apparaît.

    On peut dorés-déjà sauvegarder le programme à élaborer « premier_pas.sce »

     Pour executer le script : Execute/Load into scilab ou F5 

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte : Exemples d’applications.

    Ecrire un script permettant la résolution du système linéaire suivant :

    3 messieurs ayant le même jour d'anniversaire discutent de leurs âges pendant uneréception.

    * La somme des 3 âges est 135.

    * Jacques sait que Xavier avait 35 ans quand il était né.

    * Quand Patrick était né, la moyenne d'âge de Xavier et Jacques était 19.5.

    * Quand Xavier aura atteint 141 ans, la somme d'âge de Patrick et Jacques sera 210.

     Indication :

     La résolution matricielle d’un système linéaire du type AX=B peut se faire en tapant :

     X=(1/A)*B ou

     X=A\B ou

     X=linsolve(A,-B) (linsolve donne toutes les solutions de A*X+B=0 . )

  • 8/19/2019 cours_scilab.pdf

    10/27

    10

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte : Exemples d’applications.Correction, il faut résoudre le système suivant :

    Le script associé est simplement :

    −=

     J 

     P 

     X 

    5.015.0

    101

    111

    5.19

    35

    135

    A=[1 1 1;-1 0 1;0.5 -1 0.5];

    B=[135;35;19.5];

    AgesXPJ =(A\B)

    34.

    32.

    69.

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte : Exemples d’applications.

    Pour retrouver les valeurs min et max d’une matrice,

    Ajouter à votre script :

    [Agemin,indice]=min(AgesXPJ)

    indice =

    2.

    Agemin =

    32.

    Cela retourne

     La valeur min est associée au2ème élément du vecteur

    AgesXPJ =(A\B)

    34.

    32.

    69.

    Rechercher l’élément max de la matrice A …

     Renvoie uniquement une des multiplesvaleurs maximales de la matrice !!

  • 8/19/2019 cours_scilab.pdf

    11/27

    11

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte : Exemples d’applications.Utiliser votre script afin de générer un matriceC de dimension (m*m) de la forme :

    Avec m=6.

    Vous utiliserez pour cela la fonction diag.

     Indication :

     Pour obtenir des informations sur la fonction diag,

    On peut taper « help diag » dans la fenêtre principale ouCliquer sur ? dans le menu déroulant …

    −−

    −−

    4210

    1421

    0142

    0014

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation en mode scripte : Exemples d’applications.

    Générer la matrice ci-contre et utiliser la fonctionspec pour déterminer la matrice diagonalisée associéeà la matrice A ainsi que la matrice constituée des vecteurspropres.  

    =

    122

    221

    212

     A

    A=[2 1 2;1 2 2;2 2 1];

    [Propres,Matricediag]=spec(A)

    Vérifier que le résultat obtenu est correct en faisant l’opération suivante :

    Matricediagbis=(1/Propres)*A*Propres

    round(Matricediag)==round(Matricediagbis)

     Re-détermination de la matrice diagonale

    Comparaison des deux matrices

     La fonction round est utilisée pour arrondir les matrices à leurs expressionsdécimales approchées

  • 8/19/2019 cours_scilab.pdf

    12/27

    12

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation des boucles : boucle « for »

    Exemple de calcul :

    Diam=logspace(-4,5,10);

    Dlog=[];

    k=0;

    for D=Diam

    Dlog=cat(2,Dlog,log10(D));

    k=k+1;

    end

    Construit un vecteur à progression logarithmique(base 10) de 10 éléments entre 10-4 et 10 5 

     Pour chaque élément du vecteur Diam

    On crée le vecteur Dlog en le concaténant à chaqueitération avec le log de l’élément considéré duvecteur D

     Permet de connaitre le nombre d’éléments du vecteur D

     L’utilisation de la boucle for pour le calcul précédent n’est pas pertinent carstrictement équivalent à :

    Diam=logspace(-4,5,10);Dlog=log10(Diam);[l,k]=size(Diam);

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation des boucles : boucle « for »

    for i=1:50

    y(i)=(i^2-1)/2;

    end

    plot(y)

     Pour i allant de 1 à 50

     Etablissement du vecteur y

    Tracé de la courbe

    Peut également s’écrire en ligne :

    for i=1:50, y(i)=(i^2-1)/2; end

    Exemple de calcul :

  • 8/19/2019 cours_scilab.pdf

    13/27

    13

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Utilisation des boucles : boucle « while »

    i=1

    while i0 then, y=2*x^2-3;else y=0; end

    Exemple simple, en ligne:

    Choix multiples :

    if x>0 then

    y=2*x^2-3;

    elseif x

  • 8/19/2019 cours_scilab.pdf

    14/27

    14

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Ecriture de sous-programmesPour simplifier la lisibilité de scripts faisant appel à des calculs récurrents,il est possible de définir des fonctions dont la structure est la suivante :

    function [y1,y2,y3,…]=Nomfonction(x1,x2,x3,…)

    instruction1;

    instruction2;

    endfunction

    Exercice : ouvrir un nouveau script appelé « Pi.sce » .

    Construire une fonction permettant le calcul du nombre ππππ à l’aide de la série suivante.

    Le paramètre d’entrée de cette fonction est la précision souhaitée, les paramètres desortie sont : le nombre ππππ calculé et le rang n de la série, nécessaire pour obtenir cetteprécision. Exécuter le pour atteindre une précision de 10-5

    ( )∑=   +

    −⋅=

    n

    n

    n

    n0   12

    14π  

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Résultat Exercicefunction [Pi,n]=CalculPi(err)

    n=0;

    Val=0;

    erreur=10;

    while erreur>err then

    Val=Val+((-1)^n)/(2*n+1);

    Pi=Val*4;

    erreur=abs(Pi-%pi)/%pi;

    n=n+1;

    X(n)=n;Y(n)=erreur;

    end

    endfunction

    [Pi,n]=CalculPi(1E-5)

    On trouve n =31831 et Pi= 3.1416241

  • 8/19/2019 cours_scilab.pdf

    15/27

    15

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     L’interruption programmée des boucles for ou whileL’instruction break permet l’arrêt d’une boucle en cours d’exécution sans pour autant

    arrêter le programme.

    Exemple : ajouter dans la fonction CalculPi une instruction permettant l’arrêt de la

    détermination du nombre Pi lorsque le nombre d’itérations atteint un valeurs nmax

    (nouvelle variable d’entrée de la fonction)

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Résultat Exercicefunction [Pi,n]=CalculPiBis(err,nmax)

    n=0;

    Val=0;

    erreur=10;

    while erreur>err then

    if n==nmax then break; end

    Val=Val+((-1)^n)/(2*n+1);

    Pi=Val*4;

    erreur=abs(Pi-%pi)/%pi;

    n=n+1;

    X(n)=n;Y(n)=erreur;

    end

    endfunction

    [Pi,n]=CalculPiBis(1E-5,500)

  • 8/19/2019 cours_scilab.pdf

    16/27

    16

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Commandes permettant le « débogage » d’un programmeIl existe des commandes permettant de déboguer un programme :

    1. Il est possible de stopper un programme en cours d’exécution en faisant ctrl-c(équivalent de Contrôle\interrompre). La fenêtre principale indique alors -1-> cequi indique que le programme est en mode « pause ». On peut alors soitl’interrompre définitivement et libérer l’espace mémoire des variables en faisantContrôle\Terminer (=abort) ou bien reprendre l’exécution avecContrôle\Reprendre (=resume).

    2. Ces opérations peuvent être effectuées à des endroits précis du programme eninsérant les commandes suivantes aux endroits souhaités :(pause,abort,resume).

    3. Lors d’une pause, les variables de la fonction interrompue sont accessibles à partirde la fenêtre principale.

    4. On peut également s’intéresser aux valeurs successives d’une variable à l’intérieurd’une boucle. Ex : insérer la commande disp(Pi) dans la boucle while de lafonction CalculPi. disp associe la commande pause et l’affichage de la variable Pi

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Fonctions error et warning 

    Il est possible d’afficher un message d’alerte lors de l’exécution d’une fonction :

    • Sans interruption du programme :

    • En interrompant le programme :

    warning(‘attention vous avez dépassé le nombre maximal d’’itérations’)

    Une chaine de texte est délimitée par un ‘, si la chaine doitcontenir ce caractère, il faut alors le doubler

    error(‘Stop : nombre maximal (%d) d’’itérations dépassé’,nmax)

     Permet l’insertion dans le texte d’une variable(entière ici)

  • 8/19/2019 cours_scilab.pdf

    17/27

    17

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Sauvegarder et récupérer des variables d’une session scilabIl est possible de sauvegarder et de charger de manière compacte (binaire) l’ensemble ou

    certaines variables générées lors d’une session scilab à l’aide des commandes

    save et load.

    Exemple pour la sauvegarde de toutes les variables :

    browsevar();

    A=12;

    B=ones(2,3);

    save('scilab.dat')

    clear

    load('scilab.dat')

     Affiche l’éditeur de variables

    Génère 2 variables

     Enregistre l’ensemble des variables

     Efface l’ensemble des variables de la mémoire

     Lecture de l’ensemble des variablescontenues dans le fichier

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Sauvegarder et récupérer des variables d’une session scilab

    Pour la sauvegarde et la lecture de quelques variables :

    save('Fichier_part.dat',Var1,Var2 …)

    load('Fichier_part.dat', ‘VarX', ‘VarY')

     A l’enregistrement on indique directement la variable

     A la lecture on indique les variables sous forme de chaines decaractères

  • 8/19/2019 cours_scilab.pdf

    18/27

    18

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Les chaines de caractèresComme nous l’avons vu précédemment, une chaine de caractères est délimitée par ‘ ou «

    Une variable de scilab peut être une chaine de caractères au même titre qu’un nombre

    entier, booléen, réel ou complexe :

    VarA=" ""Scilab"" ";

    VarB="c''est ";

    VarC="trop fort!";

    L’opération + pour des chaines de caractères correspond à la concaténation :

    >Text=VarA+VarB+VarC

    Text =

    "Scilab" c'est trop fort!

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Les chaines de caractères

    Comme pour les autres types de variables, on peut définir des matrices de chaines de

    caractères :

    >MatText=["""Scilab""" "c''est" "trop fort!"];

    -->size(MatText)ans =

    1. 3.

    -->length(MatText)

    ans =

    8. 5. 10.

     Défini un vecteur colonne

    de chaines de caractères

     Dimension de la matrice formée

     Nombre de caractères dans chaque

    chaine de la matrice

  • 8/19/2019 cours_scilab.pdf

    19/27

    19

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Manipulation de chaines de caractèresExercice : Définir une fonction Adapte_Nom qui, à partir d’une variable contenant une

    chaine de caractères du type nom de fichier (nom.ext), retourne un autre nom de

    fichier avec le préfixe –scilab précédent le point (nom-scilab.ext)

     Indication :

    Voir la commande strsubst dans l’aide

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Manipulation de chaines de caractères

    Résultat de l’exercice :

    function NomSortie=Adapte_Nom(NomEntree)

    NomSortie=strsubst(NomEntree,'.','-silab.');

    endfunction

    Adapte_Nom("poesie.txt")

     Recherche dans la chaine la chaine et la remplace par la chaine

  • 8/19/2019 cours_scilab.pdf

    20/27

    20

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Manipulation de chaines de caractèresExercice : modifier la procédure de façon à insérer en plus du suffixe –scilab un nombre

    entier n donné en argument.

     Indication :

     Il faut convertir le nombre entier en une chaine de caractères. Voir dans l’aide lacommande string.

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Manipulation de chaines de caractères

    Résultat de l’exercice :

    function NomSortie=Adapte_Nom(NomEntree,n)

    NomSortie=strsubst(NomEntree,'.','-scilab'+string(n)+'.');

    endfunction

    Nom_Fichier=Adapte_Nom("poesie.txt",125)

  • 8/19/2019 cours_scilab.pdf

    21/27

    21

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Manipulation de chaines de caractèresDéfinissons une fonction recuperation qui à partir d’un fichier du type *-scilabn.ext va

    récupérer le nombre entier n.

    function nb=recuperation(Nom_Fichier)

    avant=strindex(Nom_Fichier,'scilab')

    apres=strindex(Nom_Fichier,'.')

    Sous_chaine=part(Nom_Fichier,[avant+6:1:apres])

    nb=evstr(Sous_chaine)

    endfunction

    nb=recuperation(Nom_Fichier)

     Position de la chaine scilab dans Nom_Fichier

     Position du . dans Nom_Fichier

     Récupération de la portion de chainedéfinissant le nombre entier n

     Evaluation de la commande scilab écrite dans la

    chaine de caractères : ici, cela revient àconvertir la chaine en nombre

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Création de listes

    Les listes sont des objets contenant différentes variables scilab de types différents. Les listes

    sont particulièrement utiles pour l’élaboration de bases de données.

    Exemple : on souhaite renseigner une fiche permettant l’identification d’un patient :

    • Nom

    • Prénom

    • Lieu de naissance

    • Date de naissance

    Fiche=tlist(["Identification","Nom","Prénom","Ville","naissance"],"Dupond","Jean","Rouen",[24 3 1958]);

    Variable detype liste

     Identification des différentesvariable de la liste

     Affectation des variablesassociées à cette fiche

  • 8/19/2019 cours_scilab.pdf

    22/27

    22

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Date=Fiche.naissance(1)

    Mois=Fiche.naissance(2)

    Annee=Fiche.naissance(3)

    Age_en_annees = (datenum()-datenum(Annee,Mois,Date))/365

    Text=['M.',Fiche.Nom,' est né à ',Fiche.Ville,' il a, à ce jour',string(Age_en_annees),' ans']

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Création de listesOn peut bien sûr récupérer un élément d’une liste.

    Exemple d’application : détermination de l’age de Jean Dupond :

     Renvoie un nombre caractérisant la dateactuelle en nombre de jours écoulédepuis une date de référence

     Renvoie un nombre caractérisant la datedonnée en nombre de jours écoulédepuis une date de référence

     Affichage du résultat

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Création de listes

    Afin de créer la base de données, on peut construire une matrice dont les éléments sont

    des listes.

    Exercice : Construire un vecteur Fiche dont le premier élément est la fiche de Jean Dupont

    Et la seconde est la fiche de Yvette Dupond née à Rouen le 2/12/1944.

    Déduire du vecteur Fiche la différence d’age entre Jean et Yvette.

  • 8/19/2019 cours_scilab.pdf

    23/27

    23

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Création de listesRésultat de l’exercice :

    Fiche(1)=tlist(["Identification","Nom","Prénom","Ville","naissance"],"Dupond","Jean","Rouen",[24 3 1958]);

    Fiche(2)=tlist(["Identification","Nom","Prénom","Ville","naissance"],"Dupond","Yvette","Rouen",[2 12 1944]);

    Difference_Age = (datenum(Fiche(1).naissance(3),Fiche(1).naissance(2),Fiche(1).naissance(1))-datenum(Fiche(2).naissance(3),Fiche(2).naissance(2),Fiche(2).naissance(1)))/365

    Soit 13.31 ans !

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Le formatage des variables

    Lors de l’affichage d’une chaine de caractères contenant des variables (message d’erreur

    par exemple) il faut pouvoir indiquer quel type de variable l’on souhaite afficher ainsi que

    leur format (nombre de chiffres significatifs par exemple) :

    printf('Le nombre Pi est %1.4f à %d décimales près \n',%pi,4)

     Formate le nombre π  comme un réel avec 4 décimales

    Convertie la variable réelle 4 en un entier

     La commande printf permet l’affichage d’informations dans le fenêtre principale de scilab

     Lorsque la variable est un matrice ou un vecteur, la commande printf estrépétée automatiquement pour chaque ligne de la matrice ou du vecteur :

    A=[1:1:4]';

    printf('Valeurs de A : %d \n',A)

  • 8/19/2019 cours_scilab.pdf

    24/27

    24

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Le formatage des variablesListe des codes de format à utiliser (équivalent au langage C).

    Indicateur de saut de ligne \n

    Saut d’une tabulation \t

    A1.111e+005Equivalent en notation scientifique%1.3e

    Chaine de caractères%s

    ExempledescriptionFormat

    Format nombre réel avec 2 chiffres après lavirgule

    Format nombre réel

    Format nombre entier

    A111111.22%1.2f

    A111111.222222%f

    A111111%d

    A=111111.222222

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

    Construction d’une chaine de caractères à partir de variables

    Outre l’affichage à l’écran, cette procédure de formatage permet la génération de

    chaines de caractères :

    Chaine=sprintf('Le nombre Pi est %1.4f à %d décimales près \n',%pi,4)

     L’ajout de l’indicatif ‘s’ indique que le formatage est renvoyédans une chaine de caractères

  • 8/19/2019 cours_scilab.pdf

    25/27

    25

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Ecrire simplement une matrice dans un fichier txt Il est possible d’exporter des matrices très simplement sous format texte par exemple en vu

    de les lire sous Excel :

    Mat=rand(4,3);

    fprintfMat('mat.txt',Mat,'%e','ligne d''entête') ;

     Nom du fichier

    Variable à écrire

     Format del’écriture

     Ajout d’uneligne d’entête

    optionnel 

    ligne d'entête2.113249e-001 6.653811e-001 8.782165e-001

    7.560439e-001 6.283918e-001 6.837404e-002

    2.211346e-004 8.497452e-001 5.608486e-001

    3.303271e-001 6.857310e-001 6.623569e-001

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Lire simplement une matrice dans un fichier txt 

    Il est possible d’exporter des matrices très simplement sous format texte par exemple en vu

    de les lire sous Excel :

    >NewMat=fscanfMat('mat.txt')

    NewMat =

    0.2113249 0.6653811 0.8782165

    0.7560439 0.6283918 0.0683740

    0.0002211 0.8497452 0.5608486

    0.3303271 0.685731 0.6623569

     Matrice de variable générée à partir du fichier

     Nom du fichier

  • 8/19/2019 cours_scilab.pdf

    26/27

    26

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Méthode générale d’écriture dans un fichier 

    file1=mopen('ecriture_fichier.txt','w')

    fprintf(file1,'Le nombre Pi est %1.4f à %d décimales près \n',%pi,4);

    mclose(file1);

    Ouverture d’un fichier repéré par sonidentifiant 

     Ecriture dans le fichier identifié par file1de la chaine de caractères.

     Fermeture du fichier

     Dans mopen, le terme ‘w’ est optionnel. Il indique que le fichier est ouvert enécriture (contrairement à ‘r’ – lecture). Voir l’aide pour plus d’informations

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Pr Pr éé sentation g sentation géénnéé rale de rale de Scilab Scilab

     Méthode générale pour la lecture dans un fichier 

    file2=mopen('donnees_a_lire.txt','r')

    Commentaires=mgetl(file2,1)

    [n,Pi,Comment]=mfscanf(file2,'%lf\t%s\n')

    [n,precision,Comment]=mfscanf(file2,'%lf\t%s\n')

    [n,Annee,Comment]=mfscanf(file2,'%lf\t%s\n')

    mclose(file2);

    Ce fichier contient des informations à lire

    3.14 nombre_Pi

    2 nombre_de_chiffres_après_la_virgule

    1944 année_de_naissance_d'Yvette

    Tout d’abord générons un fichier texte appelé donnees_a_lire.txt :

    On utilise la tabulation pour séparerles variables des commentaires

    Voici le script de lecture associée à ce fichier :

     Lit directement la première ligne commechaine de caractères

     Lecture formatée ligne par ligne

  • 8/19/2019 cours_scilab.pdf

    27/27

     Formation Scilab – Ecole doctorale SPMI 

    JJéérômerôme YonYon et Jeanet Jean--BernardBernard BlaisotBlaisot

    Fin de la séance