Cours Scilab PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 27

Formation Scilab Ecole doctorale SPMI

Formation Scilab
Jean-Bernard Blaisot (MdC Univerist de Rouen)
Jrme Yon (MdC INSA de Rouen)

Jrme Yon et JeanJean-Bernard Blaisot

Plan

Formation Scilab Ecole doctorale SPMI

JY

Sance 1/6 : Prsentation gnrale de Scilab


Installation, utilisation, aide, variables, matrices, oprations
Programmation (scripts, itrations)
Lecture / Ecriture de fichiers

JBB

Sance 2/6 : Environnement graphique


Cration et gestion des figures
Exportation des figures (cration de documents word-Latex)
Utilisation des des boites de dialogue

JBB

Sance 3/6 : Traitement du signal


FFT, convolution, filtrage
Manipulation de fichiers son

Jrme Yon et JeanJean-Bernard Blaisot

Plan

Formation Scilab Ecole doctorale SPMI

JBB

Sance 4/6 : Traitement dimages


Utilisation des Toolbox
Application des traitement classiques (seuil, mesures automatiques)

JY

Sance 5/6 : Optimisation & Fittage


Rsoudre des systmes dquations diffrentielles
Fittage de donnes exprimentales et exploitation

JY

Sance 3/6 : Modlisation et Applications


Divers exercices dapplication de loutil

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Scilab cest quoi ?


Cest un logiciel de calcul numrique fournissant un environnement de calcul pour des
applications scientifiques. Lenvironnement Scilab met disposition un ensemble de
mthodes (routines) prs intgres usuellement utilise en sciences physique :
- Rsolution de systmes linaires, dquations diffrentielles,
- Manipulation matricielle et vectorielle optimise (valeurs propres ),
- Transformes de Fourrier rapides,
-algorithmes doptimisation
Scilab est quip dune interface graphique rendant le logiciel convivial et permettant la
gnration de figures (2D et 3D) incorporables dans les documents (word, latex).

Un atout important de la programmation Scilab est quelle ne ncessite pas lappel de


librairies spcifiques et dpendantes de lenvironnement utilis (Windows, XP, 2000, Linux,
Unix ). Le formalisme et la programmation Scilab sont les mmes quelque soit le systme
dexploitation tudi. Ainsi, les programmes sont enti
entirement compatibles d
dun syst
systme
dexploitation un autre.
autre

Scilab est un clone de Matlab...


Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Diffrences entre Matlab et Scilab ?


Matlab :
Le langage MATLAB a t conu par Cleve Moler (professeur de Maths) la fin des annes
70. Objectif : permettre ses tudiants de pouvoir utiliser diffrentes bibliothques sans
connatre le Fortran. Jack Little et Steve Bangert (ingnieurs) comprennent les capacits
dun tel programmes. Ils crent alors la socit The MathWorks en 1984 afin de
commercialiser la premire version de MATLAB. Prix industriel approximatif 2600 euros.

Scilab :
Scilab est dvelopp depuis 1990 par des chercheurs de lINRIA et de lENPC. Scilab est
devenu depuis mai 2003 un Consortium, dvelopp et maintenu par l'INRIA.
Scilab est distribu gratuitement avec son code source via lInternet depuis 1994, il est
disponible
prcompil
pour
un
grand
nombre
darchitectures.
Nanmoins il ne sagit ni dun logiciel Open source selon l'Open Source Initiative ni dun
Logiciel libre. En effet, la licence de Scilab nautorise pas la distribution commerciale
dune version modifie. Selon la classification de la FSF, il s'agirait donc plutt d'un
logiciel semi-libre
Il existe des fonctionnalits permettant la traduction de la syntaxe Matlab  Scilab.
Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Comment dmarrer Scilab ?


Tlcharger le programme dinstallation de Scilab sur le site :

http://www.scilab.org/
Installer le programme puis lexcuter.

La fentre principale de
commande apparat.
A laide de cette fentre, on peut
utiliser Scilab en mode
calculatrice volue .

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Excuter lopration de base suivante :
Le rsultat de laffectation est affich ou non selon

>X=2;

Quun ; est prsent ou non en fin de commande.

>Y=2*X+X^2

