Sei sulla pagina 1di 72

Scuola universitaria professionale Dipartimento

della Svizzera italiana Tecnologie


Innovative

Introduzione a Scicoslab

Ing. Roberto Bucher

7 maggio 2010
Introduzione a Scicoslab

2 Copyright 2003 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 39


8.1 Programmi e funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.2 Controllo di flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2.1 Ciclo for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.2.2 Ciclo while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.2.3 Ciclo if-elseif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8.2.4 Ciclo select-case-else . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

9 Analisi di dati 43
9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.1.0.1 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

10 Polinomi 45
10.1 Scomposizione in termini di frazioni parziali . . . . . . . . . . . . . . . . . . 47

11 Interpolazione 51

12 Grafica 53
12.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
12.2 Figure e grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
12.3 Grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
12.4 Esempi di grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
12.5 Il comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
12.6 Grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.7 Stampa di immagini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.8 Animazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

13 Equazioni differenziali 61

14 Input/Output 65
14.1 Dati in formato ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
14.2 Emulazione comandi C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
14.3 Lettura file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

15 Strutture particolari 67
15.1 Matrici multidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
15.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22


3.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) . . . . . . . . . . . . . . . . . . . . . . . . 55


12.2 Comando polarplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
12.3 Comando histplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
12.4 Comando fchamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
12.5 Risultato del comando subplot . . . . . . . . . . . . . . . . . . . . . . . . . . 57
12.6 Comando plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.7 Comando contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.8 Comando mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
12.9 Comando plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

13.1 Simulazione dell’equazione di Van der Pol . . . . . . . . . . . . . . . . . . . 62


13.2 Diagramma delle fasi dell’equazione di Van der Pol . . . . . . . . . . . . . . 63

7 maggio 2010 Copyright 2003 Roberto Bucher 5


Introduzione a Scicoslab ELENCO DELLE FIGURE

6 Copyright 2003 Roberto Bucher 7 maggio 2010


Elenco delle tabelle

2.1 Operazioni su matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15


2.2 Accesso al sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Operazioni con stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.1 Funzioni scientifiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


4.2 Operazioni sui numeri complessi . . . . . . . . . . . . . . . . . . . . . . . . 27

5.1 Operazioni relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31


5.2 Operazioni logiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.3 Richieste logiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.4 Operazioni di algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . 34

9.1 Operazioni per l’analisi dei dati . . . . . . . . . . . . . . . . . . . . . . . . . 43

12.1 Funzioni di base per la grafica . . . . . . . . . . . . . . . . . . . . . . . . . . 53


12.2 Comandi per grafica 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
12.3 Comandi per grafica 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.4 Comandi per la stampa di grafici . . . . . . . . . . . . . . . . . . . . . . . . 59

14.1 Interfaccia su files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7 maggio 2010 Copyright 2003 Roberto Bucher 7


Introduzione a Scicoslab ELENCO DELLE TABELLE

8 Copyright 2003 Roberto Bucher 7 maggio 2010


Capitolo 1

Introduzione

1.1 Origini

Scicoslab è un ambiente matematico e di simulazione numerica nato nei primi anni ’80
in ambito universitario. A differenza di altri sistemi nati contemporaneamente che sono
in seguito diventati prodotti commerciali (per esempio Matlab), Scicoslab, sviluppato in
collaborazione dall’IRIA (Institut National de Recherche en Informatique et Automatique)
e dalla ENPC (École Nationale des Ponts et Chaussée) è stato da subito reso disponibile
gratuitamente sul WEB.
Il suo sviluppo è garantito da un consorzio formato dalle più grosse compagnie francesi (e
non) e da diverse università, 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 garantire
che i risultati numerici del sistema restino affiabili, ciò che non può più essere garantito se
vengono apportate modifiche rilevanti al SW. Tutto il codice è distribuito in codice aperto,
ciò 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 con
Windows e Linux, sistemi Unix, Sun e Mac. La maggior parte delle funzioni è scritta
utilizzando un codice ascii, ciò che permette uno scambio molto semplice tra le diverse
piattaforme.

1.3 Toolbox

La maggior parte delle funzionalità di un programma di questo genere sono già integrate
nella versione di base scaricabile dalla rete. Quidi, a differenza di altri prodotti dove
ogni nuova funzionalit‘a deve essere acquistata separatamente, qui ci sono già una grande
quantità di toolbox integrati nella versione base. Tra le varie caratteristiche della versione
base 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 hanno
creato 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 è un ambiente di lavoro basato principalmente su comandi in linea, come


potrebbe essere l’ambiente DOS o UNIX. I comandi possono essere digitati direttamente
sulla linea di comando o letti da file testo. Esiste la possibilità di scrivere applicazioni con
finestre e bottoni, come pure di compilare funzioni scritte in un linguaggio tipo C o Fortran.
Come potremo vedere, una grossa quantità di funzioni sono direttamente leggibili, essendo
programmate 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 una
semplice linea di comando. Qui l’utente potrà fare tutte le sue richieste e dare i suoi
comandi.
Possiamo digitare direttamente sulla linea di comando le operazioni che vogliamo fare, sia
che 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 strutture


più 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 questa


documentazione. Per il momento ci occuperemo unicamente di matrici mono e bidimen-
sionali.
Una matrice può 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 utilizzando
uno spazio oppure una “,”, e separiamo ogni riga utilizzando il simbolo “;” o andando a
capo.
−−>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 più grande è spesso utile utilizzare alcuni metodi o alcune
funzioni messe a disposizione da Scicoslab.
−−>x =1:10
x =

