Introduzione a Matlab

Похожие документы
Introduzione a Matlab

Introduzione a Matlab

Prove d esame Esercizi con Matlab

UD6 - MATLAB. Gestione della grafica

MATLAB (3) - Grafica 2 e 3D

EXCEL: FORMATTAZIONE E FORMULE

ESERCITAZIONE MATLAB

EXCEL: FORMATTAZIONE E FORMULE

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 2 - Introduzione a MATLAB

Rappresentazione di curve in tre dimensioni

Caratteristiche di un linguaggio ad alto livello

Introduzione a Matlab (e al Calcolo Numerico)

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 4 - Polinomi e Interpolazione polinomiale

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

INTRODUZIONE A MATLAB

Laboratorio con DERIVE

Calcolo Numerico I - a.a Laboratorio 3 - Introduzione a MATLAB

Esercizio 1. Esercizio 2

Laboratorio di Matematica Computazionale A.A Lab. 4

Introduzione al MATLAB c Parte 2 Funzioni

Grafici in matlab. Un esempio di grafico: xv = 3:0.1:3; yv = xv.^3 5*xv.^2 + 4; plot(xv,yv) xlabel('value of x') ylabel('value of y')

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up

Programmazione in Java (I modulo)

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Introduzione alla programmazione in C(++)

MATLAB (1) Introduzione e Operazioni con array

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Strutture dati e loro organizzazione. Gabriella Trucco

Definire una chiave primaria. Microsoft Access. Definire una chiave primaria. Definire una chiave primaria. Definire una chiave primaria

3. Matrici e algebra lineare in MATLAB

Un monomio è in forma normale se è il prodotto di un solo fattore numerico e di fattori letterali con basi diverse. Tutto quanto sarà detto di

Confronto tra stringhe. (modulo) Calcolo della media e della varianza. Ecco un elenco di codici Matlab: - Calcolo valore assoluto (modulo)

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Appunti sui Fogli Elettronici. Introduzione. D. Gubiani. 19 Luglio 2005

Raccolta degli esercizi svolti in aula

Esercitazione n 2. Costruzione di grafici

per immagini guida avanzata Modificare numeri e date Geometra Luigi Amato Guida Avanzata per immagini Excel

Excel. Il foglio di lavoro. Il foglio di lavoro Questa viene univocamente individuata dalle sue coordinate Es. F9

Windows. La prima realizzazione di un ambiente grafico si deve alla Apple (1984) per il suo Macintosh. La gestione dei file conserva la logica del DOS

UNITÀ DIDATTICA 2 LE FUNZIONI

Imparare a utilizzare le formule e le funzioni

Codifica informazione testuale

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Cosa sono le maschere

Excel avanzato. Certificazione Microsoft. Excel: le basi. 1.1 Excel: le basi NUMBER TITLE

Frazioni. 8 Esercizi di Analisi Matematica Versione Argomenti: Operazioni sulle frazioni Tempo richiesto: Completare la seguente tabella: a b

Sviluppare un programma in FORTRAN

Cenni sull utilizzo dei fogli elettronici

CONTROLLI AUTOMATICI e SISTEMI ELETTRICI LINEARI Ingegneria Meccatronica INTRODUZIONE Matlab (seconda parte) e SIMULINK

FON DAMEN TI DI IN FORMATICA

Corso di Matematica per la Chimica

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

MATEMATICA DI BASE 1

Introduzione alla programmazione Esercizi risolti

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

Calcolare con il computer: Excel. Saro Alioto 1

Esercitazione di Analisi Matematica II

LEZIONE DI MATLAB 2.0. Ing.Irene Tagliente

CORSO DI INFORMATICA GENERALE. Università degli Studi di Bergamo

Introduzione a Matlab

Primi passi con Geogebra

Disequazioni in una incognita. La rappresentazione delle soluzioni

Analisi dei Dati Tabelle e Grafici

Somma di numeri binari

Learning by doing Attività all aperto/outdoor Training Lezione frontale Esercitazioni individuali Compito di apprendimento Approccio dialogico

Sistemi di Numerazione Binaria

La codifica. dell informazione

Транскрипт:

Slide 1 Funzioni che operano su stringhe strcmp paragona 2 stringhe strcat concatena 2 stringhe findstr cerca una sottostringa strrep sostituisce una sottostringa con un'altra upper, lower trasforma in maiuscole, minuscole num2str trasforma un numero in stringa 1 Alcuni esempi: a = strcat('ciao', ' ', 'amico') strcmp(a, 'ciao amico') == true findstr(a, 'mic') == 7 strrep(a, 'ciao', 'buon giorno') == 'buon giorno amico' upper(a) == 'CIAO AMICO' strcat('ci sono ', num2str(99), ' persone')

