MATLAB. Programmare in MATLAB. Le espressioni in MATLAB



Documenti analoghi
Introduzione al MATLAB c Parte 2

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Lezione 8. La macchina universale

Integrazione numerica

Documentazione esterna al software matematico sviluppato con MatLab

Interpolazione ed approssimazione di funzioni

4 3 4 = 4 x x x 10 0 aaa

Metodi Stocastici per la Finanza

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Dati importati/esportati

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

1) Si consideri un esperimento che consiste nel lancio di 5 dadi. Lo spazio campionario:

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Grafici tridimensionali

Matlab: Strutture di Controllo. Informatica B

I file di dati. Unità didattica D1 1

Funzioni in C. Violetta Lonati

Corso di Matematica per la Chimica

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

LE FUNZIONI A DUE VARIABILI

Introduzione al Foglio Elettronico

Informatica. Rappresentazione dei numeri Numerazione binaria

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

Finestre grafiche. >> figure >> figure(n)

INTRODUZIONE A MATLAB Matrix Laboratory

Introduzione allo Scilab Parte 3: funzioni; vettori.

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

FORMULE: Operatori matematici

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

PROBABILITÀ - SCHEDA N. 2 LE VARIABILI ALEATORIE

Comandi di Input/Output in Matlab

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Statistica inferenziale

Alcune regole di base per scrivere un programma in linguaggio C

PROGRAMMA SVOLTO NELLA SESSIONE N.

Rapida Introduzione all uso del Matlab Ottobre 2002

Analisi dei segnali nel dominio della frequenza

Fasi di creazione di un programma

Cosa è un foglio elettronico

INTRODUZIONE A EXCEL ESERCITAZIONE I

MATLAB (1) Introduzione e Operazioni con array

Facciamo qualche precisazione

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

RISOLUTORE AUTOMATICO PER SUDOKU

Plate Locator Riconoscimento Automatico di Targhe

Laboratorio di Informatica

Richiesta pagina PHP (es: index.php)

risulta (x) = 1 se x < 0.

Le equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete.

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

Dimensione di uno Spazio vettoriale

Algoritmi e strutture dati. Codici di Huffman

MINIMI QUADRATI. REGRESSIONE LINEARE

EQUAZIONI DIFFERENZIALI. 1. Trovare tutte le soluzioni delle equazioni differenziali: (a) x = x 2 log t (d) x = e t x log x (e) y = y2 5y+6

Interesse, sconto, ratei e risconti

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

CAPITOLO 16 SUCCESSIONI E SERIE DI FUNZIONI

Introduzione all analisi dei segnali digitali.

Il concetto di valore medio in generale

Librerie digitali. Video. Gestione di video. Caratteristiche dei video. Video. Metadati associati ai video. Metadati associati ai video

MODULO 4: FOGLIO ELETTRONICO (EXCEL)

Probabilità condizionata: p(a/b) che avvenga A, una volta accaduto B. Evento prodotto: Evento in cui si verifica sia A che B ; p(a&b) = p(a) x p(b/a)

Un po di statistica. Christian Ferrari. Laboratorio di Matematica

La distribuzione Normale. La distribuzione Normale

Controlli Automatici T. Trasformata di Laplace e Funzione di trasferimento. Parte 3 Aggiornamento: Settembre Prof. L.

Convertitori numerici in Excel

Elementi di Psicometria con Laboratorio di SPSS 1

Soluzione di equazioni quadratiche

SISTEMI DI NUMERAZIONE E CODICI

Approssimazione polinomiale di funzioni e dati

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Relazioni statistiche: regressione e correlazione

Introduzione al Linguaggio C

ESTRAZIONE DI RADICE

Utilizzo delle formule in Excel

Pre Test Matematica

Il menu File contiene tutti i comandi relativi alle seguenti operazioni:

Sistemi di Numerazione

Informazione analogica e digitale

la scienza della rappresentazione e della elaborazione dell informazione

Corso di Informatica

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

Esercitazione #5 di Statistica. Test ed Intervalli di Confidenza (per una popolazione)

Matematica in laboratorio

Prof.ssa Paola Vicard

Capitolo 12 La regressione lineare semplice

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

La trasformata Zeta. Marco Marcon

L analisi dei dati. Capitolo Il foglio elettronico

Struttura logica di un programma

