Manipolazione di array flipud rigira l array dalla prima all ultima riga (up down) fliplr rigira l array dalla prima all ultima colonna (left- right) rot90 ruota l array di 90 gradi in direzione oraria reshape cambia la dimensione dell array mantenendo il numero degli elementi. Y= RESHAPE(X,M,N) returns the M-by-N matrix whose elements are taken columnwise from X. An error results if X does not have M*N elements. N.B. Il numero di elementi del risultato deve essere uguale al numero di elementi dell array di partenza. MATLAB parte II C. Guerrini 21 Funzioni matematiche elementari Funzioni esponenziali: exp log log10 log2 pow2 Realsqrt, sqrt Funzioni complesse: abs, angle, complex, conj, imag, real Funzioni dell'algebra lineare det determinante di una matrice rank rango di una matrice eig autovalori di una matrice inv inversa di una matrice max(x),min(x)elemento massimo o minimo di un vettore x. Per una matrice massimo su riga o colonna mean(x) valor medio degli elementi di x sum(x) somma degli elementi di x prod(x) prodotto degli elementi di x MATLAB parte II C. Guerrini 22 1
asb(x) valore assoluto di x sqrt(x) radice quadrata di x round(x) arrotonda all intero più vicino fix(x) tronca all intero più vicino allo 0 floor(x) arrotonda all intero più vicino verso infinito ceil(x) arrotonda all intero più vicino verso +infinito sign(x) segno di x rem(x,y) resto di x/y help elfun Funzioni trigonometriche: sin, sinh cos, cosh tan, tanh sec, sech csc, csch cot, coth Operatori relazionali fra array (II) Possono essere utilizzati per confrontare due array della stessa dimensione oppure un array e uno scalare. >> X = 5; X >= [1 2 3; 4 5 6; 7 8 10] ans = 1 1 1 1 1 0 0 0 0 >> X = 5*ones(3,3); X >= [1 2 3; 4 5 6; 7 8 10] ans = 1 1 1 1 1 0 0 0 0 MATLAB parte II C. Guerrini 23 Programmazione Matlab MATLAB non è un vero e proprio linguaggio di programmazione, ma permette comunque di realizzare programmi utilizzando le classiche strutture di programmazione come i cicli, i flussi di controllo e la gestione input/output. MATLAB parte II C. Guerrini 24 2
Controllo del flusso Ciclo for i=1:10...end Ciclo while <cond>.. end Costrutto if <cond> else end Costrutto switch case end MATLAB parte II C. Guerrini 25 Ciclo FOR I cicli for si possono annidare, ma molto spesso non sono il modo piu' efficiente di programmare perchè non consentono la vettorizzazione del codice MATLAB parte II C. Guerrini 26 3
Codice scalare codice vettoriale Esempio: Calcolo exp(x) per x=0,0.1,0.2,...5 MATLAB parte II C. Guerrini 27 While MATLAB parte II C. Guerrini 28 4
While (II) MATLAB parte II C. Guerrini 29 Break - Continue L'istruzione break può essere inserita dentro un ciclo per terminare l'esecuzione. In corrispondenza dell'istruzione break, Matlab salta alla prima istruzione successiva al end del ciclo in cui compare ( for o while). L'istruzione continue può essere inserita dentro al ciclo per terminare l iterazione corrente. Quando Matlab incontra continue salta all'istruzione end (ciclo for o while) saltando le rimanenti istruzioni MATLAB parte II C. Guerrini 30 5
Struttura selezione MATLAB parte II C. Guerrini 31 If...else..end Espressione: contiene un valore logico Se = 1 vengono eseguiti i comandi sino a else Se =0 vengono eseguiti i comandi dopo l' else MATLAB parte II C. Guerrini 32 6
Se condizione1 è vera allora Se condizione 2 e' vera allora Istruzione 1 Altrimenti Istruzione 2 Altrimenti Istruzione 3 If <cond1> else if <cond2> else istruzione 1 istruzione 2 end Istruzione 3 end MATLAB parte II C. Guerrini 33 MATLAB parte II C. Guerrini 34 7
Switch..case.otherwise..end Esempio: >> method = 'Bilinear'; >> 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 lower( StRiNg ) converte la stringa in caratteri minuscoli Method is linear MATLAB parte II C. Guerrini 35 Input - Output L istruzione di ingresso permette di memorizzare un dato introdotto dall esterno (solitamente attraverso tastiera) Viene detta quindi un operazione di input Sintassi : variabile= input( testo commento ) La funzione input mostra in output sullo schermo il testo commento e attende che venga digitato un valore da assegnare alla variabile variabile Notare che il testo è inserito fra input restituisce un valore numerico, per inserire una stringa di caratteri occorre un ulteriore parametro: >> nome=input( Scrivi il tuo nome, s ) MATLAB parte II C. Guerrini 36 8
MATLAB parte II C. Guerrini 37 OUTPUT Una funzione di output utilizzata in Matlab e la funzione disp Sintassi: disp( testo ); mostra sullo schermo il testo testo Sintassi: disp(x) mostra sullo schermo l array x senza stampare il nome della variabile disp('il mio colore preferito è il rosso') disp ha un solo argomento costituito da una stringa. Quindi se ci sono messaggi che contengono delle varibili, queste devono essere combinate in una singola stringa costruendo un unico vettore usando [ ] nome=input('scrivi il tuo nome ','s') disp( [ Il mio nome è ',nome ] ) il simbolo ; ometterlo comporta la stampa dell espressione in esame MATLAB parte II C. Guerrini 38 9
Esistono due tipi di programmi, noti come m-file : script function Per creare un m-file si seleziona New/Blank M-File dal menu File. Script e funzioni vengono quindi inseriti mediante l'editor di MATLAB. Si salva poi il file con il suffisso.m N.B. Assicurarsi di aver selezionato dalla Current Directory il percorso (path) relativo alla directory (cartella) di lavoro contenente l m-file. MATLAB parte II C. Guerrini 39 Uno SCRIPT è una lista di comandi MATLAB che può eventualmente richiamare funzioni MATLAB built-in o create utilizzando altri m-files. - Non richiede input - Non fornisce output espliciti - Tutte le variabili usate sono disponibili nel workspace - Simile ad un programma principale -.m file deve essere disponibile nel proprio path corrente N.B. Per eseguire i comandi contenuti nello script (cioè richiedere a MATLAB che il file venga interpretato) si richiama semplicemente il suo nome dalla Command Window (senza estensione.m). Esercizio: crea uno script che prende in input 4 numeri e ne calcola la media MATLAB parte II C. Guerrini 40 10
Si possono inserire commenti per rendere più comprensibile il contenuto di uno script. Essi iniziano con % e terminano con la fine della riga; se i commenti occupano più righe occorre mettere il % all inizio di ciascuna riga Sono ignorati durante l esecuzione del programma Sintassi: % parole di commento... La punteggiatura Il simbolo ; alla fine di un comando sopprime la visualizzazione dell output del comando Due o piu comandi possono essere scritti sulla stessa riga separati da, o ; MATLAB parte II C. Guerrini 41 Un m-file che contiene una funzione MATLAB si identifica nella prima riga con la parola function seguita da eventuali parametri di input e di output. Le variabili al suo interno sono viste solo localmente dalla funzione stessa e non dall'eventuale m-file chiamante o dall'ambiente MATLAB che la richiama function y = < functionname > (argomenti input) y variabile in output Quando le variabili output sono più di una, la forma precedente si modifica nel modo seguente: function [y,z] = <functionname> (argomenti input) N.B.: Il nome dell'm-file deve essere il nome dato alla funzione, eccetto chiaramente l'estensione.m MATLAB parte II C. Guerrini 42 11
MATLAB parte II C. Guerrini 43 MATLAB parte II C. Guerrini 44 12
Variabili locali Le variabili che non sono nella lista delle variabili di input e nemmeno in quella delle variabili di output sono dette variabili locali e non compaiono nello spazio di lavoro Le variabili locali vengono automaticamente cancellate dalla memoria al termine dell esecuzione Per poter utilizzare una funzione all interno di uno script, il file deve essere nella directory dello script. Uno stesso file.m può contenere più function: la function principale si trova all'inizio e dà il nome al file; seguono le function secondarie; soltanto la function principale può essere richiamata da altre function esterne al file o dal prompt Esempio: La funzione polygeom mostra l'uso di una funzione principale che richiama due funzioni secondarie per calcolare area e perimetro di un poligono regolare con numero di lati e lunghezza assegnata. MATLAB parte II C. Guerrini 45 function [a,p] = polygeom(s,n) % polygeom Compute area and perimeter of a regular polygon % Input: s = length of one side of the polygon % n = number of sides of the polygon % % Output: a = total area of the polygon % p = total perimeter of the polygon r = s/(2*tan(pi/n)); % "radius" of the polygon a = area(r,n); p = perimeter(r,n); % ============ subfunction "area" function a = area(r,n) % area Compute area of an n-sided polygon of radius r a = n*r^2*sin(pi/n); % ============ subfunction "perimeter" function p = perimeter(r,n) % perimeter Compute perimeter of an n-sided polygon of radius r p = n*2*r*tan(pi/n); Le funzioni area e perimeter non possono essere richiamate dalla command window MATLAB parte II C. Guerrini 46 13
Workspace della funzione Tutte le variabili né di input né di output della funzione sono dette locali alla funzione. Le variabili locali non sono visibili nel workspace di Matlab. Ogni funzione ha un suo workspace temporaneo creato nel momento della chiamata e distrutto quando la funzione termina l esecuzione. Le funzioni possono essere richiamate ricorsivamente, e in questo caso ogni chiamata ha un workspace separato. MATLAB parte II C. Guerrini 47 Input/output echo permette di visualizzare a video i comandi durante la loro esecuzione. pause interrompe l'esecuzione fino a quando non si digita un tasto, mentre il comando pause(n) mette in pausa l'esecuzione per n secondi. keyboard consente di inserire altri comandi da tastiera durante l'esecuzione di un m-file. Si presenta con K>> e attende l'inserimento del comando. Per riprendere la normale esecuzione dell'm-file basterà scrivere return. MATLAB parte II C. Guerrini 48 14
Function handles Function handle è un tipo Matlab che contiene tutte le indicazioni utili per eseguire una funzione. Sintassi per costruire l'handle della funzione: handle_name = @functionname E possibile eseguire una funzione utilizzando il suo handle. L handle viene utilizzato esattamente come se fosse il nome della funzione. >>f=@sin >>f(0.6*pi) ans = 0.9511 sin(0.6*pi) ans = 0.9511 MATLAB parte II C. Guerrini 49 MATLAB parte II C. Guerrini 50 15
MATLAB parte II C. Guerrini 51 MATLAB parte II C. Guerrini 52 16
Esempio IV Se la function dipende da un parametro F(x)=sqrt(1-k^2*sin^2(x)) function y=ellf(x,k) y=sqrt(1-k.^2.*sin(x).^2); >> ss=fsum1('ellf',0,pi,15,0.9) ss = 11.4430 function s=fsum1(fun,a,b,n,p1) x=linspace(a,b,n); y=feval(fun,x,p1); s=sum(y); MATLAB parte II C. Guerrini 53 MATLAB parte II C. Guerrini 54 17
MATLAB parte II C. Guerrini 55 Le seguenti funzioni Matlab offrono la possibilità di comporre una stringa che include testo ordinario e dati formattati dall utente: sprintf Write formatted data to an output string fprintf Write formatted data to an output file or the Command Window warning Display formatted data in a warning message error Display formatted data in an error message and abort assert Generate an error when a condition is violated sprintf('the price of %s on %d/%d/%d was $%.2f.',... 'bread', 7, 1, 2006, 2.49) ans = The price of bread on 7/1/2006 was $2.49. A = pi*100*ones(1,5); sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A) ans = 314.159265 % Display in fixed-point notation (%f) 314.16 % Display 2 decimal digits (%.2f) +314.16 % Display + for positive numbers (%+.2f) 314.16 % Set width to 12 characters (%12.2f) 000000314.16 % Replace leading spaces with 0 (%012.2f) MATLAB parte II C. Guerrini 56 18
Conversione da numeri a stringhe di caratteri char >>char([72 105]) ----> Hi Convert a positive integer to an equivalent character. int2str >>int2str([72 105]) 72 105 Convert a positive or negative integer to a character type. num2str Convert a numeric type to a character type of the specified precision and format. dec2bin >>dec2bin([72 105]) '1001000 1101001' Convert a positive integer to a character type of binary base. dec2base Convert a positive integer to a character type of any base from 2 through 36. Analogamente esitono function per la conversione da stringhe a numeri MATLAB parte II C. Guerrini 57 fprintf Simile alla funzione del linguaggio C Sintassi: fprintf(formato) count=fprintf(formato,variabili) fprintf( Attenzione: x è negativa \n ) fprintf( %s ha %d anni\n,nome,anni) Caratteri di conversione: %d notazione decimale per interi con segno %i notazione decimale per interi %f floating poit per reali %e notazione esponenziale per i reali E possibile specificare la lunghezza del campo e per variabili numeriche il numero di decimali: fprintf( %f\n,sqrt(2)), fprintf( %e\n,sqrt(2)), fprintf( %8.4f\n,sqrt(2)), fprintf( %12.3g\n,sqrt(2)) MATLAB parte II C. Guerrini 58 19
Sintassi count = fprintf(fid, format, A,...) MATLAB parte II C. Guerrini 59 MATLAB parte II C. Guerrini 60 20
MATLAB parte II C. Guerrini 61 >> B = [8.8 7.7; 8800 7700] >> fprintf( 'X is %6.2f meters or %8.3f mm\n', 9.9, 9900, B) X is 9.90 meters or 9900.000 mm X is 8.80 meters or 8800.000 mm X is 7.70 meters or 7700.000 mm MATLAB parte II C. Guerrini 62 21
MATLAB parte II C. Guerrini 63 MATLAB parte II C. Guerrini 64 22
MATLAB parte II C. Guerrini 65 Grafici Esistono molte funzioni per creare grafici in MATLAB. Per esplorarne alcune >>help graph2d >>help graph3d MATLAB parte II C. Guerrini 66 23
Alcune funzioni utilizzate per creare grafici plot plot x-y lineare loglog plot log-log x-y semilogx semi-log x-y plot(logaritmico in x) semilogy semi-log x-y plot (logaritmico in y) polar plot in coordinate polari mesh mesh di superficie 3D contour plot a linee di livello bar plot a barre stairs plot a gradini. MATLAB parte II C. Guerrini 67 Creare Grafici Creazione vettori necessari per preparare il grafico notazione : Operazione elemento per elemento >> x = - 4:.1:4; >> y = x.^4-10*x.^2+3; >>plot(x,y) >>xlabel( vlori di x ) >>ylabel( valori di y ) >>title( TITOLO ) >>text(0,10, scritto sul grafico ) Uso standard della funzione plot annotazioni sulla figura MATLAB parte II C. Guerrini 68 24
Pulsanti per modificare il grafico Il default è Figure 1 e linea blu sottile scritta sul grafico MATLAB parte II C. Guerrini 69 Creare Grafici in MATLAB plot(x,y, ) Simbolo Colore. Point b blue o circle Tipo di linea g g reen x x-mark - solida r red + plus : dot c cyan s square m magenta -- dashed d diamond Y yellow -. dash dot v triangle(down) k black ^ triangle(up) w white < trianggle(left) > triangle(right) p pentagram MATLAB parte II C. Guerrini 70 25
plot(x,y, m:d ) magenta punteggiato diamonds MATLAB parte II C. Guerrini 71 Plot(x,y,, value ) Proprietà linewidth markersize markeredgecolor markerfacecolor plot(x,y, linewidth,5) Spessore della linea 5 punti Valore dipende dalla proprietà in punti o colore MATLAB parte II C. Guerrini 72 26
>> plot(x,y,'-ko','linewidt',3,'markersize',6,... 'MarkerEdgeColor','red','MarkerFaceColor','green') MATLAB parte II C. Guerrini 73 MATLAB parte II C. Guerrini 74 27
MATLAB parte II C. Guerrini 75 MATLAB parte II C. Guerrini 76 28
Comandi utili figure crea una nuova finestra figure(n) crea la finestra n o si posiziona sulla finestra n ginput(1) crea un mirino sulla figura [s,t]=ginput(1) restituisce la posizione (s,t) al click del mouse ginput(n) restituisce n coppie di coordinate sul grafico gtext( stringa ) posiziona la stringa sulla figura con il mouse legend( string1, string2,, stringn,loc) pone una legenda sul grafico utilizzando come label le stringhe specificate, loc serve se si vuole posizionare la legenda in una punto preciso ( north,south, west, est ) MATLAB parte II C. Guerrini 77 MATLAB parte II C. Guerrini 78 29
MATLAB parte II C. Guerrini 79 MATLAB parte II C. Guerrini 80 30
MATLAB parte II C. Guerrini 81 >> x=linspace(0,pi); >> y1=sin(4*x)-1/2; >> y2=cos(3*x); >> plot(x,y1,x,y2) >> legend('sin(4*x)- 1/2','cos(3*x)') >> gtext('\alpha \beta x^2') Posso inserire simboli dell alfabeto greco MATLAB parte II C. Guerrini 82 31
>>gtext( cosine, fontsize,20, rotation,45, color, red ) ruotiamo il testo inserito nel grafico di 45 gradi Possimao aggiungere una griglia ( grid) Modificare i limiti degli assi axis([xmin,xmax,ymin,ymax]) MATLAB parte II C. Guerrini 83 Per caricare una figura occorre salvarla in formato fig File/Save As/<figure1.fig> Per stamparla o includerla in documenti (latex, word ) occorre salvarla in formato.jpg, eps.. File/Save As/<figure1.eps> MATLAB parte II C. Guerrini 84 32
MATLAB parte II C. Guerrini 85 MATLAB parte II C. Guerrini 86 33
MATLAB parte II C. Guerrini 87 MATLAB parte II C. Guerrini 88 34
Grafici 2D in coordinate polari POLAR(THETA, RHO) makes a plot using polar coordinates of the angle THETA, in radians, versus the radius RHO. POLAR(THETA,RHO,S) uses the linestyle specified in string S. >>x=1:100; >>polar(x/10,log10(x)) >>t=0:0.1:2*pi >>polar(t,sin(2*t).*cos(2*t) MATLAB parte II C. Guerrini 89 >> x = -4:0.1:4; >> y = randn(10000,1); >> hist(y,x) MATLAB parte II C. Guerrini 90 35
MATLAB parte II C. Guerrini 91 MATLAB parte II C. Guerrini 92 36
MATLAB parte II C. Guerrini 93 37