Introduzionea Scicoslab - SUPSIrobertobucher.dti.supsi.ch/wp-content/uploads/2017/03/scilab.pdf ·...

72
Scuola universitaria professionale della Svizzera italiana Dipartimento Tecnologie Innovative Introduzione a Scicoslab Ing. Roberto Bucher 7 maggio 2010

Transcript of Introduzionea Scicoslab - SUPSIrobertobucher.dti.supsi.ch/wp-content/uploads/2017/03/scilab.pdf ·...

Scuola universitaria professionaledella Svizzera italiana

DipartimentoTecnologieInnovative

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

Introduzione a Scicoslab ELENCO DELLE FIGURE

6 Copyright 2003 Roberto Bucher 7 maggio 2010

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

Introduzione a Scicoslab ELENCO DELLE TABELLE

8 Copyright 2003 Roberto Bucher 7 maggio 2010

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

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

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

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: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

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