COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori...

77
COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante l’elaborazione, anche se si cerca di forzarne l’alterazione del valore. >> computer tipo di computer in uso PCWIN >>pi pigreco 3.1416 >>eps precisione di macchina; in genere MATLAB usa per la rappresentazione dei numeri floating point la doppia precisione con 16 cifre decimali significative 2.2204e-016 >>realmax massimo numero floating point rappresentabile 1.7977e+308 >>realmin minimo numero floating point positivo e non nullo rappresentabile 2.2251e-308 >>i oppure j rappresentano l’unità immaginaria nell’insieme dei numeri complessi 0.+1.0000i >>inf infinito; è il risultato di una espressione che ha al denominatore 0 >>NaN Not –a-Number; è il risultato di una espressione che risulta 0/0 o inf/inf >>version Versione di MATLAB

Transcript of COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori...

Page 1: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

COSTANTI PREDEFINITE

Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante l’elaborazione, anche se si cerca di forzarne l’alterazione del valore.>> computer tipo di computer in usoPCWIN

>>pi pigreco3.1416>>eps precisione di macchina; in genere MATLAB usa per la rappresentazione dei

numeri floating point la doppia precisione con 16 cifre decimali significative•2.2204e-016

>>realmaxmassimo numero floating point rappresentabile1.7977e+308>>realmin minimo numero floating point positivo e non nullo rappresentabile2.2251e-308>>i oppure j rappresentano l’unità immaginaria nell’insieme dei numeri complessi0.+1.0000i>>inf infinito; è il risultato di una espressione che ha al denominatore 0>>NaN Not –a-Number; è il risultato di una espressione che risulta 0/0 o inf/inf>>version Versione di MATLAB

Page 2: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Come assegnare una matrice

• PRIMO modo: gli elementi di una riga separati da spazi, quelli di righe diverse separati da un punto e virgola

A = [5 7 2.5 ; -3.2 4.8 1.5];• SECONDO modo: gli elementi di una riga separati da

virgole quelli di righe diverse separati da un punto e virgola (la virgola però si rivela superflua.)

• A = [5 , 7 , 2.5 ; -3.2 , 4.8 , 1.5];• TERZO modo: gli elementi di una riga separati da spazi

quelli di righe diverse scritti su righe diverseA = [ 5 7 2.5

-3.2 4.8 1.5];

Page 3: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• QUARTO modo: Una matrice può essere creata anche accorpando più matrici che devono avere ugual numero di righe:

C=[ A B]

o di colonne

D=[A;B]

Page 4: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Come MATLAB memorizza le matrici

• MATLAB memorizza le matrici in un array unidimensionale (=vettore) formato dalla prima colonna della matrice seguita dalla seconda, dalla terza, ecc.

• Quindi a(j) indica l’elemento della matrice di posto j secondo la numerazione progressiva per colonne. Questo consente di richiamare gli elementi di una matrice sia in modo tradizionale con due indici a(h, k) che con un solo indice a(j).

Page 5: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

A righe m=2

colonne n=4

A(h,k) A(j)

j=(k-1)*m+h

Page 6: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Analisi degli elementi di una matrice

• Se si vogliono localizzare gli elementi di una matrice che soddisfano una data condizione si usa l’istruzione find. Così, indicata con M una matrice, le istruzioni

f=find(M) crea un vettore f i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice diversi da zero.

g=find(M>2) crea un vettore g i cui elementi sono gli indici della matrice M corrispondenti agli elementi della matrice maggiori di 2.

g=find(M<0) crea un vettore s i cui elementi sono gli indici della matrice M corrispondenti agli elementi negativi della matrice.

Page 7: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 8: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 9: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Matrici particolari

• Per generare una matrice m x n i cui elementi siano tutti nulli si usa l’istruzione

P = zeros (m,n);• Per generare una matrice di elementi tutti nulli avente la stessa dimensione

della matrice A, già definita dll’utente, si usa l’istruzione T=zeros(size(A));

Per generare una matrice m×n i cui elementi siano tutti uguali ad uno si usa l’istruzione

