41
1 MATLAB Programmare in MATLAB 2 MATLAB consente di programmare utilizzando espressioni matematiche, che lavorano con matrici Alla base delle espressioni ci sono Numeri Variabili Operatori Funzioni Le espressioni in MATLAB

Programmare a MATLAB_partII

Embed Size (px)

Citation preview

Page 1: Programmare a MATLAB_partII

1

1

MATLAB

Programmare in MATLAB

2

MATLAB consente di programmare utilizzando espressioni matematiche, che lavorano con matriciAlla base delle espressioni ci sono

NumeriVariabiliOperatoriFunzioni

Le espressioni in MATLAB

Page 2: Programmare a MATLAB_partII

2

3

I NumeriMATLAB usa la notazione decimale convenzionale con segnoLa notazione scientifica usa la lettera e (E) per specificare ilfattore di scala in potenze di 10.I numeri complessi usano i o j come suffisso. Tutti i calcoli effettuati in MATLAB sono eseguiti in doppiaprecisione, ma si possono visualizzare in un formato diversousando i comandi:

Notazione scientifica 15 dec.Format long e

Notazione scientifica 4 dec.Format short e

Virgola fissa con 15 decimaliformat long

Virgola fissa con 4 decimaliformat short

4

Esempiox = [4/3 1.2345e-6]

3ff5555555555555 3eb4b6231abfd271format hex

4/3 1/810045format rat

1.33 0.00format bank

1.33333333333333 1.2345e-006format long g

1.333333333333333e+000 1.234500000000000e-006format long e

1.33333333333333 0.00000123450000format long

1.3333 1.2345e-006format short g

1.3333e+000 1.2345e-006format short e

1.3333 0.0000format short

Page 3: Programmare a MATLAB_partII

3

5

Le Costanti

Infinito viene generato quando si divide per zero un valorenon nullo o quando ben definite espressioni matematicheforniscono un risultato che supera il massimo limite realmaxNaN viene generato quando si vogliono valutare formeindeterminate del tipo 0/0 o Inf-Inf

ValoreNome

Not-a-numberNaNInfinitoInfLargest floating-point number, (2-ε)21023realmaxSmallest floating-point number, 2-1022realminFloating-point relative precision, 2-52epsUnità immaginarie, sqrt(-1)i, j3.14159265…pi

NOTAI nomi delle costanti

non sono ‘riservati’: sipuò sovrascrivereognuno di essi con unanuova variabile

Il valore originalepuò essere ripristinatodigitandoclear nome_costante

6

Le VariabiliMATLAB non richiede che le variabili siano dichiarate o dimensionate all’inizio del programmaQuando MATLAB trova un nuovo nome di variabile crea automaticamente la variabile e alloca la quantità di memoria necessaria. Se la variabile esiste già MATLAB ne aggiorna il contenuto e, se necessario, varia di conseguenza la memoria ad essa allocata. I nomi di variabili possono essere composti di lettere, numeri, o underscores, ma il primo carattere DEVE essere alfabetico. MATLAB usa solo i primi 31 caratteri del nome della variabile.MATLAB è case sensitive, ossia riconosce lettere maiuscole e lettere minuscole. A e a non sonola stessa variabile. Per visualizzare il contenuto delle variabili basta digitarne ilnome sulla linea di comando senza punto e virgola oppure cliccare sulla variabile mostrata sul Workspace Browser.

Page 4: Programmare a MATLAB_partII

4

7

Operatori (Richiamo)Le espressioni usano i ben noti operatori aritmetici e le regole della precedenza aritmetica.

Esegue le operazioni *, ^, ecc. elementoper elemento

.* .^ ecc.

Trasposta Complessa Coniugata'Elevamento a Potenza^

Divisione a Sinistra\Divisione/Moltiplicazione*Sottrazione-Somma+

8

Generazione di Matrici

Gli elementi hanno valori casuali a distribuzione normalerandn

Gli elementi hanno valori casuali uniformemente distribuitirand

Contiene tutti unoones

Contiene tutti zerizeros

Alcuni esempi:

Page 5: Programmare a MATLAB_partII

5

9

Le FunzioniMATLAB fornisce un gran numero di funzioni matematicheelementari, come abs, sqrt, exp, and sin.

NOTA: Effettuare la radice quadrata o il logaritmo di un numeronegativo non dà errore: il risultato corretto (complesso) vienecalcolato automaticamente

MATLAB fornisce inoltre molte altre funzioni matematiche piùcomplesse, tra cui le funzioni di Bessel e le funzioni gamma. La maggior parte di queste funzioni accetta argomenti complessi. Il comando help elfun fornisce una lista delle funzionimatematiche elementariI comandi help specfun e help elmat forniscono rispettivamenteuna lista delle funzioni più complesse e delle funzioni matricialiAlcune funzioni, come sqrt e sin, sono built in, fanno parte cioèdel nucleo di MATLAB e sono veramente efficienti, ma i dettagli computazionali non possono essere visualizzati. Altre funzioni, come gamma and sinh, sono implementate in M-files e di queste è possibile visualizzare il codice e persinomodificarlo a piacere

10

Esempi di Espressioni» rho = (1+sqrt(5))/2

rho =

1.6180

» a = abs(3+4i)

a =5

» z = sqrt(besselk(4/3,rho-i))z =

0.3730+ 0.3214i

» huge = exp(log(realmax))

huge =

1.7977e+308

» toobig = pi*huge

toobig =

Inf

Page 6: Programmare a MATLAB_partII

6

11

Program FilesMATLAB è sia un linguaggio di programmazione molto potente siaun ambiente di calcolo interattivoI files che contengono codice in linguaggio MATLAB si chiamanoM-filesM-files possono essere creati utilizzando un qualsiasi text editor, e poi possono essere usati esattamente come ogni altrafunzione o comando MATLAB nella command window.Ci sono due tipi di M-files:

Scripts (macro) che non accettano variabili in ingresso nè fornisconovariabili in uscita, bensì lavorano con i dati nel workspace. Funzioni che accettano/richiedono normalmente variabili in ingressoe restituiscono variabili in uscita. Le variabili interne costituisconovariabili locali all’interno della funzione.

Un programmatore MATLAB principiante può creare gli M-files che vuole eseguire nella current directory. Via via svilupperàmolti M-files e preferirà organizzarli in più directories e toolboxes personali che potrà inserire nel search path Se si duplicano i nomi delle funzioni, MATLAB esegue la prima che appare nel search path.

12

Scripts

