Funzioni matematico – statistiche I comandi matematici di più comune utilizzo, applicabili a scalari e matrici, sono: Sqrt(x), che calcola la radice quadrata di x sign(x), che 1,0 o -1 a seconda che x sia positivo, nullo o negativo exp(x), che calcola lesponenziale di x log(x), che calcola il logaritmo naturale di x
Funzioni matematico – statistiche mean(x), che calcola la media cov(x), che calcola la matrice di varianza - covarianza median(x), che calcola la mediana della distribuzione var(x) che calcola la varianza
Generazione di numeri casuali generazione di numeri casuali Molto importanti sono i comandi relativi alla generazione di numeri casuali, che sono tali grazie ad algoritmi interni che garantiscono la non regolarità dei dati: Rand(r,c) genera una matrice rxc di numeri estratti da una distribuzione continua uniforme (e quindi compresi tra zero ed uno) Randn(r,c) genera una matrice rxc di numeri estratti da una distribuzione continua normale di media zero e varianza uno Possiamo fissare il numero di partenza dal quale parte lalgoritmo di MATLAB per generare i numeri casuali (o meglio pseudo – casuali) digitando nel command: >> rand(seed,k) >> randn(seed,k)
Generazione di numeri casuali Le funzioni statistiche comprendono il campionamento da numerose variabili, tra cui citiamo normale, uniforme, chi – quadro, gamma, poisson, beta. Oltre alla generazione di numeri casuali, esistono numerosissime funzioni statistiche, osservabili digitando help toolbox\stats Tra le funzioni statistiche di maggior utilità, citiamo in generale: Le funzioni che calcolano, dato il valore della ascissa, la probabilità della parte sinistra = 1- pvalue finiscono in –cdf preceduto dal nome della distribuzione, es. chi2cdf; Le funzioni che calcolano, data la probabilità, il valore dellascissa finiscono in –inv preceduto dal nome della distribuzione, es. chi2pdf;
La creazione di funzioni Quando scriviamo nelledit di MATLAB noi digitiamo una serie di operazioni che poi, alla riapertura del file, possono essere riutilizzate. La maggior utilità delledit risiede nella possibilità di creare funzioni, allo stesso modo delle funzioni create da MATLAB stesso e presenti nei vari toolbox. Una funzione, come ad esempio i comandi relativi alla manipolazione di matrici, consta di una serie di operazioni racchiuse in un file.m che vengono effettuate su di un input richiamando un comando che dà poi un output numerico. Le funzioni risiedono in files.m denominati con lo stesso nome della funzione stessa es. mean.m
La creazione di funzioni Ad es. la funzione sqrt(m) è una funzione che richiede 1 input (la matrice o il vettore) e fornisce 1 output Caratterizzanti delle funzioni sono: Il nome della funzione, che è interno a MATLAB Il numero di input Il numero di output (se desiderati) Limportante è che una volta salvato il file contenente la funzione, essa è immediatamente e per sempre utilizzabile sia nel command che nelledit, senza bisogno di caricare il file. Ad esempio se creo e salvo in una directory di MATLAB una mia funzione, potrò dora in poi sempre usarla.
La creazione di funzioni Le funzioni vengono dunque create in M-files, consistono in una serie di operazioni e richiedono necessariamente argomenti di entrata (ossia input) e se desiderati anche argomenti di uscita (output). function[output1,output2,..]= nome funzione(input1, input2,..) La sintassi per creare una funzione nelledit è: function[output1,output2,..]= nome funzione(input1, input2,..)
La creazione di funzioni quindi: Il nome funzione è il nome che noi attribuiamo alla funzione e con la quale essa verrà richiamata (es. mean), che dovrà coincidere con il nome del file Gli input devono essere racchiusi tra parentesi tonde () e devono essere separati da virgole; gli input sono locali, cioè non dipendono dal nome che avrà poi in concreto la variabile quando applicherò la funzione! Gli output devono essere racchiusi tra parentesi quadre [] e devono essere separati da virgole
La creazione di funzioni function[]= nome funzione(input1, input2,..) Qualora non fosse necessario indicare un output, la sintassi è function[]= nome funzione(input1, input2,..) Qualora non venga assegnato nessun output non sarà possibile richiamare il risultato quando calcoliamo la funzione Proviamo ad esempio a creare una funzione che chiamiamo areacer che dato il raggio del cerchio me ne calcoli larea; quindi Esiste un input: il raggio del cerchio Posso o meno decidere che mi stampi semplicemente a video il risultato del calcolo oppure posso ad esso associare una variabile di output
La creazione di funzioni Se vogliamo che la funzione dia un output (il valore numerico dellarea) scriveremo: function[area]=areacer(r) altrimenti function[]=areacer(r) Il codice più semplice da scrivere è 1- function[area]=areacer(r) 2- area=pi*r^2; Una volta salvato il file, denominato areacer.m, la funzione areacer() darà come risultato il quadrato dellinput moltiplicato per pi greco, ossia larea del cerchio con quellinput.
La creazione di funzioni Se non inserisco variabili di output, non posso richiamare la funzione attribuendole una funzione, altrimenti mi segna errore. Ad es. se il mio codice è: 1- function[]=areacer(r) 2- area=pi*r^2 in questo caso la variabile area è locale, cioè interna alla funzione! Essa è stampata a video in quanto al termine della riga non compare il ; ma non è indicata come variabile di output, in quanto è function[]. Quindi se io scrivessi nel command, dopo aver salvato il file con la funzione, >> y=areacer(3) mi darebbe errore in quanto per definizione la funzione areacer non ammette variabili output.
La creazione di funzioni Quando io digito help seguito da il nome della funzione mi compare, come detto in precedenza, una serie di indicazioni circa luso della funzione stessa. Come detto queste righe coincidono con le righe di commento che seguono immediatamente la definizione della funzione racchiuse tra %. Per cui se scrivevo: 1- function[]=areacer(r) 2- % serve per calcolare 3- % larea di un cerchio di raggio r 4- area=pi*r^; salvando e digitando poi help areacer otterrei la stampa a video delle righe tra %. Attenzione che ogni riga di commento deve iniziare con la %.
La creazione di funzioni Se abbiamo una funzione con più di 1 output, ad es. 1- function[ac,aq]=areacerq(r) 2- % serve per calcolare 3- % larea di un cerchio di raggio r 4- % e larea di un quadrato di lato l=r 5- ac=pi*r^2; 6- aq=r^2; quando nel command richiamo la funzione, avendo 2 output devo scrivere >> [a,b] = areacerq(5) oppure se mi interessa solo il primo input posso scrivere solo >> a = areacerq(5)
La creazione di funzioni Proviamo ora a definire altre funzioni, per esempio in ambito dellalgebra matriciale. Considerata una matrice che presenti elementi solo sulla diagonale principale, il suo determinante per il teorema di Laplace coincide con il prodotto degli elementi sulla diagonale stessa. Per questo, avvalendoci dei comandi diag e prod presenti nel toolbox matematico, possiamo definire una funzione del tipo: function[dd]=mydd(A) di=diag(A); dd=prod(di); Quindi estraiamo la diagonale principale e moltiplichiamo gli elementi del vettore di. La funzione non è completamente precisa: dovremmo verificare che la matrice sia quadrata e che sia diagonale! Vedremo come questo sarà possibile con il comando if.