Pour Scilab, un nombre scalaire, comme un vecteur, sont des matrices particulires :
Premire ligne de la matrice
Seconde ligne de la matrice (colonnes spares par un espace

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


>M =
2.

8.

- 2.

0.125

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


>N=[1 2;3 4];
Somme matricielle

>MN=M+N

Il existe des oprations adaptes pour les


matrices :

>I=eye(3,3)

Matrice identit

>diag(N*P)

Matrice diagonale
forme partir dun
vecteur

>MN =
3.

10.

1.

4.125

>P=[1;1];
>N*P
ans =

>diag(MN)
Vecteur colonne identit
Produit matriciel

>C=ones(2,4)

3.
7.

> CT=C

Ou dtermine le
vecteur constitu de
la diagonale dune
matrice
Matrice
(2 lignes, 3 colonnes)
constitue de 1.
Dfini la matrice
transpose de C

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Matrice nulle de
mme dimensions
que la matrice C

>D=zeros(C)

>triu(ones(5,5))

>x=rand(1,3)

Triu (ne retient que


la part suprieure
de la matrice)
Vecteur constitu de
nombres alatoires >0 et
<1.

On remarque que les variables sont


diffrenties par leur casse :

>x= =x

Comparaison logique
lment par lment de
lgalit propose

Gnration simplifie de vecteurs ligne

>x=linspace(2,9,3)
Premire
valeur

x =

2.

5.5

9.

Premire
valeur

Nombre
dlments

Dimensions et valeurs
extremums connues
Valeur
maximale

>y=[2:2.5:9]
pas

y =

2.

>X= =x

dernire
valeur

4.5

7.

Dimensions et valeurs
extremums non
connues

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Les oprations algbriques usuelles
concernent les calcul matriciels

>A=[1 2;3 4] ;
>A*A

Produit matriciel de A
par sa transpose.

ans =

Pour que les oprations deffectuent


lment par lment on insre un . :

>A.*A'
ans =
1.

6.

6.

16.

Lopration .+ nexiste
pas du fait de son
quivalence
lopration +

5.

11.

11.

25.

Les fonctions classiques sappliquent


chaque lment de la matrice :

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

Trace la courbe y = sin( x )

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Attention, linterversion de la
transposition conduit au calcul dune
matrice :

Calcul du produit scalaire de deux vecteurs :

>A=[1:1:5]
A =
1.

>Mat=A'*B
2.

3.

4.

5.

Mat =

>B=4*A

4.

8.

12.

16.

20.

B =

8.

16.

24.

32.

40.

12.

24.

36.

48.

60.

16.

32.

48.

64.

80.

20.

40.

60.

80.

100.

4.

8.

12.

16.

20.

>Scal=A*B'
Scal =
220.

Produit matriciel dun


vecteur ligne et dun
vecteur colonne
(transpose) conduit au
produit scalaire
Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Il est possible de concatner des matrices ou un vecteur :

>A11=1;
>A12=[2 2 2];
>A21=[3;3;3];
>A22=4*ones(3,3);

>V1=[1 1 1];

>NewA=[A11 A12; A21 A22]

>V2=[2 2 2];

NewA =

>V3=[V1 V2]

1.

2.

2.

2.

V3 =

3.

4.

4.

4.

1.

3.

4.

4.

4.

3.

4.

4.

4.

1.

1.

2.

2.

2.

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Il est possible dextraire des lments dune matrice.

>NewA(1,2)

Extraction de la sousmatrice dlimite par les


lignes 3 4 et les
colonnes 1 2 de la
matrice B.

lment de la ligne 1 et
de colonne 2 de A

ans =

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

2.
>NewA(:,2)
ans =

Extraction de lensemble
des lignes de la deuxime
colonne.

Bsub =
0.1199926

0.6723950

0.2256303

0.2017173

2.
4.
4.
4.
>B=rand(5,6);
Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


Il est possible de modifier ou dtruire des lments dune matrice.
Remplace la 3me ligne
Efface la colonne 3
>NewA(:,3)=[];
par des 7
(affectation dun vide)
>>NewA(3,:)=7

>size(NewA)

NewA =

ans =

1.

2.

2.

2.

3.

4.

4.

4.

7.

7.

7.

7.

3.

4.

4.

4.

>size(NewA)
Informe de la
dimension dune matrice

ans =
4.

4.

4.

3.

>NewA($+1,:)=0
NewA =
1.

2.

2.

3.

4.

4.

7.

7.

7.

3.

4.

4.

0.

0.

0.

$ reprsente le dernier
lment, cette opration
ajoute une dernire ligne
affecte de 0.

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode calculatrice volue : fonctions de base.


abs() Valeur absolue ou module

erfc() Fonction erreur erf ( x ) =

acos() Cosinus inverse

1
2

exp() Exponentielle

acosh() Cosinus inverse hyperbolique

exp( t )dt
x

fix() Partie entiere la plus proche de 0

asin() Sinus inverse

foor() Partie entiere inferieure

asinh() Sinus inverse hyperbolique

x 1
gamma() Fonction gamma ( x ) = t exp( t )dt

atan() Tangente inverse

log() Logarithme nprien

atanh() Tangente inverse hyperbolique

log10() Logarithme dcimal

ceil() Partie entiere par exces

log2() Logarithme binaire

cos() Cosinus (en radian)


cosh() Cosinus hyperbolique

round() Arrondi a l'entier le plus


proche

cotg() Cotangente (en radian)

sign() Fonction signe

coth() Cotangente hyperbolique

sin() Sinus (en radian)

tan() Tangente (en radian)

sinh() Sinus hyperbolique

tanh() Tangente hyperbolique

sqrt() Racine carre

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Les nombres et types particuliers


Certains nombres sont directement utilisables :

Un nombre complexe se forme de la manire suivante :

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

>isreal(A)

>norm(B)
ans =

Norme du nombre
complexe B

2.236068

ans =
F

Test si un nombre
est rel ou
complexe

>A*B

>isreal(norm(A))

ans =

ans =

- 7. - 11.i

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte.


Pour des calculs plus complexes ou llaboration de programmes, il est prfrable
dlaborer un script. Celui-ci peut-tre enregistr et peut-tre modifier en facilitant
grandement son excution.
On identifie deux types de fichiers scripts par leurs suffixes :
_____.sce

(successions de commandes prtes tre excutes),

_____.sci

(ensemble de sous-programmes, pouvant tre appels par


dautres scripts)

Il faut pour cela cliquer sur Editeur et lditeur de script apparat.


On peut dors-dj sauvegarder le programme laborer premier_pas.sce

Pour executer le script :


Execute/Load into scilab ou F5

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte : Exemples dapplications.


Ecrire un script permettant la rsolution du systme linaire suivant :
3 messieurs ayant le mme jour d'anniversaire discutent de leurs ges pendant une
rception.

* 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 rsolution matricielle dun systme linaire 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 . )


Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte : Exemples dapplications.