Quando viene lanciato uno script, MATLAB semplicemente esegue i comandi che trova nel file Gli scripts possono lavorare su dati esistenti nelworkspace, o possono crearne di nuovi su cui lavorare. Gli scripts non restituiscono alcuna variabile diuscitaTutte le variabili che essi creano rimangono nelworkspace e possono essere utilizzate per calcolisuccessivi. Gli scripts possono produrre uscite graficheutilizzando funzioni come plot.

Page 7: Programmare a MATLAB_partII

7

13

Esempio di ScriptCreiamo con l’editor un file script che chiamiamomagicrank.m che contiene i seguenti comandi MATLAB:

% script magicrank.m

% Investigate the rank of magic squaresr=zeros(1,32);

for n=3:32r(n)=rank(magic(n));

end

rbar(r)

14

Uscita dello Script magicrank.mLanciare l’istruzione magicrank fa sì che MATLAB esegua i comandi, calcoli il rango delle prime 30 matrici magic, e visualizziil risultato tramite un diagramma a barre. Quando l’esecuzionedel file è finita le variabili n e r restano nel workspace.

Page 8: Programmare a MATLAB_partII

8

15

Le FunzioniLe funzioni sono degli M-files che accettano

variabili d’ingresso e restituiscono variabili in uscitaIl nome dell’M-file dovrebbe essere nomefunzione.mLe funzioni lavorano sulle variabili all’interno del

loro workspace che è separato dal workspace al qualepossiamo accedere dal prompt di MATLAB. La prima riga di una funzione M-file inizia con la parola chiave function. Questo esprime il nome dellafunzione e l’ordine delle variabili d’ingresso.Le righe successive fino al primo spazio o alla prima linea eseguibile sono righe di commento cheforniscono il testo dell’help

16

Esempi di funzioniL’M-file rank.m si trova nella directory toolbox/matlab/matfun” Possiamo aprire il file ed abbiamo:

function r = rank(A,tol)%RANK Matrix rank

%RANK(A) provides an estimate of the number of

%linearly independent rows or columns of a matrix A.%RANK(A,tol) is the number of singular values of A that are

%larger than tol.

%RANK(A) uses the default tol=max(size(A))*norm(A)*eps.

s = svd(A);

if nargin == 1

tol = max(size(A)’)*max(s)*eps;end

r = sum(s > tol);

Page 9: Programmare a MATLAB_partII

9

17

In questo caso si hanno fino a 2 variabili d’ingresso e unavariabile d’uscita.Digitando “help rank” sulla command window MATLAB visualizzerà tutto quello che è scritto all’inizio della funzionecome commentoIl resto del file è il codice MATLAB eseguibile che definisce la funzione. La variabile s introdotta nel corpo della funzione, così come le variabili sulla prima riga, r, A and tol, sono tutte locali nellafunzione; sono separate da tutte le altre variabili contenute nelworkspace.Questo esempio mostra un aspetto delle funzioni di MATLAB che non si trova solitamente in altri linguaggi di programmazione– un numero variabile di argomenti

Esempi di Funzioni (segue)

18

Esempi di Funzioni (segue)La funzione rank può essere usata in diversi modi:

rank(A)

r = rank(A)

r = rank(A,1.e-6)

Se non viene indicata una variabile d’uscita, il risultato vienememorizzto in ans.Se la seconda variabile d’ingresso non viene fornita, la funzione assume il valore di default.All’interno del corpo di una funzione, le due grandezze narginand nargout dicono il numero di variabili di ingresso e d’uscitautilizzato per ogni particolare uso della funzione.La funzione rank usa nargin, mentre non ha bisogno di usarenargout.

Page 10: Programmare a MATLAB_partII

10

19

Variabili GlobaliPer utilizzare una stessa variabile in più funzioni si dichiara la variabile come global in tutte le funzioni. La dichiarazione delle variabili globali deve essere fatta prima che la variabile venga realmente usata in una funzione. Esempio:

function h = falling(t)global GRAVITY

h = 1/2*GRAVITY*t.^2;

Lanciando al prompt le istruzioni:global GRAVITY

GRAVITY = 32;

y = falling((0:.1:5)’)

tramite le due dichiarazioni global rendiamo il valore assegnatoa GRAVITY al prompt disponibile anche all’interno dellafunzione.

20

“Vettorizzazione”Per rendere MATLAB più veloce ed efficiente possibile è importantevettorizzare gli algoritmi dei propri M-files. Dove con altri linguaggi di programmazione bisogna usare cicli FOR o DO, MATLAB può utilizzare operazioni tra vettori o matrici. Es:

x =.1;

for k = 1:1001

y(k)=log10(x);x = x+.01

end

Una versione vettorizzata dello stesso codice è x = .01:.01:10

y = log10(x)

Per codici più complicati le versioni vettorizzate non sono poi cosìovvie. Tuttavia quando la velocità di elaborazione è importantebisogna sempre cercare di vettorizzare il proprio algoritmo.

Page 11: Programmare a MATLAB_partII

11

21

Pre-definizioneQualora non fosse prorpio possibile vettorizzare un pezzo dicodice, si possono rendere i cicli più veloci pre-definendo i vettori o le matrici in cui andranno memorizzati i risultatiEsempio:

r = zeros(32,1);

for n=1:32r(n) = rank(magic(n));

end

Senza la pre-definizione nell’esempio precedentel’interpreter di MATLAB deve aumentare il vettore r di un elemento ogni passo del ciclo. La pre-definizione di un vettore elimina questo step e rendepiù veloce l’esecuzione.

22

Istruzioni di Flow Control

I costrutti di MATLAB di tipo flow control:ifswitch and caseforwhilecontinuebreak

Page 12: Programmare a MATLAB_partII

12

23

L’Operatore IFLa forma generale del costrutto IF-THEN-ELSE è la stessa di un qualsiasi linguaggio di programmazione:

if condizione1,operazioni1;elseif condizione2,operazioni2;elseoperazioni3;end;

L’istruzione if valuta una espressione logica ed esegue un gruppodi istruzioni solo quando l’espressione è verificata. Le istruzioni elseif e else permettono l’esecuzione di gruppialternativi di istruzioni. La parola end, che chiude un if, termina l’ultimo gruppo diistruzioni. I gruppi di istruzioni sono delineati dalle 4 parole chiave e non sono necessarie parentesi graffe nè quadre.

24

L’Operatore IF (segue)Condizione1,2 devono essere condizioni che

restituiscono come risultato VERO (1) o FALSO (0).Gli operatori disponibili per tali confronti sono:

and logico&or logico|not logico~

diverso~=uguale==non superiore a, non inferiore a<= , >=maggiore di, minore di< , >

Page 13: Programmare a MATLAB_partII

13

25

L’Operatore IF - EsempioOperazioni1,2,3 sono le operazioni da compiere se la condizione corrispondente risulta vera. Le varie istruzionisono separate da virgole e l'ultima è seguita da un punto e virgola.Solo la prima istruzione che verifica la condizione ad essa associata verrà eseguita

if n==10,a=b*c,d=e/f;

elseif n~=20,a=e*f,d=a/b;

elsedisp ('Errore !!!');

end;

26

L’Operatore IF (segue)E’ importante chiarire COME gli operatori relazionali e le istruzioni if lavorano sulle matrici. if A == B, ...

Questo è codice MATLAB corretto, e fa quello che ci si aspettaquando A e B sono scalari. Quando A e B sono matrici, A == B non va a verificare SE A e B sonouguali, ma testa DOVE sono uguali, ossia per quali elementi; nerisulta un’altra matrice di 0 e 1 che mostra l’uguaglianza (o meno) elemento-per-elemento.Se infine A e B non hanno la stessa dimensione, A == B dà errore.

La maniera più appropriata per verificare l’uguaglianza tra due variabili è quella di utilizzare la funzione isequal

if isequal(A,B), ... (A e B possono anche essere due matrici)

Ci sono molte funzioni atte a rendere i confronti tra matrici‘simili’ ai confronti tra scalari all’interno di costrutti if, ad es.:

isequal, isempty , all , any

Page 14: Programmare a MATLAB_partII

14

27

L’Istruzione Switch

L’istruzione switch esegue gruppi di istruzioni in dipendenza dal valore di una variabile o di unaespressione. Le parole chiave case e otherwise indicano i gruppi. Viene eseguito solo il primo ‘caso’ checorrispondeLo switch deve sempre essere chiuso con un end.Diversamente dal linguaggio C l’istruzione switchin MATLAB esegue il caso corrispondente allaprima condizione verificata ed esce, quindil’istruzione break non è richiesta.

28

Istruzioni per CicliI cicli si possono fare con due diversi costrutti:Il ciclo for ripete un gruppo di istruzioni un numerofisso, assegnato, di volte:

for k = 1:step:n,operazioni,end;

Il ciclo esegue le operazioni (separate da virgole) incrementando la variabile k da 1 a n con il passoindicato in step.Un end dopo l’ultima istruzione indica la fine del ciclo

Oppure ...

Page 15: Programmare a MATLAB_partII

15

29

Istruzioni per Cicli (segue)Il ciclo while ripete un gruppo di istruzioni per un numero indefinito di volte sotto il controllo di unacondizione logica.

while condizione,operazioni;end;

Il ciclo esegue le operazioni (separate da virgole)fino a che la condizione è verificata. La condizioneviene costruita con le stesse regole (vincoli edoperatori) di quella dell'IF-THEN-ELSE.

30

Esempifor n = 3:32

r(n) = rank(magic(n));

end

r

for i = 1:m

for j = 1:nH(i,j) = 1/(i+j);

end

end

a = 0; fa = -Inf;

b = 3; fb = Inf;

while b-a > eps*b

x = (a+b)/2;

fx = x^3-2*x-5;

if sign(fx) == sign(fa)

a = x; fa = fx;

else

b = x; fb = fx;

end

end

x

Page 16: Programmare a MATLAB_partII

16

31

L’Istruzione BreakL’istruzione break permette di uscire prima da un ciclo for o while. Se i cicli sono uno dentro l’altro, break esce solo dal ciclo nelquale è contenutoEsempio: a = 0; fa = -Inf;

b = 3; fb = Inf;while b-a > eps*b

x = (a+b)/2;fx = x^3-2*x-5;if fx == 0

breakelseif sign(fx) == sign(fa)

a = x; fa = fx;else

b = x; fb = fx;end

endx

32

Importare ed Esportare DatiCi sono varie tecniche per importare nel workspace di

MATLAB i dati creati da altre applicazioni, compreso unImport Wizard Ed altrettante per salvare le variabili contenute nel workspacein un formato tale da poter essere utilizzate da altre applicazioniL’ Import Wizard è stato introdotto nelle versioni più recenti di MATLAB e permette di importare dati con estensione .DAT, .TXT, :XLS, ecc. cliccando sul nome del file nel CurrentDirectory Browser o digitando uiimport <nome file> o selezionando File -> Import Data sulla Command Window.Il modo più veloce in Matlab è utilizzare i comandi save e loadche salvano e richiamano file con estensione .MAT, che però possono essere utilizzati solo in MatlabAltrimenti si possono utilizzare i comandi standard di scrittura e lettura di un file di testo

Page 17: Programmare a MATLAB_partII

17

33

File I/Osave salva tutte le variabili del workspace in formato binario nelladirectory corrente in un MAT-file chiamatomatlab.mat. save filename salva tuttele variabili del workspace in filename.mat nelladirectory corrente. save filename var1 var2 ... Salva solo le variabilispecificate in filename.mat. save ... option salva le variabili del workspace nel formato specificatoda option

load carica nel workspace tutte le variabili contenute in matlab.matload filename carica nel workspace tuttele variabili contenute in filenameSe filename non ha estensione, load controlla se filename è un MAT-file. Se ha una estensione diversa, lo considera un file ASCII.load filename X Y Z ... Tra tutte le variabili salvate in filename carica solo le variabili X Y Z specificate. load –ascii filename o load –mat filenameobbliga load a considerare il file come un file ASCII o un file MAT, senza curarsidell’estensione del file. Con -ascii, load dàerrore se il file non è di testo (numerico). Con -mat, load dà errore se il file non è un MAT-file.

LOAD SAVE

34

I/O su file di testoPer creare un archivio:Definisco l’archivio file.txt e lo identifico con fid:

fid=fopen ( ’file.txt’ , ’wt’);Deposito nell’archivio la variabile A (matrice a 2 colonne) nel formato

desiderato: fprintf ( nomefile , ’%6.2g %8.4g\n’ , A);

la prima colonna con 6 cifre di cui 2 decimali

la seconda colonna 8 cifre di cui 4 decimali

Chiudo il file con il comando: fclose (fid);Se voglio analizzare il file cosi’ creato posso farlo con un editor di testoqualsiasi.

