INFORMATICA B Ingegneria Elettrica Introduzione a Matlab
Introduzione a Matlab Matlab (MATrix LABoratory) è uno strumento per il calcolo scientifico ed ingegneristico Matlab facilita lo sviluppo di programmi che eseguono complesse elaborazioni di calcolo numerico grazie a: Un ambiente di sviluppo integrato ed uno specifico linguaggio di programmazione Una ricca libreria di funzioni matematiche Matlab può essere scaricato da: www.software.polimi.it/software-download/studenti/ La licenza gratuita è fornita agli studenti dal Politecnico 2
L ambiente di sviluppo di Matlab L editor di testo può essere utilizzato per scrivere programmi La command window permette di inserire comandi che vengono immediatamente eseguiti e visualizza i risultati di ciascuna istruzione eseguita Il workspace mostra le variabili definite dalle istruzioni eseguite finora 3
Il linguaggio Matlab È un linguaggio di alto livello È un linguaggio orientato alle elaborazioni Offre specifiche operazioni per matrici Offre una vasta gamma di funzioni matematiche È un linguaggio interpretato Non richiede la compilazione in codice macchina Le istruzioni inserite sono direttamente eseguite Non è un linguaggio tipizzato Non occorre dichiarare le variabili Non è necessario specificare il tipo delle variabili Alla stessa variabile è possibile assegnare valori di tipi diversi durante l esecuzione dello stesso programma 4
Variabili e array L unità fondamentale di dati in Matlab è l array Ogni variabile è un array Gli scalari sono array di dimensione 1x1 La definizione dei nomi delle variabili è simile a quella del C Matlab è un linguaggio a tipizzazione debole Le variabili sono create quando viene effettuata l inizializzazione (il primo assegnamento) Il tipo della variabile è determinato dal valore che contengono (tipo dinamico!) Parleremo dopo dei tipi di dato... 5
Creazione di una variabile per assegnamento Scalari (array di dimensione 1x1) a = 3 b = 55 Array arr = [3 4 2 3] Matrici matr = [3 4 2; 4 5 6] Gli elementi sulla stessa riga possono essere separati mediante uno spazio o una virgola Le righe sono separate da punto e virgola 6
Assegnamenti ed accesso agli array Indicizzazione dell array L accesso ad una specifica posizione viene effettuato specificando l indice tra parentesi tonde Se l array ha più dimensioni, bisogna separarle gli indici con virgole Gli indici iniziano da 1 Esempio: esecuzione dei seguenti comandi a = [0 7+1]; b = [a(2) 5 a]; Risultato a = [0 8] b = [8 5 0 8] Contenuto di a Secondo elemento di a 7
Inizializzazione di default delle variabili Non tutti gli elementi devono essere specificati alla creazione Alle posizioni non inizializzate viene assegnato il valore di default 0 Esempio: c(2,3) = 5; 8
Modifica della dimensione dell array È possibile estendere la dimensione dell array dopo la sua creazione assegnando un valore ad una posizione ancora non esistente Esempio: d = [2 5]; d(4) = 2; 9
Trasposizione dell array L operatore apice ' ci permette di calcolare l array trasposto Esempio: d = [2 5 0 2]; g = d'; 10
Enumerazione di una serie di valori È possibile enumerare implicitamente una serie di valori specificando limite inferiore, passo e limite superiore separati dal simbolo : : inf:passo:sup La specifica del passo è facoltativa (di default viene usato 1) Esempio: x = 1:2:10; Risultato: x = [1 3 5 7 9] Altro esempio: l = 3:-1:1; m = [l' l']; Risultato: m = [ 3 3 ; 2 2; 1 1] 11
Accesso contemporaneo più posizioni di un array Si può usare il simbolo : al posto di un indice per accedere a tutti gli elementi su quella dimensione a = [1 2 3; 4 5 6; 7 8 9]; b = a(:,1); c = a(2,:); 12
Accesso contemporaneo più posizioni di un array È possibile utilizzare un array contenente una serie di numeri per specificare più posizioni a cui accedere d = a([1,2], [3,1]) e = a(4) Attenzione: la linearizzazione dell array avviene per colonne f = a(:)' 13
Assegnamenti di array e scalari ad array È possibile assegnare uno scalare a tutte le celle di un array o ad una sottoparte Esempio: m(1:4,1:3)=3 m(1:2,1:2)=4 14
Assegnamenti di array e scalari ad array È possibile fare più assegnamenti contemporanei tra array Le dimensioni dei due array sulla sinistra e sulla destra dell assegnamento devono essere uguali Esempio: m(1:4,1:3)=3 m(1:2,1:2)=4 m1(2:3,4)=m(1:2,1) 15
Funzioni predefinite 16
Esempi di utilizzo delle funzioni predefinite Esempio: a = zeros(2); b = zeros(2,3); c = [1 2; 3 4]; d = size(c); e = zeros(size(c)); 17
Tipo double Una variabile di tipo double contiene uno scalare o un array di numeri in doppia precisione (64 bit) Il tipo double permette di rappresentare Valori reali var1 = -10.7; Valori immaginari var2 = 4i; var3 = 4j; Valori complessi var3 = 10.3 + 10i; (i e j sono sinonimi) Tutti gli array che abbiamo visto finora erano di tipo double 18
Tipo char Le stringhe sono array di caratteri (codificati con 16 bit) Le stringhe sono specificate tra apici singoli Esempio: commento = 'questa è una stringa'; Crea un array di dimensione 1x20 contenente caratteri 19
Variabili speciali 20
Variabili speciali Attenzione: il valore delle variabili predefinite può essere modificato mediante un assegnamento Esempio: circ1 = 2*pi*10; pi = 5; circ2 = 2*pi*10; circ1 = 62.8319 circ2 = 100 È fortemente sconsigliato modificare il valore delle variabili 21
Operazioni su array e su scalari Tutte queste operazioni sono anche definite su scalari (visto che lo scalare è una matrice 1x1) 22
Operazioni su scalari e su array Gli operatori +, -, *, / implementano le operazioni matematiche tra matrici (e tra scalari) Somma: Moltiplicazione tra matrici: 23
Operazioni su scalari e su array Gli operatori.*,.^,./,.\ sono degli operatori che eseguono l operazione specificata tra elementi in posizioni corrispondenti delle due matrici operande 24
Operazioni su scalari e su array Gli operatori possono essere usati anche tra una matrice e uno scalare (l operazione verrà eseguita su ciascun elemento della matrice e lo scalare) Esempio: 25
Matrix left division L operatore Matrix left division permette di risolvere con una sola istruzione sistemi di equazioni in n incognite Problema: Calcolo della soluzione: x = A\B; x: vettore incognite A: matrice dei coefficienti B: vettore dei termini noti 26
Altre funzioni Ne vedremo molte altre negli esercizi Il comando help <nome_funzione> mostra la guida sulla funzione 27
min e max Se min e max sono applicati su array, restituiscono il valore minimo o massimo Esempio: x = [3 7 5 1 9] y = min(x); Risultato: y = 1 Esempio: x = [3 7 5 1 9] [y z] = min(x); Risultato: y = 1 z = 4 28
min e max Se min e max sono applicati su matrici, restituiscono un vettore contenete i valori minimi/massimi di ciascuna colonna Esempio: x = [7 1; 1 9] y = min(x); Risultato: y = [3 1] Esempio: x = [7 1; 1 9] [y z] = min(x); Risultato: y = [3 1] z = [2 1] 29
Diagrammi in 2 dimensioni In Matlab i diagrammi bidimensionali vengono disegnati mediante un insieme ordinato di coppie che rappresentano coordinate di punti che sono connessi tramite una linea spezzata Esempio: x = -10:0.1:10; y=x.^3; plot(x,y); xlabel('ascisse'); ylabel('ordinate'); title('cubica'); 30