Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Capitolo 18: Strutture particolari
18.1 Matrici multidimensionali
Dalla versione 5.0 di Matlab, le dimensioni delle matrici non sono più 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. Ad esempio, il comando ones(2, 3, 4, 1) permette di creare una matrice di uni su 4 dimensioni.
Quando vogliamo utilizzare una matrice a 3 dimensioni, ad esempio, la terza dimensione è definita pagina (page). 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=cat(3,a,b) c(:,:,1) =1 2 3 4 5 6 7 8 9 c(:,:,2) =10 20 30 40 50 60 70 80 90 La rappresentazione di una matrice multidimensionale viene fatta pagina per pagina. Con i comando repmat è possibile creare una matrice multidimensionale con contenuto costante >> B=repmat(pi,[2 2 3 3]) 7 aprile 2003 Copyright 2003 Roberto Bucher 89 Introduzione a Capitolo 18. Strutture particolari Matlab B(:,:,1,1) =3.1416 3.1416 3.1416 3.1416 B(:,:,2,1) =3.1416 3.1416 3.1416 3.1416 B(:,:,3,1) =3.1416 3.1416 3.1416 3.1416 B(:,:,1,2) =3.1416 3.1416 3.1416 3.1416 B(:,:,2,2) =3.1416 3.1416 3.1416 3.1416 B(:,:,3,2) =3.1416 3.1416 3.1416 3.1416 B(:,:,1,3) =3.1416 3.1416 3.1416 3.1416 B(:,:,2,3) =3.1416 3.1416 3.1416 3.1416 B(:,:,3,3) =3.1416 3.1416 3.1416 3.1416 Ta tabella 18.1 mostra altri possibili comandi su matrici multidimensionali. flipdim gira una matrice su una determinata dimensione ndgrid genera una matrice multidimensionale per funzioni o interpolazione ndims numero delle dimensioni di una matrice permute,ipermute permuta le
dimensioni di una matrice
reshape cambia le dimensioni
shiftdim sposta le dimensioni
squeeze elimina dimensioni singole
sub2ind,ind2sub indice lineare corrispondente
Tabella 18.1: Operazioni su matrici multidimensionali
Anche diversi comandi come sum, prod , cumsum ed altri ancora, sono stati completati con un’informazione supplementare che permette di decidere su quale dimensione vanno applicati (vedi help di ogni comando).
Copyright 2003 Roberto Bucher 7 aprile 2003
18.2. Celle Introduzione a Matlab
18.2 Celle
Le celle sono matrici che possono contenere elementi di tipo diverso fra di loro. Le celle possono essere create direttamente per assegnamento, o utilizzando il comando cell. Da notare che l’indicizzazione ad una cella viene fatto utilizzando le parentesi graffe.
>> A(1,1)={[1,2,3;4,5,6;7,8,9]} A = [3x3 double] oppure >> A{1,1}=[1,2,3;4,5,6;7,8,9] A = [3x3 double] Completiamo ora questa matrice di celle >> A{1,2}=2+3i A = [3x3 double] [2.0000+ 3.0000i] >>
A{2,1}=’Ciao a tutti’
A = [3x3 double] [2.0000+ 3.0000i]’Ciao a tutti’ []
A{2,2}=10:-1:1;
Visualizziamo il contenuto di A
AA = [3x3 double] [2.0000+ 3.0000i]’Ciao a tutti’ [1x10 double]
Possiamo vedere come si visualizzino informazioni sul contenuto di ogni cella, ma non il contenuto stesso. Per accedere ad un contenuto possiamo farlo sfruttando le parentesi graffe
A{2,2}
ans = 10 9 8 7 6 5 4 3 2 1
oppure
A{2,2}(2)
ans = 9
La matrice di celle può anche essere visualizzata in forma grafica (vedi figura 18.1.
Le matrici di celle possono essere modificate e manipolate come normali matrici (con-catenazione, scambio di elementi, ecc.). L’uso principale previsto è quello della gestione delle stringhe, senza dover a tutti i costi ridimensionare ogni riga di una matrice alla dimensione più grande (vedi capitolo sulle stringhe).
La tabella 18.2 riporta alcuni comandi applicabili su celle.
7 aprile 2003 Copyright 2003 Roberto
Bucher 91
Introduzione a Capitolo 18. Strutture particolari
Matlab>>cellplot(A) 2+3i
Ciao a tutti
Figura 18.1: Risultato del comando cellplot
cell crea una cella
cell2struct conversione da cella a struttura
celldisp mostra la struttura della cella
cellplot mostra la struttura della cella in forma grafica
num2cell converte una matrice in una cella
Tabella 18.2: Comandi applicabili a celle
18.3 Strutture
Un'altra novità introdotta dalla versione 5 sono le strutture. Le strutture sono particolari variabili che contengono dei campi con informazioni di tipi differente. Le strutture utilizzano la sintassi con il punto, sintassi comune a molti linguaggi di programmazione. I campi possono essere generati dinamicamente nel momento in cui vengono utilizzati per la prima volta, oppure possono essere stati dichiarati prima dell'uso.
>> professore.cognome=’Bucher’
professore =
cognome: ’Bucher’
>> professore.nome=’Roberto’
professore =
cognome:
’Bucher’nome: ’Roberto’>> professore.materia={’Regolazione’,’Automazione’}
professore =cognome: ’Bucher’nome: ’Roberto’materia: {1x2 cell}>> professore.materia{1}ans =Regolazione
Copyright 2003 Roberto Bucher 7 aprile 200318.3. Strutture Introduzione a Matlab
Come si può vedere l’elemento di una struttura può essere una matrice, una cella, o un’altrastruttura.
I dati possono essere immessi anche utilizzando il comando struct>> Cognomi={’Bucher’,’Bernasconi’,’Tizio’};
>> Nomi={’Roberto’,’Giovanni’,’Caio’};
>> Materie={{’Regolazione’,’Automazione’},{’Matematica’},{’Latino’}};
>> professore=struct(’cognome’,Cognomi,’nome’,Nomi,’materia’,Materie)professore =1x3 struct array with
fields:cognomenomemateriaL'accesso ai dati può essere fatto come per le normali matrici>> professore(1)ans =cognome: 'Bucher'nome: 'Roberto'materia: {1x2 cell}>> professore.nomeans =Robertoans =Giovannians = Caio>> getfield(professore,{1},'nome')ans = RobertoÈ possibile accedere al nome dei campi tramite il comando fieldnames, in modo da poterutilizzare il risultato ad esempio in un programma>> T=fieldnames(professore)T = 'cognome''nome''materia'Altri comandi applicabili alle strutture sono riportati nella tabella 18.3.Ulteriori informazioni su celle e strutture possono essere trovate con il comando helpdatatypes.7 aprile 2003 Copyright 2003 Roberto Bucher 93Introduzione a Capitolo 18. Strutture particolariMatlabrmfield cancellazione di un camposetfield sostituzione del contenuto di un campostruct2cell conversione da struttura a cellaisstruct controllo se un certo elemento è
Struttura Tabella 18.3: Comandi su strutture | |
---|---|
Copyright 2003 Roberto Bucher | |
7 aprile 2003 | |
Capitolo 19 | |
Programmazione orientata agli oggetti | |
19.1 | Introduzione |
Tramite gli oggetti e le classi è possibile introdurre nuovi tipi di dati e nuove operazioni. La classe indica la struttura di una variabile e le operazioni e funzioni che possono essere applicate a questa variabile. | |
A partire dalla versione 5, i tipi double, sparse, char, struct e cell sono già implementati come oggetti in Matlab. In alcuni toolbox troviamo oggetti particolari, come ad esempio nel toolbox di controllo con gli oggetti LTI. | |
Oggetti possono essere implementati specificandone la struttura e creando direttori di funzioni che agiscono su questi oggetti (metodi). Esiste anche la possibilità di sovrascrivere alcuni metodi (overloading). | |
19.2 | Costruttori |
Oggetti di una classe possono essere istanziati senza doverli dichiarare in precedenza; gli oggetti vengono creati dinamicamente tramite un costruttore della classe. |
classe.Quale esempio utilizzeremo un nuovo oggetto da creare chiamato polinomio. Come in altri linguaggi ad oggetti il costruttore mantiene il nome della classe. Le informazioni e i metodi di una classe vanno messi in un direttorio con il nome @nomeclasse
. Nel nostro esempio dobbiamo creare un direttorio chiamato @polinomio
. Il nostro oggetto sarà una struttura con un solo campo contenente una matrice di coefficienti. Creiamo ora il costruttore, che verrà chiamato passando come parametro la matrice dei coefficienti, oppure un altro polinomio.
function p=polinomio(coeff)
%% Costruttore della classe polinomio
%% p=polinomio(a) costruisce un polinomio
%% partendo dai coefficienti a o da un altro polinomio in coeff
%% 7 aprile 2003 Copyright 2003 Roberto Bucher 95
Introduzione a Capitolo 19. Programmazione orientata agli oggetti Matlab
if nargin==0
p.c=[];
p=class(p,'polinomio');
elseif
<p>isa(coeff,’polinomio’)p=coeff;elsep.c=coeff(:).’;p=class(p,’polinomio’);end</p>
<p>La funzione isa controlla se l’oggetto passato coef f appartiene già alla classe polinomio.In quest’ultimo caso l’oggetto viene semplicemente copiato.L’uso di questo costruttore è molto semplice>> p=polinomio([1 2 3])p = polinomio object: 1-by-1>> p1=polinomio(p)p1 = polinomio object: 1-by-1>> whosName Size Bytes Classp 1x1 148 polinomio objectp1 1x1 148 polinomio objectGrand total is 8 elements using 296 bytes</p>
<p>19.3 Funzioni di conversioneCreiamo ora una funzione di conversione da polinomio a double.La funzione deve avere il nome della classe del risultatofunction c=double(p)% c=double(p)% Estrazione dei coefficienti del polinomio%c=p.c;Applicando ora la funzione>> double(p)ans = 1 2 3Nello stesso modo possiamo creare un metodo di conversione a char , che ci fornisce ilpolinomio in forma di stringa96 Copyright 2003 Roberto Bucher 7</p>
aprile 2003
19.3. Funzioni di conversione Introduzione a Matlab
function s=char(p)
% s=char(p)
% Estrazione del polinomio come stringa
c=p.c;
if all(c==0)
s='0';
return
end