Q = ones(m,n);Per generare una matrice identità n×n si usa l’istruzione

R = eye(n);Per generare una matrice n×n con elementi a caso compresi tra zero ed 1 si usa l’istruzione

S = rand(n)

Page 10: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 11: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 12: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

DIMENSIONAMENTO AUTOMATICO

• In MATLAB le variabili non sono dichiarate preventivamente al loro uso dall'utente, ma sono create quando sono necessarie da un gestore della memoria che alloca lo spazio necessario per una matrice dinamicamente, mediante il cosiddetto DIMENSIONAMENTO AUTOMATICO.

• Se ad esempio si esegue >>C(2,3)=1 C= 0 0 0 0 0 1 automaticamente viene allocato lo spazio per una matrice 2x3, ossia C diventa 2x3. Se ora si esegue:>>C(3,3)=2

C= 0 0 0 0 0 1 0 0 2• MATLAB aumenta le dimensioni di C a 3x3 per trovare spazio per l’elemento

aggiunto C(3,3); la dimensione di C diventa 3x3. • Si osservi che quando in una istruzione si cambia anche un solo elemento di una

matrice e l'istruzione non ha il punto e virgola finale, Matlab visualizza tutta la matrice.

Page 13: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Se, dati a,h,n, si vuole fare un’operazione del tipo x(1)=a

for i=1:n x(i)=x(i-1)+h; end;• Al primo passo viene definito un vettore x di lunghezza 1, al secondo x diventa di lunghezza 2,

al terzo di lunghezza 3 e così via fino a che al termine del ciclo ha lunghezza 21. • Il vettore viene considerato per convenzione, così come ogni vettore generato

dinamicamente, un vettore riga.

• E’ possibile allocare a priori il vettore x, inizializzandolo a zero, usando la funzione zeros:

x=zeros(1,n) for i=1:n x(i)=x(i-1)+h; end; Questa soluzione è più efficiente per due motivi:• si ha il controllo dell'orientamento dei vettori, senza sottindere nulla, e si evitano errori di

compatibilità di dimensionamento nelle operazioni vettoriali;• si evita l'uso intensivo del gestore della memoria risparmiando tempo.• Se si vuol definire x come vettore colonna, basta usare x=zeros(n,1).

Page 14: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Vettore con elementi in progressione aritmetica

Se gli elementi di un vettore sono regolarmente intervallati l’operatore (:) consente di generare un vettore riga:

a=[p:step:u] es: a=[0:1:4] produce il vettore riga 0,1,2,3,4.

p primo elementostep incremento (<0 se u<p) es: a=[8:-2:-12])u ultimo elementoSe step=1 può essere omesso

linspace (p,u,n) consente di creare un vettore riga con un numero predefinito n di elementi linearmente intervallati nell’intervallo[p,u]

a=[0:1:4] equivale a a=linspace(0,4,5);

Page 15: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 16: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

In un linguaggio di programmazione classico

• passo=0.2 k=1

z[1]=-4

while(z[k]<=4)

k=k+1;

z[k]=z[k-1]+passo

end while

z=-4:0.2:4

Matlab

Page 17: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Uso dei due punti

• Il comando “:” e’ un sostituto del ciclo for . Abbiamo gia’ visto come esso consenta di creare semplicemente vettori con componenti che differiscono di una costante.

• Vediamone ora un secondo utilizzo. Data una matrice A si voglia prelevare da essa una sotto-matrice formata da alcune righee alcune colonne.

Page 18: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Ad esempio se si vuol prelevare la sotto-matrice B formata dalla sola prima colonna di A.

B=A(:,1)• che significa B è formato da tutte le righe di A

(questo significano i due punti prima della• virgola) ma solo dalla colonna 1.

Page 19: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Si voglia prelevare da A la sotto-matrice C formata dalle colonne 2,3

• Basta usare l’istruzione C=A(:,2:3), che signfica C è formato da tutte le righe di A (questo significano i due punti prima della

virgola) ma solo dalle colonne 2 e 3 .

Page 20: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Si voglia prelevare la sotto-matrice D formata dalle righe 2 e 3 di A

