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 !

        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.