Capitolo 13: L offerta dell impresa e il surplus del produttore

if t>=0 x=1; else x=0; end fornisce, nella variabile x, il valore della funzione gradino a tempi continui, calcolata in t.

Programmazione dinamica

Esercitazione 1 del corso di Statistica 2 Prof. Domenico Vistocco

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

SPC e distribuzione normale con Access

Salvare e importare dati

Transcript:

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

I Numeri MATLAB usa la notazione decimale convenzionale con segno La notazione scientifica usa la lettera e (E) per specificare il fattorediscalain potenzedi10. I numeri complessi usano i o j come suffisso. Tuttii calcolieffettuatiin MATLAB sonoeseguitiin doppia precisione, ma si possono visualizzare in un formato diverso usando i comandi: format short format long Format short e Format long e Virgola fissa con 4 decimali Virgola fissa con 15 decimali Notazione scientifica 4 dec. Notazione scientifica 15 dec. 3 Esempio x = [4/3 1.2345e-6] format short format short e format short g format long format long e format long g format bank format rat format hex 1.3333 0.0000 1.3333e+000 1.2345e-006 1.3333 1.2345e-006 1.33333333333333 0.00000123450000 1.333333333333333e+000 1.234500000000000e-006 1.33333333333333 1.2345e-006 1.33 0.00 4/3 1/810045 3ff5555555555555 3eb4b6231abfd271 4

Le Costanti Nome pi i, j eps realmin realmax Inf NaN Valore 3.14159265 Unità immaginarie, sqrt(-1) Floating-point relative precision, 2-52 Smallest floating-point number, 2-1022 Largest floating-point number, (2-ε)2 1023 Infinito Not-a-number NOTA I nomi delle costanti non sono riservati : si può sovrascrivere ognuno di essi con una nuova variabile Il valore originale può essere ripristinato digitando clear nome_costante Infinito viene generato quando si divide per zero un valore non nullo o quando ben definite espressioni matematiche forniscono un risultato che supera il massimo limite realmax NaN viene generato quando si vogliono valutare forme indeterminate del tipo 0/0 o Inf-Inf 5 Le Variabili MATLAB non richiede che le variabili siano dichiarate o dimensionate all inizio del programma Quando 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 il nome sulla linea di comando senza punto e virgola oppure cliccare sulla variabile mostrata sul Workspace Browser. 6

Operatori (Richiamo) Le espressioni usano i ben noti operatori aritmetici e le regole della precedenza aritmetica. + - * / \ ^ '.*.^ ecc. Somma Sottrazione Moltiplicazione Divisione Divisione a Sinistra Elevamento a Potenza Trasposta Complessa Coniugata Esegue le operazioni *, ^, ecc. elemento per elemento 7 Generazione di Matrici zeros Contiene tutti zeri ones Contiene tutti uno rand Gli elementi hanno valori casuali uniformemente distribuiti randn Gli elementi hanno valori casuali a distribuzione normale Alcuni esempi: 8

Le Funzioni MATLAB fornisce un gran numero di funzioni matematiche elementari, come abs, sqrt, exp, and sin. NOTA: Effettuare la radice quadrata o il logaritmo di un numero negativo non dà errore: il risultatocorretto(complesso) viene calcolato 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 funzioni matematiche elementari I comandi help specfun e help elmat forniscono rispettivamente una lista delle funzioni più complesse e delle funzioni matriciali Alcune 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 persino modificarlo a piacere 9 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 10

Program Files MATLAB è sia un linguaggio di programmazione molto potente sia un ambiente di calcolo interattivo I files che contengono codice in linguaggio MATLAB si chiamano M-files M-files possono essere creati utilizzando un qualsiasi text editor, e poi possono essere usati esattamente come ogni altra funzione o comando MATLAB nella command window. Ci sono due tipi di M-files: Scripts (macro) che non accettano variabili in ingresso nè forniscono variabili in uscita, bensì lavorano con i dati nel workspace. Funzioni che accettano/richiedono normalmente variabili in ingresso e restituiscono variabili in uscita. Le variabili interne costituiscono variabili 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 cheapparenelsearch path. 11 Scripts Quando viene lanciato uno script, MATLAB semplicemente esegue i comandi che trova nel file Gli scripts possono lavorare su dati esistenti nel workspace, o possono crearne di nuovi su cui lavorare. Gli scripts non restituiscono alcuna variabile di uscita Tutte le variabili che essi creano rimangono nel workspace e possono essere utilizzate per calcoli successivi. Gli scripts possono produrre uscite grafiche utilizzando funzioni come plot. 12