• basta usare l’istruzione D = A(2:3,:) che significa: D `e formato dalle righe 2 e 3 di A e da tutte le colonne (questo significano i due punti dopo la virgola).

Page 21: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

SOMMA TRA MATRICI

• Siano A e B due matrici mxn. Allora si può definire la matrice somma A+B i cui elementi sono la somma degli elementi di ugual indici di A e B rispettivamente.

• >>A=[1 2 3; 4 5 6: 7 8 9];• >>B=A’• B = 1 4 7• 2 5 8• 3 6 9• >>C=A+B• C= 2 6 10• 6 10 14• 10 14 18• >>A=A+x ove x è un vettore 3x1 NON SI PUO’ ESEGUIRE!!!• >>A=A+1• A= 2 3 4• 5 6 7• 8 9 10• In questo caso anche se 1 è uno scalare si sottintende che A sia moltiplicato

per una matrice 3x3 di tutti 1 e l’operazione può essere fatta.

Page 22: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

PRODOTTO DI SCALARE PER MATRICE

Sia A una matrice mxn e y uno scalare. Il prodotto dello scalare y per la matrice A è una matrice mxn i cui elementi sono gli elementi di A moltiplicati per y.>>A=[2 3 4; 5 6 7;16 18 20] A=

2 3 4 5 6 7 16 18 20

>> B= 2*AB= 4 6 8

10 12 14 16 18 20

Page 23: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Prodotto Matrice vettore

• Se A matrice mxn ed x vettore colonna nx1 si può definire il prodotto matrice vettore Ax nel seguente modo:

>>A=[2 1; 3 4] A=

2 1 3 4>> x=[5;6] x= 5 6>>c=A*xc= 16 39Il prodotto Matrice vettore può essere calcolato solo se il numero delle colonne

della matrice è uguale al numero delle righe del vettore.

Page 24: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Operazioni sulle matrici

• Per aggiungere o togliere a tutte le componenti di un vettore (o di una matrice) un numero, basta sommare o sottrarre il numero al vettore.

• Dato il vettore x = [ 10 20 30 ];con la scrittura

y = x + 3si ottiene il vettore [ 13 23 33 ]

• Per moltiplicare o dividere un vettore per un numero basta scrivere

z = 2 * xche fornisce il vettore

[ 20 40 60 ]

Page 25: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Prodotto tra matriciE’ sufficiente mettere un asterisco tra le due matrici

A = [ -1 0; 8 3]; % assegna la prima matriceB = [ 3 -2; 1 -1]; % assegna la seconda matriceC = A * B % esegui il prodotto e mostralo

• E’ evidente che si possono moltiplicare due matrici se il numero di colonne della prima e’ uguale al numero di righe della seconda.

• Ad esempioA = [ -1 0 8 3

• 5 2]; % assegna la prima matrice

• B = [ 3 -2 8 5 1 -1 2 -5]; % assegna la seconda matrice• C = A * B % esegui il prodotto e mostralo

3x2

2x4

Page 26: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 27: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• In particolare si può ottenere il prodotto scalare di due vettori

u = [-1 4 8 3 5 2]; % assegna il primo vettore-riga

v = [ 3 ; -2 ; 8 ; 5; 1 ; -1];

% assegna il secondovettore-colonna• s = u * v % esegue il prodotto e lo mostra

Page 28: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Prodotto di due Matrici Amxp Bpxn

• for i=1,…,m for j=1,…,n

C(i,j)=0

for k=1,…,p

C(i,j)=C(i,j)+A(i,k)*B(k,j)

end

end

end

Con un linguaggio di programmazione classico

p

kkjikij

pxnmxpmxn

BAC

BAC

1

Page 29: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Prodotto di due Matrici Amxp Bpxn

• for i=1:m for j=1:n

C(i,j)=A(i,:)*B(:,j)

end

End

oppure più semplicemente usando il comando C=A*B

In matlab sostituendo il ciclo più interno con l’operatore : ed utilizzando la moltiplicazione predefinita tra vettori *

Page 30: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Operazioni componente per componente • Una operazione molto utile in MATLAB, che non ha analogo nel

calcolo matriciale, è la seguente: date due vettori u e v che hanno la stessa dimensione si vuole

ricavare un altro vettore che ha come componenti i prodotti (o i quozienti) delle componenti omonime dei due vettori dati.

Ad esempiou = [8 6 12] v = [2 3 4]

si vogliono ottenere i vettoriw = [16 18 48] (ottenuto moltiplicando componente per

componente i due vettori) z = [4 2 3] (ottenuto dividendo componente per componente i

due vettori)

• si devono introdurre due nuove operazioni che sono indicate con i simboli (.*) e (./) rispettivamente ovvero anteponendo un puntino ai simboli di prodotto (*) e di quoziente (/). rispettivamente.

Page 31: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

•u = [8 6 12]•v = [2 3 4]•w = u .* v % il puntino precede il segno di prodotto *•z = u ./ v % il puntino precede il segno di quoziente /

Questa nuova operazione si usa anche quando vogliamo fareoperazioni sulle singole componenti di un vettore o con le componenti di due vettori. Cos`ı se vogliamo fare il cubo delle componenti di•un vettore ovvero a = [2 3 5] ed ottenere b = [8 27 125] si deve premettere un punto al simbolo di elevamento a potenza. >> b = a .^ 3;•Il punto precisa che l’operazione indicata viene compiuta sulle singole componenti.