1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

−−>y=l i nspace ( 0 , 1 , 1 1 )
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 : 2
x =

0. 0.4 0.8 1.2 1.6 2.

−−>y=logspace ( − 1 , 1 , 1 0 )
y =

7 maggio 2010 Copyright 2003 Roberto Bucher 13


Introduzione a Scicoslab Capitolo 2. Basi

column 1 t o 6

0.1 0.1668101 0.2782559 0.4641589 0.7742637 1.2915497

column 7 t o 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 può eliminare l’output terminando il comando
con “;”.
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 si n ( 0 . 7 ∗ p i ) sqrt ( 2 ) 1+2∗(4+3)/5]
x =

1. 0.8090170 1.4142136 3.8

Per accedere ad uno o più elementi di una matrice si utilizzano le parentesi ( ).


−−>x ( 4 )
ans =

3.8

−−>x (6)= si n ( 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 più elementi
contemporaneamente
−−>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, :) può essere


letta 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 le
colonne 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 deve
contenere m*n elementi !
$ ultimo indice di una matrice
diag(v) crea una matrice con sulla diagonale i
valori del vettore v
diag(A) crea un vettore con gli elementi della
diagonale 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 i z e ( a , 1 ) // numero r i g h e
ans =

3.

−−>[r , c ]= s i z e ( a ) // d i m e n s i o n i r i g h e e c o l o n n e
c =

3.
r =

3.

È possibile accedere ad un elemento di una matrice con un solo indice. In questo caso gli
elementi 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 è 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 default


chiamata 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 nel
workspace. È possibile avere informazioni su queste variabili con i comandi who e whos.
Questi comandi mostrano però anche tutto quanto è stato definito a livello di sistema, per
cui danno una quantità notevole di informazioni. Più utile è il comando browsevar che
apre 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 più piccolo che addizionato a 1 crea un numero floating- point
maggiore di 1 nel computer

4. %inf infinito

5. NaN Not-a-Number, numero indefinito (p.es. 0/0)



6. %i = −1

Interessante è la possibilità di avere calcoli che danno risultati infiniti o non definiti senza
che il sistema si blocchi o dia particolari errori. Per ottenere questo risultato occorre però
inizializzare il sistema con il comando ieee(2).
−−>i e e e ( 2 )

−−>1/0
ans =

Inf

−−>−1/0
ans =

−I n f

−−>0/0
ans =

Nan

Mediante il comando clear si possono cancellare tutte le variabili definite o solo alcune di
esse.
È inoltre possibile registrare un’intera sessione di lavoro utilizzando il comando diary.

2.7 Accesso al sistema operativo

Dall’interno di Scicoslab è 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

È inoltre sempre possibile richiamare direttamente un comando del sistema operativo


precedendolo 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 emacs


In 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 e
richiamate a piacimento mediante il comando save e load.
Per salvare le variabili definite attualmente è sufficiente date
−−>save ( ’ m y f i l e ’ )

e in seguito si può ripristinare tutta la situazione con


−−>load ( ’ m y 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 ) ; x
x =

0.6283918 0.8497452 0.6857310 0.8782165 0.0683740

−−>format ( 2 0 ) ; x
x =

column 1 t o 3

0.62839178834110498 0.84974523587152362 0.68573101982474327

column 4 t o 5

0.87821648130193353 0.06837403681129217

−−>format ( ’ e ’ , 1 0 ) ; x
x =

6 . 2 8 4 E−01 8 . 4 9 7 E−01 6 . 8 5 7 E−01 8 . 7 8 2 E−01 6 . 8 3 7 E−02

−−>format ( 2 0 ) ; x
x =

18 Copyright 2003 Roberto Bucher 7 maggio 2010


2.10. Altre caratteristiche di base Introduzione a Scicoslab

column 1 t o 3

6 . 2 8 3 9 1 7 8 8 3 4 1 1 0 E−01 8 . 4 9 7 4 5 2 3 5 8 7 1 5 2 E−01 6 . 8 5 7 3 1 0 1 9 8 2 4 7 4 E−01

column 4 t o 5

8 . 7 8 2 1 6 4 8 1 3 0 1 9 3 E−01 6 . 8 3 7 4 0 3 6 8 1 1 2 9 2 E−02

−−>

−−>x =[100 %eps ] ;

−−>format ( ’ e ’ , 1 0 ) ; x
x =

1 . 0 0 0 E+02 2 . 2 2 0 E−16

−−>format ( ’ v ’ , 1 0 ) ; x
x =

100. 2 . 2 2 0 E−16

−−>

−−>format ( ”v ” )

2.10 Altre caratteristiche di base

È possibile dare più comandi sulla stessa linea, separandoli con , o ;.


−−>m a t i t e =5 ,gomme=3 , penne=2
matite =

5.
gomme =

3.
penne =

2.

Se si termina un comando con il carattere ; non viene visualizzato il risultato di questo


comando
−−>m a t i t e =5;gomme=3; penne =2;

−−>

L’uscita da Scicoslab è possibile con il comando quit.

2.11 Stringhe

Scicoslab conosce il tipo stringa e mette a disposizione diverse funzioni per poterlo
manipolare.

7 maggio 2010 Copyright 2003 Roberto Bucher 19


Introduzione a Scicoslab Capitolo 2. Basi

−−>a= ’ Mi ’
a =

Mi

−−> b= ’ chiamo ’
b =

chiamo

−−>c= ’ R oberto ’
c =

R oberto

−−>d=[a , ’ ’ , b , ’ ’ , c ]
d =

! Mi chiamo R oberto !

