matlab. vettori, funzioni matematiche e grafici

35
Matlab. Vettori, funzioni matematiche e graci. Alvise Sommariva Universit a degli Studi di Padova Dipartimento di Matematica 23 marzo 2017 Alvise Sommariva Introduzione 1/ 36

Upload: others

Post on 14-Nov-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matlab. Vettori, funzioni matematiche e grafici

Matlab. Vettori, funzioni matematiche e grafici.

Alvise Sommariva

Universita degli Studi di PadovaDipartimento di Matematica

23 marzo 2017

Alvise Sommariva Introduzione 1/ 36

Page 2: Matlab. Vettori, funzioni matematiche e grafici

Introduzione

Il proposito di questa terza lezione mostriamo

Come definire i vettori in Matlab (e alcune operazioni di base).

Come definire funzioni matematiche, senza utilizzare files”.m”.

Come eseguire il grafico di funzioni matematiche.

Alvise Sommariva Introduzione 2/ 36

Page 3: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Un vettore in Matlab lo si rappresenta tramite le sue componenti.A seconda del vettore ci sono vari modi piu o meno efficaci.Se ad esempio devo descrivere il vettore (riga)

[5, 4, 9]

cio puo essere fatto come segue

>> % VETTORE (RIGA ! ) [ 5 4 9 ]>> v=[5 4 9 ]v =

5 4 9>>

in cui tra le componenti numeriche del vettore sono interposti deglispazi vuoti.

Alvise Sommariva Introduzione 3/ 36

Page 4: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Si supponga di aver immagazzinato nella variabile v il vettore riga[5, 4, 9] e di voler aggiungere una componente, ad esempio 10,cosı da avere il vettore

[5, 4, 9, 10]

A tal proposito si procede come segue

>> % VETTORE (RIGA ! ) [ 5 4 9 ]>> v=[5 4 9 ] ;>> v=[v 10 ]v =

5 4 9 10>>

Alvise Sommariva Introduzione 4/ 36

Page 5: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Per selezionare la componente j-sima di un vettore v , si usa ilcomando v(j). Cosı se volessimo selezionare la secondacomponente del vettore v = [5, 4, 9, 10]

>> v=[5 4 9 10 ]v =

5 4 9 10>> v (2 )ans =

4>>

Un utile comando per selezionare l’ultima componente e end. Cosıad esempio

>> v=[5 4 9 1 0 ] ; v ( end )ans =

10>>

Alvise Sommariva Introduzione 5/ 36

Page 6: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Per determinare la lunghezza di un vettore, cioe il numero delle suecomponenti, si usa il comando length, come da esempio.

>> v=[5 4 9 1 0 ] ; l=l eng t h (v )l =

4>>

Nota.

Un errore comune e scrivere lenght invece di length.

Alvise Sommariva Introduzione 6/ 36

Page 7: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Se invece di un vettore riga, si vuole descrivere un vettore colonna,si procede in due modi. Nel primo caso, si scrive un vettore riga elo si traspone con il comando ”’”

Cosı, ad esempio,

>> v=[5 4 9 1 0 ] ;>> v=v ’v =

549

10>> % i l s imbo lo ’ f a l a t r a s p o s i z i o n e d e l v e t t o r e .

Alvise Sommariva Introduzione 7/ 36

Page 8: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Alternativamente lo si descrive, intervallando un ”;” tra le variecomponenti.

>> v=[5; 4 ; 9 ; 10 ]v =

549

10>> % ve t t o r e co lonna , d e s c r i t t o d i r e t t amen t e i n ques ta

forma , u t i l i z z a n d o i l ” ; ” .

Alvise Sommariva Introduzione 8/ 36

Page 9: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Per capire se un vettore e riga o colonna, e bene usare il comando”size” che ne descrive le dimensioni.

>> v=[5; 4 ; 9 ; 1 0 ] ; s i z e (v )ans =

4 1>> % Componente 1 : n . ro r i g h e . Componente 2 : ne ro

co l onne .

Quindi il vettore ha 4 righe e 1 colonna, e di conseguenza e unvettore colonna.