Per leggere dati da un archivio:L’archivio di testo “file.txt” può anche essere stato generato con un programma esterno. Lo identifico con fid: fid = fopen ( ’file.txt’ , ’r’);Si preleva dall’archivio fid la matrice A leggendo le due colonne di numeriin formato “%g” A = fscanf ( fid, ’%g %g’ , [2 inf] );

Page 18: Programmare a MATLAB_partII

18

35

Cenni di Analisi Numerica

Minimizzazione di funzioniCalcolare gli zeri di una funzioneIntegrazione numerica

MATLAB

36

Come Rappresentare le FunzioniLe funzioni matematiche possono essere espresse come vere e proprie funzioni MATLAB in M-files o come oggetti inline.Consideriamo per es. la funzione

Come funzione MATLAB%humps.m.function y = humps(x)y = 1./((x - 0.3).^2 + 0.01) + 1./((x - 0.9).^2 + 0.04) - 6;

Per calcolare la funzione humps in 2.0, si può utilizzare l’operatore @ per ottenere un function handle (letteralmentemanico) per humps, da passare alla funzione feval.fh = @humps;feval(fh,2.0)ans =-4.8552

604.0)9.0(

101.0)3.0(

1)( 22 −

+−+

+−=

xxxf

Page 19: Programmare a MATLAB_partII

19

37

Come Rappresentare le Funzioni - 2Come oggetto inlinef = inline( 1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 +

0.04)-6 );f(2.0)ans =-4.8552

E’ anche possibile creare delle funzioni di più variabili con ilcomando inline specificando i nomi delle variabili di ingresso insieme all’espressione della funzionePer esempio:

f= inline('y*sin(x)+x*cos(y)','x','y')f(pi,2*pi)ans =3.1416

38

Minimizzare funzioni di una variabileData una funzione matematica di una variabile implementata in un M-file si può utilizzare la funzione fminbnd per trovare un punto di minimo locale della funzione in un dato intervallo. Per esempio, per trovare un minimo della funzione humps nel range(0.3, 1), la linea di codice èx = fminbnd(@humps,0.3,1)

che restituiscex =

0.6370

Si può anche ottenere una tabella di output passando a fminbnduna quarta variabile di ingresso creata dal comando optimset:x = fminbnd(@humps,0.3,1,optimset('Display','iter'))

Page 20: Programmare a MATLAB_partII

20

39

Minimizzare funzioni di una variabile - 2Il risultato mostra il valore corrente di x ed il valore della funzione f(x) ad ogni istante in cui viene calcolata la funzione. Per fminbndcalcolare la funzionecorrisponde ad una iterazione dell’algoritmo. L’ultima colonna mostra quale procedura viene utilizzata ad ogni iterazione, o la ricerca della sezione aurea o una interpolazione parabolica.

Il risultato sarà:

x =0.6370

Parabolic11.25280.6370529

Parabolic11.25280.6370198

Parabolic11.25280.6369857

Parabolic11.25290.6376186

Parabolic11.25830.64135

Parabolic11.26930.6444164

Golden25.17140.4652483

Golden13.77460.7326242

Initial12.90980.5673761

Proceduref(x)xFunc-count

40

Minimizzare funzioni di più variabiliLa funzione fminsearch è simile a fminbnd ma lavora con funzioni di più variabili, ed è necessario definire le condizioni iniziali tramite un vettore x0 anziché tramite un intervallo. fminsearch cerca un punto di minimo locale della funzione matematica che sia vicino al vettore x0 e restituisce tale valore in un vettore x.Esempiofunction b = three_var(v) %create a function three_var of 3 variables

x = v(1);y = v(2);z = v(3);b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;

Vogliamo trovare un minimo per questa funzione vicino a (-0.6, -1.2, 0.135)v = [-0.6 -1.2 0.135];a = fminsearch(@three_var,v)a =0.0000 -1.5708 0.1803

Page 21: Programmare a MATLAB_partII

21

41

Opzioni per la MinimizzazioneSi possono specificare opzioni di controllo che assegnano alcuniparametri di minimizzazione utilizzando le sintassi:x = fminbnd(fun,x1,x2,options)x = fminsearch(fun,x0,options)

options è una struttura usata dalle funzioni di ottimizzazione. Si usa optimset per assegnare i valori alla struttura options:options = optimset('Display','iter');

fminbnd e fminsearch usano solo i parametri riportati di seguito.options.Display I passi intermedi nella minimizzazione vengono visualizzati sullo schermo se si assegna 'iter‘ a questa opzione; se, altrimenti, si assegna'off', non verranno visualizzate le soluzioni intermedie; se, infine, si assegna ‘final’ verrà visualizzato soltanto il risultato finale.options.TolX La tolleranza di arresto per x. Il valore di default è 1.e-4.options.TolFun (fminsearch) La tolleranza di arresto per il valore della funzione. Il valore di default è 1.e-4.options.MaxFunEvals Il massimo numero di iterazioni previsto. Il valore didefault è 500 per fminbnd e 200*length(x0) per fminsearch.

42

Trovare gli Zeri di FunzioniLa funzione fzero cerca per quale valore una equazione di una variabile si annulla.Tale funzione accetta come condizione iniziale sia un valore (punto di partenza) sia un vettore di due elementi che rappresenta un intervallo. Fornendo a fzero un punto di partenza x0, fzero inizialmente cerca un intervallo intorno a questo punto in cui la funzione cambia segno.

Se lo trova, fzero restituisce un valore vicino a quello in cui la funzione cambia segno. Altrimenti, restituisce NaN.

In alternativa, se si conoscono due punti dove la funzione assume segni opposti, si può specificare l’intervallo iniziale tramite un vettore di due elementi; fzero sicuramenterestringerà questo intervallo fino a restituire un valore vicinoal punto di cambiamento di segno.

Page 22: Programmare a MATLAB_partII

22

43

EsempioUsiamo fzero per calcolare uno zero della funzione humps vicino a-0.2a = fzero(@humps,-0.2)

a =

-0.1316

fzero cerca in un intorno di -0.2 fin quando trova un cambio di segno tra -0.10949 and -0.264. Questo intervallo viene poi ristretto fino a -0.1316. Possiamo verificare che in -0.1316 la funzione assume un valore molto vicino a zero:humps(a)ans =

8.8818e -16

Supponiamo ora di conoscere due punti dove i valori della funzione humps hanno segno opposto come per es. x = 1 and x = -1.

44

Esempio (segue)humps(1)ans =16humps(-1)ans =-5.1378

