Cours Scilab PDF
Cours Scilab PDF
Cours Scilab PDF
Formation Scilab
Jean-Bernard Blaisot (MdC Univerist de Rouen)
Jrme Yon (MdC INSA de Rouen)
Plan
JY
JBB
JBB
Plan
JBB
JY
JY
Pr
Prsentation g
gnrale de Scilab
Pr
Prsentation g
gnrale de Scilab
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
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 .
Pr
Prsentation g
gnrale de Scilab
>X=2;
>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
8.
- 2.
0.125
Pr
Prsentation g
gnrale de Scilab
>MN=M+N
>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
Pr
Prsentation g
gnrale de Scilab
>D=zeros(C)
>triu(ones(5,5))
>x=rand(1,3)
>x= =x
Comparaison logique
lment par lment de
lgalit propose
>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
Pr
Prsentation g
gnrale de Scilab
>A=[1 2;3 4] ;
>A*A
Produit matriciel de A
par sa transpose.
ans =
>A.*A'
ans =
1.
6.
6.
16.
Lopration .+ nexiste
pas du fait de son
quivalence
lopration +
5.
11.
11.
25.
>x=linspace(0,2*%pi,50);
>y=sin(x);
>plot(x,y)
Pr
Prsentation g
gnrale de Scilab
>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.
Pr
Prsentation g
gnrale de Scilab
>A11=1;
>A12=[2 2 2];
>A21=[3;3;3];
>A22=4*ones(3,3);
>V1=[1 1 1];
>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.
Pr
Prsentation g
gnrale de Scilab
>NewA(1,2)
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
>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.
Pr
Prsentation g
gnrale de Scilab
1
2
exp() Exponentielle
exp( t )dt
x
x 1
gamma() Fonction gamma ( x ) = t exp( t )dt
Pr
Prsentation g
gnrale de Scilab
>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
Pr
Prsentation g
gnrale de Scilab
_____.sci
Pr
Prsentation g
gnrale de Scilab
ou
X=A\B
ou
Pr
Prsentation g
gnrale de Scilab
1
1 X
135 1
35 = 1 0
1 P
19.5 0.5 1 0.5 J
Pr
Prsentation g
gnrale de Scilab
[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.
10
Pr
Prsentation g
gnrale de Scilab
1 2 4
0 1 2
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
Pr
Prsentation g
gnrale de Scilab
2 1 2
A = 1 2 2
2 2 1
Matricediagbis=(1/Propres)*A*Propres
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
Diam=logspace(-4,5,10);
Dlog=[];
k=0;
for D=Diam
Dlog=cat(2,Dlog,log10(D));
k=k+1;
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);
Pr
Prsentation g
gnrale de Scilab
for i=1:50
y(i)=(i^2-1)/2;
Etablissement du vecteur y
end
plot(y)
Trac de la courbe
12
Pr
Prsentation g
gnrale de Scilab
i=1
while i<=50, y(i)=(i^2-1)/2;i=i+1; end
Pr
Prsentation g
gnrale de Scilab
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
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
Pr
Prsentation g
gnrale de Scilab
Rsultat Exercice
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
14
Pr
Prsentation g
gnrale de Scilab
Pr
Prsentation g
gnrale de Scilab
Rsultat Exercice
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)
15
Pr
Prsentation g
gnrale de Scilab
2.
3.
Lors dune pause, les variables de la fonction interrompue sont accessibles partir
de la fentre principale.
4.
Pr
Prsentation g
gnrale de Scilab
En interrompant le programme :
16
Pr
Prsentation g
gnrale de Scilab
browsevar();
A=12;
B=ones(2,3);
Gnre 2 variables
save('scilab.dat')
clear
load('scilab.dat')
Pr
Prsentation g
gnrale de Scilab
save('Fichier_part.dat',Var1,Var2 )
17
Pr
Prsentation g
gnrale de Scilab
>Text=VarA+VarB+VarC
Text =
"Scilab" c'est trop fort!
Pr
Prsentation g
gnrale de Scilab
-->size(MatText)
ans =
1.
3.
-->length(MatText)
chaine de la matrice
ans =
8.
5.
10.
18
Pr
Prsentation g
gnrale de Scilab
Indication :
Voir la commande strsubst dans laide
Pr
Prsentation g
gnrale de Scilab
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")
19
Pr
Prsentation g
gnrale de Scilab
Indication :
Il faut convertir le nombre entier en une chaine de caractres. Voir dans laide la
commande string.
Pr
Prsentation g
gnrale de Scilab
function NomSortie=Adapte_Nom(NomEntree,n)
NomSortie=strsubst(NomEntree,'.','-scilab'+string(n)+'.');
endfunction
Nom_Fichier=Adapte_Nom("poesie.txt",125)
20
Pr
Prsentation g
gnrale de Scilab
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)
Pr
Prsentation g
gnrale de Scilab
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
21
Pr
Prsentation g
gnrale de Scilab
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
Affichage du rsultat
Pr
Prsentation g
gnrale de Scilab
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.
22
Pr
Prsentation g
gnrale de Scilab
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
Pr
Prsentation g
gnrale de Scilab
A=[1:1:4]';
printf('Valeurs de A : %d \n',A)
Jrme Yon et JeanJean-Bernard Blaisot
23
Pr
Prsentation g
gnrale de Scilab
A=111111.222222
Format
description
Exemple
%d
A111111
%f
A111111.222222
%1.2f
A111111.22
%1.3e
A1.111e+005
%s
Chaine de caractres
\n
\t
Pr
Prsentation g
gnrale de Scilab
24
Pr
Prsentation g
gnrale de Scilab
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
Pr
Prsentation g
gnrale de Scilab
>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
25
Pr
Prsentation g
gnrale de Scilab
file1=mopen('ecriture_fichier.txt','w')
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
Pr
Prsentation g
gnrale de Scilab
nombre_Pi
nombre_de_chiffres_aprs_la_virgule
1944
anne_de_naissance_d'Yvette
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);
Jrme Yon et JeanJean-Bernard Blaisot
26
Fin de la sance
27