Slide 2 Formati di sprintf() Fra il simbolo % e il carattere di conversione possono essere presenti alcuni caratteri, i più importanti servono per indicare il numero di cifre totali (Field width) e la precisione dopo la virgola (Precision) 2 Il campo numerico Field width deve essere maggiore o uguale al campo numerico Precision Il carattere di conversione può essere: %c Singolo carattere %d Decimale (con segno) %e Notazione esponenziale (es. 3.1415e+00) %E Notazione esponenziale (es. 2.009E+03) %f Notazione virgola fissa (es. 2.7) %g Il più corto fra %e e %f %G Come %g, ma con E maiuscola %o Ottale (senza segno) %s Stringa di caratteri %u Decimale (senza segno) %x Esadecimale (lettere minuscole a-f) %X Esadecimale (lettere maiuscole A-F) Caratteri speciali: '' Single quotation mark %% Percent character \\ Backslash \b Backspace \f Form feed \n New line \r Carriage return \t Horizontal tab

Slide 3 Grafici plot(y) disegna i valori di Y rispetto agli indici plot(x, Y) disegna i valori di Y rispetto a X plot(x,y,s) disegna Y rispetto a X con alcune configurazioni contenute nella stringa S: colore: r = red, g = green, b = blue, k = black... marcatore:. = punti, o = cerchi... stile: - = solid, : = dotted... 3 plot(y) disegna i valori di Y sull asse delle ordinate e gli indici (in Matlab/Octave da 1 a n) sull assa delle ascisse. Per maggiori dettagli sui colori, i marcatori e gli stili si veda: help plot

Slide 4 Esempio di grafico (1) x = [-4:0.1:4]; y = x.^2; plot(x, y,'r') 4 Un grafico viene realizzato da tanti segmenti rettilinei che congiungono una successione di punti. Se i punti sono sufficientemente numerosi e non troppo distanti l uno dall altro si ha l illusione di una curva. Ad esempio con x = [-4:0.1:4] si ha un buon risultato, invece con x = [-4:0.5:4] si intravedono degli spigoli e con x = [-4:4] si ha un pessimo grafico Una volta fissate le coordinate sull asse delle ascisse bisogna calcolare le coordinate corrispondenti sull asse delle ordinate, a questo punto al vettore x bisogna applicare le operazioni elemento per elemento, ad esempio bisogna scrivere y = x.^2, mentre sarebbe sbagliato scrivere y = x^2 perché significherebbe moltiplicare un vettore riga per se stesso cioè un altro vettore riga, che sarebbe un operazione algebricamente scorretta.

Slide 5 Esempio di grafico (2) plot(x,y,s,x2,y2,s2...) Il comando plot può avere un numero arbitrario di terne di parametri X,Y,S. Esempio: x1 = 0:pi/100:2*pi; x2 = 0:pi/10:2*pi; plot(x1,sin(x1),'g:',x2,sin(x2),'r+') 5 Si possono disegnare più curve nello stesso grafico, è buona norma usare colori e/o marcatori diversi per ogni curva

Slide 6 Esempio di grafico (3) tensione di un alimentatore HV ad Elettra 6 Matlab viene usato sia per visualizzare il grafico di curve analitiche, ad esempio Y = sin(x), sia per elaborare e visualizzare dati acquisiti sul campo come nell esempio proposto sopra

Slide 7 Grafici altre configurazioni hold on disegna nuovi grafici sopra quelli vecchi grid on visualizza una griglia subplot(m,n,p) divide la finestra in una matrice di m per n grafici e utilizza il p-esimo elemento per il prossimo grafico title('text') visualizza il titolo del grafico axis([xmin xmax ymin ymax]) configura gli assi axes(propertyname, propertyvalue...) configura varie propietà degli assi 7 Hold on indica di disegnare il prossimo grafico nell ultima finestra grafica utilizzata, hold off indica di disegnare il prossimo grafico in una finestra nuova. Grid on e grid off mettono e tolgono una griglia Subplot(m,n,p) suddivide la finestra grafica in una matrice di m per n grafici, il prossimo grafico verrá disegnato nella p-esima posizione. Valgono le stesse regole della linearizzazione di matrice, cioè prima la prima colonna (dalla prima all ultima riga), poi la seconda colonna e così via. Axis e axes hanno quasi la stessa funzione, la prima modifica solo 4 parametri degli assi (massimo e minimo di entrambi gli assi), la seconda può configurare tutta una serie di parametri (vedi doc axes)

