MATLAB MATrix LABoratory MATLAB Sistema software interattivo per il Calcolo Scientifico che integra programmazione, calcolo e visualizzazione 2 Inizialmente fu progettato per facilitare l’uso del software sviluppato dai progetti LINPACK ed EISPACK Al sistema MATLAB appartengono librerie, dette TOOLBOXES, per la risoluzione di specifici problemi: • Financial • Splines • Optimization • Statistic • Symbolic Math • …… 3 Il Sistema MATLAB è costituito da 9Linguaggio 9Ambiente di lavoro 9Gestore di grafici 9Funzioni matematiche 9Programma di interfaccia con le applicazioni 4 Il Linguaggio Ad alto livello, orientato alle matrici, con •Costrutti di controllo •Funzioni •Strutture di dati •Gestione di I/O 5 L’ambiente di lavoro È l’insieme di strumenti e facilities con cui si lavora e che consente di 9Gestire le variabili nello spazio di lavoro 9Importare ed esportare dati 9Sviluppare e mettere a punto programmi 6 Gestore di grafici E’ possibile gestire i grafici mediante un sistema grafico che consente 9Visualizzazione di dati 9Image Processing 9Animazione 9Presentazioni grafiche 9Costruzione di interfacce grafiche di utente 7 Funzioni matematiche Directory Contenuto elmat Matrici elementari e manipolazione di matrici elfun Funzioni matematiche elementari specfun Funzioni matematiche speciali matfun Algebra lineare numerica datafun Analisi dei dati e trasformata di Fourier polyfun Interpolazione e polinomi funfun Funzioni di funzioni e risoluzione di ODE sparfun Matrici sparse 8 Programma di interfaccia con le applicazioni (API) Questa è una libreria che permette di scrivere programmi in C e in FORTRAN che interagiscono con MATLAB. Consente di: • Chiamare routine da Matlab • Chiamare MATLAB come un motore computazionale 9 Come si presenta Directory corrente Finestra dei comandi (Command Window) Spazio di lavoro In questa finestra è possibile inserire i comandi nel linguaggio di MATLAB Lista di comandi 10 help Matlab possiede un aiuto in linea che può essere ottenuto: 1. digitando help [comando] dalla finestra dei comandi 2. attivando l’aiuto dalla barra dei menu 3. Automaticamente quando si scrive il nome di una funzione di Marlab 11 Definizione di variabili MATLAB come calcolatrice » -5/(4.8+5.32)^2 ans = -0.0488 » (3+4i)*(3-4i) ans = 25 » cos(pi/2) ans = 6.1230e-017 » exp(acos(0.3)) ans = 3.5470 » a = 2; » b = 5; Il ‘;’ inibisce l’output sullo schermo » a^b ans = 32 » x = 5/2*pi; » y = sin(x) Risultati assegnati ad “ans” se il nome non è specificato y = 1 » z = asin(y) z = 1.5708 ( ) parentesi tonde per input alle funzioni 12 Tipo di dato Il tipo di dato fondamentale in MATLAB è l’array bidimensionale (matrice) Come casi particolari si ritrovano: • variabile scalare (array 1x1) • array monodimensionale nx1 (vettore colonna) o 1xn (vettore riga) MATLAB è case sensitive cioè A è una variabile diversa da a 13 Input di una matrice 1. Lista esplicita degli elementi 2. Costruzione degli elementi della matrice 3. Caricamento della matrice da un file di dati 14 Lista esplicita 1 » a=[1 2;3 4] a = 1 2 3 4 Parentesi quadre [ ] 9 ‘ ; ’ separatore di righe 9 spazio / virgola ‘ , ’ separatore di colonna 15 Lista esplicita 2 » a=[1 2 Parentesi quadre [ ] 3 4] »a = 1 2 3 4 9separatore di righe ↵ 9 spazio / virgola ‘ , ’ separatore di colonna 16 Lista esplicita » b=[-2.8, sqrt(-7), (3+5+6)*3/4] b = -2.8000 0 + 2.6458i 10.5000 » b(2,5) = 23 b = -2.8000 0 + 2.6458i 10.5000 0 0 0 0 0 0 23.0000 Le matrici devono essere rettangolari: vengono posti a zero gli elementi non definiti. 17 Esercizio •Costruire nei due modi illustrati la matrice: ⎛ −1 0 1 ⎞ ⎜ ⎟ A = ⎜ 2 0 − 2⎟ ⎜0 3 1 ⎟ ⎝ ⎠ 18 Costruzione degli elementi Espansione scalare Operatore ‘:’ (colon) per creare sequenze » w=[1 2;3 4] + 5 w = 6 7 8 9 » x = 1:5 x = 1 2 » y = 2:-0.5:0 Rand: funzione di utilità per creare matrici y = 2.0000 1.5000 0 » z = rand(2,4) 3 4 5 1.0000 0.5000 0.8913 0.7621 0.4565 0.0185 z = 0.9501 0.2311 0.6068 0.4860 19 Caricare i dati da un file 9con il comando load 9 da un M-file 9mediante Import Wizard 9usando le funzioni di I/O da file 20 load Se i dati si trovano in un file con estensione .mat (creato ad esempio con il comando save) Se i dati si trovano in un file ascii load nomefile Copia tutte le variabili del file nel workspace load nomefile Copia i dati in una sola variabile chiamata nomefile 21 Esempio 1: >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> B=[1 2] B = 1 2 >> save mat_vet A B >> clear >> load mat_vet Crea il file mat_vet.mat Cancella il contenuto del workspace Nel workspace non ci sono più le variabili A e B Carica le variabili A e B nel workspace 22 Esempio 2: >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> B=[1 2] B = 1 2 >> save –ascii mat_vet A B >> clear >> load mat_vet Crea il file mat_vet Cancella il contenuto del workspace A e B non sono più definite ??? Error using ==> load Number of columns on line 3 of ASCII file C:\matlabR12\bin\win32\mat_vet must be the same as previous lines. 23 Esempio 3: >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> B=[0 0 1] B = 0 0 1 >> save –ascii mat_vet A B Crea il file mat_vet Cancella il contenuto del workspace >> clear >> load mat_vet >> mat_vet A e B non sono più definite mat_vet = 1 2 3 4 5 6 0 0 1 24 Da un M-file Un M-file è un file con estensione .m, contenente istruzioni in linguaggio Matlab, che viene eseguito quando si digita nella command window il nome del file senza estensione Se un file contiene la definizione di un array, dopo l’esecuzione del file, l’array si trova nel workspace. 25 Esempio: 26 Con Import Wizard È il modo più semplice per importare i dati. Import Wizard si attiva dalla barra del menu di Matlab e può importare sia dati in formato testo sia dati binari 27 Esempio: 28 Funzioni di I/O da file Sono funzioni a basso livello che permettono di leggere e scrivere file di dati formattati con la sintassi del linguaggio C. 9 fopen 9 fread 9 fwrite 9 fclose 29 Aritmetica di MATLAB Matlab utilizza il Sistema aritmetico Floating-point Standard IEEE in doppia precisione F = ( 2, 52, -1023, 1024) Emin base precisione Emax 30 Visualizzazione dei numeri Matlab prevede i seguenti formati: •Format short (default) •Format short e •Format short g •Format long •Format long e •Format long g •Format hex •Format rat 31 ESEMPIO: format short Se il numero è compreso tra 10^-3 e 10^3 viene visualizzato in formato fixed-point con 4 cifre decimali altrimenti viene scalato per visualizzare una cifra della parte intera Numero 12.3456789123456 Visualizzazione 12.3457 123.456789123456 123.4568 1234.56789123456 0.00012456789123 1. 2346e+3 1. 2357e-4 32 ESEMPIO: format short e Viene visualizzato il valore in formato floatingpoint con una cifra della parte intera e 4 della parte decimale Numero 12.3456789123456 Visualizzazione 1.2346e+1 123.456789123456 1.2346e+2 1234.56789123456 0.00012456789123 1.2346e+3 1.2357e-4 33 ESEMPIO: format short g Viene visualizzato il valore migliore tra il formato floating-point e fixed-point Numero 12.3456789123456 Visualizzazione 12.3457 123.456789123456 123.4568 1234.56789123456 0.00012456789123 1.2346e+3 1.2357e-4 34 ESEMPIO: format long Simile al formato short ma con la visualizzazione di 15 cifre per la parte decimale Numero format long format long e format long g 3.141592653589792 3.14159265358979 3.14159265358979e+0 3.14159265358979 0.003141592653532 0.00314159265353 3.14159265353200e-3 0.00314159265353 35 ESEMPIO: format hex Visualizza la rappresentazione esadecimale (base 16) del numero binario in doppia precisione come rappresentato in memoria. >> eps ans = e=971-1023=-52 2.220446049250313e-016 29+28+27+26+23+2+1=971 >> format hex esponente >> ans ans = 3cb0000000000000 001111001011 segno (1+0.)2(-52) = 2.220446049250313e-016 36 ESEMPIO: format rat Approssima il valore con una frazione continua della forma: n = d1 + d d2 + >> 1/2 ans = 0.50000000000000 >> format rat 1 1 d3 + 1 1 L+ dk >> ans ans = 1/2 >> pi ans = 355/113 π non è un numero razionale! 37 Memorizzazione degli array Matlab memorizza gli array come un unico vettore colonna, che contiene le colonne dell’array aggiunte consecutivamente ⎛1 ⎜ a = ⎜4 ⎜7 ⎝ 2 5 8 3⎞ ⎟ 6⎟ 9 ⎟⎠ ⎛1⎞ ⎜ ⎟ ⎜4⎟ ⎜7⎟ ⎜ ⎟ ⎜2⎟ ⎜5⎟ ⎜ ⎟ ⎜8⎟ ⎜3⎟ ⎜ ⎟ ⎜6⎟ ⎜9⎟ ⎝ ⎠ 38 Le matrici in MATLAB A= 1 2 Righe (m) 3 1 Colonne (n) 2 3 4 5 4 10 2 1 8 6 1.2 2 7.2 23 18 14 A (17) 23 56 19 0 15 A (2,4) 22 11 5 13 10 17 13 9 21 25 1 4 83 5 4 7 0.5 16 12 8 4 5 9 5 0 6 11 7 3 4 1 24 10 20 25 39 Esempio » r=[1 2 3] r = 1 2 3 » n=[5 6 7]; » r=[r;n] r = 1 2 3 5 6 7 L’allocazione degli array è dinamica le dimensioni possono variare durante il calcolo 40 Concatenazione di array [ ] per combinare array già definiti come elementi di nuovi array » a=[1 2;3 4] Parentesi quadre [ ] a = 1 2 3 4 » cat_a=[a, 2*a; 3*a, cat_a = 1 2 2 3 4 6 3 6 4 9 12 12 5 10 6 15 20 18 4*a; 5*a, 6*a] 4 8 8 16 12 24 4*a Nota: L’array risultante deve essere rettangolare 41 Esempio: ⎛ 1 2 3⎞ ⎜ ⎟ a = ⎜ 4 5 6⎟ ⎜ 7 8 9⎟ ⎝ ⎠ a(2,3) a(1, 1 : 3) oppure a(1,:) •Si può puntare ad un elemento dell’array indicando gli indici tra parentesi tonde •Si può puntare ad una riga o ad una colonna dell’array indicando la variazione degli indici 42 Indirizzamento di parti di array 1 A= 1 1 4 2 5 9 23 10 1 83 16 2 25 23 1 19 4 13 21 22 18 14 5 4 7 15 6 17 13 0.5 4 9 5 0 5 11 12 8 4 3 1.2 7.2 3 10 7 3 4 6 8 2 A(3,1) A(3) 2 11 24 5 20 A(1:5,5) A(1:end,end) A(:,end) A(:,5) A(21:25) A(21:end) 0 56 25 10 A(4:5,2:3) A([9 14;10 15]) 43