Upload
lydiep
View
213
Download
0
Embed Size (px)
Citation preview
1
MATLAB parte II C. Guerrini 21
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 numerodegli elementi.
Y= RESHAPE(X,M,N) returns the M-by-N matrix whose elements aretaken 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 numerodi elementi dell’array di partenza.
MATLAB parte II C. Guerrini 22
Funzioni matematiche elementari
Funzioni esponenziali:exp log log10 log2pow2Realsqrt, sqrtFunzioni complesse:abs, angle, complex, conj, imag, real
Funzioni dell'algebra linearedet 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 unamatrice 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
2
MATLAB parte II C. Guerrini 23
• help elfunFunzioni
trigonometriche :sin, sinhcos, coshtan, tanhsec, sechcsc, cschcot, coth
Operatori relazionali fra array (II)Possono essere utilizzati per confrontare due array della stessadimensione oppure un array e uno scalare.>> X = 5; X >= [1 2 3; 4 5 6; 7 8 10]ans =1 1 11 1 00 0 0>> X = 5*ones(3,3); X >= [1 2 3; 4 5 6; 7 8 10]ans =1 1 11 1 00 0 0
• asb(x) valoreassoluto di x• sqrt(x) radicequadrata di x• round(x) arrotondaall’intero più vicino• fix(x) troncaall’intero più vicinoallo 0• floor(x) arrotondaall’intero più vicinoverso – infinito• ceil(x) arrotondaall’intero più vicinoverso +infinito• sign(x) segno di x• rem(x,y) resto di x/y
MATLAB parte II C. Guerrini 24
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.
3
MATLAB parte II C. Guerrini 25
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 26
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
4
MATLAB parte II C. Guerrini 27
Codice scalare � codice vettoriale
• Esempio: Calcolo exp(x) per x=0,0.1,0.2,.......5
MATLAB parte II C. Guerrini 28
While
5
MATLAB parte II C. Guerrini 29
While (II)
MATLAB parte II C. Guerrini 30
Break - Continue• L'istruzione break può essere inserita dentro un ciclo per
terminare l'esecuzione. In corrispondenza dell'istruzionebreak, 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
6
MATLAB parte II C. Guerrini 31
Struttura selezione
MATLAB parte II C. Guerrini 32
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”
7
MATLAB parte II C. Guerrini 33
Se condizione1 è vera alloraSe condizione 2 e' vera allora
Istruzione 1Altrimenti
Istruzione 2Altrimenti
Istruzione 3
If <cond1>
if <cond2>
istruzione 1
else
istruzione 2
end
else
Istruzione 3
end
MATLAB parte II C. Guerrini 34
8
MATLAB parte II C. Guerrini 35
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
Method is linear
lower(‘StRiNg’)
converte la stringa in caratteri minuscoli
MATLAB parte II C. Guerrini 36
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’)
9
MATLAB parte II C. Guerrini 37
MATLAB parte II C. Guerrini 38
OUTPUT
Una funzione di output utilizzata in Matlab e’ la funzione dispSintassi: disp(‘testo’);mostra sullo schermo il testo testo•Sintassi: disp(x)mostra sullo schermo l’array x senza stampare il nome della variabiledisp('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
10
MATLAB parte II C. Guerrini 39
Esistono due tipi di programmi, noti come “m-file”:
– script– function
Per creare un m-file si seleziona New/Blank M-Filedal menu File .
Script e funzioni vengono quindi inseriti mediante l'editordi MATLAB. Si salva poi il file con il suffisso.m
N.B. Assicurarsi di aver selezionato dalla Current Directory ilpercorso (path) relativo alla directory (cartella) dilavoro contenente l’m-file.
MATLAB parte II C. Guerrini 40
Uno SCRIPT è una lista di comandi MATLAB che puòeventualmente richiamare funzioni MATLAB built-in o create utilizzandoaltri 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
11
MATLAB parte II C. Guerrini 41
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 punteggiaturaIl 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 42
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 f unzione,eccetto chiaramente l'estensione .m
13
MATLAB parte II C. Guerrini 45
Variabili localiLe 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 46
function [a,p] = polyGeom(s,n)% polyGeom Compute area and perimeter of a regularpolygon% 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 polygonr = s/(2*tan(pi/n)); % "radius" of the polygona = area(r,n);p = perimeter(r,n);% ============ subfunction "area"function a = area(r,n)% area Compute area of an n-sided polygon of radius ra = n*r^2*sin(pi/n);% ============ subfunction "perimeter"function p = perimeter(r,n)% perimeter Compute perimeter of an n-sided polygon ofradius rp = n*2*r*tan(pi/n);
Le funzioni area e perimeternon possono essere richiamate dalla commandwindow
14
MATLAB parte II C. Guerrini 47
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 48
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 .
15
MATLAB parte II C. Guerrini 49
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 50
17
MATLAB parte II C. Guerrini 53
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);
function s=fsum1(fun,a,b,n,p1)x=linspace(a,b,n);y=feval(fun,x,p1);s=sum(y);
>> ss=fsum1('ellf',0,pi,15,0.9)ss =
11.4430
MATLAB parte II C. Guerrini 54
18
MATLAB parte II C. Guerrini 55
MATLAB parte II C. Guerrini 56
Le seguenti funzioni Matlab offrono la possibilità di comporre una stringache include testo ordinario e dati formattati dall’utente:
sprintf — Write formatted data to an output stringfprintf — Write formatted data to an output file or the Command Windowwarning — Display formatted data in a warning messageerror — Display formatted data in an error message and abortassert — 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)
19
MATLAB parte II C. Guerrini 57
Conversione da numeri a stringhe di caratteri
char >>char([72 105]) ----> HiConvert a positive integer to an equivalent character.
int2str >>int2str([72 105]) � ’72 105’Convert a positive or negative integer to a character type.
num2strConvert 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 58
fprintfSimile alla funzione del linguaggio CSintassi:
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 pe r 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))
20
MATLAB parte II C. Guerrini 59
Sintassi
count = fprintf(fid, format, A, ...)
MATLAB parte II C. Guerrini 60
21
MATLAB parte II C. Guerrini 61
MATLAB parte II C. Guerrini 62
>> 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 mmX is 8.80 meters or 8800.000 mmX is 7.70 meters or 7700.000 mm
23
MATLAB parte II C. Guerrini 65
MATLAB parte II C. Guerrini 66
Esistono molte funzioni per creare grafici in MATLAB.• Per esplorarne alcune
>>help graph2d
>>help graph3d
Grafici
24
MATLAB parte II C. Guerrini 67
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 68
Creare Grafici
Creazione vettori necessari per preparare il grafico notazione :
>> 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’)
Operazione elemento per elemento
Uso standard della funzione plot
annotazioni sulla figura
25
MATLAB parte II C. Guerrini 69
Il default èFigure 1
e linea blu sottile
Pulsanti per modificare il grafico
scritta sul grafico
MATLAB parte II C. Guerrini 70
Creare Grafici in MATLAB
Colore
b blue
g g reen
r red
c cyan
m magenta
Y yellow
k black
w white
Simbolo
. Point
o circle
x x-mark
+ plus
s square
d diamond
v triangle(down)
^ triangle(up)
< trianggle(left)
> triangle(right)
p pentagram
Tipo di linea
- solida
: dot
-- dashed
-. dash dot
plot(x,y,’ ‘ )
26
MATLAB parte II C. Guerrini 71
plot(x,y,’m:d’)
magenta
punteggiato
diamonds
MATLAB parte II C. Guerrini 72
Plot(x,y, ‘ ‘, value )
Proprietà
linewidth
markersize
markeredgecolor
markerfacecolor
Valore
dipende dalla proprietà
in punti o colore
plot(x,y,’linewidth’,5)
Spessore della linea 5 punti
27
MATLAB parte II C. Guerrini 73
>> plot(x,y,'-ko','LineWidt',3,'MarkerSize',6,...'MarkerEdgeColor','red','MarkerFaceColor','green')
MATLAB parte II C. Guerrini 74
29
MATLAB parte II C. Guerrini 77
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 78
31
MATLAB parte II C. Guerrini 81
MATLAB parte II C. Guerrini 82
>> 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
32
MATLAB parte II C. Guerrini 83
>>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 84
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>
35
MATLAB parte II C. Guerrini 89
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 linestylespecified 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 90
>> x = -4:0.1:4;>> y = randn(10000,1);>> hist(y,x)