Slide 8 Esempio di grafico (4) X = [-4:0.1:4]; Y = X.^2; plot(x,y) grid on hold on Y2 = 0.2*X.^3-X; plot(x,y2,'r') 8 In mezzo fra l istruzione plot(x,y) e plot(x,y2, r ) va messa l istruzione hold on se si vuole che le due curve siano disegnate sullo stesso grafico; invece il comando grid on può essere spostato in qualunque posizione dopo il primo plot.

Slide 9 Esempio di grafico (5) X = [-4:0.1:4]; Y = X.^2; subplot(2,1,1) plot(x,y) grid on Y2 = 0.2*X.^3-X; subplot(2,1,2) plot(x,y2,'r') grid on 9 Subplot divide il grafico in una matrice di grafici con 2 righe e 1 colonna, nella prima posizione viene messo plot(x,y), nella seconda plot(x,y2, r ); il comando grid on va ripetuto 2 volte perché ha effetto solo sul subplot attivo al momento

Slide 10 Istogrammi hist(y, n) densità di Y i cui elementi sono raggruppati in n intervalli X = [-4:0.1:4]; Y = 0.2*X.^3+0.1*X.^2-X+5; subplot(1,2,1) plot(x,y) subplot(1,2,2) hist(y,20) 10 L'istogramma è la rappresentazione grafica di una distribuzione in classi di un carattere continuo. (Wikipedia)

Slide 11 Scala logaritmica semilogx, semilogy e loglog disegna su scala logaritmica rispettivamente gli assi X, Y e entrambi X = [-4:0.1:4]; Y = abs(x.^3-8*x+5); semilogy(x,y) grid on 11 Le scale logaritmiche servono per visualizzare funzioni positive i cui valori variano considerevolmente (almeno un paio di decadi) e di cui si vuole mettere in evidenza l andamento anche per i valori più bassi.

Slide 12 Grafici altre configurazioni xlabel visualizza un'etichetta sull'asse x ylabel visualizza un'etichetta sull'asse y annotation(annotationtype) aggiunge un'annotazione sotto forma di testo, righe, frecce etc. i tipi fondamentale sono: 'rectangle' 'ellipse' 'textbox' 'line' 'arrow' 'doublearrow' 'textarrow' = freccia + testo associato 12 Annotation non si trova su Octave. Per maggiori dettagli su Matlab si digiti: help annotation

Slide 13 Esempio: direzione dei venti Il vento ha direzione fra 0 e 360 gradi (Nord=0, Est=90, Sud=180, Ovest=270) e intensità espressa in m/s 13 Dati relativi alla velocità e alla direzione del vento, prelevati con cadenza oraria, gentilmente concessi dall'osmer (www.osmer.fvg.it)

Slide 14 Esempio: direzione dei venti load meteots092008 axes('xtick',[0:15:360],'xticklabel',{'n','',30,'',60,'',... 'E','',120,'',150,'','S','',210,'',240,'','W','',300,'',330,'','N'}); hold on; plot(e_giga_ts_molo_direzione_vento_,... E_Giga_TS_molo_velocita_vento_m,'.'); title('vento a Trieste nel mese di settembre 2008'); xlabel('direzione [deg]'); ylabel('velocità [m/s]'); annotation('textarrow',[0.36 0.30],[0.76 0.69],'String',{'BORA'}); annotation('textarrow',[0.44 0.39],[0.46 0.34],'String',{'SCIROCCO'}); annotation('textarrow',[0.64 0.68],[0.53 0.37],'String',{'MAESTRO'}); 14 I dati forniti dall'osmer sono stati scritti nel file meteots092008.mat in formato nativo Matlab/Octave. Dentro questo file sono contenute le variabili E_Giga_TS_molo_direzione_vento_ e E_Giga_TS_molo_velocita_vento_m (E-Giga è il programma PHP utilizzato per elaborare i dati, la stazione Osmer di Trieste è posta sul molo Fratelli Bandiera)

Slide 15 Puntatori ai grafici: HANDLE x = 1:10; y = x.^3; handle1 = plot(x,y); Il puntatore ad un grafico può essere usato per cambiare alcuni parametri dopo che il grafico è stato creato tramite la funzione set(). Esempio: set(handle1,'color','red') 15 set(h,'propertyname',propertyvalue,...) Configura le propietà grafiche dell'oggetto puntato dall'handle H Per maggiori dettagli si veda: help set

