Post on 17-Feb-2019
Scuola universitaria professionaledella Svizzera italiana
DipartimentoTecnologieInnovative
Introduzione a Scicoslab
Ing. Roberto Bucher
7 maggio 2010
Indice
1 Introduzione 9
1.1 Origini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Piattaforme HW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Basi 11
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Indirizzamento di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Manipolazione di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Informazioni sul Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Accesso al sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8 Salvataggio e richiamo di dati . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9 Formati dei numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.10 Altre caratteristiche di base . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.11 Stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 L’Help in linea 21
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Il comando help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Il comando apropos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Calcolo scientifico 25
4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Funzioni matematiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3 Numeri complessi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Operazioni con matrici 29
5.1 Matematica tra scalari e matrici . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2 Matematica tra matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.3 Orientazione delle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.4 Operatori relazionali e logiche . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.4.1 Operatori relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.4.2 Operatori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.5 Algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7 maggio 2010 Copyright 2003 Roberto Bucher 3
Introduzione a Scicoslab INDICE
6 Matrici sparse 35
7 Semplici script 37
8 Programmi e controllo di flusso 398.1 Programmi e funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398.2 Controllo di flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2.1 Ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408.2.2 Ciclo while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418.2.3 Ciclo if-elseif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418.2.4 Ciclo select-case-else . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9 Analisi di dati 439.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.1.0.1 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10 Polinomi 4510.1 Scomposizione in termini di frazioni parziali . . . . . . . . . . . . . . . . . . 47
11 Interpolazione 51
12 Grafica 5312.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5312.2 Figure e grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5312.3 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5312.4 Esempi di grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5412.5 Il comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5612.6 Grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5812.7 Stampa di immagini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5812.8 Animazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
13 Equazioni differenziali 61
14 Input/Output 6514.1 Dati in formato ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6514.2 Emulazione comandi C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6614.3 Lettura file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
15 Strutture particolari 6715.1 Matrici multidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6715.2 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
A Caricamento di funzioni 71
4 Copyright 2003 Roberto Bucher 7 maggio 2010
Elenco delle figure
2.1 Finestra di Scicoslab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1 Help browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2 Risultato del comando apropos(’ode’) . . . . . . . . . . . . . . . . . . . . . . 23
10.1 Approssimazione di punti con un polinomio . . . . . . . . . . . . . . . . . . 48
11.1 Interpolazione spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
12.1 Grafico di sin(x) 2 sin(x) + cos(x) . . . . . . . . . . . . . . . . . . . . . . . . 5512.2 Comando polarplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5512.3 Comando histplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5512.4 Comando fchamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5612.5 Risultato del comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . 5712.6 Comando plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5812.7 Comando contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5812.8 Comando mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5912.9 Comando plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
13.1 Simulazione dell’equazione di Van der Pol . . . . . . . . . . . . . . . . . . . 6213.2 Diagramma delle fasi dell’equazione di Van der Pol . . . . . . . . . . . . . . 63
7 maggio 2010 Copyright 2003 Roberto Bucher 5
Elenco delle tabelle
2.1 Operazioni su matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.2 Accesso al sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3 Operazioni con stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1 Funzioni scientifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.2 Operazioni sui numeri complessi . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1 Operazioni relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.2 Operazioni logiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.3 Richieste logiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4 Operazioni di algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.1 Operazioni per l’analisi dei dati . . . . . . . . . . . . . . . . . . . . . . . . . 43
12.1 Funzioni di base per la grafica . . . . . . . . . . . . . . . . . . . . . . . . . . 5312.2 Comandi per grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5412.3 Comandi per grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5812.4 Comandi per la stampa di grafici . . . . . . . . . . . . . . . . . . . . . . . . 59
14.1 Interfaccia su files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7 maggio 2010 Copyright 2003 Roberto Bucher 7
Capitolo 1
Introduzione
1.1 Origini
Scicoslab e un ambiente matematico e di simulazione numerica nato nei primi anni ’80in ambito universitario. A differenza di altri sistemi nati contemporaneamente che sonoin seguito diventati prodotti commerciali (per esempio Matlab), Scicoslab, sviluppato incollaborazione dall’IRIA (Institut National de Recherche en Informatique et Automatique)e dalla ENPC (Ecole Nationale des Ponts et Chaussee) e stato da subito reso disponibilegratuitamente sul WEB.
Il suo sviluppo e garantito da un consorzio formato dalle piu grosse compagnie francesi (enon) e da diverse universita, che ne supporano finanziariamente lo sviluppo.
La sua licenza, pur non essendo una licenza GPL, ne permette la copia e la distribuzione,a condizione che non venga modificato. Questa limitazione serve soprattutto a garantireche i risultati numerici del sistema restino affiabili, cio che non puo piu essere garantito sevengono apportate modifiche rilevanti al SW. Tutto il codice e distribuito in codice aperto,cio che permette a chiunque di poter controllare quanto fatto dal programma.
1.2 Piattaforme HW
Scicoslab gira su diverse piattaforme HW e diversi sistemi operativi, tra cui Il PC conWindows e Linux, sistemi Unix, Sun e Mac. La maggior parte delle funzioni e scrittautilizzando un codice ascii, cio che permette uno scambio molto semplice tra le diversepiattaforme.
1.3 Toolbox
La maggior parte delle funzionalita di un programma di questo genere sono gia integratenella versione di base scaricabile dalla rete. Quidi, a differenza di altri prodotti doveogni nuova funzionalit‘a deve essere acquistata separatamente, qui ci sono gia una grandequantita di toolbox integrati nella versione base. Tra le varie caratteristiche della versionebase troviamo
• Calcolo matriciale
• Sistemi di controllo
7 maggio 2010 Copyright 2003 Roberto Bucher 9
Introduzione a Scicoslab Capitolo 1. Introduzione
• Controllo robusto
• Analisi di segnali
• Identificazione
• Grafica 2D e 3D
• Ambiente grafico di simulazione Scicos
• Ottimizzazione
Inoltre, grazie alla filosofia di ambiente libero e aperto, molti sviluppatori esterni hannocreato toolbox specifici che possono essere integrati quali contributi nell’ambiente di base.Tra i contributi migliori troviamo ad esempio
• Generazione di codice per sistemi embedded (p.es RTAI e Flex dsPIC)
• Toolbox di comunicazione e modulazione
• Toolbox per la generazione interattiva di controllori (rltool)
• Toolbox per sistemi fuzzy
• Toolbox per reti neurali
10 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 2
Basi
2.1 Introduzione
Scicoslab e un ambiente di lavoro basato principalmente su comandi in linea, comepotrebbe essere l’ambiente DOS o UNIX. I comandi possono essere digitati direttamentesulla linea di comando o letti da file testo. Esiste la possibilita di scrivere applicazioni confinestre e bottoni, come pure di compilare funzioni scritte in un linguaggio tipo C o Fortran.Come potremo vedere, una grossa quantita di funzioni sono direttamente leggibili, essendoprogrammate in script di testo con estensione .sci o .sce.
L’utilizzo di tutte le funzioni risulta semplice e immediato.
Quando facciamo partire Scicoslab otteniamo una finestra (figura 2.1) contenente unasemplice linea di comando. Qui l’utente potra fare tutte le sue richieste e dare i suoicomandi.
Possiamo digitare direttamente sulla linea di comando le operazioni che vogliamo fare, siache si tratti di operazioni, sia che si tratti di funzioni particolari.
2.2 Tipi di dati
Scicoslab lavora con alcuni tipi di dati che sono:
• La matrice n-dimensionale di numeri reali, complessi, caratteri, booleani o strutturepiu complesse.
• La lista, un contenitore per svariati tipi di dati.
• La stringa
• Il tipo booleano
• Il polinomio
Per la creazione di variabili occorre tenere presente alcune convenzioni
1. Le variabili sono case-sensitive
2. I nomi delle variabili devono iniziare con una lettera e possono contenere lettere,numeri e ’_’.
7 maggio 2010 Copyright 2003 Roberto Bucher 11
Introduzione a Scicoslab Capitolo 2. Basi
Figura 2.1: Finestra di Scicoslab
12 Copyright 2003 Roberto Bucher 7 maggio 2010
2.2. Tipi di dati Introduzione a Scicoslab
Per la creazione e l’utilzzo di matrici multidimensionali, si rimanda alla fine di questadocumentazione. Per il momento ci occuperemo unicamente di matrici mono e bidimen-sionali.
Una matrice puo essere creata in differenti modi
• Digitando esplicitamente tutti gli elementi.
• Utilizzando funzioni specifiche di Scicoslab.
• Utilizzando matrici create in file .sci o .sce (script).
• Caricando le matrici da files esterni.
In Scicoslab non esistono dichiarazioni di tipi o di dimensioni. Scicoslab alloca diret-tamente la memoria necessaria ogni volta che si dichiara o si modifica una variabile.Se diamo una matrice in modo esplicito, dobbomo separare i valori di una riga utilizzandouno spazio oppure una “,”, e separiamo ogni riga utilizzando il simbolo “;” o andando acapo.
−−>a=[1 2 3 ;4 5 6 ; 7 8 9 ]a =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
−−>b=[1 ,2 ,3−−>4,5,6−−>7,8,9]b =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
Per matrici di dimensione piu grande e spesso utile utilizzare alcuni metodi o alcunefunzioni messe a disposizione da Scicoslab.
−−>x=1:10x =
1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 .
−−>y=l inspace (0 ,1 ,11)y =
0 . 0 .1 0 .2 0 .3 0 .4 0 .5 0 .6 0 .7 0 .8 0 .9 1 .
−−>x=0:0 .4 :2x =
0 . 0 .4 0 .8 1 .2 1 .6 2 .
−−>y=logspace (−1 ,1 ,10)y =
7 maggio 2010 Copyright 2003 Roberto Bucher 13
Introduzione a Scicoslab Capitolo 2. Basi
column 1 to 6
0 .1 0 .1668101 0.2782559 0.4641589 0.7742637 1.2915497
column 7 to 10
2.1544347 3.5938137 5.9948425 10 .
Altri comandi permettono di creare matrici particolari
−−>eye (3 ,3 )ans =
1 . 0 . 0 .0 . 1 . 0 .0 . 0 . 1 .
−−>ones (2 ,3 )ans =
1 . 1 . 1 .1 . 1 . 1 .
−−>zeros (2 ,4 )ans =
0 . 0 . 0 . 0 .0 . 0 . 0 . 0 .
Quando si creano matrici molto grandi si puo eliminare l’output terminando il comandocon “;”.I comandi rand e grand creano matrici di numeri casuali di dimensioni n x n o n x m,secondo varie ditribuzioni.
2.3 Indirizzamento di matrici
Gli elementi di una matrice possono essere di qualsiasi tipo
−−>x=[1 sin ( 0 . 7∗ pi ) sqrt (2 ) 1+2∗(4+3)/5]x =
1 . 0 .8090170 1.4142136 3 .8
Per accedere ad uno o piu elementi di una matrice si utilizzano le parentesi ( ).
−−>x (4)ans =
3.8
−−>x(6)= sin (x ( 1 ) )x =
1 . 0 .8090170 1.4142136 3 .8 0 . 0 .8414710
Scicoslab ha automaticamente adattato le dimensioni della matrice x alla nuova situa-zione e ha introdotto uno 0 nel valore x(5) non ancora assegnato.
14 Copyright 2003 Roberto Bucher 7 maggio 2010
2.4. Manipolazione di matrici Introduzione a Scicoslab
−−>A= [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 9 ] ;
−−>r=[10 11 1 2 ] ;
−−>A=[A; r ]A =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .10 . 11 . 12 .
Scicoslab unisce tra di loro matrici e vettori. Si possono estrarre anche piu elementicontemporaneamente
−−>b=A( 1 : 3 , : )b =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
1 : 3 significa intervallo da 1 a 3, mentre : significa tutti. La riga A(1 : 3, :) puo essereletta come le righe di A da 1 a 3 e tutte le colonne.
In quest’ultimo esempio vengono estratte le righe di A da 1 a 3 in ordine inverso, e lecolonne 1 e 2.
−−>c=a (3 : −1 :1 , [ 1 2 ] )c =
7 . 8 .4 . 5 .1 . 2 .
2.4 Manipolazione di matrici
Altre operazioni speciali su una matrice sono descritte nella tabella 2.1
tril estrae la parte superiore triangolare
triu estrae la parte inferiore triangolare
matrix(A,m,n) ridimensiona la matrice A a m x n. A devecontenere m*n elementi !
$ ultimo indice di una matrice
diag(v) crea una matrice con sulla diagonale ivalori del vettore v
diag(A) crea un vettore con gli elementi delladiagonale della matrice A
Tabella 2.1: Operazioni su matrici
Le operazioni per determinare le dimensioni di una matrice sono
7 maggio 2010 Copyright 2003 Roberto Bucher 15
Introduzione a Scicoslab Capitolo 2. Basi
−−>s ize ( a , 1 ) // numero r i g h eans =
3 .
−−>[r , c ]= s ize ( a ) // dimensioni r i g h e e colonnec =
3 .r =
3 .
E possibile accedere ad un elemento di una matrice con un solo indice. In questo caso glielementi sono visti come una colonna sotto l’altra
−−>a= [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 9 ]a =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
−−>a (4)ans =
2 .
2.5 Espressioni
Scicoslab e un linguaggio che si basa su espressioni nella forma
variabile = espressione
o semplicemente espressione
>> 100/3
ans =
33.3333
La risposta di un espressione senza assegnamento viene scritta in una variabile di defaultchiamata ans (answer). Da notare inoltre che il simbolo // inizia una parte di commento,e non viene quindi valutato dal sistema.
2.6 Informazioni sul Workspace
Con gli esempi precedenti sono state create delle variabili che si trovano memorizzate nelworkspace. E possibile avere informazioni su queste variabili con i comandi who e whos.Questi comandi mostrano pero anche tutto quanto e stato definito a livello di sistema, percui danno una quantita notevole di informazioni. Piu utile e il comando browsevar cheapre una finestra supplementare con solo le variabili definite dall’inizio della sessione.Esistono inoltre alcune variabili predefinite di sistema che sono
16 Copyright 2003 Roberto Bucher 7 maggio 2010
2.7. Accesso al sistema operativo Introduzione a Scicoslab
1. ans nome della variabile di default in uscita
2. %pi π
3. %eps il numero piu piccolo che addizionato a 1 crea un numero floating- pointmaggiore di 1 nel computer
4. %inf infinito
5. NaN Not-a-Number, numero indefinito (p.es. 0/0)
6. %i =√−1
Interessante e la possibilita di avere calcoli che danno risultati infiniti o non definiti senzache il sistema si blocchi o dia particolari errori. Per ottenere questo risultato occorre peroinizializzare il sistema con il comando ieee(2).
−−>ieee (2 )
−−>1/0ans =
In f
−−>−1/0ans =
−I n f
−−>0/0ans =
Nan
Mediante il comando clear si possono cancellare tutte le variabili definite o solo alcune diesse.E inoltre possibile registrare un’intera sessione di lavoro utilizzando il comando diary.
2.7 Accesso al sistema operativo
Dall’interno di Scicoslab e possibile accedere direttamente ad informazioni di sistema,mediante alcuni comandi particolari, descritti nella tabella 2.2
dir Lista di tutti i file nella directory corrente
ls Analogo a dir
mdelete Elimina file
cd <path> Cambia la directory di lavoro
pwd Mostra la directory corrente di lavoro
getenv variabile d’ambiente
Tabella 2.2: Accesso al sistema operativo
E inoltre sempre possibile richiamare direttamente un comando del sistema operativoprecedendolo con il simbolo host.
7 maggio 2010 Copyright 2003 Roberto Bucher 17
Introduzione a Scicoslab Capitolo 2. Basi
Per esempio
−−>host ( ’ emacs ’ )
apre il programma emacsIn ambiente Linux esistono anche diversi comandi unix che eseguono operazioni analoghe.Il comando
−−>apropos unix
mostra diverse combinazioni di questo comando.
2.8 Salvataggio e richiamo di dati
Tutte le variabili definite o calcolate in una sessione di lavoro possono essere salvate erichiamate a piacimento mediante il comando save e load.Per salvare le variabili definite attualmente e sufficiente date
−−>save ( ’ my f i l e ’ )
e in seguito si puo ripristinare tutta la situazione con
−−>load ( ’ my f i l e ’ )
2.9 Formati dei numeri
Il comando format permette di modificare l’output di visualizzazione dei risultati.
−−>x=rand ( 1 , 5 ) ;
−−>format( ’ v ’ , 1 0 ) ; xx =
0.6283918 0.8497452 0.6857310 0.8782165 0.0683740
−−>format ( 2 0 ) ; xx =
column 1 to 3
0.62839178834110498 0.84974523587152362 0.68573101982474327
column 4 to 5
0.87821648130193353 0.06837403681129217
−−>format( ’ e ’ , 1 0 ) ; xx =
6.284E−01 8.497E−01 6.857E−01 8.782E−01 6.837E−02
−−>format ( 2 0 ) ; xx =
18 Copyright 2003 Roberto Bucher 7 maggio 2010
2.10. Altre caratteristiche di base Introduzione a Scicoslab
column 1 to 3
6.2839178834110E−01 8.4974523587152E−01 6.8573101982474E−01
column 4 to 5
8.7821648130193E−01 6.8374036811292E−02
−−>
−−>x=[100 %eps ] ;
−−>format( ’ e ’ , 1 0 ) ; xx =
1.000E+02 2.220E−16
−−>format( ’ v ’ , 1 0 ) ; xx =
100 . 2 .220E−16
−−>
−−>format( ”v” )
2.10 Altre caratteristiche di base
E possibile dare piu comandi sulla stessa linea, separandoli con , o ;.
−−>matite =5,gomme=3,penne=2matite =
5 .gomme =
3 .penne =
2 .
Se si termina un comando con il carattere ; non viene visualizzato il risultato di questocomando
−−>matite =5;gomme=3;penne=2;
−−>
L’uscita da Scicoslab e possibile con il comando quit.
2.11 Stringhe
Scicoslab conosce il tipo stringa e mette a disposizione diverse funzioni per poterlomanipolare.
7 maggio 2010 Copyright 2003 Roberto Bucher 19
Introduzione a Scicoslab Capitolo 2. Basi
−−>a=’Mi ’a =
Mi
−−> b=’ chiamo ’b =
chiamo
−−>c=’ Roberto ’c =
Roberto
−−>d=[a , ’ ’ ,b , ’ ’ , c ]d =
!Mi chiamo Roberto !
−−>a+’ ’+b+’ ’+cans =
Mi chiamo Roberto
Mettendo le stringhe in una matrice colonna, viene creata una matrice con elementi ditipo stringa.
−−>[a ; b ; c ]ans =
!Mi !! !! chiamo !! !! Roberto !
−−>s ize (ans )ans =
3 . 1 .
Le funzioni per la manipolazione di stringhe sono descritte nella tabella 2.3
eval Converte una stringa nel corrispondentevalore numerico
strcmp confronta 2 stringhe
sci2exp converte numero in stringa
dec2hex conversione decimale-esadecimale
hex2dec conversione esadecimale-decimale
Tabella 2.3: Operazioni con stringhe
20 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 3
L’Help in linea
3.1 Introduzione
Scicoslab contiene un sistema di help che fornisce numerose informazioni sull’uso di tuttele funzioni. I comandi help e apropos permettono una ricerca veloce di informazioni.
3.2 Il comando help
E sufficiente chiamare il comando help seguito dalla funzione desiderata. Viene apertauna finestra supplementare contenente tutti le informazioni in formato ipertestuale (vedifigura 3.1
−−>help linspace
La chiamata semplicemente di help mostra la stessa finestra con tutti gli argomentidisponibili in Scicoslab.
3.3 Il comando apropos
Questo comando permette di cercare tutti i comandi associati ad una certa parola chiave.In questo caso viene mostrata la finestra con la lista di tutti i comandi correlati (figura 3.2
−−>apropos ( ’ ode ’
7 maggio 2010 Copyright 2003 Roberto Bucher 21
Introduzione a Scicoslab Capitolo 3. L’Help in linea
Figura 3.1: Help browser
22 Copyright 2003 Roberto Bucher 7 maggio 2010
3.3. Il comando apropos Introduzione a Scicoslab
Figura 3.2: Risultato del comando apropos(’ode’)
7 maggio 2010 Copyright 2003 Roberto Bucher 23
Capitolo 4
Calcolo scientifico
4.1 Introduzione
Scicoslab mette a disposizione una quantita di funzioni scientifiche per l’utilizzo inmatematica e ingegneria. Inoltre e gia implementato tutto il calcolo con i numeri complessi.
4.2 Funzioni matematiche
La chiamata di una funzione in Scicoslab e molto semplice.
−−>x=log (10)x =
2.3025851
Le funzioni matematiche elementari sono elencate nella tabella 4.1
Tutte le funzioni sono applicabile a scalari e a matrici.
−−>x=(0 : 0 . 1 : 1 )∗ pi ;
−−>y=sin ( x )y =
column 1 to 7
0 . 0 .3090170 0.5877853 0.8090170 0.9510565 1 . 0 .9510565
column 8 to 11
0.8090170 0.5877853 0.3090170 1.225E−16
La funzione viene applicata ad ogni elemento della matrice x.
Vediamo ora i metodi messi a disposizione da Scicoslab per calcolare i risultati di unafunzione come ad esempio
y = 0.3 + 4 ∗ cos(x) ∗ sin(x)
per alcuni valori di x.
Il primo metodo consiste nel calcolo diretto della funzione
7 maggio 2010 Copyright 2003 Roberto Bucher 25
Introduzione a Scicoslab Capitolo 4. Calcolo scientifico
abs(x) valore assoluto o modulo di x
acos(x) arc cos di x
acosh(x) arc cos iperbolico di x
phasemag(x) angolo di un numero complesso
asin arc sin di x
asinh arc sin iperbolico di x
atan(x) arc tan di x
atan(x,y) arc tan su 4 quadranti
atanh arc tan iperbolica
ceil arrotondamento verso + ∞conj(x) complesso coniugato di x
cos(x) coseno
cosh(x) cos iperbolico
exp(x) esponente e
fix(x) arrotondamento verso 0
floor(x) arrotondamento verso - −∞imag(x) parte immaginaria di x complesso
log(x) logaritmo naturale di x
log2(x) logaritmo base 2
log10(x) logaritmo base 10 di x
real(x) parte reale di x complesso
modulo(x,y),pmodulo(x,y) resto di x/y
round(x) arrotondamento verso il numero intero piu vicino
sign(x) segno di x (+, -, 0)
sin(x) sin di x
sinh(x) sin iperbolico di x
sqrt(x) radice quadrata di x
tan(x) tan di x
tanh(x) tan iperbolica di x
Tabella 4.1: Funzioni scientifiche
−−>x=l inspace(−pi /2 , p i /2 , 7 ) ;
−−>y=0.3+4∗cos (x ) . ∗ sin ( x .∗ x )y =
0.3 2.0793407 1.2378509 0 .3 1 .2378509 2.0793407 0 .3
Attenzione all’uso del comando ..
4.3 Numeri complessi
Scicoslab lavora senza problemi e senza accorgimenti particolari anche con numeri com-plessi. Le operazioni vengono svolte esattamente nello stesso modo di quelle con numerireali.
26 Copyright 2003 Roberto Bucher 7 maggio 2010
4.3. Numeri complessi Introduzione a Scicoslab
La parte complessa di un numero viene indicata aggiungendo la lettera %i al secondoelemento, esattamente come nella matematica tradizionale.
−−>4+7∗%ians =
4 . + 7 . i
Le operazioni si svolgono in modo tradizionale
−−>c1=4+7∗%ic1 =
4 . + 7 . i
−−>c2=2−4∗%ic2 =
2 . − 4 . i
−−>c1+c2ans =
6 . + 3 . i
−−>c1/c2ans =
− 1 . + 1 .5 i
−−>c1∗ c2ans =
36. − 2 . i
Le operazioni tradizionali sui numeri complessi sono riportate nella tabella 4.2
abs modulo di un numero complesso
phasemag fase di un numero complesso in gradi
conj numero complesso coniugato
real parte reale
imag parte immaginaria
Tabella 4.2: Operazioni sui numeri complessi
7 maggio 2010 Copyright 2003 Roberto Bucher 27
Introduzione a Scicoslab Capitolo 4. Calcolo scientifico
28 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 5
Operazioni con matrici
5.1 Matematica tra scalari e matrici
In Scicoslab si possono effettuare direttamente operazioni tra matrici e scalari
−−>a=1:5 ;
−−>2∗a−1ans =
1 . 3 . 5 . 7 . 9 .
In questo caso la matrice a e stata moltiplicata per 2 e ad ogni elemento e stato sottratto1.
5.2 Matematica tra matrici
E possibile definire operazioni tra gli elementi di due matrici solo nel caso che le duematrici abbiano la stessa lunghezza.
−−>a=1:5 ;
−−>b=2∗a−1;
−−>a+bans =
2 . 5 . 8 . 11 . 14 .
−−>a−bans =
0 . − 1 . − 2 . − 3 . − 4 .
−−>a .∗bans =
1 . 6 . 15 . 28 . 45 .
−−>a . / bans =
7 maggio 2010 Copyright 2003 Roberto Bucher 29
Introduzione a Scicoslab Capitolo 5. Operazioni con matrici
1 . 0 .6666667 0 .6 0 .5714286 0.5555556
−−>a . ˆ bans =
1 . 8 . 243 . 16384. 1953125.
−−>2.ˆaans =
2 . 4 . 8 . 16 . 32 .
−−>a .ˆ2ans =
1 . 4 . 9 . 16 . 25 .
Sono particolarmente da notare le ultime operazioni (.*, ./, .^) che sono definite comeoperazioni “.”, poiche, anche tra matrici, queste operazioni sono normalmente definite inun modo differente (vedi capitolo dedicato all’algebra lineare). Tutte queste operazionisono svolte elemento per elemento. Il tentativo di eseguire una normale moltiplicazionetra le due matrici a e b porta ad un errore :
−−>a∗b!−−error 10
i n c on s i s t e n t mu l t i p l i c a t i o n
5.3 Orientazione delle matrici
Abbiamo visto precedentemente che i valori di una riga di una matrice vengono separatitra di loro con una “,”, mentre per passare alla riga successiva si utilizza un “;”. Possiamoanche trasporre una matrice riga con l’operatore “ ’ ”, per arrivare ad ottenere un vettorecolonna.
−−>a=1:5 ;
−−>b=a ’b =
1 .2 .3 .4 .5 .
Esiste anche l’operatore .’ , La differenza esiste unicamente quando viene trasposta unamatrice di elementi complessi.
−−>d=a+%i∗ad =
1 . + i 2 . + 2 . i 3 . + 3 . i 4 . + 4 . i 5 . + 5 . i
−−>d ’ans =
30 Copyright 2003 Roberto Bucher 7 maggio 2010
5.4. Operatori relazionali e logiche Introduzione a Scicoslab
1 . − i2 . − 2 . i3 . − 3 . i4 . − 4 . i5 . − 5 . i
−−>d . ’ans =
1 . + i2 . + 2 . i3 . + 3 . i4 . + 4 . i5 . + 5 . i
5.4 Operatori relazionali e logiche
5.4.1 Operatori relazionali
Gli operatori relazionali definiti in Scicoslab sono descritti nella tabell 5.1
> maggiore
< minore
>= maggiore o uguale
<= minore o uguale
== uguale
~= diverso (not uguale)
Tabella 5.1: Operazioni relazionali
L’utilizzo di questi operatori da come risultato un valore “T” o “F”. Scicoslab nonutilizza i valori 1 e 0 per definire vero o falso, ma le costanti di sistema %t e %f .
−−>3+5˜=8ans =
F
Questi operatori possono essere applicati anche a matrici.Possiamo anche utilizzare il comando find per determinare gli elementi di una matrice chesoddisfano determinate condizioni
−−>a=1:36;
−−>find (modulo(a ,3)==0)ans =
column 1 to 11
3 . 6 . 9 . 12 . 15 . 18 . 21 . 24 . 27 . 30 . 33 .
column 12
36 .
7 maggio 2010 Copyright 2003 Roberto Bucher 31
Introduzione a Scicoslab Capitolo 5. Operazioni con matrici
5.4.2 Operatori logici
Gli operatori logici definiti in Scicoslab sono riportati nella tabella 5.2
& And
| Or
~ Not
Tabella 5.2: Operazioni logiche
L’operazione
−−>A=[1 ,0 ,3 ,2 ,1 ]A =
1 . 0 . 3 . 2 . 1 .
−−>B=[2 ,3 ,4 ,5 ,6 ]B =
2 . 3 . 4 . 5 . 6 .
−−>A & Bans =
T F T T T
da come risultato una matrice di dimensioni uguale a quelle di A e B, con 1 dove glielementi di entrambe sono diversi da 0, altrimenti 0.
Altri operatori sono riportati nella tabella 5.3
exist controlla se esiste una variabile o funzione
find cerca una certa condizione vera in unvettore
isempty controlla se una matrice e vuota
isinf controlla se un numero e infinito
isnan controlla se un numero non esiste
issparse controlla se una matrice e sparsa
Tabella 5.3: Richieste logiche
5.5 Algebra lineare
Scicoslab mette a disposizione numerose funzioni per il calcolo matriciale.
Un sistema lineare di equazioni puo essere scritto in forma matriciale nel modo seguente
Ax = b (5.1)
dove A e una matrice n x n, x e b due vettori colonna di n elementi.
La soluzione tramite Scicoslab di questa equazione puo avvenire in due modi. Il primometodo utilizza l’inversa della matrice per risolvere il problema, sapendo che
32 Copyright 2003 Roberto Bucher 7 maggio 2010
5.5. Algebra lineare Introduzione a Scicoslab
x = A−1b (5.2)
−−>a= [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 0 ]a =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 0 .
−−>b= [12 ; 33 ; 36 ]b =
12 .33 .36 .
−−>x=inv ( a )∗bx =
4 .1 .2 .
Il secondo metodo utilizza l’operazione definita come divisione sinistra
−−>a= [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 0 ]a =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 0 .
−−>b= [12 ; 33 ; 36 ]b =
12 .33 .36 .
−−>x=a\bx =
4 .1 .2 .
Attenzione : L’operazione x/A non e possibile!In Scicoslab troviamo tutta una serie di altre operazioni specifiche di algebra lineare,tra cui quelle riportate nella tabella 5.4
7 maggio 2010 Copyright 2003 Roberto Bucher 33
Introduzione a Scicoslab Capitolo 5. Operazioni con matrici
d=spec(A) Calcola gli autovalori della matrice A
[L.U]=lu(A) Fattorizzazione LU della matrice A
[Q,R]=qr(A) Fattorizzazione QR della matrice A
[U,S,V]=svd(A) Scomposizione in valori singolari dellamatrice A
r=rank(A) rango della matrice A
cond(A) numero condizionale della matrice A
norm(A) calcola la norma di A
poly(A) Trova il polinomio caratteristico associatoalla matrice A
Tabella 5.4: Operazioni di algebra lineare
34 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 6
Matrici sparse
Le matrici sparse sono una classe particolare di matrici che contengono un numero rile-vante di valori nulli. Scicoslab permette di memorizzare queste matrici tenendo contounicamente degli indici occupati, al fine di occupare meno memoria.
−−>A=[0 0 0 5 ;0 2 0 0 ;1 3 0 0 ;0 0 4 0 ]A =
0 . 0 . 0 . 5 .0 . 2 . 0 . 0 .1 . 3 . 0 . 0 .0 . 0 . 4 . 0 .
−−>B=sparse (A)B =
( 4 , 4) sparse matrix
( 1 , 4) 5 .( 2 , 2) 2 .( 3 , 1) 1 .( 3 , 2) 3 .( 4 , 3) 4 .
E sempre possibile ricostruire la matrice completa con il comando full .Una matrice sparsa puo essere anche creata direttamente con il comando sparse(ij,s[,mn]),con [ij] vettore degli indici occupati, s contenente i valori, e mn a indicare le dimensioni(opzionali) complete della matrice.
−−>sp=sparse ( [ 1 , 2 ; 4 , 5 ; 3 , 1 0 ] , [ 1 , 2 , 3 ] )sp =
( 4 , 10) sparse matrix
( 1 , 2) 1 .( 3 , 10) 3 .( 4 , 5) 2 .
−−>s ize ( sp )ans =
4 . 10 .
7 maggio 2010 Copyright 2003 Roberto Bucher 35
Introduzione a Scicoslab Capitolo 6. Matrici sparse
Le operazioni sulle matrici sparse possono essere degli stessi tipi di quelle sulle matricinormali, sfruttando pero in molti casi algoritmi specifici.
36 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 7
Semplici script
Tutte le operazioni che vengono immesse al prompt dei comandi nell’ambiente di Sci-coslab possono essere integrati in un file testo che puo essere richiamato ed eseguitodall’interno dell’ambiente. Questi programmi, chiamati script, devono avere l’estensio-ne .sci o .sce. Scicoslab riconosce questi file esattamente come un sistema operativoriconosce i suoi files batch.Questi file possono essere creati utilizzando Scipad, l’editore integrato nell’ambiente.Possiamo ad esempio salvare la sequenza di comandi seguente come file esempio.sci
a=[1 ,2 ; 3 , 4 ]b=[5 ; 7 ]c=a∗b
Possiamo ora eseguire questo semplice script all’interno di Scicoslab
−−>exec esempio . s c i
−−>a=[1 ,2 ; 3 , 4 ]a =
1 . 2 .3 . 4 .
−−>b=[5 ; 7 ]b =
5 .7 .
−−>c=a∗bc =
19 .43 .
Tutte le variabili definite all’interno di uno script restano visibili anche nel workspace diScicoslab. All’interno di uno script possiamo utilizzare il comando halt per far attendereil programma fino a quando non viene premuto un tasto.
7 maggio 2010 Copyright 2003 Roberto Bucher 37
Capitolo 8
Programmi e controllo di flusso
8.1 Programmi e funzioni
Abbiamo visto precedentemente come sia possibile costruire degli script contenenti le varierighe di comando da eseguire in Scicoslab. Nello stesso modo e possibile costruire dellenuove funzioni che possono poi essere richiamate a piacere. Tutte queste funzioni vannosalvate in file teminanti con l’estensione .sci o .sce, sono files di testo e quindi sono pureportabili da un sistema all’altro. E possibile anche creare funzioni compilate in C, ma perchi e interessato a queste possibilita rimando ai manuali specifici di Scicoslab.
Prima di poter utilizzare una nuova funzione all’interno della shell di Scicoslab, occor-re renderla disponibile. Ad esempio una nuova funzione myfun.sci deve essere caricatanell’ambiente Scicoslab tramite i comandi
−−>getf myfun . s c i
E pure possibile caricare in una volta sola tutte le funzioni contenute in una certa cartellatramite il comando
−−>getd /home/bucher
Utenti esperti possono poi in seguito compilare le proprie funzioni e caricarle ad ogni iniziodi sessione inserendo comandi appropriati nel file di inizializzazione .scilab contenuto nellacartella nascosta .Scilab. Esempi di come compilare e caricare queste funzioni sono descrittinell’allegato A.
Il nome del file dove e memorizzata la funzione e anche il nome della funzione. La dichia-razione interna dovrebbe accordarsi al nome dato, ma non e rilevante. Una funzione vienedescritta inizialmente dalla sua definizione nel modo seguente
function [ output1 , output2 , . . . ] = funz ione ( input1 , input2 , . . . )
Nel caso di una sola variabile di output si puo evitare di mettere le [ ].
E anche possibile non avere alcun output. Inoltre possono esserci piu funzioni definitenello stesso file.
Vediamo subito un esempio di funzione
function p=p o l y f i t (x , y , grad , s )// Ca l cu l a t e s the po lynomia l o f grad ”grad” which f i t s the g i ven// po i n t s ”x , y ” . ” s” i s the charac ter a s so c i a t ed to the po l i nomia l
7 maggio 2010 Copyright 2003 Roberto Bucher 39
Introduzione a Scicoslab Capitolo 8. Programmi e controllo di flusso
[ lh s , rhs ] = argn ( 0 ) ;m = length ( x ) ;i f length ( y ) <> m then
error ( ’ x and y must have same length ’ ) ;end
a = [ ] ;for n=0:1 : grad
a = [ a , x ’ . ˆ n ] ;end
p=a\y ’ ;i f rhs > 3 then
p=poly (p , s , ’ c ’ ) ;end
E interessante come la stessa funzione possa essere richiamata passando in entrata 2 o 3parametri. E possibile distinguere i due casi mediante il parametro argn(0) che fornisceil numero di parametri passati in entrata e permette cosı di distinguere i vari casi. Iparametri definiti all’interno di una funzione sono locali, e quindi non vengono passati alworkspace. Variabili definite nel workspace possono sono visibile all’interno delle funzioni.
8.2 Controllo di flusso
Esistono 4 metodi per controllare il flusso di un programma e prendere decisioni all’internodello stesso:
• for loop
• while loop
• if-elseif-else
• select-case-else
Tutti questi comandi devono avere alla fine del blocco da eseguire un comando end .Questi comandi possono anche essere utilizzati all’interno della shell di Scicoslab e at-tendono il comando end per far partire l’esecuzione. Esiste la possibilita di utilizzare uncomando break all’interno di questi cicli.
8.2.1 Ciclo for
−−>for n=1 : 0 . 1 : 5−−>y(n)=3∗nˆ2 ;−−>end
−−>yy =
10.8325.2345.6372.0375 .
40 Copyright 2003 Roberto Bucher 7 maggio 2010
8.2. Controllo di flusso Introduzione a Scicoslab
8.2.2 Ciclo while
−−>while (1+EPS)>1−−>EPS=EPS/2 ;−−>num=num+1 ;−−>end
−−>EPSEPS =
1.110E−16
−−>numnum =
53 .
8.2.3 Ciclo if-elseif-else
−−> i f a>5−−>b=7−−>e l s e i f a>4−−>b=2.7−−>e l s e i f a>2−−>b=1b =
1 .−−>else
−−>b=0−−>end
−−>bb =
1 .
8.2.4 Ciclo select-case-else
−−>a=4a =
4 .
−−>se lect a−−>case {1 ,2 ,3}−−>y=2∗a ;−−>case {4 ,5 ,6}−−>y=3∗a−−>case {7 ,8 ,9}−−>y=4∗a ;−−>else
−−>y=a ;−−>end
7 maggio 2010 Copyright 2003 Roberto Bucher 41
Introduzione a Scicoslab Capitolo 8. Programmi e controllo di flusso
−−>yy =
4 .
42 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 9
Analisi di dati
9.1 Introduzione
Scicoslab permette di analizzare statisticamente matrici di dati
Le operazioni possibili sono riportate nella tabella 9.1
max valore massimo
min valore minimo
mean valore medio
median valore mediano
std deviazione standard
sort sorting
sum somma elementi
prod prodotto elementi
cumsum somma cumulativa
cumprod prodotto cumulativo
diff derivata approssimativa
histplot istogramma
corr correlazione, covarianza
covar covarianza tra 2 variabili
Tabella 9.1: Operazioni per l’analisi dei dati
9.1.0.1 Esempi
−−>a= [21 , 10 ; 2 , 3 ; 1 5 , 4 ; 3 , 6 0 ; 7 , 13 ]a =
21 . 10 .2 . 3 .15 . 4 .3 . 60 .7 . 13 .
−−>max( a )ans =
7 maggio 2010 Copyright 2003 Roberto Bucher 43
Introduzione a Scicoslab Capitolo 9. Analisi di dati
60 .
−−>max( a , ’ c ’ )ans =
21.3 .15 .60 .13 .
−−>max( a , ’ r ’ )ans =
21. 60
−−>mean( a , ’ r ’ )ans =
9.6 18 .
−−>median( a , ’ r ’ )ans =
7 . 10 .
−−>prod ( a , ’ c ’ )ans =
210 .6 .60 .180 .91 .
−−>cumprod( a , ’ r ’ )ans =
21. 10 .42 . 30 .630 . 120 .1890. 7200.13230. 93600.
44 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 10
Polinomi
Un polinomio e un oggeto particolare di Scicoslab e puo essere rappresentato in varimodi.Ad esempio il polinomio
x3 + 2x2 + 7x+ 5 (10.1)
puo essere definito mediante il comando
−−>p1=poly ( [ 5 , 7 , 2 , 1 ] , ’ x ’ , ’ c ’ ) // po l inomio trami te i c o e f f i c i e n t ip1 =
2 35 + 7x + 2x + x
−−>p2=poly ( [ 0 , 1 ] , ’ x ’ ) // po l inomio trami te l e r a d i c ip2 =
2− x + x
−−>p3=poly ( [ 2 , 3 , 1 ] , ’ x ’ , ’ c ’ )p3 =
22 + 3x + x
Possiamo anche immettere un polinomio direttamente nel modo seguente
−−>s=poly (0 , ’ s ’ )s =
s
−−>p4=sˆ4+3∗ s ˆ3+2∗ s+1p4 =
3 41 + 2 s + 3 s + s
Sui polinomi possono essere fatte una grande quantita di operazioni
−−>roots ( p3 )
7 maggio 2010 Copyright 2003 Roberto Bucher 45
Introduzione a Scicoslab Capitolo 10. Polinomi
ans =
− 1 .− 2 .
Un polinomio puo essere derivato
−−>derivat ( p1 )ans =
27 + 4x + 3x
Polinomi possono essere moltiplicati semplicemente tra di loro:
−−>p1∗p3ans =
2 3 4 510 + 29x + 30x + 15x + 5x + x
Polinomi possono essere divisi tra di loro
−−>p1=poly ( [0 ,−1 ,−2] , ’ x ’ )p1 =
2 32x + 3x + x
−−>p2=poly ( [ −1] , ’ x ’ )p2 =
1 + x
−−>p1/p2ans =
22x + x−−−−−−
1
Possiamo definire una funzione polyfit per effettuare l’interpolazione polinomiale
function p=po l y f i t (x , y , grad , s )// Ca l cu l a t e s the po lynomia l o f grad ”grad” which f i t s the g i ven// po i n t s ”x , y ” . ” s” i s the charac ter a s so c i a t ed to the po l i nomia l
[ lh s , rhs ] = argn ( 0 ) ;m = length ( x ) ;i f length ( y ) <> m then
error ( ’ x and y must have same length ’ ) ;end
a = [ ] ;for n=0:1 : grad
a = [ a , x ’ . ˆ n ] ;end
p=a\y ’ ;i f rhs > 3 then
46 Copyright 2003 Roberto Bucher 7 maggio 2010
10.1. Scomposizione in termini di frazioni parziali Introduzione a Scicoslab
p=poly (p , s , ’ c ’ ) ;end
e quindi utilizzarla per l’interpolazione (in questo caso di 2. ordine)
−−>getf p o l y f i t . s c i
−−>x=0 : 0 . 1 : 1 ;
−−>y= [ − . 4 4 7 , 1 . 9 7 8 , 3 . 2 8 , 6 . 1 6 , 7 . 0 8 , 7 . 3 4 , 7 . 6 6 , 9 . 5 6 , 9 . 4 8 , 9 . 3 , 1 1 . 2 ] ;
−−>p=p o l y f i t (x , y , 2 , ’ x ’ )p =
2− 0.0316713 + 20.129294x − 9.8108392x
In quest’ultimo esempio e stato determinato il polinomio di 2. ordine che meglio appros-sima i punti y. Possiamo ora applicare il polinomio a tutta una serie di punti x e trovarei corrispondenti valori y(x).
−−>p=p o l y f i t (x , y , 2 , ’ x ’ )p =
2− 0.0316713 + 20.129294x − 9.8108392x
−−>x1 =0 : 0 . 01 : 1 ;
−−>y1=horner (p , x1 ) ;
−−>plot2d (x , y , s t y l e =[−1])
−−>plot2d ( x1 , y1 )
Nel grafico 10.1 si puo giudicare visivamente il risultatoIl comando horner determina il risultato dell’applicazione del polinomio a un vettore dipunti x1 .
10.1 Scomposizione in termini di frazioni parziali
Scicoslab permette di scomporre frazioni di polinomi in termini di frazioni parziali,passando attraverso la rappresentazione della frazione come funzione di trasferimento diLaplace. Per prima cosa si deve utilizzare la funzione syslin per creare la funzione ditrasferimento, ed in seguito, con la funzione pfss si effettua la scomposizione. Il risultatoe una lista (vedi capitolo 15), che contiene le singole frazioni parziali.
−−>p1=poly ( [ 0 , −1 ] , ’ s ’ )p1 =
2s + s
−−>p2=poly ([−2 ,−3 ,−4] , ’ s ’ )p2 =
7 maggio 2010 Copyright 2003 Roberto Bucher 47
Introduzione a Scicoslab Capitolo 10. Polinomi
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0−2
0
2
4
6
8
10
12
Figura 10.1: Approssimazione di punti con un polinomio
48 Copyright 2003 Roberto Bucher 7 maggio 2010
10.1. Scomposizione in termini di frazioni parziali Introduzione a Scicoslab
2 324 + 26 s + 9 s + s
−−> f r=sysl in ( ’ c ’ , p1/p2 )f r =
2s + s
−−−−−−−−−−−−−−−−−2 3
24 + 26 s + 9 s + s
−−>pfss ( f r )ans =
ans (1 )
6−−−−−4 + s
ans (2 )
− 6−−−−−3 + s
ans (3 )
1−−−−−2 + s
7 maggio 2010 Copyright 2003 Roberto Bucher 49
Capitolo 11
Interpolazione
In Scicoslab l’interpolazione dei dati viene fatta sfruttando le due funzioni splin e interp.
−−>o r a r i o =1:12;
−−>temperature=[5 8 9 15 25 29 31 30 22 25 27 2 4 ] ;
−−>ore =1 : 0 . 1 : 12 ;
−−>dk = splin ( o rar io , temperature ) ;
−−>df = splin ( o rar io , temperature , ” f a s t ” ) ;
−−>[yyk , yy1k , yy2k ] = interp ( ore , o rar io , temperature , dk ) ;
−−>[yyf , yy1f , yy2f ] = interp ( ore , o rar io , temperature , d f ) ;
−−>xbasc ( )
−−>plot2d ( ore , yyk )
−−>plot2d ( ore , yyf , s t y l e =2)
−−>plot2d ( o rar io , temperature , s t y l e=−9)
−−>legends ( [ ” not a knot s p l i n e ” , ” f a s t sub−s p l i n e ” , ” i n t e r p o l a t i o n po in t s ” ] , . . .−−> [ 1 2 −9] , ”ur” ,%f)
−−>xti t l e ( ” s p l i n e i n t e r p o l a t i o n ” )
La figura 11.1 mostra il risultato di un’interpolazione mediante spline
7 maggio 2010 Copyright 2003 Roberto Bucher 51
Introduzione a Scicoslab Capitolo 11. Interpolazione
0 2 4 6 8 10 125
10
15
20
25
30
35
spline interpolation
not_a_knot splinefast sub−splineinterpolation points
Figura 11.1: Interpolazione spline
52 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 12
Grafica
12.1 Introduzione
In Scicoslab e possibile utilizzare comandi per grafica 2D e 3D. Esistono inoltre comandiper creare delle animazioni.
12.2 Figure e grafici
Principalmente i grafici vengono rappresentati all’interno di speciali finestre, dette figure.Possono ricevere tutta una serie di informazioni che servono per meglio gestire il grafico(leggende, label, titoli ecc.).
Le funzioni principali per gestire questi elementi sono riportate nella tabella 12.1
xtitle Aggiunge un titolo al grafico
xlabel Label asse x
ylabel Label asse y
legend Aggiunge la leggenda dei grafici
xstring Mostra un testo ad una posizione generica
xgrid Mostra (toglie) la griglia
Tabella 12.1: Funzioni di base per la grafica
12.3 Grafica 2D
Esisteono diversi comandi per gestire la grafica 2D. L’help mostra una grande quantitadi possibili funzioni, che in parte sono state ora sostituite dall’unico comando plot2d cheviene chiamato con vari parametri.
Il comando plot2d ha molte possibilita, per cui per risolvere problemi particolari e meglioutilizzare l’help integrato. Uno dei parametri principali e sicuramente il logflag che per-mette di defininre se gli assi sono lineari (“n”) o logaritmici (“l”). L’esempio relativo alcomando subplot (proposto in seguito) mostra un caso di utilizzo di questo flag.
La tabella 12.2 mostra alcuni di principali comandi per la grafica 2D.
La sequenza di comandi seguente crea un grafico con due funzioni sin(x) e 2 sin(x)+cos(x)
7 maggio 2010 Copyright 2003 Roberto Bucher 53
Introduzione a Scicoslab Capitolo 12. Grafica
plot2d Crea un grafico da vettori di valori
bar grafico a barre
polarplot grafico vettori di numeri complessi rappre-sentati da vettori partenti dall’origine
errbar grafico plot con barre d’errore
histplot istogramma
champ, champ1,fchamp
grafico di gradienti o campi vettoriali
Tabella 12.2: Comandi per grafica 2D
−−>x=l inspace (0 ,2∗ pi ) ;
−−>y1=sin ( x ) ;
−−>y2=2∗sin (x)+cos ( x ) ;
−−>plot2d (x , y1 , s t y l e =12)
−−>plot2d (x , y2 )
−−>xgrid(−3)
−−>xgrid (3 )
−−>x l ab e l ( ’ Asse x ’ )
−−>y l ab e l ( ’ Asse y ’ )
−−>xti t l e ( ’ Gra f i co d e l l e 2 fun z i on i ’ )
−−>xstring ( x ( 5 ) , y1 ( 5 ) , ’ s i n (x ) ’ )
−−>xstring ( x (30) , y2 (30) , ’ 2 s i n ( x)+cos ( x ) ’ )
Il grafico ottenuto con i comandi precedenti e mostrato nella figura 12.1Si puo aggiungere una legenda mediante il comando legend . Il comando plot2d permetteuna grande variazione di possibilita. Il formato resta pero
plot2d ( [ x ] , y,< opt args >)
dove x e il vettore delle ordinate, y il vettore (o anche la matrice !) delle ascisse, <optargs > permette di settare tutta una serie di opzioni per il grafico (vedi help plot2d).Per creare un nuovo grafico senza perdere quello precedente e possibile farlo disegnare inuna nuova finestra creata mediante il comando scf .Il bottone zoom on permette di cliccare con il mouse (sinistro) all’interno di un graficooppure di selezionare una zona, per ingrandire determinati particolari, mentre l’utilizzodel bottone destro riporta gradatamente l’immagine alle dimensioni normali.
12.4 Esempi di grafica 2D
Le figure 12.2, 12.3 e 12.4 mostrano altri esempi di grafici 2D.
54 Copyright 2003 Roberto Bucher 7 maggio 2010
12.4. Esempi di grafica 2D Introduzione a Scicoslab
sin(x)
2sin(x)+cos(x)
0 1 2 3 4 5 6 7−2.5
−2.0
−1.5
−1.0
−0.5
0.0
0.5
1.0
1.5
2.0
2.5
Grafico delle 2 funzioni
Asse x
Ass
e y
Figura 12.1: Grafico di sin(x) 2 sin(x) + cos(x)
−−>f=−pi /3 : p i /30 : p i /3 ;
−−>r=cos (2∗ f ) . / cos ( f ) ;
−−>polarplot ( f , r )
−−> t i t l e ( ’ S t r o f o i d e ’ )
0.2
0.4
0.6
0.8
1
0
30
60
90
120
150
180
210
240
270
300
330
−1.0 −0.5 0.0 0.5 1.0 1.5−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Strofoide
Figura 12.2: Comando polarplot
−−>v=rand (1 ,20000 , ’n ’ ) ;
−−>histplot (40 , v ) // 40 c l a s s i
−4 −3 −2 −1 0 1 2 3 4 50.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
Figura 12.3: Comando histplot
7 maggio 2010 Copyright 2003 Roberto Bucher 55
Introduzione a Scicoslab Capitolo 12. Grafica
−−>deff ( ”yprim=f ( t , y ) ” , . .−−> [ ”yprim1=y (2) ” ; . .−−> ”yprim2=−y (1) + 0 .5∗ y (2) ” ; . .−−> ”yprim=[yprim1 ; yprim2 ] ” ; ] )
−−>xmin=−8; xmax=8; ymin=−8; ymax=8;
−−>xr=xmin : 0 . 5 : xmax ; yr=ymin : 1 : ymax ;
−−>fchamp( f , 1 , xr , yr )−10 −8 −6 −4 −2 0 2 4 6 8 10
−10
−8
−6
−4
−2
0
2
4
6
8
10
Figura 12.4: Comando fchamp
12.5 Il comando subplot
E possibile portare piu grafici sulla stessa finestra, suddividendola in zone con il comandosubplot .
−−>x=0:2∗ pi /50:4∗ pi ;
−−>y=sin ( x ) ;
−−>xbasc ( )
−−>subplot (2 ,2 ,1 )
−−>plot2d (x , y )
−−>t = [0 : 0 . 1 : 2∗%pi ] ’ ;
−−>y=[sin ( t ) cos ( t ) ] ; x=[ t t ] ;
−−>subplot (2 ,2 ,2 )
−−>plot2d (x , y )
−−>errbar (x , y , 0 . 0 5∗ ones ( x ) , 0 . 0 3∗ ones ( x ) )
−−>x3=logspace (−2 ,2) ;
−−>y3=1+%i∗x3 ;
−−>y3=−20∗log10 (abs ( y3 ) ) ;
−−>subplot ( 2 , 1 , 2 ) ;
−−>plot2d ( x3 , y3 , l o g f l a g=” ln ” )
−−>xgrid
Il risultato e mostrato nella figura 12.5
56 Copyright 2003 Roberto Bucher 7 maggio 2010
12.5. Il comando subplot Introduzione a Scicoslab
0 2 4 6 8 10 12 14−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
0 1 2 3 4 5 6 7−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
−210
−110
010
110
210
−45
−40
−35
−30
−25
−20
−15
−10
−5
−0
Figura 12.5: Risultato del comando subplot
7 maggio 2010 Copyright 2003 Roberto Bucher 57
Introduzione a Scicoslab Capitolo 12. Grafica
12.6 Grafica 3D
Alcuni comandi messi a disposizione da Scicoslab per l’elaborazione di immagini e grafici3D sono riportati nella tabella 12.3
plot3d grafico a linea 3D
contour curve di livello
mesh 3D prospettici
Tabella 12.3: Comandi per grafica 3D
Alcuni esempi di grafica 3D sono riportati nelle figure 12.6, 12.7, 12.8 e 12.9.
−−>t=0: p i /50:10∗ pi ;
−−>param3d( sin ( t ) , cos ( t ) , t )
param3d : parametric curves in R3
0
5
10
15
20
25
30
35
Z
−1.0
−0.6
−0.2
0.2
0.6
1.0X
−1.0 −0.8 −0.6 −0.4 −0.2 0.0 0.2 0.4 0.6 0.8 1.0Y
Figura 12.6: Comando plot3d
−−>x=−5:0 .1 :5 ;
−−>y=x ;
−−>[X,Y]=meshgrid (x , y ) ;
−−>R=sqrt (X.ˆ2+Y. ˆ 2 ) ;
−−>Z=sin (R) . /R;
−−>contour (x , y , Z , 8 )
−0.082
−0.082
−0.082 −0.082
−0.082
0.0533
0.0533
0.0533 0.0533
0.0533
0.189 0.324
0.459 0.594 0.73 0.865
−6 −4 −2 0 2 4 6−6
−4
−2
0
2
4
6
Figura 12.7: Comando contour
Il comando meshgrid , genera, partendo da due vettori x e y, 2 matrici X e Y in cui ci sonoripetuti tutti i valori di x (riga dopo riga) e y (colonna dopo colonna), in modo da creareuna griglia nei cui nodi si ritrovano tutte le possibili combinazioni (x,y).
Al posto di mesh si puo utilizzare plot3d
12.7 Stampa di immagini
Un grafico puo essere stampato da menu, oppure si puo esportare il grafico in uno deitanti formati grafici da poi utilizzare in un elaboratore testi (tabella 12.4),
58 Copyright 2003 Roberto Bucher 7 maggio 2010
12.8. Animazioni Introduzione a Scicoslab
−−>[X,Y]=meshgrid ( −1 : . 1 : 1 , −1 : . 1 : 1 ) ;
−−>Z=X.ˆ2−Y. ˆ 2 ;
−−>xti t l e ( ’ z=x2−y ˆ2 ’ ) ;
−−>mesh(X,Y,Z ) ;
z=x2−y ^2
−1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Z
−1.0−0.8
−0.6−0.4
−0.20.0
0.20.4
0.60.8
1.0
X−1.0
−0.6
−0.2
0.2
0.6
1.0
Y
Figura 12.8: Comando mesh
−−>plot3d (x , y , Z)
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Z−8
−6−4
−20
24
68
X
−8−6
−4−2
02
46
8Y
Figura 12.9: Comando plot3d
12.8 Animazioni
In Scicoslab esiste la possibilita di animare grafici. Il modo piu semplice e quello disfruttare la funzione realtime, che permette di sincronizzare la rappresentazione graficacon una temporizzazione abbastanza precise.
xs2eps → encapsulated postscript (EPS)
xs2fig → Xfig
xs2bmp → bmp (solo Windows)
xs2emf → EMF (solo Windows)
xs2gif → GIF
xs2ppm → PPM
xs2ps → postscript (PS)
Tabella 12.4: Comandi per la stampa di grafici
7 maggio 2010 Copyright 2003 Roberto Bucher 59
Capitolo 13
Equazioni differenziali
La funzione principale per la simulazione di equazioni differenziale e la funzione ode.
Questa funzione puo essere chiamata con diversi parametri:
y=ode ( y0 , t0 , t , f )[ y ,w, iw ]=ode ( [ type ] , y0 , t0 , t [ , r t o l [ , a t o l ] ] , f [ , j a c ] [ ,w, iw ] )[ y , rd ,w, iw]=ode ( ” root ” , y0 , t0 , t [ , r t o l [ , a t o l ] ] , f [ , j a c ] , ng , g [ ,w, iw ] )y=ode ( ” d i s c r e t e ” , y0 , k0 , kvect , f )
Tramite il parametro type e possibile modificare il metodo di integrazione
type : one o f the f o l l ow in g charac t e r string : ”adams”” s t i f f ”” rk”” rk f ”” f i x ”” d i s c r e t e ”” r oo t s ”
Per risolvere un’equazione differenziale o un sistema di equazioni differenziali occorre in-nanzitutto ridurre il problema ad un sistema di equazioni differenziali di 1. Ordine, me-diante una sostituzione di variabile. Per esempio, l’equazione differenziale di Van derPol
x+(
x2 − 1)
x+ x = 0 (13.1)
viene ridotta con la sostituzione
x1 = x (13.2)
x2 = x1 = x (13.3)
nel sistema
x1 = x2 (13.4)
x2 = x2(
1− x21
)
− x1 (13.5)
e quindi risolto.
La soluzione di un’equazione o di un sistema di equazioni differenziali richiede la program-mazione di una funzione dichiarata come
7 maggio 2010 Copyright 2003 Roberto Bucher 61
Introduzione a Scicoslab Capitolo 13. Equazioni differenziali
function xdot=<nome funzione>(t,x)
dove xdot e x sono vettori contenenti le variabili di x1, x2 e le loro derivate.
Nel caso della funzione di Van der Pol il programma e
−−>function xdot=vdp( t , x )−−>xdot1=x ( 2 ) ;−−>xdot2=x(2)∗(1−x ( 1 ) . ∗ x(1))−x (1) ;−−>xdot=[xdot1 ; xdot2 ]−−>endfunction
−−>t =0 : 0 . 001 : 30 ;
−−>x0=[4;−4]x0 =
4 .− 4 .
−−>x=ode ( x0 , 0 , t , vdp ) ;
−−>plot2d ( t ’ , x ’ )
Il risultato della simulazione e riportato nella figura 13.1
0 5 10 15 20 25 30−4
−3
−2
−1
0
1
2
3
4
Figura 13.1: Simulazione dell’equazione di Van der Pol
62 Copyright 2003 Roberto Bucher 7 maggio 2010
Introduzione a Scicoslab
Interessante e la possibilita di vedere il grafico delle due variabili di stato, una in funzionedell’altra, per vedere meglio il ciclo che si forma con diverse condizioni iniziali, con icomandi
−−>plot2d (x ( 1 , : ) , x ( 2 , : ) )
−−>xgrid (4 )
Il risultato e mostrato nella figura 13.2.
−3 −2 −1 0 1 2 3 4 5−4
−3
−2
−1
0
1
2
3
4
Figura 13.2: Diagramma delle fasi dell’equazione di Van der Pol
Per chi lavora molto a livello di equazioni differenziali e consigliabile l’uso di uno strumentoquale Scicos che rispetto a Scicoslab presenta soluzioni piu complete, oppure, nel casodi sistemi lineari, utilizzare le varie funzioni a disposizione per la simulazione di sistemi dicontrollo (syslin).
7 maggio 2010 Copyright 2003 Roberto Bucher 63
Introduzione a Scicoslab Capitolo 13. Equazioni differenziali
64 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 14
Input/Output
Spesso si e confrontati con dati raccolti con altri programmi che si vorrebbero analizzaremediante Scicoslab.
14.1 Dati in formato ASCII
Il metodo piu semplice consiste nell’avere questi dati in un file in formato ASCII, comenel prossimo esempio
1 2 −52 0.2500 −93 0.0740 −234 0.0310 −535 0.0160 −1056 0.0090 −1857 0.0050 −2998 0.0030 −4539 0.0020 −653
10 0.0020 −905
Se questi dati si trovano ad esempio in un file chiamato operaz.dat), possono essere caricatiin Scicoslab con un semplice comando
−−>x=read ( ’ operaz . dat ’ ,−1 ,3)x =
1 . 2 . − 5 .2 . 0 .25 − 9 .3 . 0 .074 − 23 .4 . 0 .031 − 53 .5 . 0 .016 − 105 .6 . 0 .009 − 185 .7 . 0 .005 − 299 .8 . 0 .003 − 453 .9 . 0 .002 − 653 .10 . 0 .002 − 905 .
Il salvataggio di dati in formato ASCII e possibile con il comando write.
−−>t =0 : 0 . 1 : 1 ;
−−>y=sin ( t ) ;
7 maggio 2010 Copyright 2003 Roberto Bucher 65
Introduzione a Scicoslab Capitolo 14. Input/Output
−−>write ( ’ dat i . dat ’ , [ t ’ , y ’ ] )
14.2 Emulazione comandi C
Esiste tutta una serie di comandi che permettono di emulare gli analoghi comandi inC. Questi comandi utilizzano lo stesso comando, ma preceduto dalla lettera m (mopen,mscanf, mprintf ecc.). La tebella 14.1 mostra una serie di questi comandi.
mopen aprire un file
mclose chiudere un file
mprintf, mfprintf mprintf scittura su output, file o stringa
mscanf, mfscanf, msscanf lettura da input, file o stringa
merror test su accesso file
meof test su EOF
mdelete cancellazione di un file
mget, mgeti lettura binaria di un double o un intero
mput scrittura binaria
mgetl, mputl lettura e scrittura di file ASCII
mseek posizionamento in un file binario
mtell management di un file binario
mgetstr, mputstr leggere e scrivere una stringain un file
Tabella 14.1: Interfaccia su files
14.3 Lettura file
E possibile leggere completamente un file e riscriverlo dopo aver effettuato alcune modifi-che, utilizzando i comandi mgetl e mputl.
−−>T=mgetl ( ’ Makef i l e ’ ) ;
−−>T=strsubst (T, ’ . o ’ , ’ . obj ’ ) ;
−−>mputl(T, ’ Makef i l e ’ ) ;
66 Copyright 2003 Roberto Bucher 7 maggio 2010
Capitolo 15
Strutture particolari
15.1 Matrici multidimensionali
In Scicoslab le dimensioni delle matrici non sono limitate a 2, ma possono essere piugrandi. Le funzioni che permettono di creare matrici speciali nelle due dimensioni, possonoessere utilizzate anche su n dimensioni. Per esempio, il comando ones(2, 3, 4, 1) permettedi creare una matrice di “1” su 4 dimensioni.
Quando vogliamo utilizzare una matrice a 3 dimensioni, ad esempio, per crearla occorreutilizzare il comando cat , per concatenare delle matrici bidimensionali sulla 3. dimensione.
−−>a= [1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 9 ]a =
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
−−>b=10∗ab =
10 . 20 . 30 .40 . 50 . 60 .70 . 80 . 90 .
−−>c=cat (3 , a , b )c =
( : , : , 1 )
1 . 2 . 3 .4 . 5 . 6 .7 . 8 . 9 .
( : , : , 2 )
10 . 20 . 30 .40 . 50 . 60 .70 . 80 . 90 .
7 maggio 2010 Copyright 2003 Roberto Bucher 67
Introduzione a Scicoslab Capitolo 15. Strutture particolari
15.2 Liste
Le liste sono strutture che possono contenere elementi di tipo diverso fra di loro. Le listepossono essere create direttamente per assegnamento, o utilizzando il comando list. Danotare che l’indicizzazione ad una lista viene fatto utilizzando le parentesi tonde.
−−>L=l i s t ( ’ Ciao ’ , [ 1 , 2 ,3 ,4 ] , −5)L =
L(1)
Ciao
L(2)
1 . 2 . 3 . 4 .
L(3)
− 5 .
−−>L(2)ans =
1 . 2 . 3 . 4 .
Una seconda possibilita per la rappresentazione di strutture e quella di utilizzare delletyped list.
In questo caso viene passata come primo argomento una matrice di stringhe che contiene unidentificativo della lista e i nomi dei campi. L’accesso ai dati puo avvenire sia utilizzandoun indice, sia utilizzando il campo.
−−>L=t l i s t ( [ ’V ’ , ’name ’ , ’ va lue ’ ] , [ ’ a ’ , ’b ’ , ’ c ’ ] , [ 1 2 3 ] ) ;
−−>L(1)ans =
!V name value !
−−>L(2)ans =
! a b c !
−−>L(3)ans =
1 . 2 . 3 .
−−>L . nameans =
! a b c !
−−>getf ie ld ( ’name ’ ,L)ans =
68 Copyright 2003 Roberto Bucher 7 maggio 2010
15.2. Liste Introduzione a Scicoslab
! a b c !
−−>set f i e ld ( ’ va lue ’ , 0 : 1 0 ,L)
−−>LL =
L(1)
!V name value !
L(2)
! a b c !
L(3)
0 . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 .
Una terza possibilita e data dal comando mlist. In questo caso l’accesso ai campi non epossibile tramite l’indice.E possibile inizializzare direttamente delle tlist come strutture, dando direttamente unvalore ai campi.
−−>a .num=2a =
num: 2
−−>a . den=3a =
num: 2den : 3
−−>aa =
num: 2den : 3
−−>a . nome=’ c iao ’a =
num: 2den : 3nome : ” c iao ”
7 maggio 2010 Copyright 2003 Roberto Bucher 69
Introduzione a Scicoslab Capitolo 15. Strutture particolari
70 Copyright 2003 Roberto Bucher 7 maggio 2010
Appendice A
Caricamento di funzioni
Per semplificare la soluzione di determinati problemi puo essere utile creare delle funzioni.Queste funzioni sono implementate utilizzando il linguaggio di programmazione messo adisposizione dall’ambiente Scicoslab. Il loro utilizzo non e immediato, come ad esempioin altri linguaggi come Matlab, ma queste funzioni devono essere prima caricate nell’am-biente di Scicoslab. La soluzione piu semplice e quella di raccogliere tutte queste funzioniall’interno di una stessa cartella, e di poi caricarle all’inizio della sessione Scicoslab tramiteil comando
−−> getd ’<c a r t e l l a > ’
Ogni utente ha a disposizione un suo file di inizializzazione .scilab, che in Linux si trovasotto la cartella nascosta
. S c i l ab /4 .4
o una cartella analoga, dipendente dalla versione utilizzata di Scicoslab. Il comando per ilcaricamento della cartella delle funzioni puo essere inserito in questo file nascosto .scilab,ed automaticamente eseguito ad ogni inizio di sessione.
Ci sono altri metodi per crearsi dei propri ambienti di funzioni. Uno e quello di compilaretutte le funzioni personali, creando una libreria e caricando poi questa libreria tramite loscript di inizializzazione. Occorre quindi aggiungere alla cartella delle funzioni il seguentefile “buildmacros.sce“ per la compilazione e la creazione della libreria
// Sc i l a b ( h t t p ://www. s c i l a b . org / ) − This f i l e i s par t o f S c i l a b// Copyright (C) 2007−2008 − INRIA − Al lan CORNET <a l l a n . cornet@inria . f r>//// This f i l e must be used under the terms o f the CeCILL .// This source f i l e i s l i c e n s e d as d e s c r i b ed in the f i l e COPYING, which// you shou l d have r e c e i v ed as par t o f t h i s d i s t r i b u t i o n . The terms// are a l s o a v a i l a b l e at// h t t p ://www. c e c i l l . i n f o / l i c e n c e s /Licence CeCILL V2−en . t x t
i f ( i sdef ( ’ g en l i b ’ ) == %f) then
exec ( SCI+’ /modules / fun c t i on s / s c r i p t s / buildmacros / l oadgen l i b . s c e ’ ) ;end
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−t oo l b ox d i r = pwd( ) ;genlib ( ’ l i b s u p s i f u n ’ , t oo lbox d i r ,%f ,%t ) ;//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
7 maggio 2010 Copyright 2003 Roberto Bucher 71
Introduzione a Scicoslab Appendice A. Caricamento di funzioni
sostituendo il nome della libreria (qui e “libsupsifun”) con quello desiderato.Si puo quindi lanciare il “Makefile” seguente con “make“ da una shell per compilare i filee creare la libreria
i n s t a l l :s c i c o s l a b −nw − f bui ldmacros . s c e
clean :rm − f ∗ . b in l ib names
A questo punto occorre semplicemente aggiungere la linea
load ( ’ c a r t e l l a / l i b ’ )
nel file .scilab, dove cartella e sostituito dal percorso completo dove sono i files compilati.
72 Copyright 2003 Roberto Bucher 7 maggio 2010