Alvise Sommariva Introduzione 9/ 36

Page 10: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Per vettori con componenti equispaziate, cioe del tipov = (vk)k=1,...,N , vk = v1 + k · h, con k = 1, . . . ,N, cioe

v = [v1 v1 + h, v1 + 2h, . . . , v1 + Nh]

molto utili in matematica, si possono usare due comandi speciali.

Se e nota la spaziatura h, il punto iniziale a e il punto finale b, siscrive

(a : h : b)

Ad esempio:

>> a=5; b=7; h=0.5; v=a : h : b

v =

5.0000 5 .5000 6 .0000 6 .5000 7 .0000

>>

Alvise Sommariva Introduzione 10/ 36

Page 11: Matlab. Vettori, funzioni matematiche e grafici

Matlab: operazioni con vettori

Se e invece noto il numero di punti equispaziati N, il punto inizialea e il punto finale b, si scrive

linspace(a, b, N)

Ad esempio:

>> l i n s p a c e (5 , 7 , 4 )ans =

5.0000 5 .6667 6 .3333 7 .0000>> % i pun t i sono e q u i s p a z i a t i , con s p a z i a t u r a

2/3=0.6666 . . . , punto i n i z i a l e 5 e f i n a l e 7 .

Alvise Sommariva Introduzione 11/ 36

Page 12: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Le seguenti operazioni tra due vettori dello stesso tipo (riga ocolonna) e della stessa dimensione, producono un vettore dellostesso tipo e dimensione.

>> l i n s p a c e (5 , 7 , 4 )ans =

5.0000 5 .6667 6 .3333 7 .0000>> % i pun t i sono e q u i s p a z i a t i , con s p a z i a t u r a

2/3=0.6666 . . . , punto i n i z i a l e 5 e f i n a l e 7 .

Alvise Sommariva Introduzione 12/ 36

Page 13: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Le seguenti operazioni tra due vettori dello stesso tipo (riga ocolonna) e della stessa dimensione, producono un vettore dellostesso tipo e dimensione.

+ addizione− sottrazione.∗ prodotto./ divisione.∧ potenza

Alvise Sommariva Introduzione 13/ 36

Page 14: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

>> a=[1 2 ] ; b=[5 8 ] ;>> a+bans =

6 10>> a−bans =

−4 −6>> a .* bans =

5 16>> % PRODOTTO PUNTUALE: [1*5 2*8 ]>> a . / bans =

0.2000 0 .2500>> % DIVISIONE PUNTUALE: [1/5 2/8 ]>> a . ˆ bans =

1 256>> % POTENZA PUNTUALE: [1ˆ5 2ˆ8 ]

Alvise Sommariva Introduzione 14/ 36

Page 15: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Si sottolinea che i vettori devono essere dello stesso tipo edimensione.

>> a=[2 4 ]a =

2 4>> b=[5; 7 ]b =

57

>> a+bError using +Matrix dimensions must agree .>> % NON POSSO SOMMARE VETTORI RIGA CON VETTORI COLONNA>> a=[2 4 ] ; b=[1 3 5 ] ; a+bError using +Matrix dimensions must agree .>> % NON POSSO SOMMARE VETTORI CON NUMERO DIVERSO DI

COMPONENTI

Alvise Sommariva Introduzione 15/ 36

Page 16: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Unica eccezione a quanto detto, si ha quando uno dei due vettori eun numero.

>> a=[2 4 ] ; a+1 % [2+1 4+1]ans =

3 5>> a=[2 4 ] ; 2 .* a % [2*2 2*4 ]ans =

4 8>> a=[2 4 ] ; a . ˆ2 % [2ˆ2 4ˆ2 ]ans =

4 16>> a=[2 4 ] ; 3 . ˆ a % [3ˆ2 3ˆ4 ]ans =

9 81>> a=[2 4 ] ; 8 . / a % [8/2 8/4 ]ans =

4 2

Alvise Sommariva Introduzione 16/ 36

