echo on;
% Controllo Digitale A.A. 2003/2004
% Titolare del corso: Prof. Alberto Bemporad
% Esercitazioni:      Ing. Nicolo' Giorgetti
%
% BREVE GUIDA a MATLAB 

% Matlab e' lo strumento di lavoro utilizzato nel corso e soprattutto
% dagli ingegneri del controllo. Matlab e' un programma di base piu' 
% un'insieme di toolbox che consentono l'utilizzo di Matlab per 
% applicazioni specifiche. Il toolbox che verra' considerato e' il 
% CONTROL SYSTEM TOOLBOX per il disegno e l'analisi dei sistemi di 
% controllo.
%
% Tipica sessione di lavoro:
% 1) variabili e istruzioni;
% 2) matrici
% 3) grafici
% 4) file-M
%
% Matlab interpreta ed agisce nella forma di uno o piu' di questi
% oggetti.
%
% Introdurremo i quattro oggetti con l'obiettivo di analizzare e
% progettare sistemi di controllo.
%
%
% [1] VARIABILI E ISTRUZIONI
%    ------------------------ 
%
% >> Prompt di Matlab
%
% Operazione di assegnamento di un'espressione ad una variabile
%
%              >>variabile=espressione
%             
% Es: inserimento di una matrice 2x2a cui associamo il nome A:

A=[1 2; 4 6]

pause;

% La matrice A e' automaticamente rappresentata. Se l'istruzione e'
% seguita da un punto e virgola (;) l'output e' soppresso.

A=[1 2; 4 6];

pause;

% Il punto e virgola e' stato introdotto per due ragioni: 1) calcoli 
% intermedi sono poco significativi; 2) la soppressione dell'output 
% accelera la velocita' di esecuzione (la rappresentazione porta via 
% tempo).
% 
% Tipici operatori matematici: +,-,*,/,^
% 
% Matlab puo' essere utilizzato in modo "calcolatrice":

12.4/7.69

pause;

% Il nome della variabile ed il simbolo '=' sono omessi, il risultato e' 
% assegnato alla variabile generica ans.
% 
% Matlab mette a disposizione molte funzioni elementari e trigonometriche 
% di una calcolatrice scientifica. Esempi: sin(x), cos(x), tan(x), abs(x), 
% sqrt(x), log(x), exp(x).
% 
% Matlab e' "case-sensitive", cioe' le variabili M e m NON rappresentano 
% la stessa variabile.

M=[1 2];
m=[3 4 5];

% M e m sono riconosciute come quantita' differenti.
% Anche i comandi sin e SIN sono riconosciuti come entita' diverse. I 
% comandi in Matlab sono indicati in lettere minuscole. Il comando SIN 
% genera percio' errore.
% 
% Matlab ha diverse variabili predefinite:

pi    % pi-greco
Inf   % Infinito positivo
NaN   % Not-a-Number: risulta da operazioni indefinite
i     % =j=sqrt(-1)

% Esempi: z=3+4i 0/0
pause;


% La matrice A e la variabile ans sono memorizzate nel "workspace". Le 
% variabili nel workspace sono automaticamente salvate per un utilizzo 
% successivo nella sessione.
% La funzione "who" elenca le variabili nel workspace.

who
pause;

% La funzione "whos" elenca le variabili e fornisce informazione 
% addizionale riguardante dimensione delle variabili, tipo e la memoria 
% occupata.

whos
pause;

% Le variabili possono essere rimosse dal workspace con la funzione 
% "clear". Se si utilizza solo "clear" si cancellano tutte le variabili, 
% clear nome1 nome2 ... rimuove le variabili nome1 nome2 ...

clear A
who
pause;

% Tutti i calcoli in Matlab sono fatti in doppia precisione. Si puo' 
% modificare il numero di cifre rappresentate con il comando "format".

format long; pi
format short e; pi

% Per salvare le variabili del workspace: save nomefile
% Per salvare alcune variabili del workspace: save nomefile nomevar1 
% nomevar2...
% Per leggere il file salvato: load nomefile
%


% [2] MATRICI
%    ---------
%
% L'unita' computazionale di base in Matlab e' la matrice. Vettori e
% scalari possono essere visti come casi speciali di matrici. Una
% matrice e' tipicamente racchiusa tra parentesi quadre [*]. Gli
% elementi colonna sono separati da spazi o virgole, le righe da punto e
% virgola o return

A=[1 2 3;
   4 5 6;
   7 8 9]
pause;

% La memoria per le matrici e' allocata automaticamente. Gli elementi
% della matrice possono contenere numeri, funzioni matematiche ecc...