Correction, il faut rsoudre le systme suivant :

Le script associ est simplement :

1
1 X
135 1
35 = 1 0
1 P



19.5 0.5 1 0.5 J

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


B=[135;35;19.5];
AgesXPJ =(A\B)
34.
32.
69.

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte : Exemples dapplications.


Pour retrouver les valeurs min et max dune matrice,
Ajouter votre script :

[Agemin,indice]=min(AgesXPJ)

AgesXPJ =(A\B)
34.
32.
69.

Cela retourne

indice =
La valeur min est associe au
2me lment du vecteur

2.
Agemin =
32.

Rechercher llment max de la matrice A


Renvoie uniquement une des multiples
valeurs maximales de la matrice !!
Jrme Yon et JeanJean-Bernard Blaisot

10

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte : Exemples dapplications.


1
0
4
2 4
1

1 2 4

0 1 2

Utiliser votre script afin de gnrer un matrice


C de dimension (m*m) de la forme :
Avec m=6.
Vous utiliserez pour cela la fonction diag.

0
0

Indication :
Pour obtenir des informations sur la fonction diag,
On peut taper help diag dans la fentre principale ou
Cliquer sur ? dans le menu droulant

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation en mode scripte : Exemples dapplications.


Gnrer la matrice ci-contre et utiliser la fonction
spec pour dterminer la matrice diagonalise associe
la matrice A ainsi que la matrice constitue des vecteurs
propres.

2 1 2
A = 1 2 2

2 2 1

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


[Propres,Matricediag]=spec(A)
Vrifier que le rsultat obtenu est correct en faisant lopration suivante :

Matricediagbis=(1/Propres)*A*Propres

Re-dtermination de la matrice diagonale

round(Matricediag)==round(Matricediagbis)
Comparaison des deux matrices
La fonction round est utilise pour arrondir les matrices leurs expressions
dcimales approches
Jrme Yon et JeanJean-Bernard Blaisot

11

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation des boucles : boucle for


Exemple de calcul :

Construit un vecteur progression logarithmique


(base 10) de 10 lments entre 10-4 et 105

Diam=logspace(-4,5,10);
Dlog=[];
k=0;