−−>a+ ’ ’+b+ ’ ’+c


ans =

Mi chiamo R oberto

Mettendo le stringhe in una matrice colonna, viene creata una matrice con elementi di
tipo stringa.
−−>[a ; b ; c ]
ans =

! Mi !
! !
! chiamo !
! !
! R oberto !

−−>s i z e ( ans )
ans =

3. 1.

Le funzioni per la manipolazione di stringhe sono descritte nella tabella 2.3

eval Converte una stringa nel corrispondente


valore 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 tutte
le funzioni. I comandi help e apropos permettono una ricerca veloce di informazioni.

3.2 Il comando help

È sufficiente chiamare il comando help seguito dalla funzione desiderata. Viene aperta
una finestra supplementare contenente tutti le informazioni in formato ipertestuale (vedi
figura 3.1
−−>help l i nspace

La chiamata semplicemente di help mostra la stessa finestra con tutti gli argomenti
disponibili 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


Introduzione a Scicoslab Capitolo 3. L’Help in linea

24 Copyright 2003 Roberto Bucher 7 maggio 2010


Capitolo 4

Calcolo scientifico

4.1 Introduzione

Scicoslab mette a disposizione una quantità di funzioni scientifiche per l’utilizzo in


matematica e ingegneria. Inoltre è già implementato tutto il calcolo con i numeri complessi.

4.2 Funzioni matematiche

La chiamata di una funzione in Scicoslab è molto semplice.


−−>x=log ( 1 0 )
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 ) ∗ p i ;

−−>y=si n ( x )
y =

column 1 t o 7

0. 0.3090170 0.5877853 0.8090170 0.9510565 1. 0.9510565

column 8 t o 11

0.8090170 0.5877853 0.3090170 1 . 2 2 5 E−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 una
funzione 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 più 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 i nspace (− p i / 2 , p i / 2 , 7 ) ;

−−>y=0.3+4∗cos ( x ) . ∗ si n ( 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 numeri
reali.

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 secondo


elemento, esattamente come nella matematica tradizionale.
−−>4+7∗%i
ans =

4. + 7. i

Le operazioni si svolgono in modo tradizionale


−−>c1=4+7∗%i
c1 =

4. + 7. i

−−>c2=2−4∗%i
c2 =

2. − 4. i

−−>c1+c2
ans =

6. + 3. i

−−>c1 / c2
ans =

− 1. + 1.5 i

−−>c1 ∗ c2
ans =

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−1
ans =

1. 3. 5. 7. 9.

In questo caso la matrice a è stata moltiplicata per 2 e ad ogni elemento è stato sottratto
1.

5.2 Matematica tra matrici

È possibile definire operazioni tra gli elementi di due matrici solo nel caso che le due
matrici abbiano la stessa lunghezza.
−−>a = 1 : 5 ;

−−>b=2∗a −1;

−−>a+b
ans =

2. 5. 8. 11. 14.

−−>a−b
ans =

0. − 1. − 2. − 3. − 4.

−−>a . ∗ b
ans =

1. 6. 15. 28. 45.

−−>a . / b
ans =

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 . ˆ b
ans =

1. 8. 243. 16384. 1953125.

−−>2.ˆa
ans =

2. 4. 8. 16. 32.

−−>a . ˆ 2
ans =

1. 4. 9. 16. 25.

Sono particolarmente da notare le ultime operazioni (.*, ./, .^) che sono definite come
operazioni “.”, poiché, anche tra matrici, queste operazioni sono normalmente definite in
un modo differente (vedi capitolo dedicato all’algebra lineare). Tutte queste operazioni
sono svolte elemento per elemento. Il tentativo di eseguire una normale moltiplicazione
tra le due matrici a e b porta ad un errore :
−−>a ∗b
!−−error 10
inconsistent multiplication

5.3 Orientazione delle matrici

Abbiamo visto precedentemente che i valori di una riga di una matrice vengono separati
tra di loro con una “,”, mentre per passare alla riga successiva si utilizza un “;”. Possiamo
anche trasporre una matrice riga con l’operatore “ ’ ”, per arrivare ad ottenere un vettore
colonna.
−−>a = 1 : 5 ;

−−>b=a ’
b =

1.
2.
3.
4.
5.

Esiste anche l’operatore .’ , La differenza esiste unicamente quando viene trasposta una
matrice di elementi complessi.
−−>d=a+%i∗ a
d =

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. − i
2. − 2. i
3. − 3. i
4. − 4. i
5. − 5. i

−−>d . ’
ans =

1. + i
2. + 2. i
3. + 3. i
4. + 4. i
5. + 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 dà come risultato un valore “T ” o “F ”. Scicoslab non


utilizza i valori 1 e 0 per definire vero o falso, ma le costanti di sistema %t e %f .
−−>3+5˜=8
ans =

Questi operatori possono essere applicati anche a matrici.


Possiamo anche utilizzare il comando find per determinare gli elementi di una matrice che
soddisfano determinate condizioni
−−>a = 1 : 3 6 ;

−−>fi nd (modulo( a ,3)==0)


ans =

column 1 t o 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 & B
ans =

T F T T T

dà come risultato una matrice di dimensioni uguale a quelle di A e B, con 1 dove gli
elementi 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 un
vettore
isempty controlla se una matrice è vuota
isinf controlla se un numero è infinito
isnan controlla se un numero non esiste
issparse controlla se una matrice è 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 può essere scritto in forma matriciale nel modo seguente

Ax = b (5.1)
dove A è una matrice n x n, x e b due vettori colonna di n elementi.
La soluzione tramite Scicoslab di questa equazione può avvenire in due modi. Il primo
metodo 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−1 b (5.2)

−−>a = [ 1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 0 ]
a =

1. 2. 3.
4. 5. 6.
7. 8. 0.

−−>b = [ 1 2 ; 3 3 ; 3 6 ]
b =

12.
33.
36.

−−>x=inv ( a ) ∗ b
x =

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 = [ 1 2 ; 3 3 ; 3 6 ]
b =

12.
33.
36.

−−>x=a \b
x =

4.
1.
2.

Attenzione : L’operazione x/A non è 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 della
matrice 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 associato
alla 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 conto
unicamente 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.

È sempre possibile ricostruire la matrice completa con il comando full.


Una matrice sparsa può 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, 1 0 ) sparse matrix