Page 32: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Questo tipo di operazione è molto usata nella valutazione di funzioni:

Valutare la funzione y=((1+x)-1)/x) in x che varia nell’intervallo [eps/2,eps]:

x=[eps:-eps/16:eps/2]

y=((1+x)-1)./x)

Page 33: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Qualora si dovesse valutare la funzione

y = x sin(x)

nelle componenti di un vettore x, dovremmo fare il prodotto delle componenti omonime premettendo un punto al simbolo di prodotto

y = x .* sin(x);

Page 34: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Vettorizzazione

• L'azione di rimpiazzare un ciclo con una operazione vettoriale viene detta vettorizzazione e porta tre vantaggi:

• maggiore efficienza in termini di tempo di esecuzione;

• maggiore leggibilità dell'algoritmo;• abitudine a usare operazioni vettoriali; ci sono

macchine che usano la sintassi vettoriale poiché hanno caratteristiche hardware ad hoc per le operazioni di tipo vettoriale.

Page 35: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Funzioni che agiscono sugli array

• min(A): per i vettori restituisce il più piccolo valore nel vettore, per le matrici restituisce un vettore riga contenente gli elementi minimi di ogni colonna di A

• max(A): per i vettori restituisce il più grande valore nel vettore, per le matrici restituisce un vettore riga contenente gli elementi massimi di ogni colonna di A

• sort(A): per i vettori restituisce il vettore di input ordinato in ordine crescente, per le matrici dispone le colonne dell’array A in ordine crescente e restituisce un array della stessa dimensione di A

• sum(A): per i vettori restituisce la somma degli elementi del vettore, per le Matrici restituisce la somma gli elementi di ogni colonna dell’array A e restituisce un vettore riga che contiene le somme risultanti.

Page 36: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 37: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 38: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 39: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Funzioni matematiche di base

Funzioni matematiche di baseTipiche funzioni matematiche di base

abs(x) calcola il valore assoluto di x

exp(x) calcola ex

sqrt(x) calcola la radice quadrata di x

log(x) calcola il logaritmo naturale di xlog10(x) calcola il logaritmo decimale (in base 10)

Page 40: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• F. Complesseabs(x) calcola il valore assoluto di xangle(x) calcola la fase di un numero complessoconj(x) calcola il numero complesso-coniugatodi ximag(x) rende la parte immaginaria di unnumero complesso xreal(x) rende la parte reale di un numerocomplesso x

Page 41: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• F. Numericheceil(x) approssima x al numero intero più vicino versoinfinito, ceil(1.21232)=2fix(x) approssima x al numero intero più vicino versolo zero fix(1.21232)=1floor(x) approssima x al numero intero più vicino verso- infinito floor(1.21232)=1round(x) approssima x al numero intero più vicino