Page 17: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Importante. Si osservi che se uno dei vettori e un numero,possiamo in alcuni casi evitare il ..

>> a=[2 4 ] ; 3*a % OK!ans =

6 12>> a=[2 4 ] ; 3/a % KO! NUMERO DIVISO VETTORE.Error using /Matrix dimensions must agree .>> a=[2 4 ] ; a/3 %OK! VETTORE DIVISO NUMERO.ans =

0.6667 1 .3333>> a=[2 4 ] ; aˆ3 % KO!Error using ˆInputs must be a scalar and a square matrix .To compute elementwise POWER , use POWER ( . ˆ ) instead .>> a=[2 4 ] ; 3ˆa % KO!Error using ˆInputs must be a scalar and a square matrix .To compute elementwise POWER , use POWER ( . ˆ ) instead .

Alvise Sommariva Introduzione 17/ 36

Page 18: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

Le seguenti operazioni tra due vettori dello stesso tipo (riga ocolonna) e della stessa dimensione, producono (puntualmente) unvettore dello stesso tipo e dimensione.

abs valore assolutosin senocos cosenotan tangentecot cotangenteasin arco senoacos arco cosenoatan arco tangentesinh seno iperbolicocosh coseno iperbolicotanh tangente iperbolicaasinh arco seno iperbolicoacosh arco coseno iperbolicoatanh arco tangente iperbolicasqrt radice quadrataexp esponenzialelog 2 logaritmo base 2log10 logaritmo base 10log logaritmo naturalefix arrotondamento verso 0round arrotondamento verso l’intero piu vicinofloor arrotondamento verso −∞ceil arrotondamento verso +∞sign segnorem resto della divisione

Alvise Sommariva Introduzione 18/ 36

Page 19: Matlab. Vettori, funzioni matematiche e grafici

Operazioni aritmetiche e funzioni elementari predefinite

>> a=[ p i p i / 2 ] ; cos (a )ans =

−1.0000 0 .0000>> % [ cos ( p i ) cos ( p i /2) ]>> b=[1 exp (1 ) ] ; l o g (b )ans =