( 1, 2) 1.
( 3, 10) 3.
( 4, 5) 2.

−−>s i z e ( 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 matrici
normali, sfruttando però 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 può essere richiamato ed eseguito
dall’interno dell’ambiente. Questi programmi, chiamati script, devono avere l’estensio-
ne .sci o .sce. Scicoslab riconosce questi file esattamente come un sistema operativo
riconosce 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 ∗b
c =

19.
43.

Tutte le variabili definite all’interno di uno script restano visibili anche nel workspace di
Scicoslab. All’interno di uno script possiamo utilizzare il comando halt per far attendere
il programma fino a quando non viene premuto un tasto.

7 maggio 2010 Copyright 2003 Roberto Bucher 37


Introduzione a Scicoslab Capitolo 7. Semplici script

38 Copyright 2003 Roberto Bucher 7 maggio 2010


Capitolo 8

Programmi e controllo di flusso

8.1 Programmi e funzioni

Abbiamo visto precedentemente come sia possibile costruire degli script contenenti le varie
righe di comando da eseguire in Scicoslab. Nello stesso modo è possibile costruire delle
nuove funzioni che possono poi essere richiamate a piacere. Tutte queste funzioni vanno
salvate in file teminanti con l’estensione .sci o .sce, sono files di testo e quindi sono pure
portabili da un sistema all’altro. È possibile anche creare funzioni compilate in C, ma per
chi è interessato a queste possibilità 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 caricata
nell’ambiente Scicoslab tramite i comandi
−−>g e t f myfun . s c i

È pure possibile caricare in una volta sola tutte le funzioni contenute in una certa cartella
tramite il comando
−−>getd /home/ bucher

Utenti esperti possono poi in seguito compilare le proprie funzioni e caricarle ad ogni inizio
di sessione inserendo comandi appropriati nel file di inizializzazione .scilab contenuto nella
cartella nascosta .Scilab. Esempi di come compilare e caricare queste funzioni sono descritti
nell’allegato A.
Il nome del file dove è memorizzata la funzione è anche il nome della funzione. La dichia-
razione interna dovrebbe accordarsi al nome dato, ma non è rilevante. Una funzione viene
descritta inizialmente dalla sua definizione nel modo seguente
function [ output1 , output2 , . . . ] = f u n z i o n e ( input1 , input2 , . . . )

Nel caso di una sola variabile di output si può evitare di mettere le [ ].


È anche possibile non avere alcun output. Inoltre possono esserci più funzioni definite
nello stesso file.
Vediamo subito un esempio di funzione
function p=p o l y f i t ( x , y , grad , s )
// C a l c u l a t e s t h e p o l y n o m i a l o f g r a d ” g r a d ” whi ch f i t s t h e g i v e n
// p o i n t s ”x , y ” . ” s ” i s t h e c h a r a c t e r a s s o c i a t e d t o t h e p o l i n o m i a l

7 maggio 2010 Copyright 2003 Roberto Bucher 39


Introduzione a Scicoslab Capitolo 8. Programmi e controllo di flusso

[ l h s , r h s ] = argn ( 0 ) ;
m = length ( x ) ;
i f length ( y ) <> m then
error ( ’ x and y must have same l e n g t h ’ ) ;
end
a =[];
f o r n = 0 : 1 : grad
a = [a,x’.ˆn ];
end
p=a \y ’ ;
i f r h s > 3 then
p=poly ( p , s , ’ c ’ ) ;
end

È interessante come la stessa funzione possa essere richiamata passando in entrata 2 o 3


parametri. È possibile distinguere i due casi mediante il parametro argn(0) che fornisce
il numero di parametri passati in entrata e permette cosı̀ di distinguere i vari casi. I
parametri definiti all’interno di una funzione sono locali, e quindi non vengono passati al
workspace. 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’interno


dello 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 possibilità di utilizzare un
comando break all’interno di questi cicli.

8.2.1 Ciclo for

−−>f o r n=1 : 0 . 1 : 5
−−>y ( n)=3∗n ˆ 2 ;
−−>end

−−>y
y =

10.83
25.23
45.63
72.03
75.

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

−−>EPS
EPS =

1 . 1 1 0 E−16

−−>num
num =

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=1
b =

1.
−−>e l s e
−−>b=0
−−>end

−−>b
b =

1.

8.2.4 Ciclo select-case-else

−−>a=4
a =

4.

−−>s e l e c t a
−−>case { 1 , 2 , 3 }
−−>y=2∗a ;
−−>case { 4 , 5 , 6 }
−−>y=3∗a
−−>case { 7 , 8 , 9 }
−−>y=4∗a ;
−−>e l s e
−−>y=a ;
−−>end

7 maggio 2010 Copyright 2003 Roberto Bucher 41


Introduzione a Scicoslab Capitolo 8. Programmi e controllo di flusso

−−>y
y =

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 = [ 2 1 , 1 0 ; 2 , 3 ; 1 5 , 4 ; 3 , 6 0 ; 7 , 1 3 ]
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 è un oggeto particolare di Scicoslab e può essere rappresentato in vari


modi.
Ad esempio il polinomio

x3 + 2x2 + 7x + 5 (10.1)
può essere definito mediante il comando
−−>p1=poly ( [ 5 , 7 , 2 , 1 ] , ’ x ’ , ’ c ’ ) // p o l i n o m i o t r a m i t e i c o e f f i c i e n t i
p1 =

2 3
5 + 7x + 2x + x

−−>p2=poly ( [ 0 , 1 ] , ’ x ’ ) // p o l i n o m i o t r a m i t e l e r a d i c i
p2 =

2
− x + x

−−>p3=poly ( [ 2 , 3 , 1 ] , ’ x ’ , ’ c ’ )
p3 =

2
2 + 3x + x

Possiamo anche immettere un polinomio direttamente nel modo seguente


−−>s=poly ( 0 , ’ s ’ )
s =

−−>p4=s ˆ4+3∗ s ˆ3+2∗ s+1


p4 =

3 4
1 + 2s + 3s + s

Sui polinomi possono essere fatte una grande quantità di operazioni


−−>roots ( p3 )

7 maggio 2010 Copyright 2003 Roberto Bucher 45


Introduzione a Scicoslab Capitolo 10. Polinomi

ans =

− 1.
− 2.

Un polinomio può essere derivato


−−>derivat ( p1 )
ans =

2
7 + 4x + 3x

Polinomi possono essere moltiplicati semplicemente tra di loro:


−−>p1 ∗ p3
ans =

2 3 4 5
10 + 29 x + 30 x + 15 x + 5x + x

Polinomi possono essere divisi tra di loro


−−>p1=poly ( [ 0 , − 1 , − 2 ] , ’ x ’ )
p1 =

2 3
2x + 3x + x

−−>p2=poly ( [ − 1 ] , ’ x ’ )
p2 =

1 + x

−−>p1 / p2
ans =

2
2x + x
−−−−−−
1

Possiamo definire una funzione polyfit per effettuare l’interpolazione polinomiale


function p=p o l y f i t ( x , y , grad , s )
// C a l c u l a t e s t h e p o l y n o m i a l o f g r a d ” g r a d ” whi ch f i t s t h e g i v e n
// p o i n t s ”x , y ” . ” s ” i s t h e c h a r a c t e r a s s o c i a t e d t o t h e p o l i n o m i a l

[ l h s , r h s ] = argn ( 0 ) ;
m = length ( x ) ;
i f length ( y ) <> m then
error ( ’ x and y must have same l e n g t h ’ ) ;
end
a =[];
f o r n = 0 : 1 : grad
a = [a,x’.ˆn ];
end
p=a \y ’ ;
i f r h s > 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)