Possiamo allora fornire questo intervallo ad fzero che restituirà un punto vicino a dove la funzione cambia segno.Possiamo anche visualizzare i risultati passo passo. Le iterazioni dell’algoritmo prevedono la bisezione o l’interpolazione che vengono indicate nell’ultima colonna dal titolo “Procedure”. Nel caso in cui si parta da un solo punto anziché da un intervallo, i primi passi potrebbero includere alcune iterazioni in cui fzerocerca un intervallo che contenga un cambio di segno.Si può specificare la tolleranza dell’errore relativo tramite optimset. Se si passa una matrice vuota verrà utilizzato il valore di default (eps).

Page 23: Programmare a MATLAB_partII

23

45

... in codiceoptions = optimset('Display','iter');

a = fzero(@humps,[-1 1],options)

interpolation-9.76996e-15-0.131618 12

interpolation-2.7935e-11-0.13161810

interpolation8.88178e-16-0.13161811

a =-0.1316

interpolation1.88371e-07-0.1316189

interpolation-0.0011492-0.1316668

interpolation-0.0226907-0.1325627

interpolation-0.423446-0.1502146

bisection0.414441-0.1152875

interpolation-3.83767-0.4736354

bisection71.63820.2430623

interpolation-4.02235-0.513876 2

initial1611

initial-5.13779-11

Proceduref(x)xFunc-count

46

Integrazione Numerica (Quadrature)L’area al di sotto di una sezione di una funzione F(x) può essere calcolata integrando numericamente F(x), un processo noto comequadrature. Le funzioni quadrature in MATLAB sono:

I. quad Usa il metodo adattativo di SimpsonII. quadl Usa il metodo adattativo di LobattoIII. dblquad Calcola numericamente integrali doppiIV. triplequad Calcola numericamente integrali tripli

Per integrare la funzione definita in humps.m da 0 a 1:q = quad(@humps,0,1)q =29.8583

Entrambi quad e quadl lavorano ricorsivamente. Quando incontrano una possibile singolarità visualizzano un warning.Si può passare a quad o a quadl un quarto argomento che specifica la tolleranza dell’errore relativo per l’integrazione. Se si specifica anche un quinto argomento non nullo vengono visualizzate anche i valori delle funzioni calcolati ad ogni iterazione

Page 24: Programmare a MATLAB_partII

24

47

Esempio: Calcolare la lunghezza di una curvaConsideriamo la curva parametrizzata dalle equazioni:x(t) = sin(2t), y(t) = cos(t), z(t) = tdove t∈[0,3p].Un grafico in 3-D di questa funzione èt = 0:0.1:3*pi;plot3(sin(2*t),cos(t),t)

Esiste un teorema che ci dice che la lunghezza della curva è l’integrale della norma delle derivate delle equazioni parametrizzate:

Definiamo la funzione hcurve che calcola l’integrandofunction f = hcurve(t)f = sqrt(4*cos(2*t).^2 + sin(t).^2 + 1);

Calcoliamo l’integrale tramite quadlen = quad(@hcurve,0,3*pi)len =1.7222e+01

La lunghezza di questa curva è circa 17.2.

∫ ++π3

0