Esempio di Script Creiamo con l editor un file script che chiamiamo magicrank.m che contiene i seguenti comandi MATLAB: % script magicrank.m % Investigate the rank of magic squares r=zeros(1,32); for n=3:32 r(n)=rank(magic(n)); end r bar(r) 13 Uscita dello Script magicrank.m Lanciare l istruzione magicrank fa sì che MATLAB esegua i comandi, calcoli il rango delle prime 30 matrici magic, e visualizzi il risultato tramite un diagramma a barre. Quando l esecuzione del file è finita le variabili n e r restano nel workspace. 14

Le Funzioni Le funzioni sono degli M-files che accettano variabili d ingresso e restituiscono variabili in uscita Il nome dell M-file dovrebbe essere nomefunzione.m Le funzioni lavorano sulle variabili all interno del loro workspace che è separato dal workspace al quale possiamo accedere dal prompt di MATLAB. La prima riga di una funzione M-file inizia con la parola chiave function. Questo esprime il nome della funzione e l ordine delle variabili d ingresso. Le righe successive fino al primo spazio o alla prima linea eseguibile sono righe di commento che forniscono il testo dell help 15 Esempi di funzioni L 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); 16

Esempi di Funzioni (segue) In questo caso si hanno fino a 2 variabili d ingresso e una variabile d uscita. Digitando help rank sulla command window MATLAB visualizzerà tutto quello che è scritto all inizio della funzione come commento Il 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 nella funzione; sono separate da tutte le altre variabili contenute nel workspace. Questo esempio mostra un aspetto delle funzioni di MATLAB che non si trova solitamente in altri linguaggi di programmazione un numero variabile di argomenti 17 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 viene memorizzto 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 nargin and nargout dicono il numero di variabili di ingresso e d uscita utilizzato per ogni particolare uso della funzione. La funzione rank usa nargin, mentre non ha bisogno di usare nargout. 18

Variabili Globali Per 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 assegnato a GRAVITY al prompt disponibile anche all interno della funzione. 19 Vettorizzazione Per rendere MATLAB più veloce ed efficiente possibile è importante vettorizzare 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 è importante bisogna sempre cercare di vettorizzare il proprio algoritmo. 20

Pre-definizione Qualora non fosse prorpio possibile vettorizzare un pezzo di codice, si possono rendere i cicli più veloci pre-definendo i vettori o le matrici in cui andranno memorizzati i risultati Esempio: r = zeros(32,1); for n=1:32 r(n) = rank(magic(n)); end Senza la pre-definizione nell esempio precedente l 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 rende più veloce l esecuzione. 21 Istruzioni di Flow Control I costrutti di MATLAB di tipo flow control: if switch and case for while continue break 22

L Operatore IF La forma generale del costrutto IF-THEN-ELSE è la stessa di un qualsiasi linguaggio di programmazione: if condizione1, operazioni1; elseif condizione2, operazioni2; else operazioni3; end; L istruzione if valuta una espressione logica ed esegue un gruppo di istruzioni solo quando l espressione è verificata. Le istruzioni elseif e else permettono l esecuzione di gruppi alternativi di istruzioni. La parola end, che chiude un if, termina l ultimo gruppo di istruzioni. I gruppi di istruzioni sono delineati dalle 4 parole chiave e non sono necessarie parentesi graffe nè quadre. 23 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: <, > <=, >= == ~= & ~ maggiore di, minore di non superiore a, non inferiore a uguale diverso and logico or logico not logico 24

L Operatore IF - Esempio Operazioni1,2,3 sono le operazioni da compiere se la condizione corrispondente risulta vera. Le varie istruzioni sono 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; else disp ('Errore!!!'); end; 25 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 aspetta quando A e B sono scalari. Quando A e B sono matrici, A == B non va a verificare SE A e B sono uguali, ma testa DOVE sono uguali, ossia per quali elementi; ne risulta 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 26