round(1.21232)=1sign(x) calcola il segno di x e restituisce +1 se x > 0 0 se x = 0 -1 se x < 0

Page 42: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Funzioni trigonometriche

• cos(x), sin(x), tan(x) e cot(x) coseno, seno, tangente ecotangente di x

• acos(x), asin(x), atan(x) e acot(x) arcocoseno, arcoseno, arcotangente,arcocotangente di x

• sec(x) e csc(x) secante e cosecante di x• cosh(x), sinh(x), tanh(x) e coth(x) coseno iperbolico, seno iperbolico,• sech(x) tangente iperbolica e cotangente iperbolica

e secante iperbolica di x• asec(x) e acsc(x) arcosecante e arcocosecante di x• aosh(x), sinh(x), tanh(x) e coth(x) arcocoseno iperbolico, arcoseno

iperbolico,• csech(x) arcotangente iperbolica e arcocotangente

iperbolica e cosecante di x• atan2(y,x) arcotangente nei quattro quadranti (+pi:-pi)

Page 43: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Funzioni logiche

• any(x) restituisce uno scalare , che è pari a 1 sealmeno uno degli elementi del vettore x è diverso da zero, 0 negli altri casi.

• any(A) restituisce un vettore riga che ha lo stesso numero di colonne della matrice A e che contiene 1 e 0

in funzione del fatto che la corrispondente colonna di A contiene oppure no almeno un elemento diverso da 0.

• all(x) restituisce uno scalare, che è pari a 1 se tutti gli elementi del vettore x sono diversi da 0, 0 negli altri

casi

Page 44: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

M-function file

• Definiscono una nuova funzione il cui nome coincide con il nome che si attribuisce al file.• Ogni funzione accetta dei dati su cui operare (parametri di ingresso) e restituisce dei risultati

(parametri di uscita).• La prima istruzione del file deve essere:• function [lista parametri uscita]=nome(lista parametri ingresso);• % commento; linea H1: compare quando si fornisce il comando • % >> help nome• Il nome della funzione segue le regole dei nomi delle variabili (31 caratteri, di cui il primo è una

lettera).• Se in una lista di parametri compare più di un parametro, essi sono separati da virgola. I

parametri specificati nella istruzione function si dicono parametri formali. • Nel corso della funzione vengono eseguiti calcoli sui parametri d'ingresso e si assegnano valori

ai parametri di uscita.• La funzione è richiamabile all’interno di qualunque espressione mediante il nome e la lista dei