Slide 16 Asse Y a destra Oltre all'asse Y a sinistra (Y1) si può utilizzare un altro asse Y a destra (Y2) mediante il comando plotyy(x1,y1,x2,y2). Esempio: x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); [AX,H1,H2] = plotyy(x,y1,x,y2); set(get(ax(1),'ylabel'),'string','left Y-axis') set(get(ax(2),'ylabel'),'string','right Y-axis') 16 L'asse delle ordinate di norma viene posto a sinistra, ma per confrontare due curve con valori massimi molto diversi fra loro un possibile accorgimento è disegnare l'asse delle ordinate relativo alla seconda curva a destra del grafico. La funzione [AX,H1,H2] = plotyy(x1,y1,x2,y2) restituisce tre parametri, il primo parametro (AX) è un vettore di puntatori ai due assi, AX(1) per il sinistro e AX(2) per il destro. H1 e H2 sono puntatori ai due grafici rispettivamente.

Slide 17 Asse Y a destra: esempio 17 Per cambiare l'etichetta dei due assi bisogna prima ottenere un puntatore (handle) all'etichetta desiderata tramite la funzione get (si veda help get per dettagli), ad esempio get(ax(2),'ylabel') restituisce il puntatore all'asse Y2 del grafico puntato da AX. A questo punto con la funzione set si potrà impostare il valore desiderato, ad esempio: set(get(ax(1),'ylabel'), 'String', 'Etichetta di sinistra')

Slide 18 Asse dei tempi Per utilizzare uno degli assi come asse dei tempi si utilizza il comando datetick(asse,formatodata) asse = 'x', 'y' o 'z'; formatodata descrive come visualizzare la data, ad esempio 20 = 'dd/mm/yy' Le date sono i giorni a partire dal 1 gennaio 0000 Il tempo standard Unix conta i secondi dal 01/01/1970, per la conversione si usa la funzione datenum(data) t = unixtime / 86400 + datenum('01/01/1970'); 18 Sull'asse delle ascisse spesso si pongono degli intervalli di tempo. Per tempi superiori al minuto in genere la scala decimale è scomoda, si preferisce visualizzare ore, minuti, secondi oppure giorni, mesi e anni. In Matlab/Octave per il tempo è un numero reale che misura i giorni (e le frazioni di giorno) trascorsi dal primo gennaio dell'anno 0 (1 a.c. per gli storici). Esiste un altro formato per il tempo, molto più utilizzato in informatica, si chiama unix time o timestamp e misura i secondi a partire dal primo gennaio 1970. La funzione Matlab/Octave datenum() trasforma la rappresentazione di una data come stringa in una rappresentazione numerica (secondo lo standard Matlab/Octave). Tenendo conto che in un giorno ci sono 86400 secondi (60*24*24) la formula di conversione da unixtime a tempo Matlab/Octave risulta: t = unixtime / 86400 + datenum('01/01/1970');

Slide 19 Esempio di grafico con asse dei tempi load meteots092008 subplot(2,1,1) t = time / 86400 + datenum('01/01/1970'); plot (t, E_Giga_TS_molo_temperatura_C) datetick('x',20) title('temperatura [C]'); grid on subplot(2,1,2) plot (t, E_Giga_TS_molo_pressione_hPa, 'r') datetick('x',20) title('pressione [hpa]'); grid on 19 Nel file meteots092008 contenente i dati Osmer contiene anche una variabile time in cui sono memorizzati gli istanti di acquisizione dei dati in formato Unix timestamp

Slide 20 Esempio di grafico con asse dei tempi 20 Il secondo accorgimento per confrontare due curve con valori massimi o minimi molto diversi fra loro è disegnare due grafici nella stessa finestra.

Slide 21 Formattazione delle etichette La formattazione delle etichette utilizza la sintassi di alcuni comandi TeX (linguaggio di markup, pronunciato tech) Alcuni esempi: \alpha α \leq \Delta Δ \bf grassetto \pi π \fontname{fontname} \surd \fontsize{fontsize} 21 TeX e LaTeX sono linguaggi di formattazione di testi. Per una descrizione estensiva di tutti i comandi si veda: http://ctan.tug.org/tex-archive/info/lshort/english/lshort.pdf

Slide 22 Curve 3D plot3(x, Y, Z) Esempio t=linspace(0,2*pi,1e4); x=sin(2*pi*2*t); y=sin(2*pi*3*t); z=sin(2*pi*4*t); plot3(x, y, z) 22 Nello spazio a tre dimensioni si possono visualizzare sia curve (una dimensione) che superfici (due dimensioni). Per disegnare le curve si usa la funzione plot3()

