140 likes | 272 Views
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 l’esponenziale di x
E N D
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 l’esponenziale 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 • 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 l’algoritmo 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 digitandohelp toolbox\statsTra 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 dell’ascissa finiscono in –inv preceduto dal nome della distribuzione, es. chi2pdf;
La creazione di funzioni • Quando scriviamo nell’edit di MATLAB noi digitiamo una serie di operazioni che poi, alla riapertura del file, possono essere riutilizzate. • La maggior utilità dell’edit 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) • L’importante è che una volta salvato il file contenente la funzione, essa è immediatamente e per sempre utilizzabile sia nel command che nell’edit, senza bisogno di caricare il file. • Ad esempio se creo e salvo in una directory di MATLAB una mia funzione, potrò d’ora 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). • La sintassi per creare una funzione nell’edit è: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 • 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 l’area; 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 dell’area) scriveremo:function[area]=areacer(r) altrimentifunction[]=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 dell’input moltiplicato per pi greco, ossia l’area del cerchio con quell’input.
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 l’uso 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- % l’area 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- % l’area di un cerchio di raggio r 4- % e l’area di un quadrato di lato l=r5- 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 dell’algebra 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.