350 likes | 665 Views
Formation au logiciel SCILAB. 23 mars 2006. Programme. Notions de base Fonctionnement de SCILAB Entrer une commande QQ points importants Installer HYDROGR Importer / Exporter des données Lire / Ecrire dans des fichiers textes Lire dans des fichiers Excel Traiter des données
E N D
Formation au logiciel SCILAB 23 mars 2006
Programme • Notions de base • Fonctionnement de SCILAB • Entrer une commande • QQ points importants • Installer HYDROGR • Importer / Exporter des données • Lire / Ecrire dans des fichiers textes • Lire dans des fichiers Excel • Traiter des données • Fonctions utiles dans SCILAB • qq fonction de la boîte à outil HYDROGR >> Mise en pratique
Programme • Faire des graphiques 2d • Graphiques simple 2d • Titres, légendes et style des courbes • Dates en abscisses • Graphiques « carrés » • Exporter au format GIF >> Mise en pratique • HYDROGR • GR4J • Réseaux de neurones
Notions de base Nom de l’événement + date
Fonctionnement de SCILAB • SCILAB = • Prompteur en ligne de commande • Editeur de Script • Des fonctions • Une aide pour chq fonctions • SCILAB est • Gratuit • Développé par l’INRIA • Comparable à MATLAB • Basé sur un langage interprété (proche du Cen bcp plus simple) • CASE SENSITIVE !
Entrer une commande • Utiliser le prompteur • Taper la commande • Valider par entrée • Ecrire un script • Taper scipad() dans le prompteur >> éditeur de script • L’exécuter .. pour cela on peut • Soit taper [Ctrl] + l dans l’éditeur de script • Soit taper exec( [ Nom du fichier contenant le script ] ) dans le prompteur --> a = ones(10,5) • -> b = 10 * a’ • -> scipad( )
Quelques points importants • Ajouter des commentaires // • Lancer l’aide help • Eviter un affichage sur le prompteur ; • Transposée d’une matrice ‘ • Génération de vecteurs : • Fin de vecteur $ • Matrice [ ] --> // Commentaire • -> PasCommentaire = 1 • -> PasCommentaire = 1; • -> help plot2d • -> a = 1:100 • -> b = 1:0.01:100 • -> c = 100:-1:1 • -> a2= a’ • -> u = a($-10) • -> A = [[1 2];[3 4]]
Installer HYDROGR • Télécharger le fichier HYDROGRv00.zip(http://lerat.julien.free.fr log=test pwd=essai) • Dezipper dans le répertoire C:\Program Files\Scilab 3.1.1\contrib\ • Supprimer le fichier loader.sce qui se trouve dans C:\Program Files\Scilab 3.1.1\contrib\ • Remplacer par le fichier loader.sce qui se trouve dans le répertoire HYDROGRv00 • Lancer SCILAB
Installer HYDROGR Dans SCILAB, l’écran doit être le suivant
Importer / Exporter des données Nom de l’événement + date
Cas simple >> données numériques • Ouvrir un fichier texte et récupérer une matrice SCILAB = fscanfMat • Imprimer une matrice SCILAB dans un fichier texte = fprintfMat --> // Lire des donnees numeriques --> Chem = ‘C:\essai\’; --> D1 = fscanfMat(Chem + ‘DATA1.DAT’); • -> D1 • -> plot2d(D1(:,2),D1(:,3)) • -> // Ecrire dans un fichier texte • T = rand(200,5); --> fprintfMat(Chem + ‘T.txt’,T);
Cas + complexe >> texte + numérique • Ouvrir le fichier avec mopen • Imprimer ou lire dans le fichier avec mfprintf et mfscanf et mgetl • Fermer le fichier avec mclose --> // Récupère les lignes --> fdat = mopen(Chem + 'DATA2.DAT','r'); --> Txt = mgetl(fdat); --> mclose(fdat); --> Txt=Txt(4:$); --> // Analyse des lignes --> [n,Code1,Sta,Jour,Q,Code2,Code3] = msscanf(-1,Txt,'%3s;%8s;%d;%f;%c;%d\n');
Lire des données dans Excel • Instruction readxls --> Feuille = readxls(Chem + 'DATA1.xls'); --> Dxls = Feuille(1).value; --> Dxls = Dxls(2:$,:);
Traiter des données Nom de l’événement + date
Quelques instructions utiles • size : taille d’une matrice • for … end : boucle for • if .. then … else : condition • find : identifier des éléments dans une matrice • mean : moyenne par colonne ou par ligne • st_deviation : Ec. type par colonne ou par ligne • zeros : générer une matrice de zeros • ones : générer une matrice de 1 • diag : matrice carrée à partir d’une diagonale • rand : générer une matrice de nb aléatoires • execstr : évaluer une expression SCILAB • convol : convolution discrète (>> HU) • corr : auto-corrélation, corrélation croisée • gsort : trier les éléments d’une matrice • linear_interpn : Interpolation linéaire
Exemples --> D1 = fscanfMat(Chem + ‘DATA1.DAT’); --> Nligne = size(D1,1); // Nb de lignes dans D1 --> // Trouver les forts débits --> Icrue = find(D1(:,3)>20); // Q > 20 mm • -> // Moyenne et écart type des forts débits et ETP • -> Stat = [mean(D1(Icrue,[3,4]),’r’) ; ... st_deviation(D1(Icrue,[3,4]),’r’) ] • -> // Normer les forts débits et les pluies • -> NORM = D1(:,[3,4]) - ones(Nligne,1)*Stat(1,:) • -> NORM = NORM * diag(Stat(2,:).^(-1))
A vous de jouer …. Nom de l’événement + date
Faire des graphiques Nom de l’événement + date
Qq notions sur les graphiques SCILAB Légende (legend) Fenêtre graphique (figure) Graphique (axes) Courbe (polyline) Titres
Les fonctions clefs • plot2d : Génération d’un graphique • plot2d2 : Génération d’un graphique « palier » • clf() : « Nettoyage » de la fenêtre active • xset(‘window’,N) : Ouvre une figure (n°=N) • get(‘current_figure’) : récupère les propriétés de la fenêtre active • gca() : récupère les propriétés du graphique actif • get(‘hdl’): récupère les prop. de la courbe active • xtitle : ajoute un titre général et sur chaque axe • legends : ajoute une légende • xs2gif : exporte une figure au format GIF • axes_properties : liste des propriétés des graphiques (dans l’aide) • polyline_properties : liste des propriétés des courbes (dans l’aide)
Les options utiles de la fonction plot2d • rect : Définition de la fenêtre d’affichage • [minX, minY, maxX, maxY] • style : définition de l’allure des courbe • 1, 2,… Courbe en trait plein avec diff couleurs • -1,-2,… Représentation par point (diff. marqueurs) • logflag : échelle log ou non • nn Graph normal • nl X normal, Y log --> y = rand(100,1); --> x = (1:100)’; --> plot2d(x,y,rect=[30,-2,60,2],style=-9) --> plot2d(x,100*y,logflag=‘nl’)
Graphiques simple 2d • Faire un graphique pluie / débit avec la pluie en axe inversé --> D1 = fscanfMat(Chem + ‘DATA1.DAT’); --> Id = 1000; If = 1300; // Limitation de la plage --> Q = D1(Id:If,3); P = D1(Id:If,5); --> plot2d (Id:If,Q, style=1,rect=[Id,0,If,100]) --> plot2d2(Id:If,100-P,style=2,rect=[Id,0,If,100]) Nom de l’événement + date
Titres, légendes et style des courbes --> D1 = fscanfMat(Chem + ‘DATA1.DAT’); --> Id = 1000; If = 1300; // Limitation de la plage --> Q = D1(Id:If,3); P = D1(Id:If,5); --> plot2d (Id:If,Q, style=1,rect=[Id,0,If,100]) --> plot2d2(Id:If,100-P,style=2,rect=[Id,0,If,100]) --> xtitle (‘Hydrogramme’,’’,’Q (mm)’) --> legends([‘Q’;’P’],1:2,1) --> gr = gca(); --> gr.children(2).children.line_style=2; // Pointillés --> Nom de l’événement + date
Dates en abscisses • Besoin fréquent = Ajouter une date en abscisse • >>>> Fonction de la boîte à outil HYDROGR • c_CONVDATE : Conversion date Excel numérique / format AAAAMMJJhhmm • SERIEDATE : Génére une série de date à pas constant --> // Conversion de 3/1/96 12:56 en nombre --> a = c_CONVDATE(0,199601031256); --> // Conversion de 31450.333 en date --> b = c_CONVDATE(1,31450.3333) --> Annee = int(b/10^8) // récupère l’année Nom de l’événement + date
Dates en abscisses --> // Récupération des dates (Annee, Mois et Jour) --> DT = D1(Id:If,1); --> Jr=int(DT/10^6); Mo=int(DT/10^4)-Jr*100; --> An=DT-Mo*10^4-Jr*10^6; --> // Conversion --> DTx = c_CONVDATE(0,An*10^8+Mo*10^6+Jr*10^4); --> //Tracé du graph et ajout des dates en abscisse --> plot2d (DTx,Q) --> gr = gca(); --> [eq eqx]=SERIEDATE(DTx(1),DTx($),‘m',2,1); --> gr.auto_ticks=['off','on']; --> XTK=tlist(['ticks','locations','labels'],eq,eqx); --> gr.x_ticks=XTK; --> xgrid(2); Nom de l’événement + date
Graphiques « carrés » + export en GIF • Propriété « isoview » du graphique --> plot2d (rand(100,1),rand(100,1),style=-9) --> plot2d ([0,1],[0,1],style=2); --> gr = gca(); --> gr.isoview=‘on’; --> fig = get(‘current_figure’); --> fig.figure_size = [500,500]; --> // Export --> xs2gif(0,Chem + ‘FIG_CARRE.gif’); Nom de l’événement + date
Plusieurs graphiques par fenêtres • subplot : « Quadrillage » de la figure par plusieurs graphiques Nb de Grph ds la largeur N° du graph dessiné Nb de Grph ds la hauteur --> subplot(2,2,1) --> plot2d (rand(100,1),rand(100,1),style=-9) --> subplot(2,2,2) --> plot2d ([0,1],[0,1],style=2); --> subplot(2,2,3) --> plot2d (sin(1:100)); Nom de l’événement + date
A vous de jouer …. Nom de l’événement + date
La boîte à outil HYDROGR Nom de l’événement + date
Calage de GR4J • De l’aide --> help HYDROGRv00 • c_GR4J : Simulation avec GR4J (codé en C) --> D1 = fscanfMat(‘C:\essai\DATA1.DAT’); --> Q = D1(:,3); P = D1(:,5); E = D1(:,4); --> // Définition des paramètres --> X = [500;0;60;1]; --> // Lancement de la simulation --> Qsim = c_GR4J(24,X,P,E); --> // Graph de résultat --> plot2d([Q Qsim]); Pluie Pas de temps ETP Paramètres Nom de l’événement + date
Calage de GR4J • PasaPas : Méthode pas à pas • Etape 1 = Définir une fonction objectif • Etape 2 = Définir une valeur initiale des paramètres • Etape 3 = Lancer la fonction PasaPas Nom de l’événement + date
Calage de GR4J Fction objectif • PasaPas : Méthode pas à pas --> D1 = fscanfMat(‘C:\essai\DATA1.DAT’); --> Q = D1(:,3); P = D1(:,5); E = D1(:,4); --> // Définition de la fonction objectif --> deff('C2M=FctObj(Xt)',... --> ‘X(1)=exp(Xt(1)); X(2)=sinh(Xt(2));’ + … --> ‘X(3)=exp(Xt(3)); X(4)=exp(Xt(4));’ + … --> ‘Qsim = c_GR4J(24,X,P,E);’ + … --> ‘t=CRIT(Q(365:$),Qsim(365:$)); C2M = -t(3);’) --> // Calage --> Xtini = [log(500);0;log(50);log(1)]; --> [Xt,RES] = PasaPas(‘FctObj’,X); --> X = [exp(Xt(1));sinh(Xt(2));exp(Xt(3));exp(Xt(4))]; Nom de l’événement + date
Réseaux de neurones… • Un autre jour…. Nom de l’événement + date
A vous de jouer …. Nom de l’événement + date