Slide 23 Superfici 3D mesh(x, Y, Z) griglia 3D surf(x, Y, Z) superfici 3D 23 Per disegnare le superfici si può usare o una griglia utilizzando la funzione mesh(x,y,z) o una superficie (data dall'unione di parecchie "mattonelle" accostate fra loro) utilizzando la funzione surf(x,y,z). Volendo disegnare una superficie data dalla funzione z = f(x,y) conviene usare la funzione meshgrid(x,y) che permette di ottenere una scansione del piano z = 0

Slide 24 Esempio SURF [X,Y] = meshgrid(-10:0.25:10,-10:0.25:10); R = sqrt((x/pi).^2+(y/pi).^2); f = sin(pi*r)./(pi*r); surf(x,y,f); axis([-10 10-10 10-0.3 1]) xlabel('{\bfx}') ylabel('{\bfy}') zlabel('{\bfsin}({\pi} R)/({\pi} R)') 24 La funzione axis() per disegni in tre dimensioni prende come parametro un vettore con sei elementi che sono il minimo e il massimo dei tre assi x, y e z rispettivamente.

Slide 25 Tipi di variabili Le variabili sono di default di tipo double cioè numeri reali a doppia precisione: a = 1.256e-7 Tipi (classi) fondamentali sono: 25 Ogni variabile è di un determinato tipo. Esiste un numero limitato di tipi predefiniti Una variabile per cui non è specificato esplicitamente il tipo è di default di tipo double (numero reale a precisione doppia) Matlab svolge tutti i calcoli con una certa precisione (e quindi con un certo errore di approssimazione) Di default vengono visualizzate solo 4 cifre decimali, anche se sono memorizzate molte più cifre. Il comando format long permette di visualizzare 15 cifre decimali

Slide 26 Tipo LOGICAL Una variabile di tipo logical rappresenta valori logici (detti anche booleani) true e false mediante valori numerici 1 e 0 rispettivamente. Alcuni operatori e alcune funzioni restituiscono valori logical. Ad esempio: a = pi > 3 b = ischar(a) 26 Nel tempo Matlab/Octave ha cambiato la rappresentazione dei valori booleani. All inizio si utilizzava semplicemente il valore numerico 1 come vero e il valore numerico 0 come falso. Poi è stato introdotto un vero e proprio tipo (logical) con solo 2 valori: true e false. Esiste sempre la corrispondenza fra true e 1 e quella fra false e 0.

Slide 27 Tipo STRUCTURE Una struttura è un insieme di dati non omogenei ciascuno con un identificatore. Esempio: studente.nome = 'tizio' studente.scritto = 25 studente.orale = 23 studente.media=(studente.scritto+studente.orale)/2 27 Una variabile di tipo structure ha un identificatore complessivo di tutta la variabile e un identificatore per ognuno dei campi appartenenti a questa struttura.

Slide 28 Cancellazione di righe e colonne Per cancellare si utilizza una coppia di parentesi quadre Ad esempio per eliminare la seconda colonna della matrice X: X(:,2) = [ ] Non si possono cancellare i singoli elementi di una matrice: X(3,2) = [ ] restituisce un messaggio d'errore 28 Se proprio si vuole cancellare un solo elemento bisogna prima linearizzare la matrice e poi cancellare l elemento indesiderato Per linearizzare si usa l operatore due punti, ad esempio: Y = X(:) In Y avremo un vettore colonna formato dalle colonne di X una dopo l altra Y = [X(:,1); X(:,2); X(:,m)] A questo punto per cancellare l elemento i-esimo basta scrivere: Y(i) = [] Sono equivalenti anche le seguenti espressioni: X(:)(i) = [] X(i) = []

Slide 29 Alcune Funzioni predefinite (2) find(x) cerca un valore in un vettore sort(x) ordina un vettore abs(x) valore assoluto di X sqrt(x) radice quadrata diag(x) etrae la diagonale principale della matrice X exp(x), log(x) esponenziale, logaritmo sin(x), cos(x), tan(x) seno, coseno, tangente 29 La funzione find(x) trova gli indici degli elementi di X che sono diversi da zero Se X è una matrice vengono trovati gli indici della matrice linearizzata, find(x) == find(x(:))

Slide 30 Funzioni predefinite: esempi (1) X = [-3 9 1-4 4 12 2 1 0] m1 = min(x) m2 = max(x) f1 = find(x>1) f2 = find(x==1) s1 = sort(x) s2 = sqrt(abs(x)) 30 m1 = -4 m2 = 12 f1 = 2 5 6 7 f2 = 3 8 s1 = -4-3 0 1 1 2 4 9 12 s2 = Columns 1 through 7: 1.73205 3.00000 1.00000 2.00000 2.00000 3.46410 1.41421 Columns 8 and 9: 1.00000 0.00000

Slide 31 Utilizzo di find(x) X > n (n scalare) valuta una matrice delle stesse dimensioni di X con un 1 al posto degli elementi maggiori di n e uno 0 altrimenti find(x>n) ritorna un array con l'indice degli elementi maggiori di n X(find(X>n)) ritorna un vettore contenente tutti e soli i valori di X maggiori di n 31 find(x) trova gli indici degli elementi di X che sono diversi da zero, ma spesso come argomento alla funzione find si fornisce una semplice espressione booleana (ad esempio X > n) e talvolta aritmetica (ad esempio X='la scarpa di Alessia'; X(find(X-'a')) == 'l scrp di Alessi')

Slide 32 Funzioni predefinite : esempi (2) A = rand(5, 2) B = eye(3) C = ones(2,3) D = [A,[B;C]] diag(inv(d')) 32 diag(inv(d')) ans = -2.3526 3.6112-1.0728-20.8957-14.2226

Slide 33 Funzioni: parametri di I/O variabili nargin, nargout numero parametri d'ingresso/uscita con cui è stata chiamata la funzione corrente varargin, varargout permette di avere un numero arbitrario di parametri d'ingresso/uscita Le variabili definite dentro una funzione sono locali ad essa, non sono utilizzabili altrove. global permette di utilizzare variabili globali 33 In genere il numero di parametri con cui si chiama una funzione è fisso. Ma in alcuni casi ci può essere un numero variabile di parametri d ingresso o d uscita. Il numero di parametri viene messo automaticamente nelle variabili nargin e nargout. Varargin è un vettore contenente tutti i parametri d ingresso (analogamente varargout), ad esempio varargin(1) è il primo parametro e varargin(nargin) è l ultimo parametro in ingresso. Per maggiori dettagli si veda: help varargin. Si possono anche dichiarare delle variabili globali. Anche se in generale questa pratica è fortemente sconsigliata.

Slide 34 Sistema di equazioni lineari (1) Ax = b con A matrice quadrata n*n x e b vettori colonna n*1 x = A -1 b In Matlab diviene: x = inv(a) * b inv(a) restituisce la matrice inversa, tale che: inv(a) * A == I 34 In questo esempio avremo I = eye(n)

Slide 35 Sistema di equazioni lineari (2) La soluzione x = inv(a) * b non è numericamente ottimizzata, per matrici grandi richiede troppo tempo. Questa operazione può essere sostituita con l'operatore divisione a sinistra: x = A \ b L operatore \ serve per computare in modo ottimizzato la soluzione di sistemi lineari 35 Dato il sistema Ax = b invertire la matrice A equivale a trovare la soluzione anche al sistema Ax = b e al sistema Ax = b, dunque equivale a risolvere un intera classe di sistemi lineari e non solo quello dato. Esistono metodi numerici che permettono di risolvere solo il sistema Ax = b e non tutta la classe di sistemi associati, ma in un tempo significativamente più breve.

Slide 36 Sistema di equazioni lineari: esempio x 1 + x 2 - x 3 = 0 2x 1 + x 2 +x 3 = 1 x 1-3x 3 = -1 In Matlab diviene A = [1 1-1; 2 1 1; 1 0-3] b = [0; 1; -1] x = A \ b % == [0.2; 0.2; 0.4] 36 Viene fornito un esempio con numeri del tutto arbitrari. In questo caso se si compie il test di ugualiaza come suggerito nel commento e cioè: A \ b == [0.2; 0.2; 0.4] Non è detto che si ottenga valore vero a causa di un siappur minimo errore di arrotondamento. Per verificare questa eventualità basta valutare l espressione: A \ b - [0.2; 0.2; 0.4] Che potrebbe dare un risultato del tipo: ans = -1.11022302462516e-016 1.66533453693773e-016 0.00000000000000e+000

Slide 37 Polinomi P(x) = c n x n + c n-1 x n-1 + + c 2 x 2 + c 1 x + c 0 In matlab si rappresenta con un vettore: P = [c n c n-1 c 2 c 1 c 0 ] roots(p) trova le radici del polinomio P poly(x) trova il polinomio le cui radici sono X polyfit(x,y,n) trova il polinomio di grado N che approssima meglio i punti di coordinate (X,Y) polyval(p, X) valuta il polinomio P nei punti X 37 Un polinomio in una variabile di grado n ha n+1 coefficienti. Le radici di un polinomio sono i valori di x per cui P(x)=0, il numero delle radici reali varia fra 0 e n, ma nel campo complesso sono sempre n. Roots(P) trova tutte le radici complesse di P. Tranne casi particolari, dati n punti esiste un solo polinomio di grado n-1 che passa per ciascuno degli n punti, esistono infiniti polinomi di grado >= n che passano per lo stesso numero di punti e non esiste nessun polinomio di grado < n-1 che passa per i predetti punti. In quest ultimo caso la funzione polyfit(x,y,n) calcola il polinomio che si avvicina maggiormente ai punti dati (metodo dei minimi quadrati)

Slide 38 Polinomi: esempi (1) poly([-1-1]) % == [1 2 1] poly(-ones(1,3)) % == [1 3 3 1] roots([1 3 3 1]) % == [-1-1 -1] Trovare la parabola che passa per i punti (3,4), (4,2) e (5,3): X=[3 4 5] Y=[4 2 3] polyfit(x,y,2) % == [1.5-12.5 28] 38

Slide 39 Polinomi: esempi (2) X=[3 4 5] Y=[4 2 3] x=[2:0.1:6] plot(x,y,'ro') hold on plot(x,polyval(polyfit(x,y,3),x)) plot(x,polyval(polyfit(x,y,2),x),'r') plot(x,polyval(polyfit(x,y,1),x),'g') 39

Slide 40 Altri comandi utili tic toc serve a rilevare il tempo di esecuzione di una frazione di codice profile analizza il tempo di esecuzione di tutte le funzioni utilizzate (non disponibile su Octave) pause sospende l'esecuzione in attesa che l'utente prema un tasto clc cancella la command window linspace(min, max, n) vettore di n elementi distribuiti uniformemente fra min e max 40 Se si sviluppano programmi di una certa complessità ci si può imbattere in problemi di efficienza, ovvero dover misurare quanto tempo viene impiegato dalle singole parti di un programma. I comandi tic e toc vengono utilizzati in coppia con la sintassi seguente: tic alcune_istruzioni toc In questo modo Matlab/Octave visualizza il tempo impiegato per eseguire il frammento codice alcune_istruzioni

Slide 41 CONTINUE Interrompe un'iterazione di un ciclo for o while e riprende dall'iterazione successiva. Nel caso di cicli annidati interrompe solo quello più interno in cui è contenuto. 41 L'utilizzo tipico dell'istruzione continue è: while condition if particular_condition continue end do_something() end

Slide 42 Esempio CONTINUE i = 0; for x = [-5:0.1:5] i = i + 1; if x == 0 y(i) = NaN; continue end y(i) = 1/x; end 42 Nell'esempio si evita di eseguire l'ultima parte del ciclo solo nei casi in cui la variabile x vale 0 e quindi si avrebbe una divisione per 0.

Slide 43 Esempio: calcolo di numeri primi (1) 43 Il metodo utilizzato per il calcolo dei numeri primi, per ogni numero maggiore di 1 verifica se è divisibile per almeno uno dei numeri primi trovati alle iterazioni precedenti, se non lo è lo aggiunge al vettore di numeri primi La funzione primi serve solo a fini didattici in quanto esiste già la funzione builtin primes che ha le stesse funzionalita ma è più efficiente.

Slide 44 Esempio: calcolo di numeri primi (2) 44 Una seconda versione per il calcolo dei numeri primi riduce di molto il numero di iterazioni. Si basa sul fatto che per un numero non primo il più piccolo dei fattori è certamente minore o uguale alla radice quadrata del numero stesso. Pertanto per ogni numero viene calcolata la radice quadrata e non vengono considerati come possibili divisori i numeri primi maggiori di tale numero. Per fare questo c'è un'istruzione break che esce dal ciclo più interno.

Slide 45 Ricorsione Una funzione può richiedere al suo interno l'esecuzione di altre funzioni, ma anche di se stessa. L'invocazione ricorsiva di una funzione deve essere contenuta in una condizione d'uscita pena l'iterazione infinita. Esempio: function y = fatt(x) y = 1; if x>0 y = x * fatt(x-1); end 45 Una funzione può chiamare qualunque altra funzione, compresa se stessa. In questo caso si ha una chiamata ricorsiva. Onde evitare ripetizioni infinite ci deve essere una condizione d'uscita dalla ricorsione

Slide 46 Ingresso/Uscita (metodi avanzati) Lettura / Scrittura di file di testo [A,B,C,...] = textread('filename','format') Lettura / Scrittura di file generici fid = fopen(filename); C = fscanf(fid, 'format'); fclose(fid); 46 Esempio di scrittura e lettura % Create a file with temperatures tempstr = '78 F 72 F 64 F 66 F 49 F'; fid = fopen('temperature.dat', 'w+'); fprintf(fid, '%s', tempstr); % Return to the beginning of the file frewind(fid); % Read the numbers in the file, skipping the units % num_temps is a numeric column vector degrees = char(176); num_temps = fscanf(fid, ['%d' degrees 'F']); fclose(fid);

Slide 47 Toolbox Un toolbox di Matlab è un insieme di funzioni vendute separatamente come un pacchetto aggiuntivo. Alcuni esempi: statistics control system image processing instrument control financial 47 I toolbox disponibili sono numerosissimi, possono essere creati anche da terze parti.

Slide 48 Simulink tool indipendente da Matlab per la simulazione di sistemi dinamici 48 Un sistema dinamico è un'astrazione matematica che permette di valutare l'evoluzione nel tempo di un oggetto. Simulink è nato come un toolbox di Matlab, ma è divenuto un programma indipendente. Mantiene sempre una grossa affinità con Matlab. È noto per il tipico diagramma a blocchi grafico.

Slide 49 Interfaccia utente grafica (GUI) Un'interfaccia utente permette un'interazione intuitiva con l'utente mediante elementi grafici chiamati widget. Fra questi ci sono bottoni, caselle di testo, grafici etc. Matlab permette di creare GUI mediante un'interfaccia dedicata chiamata GUIDE (Graphic User Interface Development Environment) 49 Un'intergaccia grafica (in inglese GUI, Graphic User Interface) è molto più di un grafico. Usualmente comprende diversi elementi di tipo eterogeneo che permettono all'utente sia di leggere dati, sia di impartire comandi. Un interfaccia grafica unita alla potenza di calcolo di Matlab permette di ottenere applicazioni molto flessibili e performanti. GUIDE non è disponibile con Octave

Slide 50 GUIDE guide è un designer di interfacce grafiche widget a sx pannello a dx 50 GUIDE si presenta con una barra a sinistra in cui sono elencati tutti i tipi di widget (elementi grafici) disponibili. A destra c'è uno spazio libero su cui si possono trascinare (drag and drop) i widget, posizionarli e modificarne le dimensioni

Slide 51 GUIDE I widget si possono trascinare sul pannello e poi si possono configurare numerosi parametri 51 Quando il mouse è posizionato su un widget con il tasto destro si seleziona un pop-up in cui sono presentati tutti i parametri di configurazione di quel particolare widget: di norma sono varie decine e permettono il controllo completo di tutte le caratteristiche dell'elemento.

Slide 52 GUIDE guide salva un file.fig in cui sono memorizzati tutti i widget ciascuno con le proprie configura-zioni e un file.m dove ci sono le funzioni che vengono chiamate in corrispondenza delle azioni dell'utente. Ad esempio ogni volta che viene premuto un bottone viene eseguita una funzione associata a quel bottone (callback). Ogni widget ha un handle (maniglia) che permette di cambiarne le proprietà, può essere utilizzato da tutte le funzioni. 52 I pannelli costruiti tramite GUIDE sono salvati in due file, il primo serve per memorizzare la parte grafica (configurazioni di tutti i widget), il secondo serve per la parte procedurale del pannello. Alcuni widget sono associati ad una callback, cioè una funzione che viene attivata ogni volta che accade un evento che interessa quel widget, il caso tipico di evento è il click su un bottone. Nelle callback sono disponibili tutte le funzionalità delle funzioni Matlab, per interagire con gli altri widget si usano gli handle (uno per ogni widget) che permettono di modificarne le proprietà, in primis i valori visualizzati.

Slide 53 GUIDE Esempio di una callback, si usano le funzioni get e set per leggere e scrivere le proprietà indirizzate da handles % -------------------------------------------------------------------- function varargout = pushbutton1_callback(h,... eventdata, handles, varargin) val = str2double(get(handles.edit1,'string')); digits = ceil(log10(val+1)); set(handles.edit2,'string',mod(val*val,10^digits)) 53 Un caso tipico di utilizzo si con 3 widget: il primo serve per l'immissione di dati, il secondo è un bottone che serve per avviare il calcolo, il terzo widget serve per visualizzare i risultati. La callback deve prendere i dati dal widget di immissione tramite la funzione get() e l'handle del widget di immissione dati, poi vengono fatti alcuni calcoli su questi dati infine i risultati vengono visualizzati mediante la funzione set() applicata al handle del widget di visualizzazione dei risultati

Slide 54 Esempi di impieghi professionali Fermi@Elettra Sincrotrone Trieste Approssimazione parabolica con 10 campioni 54 Un esempio con Linux

Slide 55 Esempi di impieghi professionali Ultratech San Jose (Silicon Valley) Sistemi laser per fotolitografia 55 Un esempio con Windows XP