L Istruzione Switch L istruzione switch esegue gruppi di istruzioni in dipendenza dal valore di una variabile o di una espressione. Le parole chiave case e otherwise indicano i gruppi. Viene eseguito solo il primo caso che corrisponde Lo switch deve sempre essere chiuso con un end. Diversamente dal linguaggio C l istruzione switch in MATLAB esegue il caso corrispondente alla prima condizione verificata ed esce, quindi l istruzione break non è richiesta. 27 Istruzioni per Cicli I cicli si possono fare con due diversi costrutti: Il ciclo for ripete un gruppo di istruzioni un numero fisso, 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 passo indicato in step. Un end dopo l ultima istruzione indica la fine del ciclo Oppure... 28

Istruzioni per Cicli (segue) Il ciclo while ripete un gruppo di istruzioni per un numero indefinito di volte sotto il controllo di una condizione logica. while condizione, operazioni; end; Il ciclo esegue le operazioni (separate da virgole) fino a che la condizione è verificata. La condizione viene costruita con le stesse regole (vincoli ed operatori) di quella dell'if-then-else. 29 Esempi for n = 3:32 r(n) = rank(magic(n)); end r for i = 1:m for j = 1:n H(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 30

L Istruzione Break L 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 nel quale è contenuto Esempio: 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 break elseif sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end x 31 Importare ed Esportare Dati Ci sono varie tecniche per importare nel workspace di MATLAB i dati creati da altre applicazioni, compreso un Import Wizard Ed altrettante per salvare le variabili contenute nel workspace in un formato tale da poter essere utilizzate da altre applicazioni L 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 Current Directory 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 load che salvano e richiamano file con estensione.mat, che però possono essere utilizzati solo in Matlab Altrimenti si possono utilizzare i comandi standard di scrittura e lettura di un file di testo 32

LOAD File I/O load carica nel workspace tutte le variabili contenute in matlab.mat load filename carica nel workspace tutte le variabili contenute in filename Se 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 filename obbliga load a considerare il file come un file ASCII o un file MAT, senza curarsi dell 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. SAVE save salva tutte le variabili del workspace in formato binario nella directory corrente in un MAT-file chiamato matlab.mat. save filename salva tutte le variabili del workspace in filename.mat nella directory corrente. save filename var1 var2... Salva solo le variabili specificate in filename.mat. save... option salva le variabili del workspace nel formato specificato da option 33 I/O su file di testo Per 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 testo qualsiasi. 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 numeri in formato %g A = fscanf ( fid, %g %g, [2 inf] ); 34

MATLAB Cenni di Analisi Numerica Minimizzazione di funzioni Calcolare gli zeri di una funzione Integrazione numerica 35 Come Rappresentare le Funzioni Le funzioni matematiche possono essere espresse come vere e proprie funzioni MATLAB in M-files o come oggetti inline. Consideriamo per es. la funzione 1 1 f( x) = + 6 2 2 ( x 0.3) + 0.01 ( x 0.9) + 0.04 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 (letteralmente manico) per humps, da passare alla funzione feval. fh = @humps; feval(fh,2.0) ans = -4.8552 36

Come Rappresentare le Funzioni - 2 Come oggetto inline f = 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 il comando inline specificando i nomi delle variabili di ingresso insieme all espressione della funzione Per esempio: f= inline('y*sin(x)+x*cos(y)','x','y') f(pi,2*pi) ans = 3.1416 37 Minimizzare funzioni di una variabile Data 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 restituisce x = 0.6370 Si può anche ottenere una tabella di output passando a fminbnd una quarta variabile di ingresso creata dal comando optimset: x = fminbnd(@humps,0.3,1,optimset('display','iter')) 38

Minimizzare funzioni di una variabile - 2 Il risultato sarà: Func-count 1 2 3 4 5 6 7 8 9 x = 0.6370 x 0.567376 0.732624 0.465248 0.644416 0.6413 0.637618 0.636985 0.637019 0.637052 f(x) 12.9098 13.7746 25.1714 11.2693 11.2583 11.2529 11.2528 11.2528 11.2528 Procedure Initial Golden Golden Parabolic Parabolic Parabolic Parabolic Parabolic Parabolic Il risultato mostra il valore corrente di x ed il valore della funzione f(x) ad ogni istante in cui viene calcolata la funzione. Per fminbnd calcolare la funzione corrisponde 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. 39 Minimizzare funzioni di più variabili La funzione fminsearch è simile a fminbnd ma lavora con funzioni di più variabili, ed è necessario definire le condizioni iniziali tramite un vettore x 0 anziché tramite un intervallo. fminsearch cerca un punto di minimo locale della funzione matematica che sia vicino al vettore x 0 e restituisce tale valore in un vettore x. Esempio function 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 40

