Tipi di dati
SCILAB riconosce diversi tipi di dati. Gli oggetti scalari sono costanti, booleani, polinomi, stringhe e razionali (quozienti di polinomiali). Questi oggetti, a turno permettono di definire le matrici che ammettono questi scalari come ingresso. Altri oggetti, sono le liste, "liste-digitate", e funzioni. Solamente le matrici costanti e booleane sono definite.
L'obiettivo di questo capitolo e' di descrivere l'uso di ognuno di questi tipi di dati.
Costanti speciali
SCILAB possiede costanti speciali simili a quelle di MATLAB. In generale, queste costanti hanno % come prefisso. Queste variabili sono considerate come "predefinite". Sono protette, non possono essere cancellate e non vengono salvate con il comando save. E' possibile per un utilizzatore avere le proprie variabili "predefinite", usando il comando predef.
Questa lista illustra le costanti specialie le relative funzioni,
%i | rappresenta sqrt(-1) |
%pi | P = 3.1415927 ..... |
%e | costante trigonometrica e = 2.7182818 |
%eps | costante rappresentante la precisione della macchina |
%nan | non e' un umero |
%inf | infinito |
%s | e' il polinomiale s=poly(0,’s’) con il simbolo s. |
%t | costante booleana per TRUE, e pari a 1==1 |
%f | costante booleana per FALSE, e pari a ~%t. |
Matrici di stringhe
I caratteri stringa possono essere creati usando singole o doppie virgolette. La concatenazione di stringhe viene ottenuta con l'operando + . Le matrici di stringhe sono costruite come matrici ordinarie, ad esempio usando le doppie virgolette. Una caratteristica molto importante delle stringhe è la capacita' di manipolare e creare funzioni.
Maggiormente, la manipolazione simbolica di oggetti matematici puo' essere implementata usando matrici di stringhe. L'esempio seguente dimostra alcune di queste caratteristiche.
s =['x' 'y';'z' 'w+v']
produce come risultato
s =
! x y !
!
!
! z w+v !
mentre
ss =trianfml(s)
produce come risultato
! z
w+v
!
!
!
!0 z*y-x*(w+v) !
sostituendo il valoreper x, y, z, e w
x=1;y=2;z=3;w=4;v=5;
e
evstr(ss)
questo produce
ans =
! 3. 9. !
! 0. - 3. !
Polinomi e matrici polinomiali
I polinomi sono facilmente creabili e manipolabili con SCILAB. La manipolazione di matrici polinomiali e' essenzialmente identica a quella delle matrici costanti. La primitiva poly in SCILAB puo' essere usata per specificare i coeficienti di un polinomio oppure le radici di un polinomio.
p=poly([1 2],'s') //polinomio definito dalla sua radice
produce,
p =
2
2 - 3s + s
e,
q=poly([1 2],'s','c') //polynomial defined by its coefficients
Questo produce
q =
1 + 2s
Per esempio
q/p
produce,
ans =
1 + 2s
----------
2
2 - 3s + s
Matrici booleane
Le costanti booleane sono %t e %f. esse possono essere usate nelle matrici booleane. La sintassi è pari a quella delle matrici ordinarie, per es. possono essere concatenate, trasposte, etc.. I simboli di operazione usati con le matrici booleane oppure usati per creare matrici booleane sono == e ˜.
Se B e' una matrice booleana, or(B) and and(B) eseguira' l' or e l'and logico.
Per esempio, digitando
%t
otterremo
%t =
T
Similarmente,
[ 3,3] == [3,4]
questo produrra'
ans =
! T F !
e
s = 1:6 ; s(s>3)
produrra' come uscita
ans =
! 4. 5. 6. !
Similarmente,
A = [%t %f %t %f], B = [%f %t %f %t]
produrra',
A =
! T F T F !
B =
! F T F T !
e
A|B // logical OR
ans =
! T T T T !
A&B // logical AND
ans =
! F F F F !
Liste (list)
SCILAB possiede un tipo di dati "lista". La lista e' una collezzione di oggetti data non necessariamente dello stesso tipo. Una lista puo' contenere qualunque tipo di dato come precedentemente descritto (incluse le funzioni), cosi' come altre liste. Le liste sono pratiche per definire dati oggetto strutturati. Ci sono due tipi di liste, liste ordinarie e liste-digitate. Una lista viene definita dalla funzione list.
Ecco di seguito un esempio:
ls = list(2,%i,'f',ones(3,3)) // una lista fatta da quattro input
Questo produce,
ls =
ls(1)
2.
ls(2)
i
ls(3)
f
ls(4)
! 1. 1. 1. !
! 1. 1. 1. !
! 1. 1. 1. !
Per estrarre l'input da una listadevi usare il listname(listindex), per esempio,
ls(4)
ans =
! 1. 1. 1. !
! 1. 1. 1. !
! 1. 1. 1. !
Puoi inoltre creare una lista annidata.
ls(2) = list( %t, rand(2,2,'normal')) // ls(2) is now a list
ls(2)(1)
T
ls(2)(2)
! .6380837 - .6834217 !
! .2546697 .8145126 !
Le liste-digitate possiedono un input speciico. Il primo input deve essere un carattere stringa (il tipo) oppure un vettore di caratteri stringa (Il primo componente e' quindi il tipo, i seguenti elementi sono invece i nomi dati agli input della lista). Il formato generale e',
tlist(typ,a1,....an )
dove l'argomento typ specifica il tipo di lista. mentre a1...an e' l'oggetto.
Gli input delle liste-digitate possono essere manipolate usando le stringhe carattere (i nomi) come mostrato di seguito.
lst = tlist(['random numbers';'Name';'Example'], ' Uniform',rand(3,3,'uniform'))
Queste produce,
lst(1)
!random numbers !
!
!
!Name
!
!
!
!Example
!
lst(2)
Uniform
lst(3)
! .2113249 .3303271 .8497452 !
! .7560439 .6653811 .6857310 !
! .0002211 .6283918 .8782165 !
e,
lst('Name') // same as lst(2)
ans =
Uniform
Funzioni
Le funzioni sono una collezzione di comandi che vengono eseguiti in un nuovo ambiente che isola le variabili delle funzioni dalle variabili originali dell'ambiente primario. Le funzioni possono essere create ed eseguite in differenti modalita'. Le funzioni possono passare argomenti, hanno caratteristiche programmabili come i salti condizionali ed i loop e possono essere ricorsivamente chiamate. Le funzioni possono essere argomenti di altre funzioni e possono essere elementi nelle liste. Il sistema maggiormente usato per creare funzioni consiste nell'usare un editor di testi, comunque, le funzioni possono essere create direttamente nell'ambiente SCILAB usando la primitiva deff.
Proviamo a lavorare su na semplice funzione nella finestra comandi. La funzione convertira' l'input in dB.
deff('[out] = dB(inp)',' out = 10*log10(inp)')
Proviamo con alcuni valori,
db(10)
produce,
ans =
10.
Solitamente le funzioni sono definite in un file usando un editor di testo e caricate nell'ambiente SCILAB mediante il comando getf('nome del file'). Questo puo' essere inoltre fatto selezionandone il bottone nel menu' File. Questo ultimo comando carica function(s) nel nome del file e la compila.
La prima linea del nome del file deve essere come segue:
function [y1,...,yn]=macname(x1,...,xk)
dove gli yi sono output variabili e le xi sono gli input variabili.
Librerie
Le librerie sono collezzioni di funzioni che possono essere automaticamente caricate nell'ambiente SCILAB quando SCILAB viene chiamato, oppure caricate quando desiderato dall'utente. Le librerie sono create dal comando lib. Esempi di librerie sono date nella cartella SCIDIR/macros.
Nota che in queste cartelle c'e' un file ascii chiamato "names" che contiene i nomi di ogni funzione della libreria, un set di file .sci che contiene il codice sorgente delle funzioni ed un set di files .bin che contiene il codice compilato delle funzioni. Il Makefile richiama SCILAB per la compilazione delle funzioni e la generazione dei file .bin. Le funzioni compilate di una libreria sono automaticamente caricate in SCILAB alla loroprima chiamata.
Oggetti
Gli oggetti SCILAB possono essere visti digitando la funzione typeof. Il formato generale e':
typeof(object)
per esempio,
d = 'suren';
typeof(d)
ans =
string
La tabella seguente contiene la lista degli ogetti SCILAB,
usual | per matrici con input reali o complessi. |
polynomial | per matrici polinomiali: i coefficienti possono essere reali o complessi. |
boolean | per matrici booleane. |
character | per matrici di caratteri stringa. |
function | per funzioni. |
rational | per matrici razionali (syslin lists) |
state-space | per sistemi lineari in forma spaziale (syslin lists). |
sparse | per matrici di costanti sparse (reali o complesse) |
boolean sparse | per matrici booleane sparse. |
list | per liste ordinarie. |
tlist | per liste-digitate. |
state-space | (o razionali) per syslin lists. |
library | per definizione libreria. |