37
1 MATLAB parte II C. Guerrini 21 Manipolazione di array flipud rigira” l’array dalla prima all’ultima riga (updown) 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 22 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

Manipolazione di array - Dipartimento di Matematica MATLAB parte II C. Guerrini 25 Controllo del flusso • Ciclo for i=1:10…...end • Ciclo while ….. end • Costrutto

  • 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

12

MATLAB parte II C. Guerrini 43

MATLAB parte II C. Guerrini 44

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

16

MATLAB parte II C. Guerrini 51

MATLAB parte II C. Guerrini 52

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

22

MATLAB parte II C. Guerrini 63

MATLAB parte II C. Guerrini 64

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

28

MATLAB parte II C. Guerrini 75

MATLAB parte II C. Guerrini 76

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

30

MATLAB parte II C. Guerrini 79

MATLAB parte II C. Guerrini 80

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>

33

MATLAB parte II C. Guerrini 85

MATLAB parte II C. Guerrini 86

34

MATLAB parte II C. Guerrini 87

MATLAB parte II C. Guerrini 88

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)

36

MATLAB parte II C. Guerrini 91

MATLAB parte II C. Guerrini 92

37

MATLAB parte II C. Guerrini 93