Pour chaque lment du vecteur Diam

for D=Diam

Dlog=cat(2,Dlog,log10(D));
k=k+1;

On cre le vecteur Dlog en le concatnant chaque


itration avec le log de llment considr du
vecteur D

Permet de connaitre le nombre dlments du vecteur D

end

Lutilisation de la boucle for pour le calcul prcdent nest pas pertinent car
strictement quivalent :

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

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation des boucles : boucle for


Exemple de calcul :
Pour i allant de 1 50

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

Etablissement du vecteur y

end
plot(y)

Trac de la courbe

Peut galement scrire en ligne :

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

Jrme Yon et JeanJean-Bernard Blaisot

12

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation des boucles : boucle while


Exemple de calcul :

i=1
while i<=50, y(i)=(i^2-1)/2;i=i+1; end

Liste des oprateurs logiques :

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Utilisation des instructions conditionnelles : if


Exemple simple, en ligne:

if x>0 then, y=2*x^2-3;else y=0; end

Choix multiples :

if x>0 then
y=2*x^2-3;
elseif x<0 then
y=-2*x^2-3;
else y=0;
end
Jrme Yon et JeanJean-Bernard Blaisot

13

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Ecriture de sous-programmes
Pour simplifier la lisibilit de scripts faisant appel des calculs rcurrents,
il est possible de dfinir 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 laide de la srie suivante.
Le paramtre dentre de cette fonction est la prcision souhaite, les paramtres de
sortie sont : le nombre calcul et le rang n de la srie, ncessaire pour obtenir cette
prcision. Excuter le pour atteindre une prcision de 10-5
n
n

= 4
n =0

( 1)

2n + 1

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Rsultat Exercice

Formation Scilab Ecole doctorale SPMI