Opzioni per la Minimizzazione Si possono specificare opzioni di controllo che assegnano alcuni parametri 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 di default è 500 per fminbnd e 200*length(x0) per fminsearch. 41 Trovare gli Zeri di Funzioni La 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 x 0, 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 sicuramente restringerà questo intervallo fino a restituire un valore vicino al punto di cambiamento di segno. 42

Esempio Usiamo fzero per calcolare uno zero della funzione humps vicino a -0.2 a = 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. 43 Esempio (segue) humps(1) ans = 16 humps(-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 fzero cerca 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). 44

... in codice options = optimset('display','iter'); a = fzero(@humps,[-1 1],options) Func-count x f(x) Procedure 1-1 -5.13779 initial 1 1 16 initial 2-0.513876-4.02235 interpolation 3 0.243062 71.6382 bisection 4-0.473635-3.83767 interpolation 5-0.115287 0.414441 bisection 6-0.150214-0.423446 interpolation 7-0.132562-0.0226907 interpolation 8-0.131666-0.0011492 interpolation 9-0.131618 1.88371e-07 interpolation 10-0.131618-2.7935e-11 interpolation 11-0.131618 8.88178e-16 interpolation 12-0.131618-9.76996e-15 interpolation a = -0.1316 45 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 come quadrature. Le funzioni quadrature in MATLAB sono: I. quad Usa il metodo adattativo di Simpson II. quadl Usa il metodo adattativo di Lobatto III. dblquad Calcola numericamente integrali doppi IV. 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 46

Esempio: Calcolare la lunghezza di una curva Consideriamo la curva parametrizzata dalle equazioni: x(t) = sin(2t), y(t) = cos(t), z(t) = t dove 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: 3π 2 2 4 cos(2 t) + sin ( t) + 1 dt 0 Definiamo la funzione hcurve che calcola l integrando function f = hcurve(t) f = sqrt(4*cos(2*t).^2 + sin(t).^2 + 1); Calcoliamo l integrale tramite quad len = quad(@hcurve,0,3*pi) len = 1.7222e+01 La lunghezza di questa curva è circa 17.2. 47 Esempio: Integrale doppio Vogliamo risolvere per via numerica l integrale y MAX y MIN xmax xmin f ( x, y) dxdy 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 quale variabile compete all integrale più interno e quale a quello più esterno. In questo 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 usa result = dblquad(@integrnd,xmin,xmax,ymin,ymax); 48

Esempio (segue) @integrnd è una stringa che rappresenta il nome della funzione integranda xmin esprime il limite inferiore dell integrale più interno xmax esprime il limite superiore dell integrale più interno ymin esprime il limite inferiore dell integrale più esterno ymax 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 quadrature definita dall utente purché ovviamente abbia gli stessi argomenti di ingresso e di uscita di quad 49 MATLAB Calcolo Numerico Polinomi Equazioni alle differenze e filtraggi Analisi di Fourier e FFT Curve di Regressione 50

Operazioni su/con Polinomi Rappresentare i polinomi in MATLAB Calcolare le radici di un polinomio Calcolare i coefficienti del polinomio caratteristico di una matrice Calcolare un polinomio per un certo valore della variabile Moltiplicazione/divisione tra polinomi Derivata di un polinomio Trovare il polinomio che meglio approssima l andamento di punti dati (es. dati sperimentali) Conversioni tra espansioni in fratti semplici e coefficienti del polinomio associato 51 Elenco delle Funzioni per i Polinomi FUNZIONE conv deconv poly polyder polyfit polyval polyvalm residue roots DESCRIZIONE Moltiplicazione di polinomi Divisione di polinomi Date le radici di un polinomio ne calcola i coefficienti Calcola la derivata di un polinomio Regressione di curve tramite polinomi Calcolo di polinomi Calcolo di polinomi matriciali Espansione in fratti semplici (residui) Trova le radici di un polinomio 52

