Upload
soukaina
View
214
Download
0
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