Introduzione a Matlab Emanuele Maiorana Corso di Trasmissioni
Introduzione a Matlab Emanuele Maiorana Corso di Trasmissioni Numeriche - Introduzione a Matlab
Roadmap Saranno presentate le caratteristiche MATLABTM (MATrix LABoratory) di base del sistema • Operazioni elementari su scalari, vettori e matrici • Script • Funzioni • Visualizzazione • Demo • Simulink Trasmissioni Numeriche - Introduzione a Matlab
Intro MATLAB è uno strumento di analisi dati e di visualizzazione largamente usato da ingegneri elettronici e non per attività di ricerca e simulazione. MATLAB utilizza funzioni esattamente come script C (o C++), consentendo agli utilizzatori anche di crearne di propri. La differenza fondamentale dal C è che le funzioni MATLAB sono scritte specificatamente per operazioni su grandi array, e si basa su una rappresentazione vettoriale di ogni variabile. L’utilizzo di MATLAB, a differenza del C, utilizza pesantemente la memoria del computer, e i tempi di elaborazione sono molto elevati. Di contro, offre una facilità di utilizzo e una intuitività delle funzioni molto maggiore. Trasmissioni Numeriche - Introduzione a Matlab
Interfaccia grafica Help Finestra di Workspace e Directory Modifica cartella di lavoro Chiusura Finestra Inserimento comandi e funzioni Inserimento comandi Utilizzo comandi precedenti Barra separatrice (modificabile) Trasmissioni Numeriche - Introduzione a Matlab
Edit window • Ambiente di editing degli M-files (scripts e functions) • Puo’ essere usato qualsiasi editor di testo • Matlab dispone di un text-editor integrato Commenta le linee selezionate e specifica lo stile di formattazione nel menu Text Trova e sostituisci stringhe Impostando Breackpoints si può mettere in pausa i programmi durante l’esecuzione e valutarne l’andamento Tenendo il cursore su una variabile viene mostrato il suo valore attuale Trasmissioni Numeriche - Introduzione a Matlab
Comandi di recupero informazioni On-line help • help argomento: fornisce l’help sull’argomento indicato • helpwin: help interattivo completo Workspace information • who, whos: elenca le variabili correntemente in uso • clear: rimuove tutte le variabili in uso • clear x, y, z • clear all Directory information • pwd: mostra la directory di lavoro corrente • cd: cambia la directory di lavoro corrente • dir: mostra il contenuto della directory di lavoro corrente • ls: stesso comportamento di dir Trasmissioni Numeriche - Introduzione a Matlab
Inserimento comandi Per inserire comandi, basta digitare il comando al prompt. Es. 1: >> pi ans = 3. 1416 >> Matlab crea una variabile ans a cui assegna il valore richiesto (in questo caso pi greco) Es. 2: >> help DCT Discrete cosine transform. Y = DCT(X) returns the discrete cosine transform of X. The vector Y is the same size as X and contains the discrete cosine transform coefficients. Y = DCT(X, N) pads or truncates the vector X to length N before transforming. If X is a matrix, the DCT operation is applied to each column. This transform can be inverted using IDCT. See also fft, idct. Reference page in Help browser doc dct Trasmissioni Numeriche - Introduzione a Matlab
Grandezze Scalari Esempi di comandi >> 13*9 ans = 117 >> sqrt(167) La variabile ans viene utilizzata da MATLAB per la memorizzazione il risultato più recente non assegnato ad altre variabili ans = 12. 9228 >> sin(pi/6) ans = 0. 5000 >> i ans = 0 + 1. 0000 i i e j se non assegnate rappresentano l’unità immaginaria Trasmissioni Numeriche - Introduzione a Matlab
Assegnazione variabili Esempi di assegnazione scalari e vettori/matrici >> x=5. 5 >> b=[1 ; 2 ; 3 ; 4 ; 5 ; 6] x = b = 5. 5000 1 2 3 4 5 6 >> y=x^2 y = 30. 2500 >> A = [1 2 3; 4 5 6; 7 8 9] >> z=y-x A = z = 1 4 7 24. 7500 2 5 8 3 6 9 >> a=[1 2 3 4 5 6] >> a = 1 2 3 4 5 6 Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili Operazioni fondamentali >>B 1 2 4 5 7 8 Si può utilizzare il tasto ENTER anche se l’espressione non è ancora completa, ma MATLAB non la esegue fino al suo completamento = [ 3 6 9] B = 1 4 7 2 5 8 >> isequal(A, B) ans = 3 6 9 Funzione Booleana: restituisce 1 se le variabili sono uguali, 0 in caso contrario 1 Restituisce le dimensioni della matrice, nell’ordine di righe e colonne >> size(A) ans = 3 3 Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili Operazioni fondamentali Ordine: prima righe, poi colonne >> A(2, 3) ans = 6 Il carattere : viene utilizzato per indicare un intero intervallo (tutte le righe in questo caso) >> A(: , 2) ans = 2 5 8 Matrice Trasposta >> A' ans = 1 2 3 4 5 6 7 8 9 >> Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili Operazioni fondamentali Matrice Inversa; può restituire errore nel caso di matrici singolari o quasi singolari >> inv(A) ans = 1. 0 e+016 * 0. 3152 -0. 6304 1. 2609 -0. 6304 0. 3152 Prodotto Righe per Colonne tra due matrici >> A*B ans = 30 66 102 36 81 126 42 96 150 >> A. *B ans = 1 16 49 4 25 64 9 36 81 Prodotto Puntuale: si ottiene premettendo il carattere. all’operazione da realizzare. L’operazione viene effettuata elemento per elemento Trasmissioni Numeriche - Introduzione a Matlab
Operazioni sulle Variabili Operazioni fondamentali >> A^2 >> C = [1 2 3; 4 5 6] ans = C = 30 66 102 36 81 126 42 96 150 1 4 2 5 3 6 >> C^2 ? ? ? Error using ==> mpower Matrix must be square. >> A. ^2 ans = >> C. ^2 1 16 49 4 25 64 9 36 81 Esempio di operazione di potenza su una matrice. L’operazione può essere fatta direttamente solo nel caso di matrici quadrate Utilizzando l’operatore puntuale si ottiene l’operazione elemento per elemento ans = 1 16 >> 4 25 9 36 >> Trasmissioni Numeriche - Introduzione a Matlab
Vettori e Matrici In MATLAB è importante ricordare che tutti i vettori sono indicizzati partendo da 1. x(1) Nel caso di sequenze con riferimento temporale assoluto sarà necessario prevedere un secondo riferimento dei tempi. Es. : x(n) = sin(n /2)[u 1 (n+10)-u 1(n-11)] >> nx = -10: 10; >> x = sin(pi/2*nx) x = Columns 1 through 11 -0. 0000 -1. 0000 0. 0000 1. 0000 … Trasmissioni Numeriche - Introduzione a Matlab
Notazione a colonna Il carattere : indica un ciclo implicito, usato per creare vettori: >> x=1: 5 x = 1 2 3 4 5 >> Si può introdurre anche un incremento non intero: >> x=1: . 1: 2 x = 1. 0000 1. 1000 1. 9000 2. 0000 1. 2000 1. 3000 1. 4000 1. 5000 1. 6000 1. 7000 1. 8000 Es. : Visualizzare la funzione x(n) = sin(n /2)[u 1 (n+10)-u 1(n 11)] Trasmissioni Numeriche - Introduzione a Matlab
Matrici Per inserire matrici, si usano parentesi quadre: >> a=[2, 3; 1, 2] a = 2 1 3 2 >> Non e’ necessario dimensionare la matrice: la memoria richiesta e’ allocata automaticamente. Per evitare la visualizzazione automatica della risposta è necessario terminare il comando con un ; >> a=[2, 3; 1, 2]; >> non produce nessun output. Trasmissioni Numeriche - Introduzione a Matlab
Matrici E’ possibile costruire matrici automaticamente: >> a=zeros(2) a = 0 0 >> mentre: >> a=zeros(2, 3) a = 0 0 0 >> Funzioni di Matlab (come zeros) accettano un numero variabile di elementi in input. • ones (genera matrici di 1) • rand (genera matrici di numeri casuali) • eye (genera le matrici identità) Trasmissioni Numeriche - Introduzione a Matlab
Operazioni su vettori Matlab esegue automaticamente le operazioni algebriche sulle matrici: >> a=ones(2, 3); >> b=ones(2, 3); >> a+b ans = 2 2 2 >> o anche: >> a=2*eye(2) a = 2 0 0 2 >> Trasmissioni Numeriche - Introduzione a Matlab
Funzioni di matrici >> a=zeros(1, 2) a = 0 0 >> b=cos(a) b = 1 1 >> Per calcolare una potenza invece devo agire sulle singole componenti. Questo si ottiene con l’operatore. (punto): >> x=[-1, 2]; >> x^2 ? ? ? Error using ==> mpower Matrix must be square. >> x. ^2 ans = 1 4 Trasmissioni Numeriche - Introduzione a Matlab
Funzioni di matrici Per manipolare l’orientamento delle matrici si possono utilizzare le funzioni: >> flipud(A) ans = 7 4 1 8 5 2 9 6 3 >> fliplr(A) ans = 3 6 9 2 5 8 1 4 7 >> rot 90(A) ans = 3 2 1 6 5 4 9 8 7 Trasmissioni Numeriche - Introduzione a Matlab
Operatori relazionali Sono utilizzabili in MATLAB i seguenti operatori relazionali • == : uguale • ~= : diverso da • < : minore di • <= : minore o uguale Esempio: >> x = 2; >> x == 0 >> x == 2 ans = 1 0 >> x ~= 3 ans = 1 Trasmissioni Numeriche - Introduzione a Matlab
Operatori relazionali Possono essere applicati anche alle matrici: >> a=[1 2; 0 -1]; >> a > 0 ans = 1 0 >> a >= 0 1 0 ans = 1 1 1 0 >> Trasmissioni Numeriche - Introduzione a Matlab
Cicli IF Il ciclo basato su if ha la struttura: if expression statements end L’utilizzo di elseif necessita la seguente struttura if expression 1 statements 1 elseif expression 2 statements 2 else statements 3 end Es. : if ((attendance >= 0. 90) && ( grade_average >= 60)) pass = 1; end; Trasmissioni Numeriche - Introduzione a Matlab
Cicli FOR Il ciclo for ha la struttura: for variable = expression statements end Di solito espressione è un vettore: >> s=0; >> for i=1: 10 s=s+i; end >> s s = 55 >> calcola la somma dei primi 10 numeri interi Trasmissioni Numeriche - Introduzione a Matlab
Cicli annidati I cicli for possono essere uno dentro l’altro. Es. : >> n=4; >> for i=1: n for j=1: i a(i, j) = 1; end crea una matrice triangolare inferiore: >> a a = 1 0 0 1 1 1 1 0 0 0 1 Es. : >> a = zeros(k, k) % Preallocate matrix for m = 1: k for n = 1: k a(m, n) = 1/(m+n -1); end >> a a = 1. 0000 0. 5000 0. 3333 0. 2500 0. 2000 Trasmissioni Numeriche - Introduzione a Matlab
Cicli annidati L’utilizzo dei cicli for, applicato su Matrici in MATLAB, è particolarmente pesante per l’elaborazione. Esempio: utilizzo della funzione tic toc >> tic; for i = 1: 10ˆ6, sin(i); end; toc; Elapsed time is … seconds. >> tic; i=1: 10ˆ6; sin(i); toc; Elapsed time is … seconds. Trasmissioni Numeriche - Introduzione a Matlab
Cicli WHILE … END Il ciclo while ha la seguente struttura while expression statements end Esempio >> i=1; >> while i<5 i=i+1; end >> i i = 5 Es. : >> eps = 1; while (1+eps) > 1 eps = eps/2; end eps = eps*2 >> eps = 2. 2204 e-016 Trasmissioni Numeriche - Introduzione a Matlab
M-files Un file. m è un programma riconoscibile da Matlab. La scrittura di files. m permette di: • testare un algoritmo • ottenere una documentazione del lavoro svolto • riutilizzo dei programmi cambiando solo i dati • distribuzione del codice Trasmissioni Numeriche - Introduzione a Matlab
Scripts - Functions Una funzione MATLAB è una parola di codice che accetta in ingresso diversi parametri, e restituisce degli output dopo un’elaborazione • Scripts M-files: sono files di comandi. Non hanno variabili in entrata e in uscita e operano sulle variabili del workspace • Function M-files: sono files di comandi, che hanno argomenti in entrata e in uscita. Le variabili interne a questi programmi non influenzano le variabili del workspace Non assegnare a nessuno script o funzione il nome di funzioni predefinite o il nome di una variabile usata!!! Trasmissioni Numeriche - Introduzione a Matlab
Esempio % Script di esempio TSES_01_script. m % Disegno del valore assoluto della funzione sin(2*pi*freq*t) % su mille campioni equispaziati nell’intervallo t [0, 1). Tmax = 1; % Durata samples = 1000; % Numero campioni delta = Tmax / samples; % Delta. T freq = 1; t = 0: delta: Tmax-delta; s = abs(sin(2*pi*freq*t)); % % for i = 1: samples; t(i) = (i-1) * delta; s(i) = abs(sin(2*pi*freq*t(i))); end; plot (t, s); grid on; title('ABS(Sin)'); xlabel('Tempo (Sec. )'); ylabel('Ampiezza'); Trasmissioni Numeriche - Introduzione a Matlab
Funzioni Funzione: si crea come uno script – ma concettualmente molto diversa!!! Il file contenente la funzione DEVE avere estensione. m e DEVE avere lo stesso nome della funzione La funzione puo’ ricevere e restituire dei risultati. Il passaggio dei parametri avviene per valore IMPORTANTE: le variabili definite all’interno della funzione hanno visibilita’ locale e NON possono essere riferite dalla shell Uso della dichiarazione global per l’utilizzo delle variabili nel Workspace su tutti i programmi Trasmissioni Numeriche - Introduzione a Matlab
Esempio function [xmin, xmax]=minmax(a, m, n) %MINMAX(A, M, N) calcola l'elemento minimo, XMIN, e l’elemento % massimo, XMAX della matrice A con M righe ed N colonne %xmin=-Inf; xmax=Inf; for i=1: m for j=1: n if a(i, j) > xmax = a(i, j); end if a(i, j) < xmin = a(i, j); end end • Dove si trova l’errore nella funzione? • Come si può migliorarla passando solamente la matrice a? Trasmissioni Numeriche - Introduzione a Matlab
Dichiarazione di una funzione function [out 1, out 2, …]=funz(in 1, in 2, …. ) • Gli argomenti in output vanno a sinistra dell’ =, fra [ ] • Gli argomenti in input vanno a destra dell’ = , fra ( ) • Posso usare un numero di argomenti minore di quello indicato nella definizione della function, sia in entrata che in uscita. • Es. : a=funz(b), assegna a “in 1” il valore “b”, e ad “a” il valore “out 1” Trasmissioni Numeriche - Introduzione a Matlab
Grafici Per ottenere un grafico si devono effettuare i seguenti passi: 1. Preparare un vettore di ascisse 2. Preparare un vettore di ordinate 3. Fare il grafico Esempio: grafico di cos(4 x)*exp(x), su [0, 2] >> x=0: 0. 01: 2; >> f=cos(4*x). *exp(x); >> plot(x, f) Il comando figure crea una nuova finestra per immagini, consentendo di visualizzare diversi comandi plot Trasmissioni Numeriche - Introduzione a Matlab
Grafico di circonferenza >> >> >> t=0: 0. 01: 2*pi; x=cos(t); y=sin(t); plot(x, y, 'g+') axis equal Trasmissioni Numeriche - Introduzione a Matlab
Grafico di Sinusoide Questo esempio utilizza l’operatore colonna per creare una vettore di x valori inclusi tra 0 e 2, e successivamente ne calcola il seno, per poi graficare il risultato. x = 0: pi/100: 2*pi; y = sin(x); plot(x, y) Lo script seguente edita gli assi della figura xlabel('x = 0: 2pi') ylabel('Sine of x') title('Plot of the Sine Function', 'Font. Size', 12) Trasmissioni Numeriche - Introduzione a Matlab
Grafici Multipli y 2 = sin(x-. 25); y 3 = sin(x-. 5); plot(x, y, x, y 2, x, y 3) legend('sin(x)', 'sin(x-. 25)', 'sin(x-. 5)') Trasmissioni Numeriche - Introduzione a Matlab
DEMO Matrici • • Grafici • • • Basic Matrix Operations Matrix Manipulation Integer Arithmetic Examples Graphs and Matrices 2 -D plots 3 -D Surface Plots Images and Matrices Viewing a Penny Quake Toolboxes Communication • Bit Error Rate Analysis Tool (utilizzo di Simulink) • Eye Diagram and Scatter Plot Signal Processing • Modulation/Demodulation Trasmissioni Numeriche - Introduzione a Matlab
Simulink è un pacchetto software di MATLAB che fornisce le funzionalità necessarie per: • la modellizzazione • la simulazione • l’analisi dei sistemi dinamici E’ in grado di supportare: • sistemi lineari e non lineari • sistemi tempo discreto, tempo continuo o ibridi. I modelli necessari per le simulazioni sono realizzabili utilizzando i blocchi funzionali forniti da MATLAB, che sono anche modificabili per le esigenze degli utenti. Trasmissioni Numeriche - Introduzione a Matlab
Consigli fondamentali 1. Nella moltiplicazione di due matrici che rappresentano una immagine, fare attenzione a scrivere. * invece che *, dato che quest’ultimo sarebbe interpretato come moltiplicazione righe per colonne 2. Ricordarsi di inserire il carattere ; al termine di un comando, specialmente quando si lavora con immagini o video 3. Cercare di evitare il più possibile numerosi cicli for, e in special modo cicli annidati Trasmissioni Numeriche - Introduzione a Matlab
- Slides: 40