% Operazioni di base sulle matrici:
%  addizione (+), sottrazione(-), moltiplicazione (*), trasposta('),
%  potenza(^);
%  operazioni vettoriali, operazioni elemento-elemento (si antepone un
%  punto.)
%
% Esempi: moltiplicazione elemento-elemento: A.*B={a_ij*b_ij}
%         
% Le operazioni tra matrici possono essere fatte se le matrici hanno
% dimensioni compatibili. Es: somma, sottrazione => stessa dimensione.
%
% A dimensione nxm, B pxr => A+B o A-B e' permesso solo se n=p e m=r
% A*B e' permesso solo se m=p

A=[1 3; 5 9]; 
B=[4 -7; 10 0];

A+B
pause

% Se si considera un vettore b di dimensione p, la moltiplicazione y=A*b
% e' permessa solo se m=p.

b=[1; 5];
A*b
pause;

% La trasposta di una matrice e' effettuata con l'apostrofo ('). Il
% "prodotto interno" tra vettori puo' essere ottenuto con la trasposta e
% l'operazione di moltiplicazione. Es: w, v sono vettori mx1. Il
% prodotto interno e':
%
%           w'*v   il risultato e' uno scalare
%
% il "prodotto esterno" e' definito come w*v' e il risultato e' una
% matrice.

% Per accedere ad un elemento della matrice a_ij=A(i,j)
% Se si vuole considerare la matrice per righe 
%                A=[A1; A2; ...] => Ai=A(i,:)
% per colonne
%                A=[A1 A2 ...]   => Ai=A(:,i)

% Creazione di un vettore:
t=1:4
pause;

% Creazione di un vettore con incremento fissato:
t=1:20:100
pause;

% Alcune funzioni utili per le matrici

% Determinante di una matrice: det(A)
% Inversa di una matrice: inv(A)
% Calcolo degli autovalori e autovettori: [V,D]=eig(X) con X matrice e
% V, D rispettivamente autovettori e autovalori di X.
% Il rango di una matrice viene determinato con il comando: rank(A)


% [3] GRAFICI
%    ---------
%
% I grafici giocano un ruolo importante sia nel disegno che nell'analisi
% dei sistemi di controllo. Il comando per la rappresentazione grafica
% e' "plot". Per cancellare un grafico "clf". Per chiudere una finestra
% che contiene un grafico "close".
%
% Ci sono 2 classi di funzioni per i grafici:
%  -> funzioni che specificano il tipo di plot (plot, semilogx, semilogy,
%     loglog)
%  -> funzioni che consentono di personalizzare i plot (title, xlabel,
%     ylabel, subplot, grid)
%
% Piu' grafici possono essere messi in uno stesso plot:
%
% Es: plot(x1, y1, '-', x2, y2, '--')
%
% Con plot e' possibile specificare anche il tipo di linea da
% utilizzare. Es: '-' tratto continuo, '--' tratteggio.
%
% L'area grafica puo' essere suddivisa in sottofinestre con il comando
% "subplot".
% subplot(m,n,p) suddivide l'area grafica in mxn zone. L'intero p
% specifica la finestra. Le finestre sono numerate da sinistra a destra,
% dall'alto verso il basso.
%
%


% [5] FILE-M
%    ---------
%
% Fino a questo punto tutte le nostre interazioni con Matlab sono state
% fatte al prompt. Questo tipo di operazioni ha senso quando la sessione
% di lavoro e' breve e non ripetitiva.
% Matlab consente di eseguire lunghe sequenze di comandi memorizzati in
% un file. Questi file sono chiamati file-M e hanno estensione .m.
% Ad esempio il control system toolbox e' una collezione di file-M.
%
% Un file-M e' un semplice file di testo in cui si scrivono i comandi e
% le istruzioni a livello di prompt. Un file-M viene invocato quando
% viene scritto il suo nome al prompt. Un file-M puo' essere richiamato
% da altri file-M.
%
% Nel file-M possono essere inseriti dei commenti con '%' (vedi questo
% breve tutorial). Tutto cio' che viene dopo il percento per Matlab e'
% un commento.
% I commenti in testa al file-M rappresentano l'header del file ed e'
% cio' che viene rappresentato quando viene fatto il comando help

help short_tutorial_matlab
pause;

% Tipici costrutti sono for...end, while...end, if...end
% Si rimanda all'help di Matlab per maggiori dettagli sulla sintassi di
% questi costrutti.
%
% Con i file-M di possono definire nuove funzioni che accettano in
% ingresso un insieme di argomenti e ne ritornano un altro insieme.
% Le funzioni sono costituite da un set di elementi:
% 
% 1) La prima riga di una funzione e':
%         function [output]=nomefunzione(inputs)
%
%    la funzione deve essere salvata in un file con nome: nomefunzione.m
%
% 2) Un commento, questo verra' presentato quando da linea di comando 
%    verra' invocatol'help su nomefunzione

help media
pause;

% 3) Il corpo della funzione. Il corpo della funzione effettua calcoli e
%    assegna valori alle variabili di uscita.
%
% Per un esempio di file-M si veda media.m
%
%
%
% RIFERIMENTI BIBLIOGRAFICI
%---------------------------
%
%  Matlab User's guide
%  Matlab Getting started
% 
%  Il comando 'help'

echo off;