Rappresentazione dei Polinomi MATLAB rappresenta un polinomio tramite un vettore riga Gli elementi di tale vettore riga sono i coefficienti del polinomio ordinati secondo le potenze decrescenti Ad esempio, per rappresentare in MATLAB il polinomio: p(x) = x 3 2x 5 bisogna definire il vettore p = [1 0-2 -5] 53 Calcolo delle radici di un polinomio Il 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 colonna La 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 54

Polinomi Caratteristici La funzione poly calcola anche i coefficienti del polinomio caratteristico di una matrice A = [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) 55 Calcolo di un Polinomio La funzione polyval calcola un polinomio per un dato valore. Per es. calcoliamo p(s) = s 3 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)=s 3 2s 5 diventa p(x)=x 3 2X 5I dove 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 136 490 253 639 56

Moltiplicazione e Divisione di Polinomi Le operazioni di moltilicazione e divisione di polinomi corrispondono alle operazioni di convoluzione e deconvoluzione implementate nelle funzioni conv e deconv Ad es., vogliamo calcolare il prodotto dei polinomi a(s)=s 2 +2s+3 e b(s)=4s 2 +5s+6 Definiamo: 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 6 r = 0 0 0 0 0 57 Derivare un Polinomio Si 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 -2 d = 4 16 40 48 36 58

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 richiesto Esempio: 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.3400 x2 = 1:.1:5; y2 = polyval(p,x2); plot(x,y,'o',x2,y2) grid on 59 Espansione in fratti semplici La funzione residue effettua l espansione in fratti semplici del rapporto di due polinomi Questa 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 b( s) r1 r2 rn = + +... + + ks as ( ) s p1 s p2 s pn 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 noti Se invece diamo in ingresso alla funzione residue tre variabili (r, p, e k), essa restituisce la forma polinomiale 60

Esempio Si consideri la funzione di trasferimento: - 4s + 8 2 s + 6s + 8 Posso rappresentarla con i due polinomi b=[-4 8] ed a=[1 6 8] [r,p,k] = residue(b,a) r = -12 8 p = -4-2 k = [] s [b2,a2] = residue(r,p,k) b2 = -4 8 a2 = 1 6 8 12 + 4 + 8 s + 2 b2( s) = a( s) 2 4s + 8 2 s + 6s + 8 61 Regressioni e Fit di Curve Spesso è utile trovare delle funzioni che descrivano la relazione che esiste tra le variabili osservate L identificazione dei coefficienti della legge selezionata spesso conduce alla formulazione di un sistema di equazioni lineari Noi consideremo i seguenti tipi di regressione: Polinomiale Lineare nei parametri Regressioni 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 62

Regressione Polinomiale Dalla figura sembra che questi dati possano essere rappresentati con un polinomio del tipo: y=a 0 +a 1 t+a 2 t 2 I coefficienti a 0, a 1, and a 2 possono essere calcolati tramite un fit ai minimi quadrati (least squares fit), che minimizza la somma dei quadrati delle deviazioni dei dati dal modello. Si ottengono 6 equazioni in 3 incognite: y y y y y y 1 2 3 4 5 6 = 1 1 1 1 1 1 t t t t t t 1 2 3 4 5 6 2 t1 2 t2 2 t 3 2 t4 2 t 5 2 t6 a0 a1 a 2 63 Regressione Polinomiale (segue) Il sistema di equazioni può essere rappresentato dalla matrice 6x3 X = [ones(size(t)) t t.^2] X = 1.0000 0 0 1.0000 0.3000 0.0900 1.0000 0.8000 0.6400 1.0000 1.1000 1.2100 1.0000 1.6000 2.5600 1.0000 2.3000 5.2900 E la soluzione può essere calcolata utilizzando l operatore backslash: a = X\y a = 0.5318 0.9191-0.2387 Che corrisponde al seguente polinomio di secondo grado: y = 0.5318 + 0.9191 t - 0.2387 t 2 64

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 fit ai 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 65 Regressione lineare nei parametri Anziché una funzione polinomiale potremmo considerare una funzione lineare nei parametri, come per es. la funzione esponenziale: y = a 0 +a 1 e -t +a 2 te -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\y y = 1.3974-0.8988 e -t + 0.4097 te -t 66

Regressione Multipla Quando y è una funzione di più variabili indipendenti, la matrice rappresentativa del sistema di equazioni esprimerà la relazione tra le diverse variabili Supponiamo di aver misurato una grandezza y = [.17.26.28.23.27.24]'; in corrispondenza di diversi valori dei parametri x1 e x2 dati da x1 = [.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 67 Fit Polinomiale o Esponenziale? Function polyfit polyval Description Fit con curve polinomiali Calcola il fit polinomiale 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) y fit = 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,'+'); 68