0 1>> % [ l og (1 ) l o g ( exp (1 ) ]=[0 1 ]>> c=exp ( l o g ( [ 1 4 ] ) )c =

1 4>> % c=exp ( [ l o g (1 ) l o g (4 ) ] ) =[ exp ( l o g (1 ) ) exp ( l o g (4 ) ) ]>> s q r t ( [ 1 6 36 64 ] )ans =

4 6 8>> % [ s q r t (16) s q r t (36) s q r t (64) ]

Alvise Sommariva Introduzione 19/ 36

Page 20: Matlab. Vettori, funzioni matematiche e grafici

Definizione di funzioni matematiche

Per quanto riguarda le funzioni elementari spesso, qualoranecessario, un utente puo comporne di proprie, salvandole su file.Cosı ad esempio, puo salvare in f.m la funzione

f u n c t i o n y=f (x )y=s i n (x )+p i ;

e quindi chiamarla in altri programmi (che fanno parte della stessacartella di f.m).A volte pero la si puo definire semplicemente, senza ricorrere anuovi files, con il comando di definizione di funzione matematica @.

>> f=@ (x ) s i n (x )+p i ;>> f (0 )ans =

3.1416>> % s i n (0 )+p i

Alvise Sommariva Introduzione 20/ 36

Page 21: Matlab. Vettori, funzioni matematiche e grafici

Definizione di funzioni matematiche

Talvolta, per valutare le funzioni si usa il comando feval.Vediamone qualche esempio.

>> f=@ (x ) s i n (x )+p i ;>> f e v a l (f , 0 )ans =

3.1416>> f=@ (x ) [ s i n (x )+p i ; cos (x )+p i ] ; % f un z i o n e da R i n R

ˆ2 .>> f e v a l (f , 0 )ans =

3.14164 .1416

>>

Alvise Sommariva Introduzione 21/ 36

Page 22: Matlab. Vettori, funzioni matematiche e grafici

Definizione di funzioni matematiche

Una alternativa a @ e la definizione tramite inline (che Matlabconsidera desueta)

>> g=inline ( ’ s i n ( t )+p i ’ ) ;>> g (0 ) % g a p p l i c a t a a numeroans =

3.1416>> g ( [ 0 p i / 2 ] ) % g a p p l i c a t a a v e t t o r eans =

3.1416 4 .1416>>

Alvise Sommariva Introduzione 22/ 36

Page 23: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Per effettuare il grafico di funzioni si usa il comando plot, avente

quale primo argomento un vettore che si riferisce alle ascisse,

quale secondo argomento, un vettore dello stesso tipo edimensione del primo, che si riferirisce alle ordinate.

Nota.

Per sovrapporre piu grafici, si usano i comandi hold on e holdoff, intervallati dai plot da sovrapporre.

Per cancellare precedenti grafici, si usa il comando clf.

Alvise Sommariva Introduzione 23/ 36

Page 24: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Per capire il comando plot digitiamo su workspace

>> he l p p l o tp l o t Linear p l o t .

p l o t (X , Y ) plots vector Y versus vector X .. . . . .Various l i n e types , p l o t symbols and colors may be

obtained with p l o t (X , Y , S ) where S is a character

string made from one element from any or a l l the

following 3 columns :b blue . point − solid

g green o circle : dotted

r red x x−mark −. dashdot

c cyan + plus −− dashed

m magenta * star ( none ) no l i n ey yellow s square

k black d diamond

w wh i t e v triangle ( down )

Alvise Sommariva Introduzione 24/ 36

Page 25: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

ˆ triangle ( up )< triangle ( left )> triangle ( right )p pentagram

h hexagram

. . . . .Example

x = −p i : p i /10 : p i ;y = tan ( s i n (x ) ) − s i n ( tan (x ) ) ;p l o t (x , y , ’−−r s ’ , ’ L ineWidth ’ , 2 , . . .

’ MarkerEdgeColor ’ , ’ k ’ , . . .’ MarkerFaceCo lor ’ , ’ g ’ , . . .’ Marke rS i ze ’ , 10)

. . . . .>>

Nell’esempio vengono modificati vari pattern di grafica, cometratteggio colore o grossezza delle linee.

Alvise Sommariva Introduzione 25/ 36

Page 26: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

In virtu di quanto detto, digitiamo su workspace

>> c l f ; % c an c e l l a , s e n e c e s s a r i o , p r e c e d e n t i g r a f i c i .>> f=inline ( ’ exp ( t )−2 ’ ) ;>> x=0 :0 . 0 01 : 1 ; % v e t t o r e d i a s c i s s e .>> y=f (x ) ;>> ho ld on ; % t i e n i g r a f i c i i n f i n e s t r a ,

s o v r apponendo l i , f i n o ad ho ld o f f>> p l o t (x , y ) ; % GRAFICO f ( un i t o i p un t i d i

campionamento con s e gmen t i n i i n b l u ) .>> g=@ (x ) 0*x ;>> yy=g (x ) ;>> p l o t (x , yy , ’ r− ’ ) ; % ASSE x ( i n r o s s o ! ) .>> ho ld off ;

e otteniamo, su una finestra esterna, il grafico della funzionef (x) = ex − 2 (in blu), definita in [0, 1] (mediante campionamentiin punti sufficientemente fitti).

Alvise Sommariva Introduzione 26/ 36

Page 27: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Figura : Finestre del workspace e di plot

Alvise Sommariva Introduzione 27/ 36

Page 28: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

Figura : In blu, grafico della funzione f in [0, 1]. In rosso, l’asse delleascisse.

Alvise Sommariva Introduzione 28/ 36

Page 29: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Per salvare il grafico:

Da menu File (del plot!), si clicchi su Save as (o suetraduzioni).

Si dia un nome al file nel campo in alto Save as (o suetraduzioni).

Per cambiare il formato del file, si clicchi sul menu’ a tendinacon Format (o sue traduzioni).

Si clicchi Save (o sue traduzioni) per salvare il file stesso nelformato prescelto.

Alvise Sommariva Introduzione 29/ 36

Page 30: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Figura : Finestre del workspace e di plot

Alvise Sommariva Introduzione 30/ 36

Page 31: Matlab. Vettori, funzioni matematiche e grafici

Il comando plot

Per salvare il grafico:

Da menu File (del plot!), si clicchi su Save as (o suetraduzioni).

Si dia un nome al file nel campo in alto Save as (o suetraduzioni).

Per cambiare il formato del file, si clicchi sul menu’ a tendinacon Format (o sue traduzioni).

Si clicchi Save (o sue traduzioni) per salvare il file stesso nelformato prescelto.

Alvise Sommariva Introduzione 31/ 36

Page 32: Matlab. Vettori, funzioni matematiche e grafici

Esercizio: algoritmo di bisezione

Si supponga sia f : [a, b]→ R una funzione continua tale chef (a) · f (b) < 0.

E’ noto che per il teorema degli zeri (di Bolzano), esiste almeno unpunto x∗ tale che f (x∗) = 0.

Per approssimare x∗ utilizziamo l’algoritmo di bisezione che generauna successione di intervalli (ak ,bk) con

f (ak) · f (bk) < 0,

[ak , bk ] ⊂ [ak−1, bk−1],

|bk − ak | = 12 |bk−1 − ak−1|.

Fissate la tolleranza ε si arresta l’algoritmo quando

|bk − ak | ≤ ε.

Alvise Sommariva Introduzione 32/ 36

Page 33: Matlab. Vettori, funzioni matematiche e grafici

Metodo di bisezione

Operativamente, dati in input

la funzione f ,

i punti iniziali a, b con a ≤ b e f (a) · f (b) < 0,

la tolleranza toll,

il numero massimo di iterazioni da compiere nmax,

posto a1 = a, b1 = b, alla k-sima iterazione

calcola ck = (ak + bk)/2;

1 se f (ak) · f (ck) > 0 pone “ak+1 = ck”, “bk+1 = bk”;2 se f (ak) · f (ck) < 0 pone “ak+1 = ak”, “bk+1 = ck”;3 se f (ak) · f (ck) = 0 pone “ak+1 = ck”, “bk+1 = ck”;

termina il processo se le condizioni d’arresto sono verificate,cioe sono state svolte almeno nmax iterazioni o|bk − ak | ≤ toll.

Alvise Sommariva Introduzione 33/ 36

Page 34: Matlab. Vettori, funzioni matematiche e grafici

Metodo di bisezione: pseudo codice

Di seguito un pseudo-codice del metodo di bisezione che si arrestaquando l’ampiezza dell’ultimo intervallo e inferiore alla soglia ditolleranza.

[x, n] = Bisezione (f, a, b, toll, nmax)

n = -1

amp = toll + 1

fa = f(a)

while (amp >= toll) and (n < nmax) do

n = n + 1

amp = |b - a|

x = a + amp * 0.5

fx = f(x)

if fa * fx < 0 then

b = x

else if fa * fx > 0 then

a = x

fa = fx

else

amp = 0

end if

end while

Alvise Sommariva Introduzione 34/ 36

Page 35: Matlab. Vettori, funzioni matematiche e grafici

Esercizio: metodo di bisezione

Esercizio

Si implementi in Matlab/Octave, nel file bisezfun.m il metodo diNewton, utilizzando l’intestazione

function [xv, fxv, n] = bisezfun (f, a, b, toll, nmax)

% BISEZFUN Metodo di Bisezione

%

% Uso:

% [xv, fxv, n] = bisezfun(f, a, b, toll, nmax)

%

% Dati di ingresso:

% f: funzione (inline function)

% a: estremo sinistro

% b: estremo destro

% toll: tolleranza richiesta per l’ampiezza dell’intervallo

% nmax: massimo indice dell’iterata permesso

%

% Dati di uscita:

% xv: vettore contenente le iterate

% fxv: vettore contenente i corrispondenti residui

% n: indice dell’iterata finale calcolata

Alvise Sommariva Introduzione 35/ 36