−−>g e t f 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 è 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 trovare
i 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 . 0 1 : 1 ;

−−>y1=horner ( p , x1 ) ;

−−>plot2d ( x , y , s t y l e =[ −1])

−−>plot2d ( x1 , y1 )

Nel grafico 10.1 si può giudicare visivamente il risultato


Il comando horner determina il risultato dell’applicazione del polinomio a un vettore di
punti 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 di
Laplace. Per prima cosa si deve utilizzare la funzione syslin per creare la funzione di
trasferimento, ed in seguito, con la funzione pfss si effettua la scomposizione. Il risultato
è una lista (vedi capitolo 15), che contiene le singole frazioni parziali.

−−>p1=poly ( [ 0 , − 1 ] , ’ s ’ )
p1 =

2
s + s

−−>p2=poly ([ −2 , −3 , −4] , ’ s ’ )
p2 =

7 maggio 2010 Copyright 2003 Roberto Bucher 47


Introduzione a Scicoslab Capitolo 10. Polinomi

12

10

−2
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

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 3
24 + 26 s + 9 s + s

−−>f r=s y s l i n ( ’ c ’ , p1/ p2 )


fr =

2
s + s
−−−−−−−−−−−−−−−−−
2 3
24 + 26 s + 9 s + s

−−>p f s s ( 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


Introduzione a Scicoslab Capitolo 10. Polinomi

50 Copyright 2003 Roberto Bucher 7 maggio 2010


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 : 1 2 ;

−−>t e m p e r a t u r e =[5 8 9 15 25 29 31 30 22 25 27 2 4 ] ;

−−>o r e = 1 : 0 . 1 : 1 2 ;

−−>dk = s p l i n ( o r a r i o , t e m p e r a t u r e ) ;

−−>d f = s p l i n ( o r a r i o , temperature , ” f a s t ” ) ;

−−>[yyk , yy1k , yy2k ] = interp ( ore , o r a r i o , temperature , dk ) ;

−−>[y y f , y y 1f , y y 2 f ] = interp ( ore , o r a r i o , temperature , d f ) ;

−−>xbasc ( )

−−>plot2d ( ore , yyk )

−−>plot2d ( ore , y y f , s t y l e =2)

−−>plot2d ( o r a r i o , temperature , s t y l e =−9)

−−>legends ( [ ” n o t a k n o t 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 p o i n t s ” ] , . . .
−−> [ 1 2 −9] , ” ur ” , %f )

−−>x t i 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

spline interpolation

35
not_a_knot spline
fast sub−spline
interpolation points
30

25

20

15

10

5
0 2 4 6 8 10 12

Figura 11.1: Interpolazione spline

52 Copyright 2003 Roberto Bucher 7 maggio 2010


Capitolo 12

Grafica

12.1 Introduzione

In Scicoslab è possibile utilizzare comandi per grafica 2D e 3D. Esistono inoltre comandi
per 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 quantità
di possibili funzioni, che in parte sono state ora sostituite dall’unico comando plot2d che
viene chiamato con vari parametri.
Il comando plot2d ha molte possibilità, per cui per risolvere problemi particolari è meglio
utilizzare l’help integrato. Uno dei parametri principali è sicuramente il logflag che per-
mette di defininre se gli assi sono lineari (“n”) o logaritmici (“l”). L’esempio relativo al
comando 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, grafico di gradienti o campi vettoriali
fchamp

Tabella 12.2: Comandi per grafica 2D

−−>x=l i nspace ( 0 , 2 ∗ p i ) ;

−−>y1=si n ( x ) ;

−−>y2=2∗ si n ( x)+cos ( x ) ;

−−>plot2d ( x , y1 , s t y l e =12)

−−>plot2d ( x , y2 )

−−>xgrid ( −3)

−−>xgrid ( 3 )

−−>x l a b e l ( ’ Asse x ’ )

−−>y l a b e l ( ’ Asse y ’ )

−−>x t i t l e ( ’ G r a f i c o d e l l e 2 f u n z i o n i ’ )

−−>xstri ng ( x ( 5 ) , y1 ( 5 ) , ’ s i n ( x ) ’ )

−−>xstri ng ( x ( 3 0 ) , y2 ( 3 0 ) , ’ 2 s i n ( x)+ c o s ( x ) ’ )

Il grafico ottenuto con i comandi precedenti è mostrato nella figura 12.1


Si può aggiungere una legenda mediante il comando legend. Il comando plot2d permette
una grande variazione di possibilità. Il formato resta però
plot2d ( [ x ] , y,< o p t a r g s >)

dove x è il vettore delle ordinate, y il vettore (o anche la matrice !) delle ascisse, <
opta rgs > permette di settare tutta una serie di opzioni per il grafico (vedi help plot2d).
Per creare un nuovo grafico senza perdere quello precedente è possibile farlo disegnare in
una nuova finestra creata mediante il comando scf .
Il bottone zoom on permette di cliccare con il mouse (sinistro) all’interno di un grafico
oppure di selezionare una zona, per ingrandire determinati particolari, mentre l’utilizzo
del 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

Grafico delle 2 funzioni

2.5

2.0
2sin(x)+cos(x)
1.5

1.0

0.5
sin(x)
Asse y

0.0

−0.5

−1.0

−1.5

−2.0

−2.5
0 1 2 3 4 5 6 7
Asse x

Figura 12.1: Grafico di sin(x) 2 sin(x) + cos(x)

Strofoide
90

−−>f=−p i / 3 : p i / 3 0 : p i / 3 ; 1.0
120
1
60

0.8 0.8

0.6 0.6

−−>r=cos ( 2 ∗ f ) . / cos ( f ) ; 0.4


150
0.4
30

0.2 0.2

−−>pol arpl ot ( f , r ) 0.0 180 0

−0.2

−0.4
−−> t i t l e ( ’ S t r o f o i d e ’ ) −0.6
210 330

−0.8
240 300
−1.0
−1.0 −0.5 270
0.0 0.5 1.0 1.5

Figura 12.2: Comando polarplot

−−>v=rand ( 1 , 2 0 0 0 0 , ’ n ’ ) ; 0.45

0.40

−−>h i s t p l o t ( 4 0 , v ) // 40 c l a s s i 0.35

0.30

0.25

0.20

0.15

0.10

0.05

0.00
−4 −3 −2 −1 0 1 2 3 4 5

Figura 12.3: Comando histplot

7 maggio 2010 Copyright 2003 Roberto Bucher 55


Introduzione a Scicoslab Capitolo 12. Grafica

−−>d e f f ( ” yprim=f ( t , y ) ” , . . 10

−−> [ ” yprim1=y ( 2 ) ” ; . . 8

−−> ” yprim2=−y ( 1 ) + 0 . 5 ∗ y ( 2 ) ” ; . . 4

−−> ” yprim =[ yprim1 ; yprim2 ] ” ; ] ) 2

−−>xmin=−8; xmax=8; ymin=−8; ymax=8; −2

−4

−6

−−>x r=xmin : 0 . 5 : xmax ; y r=ymin : 1 : ymax ; −8

−10
−10 −8 −6 −4 −2 0 2 4 6 8 10

−−>fchamp ( f , 1 , xr , y r )

Figura 12.4: Comando fchamp

12.5 Il comando subplot

È possibile portare più grafici sulla stessa finestra, suddividendola in zone con il comando
subplot.

−−>x =0:2∗ p i / 5 0 : 4 ∗ p i ;

−−>y=si n ( x ) ;

−−>xbasc ( )

−−>subplot ( 2 , 2 , 1 )

−−>plot2d ( x , y )

−−>t = [ 0 : 0 . 1 : 2 ∗ %pi ] ’ ;

−−>y=[ si n ( 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=” l n ” )

−−>xgrid

Il risultato è mostrato nella figura 12.5

56 Copyright 2003 Roberto Bucher 7 maggio 2010


12.5. Il comando subplot Introduzione a Scicoslab

1.0 1.0
0.8 0.8
0.6 0.6
0.4 0.4
0.2 0.2
0.0 0.0
−0.2 −0.2
−0.4 −0.4
−0.6 −0.6
−0.8 −0.8
−1.0 −1.0
0 2 4 6 8 10 12 14 0 1 2 3 4 5 6 7

−0
−5
−10
−15
−20
−25
−30
−35
−40
−45
−2 −1 0 1 2
10 10 10 10 10

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 grafici


3D 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 / 5 0 : 1 0 ∗ p i ; param3d : parametric curves in R3

−−>param3d( si n ( t ) , cos ( t ) , t )
0

10

15
Z

20

25

−1.0
30
−0.6
35 −0.2
−1.0 0.2
−0.8 −0.6 −0.4 −0.2 0.6
0.0 0.2 X
0.4 0.6 1.0
Y 0.8 1.0

Figura 12.6: Comando plot3d

−−>x = − 5 : 0 . 1 : 5 ;
6

0.0533 0.0533

−−>y=x ; 4
−0.082 −0.082

−−>[X,Y]= meshgrid ( x , y ) ; 0.73


0.865
0.459 0.0533
0.594 0.189 −0.082
0.324
0

−−>R=sqrt (X.ˆ2+Y. ˆ 2 ) ; −2

−4 −0.082 −0.082

−−>Z=si n (R) . / R ; 0.0533 0.0533

−6
−6 −4 −2 0 2 4 6

−−>contour ( x , y , Z , 8 )

Figura 12.7: Comando contour

Il comando meshgrid, genera, partendo da due vettori x e y, 2 matrici X e Y in cui ci sono


ripetuti tutti i valori di x (riga dopo riga) e y (colonna dopo colonna), in modo da creare
una griglia nei cui nodi si ritrovano tutte le possibili combinazioni (x,y).
Al posto di mesh si può utilizzare plot3d

12.7 Stampa di immagini

Un grafico può essere stampato da menu, oppure si può esportare il grafico in uno dei
tanti 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=x2−y ^2

−−>Z=X.ˆ2 −Y. ˆ 2 ; 1.0


0.8
0.6
0.4

−−>x t i t l e ( ’ z=x2−y ˆ2 ’ ) ; 0.2


0.0

Z
−0.2
−0.4
−0.6

−−>mesh (X, Y, Z ) ;
−0.8
−1.0
1.0
0.6
1.0
0.2 0.8
0.6
−0.2 0.4
0.2
0.0
−0.6 −0.2
Y −0.4
−0.6 X
−1.0 −0.8
−1.0

Figura 12.8: Comando mesh

−−>plot3d ( x , y , Z )

1.0

0.8

0.6

0.4

Z
0.2

0.0

−0.2
−8
−0.4 −6
−4
−8 −2
−6 0
−4
−2 2
0 4 X
2
Y 4 6
6
8

Figura 12.9: Comando plot3d

12.8 Animazioni

In Scicoslab esiste la possibilità di animare grafici. Il modo più semplice è quello di


sfruttare la funzione realtime, che permette di sincronizzare la rappresentazione grafica
con 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


Introduzione a Scicoslab Capitolo 12. Grafica

60 Copyright 2003 Roberto Bucher 7 maggio 2010


Capitolo 13

Equazioni differenziali

La funzione principale per la simulazione di equazioni differenziale è la funzione ode.


Questa funzione può 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 ( ” r o o t ” , 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 , k v ect , f )

Tramite il parametro type è possibile modificare il metodo di integrazione


type : one o f t h e f o l l o w i n g c h a r a c t e r s t r i n g : ”adams”
”stiff ”
” rk ”
” rkf ”
” fix ”
” discrete ”
” roots”

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 der
Pol  
ẍ + x2 − 1 ẋ + x = 0 (13.1)
viene ridotta con la sostituzione

x1 = x (13.2)
x2 = ẋ1 = ẋ (13.3)

nel sistema

ẋ1 = x2 (13.4)
 
ẋ2 = 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 è

−−>function x dot=vdp ( t , x )
−−>x dot1=x ( 2 ) ;
−−>x dot2=x (2)∗(1 − x ( 1 ) . ∗ x (1)) − x ( 1 ) ;
−−>x dot =[ x dot1 ; x dot2 ]
−−>endfunction

−−>t = 0 : 0 . 0 0 1 : 3 0 ;

−−>x0 =[4; −4]


x0 =

4.
− 4.

−−>x=ode ( x0 , 0 , t , vdp ) ;

−−>plot2d ( t ’ , x ’ )

Il risultato della simulazione è riportato nella figura 13.1

−1

−2

−3

−4
0 5 10 15 20 25 30

Figura 13.1: Simulazione dell’equazione di Van der Pol

62 Copyright 2003 Roberto Bucher 7 maggio 2010


Introduzione a Scicoslab

Interessante è la possibilità di vedere il grafico delle due variabili di stato, una in funzione
dell’altra, per vedere meglio il ciclo che si forma con diverse condizioni iniziali, con i
comandi
−−>plot2d ( x ( 1 , : ) , x ( 2 , : ) )

−−>xgrid ( 4 )

Il risultato è mostrato nella figura 13.2.

−1

−2

−3

−4
−3 −2 −1 0 1 2 3 4 5

Figura 13.2: Diagramma delle fasi dell’equazione di Van der Pol

Per chi lavora molto a livello di equazioni differenziali è consigliabile l’uso di uno strumento
quale Scicos che rispetto a Scicoslab presenta soluzioni più complete, oppure, nel caso
di sistemi lineari, utilizzare le varie funzioni a disposizione per la simulazione di sistemi di
controllo (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 è confrontati con dati raccolti con altri programmi che si vorrebbero analizzare
mediante Scicoslab.

14.1 Dati in formato ASCII

Il metodo più semplice consiste nell’avere questi dati in un file in formato ASCII, come
nel prossimo esempio
1 2 −5
2 0.2500 −9
3 0.0740 −23
4 0.0310 −53
5 0.0160 −105
6 0.0090 −185
7 0.0050 −299
8 0.0030 −453
9 0.0020 −653
10 0.0020 −905

Se questi dati si trovano ad esempio in un file chiamato operaz.dat), possono essere caricati
in Scicoslab con un semplice comando
−−>x=read ( ’ o p e r a z . 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 è possibile con il comando write.


−−>t = 0 : 0 . 1 : 1 ;

−−>y=si n ( t ) ;

7 maggio 2010 Copyright 2003 Roberto Bucher 65


Introduzione a Scicoslab Capitolo 14. Input/Output

−−>write ( ’ d a t i . dat ’ , [ t ’ , y ’ ] )

14.2 Emulazione comandi C

Esiste tutta una serie di comandi che permettono di emulare gli analoghi comandi in
C. 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

È possibile leggere completamente un file e riscriverlo dopo aver effettuato alcune modifi-
che, utilizzando i comandi mgetl e mputl.
−−>T=mgetl ( ’ M a k e f i l e ’ ) ;

−−>T=strsubst (T, ’ . o ’ , ’ . o b j ’ ) ;

−−>mputl (T, ’ M a k e f 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 più
grandi. Le funzioni che permettono di creare matrici speciali nelle due dimensioni, possono
essere utilizzate anche su n dimensioni. Per esempio, il comando ones(2, 3, 4, 1) permette
di creare una matrice di “1” su 4 dimensioni.
Quando vogliamo utilizzare una matrice a 3 dimensioni, ad esempio, per crearla occorre
utilizzare 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∗a
b =

10. 20. 30.


40. 50. 60.
70. 80. 90.

−−>c=c a t ( 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 liste
possono essere create direttamente per assegnamento, o utilizzando il comando list. Da
notare 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 possibilità per la rappresentazione di strutture è quella di utilizzare delle


typed list.
In questo caso viene passata come primo argomento una matrice di stringhe che contiene un
identificativo della lista e i nomi dei campi. L’accesso ai dati può avvenire sia utilizzando
un indice, sia utilizzando il campo.
−−>L=t l i s t ( [ ’V ’ , ’ name ’ , ’ v a l u e ’ ] , [ ’ 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 . name
ans =

!a b c !

−−>g e t f i e l d ( ’ name ’ , L)
ans =

68 Copyright 2003 Roberto Bucher 7 maggio 2010


15.2. Liste Introduzione a Scicoslab

!a b c !

−−>s e t f i e l d ( ’ v a l u e ’ , 0 : 1 0 , L)

−−>L
L =

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 possibilità è data dal comando mlist. In questo caso l’accesso ai campi non è
possibile tramite l’indice.
È possibile inizializzare direttamente delle tlist come strutture, dando direttamente un
valore ai campi.
−−>a . num=2
a =

num : 2

−−>a . den=3
a =

num : 2
den : 3

−−>a
a =

num : 2
den : 3

−−>a . nome= ’ c i a o ’
a =

num : 2
den : 3
nome : ” c i a o ”

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 può essere utile creare delle funzioni.
Queste funzioni sono implementate utilizzando il linguaggio di programmazione messo a
disposizione dall’ambiente Scicoslab. Il loro utilizzo non è immediato, come ad esempio
in altri linguaggi come Matlab, ma queste funzioni devono essere prima caricate nell’am-
biente di Scicoslab. La soluzione più semplice è quella di raccogliere tutte queste funzioni
all’interno di una stessa cartella, e di poi caricarle all’inizio della sessione Scicoslab tramite
il 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 trova
sotto la cartella nascosta
. Scilab /4.4

o una cartella analoga, dipendente dalla versione utilizzata di Scicoslab. Il comando per il
caricamento della cartella delle funzioni può 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 è quello di compilare
tutte le funzioni personali, creando una libreria e caricando poi questa libreria tramite lo
script di inizializzazione. Occorre quindi aggiungere alla cartella delle funzioni il seguente
file “buildmacros.sce“ per la compilazione e la creazione della libreria
// S c i l a b ( h t t p : / /www . s c i l a b . o r g / ) − Thi s f i l e i s p a r t o f S c i l a b
// C o p y r i g h t (C) 2007 −2008 − INRIA − A l l a n CORNET <a l l a n . c o r n e t @ i n r i a . f r >
//
// Thi s f i l e must be used under t h e terms o f t h e CeCILL .
// Thi s s o u r c e f i l e i s l i c e n s e d as d e s c r i b e d i n t h e f i l e COPYING, whi ch
// you s h o u l d have r e c e i v e d as p a r 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 s d e f ( ’ g e n l i b ’ ) == %f ) then
exec ( SCI+ ’ / modules / f u n c t i o n s / s c r i p t s / b u i l d m a c r o s / l o a d g e n l i b . s c e ’ ) ;
end
//−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
t o o l b o x d i r = pwd ( ) ;
genlib ( ’ l i b s u p s i f u n ’ , t o o l b o x 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 è “libsupsifun”) con quello desiderato.


Si può quindi lanciare il “Makefile” seguente con “make“ da una shell per compilare i file
e creare la libreria
install :
s c i c o s l a b −nw −f b u i l d m a c r o s . s c e

clean :
rm −f ∗ . b i n l i b 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 è sostituito dal percorso completo dove sono i files compilati.

72 Copyright 2003 Roberto Bucher 7 maggio 2010