Equazioni alle Differenze e Filtri Esistono 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 per l elaborazione dei segnali e l analisi di dati. In generale un equazione alle differenze finite ha una espressione N M del tipo aky( n k) = bmx( n m) k = 0 m = 0 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) x y Sistema LTI 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 69 La funzione filter La funzione y = 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 differenze a(1)y(n) = b(1)x(n)+b(2)x(n-1)+...+b(n b )x(n- n b +1)- - a(2)y(n-1)-...-b(n a )y(n- n a +1) dove n è l indice del campione attuale, n a è l ordine del polinomio descritto dal vettore a e n b è l ordine del polinomio descritto 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)... 70

Esempio Supponiamo 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 1 1 1 1 y( n) = x( n) + x( n 1) + x( n 2) + x( n 3) 4 4 4 4 In MATLAB: a = 1; b = [1/4 1/4 1/4 1/4]; load count.dat x = count(:,1); y = filter(b,a,x); t = 1:length(x); plot(t,x,'-.',t,y,'-'), grid on legend('original Data',......'Smoothed Data',2) 71 Analisi di Fourier e Trasformata di Fourier Veloce (FFT) Funzione fft fft2 fftn ifft ifft2 ifftn abs angle fftshift cplxpair nextpow2 Descrizione Trasformata di Fourier discreta Trasformata di Fourier discreta bi-dimensionale Trasformata di Fourier discreta n-dimensionale Trasformata di Fourier discreta inversa Trasformata di Fourier discreta inversa bi-dimensionale Trasformata di Fourier discreta inversa n-dimensionale Modulo Fase Porta lo zero delle frequenze al centro dello spettro Ordina i numeri in coppie complesse coniugate Calcola la successiva potenza di due 72

MATLAB Statistics Toolbox For Use with MATLAB Probability density function (pdf) Cumulative distribution function (cdf) Inverse of the cumulative distribution function Random number generator Mean and variance as a function of the parameters 73 Introduzione Lo 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 function Generatore di numeri casuali Media e varianza in funzione dei parametri Lo Statistics Toolbox contiene anche funzioni che effettuano i più comuni test delle ipotesi Infine, 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. 74

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. 75 Esempi Supponiamo 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 continua per modellizzare i risultati. 76

Distribuzioni di Probabilità incluse nello Statistics Toolbox Continue (dati) Beta Exponential Gamma Lognormal Normal Rayleigh Uniform Weibull Continue (statistiche) Chi-square Noncentral Chi-square t Noncentral t Discrete Binomial Discrete Uniform Geometric Hypergeometric Negative Binomial Poisson 77 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 deviazione standard, σ). 78

Cumulative Distribution Function (cdf) La chiamata alla funzione cdf ha lo stesso formato generale per ogni distribuzione compresa nello Statistics 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 cdf normale, 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. 79 Generazione di Numeri Casuali I 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 inversione Il metodo dell inversione è basato sul noto teorema fondamentale che 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. 80

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. Funzioni betarnd binornd chi2rnd exprnd evrnd frnd gamrnd geornd hygernd iwishrnd lognrnd mvnrnd Dipendenza rand, randn rand rand, randn rand rand rand, randn rand rand rand rand, randn randn randn Funzioni mvtrnd nbinrnd ncfrnd nctrnd ncx2rnd normrnd poissrnd mvnrnd mvtrnd nbinrnd Dipendenza rand, randn rand, randn rand, randn rand, randn randn randn rand, randn randn rand, randn rand, randn 81 La sintassi per le funzioni che generano numeri casuali Si possono generare numeri casuali distribuiti secondo ognuna delle distribuzioni previste Le 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 Beta scalare 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 matrici 2x3 r2 = betarnd(c,d) r2 = 0.8931 0.4832 0.1316 0.2403 r3 = betarnd(a,b,m) r3 = 0.4196 0.6078 0.1392 0.0410 0.0723 0.0782 r4 = betarnd(a,b,nrow,ncol) r4 = 0.0520 0.3975 0.1284 0.3891 0.1848 0.5186 matrice 2x2 82