parametri su cui deve operare (parametri attuali):• …nome(i1,i2,..,in)• Se non ci sono parametri d'uscita si usa:• function nome(lista parametri d'ingresso);• function []=nome(lista parametri d'ingresso);•

Page 45: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• ESEMPIO• La seguente funzione viene scritta in editor e gli

viene assegnato nome poli5.m:• function y=poli5(x); oppure [y]=poli5(x);• %polinomio di grado 5• y=x^5/5-x^4+x^3+x^2-1.0;• x è parametro formale d’ingresso• y è parametro formale d’uscita;• entro la function occorre che compaia almeno

una istruzione che definisce i parametri formali d’uscita.

Page 46: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Uso della function:• » var=2;ris=poli5(var);disp(ris);• 1.4000• var è parametro attuale d’ingresso• ris è parametro attuale d’uscita• » xx=3;s=poli5(xx);disp(s);• 2.6000• In questo caso xx è parametro attuale d’ingresso e s è parametro attuale d’uscita. • Parametri formali e parametri attuali devono essere in corrispondenza

biunivoca. • Il commento è opzionale serve a documentare cosa calcola la funzione; se l’utente si

dimentica il tipo di elaborazione eseguita, con • >>help nome• viene visualizzata la linea di commento H1 dopo l’istruzione function, se essa è stata

specificata. Vengono visualizzate anche le successive linee di commento se sono presenti, fino alla prima linea vuota o alla prima linea non di commento.

Page 47: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• ESEMPIO• » help poli5• polinomio di grado 5• » • Analogamente l’istruzione • >>lookfor parola-chiave• cerca la parola-chiave specificata dall’utente nella riga di commento

dopo l’istruzione function e, se la trova, visualizza il nome della funzione e la riga di commento.

• ESEMPIO• » lookfor polinomio• poli5.m: %polinomio di grado 5• Ogni funzione usata resta in memoria. Con il comando inmem si

possono vedere le funzioni attualmente in memoria.• Si possono cancellare tutte le funzioni con

Page 48: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• >> clear functions• Con• >> clear nomefun• si azzera solo la funzione specificata.•

ESEMPIO 1• La function che segue calcola la media campionaria di un insieme di dati contenuti nel vettore x:• function m=media(x);• % calcolo della media campionaria di un insieme di dati• % contenuti in un vettore x; • % l'input e' il vettore x; l'output e' la media campionaria• n=length(x);• m=sum(x)/n;

• In Matlab, la media si può calcolare anche con la funzione predefinita mean.• Esempio di esecuzione:• » x=[3 6 2 9 10];• » media(x)• ans =• 6• » mean(x)• ans =• 6•

Page 49: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• ESEMPIO 2• Supponiamo di avere un insieme di dati di cui si conoscono le frequenze; in

tal caso la media viene calcolata con una differente formula, che può essere implementata mediante la seguente function:

• function m=media_pesata(x,f);• % calcolo della media campionaria di un insieme di dati• % contenuti in un vettore x con frequenze contenute nel vettore f; • % l'input e' il vettore x; l'output e' la media campionaria• s=sum(f);• m=sum(x.*f)/s;• Esempio di esecuzione: • » x=[4 6 9 1];f=[14 5 8 23]; • » media_pesata(x,f)• ans =• 3.62

Page 50: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

FUNZIONI USATE ENTRO UNA FUNCTION

• nargin numero di argomenti di input che sono specificati nella chiamata alla function in cui si trova nargin

nargoutnumero di argomenti di output che sono specificati nella chiamata alla function in cui si trova nargout

ESEMPIOfunction c=testarg(a,b);

if nargin== 1 c=a.^2;elseif nargin==2 c=a+b;end;

Page 51: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

SOTTOFUNZIONI

• Gli M-function file possono contenere la definizione di più funzioni.

• La prima funzione definita è la funzione primaria che fornisce il suo nome all'M-file; essa è l'unica accessibile dall'esterno nel senso che può essere richiamata dall'esterno. Le altre funzioni che seguono sono dette sottofunzioni e sono visibili solo alla funzione primaria e alle altre sottofunzioni del file.

• Il comando help nome m_file visualizza solo i commenti contenuti nella funzione primaria.

Page 52: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

ESEMPIOfunction [avg,med]=newstats(u);% calcola media e mediana di un insieme di dati un=length(u);avg=mean(u,n);med=median(u,n);

function a=mean(v,n);a=sum(v)/n;

function m=median(v,n);w=sort(v);if rem(n,2)==1 m=w((n+1)/2);else m=(w(n/2)+w(n/2+1))/2;end;

Tutte queste funzioni stanno nel file newstats.m; newstats è la funzione primaria, mean e median sono sottofunzioni,richiamabili solo da newstats oppure l'una dall'altra.

Page 53: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

WORKSPACE DI UNA M-FUNCTION

• Ogni M-function ha un proprio spazio di lavoro in cui opera. • Può usare i parametri d'ingresso ma non le variabili dello spazio di lavoro dell'ambiente globale, a

meno che non esistano variabili definite GLOBAL. Tali variabili, che fanno parte di una zona di memoria diversa dallo spazio di lavoro generale e comune, possono essere usate nello spazio di lavoro generale e nelle function che dichiarano di usarle.

ESEMPIO function y=f(x); global A1 A2; y=A1*x+A2;

Nell’ M-file che chiama la funzione oppure nella command window:» global A1 A2» A1=3.0;A2=5.0;z=f(3.5)z = 15.5

In questo modo A1 e A2 sono variabili comuni allo spazio di lavoro generale e allo spazio di lavoro della function f; ogni volta che vengono alterate, lo sono per ogni ambiente in cui sono dichiarate.

>>clear global A1 cancella la variabile A1 dallo spazio di lavoro globale>>clear A1 cancella la variabile A1 solo dallo spazio di lavoro locale ma la

variabile esiste ancora nello spazio di lavoro globale.•

Page 54: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 55: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Input

• Il comando “input” Se si vuole introdurre il valore di una variabile in

un programma si usa l’istruzione inputp = input(’dammi il numero: ’);g = p*2 % fa una operazione matematica

• Se si vuole introdurre una stringa in un programma si usa l’istruzione

nome = input(’dammi una stringa anche con spazi: ’,’s’);

disp(nome)

Page 56: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Il comando fprintf

Quando si vogliono visualizzare valori numerici è bene che siano dotati di un “formato”, ovvero che siano “formattati”. Ad esempio se si vuole visualizzare una tabella che ad ogni numero intero compreso tra 1 e 6 associ la sua radice quadrata, il suo quadrato ed il suo logaritmo in base e, occorre stampare su quattro colonne come segue: x = 1:6; y = sqrt(x); u = x.^2; v = log(x);

Page 57: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

for i=1:6fprintf(’ num= %2i \t rad= %8.5f \t quad= %4i \t ln= %9.7e \n’,x(i),y(i),u(i),v(i))

endIl risultato ènum = 1 rad = 1.00000 quad = 1 ln = 0.0000000e+00num = 2 rad = 1.41421 quad = 4 ln = 6.9314718e-01num = 3 rad = 1.73205 quad = 9 ln = 1.0986123e+00num = 4 rad = 2.00000 quad = 16 ln = 1.3862944e+00num = 5 rad = 2.23607 quad = 25 ln = 1.6094379e+00num = 6 rad = 2.44949 quad = 36 ln = 1.7917595e+00

Page 58: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Il comando fprintf contiene la stringa dei formati delimitata da apici, come tutte le stringhe e, dopo la virgola, l’elenco delle variabili da stampare.

• Nella stringa dei formati vi sono:num = %2i significa: scrivi “num = ” con 2 cifre nel formato “i” intero;rad = %8.5f significa: scrivi “rad = ” con 8 cifre di cui 5 decimali nel formato “fixed point”;quad = %4i significa: scrivi “quad = ” con 4 cifre nel formato “i” intero;ln = %9.7e significa: scrivi “ln = ” con 9 cifre di cui 7 decimali nel formato esponenziale;Il simbolo \t indica la tabulazione ovvero l’incolonnamento; il simbolo \n indica l’andare a capo(new line).

Page 59: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Gestione dei grafici

•Per aprire una finestra grafica si usa l’istruzioneh1=figure

in cui figure `e il comando che attiva la finestra grafica mentre h1 `e un identificatore del manico (handle) del comando figure che servirà a specificare i parametri della finestra grafica con un successivocomando set.La variabile h1 è stata scelta in quanto h `e l’iniziale di handle. La cifra 1 è stata scelta in previsione dell’utilizzo di altri manici.

Page 60: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Posizione e dimensione della finestra grafica

• La posizione e le dimensioni della finestra grafica si precisano all’interno del comando set.

• Le unità di misura possono essere: cm, mm, pixel, foot, ...

• E’ conveniente dare le misure in proporzioni alle

dimensioni dello schermo, le cui dimensioni (larghezza, altezza) sono considerate unitarie.

• Per fare questo si usa il formato normalized ovvero si scrive l’istruzione

Page 61: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

set(h1, ’Units’, ’normalized’)

• Le dimensioni della finestra grafica si precisano dichiarando quattro numeri relativi a:

1) origine finestra in ascisse;

2) origine finestra in ordinate;

3) lunghezza della finestra;

4) altezza della finestra.

Page 62: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Avendo scelto le unità normalizzate questi quattro numeri vanno espressi come frazione dell’unità:

ad esempio volendo posizionare la finestra grafica in alto a destra dello schermo l’origine dellafinestra in ascissa dovrà essere la metà della larghezza dello schermo: (0.5) l’origine della finestra inordinate risulterà (0.5) La lunghezza della finestra risulter`a met`a della larghezza dello schermo:(0.5) e l’altezza della finestra risulterà metà della altezza dello schermo: (0.5). Questi quattro numeri devono essere messi come quattro componenti di un vettore:• [ascissa origine , ordinata origine , lunghezza , altezza ].

Il tutto viene messo nell’istruzione set nel modo seguenteset(h1, ’Units’, ’normalized’, ’Position’, [0.5 0.5 0.5 0.45]);

Se si volesse fare la figura a tutto schermo si dovrebbe scrivere• set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 1]);E’ conveniente dare come altezza non 1 ma 0.9 affinchè nella parte alta dello schermo possa starcila striscia superiore che contiene i comandi di MATLAB. Quindi

set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);

Page 63: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Colore dello sfondo

• E’ possibile definire il colore dello sfondo della finestra su cui si andranno a realizzare i disegni

• Questo si realizza con l’istruzione:• whitebg(h1, ’black’) nero• whitebg(h1, ’blue’) blu• whitebg(h1, ’cyan’) ciano• whitebg(h1, ’magenta’) magenta• whitebg(h1, ’yellow’) giallo• whitebg(h1, ’green’) verde

Page 64: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Più disegni sulla stessa finestra

• Sovrapporre più disegni su una stessa finestra o mettere una scritta su un grafico:

• Per “tener ferma” la finestra durante i disegni si deve usare l’istruzione

hold on.

Page 65: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Comando plot

• plot(x,y)

La funzione plot prende in ingresso due vettori della stessa lunghezza e visualizza le coppie di punti corrispondenti alle coordinate fornite dai due vettori.

Page 66: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• Dati in input i due vettori x e y il grafico sarà formato dai punti (x1,y1), (x2,y2)……. (xn,yn). Tali valori potranno essere visualizzati per punti o collegati con una linea continua ottenuta mediante interpolazione lineare.

• Un ulteriore parametro della funzione plot riguarda lo stile con cui vogliamo visualizzare il grafico.

• plot(x,y,stile)

Page 67: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 68: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Esempio:disegno funzione seno

h1 = figure;set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);whitebg(h1, ’black’)hold on• x = 0 : 0.1 : 12;• y = sin(x);• plot(x,y,’r:’);

Page 69: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Esempio:disegno funzione seno

h1 = figure;set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);whitebg(h1, ’black’)hold on• x = 0 : 0.1 : 12;• y = sin(x);• plot(x,y,’r*’);

Page 70: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Esempio di stili

h1 = figure;set(h1, ’Units’, ’normalized’, ’Position’, [0 0 1 0.9]);whitebg(h1, ’black’)hold on• x = 0 : 0.1 : 12;• y = sin(x);• plot(x,y,’b-’);

Page 71: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Assi cartesiani

• MATLAB sceglie automaticamente le dimensioni degli assi in modo che il grafico vi stia dentro completamente.

• In alternativa si possono fissare gli assi di dimensioni volute. Ad esempio se si vuole che la ascissa vada da 0 a 10 e che la ordinata vada da -2 a 2 si scriverà

axis([0 10 -2 2]);• I quattro valori rappresentano rispettivamente:

”xmin” ”xmax” ”ymin” ”ymax”.

Page 72: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Mettere un titolo

• Il comando h2=title(‘Funzione seno’);

Serve per visualizzare il titolo della finestra:

restituisce un handle h2, che può essere utilizzato per settare i parametri del titolo, quali il colore del font, la dimensione, il tipo del carattere.

Il tutto si può specificare con delle linee di codice del seguente tipo:

Page 73: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 74: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.
Page 75: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

Attivare una griglia

• Spesso è conveniente tracciare una griglia che aiuta a leggere i valori numerici della funzione in corrispondenza a determinate ascisse.

• La griglia si realizza con l’istruzione

grid on

Page 76: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.

• grid minor

Page 77: COSTANTI PREDEFINITE Esistono in MATLAB alcune costanti predefinite, ossia nomi simbolici di valori che non cambiano durante lelaborazione, anche se si.