22 1)(sin)2(cos4 dt tt

48

Esempio: Integrale doppioVogliamo risolvere per via numerica l’integrale

Sia f(x,y)=ysin(x)+xcos(y). Il primo passo consiste nel costruire la funzione da calcolare. La funzione deve restituire un vettore d’uscita dato un vettore in ingresso. Bisogna anche tenere presente qualevariabile compete all’integrale più interno e quale a quello più esterno. Inquesto nostro esempio, la variabile più interna è x e quella più esterna y (l’ordine nell’integrale è dxdy).In questo caso, la funzione integranda saràfunction out = integrnd(x,y)out = y*sin(x) + x*cos(y);

Per calcolare l’integrale abbiamo a disposizione due funzioni, quad e quadl, che possono essere chiamate da dblquad. Questo M-file calcola il loop più esterno usando quad o quadl. Ad ogni iterazione, quad (quadl)chiama una seconda funzione ausiliaria che calcola il ciclo più interno.Per calcolare l’integrale doppio si usaresult = dblquad(@integrnd,xmin,xmax,ymin,ymax);

∫ ∫MAX

MIN

MAX

MIN

y

y

x

x

dxdyyxf ),(

Page 25: Programmare a MATLAB_partII

25

49

Esempio (segue)@integrnd è una stringa che rappresenta il nome della funzione integrandaxmin esprime il limite inferiore dell’integrale più internoxmax esprime il limite superiore dell’integrale più internoymin esprime il limite inferiore dell’integrale più esternoymax esprime il limite superiore dell’integrale più esterno

Ad esempio:xmin = pi;xmax = 2*pi;ymin = 0;ymax = pi;result = dblquad(@integrnd,xmin,xmax,ymin,ymax)result = -9.8698.Per default, dblquad chiama quad. Per svolgere l’integrale doppio dell’esempio proposto usando quadl (assumendo come tolleranza il valore di default), si usa result = dblquad(@integrnd,xmin,xmax,ymin,ymax,[],@quadl);

Si può passare a dblquad qualsiasi nome di funzione quadraturedefinita dall’utente purché ovviamente abbia gli stessi argomenti di ingresso e di uscita di quad

50

MATLAB – Calcolo NumericoPolinomiEquazioni alle differenze e filtraggiAnalisi di Fourier e FFT Curve di Regressione

Page 26: Programmare a MATLAB_partII

26

51

Operazioni su/con PolinomiRappresentare i polinomi in MATLABCalcolare le radici di un polinomioCalcolare i coefficienti del polinomio

caratteristico di una matriceCalcolare un polinomio per un certo valore della variabileMoltiplicazione/divisione tra polinomiDerivata di un polinomioTrovare il polinomio che meglio approssima l’andamento di punti dati (es. dati sperimentali)Conversioni tra espansioni in fratti semplici e coefficienti del polinomio associato

52

Elenco delle Funzioni per i Polinomi

Trova le radici di un polinomiorootsEspansione in fratti semplici (residui)residueCalcolo di polinomi matricialipolyvalmCalcolo di polinomipolyvalRegressione di curve tramite polinomipolyfitCalcola la derivata di un polinomiopolyder

Date le radici di un polinomio ne calcola i coefficienti

polyDivisione di polinomideconvMoltiplicazione di polinomiconvDESCRIZIONEFUNZIONE

Page 27: Programmare a MATLAB_partII

27

53

Rappresentazione dei PolinomiMATLAB rappresenta un polinomio tramite un vettore riga Gli elementi di tale vettore riga sono i coefficienti del polinomio ordinati secondo le potenze decrescentiAd esempio, per rappresentare in MATLAB il polinomio:

p(x) = x3 – 2x – 5

bisogna definire il vettorep = [1 0 -2 -5]

54

Calcolo delle radici di un polinomioIl calcolo delle radici di un polinomio viene fatto dalla funzione roots:r = roots(p)r =2.0946-1.0473 + 1.1359i-1.0473 - 1.1359i

Per convenzione, MATLAB salva le radici in vettori colonnaLa funzione inversa a roots, ossia la funzione che date in ingresso le radici di un polinomio ne calcola i coefficienti, si chiama poly:p2 = poly(r)p2 =1 8.8818e-16 -2 -5

Page 28: Programmare a MATLAB_partII

28

55

Polinomi CaratteristiciLa funzione poly calcola anche i coefficienti del polinomio caratteristico di una matriceA = [1.2 3 -0.9; 5 1.75 6; 9 0 1];poly(A)ans =1.0000 -3.9500 -1.8500 -163.2750

Le radici di questo polinomio, calcolate con roots, sono le radici caratteristiche, o autovalori, della matrice A. (Per calcolare direttamente gli autovalori(eigenvalues in inglese) di una matrice esiste la funzione eig)

56

Calcolo di un PolinomioLa funzione polyval calcola un polinomio per un dato valore. Per es. calcoliamo p(s) = s3–2s–5 per s = 5:polyval(p,5)

ans =110

E’ anche possibile calcolare un polinomio la cui variabile sia una matrice. In questo caso p(s)=s3–2s–5 diventa p(X)=X3–2X–5Idove X è una matrice quadrata e I è la matrice identità. Per es. Definiamo una matrice X e calcoliamo il polinomio p in X:X = [2 4 5; -1 0 3; 7 1 5];

Y = polyvalm(p,X)Y =

377 179 439

111 81 136490 253 639

Page 29: Programmare a MATLAB_partII

29

57

Moltiplicazione e Divisione di PolinomiLe operazioni di moltilicazione e divisione di polinomi corrispondono alle operazioni di convoluzione e deconvoluzioneimplementate nelle funzioni conv e deconvAd es., vogliamo calcolare il prodotto dei polinomi

a(s)=s2+2s+3 e b(s)=4s2+5s+6Definiamo:a = [1 2 3]; b = [4 5 6];

Il prodotto risulta:c = conv(a,b)c =4 13 28 27 18

Per riottenere uno dei fattori dal prodotto, uso invece la deconvoluzione:[q,r] = deconv(c,a)q =4 5 6r =0 0 0 0 0

58

Derivare un PolinomioSi usa la funzione polyder . Per es., per calcolare la derivata del polinomio p = [1 0 -2 -5]:q = polyder(p)q =3 0 -2

polyder calcola anche la derivata del prodotto o della divisione di due polinomi. Per es., siano:a = [1 3 5];b = [2 4 6];

La derivata del prodotto a*b si ottiene lanciando polyder con una sola variabile d’uscita:c = polyder(a,b)c =8 30 56 38

Se invece chiedo 2 variabili di uscita, polyder restituisce a/b:[q,d] = polyder(a,b)q =-2 -8 -2d =4 16 40 48 36

Page 30: Programmare a MATLAB_partII

30

59

Approssimare con un polinomio l’andamento di punti dati

polyfit trova i coefficienti del polinomio di ordine assegnato che meglio approssima un insieme di dati in termini dell’errore quadratico medio

p = polyfit(x,y,n)

dove x e y sono i vettori che contengono i dati x e y=f(x) da approssimare, e n è l’ordine del polinomio richiestoEsempio:x = [1 2 3 4 5]; y = [5.5 43.1 128 290.7 498.4];p = polyfit(x,y,3)p =-0.1917 31.5821 -60.3262 35.3400x2 = 1:.1:5;y2 = polyval(p,x2);plot(x,y,'o',x2,y2)grid on

60

Espansione in fratti sempliciLa funzione residue effettua l’espansione in fratti semplici del rapporto di due polinomiQuesta rappresentazione è particolarmente utile per applicazioni in cui si rappresentino i sistemi tramite la loro funzione di trasferimento. Per due polinomi b e a, se non ci sono radici multiple, si ha

dove r è un vettore colonna che contiene i residui, p è un vettore colonna che contiene i poli e k è un vettore riga che contiene i termini notiSe invece diamo in ingresso alla funzione residue tre variabili (r, p, e k), essa restituisce la forma polinomiale

sn

n kps

rps

rps

rsasb

+−

++−

+−

= ...)()(

2

2

1

1

Page 31: Programmare a MATLAB_partII

31

61

EsempioSi consideri la funzione di trasferimento:

Posso rappresentarla con i due polinomi b=[-4 8] ed a=[1 6 8][r,p,k] = residue(b,a)r =-128p =-4-2k =[][b2,a2] = residue(r,p,k)b2 =-4 8a2 =1 6 8

86ss8 4s-

2 +++

28

412

++

+−

ss

8684

)()(

22

2

+++−

=ss

ssasb

62

Regressioni e Fit di CurveSpesso è utile trovare delle funzioni che descrivano la relazione che esiste tra le variabili osservateL’identificazione dei coefficienti della legge selezionata spesso conduce alla formulazione di un sistema di equazioni lineariNoi consideremo i seguenti tipi di regressione:

PolinomialeLineare nei parametriRegressioni multiple

Supponiamo di aver misurato una grandezza y a diversi istanti del tempo t: t = [0 .3 .8 1.1 1.6 2.3]';y = [0.5 0.82 1.14 1.25 1.35 1.40]';plot(t,y,'o'), grid on

Page 32: Programmare a MATLAB_partII

32

63

Regressione PolinomialeDalla figura sembra che questi dati possano essere rappresentaticon un polinomio del tipo:

y=a0+a1t+a2t2

I coefficienti a0, a1, and a2 possono essere calcolati tramite un fitai minimi quadrati (least squares fit), che minimizza la somma dei quadrati delle deviazioni dei dati dal modello. Si ottengono 6equazioni in 3 incognite:

×

=

2

1

0

266

255

244

233

222

211

6

5

4

3

2

1

1

1

1

1

1

1

aaa

tttttttttttt

yyyyyy

64

Regressione Polinomiale (segue)Il sistema di equazioni può essere rappresentato dalla matrice 6x3X = [ones(size(t)) t t.^2]X =1.0000 0 01.0000 0.3000 0.09001.0000 0.8000 0.64001.0000 1.1000 1.21001.0000 1.6000 2.56001.0000 2.3000 5.2900

E la soluzione può essere calcolata utilizzando l’operatorebackslash:a = X\ya =0.53180.9191- 0.2387

Che corrisponde al seguente polinomio di secondo grado:y = 0.5318 + 0.9191 t - 0.2387 t2

Page 33: Programmare a MATLAB_partII

33

65

Regressione Polinomiale (segue)Adesso calcoliamo il modello su un insieme più “fitto” di punti a spaziatura regolare e sovrapponiamo su un unico grafico la curva di fitai dati originali.

T = (0:0.1:2.5)';Y = [ones(size(T)) T T.^2]*a;

plot(T,Y,'-',t,y,'o'), grid on

Questo fit non approssima perfettamente i dati. Per ottenere una approssimazione migliore potremmo aumentare l’ordine del polinomio di fit o considerare altre funzioni

66

Regressione “lineare nei parametri”Anziché una funzione polinomiale potremmo considerare una funzione “lineare nei parametri,” come per es. la funzione esponenziale:

y = a0+a1e-t+a2te-t

Risolvendo tramite l’operatore “backslash” il sistema dei minimi quadrati con la matrice di regressione X, otteniamo:

X = [ones(size(t)) exp(-t) t.*exp(-t)];a = X\yy = 1.3974 -0.8988 e-t+ 0.4097 te-t

Page 34: Programmare a MATLAB_partII

34

67

Regressione MultiplaQuando y è una funzione di più variabili indipendenti, la matrice rappresentativa del sistema di equazioni esprimerà la relazione tra le diverse variabiliSupponiamo di aver misurato una grandezzay = [.17 .26 .28 .23 .27 .24]';in corrispondenza di diversi valori dei parametri x1 e x2 dati dax1 = [.2 .5 .6 .8 1.0 1.1]';x2 = [.1 .3 .4 .9 1.1 1.4]';

Un modello a multivariabile per questi dati può essere:y = a0 + a1x1 + a2x2

Risolviamo secondo la procedura già vista:X = [ones(size(x1)) x1 x2];a = X\y

Il modello ai minimi quadrati dei dati considerati risulta:y = 0.1018 + 0.4844 x1 – 0.2847 x2

68

Fit Polinomiale o Esponenziale?

Sia y il vettore delle osservazioni di una certa grandezza in funzione di un parametro x. Un fit polinomiale di grado n dei dati y su x si calcola con il seguente comando: p = polyfit(x,y,n)yfit = polyval(p,x);

Dall’osservazione dei dati potrebbe sembrare più conveniente applicare un fit con una funzione esponenziale. Questo può essere fatto utilizzando le stesse funzioni (con n=1):logp1 = polyfit(x,log10(y),1);logpred1 = 10.^polyval(logp1,x);Figure(f), semilogy(x,logpred1,'-',x,y,'+');

Calcola il fit polinomialepolyvalFit con curve polinomialipolyfitDescriptionFunction

Page 35: Programmare a MATLAB_partII

35

69

Equazioni alle Differenze e FiltriEsistono in MATLAB delle funzioni (che operano principalmente su vettori) per lavorare con equazioni alle differenze finite e con i filtri.Tali vettori possono contenere segnali campionati o sequenze perl’elaborazione dei segnali e l’analisi di dati. In generale un’equazione alle differenze finite ha una espressione del tipo

e serve a rappresentare la relazione ingresso-uscita di un sottoinsieme dei sistemi lineari tempo invarianti (quelli per cui l’uscita può essere espressa da una combinazione lineare ricorsiva)

Per sistemi ad ingresso multiplo la matrice delle uscite dovrà essere definita in modo tale che ogni riga contenga i campioni relativi ad ogni ingresso in corrispondenza delle sue colonne

Sistema LTIx y

∑∑==

−=−M

mm

N

kk mnxbknya

00

)()(

70

La funzione filterLa funzioney = filter(b,a,x)

elabora i dati contenuti nel vettore x con il filtro descritto dai vettori a e b, creando il vettore dei dati filtrati y.Il comando filter può essere pensato come una efficiente implementazione dell’equazione alle differenze finite. La struttura di tale filtro è quella generale di un filtro tapped delay-line descritto dall’equazione alle differenzea(1)y(n) = b(1)x(n)+b(2)x(n-1)+...+b(nb)x(n- nb +1)-

- a(2)y(n-1)-...-b(na)y(n- na +1)

dove n è l’indice del campione attuale, na è l’ordine del polinomio descritto dal vettore a e nb è l’ordine del polinomiodescritto dal vettore b. L’uscita y(n) è una combinazione lineare dei valori della variabile d’ingresso attuali e precedenti, x(n) x(n-1) ..., e dei valori precedenti della variabile in uscita, y(n-1) y(n-2) ...

Page 36: Programmare a MATLAB_partII

36

71

EsempioSupponiamo di voler rendere più “morbido” l’andamento dei dati sul traffico con un filtro che media ogni punto dei dati su una finestra temporale “sliding” avente una durata di 4 ore. Questo processo è rappresentato dalla equazione alle differenze

In MATLAB:

a = 1;b = [1/4 1/4 1/4 1/4];load count.datx = count(:,1);y = filter(b,a,x);t = 1:length(x);plot(t,x,'-.',t,y,'-'), grid onlegend('Original Data',......'Smoothed Data',2)

)3(41

)2(41

)1(41

)(41

)( −+−+−+= nxnxnxnxny

72

Analisi di Fourier e Trasformata di Fourier Veloce (FFT)

FaseanglePorta lo zero delle frequenze al centro dello spettrofftshift

Moduloabs

Ordina i numeri in coppie complesse coniugatecplxpairCalcola la successiva potenza di duenextpow2

Trasformata di Fourier discreta inversa n-dimensionaleifftnTrasformata di Fourier discreta inversa bi-dimensionaleifft2Trasformata di Fourier discreta inversaifftTrasformata di Fourier discreta n-dimensionalefftnTrasformata di Fourier discreta bi-dimensionalefft2Trasformata di Fourier discretafftDescrizioneFunzione

Page 37: Programmare a MATLAB_partII

37

73

Statistics Toolbox For Use with MATLAB®

Probability density function (pdf)Cumulative distribution function (cdf)Inverse of the cumulative distribution functionRandom number generatorMean and variance as a function of the parameters

MATLAB

74

IntroduzioneLo Statistics Toolbox prevede 20 distribuzioni di probabilità, a ciascuna delle quali sono associate 5 funzioni:

Probability density function (pdf)Cumulative distribution function (cdf)Inverse of the cumulative distribution functionGeneratore di numeri casualiMedia e varianza in funzione dei parametri

Lo Statistics Toolbox contiene anche funzioni che effettuano i più comuni test delle ipotesiInfine, lo Statistics Toolbox include funzioni che generano numeri casuali con varie distribuzioni di probabilità. Queste funzioni si basano sull’uso delle ben note funzioni di MATLAB rand e/o randn per generare i loro outputs.

Page 38: Programmare a MATLAB_partII

38

75

Distribuzioni di Probabilità?Le distribuzioni di probabilità entrano in gioco quando si ha a che fare con esperimenti (prove) il cui esito è casuale. La natura stessa dell’esperimento impone quale distribuzione di probabilità può essere più appropriata per modellare gli esiti casuali di tale esperimento. Usare un modello statistico non dà la facoltà di prevedere il risultato di ogni singolo esperimento ma dà la probabilità che un dato risultato cada all’interno di un certo intervallo di valori. Ci sono due tipi di distribuzioni: continue e discrete.

76

EsempiSupponiamo di dover studiare una macchina che produce videocassette. Una misura della qualità del nastro è il numero di difetti visivi in ogni decina di metri di nastro.Il risultato di questo esperimento è un intero, perché non è possibile osservare 1.5 difetti. Per modellare questo esperimento dovremmo quindi usare una distribuzione di probabilità discreta.Una misura che influenza il costo e la qualità del nastro è il suo spessore. Costa infatti di più produrre nastri più spessi, mentre variazioni nello spessore del nastro sulla bobina aumentano la probabilità di rottura. Supponiamo di misurare lo spessore del nastro ogni 100 metri.Il risultato della misura può assumere un continuo di valori possibili, per cui è opportuno utilizzare una distribuzione continuaper modellizzare i risultati.

Page 39: Programmare a MATLAB_partII

39

77

Distribuzioni di Probabilità incluse nello Statistics Toolbox

WeibullUniformRayleighNormalLognormalGammaExponentialBetaContinue (dati)

Noncentral ttNoncentral Chi-squareChi-squareContinue (statistiche)

PoissonNegative BinomialHypergeometricGeometricDiscrete UniformBinomialDiscrete

78

Funzione Densità di Probabilità (pdf)La chiamata ad una funzione pdf ha lo stesso formato per ogni distribuzione definita nello Statistics Toolbox. I seguenti comandi mostrano come chiamare la pdf per la distribuzione NORMALE:x = [-3:0.1:3];f = normpdf(x,0,1);

La variabile f contiene la densità di probabilità della distribuzione normale (µ=0 e σ=1) in corrispondenza dei valori in x. Il primo argomento di ingresso di tutte le pdf è l’insieme di valori in cui si vuole calcolare la densità. Gli altri argomenti contengono tutti i parametri necessari per definire la distribuzione in maniera univoca. Per es. la distribuzione normale richiede due parametri, uno di posizione (la media, µ) ed uno di scala (la deviazionestandard, σ).

Page 40: Programmare a MATLAB_partII

40

79

Cumulative Distribution Function (cdf)La chiamata alla funzione cdf ha lo stesso formato generale per ogni distribuzione compresa nelloStatistics Toolbox.I seguenti comandi mostrano come chiamare la cdf per la distribuzione NORMALE:x = [-3:0.1:3];p = normcdf(x,0,1);

La variabile p contiene le probabilità associate alla cdfnormale, ossia con parametri µ=0 and σ=1, in corrispondenza dei valori in x. Il primo argomento di ingresso di tutte le cdf è l’insieme dei valori per i quali si vuole calcolare la probabilità. Gli altri argomenti contengono tutti i parametri necessari per definire la distribuzione in maniera univoca.

80

Generazione di Numeri CasualiI metodi per generare numeri casuali aventi una qualsiasi distribuzione sono basati sull’opportuna elaborazione di numeri casuali a distribuzione uniforme. Ci sono 3 metodi: diretto o tramite inversione o tramite rejection.

Il metodo dell’inversioneIl metodo dell’inversione è basato sul noto teorema fondamentaleche lega la distribuzione uniforme alle altre distribuzioni continue:Se F è una distribuzione continua avente inversa F -1, ed U è un numero casuale uniforme, allora F -1(U) segue la distribuzione F.Allora si può generare un numero casuale a distribuzione qualsiasi applicando la funzione inversa della distribuzione in esame ad un numero casuale a distribuzione uniforme.

Page 41: Programmare a MATLAB_partII

41

81

Funzioni per la Generazione di Numeri Casuali

Lo Statistics Toolbox contiene funzioni che generano numeri casuali per ciascuna delle distribuzioni elencate nella seguente tabella. Queste funzioni usano le funzioni di MATLAB rand e/o randn per generare le loro uscite.

randnmvnrndrandnlognrndrand, randniwishrndrandhygerndrandgeorndrandgamrndrand, randnfrndrandevrndrandexprndrand, randnchi2rndrandbinorndrand, randnbetarndDipendenzaFunzioni DipendenzaFunzioni

rand, randnnbinrnd

rand, randnmvtrnd

randnmvnrnd

rand, randnpoissrnd

randnnormrnd

randnncx2rnd

rand, randnnctrnd

rand, randnncfrnd

rand, randnnbinrnd

rand, randnmvtrnd

82

La sintassi per le funzioni che generano numeri casuali

Si possono generare numeri casuali distribuiti secondo ognuna delle distribuzioni previsteLe funzioni preposte forniscono un singolo valore casuale o una matrice di numeri casuali, in dipendenza dagli argomenti che si specificano nella chiamata alla funzione.

Esempio: Distribuzione Betar2 = betarnd(c,d)r2 =0.8931 0.48320.1316 0.2403r3 = betarnd(a,b,m)r3 =0.4196 0.6078 0.13920.0410 0.0723 0.0782r4 = betarnd(a,b,nrow,ncol)r4 =0.0520 0.3975 0.12840.3891 0.1848 0.5186

a = 1;b = 2;c = [.1 .5; 1 2];d = [.25 .75; 5 10];m = [2 3];nrow = 2;ncol = 3;r1 = betarnd(a,b)r1 =0.4469

scalare

matrice 2x2

matrici 2x3