Matlab Ing. Francesco Licandro Corso Fondamenti di Telecomunicazioni A.A. 2004-2005 1
MATLAB: MATrix LABoratory Matlab Ing. Francesco Licandro - 2005 2
Interfaccia Grafica Matlab Ing. Francesco Licandro - 2005 3
Struttura dell ambiente MATLAB Command Window (o Shell) Finestra Principale Prompt >> Usata per eseguire comandi, lanciare script, etc Graphic Window Contiene l output dei comandi grafici 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 Matlab Ing. Francesco Licandro - 2005 4
MATLAB windows Matlab Ing. Francesco Licandro - 2005 5
Comandi generali On-line help help argomento : fornisce l help su argomento helpwin: help interattivo Workspace information who, whos: elenca le variabile correntemente in uso clear: rimuove tutte le variabili in uso clear x,y,z: rimuove le variabili x,y,z Directory information pwd: mostra la directory di lavoro corrente cd: cambia la directory di lavoro corrente dir: mostra il contenuto della dir. di lavoro corrente ls: ---- come dir ----- Matlab Ing. Francesco Licandro - 2005 6
Operazioni su scalari >> 13*9 ans = 117 >> sqrt(167) ans = 12.9228 >> sin(pi/6) ans = 0.5000 NOTA: pi=3.1415 i,j se non assegnate rappresentano l unita immaginaria. >> i ans = 0 + 1.0000i >> complex(real,imag); NOTA: variabile ans Contiene il risultato piu recente Matlab Ing. Francesco Licandro - 2005 7
Creazione di una matrice Elemento per elemento >>A = [1 2 3 4; 5 6 7 8]; Chiamata a funzione >>B = zeros(10,2); Che succede se si toglie il ;? Da file testo >>C = load( dati.txt ); Spazio di lavoro >>who >>whos Matlab Ing. Francesco Licandro - 2005 8
Assegnazione di variabili >> x = 5.5; >> y = x^2; >> z = y-x z = 24.7500 >> a = [1 2 3 4 5 6] a = 1 2 3 4 5 6 >> b = [1; 2; 3; 4; 5; ] b = 1 2 3 4 5 >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 Matlab Ing. Francesco Licandro - 2005 9
Arrotondamenti Domanda: come si determina la parte intera di un numero in virgola mobile? Risposta: provare i seguenti comandi di Matlab : fix, round, floor, ceil. Esempio: >>x = [-5.8, -3.2, -2.5, 0., 0.5, 2.1, 3.9] >>fixx = fix(x) >>roundx = round(x) >>floorx = floor(x) >>ceilx = ceil(x) Output: x = -5.8-3.2-2.5 0 0.5 2.1 3.9 fixx = -5-3 -2 0 0 2 3 roundx = -6-3 -3 0 1 2 4 floorx = -6-4 -3 0 0 2 3 ceilx = -5-3 -2 0 1 3 4 Matlab Ing. Francesco Licandro - 2005 10
Help di Matlab Per eseguire l help di Matlab, scriver nella shell dei comandi: >> help E possibile eseguire l help di una funzione scrivendo help nomefunzione. ad esempio: >> help inv Matlab Ing. Francesco Licandro - 2005 11
Variabili predefinite i, j pi Inf NaN sin, cos, tan, asin, acos sinh, cosh, asinh, acosh sqrt, log, log10, exp rem unità immaginaria Pigreco infinito (ad es.: 3/0) not a number (as es.: 0/0, Inf/Inf) funzioni trigonometriche (in radianti) funzioni iperboliche funzioni varie resto della divisione intera (divisione modulo) Matlab Ing. Francesco Licandro - 2005 12
Operatori elementari Trasposta >>B = A ; Determinante, rango, inversa >>B = det(a); >>C = rank(a); >>D = inv(a); Dimensione >>size (A,1) >>size (A,2) >>length(a) Matlab Ing. Francesco Licandro - 2005 13
Operatori di intervallo In cui si specifica l incremento >>1:10 >>1:2:10 >>10:-1:1 In cui si specificano gli estremi e/o il numero di elementi >>linspace(1,100,10) >>help linspace >>logspace(1,2,10) >>help logspace Matlab Ing. Francesco Licandro - 2005 14
Operatori di confronto Operatori di confronto: < minore <= minore o uguale > maggiore >= maggiore o uguale == uguale ~= diverso Operatori logici: ~ NOT & AND OR Matlab Ing. Francesco Licandro - 2005 15
Caratteri speciali I simboli possono essere creati utilizzando la combinazione del tasto ALT e il tastierino numerico. Ad esempio: per produrre il simbolo: { premere ALT + 123 (tastierino numerico) per produrre il simbolo: } premere ALT + 125 (tastierino numerico) per produrre il simbolo: premere ALT + 124 (tastierino numerico) per produrre il simbolo: ~ premere ALT + 126 (tastierino numerico) Matlab Ing. Francesco Licandro - 2005 16
Elementi e sottomatrici Come accedere a singoli elementi di una matrice: >>A(1,3) % Visualizza l elemento della prima riga e terza colonna Tecniche per definire sottomatrici: >>A(1:2,1) >>A(:,1) >>A([1 3 5],1) >>A([5 3 1],1) Matlab Ing. Francesco Licandro - 2005 17
Cancellare righe e colonne Si possono cancellare righe o colonne da una matrice utilizzando luna semplice istruzione: Esempio Per cancellare la seconda riga della matrice X: X(2,:)=[] Analogamente per cancellare una colonna: X(:,3)=[] Matlab Ing. Francesco Licandro - 2005 18
Dimensione di una matrice o vettore Domanda: come determinare il numero di righe e colonne di una matrice? Risposta: occorre utilizzare l istruzione size. Esempio: >>A = zeros(3,5) >>nrows = size(a,1); >>ncols = size(a,2); >>disp(['nrows = ',num2str(nrows),' ncols =,num2str(ncols)]); Output: A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 nrows = 3 ncols = 5 Matlab Ing. Francesco Licandro - 2005 19
Vettori, indici e tempi In MATLAB tutti I vettori sono indicizzati partendo dall indice x(1) 1 Nel caso di sequenze con riferimento temporale assoluto sarà necessario prevedere un secondo vettore dei tempi Matlab Ing. Francesco Licandro - 2005 20
Operazioni con matrici Matlab Ing. Francesco Licandro - 2005 21
Rappresentazione grafica di vettori Essenzialmente si usano tre funzioni per graficare: plot: rappr. di tipo continuo o per punti stem: rappr. a impulsi (tipica per sequenze) bar: diagramma a barre (tipico di istogrammi) Per ulteriori opzioni: >> help plot (ovvero help stem, help bar) Se invocate con un solo argomento (vettore), graficano i valori degli elementi del vettore rispetto all indice Se gli argomenti (vettori) sono due, utilizzano il primo come indice (ascissa) e il secondo per i valori (ordinata) Matlab Ing. Francesco Licandro - 2005 22
Eempio 1 Matlab Ing. Francesco Licandro - 2005 23
Gestione delle figure Di default MATLAB ridirige l output dei comandi grafici sulla figura creata piu recentemente (all inizio, Figure n.1) >> figure crea una nuova figura e vi dirige l output >> figure(n) dirige l output sulla figura N (la crea se non esiste) >> hold on sovrappone grafici sull ultima figura attivata >> subplot(r,c,i) o subplot rci suddivide la figura corrente in una matrice di sottografici a r righe e c colonne e attiva il sottografico i-esimo (contando per righe) Matlab Ing. Francesco Licandro - 2005 24
Subplot Domanda: come disegnare con Matlab quattro diagrammi in un unica finestra? Risposta: si utilizza l istruzione subplot(n,m,i) che permette di disegnare n righe ed m colonne di diagrammi puntando nella fattispecie sul diagramma i-esimo contando da sinistra a destra e dall alto in basso. Esempio: subplot(2,2,1); % 4 diagrammi (2 x 2), inizio a puntare al #1 plot(x1,y1),title diagramma 1'; subplot(2,2,2); % punto al #2 plot(x2,y2),title diagramma 2'; subplot(2,2,3); % punto al #3 plot(x3,y3),title diagramma 3'; subplot(2,2,4); % punto al #4 plot(x4,y4),title diagramma 4'; Nota: il carattere % permette di inserire dei commenti nello script Matlab Ing. Francesco Licandro - 2005 25
Marcatori stile-colore E possibile specificare, colore, stile della linea e marcatori, attraverso il seguente comando: plot(x,y, marcatore-stile ) dove marcatore-stile rappresenta la sequenza di 1, 2 o 3 caratteri che indicano rispettivamente: Colore Stile linea marcatore Matlab Ing. Francesco Licandro - 2005 26
Stili e marcatori - Tipi di colore: c, m, y, r, g, b, w, k - Stile linea: - linea continua - - linea tratteggiata : linea a punti -. liena tratti e punti none senza linea - tipi di marcatore: +, o, *, ^, x Esempio: plot(x,y, y:+ ) Traccia una linea in giallo a puntini e pone un marcatore + a ciascun dato Matlab Ing. Francesco Licandro - 2005 27
Esercizio 1 Matlab Ing. Francesco Licandro - 2005 28
Esercizio 2 Matlab Ing. Francesco Licandro - 2005 29
Esercizio Problema: Costruire una matrice A (10000x1) i cui elementi sono tutti uguali e pari al contenuto della variabile b (1x1). Soluzione: >>b = 3; >>A = ones(10000,1)*b; Matlab Ing. Francesco Licandro - 2005 30
Simboli e caratteri speciali Lettere greche minuscole Lettere greche maiuscole Simboli matematici Matlab Ing. Francesco Licandro - 2005 31
Esempio di caratteri speciali Domanda: come si fa a mostrare i caratteri speciali nelle scritte (ad esempio titolo ed assi di un diagramma)? Risposta: si utilizzano i caratteri speciali TeX che premettono un carattere di backslash Esempio: >>plot(xf,yf, r-') >>title('funzione \alpha ); % lettera greca alfa Matlab Ing. Francesco Licandro - 2005 32
Assegnazione stringhe Domanda: esiste un modo per memorizzare una informazione in una variabile di tipo stringa? Risposta: Sì. È molto semplice. Basta assegnare la stringa alfanumerica tra virgolette semplici ad una nuova variabile. Esempio: >>unastringa = Soluzione non accettabile ; >>messaggio = Il programma abortisce per una grave errore. ; >>disp(unastringa); >>disp(messaggio); Matlab Ing. Francesco Licandro - 2005 33
Matrici sparse >>[i,j,s]=find(a) Trova elementi non nulli in A Matrice sparsa: con molti elementi nulli. Può essere memorizzata in modo più parsimonioso semplicemente elencando gli elementi non nulli Da matrice completa a matrice sparsa: >>[i,j,s] = find(a),s = sparse(i,j,s) >>S = sparse(a) Da matrice sparsa a matrice completa: >>A = full(s) Matlab Ing. Francesco Licandro - 2005 34
Soluzione di sistemi di lineari Problema: Soluzione di un sistema lineare Ax = b MATLAB: x = A/b Matlab Ing. Francesco Licandro - 2005 35
I/O data file ASCII dlmread dlmwrite Con carattere delimitatore csvread csvwrite Valori separati da virgola wk1read wk1write Lotus 1,2,3 (WK1) Worksheet load save File ASCII generici xlsread xlsread Excel (XLS) file. Matlab Ing. Francesco Licandro - 2005 36
Comandi I/O a basso livello per file ASCII fopen Apre un file fscanf Legge dati formattati da un file fprintf Scrive dati formattati su un file fgetl Legge linea da file, scartando il carattere newline ftell Ritorna la posizione corrente fseek Specifica la posizione corrente fclose Chiude un file Matlab Ing. Francesco Licandro - 2005 37
Esempio: lettura file ASCII fid = fopen(filen,'r'); h.date = fscanf(fid,'%s\n',1); h.tgsize = fscanf(fid,'%f\n',1); h.tgampl = fscanf(fid,'%f\n',1); h.trials = fscanf(fid,'%d\n',1); h.targets = fscanf(fid,'%d\n',1); h.tgvisible = fscanf(fid,'%s\n',1); h.handvisible = fscanf (fid,'%s\n',1); h.l = fscanf(fid,'%f\n',2); h.distances = fscanf(fid,'%f\n',4); fclose(fid); Matlab Ing. Francesco Licandro - 2005 38
File binari in formato MAT MAT è un formato binario MATLAB indipendente dalla piattaforma, usato per memorizzare una o più variabili dello Workspace save <nome file> < variabile> Salva file in formato MAT load <nome file> Legge file in formato MAT Matlab Ing. Francesco Licandro - 2005 39
Comandi di I/O a basso livello per file binari fopen Apre un file fread Legge da file binario fwrite Scrive file binario fseek Specifica indicatore di posizione ftell Ritorna la posizione corrente fclose Chiude file Matlab Ing. Francesco Licandro - 2005 40
Esempio: lettura di file binari fid = fopen(fname,'r','b'); data = fread(fid,inf,'float32'); data= reshape(data,3,length(data)/3)'; fclose(fid); Matlab Ing. Francesco Licandro - 2005 41
Script File File contenente una sequenza di comandi MATLAB, interpretati dalla shell come se fossero digitati manualmente Tipicamente viene salvato con estensione.m Uno script viene eseguito digitando al prompt della shell il nome dello script stesso NON assegnare a nessuno script il nome di funzioni predefinite o il nome di una variabile usata!!! IMPORTANTE: le variabili definite all interno dello script hanno visibilita globale e possono essere riferite dalla shell Matlab Ing. Francesco Licandro - 2005 42
Strutture di controllo di flusso MATLAB ha cinque strutture di controllo di flusso: If Switch For While break Matlab Ing. Francesco Licandro - 2005 43
Struttura if La struttura if valuta un espressione logica ed esegue un gruppo di asserzioni quando l espressione è vera. La parola end termina il gruppo di asserzioni. Esempio If A > B Greater elseif A < B less elseif A==B equal else error( Unexpected situation ) end Matlab Ing. Francesco Licandro - 2005 44
Struttura Switch e case La struttura switch esegue gruppi di asserzioni sul valore di una variabile o espressione. La keywords case o otherwhise delimita i gruppi Esempio switch lower(method) case {'linear','bilinear'} disp('method is linear') case 'cubic' disp('method is cubic') case 'nearest' disp('method is nearest') otherwise disp('unknown method.') end Matlab Ing. Francesco Licandro - 2005 45
Struttura for Il loop for ripete un gruppo di istruzioni un numero fisso di volte. Un end termina le asserzioni. Esempio for I = 1:N, end for J = 1:N, A(I,J) = 1/(I+J-1); end Matlab Ing. Francesco Licandro - 2005 46
Struttura while Il ciclo while ripete un gruppo di asserzioni un numero indefinito di volte attraverso il controllo di una variabile. Un end delinea le asserzioni Esempio E = 0*A; F = E + eye(size(e)); N = 1; while norm(e+f-e,1) > 0, E = E + F; F = A*F/N; N = N + 1; end Matlab Ing. Francesco Licandro - 2005 47
Comando break L asserzione break lascia che si esca da un loop for o while anche se non è verificata l espressione del loop. Esempio E = 0*A; F = E + eye(size(e)); N = 1; while norm(e+f-e,1) > 0, E = E + F; F = A*F/N; N = N + 1; if N >= 5 N maggiore di 5 break end end Matlab Ing. Francesco Licandro - 2005 48
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 può ricevere e restituire dei risultati. I passaggi di parametri avvengono per valore IMPORTANTE: le variabili definite all interno della funzione hanno visibilità locale e NON possono essere riferite dalla shell Matlab Ing. Francesco Licandro - 2005 49
Bibliografia http://www.eece.maine.edu/mm/matweb.html http://spicerack.sr.unh.edu/~mathadm/tutorial/software/matlab/ http://www.engin.umich.edu/group/ctm/basic/basic.html http://www.mines.utah.edu/gg_computer_seminar/matlab/matlab.html http://www.math.ufl.edu/help/matlab-tutorial/ http://www.indiana.edu/~statmath/math/matlab/ Matlab Ing. Francesco Licandro - 2005 50