function [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

Jrme Yon et JeanJean-Bernard Blaisot

14

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Linterruption programme des boucles for ou while


Linstruction break permet larrt dune boucle en cours dexcution sans pour autant
arrter le programme.

Exemple : ajouter dans la fonction CalculPi une instruction permettant larrt de la


dtermination du nombre Pi lorsque le nombre ditrations atteint un valeurs nmax
(nouvelle variable dentre de la fonction)

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Rsultat Exercice

Formation Scilab Ecole doctorale SPMI

function [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)

Jrme Yon et JeanJean-Bernard Blaisot

15

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Commandes permettant le dbogage dun programme


Il existe des commandes permettant de dboguer un programme :
1.

Il est possible de stopper un programme en cours dexcution en faisant ctrl-c


(quivalent de Contrle\interrompre). La fentre principale indique alors -1-> ce
qui indique que le programme est en mode pause . On peut alors soit
linterrompre dfinitivement et librer lespace mmoire des variables en faisant
Contrle\Terminer (=abort) ou bien reprendre lexcution avec
Contrle\Reprendre (=resume).

2.

Ces oprations peuvent tre effectues des endroits prcis du programme en


insrant les commandes suivantes aux endroits souhaits :
(pause,abort,resume).

3.

Lors dune pause, les variables de la fonction interrompue sont accessibles partir
de la fentre principale.

4.

On peut galement sintresser aux valeurs successives dune variable lintrieur


dune boucle. Ex : insrer la commande disp(Pi) dans la boucle while de la
fonction CalculPi. disp associe la commande pause et laffichage de la variable Pi

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Fonctions error et warning


Il est possible dafficher un message dalerte lors de lexcution dune fonction :

Sans interruption du programme :

warning(attention vous avez dpass le nombre maximal ditrations)

Une chaine de texte est dlimite par un , si la chaine doit


contenir ce caractre, il faut alors le doubler

En interrompant le programme :

error(Stop : nombre maximal (%d) ditrations dpass,nmax)

Permet linsertion dans le texte dune variable


(entire ici)

Jrme Yon et JeanJean-Bernard Blaisot

16

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Sauvegarder et rcuprer des variables dune session scilab


Il est possible de sauvegarder et de charger de manire compacte (binaire) lensemble ou
certaines variables gnres lors dune session scilab laide des commandes
save et load.
Exemple pour la sauvegarde de toutes les variables :

browsevar();

Affiche lditeur de variables

A=12;
B=ones(2,3);

Gnre 2 variables

save('scilab.dat')

Enregistre lensemble des variables

clear

Efface lensemble des variables de la mmoire

load('scilab.dat')

Lecture de lensemble des variables


contenues dans le fichier

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Sauvegarder et rcuprer des variables dune session scilab


Pour la sauvegarde et la lecture de quelques variables :

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

A lenregistrement on indique directement la variable


A la lecture on indique les variables sous forme de chaines de
caractres

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

Jrme Yon et JeanJean-Bernard Blaisot

17

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Les chaines de caractres


Comme nous lavons vu prcdemment, une chaine de caractres est dlimite par ou
Une variable de scilab peut tre une chaine de caractres au mme titre quun nombre
entier, boolen, rel ou complexe :

VarA=" ""Scilab"" ";


VarB="c''est ";
VarC="trop fort!";

Lopration + pour des chaines de caractres correspond la concatnation :

>Text=VarA+VarB+VarC
Text =
"Scilab" c'est trop fort!

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Les chaines de caractres


Comme pour les autres types de variables, on peut dfinir des matrices de chaines de
caractres :

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

Dfini un vecteur colonne


de chaines de caractres

-->size(MatText)

Dimension de la matrice forme

ans =
1.

3.

-->length(MatText)

chaine de la matrice

ans =
8.

Nombre de caractres dans chaque

5.

10.

Jrme Yon et JeanJean-Bernard Blaisot

18

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Manipulation de chaines de caractres


Exercice : Dfinir une fonction Adapte_Nom qui, partir dune variable contenant une
chaine de caractres du type nom de fichier (nom.ext), retourne un autre nom de
fichier avec le prfixe scilab prcdent le point (nom-scilab.ext)

Indication :
Voir la commande strsubst dans laide

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Manipulation de chaines de caractres


Rsultat de lexercice :

function NomSortie=Adapte_Nom(NomEntree)
NomSortie=strsubst(NomEntree,'.','-silab.');
Recherche dans la chaine la chaine et la remplace par la chaine

endfunction
Adapte_Nom("poesie.txt")

Jrme Yon et JeanJean-Bernard Blaisot

19

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Manipulation de chaines de caractres


Exercice : modifier la procdure de faon insrer en plus du suffixe scilab un nombre
entier n donn en argument.

Indication :
Il faut convertir le nombre entier en une chaine de caractres. Voir dans laide la
commande string.

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Manipulation de chaines de caractres


Rsultat de lexercice :

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

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

Jrme Yon et JeanJean-Bernard Blaisot

20

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Manipulation de chaines de caractres


Dfinissons une fonction recuperation qui partir dun fichier du type *-scilabn.ext va
rcuprer le nombre entier n.

function nb=recuperation(Nom_Fichier)

Position de la chaine scilab dans Nom_Fichier

avant=strindex(Nom_Fichier,'scilab')
apres=strindex(Nom_Fichier,'.')

Position du . dans Nom_Fichier

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

Rcupration de la portion de chaine


dfinissant le nombre entier n
Evaluation de la commande scilab crite dans la
chaine de caractres : ici, cela revient
convertir la chaine en nombre

nb=recuperation(Nom_Fichier)

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Cration de listes
Les listes sont des objets contenant diffrentes variables scilab de types diffrents. Les listes
sont particulirement utiles pour llaboration de bases de donnes.
Exemple : on souhaite renseigner une fiche permettant lidentification dun patient :

Nom

Prnom

Lieu de naissance

Date de naissance
Fiche=tlist(["Identification","Nom","Prnom","Ville","naissance"],"Dupond","Jean","Rouen",[24 3 1958]);

Variable de
type liste

Identification des diffrentes


variable de la liste

Affectation des variables


associes cette fiche

Jrme Yon et JeanJean-Bernard Blaisot

21

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Cration de listes
On peut bien sr rcuprer un lment dune liste.
Exemple dapplication : dtermination de lage de Jean Dupond :
Renvoie un nombre caractrisant la date
actuelle en nombre de jours coul
depuis une date de rfrence

Date=Fiche.naissance(1)
Mois=Fiche.naissance(2)
Annee=Fiche.naissance(3)

Age_en_annees = (datenum()-datenum(Annee,Mois,Date))/365
Renvoie un nombre caractrisant la date
donne en nombre de jours coul
depuis une date de rfrence

Text=['M.',Fiche.Nom,' est n ',Fiche.Ville,' il a, ce jour


',string(Age_en_annees),' ans']

Affichage du rsultat

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Cration de listes
Afin de crer la base de donnes, on peut construire une matrice dont les lments sont
des listes.
Exercice : Construire un vecteur Fiche dont le premier lment est la fiche de Jean Dupont
Et la seconde est la fiche de Yvette Dupond ne Rouen le 2/12/1944.
Dduire du vecteur Fiche la diffrence dage entre Jean et Yvette.

Jrme Yon et JeanJean-Bernard Blaisot

22

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Cration de listes
Rsultat de lexercice :

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

Fiche(2)=tlist(["Identification","Nom","Prnom","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 !

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Le formatage des variables


Lors de laffichage dune chaine de caractres contenant des variables (message derreur
par exemple) il faut pouvoir indiquer quel type de variable lon souhaite afficher ainsi que
leur format (nombre de chiffres significatifs par exemple) :
Convertie la variable relle 4 en un entier

printf('Le nombre Pi est %1.4f %d dcimales prs \n',%pi,4)


Formate le nombre comme un rel avec 4 dcimales
La commande printf permet laffichage dinformations dans le
fentre principale de scilab
Lorsque la variable est un matrice ou un vecteur, la commande printf est
rpte automatiquement pour chaque ligne de la matrice ou du vecteur :

A=[1:1:4]';
printf('Valeurs de A : %d \n',A)
Jrme Yon et JeanJean-Bernard Blaisot

23

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Le formatage des variables


Liste des codes de format utiliser (quivalent au langage C).

A=111111.222222

Format

description

Exemple

%d

Format nombre entier

A111111

%f

Format nombre rel

A111111.222222

%1.2f

Format nombre rel avec 2 chiffres aprs la


virgule

A111111.22

%1.3e

Equivalent en notation scientifique

A1.111e+005

%s

Chaine de caractres

\n

Indicateur de saut de ligne

\t

Saut dune tabulation

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Construction dune chaine de caractres partir de variables


Outre laffichage lcran, cette procdure de formatage permet la gnration de
chaines de caractres :

Chaine=sprintf('Le nombre Pi est %1.4f %d dcimales prs \n',%pi,4)

Lajout de lindicatif s indique que le formatage est renvoy


dans une chaine de caractres

Jrme Yon et JeanJean-Bernard Blaisot

24

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Ecrire simplement une matrice dans un fichier txt


Il est possible dexporter des matrices trs simplement sous format texte par exemple en vu
de les lire sous Excel :

Mat=rand(4,3);
optionnel

fprintfMat('mat.txt',Mat,'%e','ligne d''entte') ;
Ajout dune
ligne dentte

Nom du fichier
Variable crire

Format de
lcriture

ligne d'entte
2.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

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Lire simplement une matrice dans un fichier txt


Il est possible dexporter des matrices trs simplement sous format texte par exemple en vu
de les lire sous Excel :
Matrice de variable gnre partir du fichier
Nom du fichier

>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

Jrme Yon et JeanJean-Bernard Blaisot

25

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Mthode gnrale dcriture dans un fichier


Ouverture dun fichier repr par son
identifiant

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

fprintf(file1,'Le nombre Pi est %1.4f %d dcimales prs \n',%pi,4);


Ecriture dans le fichier identifi par file1
de la chaine de caractres.

mclose(file1);

Fermeture du fichier

Dans mopen, le terme w est optionnel. Il indique que le fichier est ouvert en
criture (contrairement r lecture). Voir laide pour plus dinformations

Jrme Yon et JeanJean-Bernard Blaisot

Pr
Prsentation g
gnrale de Scilab

Formation Scilab Ecole doctorale SPMI

Mthode gnrale pour la lecture dans un fichier


Tout dabord gnrons un fichier texte appel donnees_a_lire.txt :
Ce fichier contient des informations lire
3.14

nombre_Pi

nombre_de_chiffres_aprs_la_virgule

1944

anne_de_naissance_d'Yvette

On utilise la tabulation pour sparer


les variables des commentaires

Voici le script de lecture associe ce fichier :

file2=mopen('donnees_a_lire.txt','r')
Commentaires=mgetl(file2,1)

Lit directement la premire ligne comme


chaine de caractres

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

Lecture formate ligne par ligne

[n,Annee,Comment]=mfscanf(file2,'%lf\t%s\n')
mclose(file2);
Jrme Yon et JeanJean-Bernard Blaisot

26

Formation Scilab Ecole doctorale SPMI

Fin de la sance

Jrme Yon et JeanJean-Bernard Blaisot

27

Vous aimerez peut-être aussi