Introduzione a MATLAB 23 febbraio 2009

Documenti analoghi
19 FEBBRAIO 2009 PRIMA PARTE

INTRODUZIONE A MATLAB/OCTAVE

Introduzione a MATLAB

MATLAB c Utilizzo di Matlab. Operazioni fondamentali. Elementi di grafica.

Introduzione a MATLAB

MATLAB - Introduzione. Antonino Polimeno

1) Matlab e simulazione. 2) Esempi di utilizzo. Mauro De Sanctis corso di Informazione e Codifica Università di Roma Tor Vergata

Laboratorio 1 Introduzione a Matlab R - Octave

1 a lezione - laboratorio

Scilab. Introduzione a Scilab - Vettori. Corso di Informatica CdL: Chimica. Claudia d'amato.

Parte 1 Tutorial Definizioni preliminari

INTRODUZIONE A MATLAB. Introduzione. Calcolatrice base. Calcolatrice base. Variabili predefinite o speciali. Variabili predefinite o speciali

Vettori e Matrici. Corso di Calcolo Numerico. 24 Aprile 2018

Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari. MATLAB: lezione introduttiva

Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici

Calcolo Scientifico e Metodi Numerici A.A. 2018/2019

Introduzione a MATLAB

Laboratorio di Calcolo Numerico Laboratorio 8: Vettori e Matrici

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Introduzione a MATLAB

Capitolo 4: Tabelle. y(x) = x 3 ì 2x. Capitolo 4: Tabelle 67. Nota: le tabelle non sono disponibili nel modo di rappresentazione grafica 3D.

Introduzione. Corso di Metodi Numerici. 06 Marzo 2019

Variabile, costante ed espressione

Fondamenti di Informatica A. A / 1 9

Esercitazioni di MatLab

MATRICI (ARRAY) IN MATLAB/OCTAVE

UTILIZZO DI MATLAB OPERAZIONI FONDAMENTALI

INTRODUZIONE A MATLAB

Introduzione al MATLAB c Parte 1 Variabili ed array

Algoritmi stabili e instabili

Introduzione a Matlab. Renato Mainetti

Laboratorio di Matlab

Introduzione al MATLAB c Parte 1 Variabili ed array

Corso di Calcolo numerico

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Informatica Applicata al Suono Tutorial Matlab

Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici

CODICE PER LA FUNZIONE DI PUNTO FISSO (BOZZA)

Lezione 19: Introduzione a MATLAB Mercoledì 21 Ottobre 2009

ESERCITAZIONE MATLAB

CORSO DI LABORATORIO DI INFORMATICA

Laboratorio di Calcolo Numerico Laboratorio 3: Algoritmi stabili e instabili, Bisezione

Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici

x t = M t a.

Principi di Programmazione Prova del 10/6/2008 (ore 10.30)

Fondamenti di Informatica

Introduzione al MATLAB c Parte 3 Script e function

Introduzione al MATLAB c Parte 3 Script e function

Introduzione. MATLAB è l acronimo di MATrix LABoratory

Introduzione al MATLAB c Parte 3 Script e function

Introduzione a Matlab

A.A. 2018/2019. Fondamenti di Programmazione in MATLAB FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Fondamenti di Informatica

Introduzione a Matlab Parte 1

Introduzione a Matlab

1. Calcolo dell indice di condizionamento di una matrice

Università degli Studi di Napoli Federico II CdL Ing. Elettrica Corso di Laboratorio di Circuiti Elettrici

Esercitazione 00 Introduzione a Matlab

Fondamenti di Informatica

3. Matrici e algebra lineare in MATLAB

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

Fondamenti di Automatica

FONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis Slide (rielaborate) del prof. Emiliano Casalicchio

Dinamica e Controllo dei Processi Energetici. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Introduzione a MATLAB

Introduzione a Matlab

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

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

INTRODUZIONE A MATLAB

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

Operatori relazionali

Introduzione a Matlab

Introduzione al MATLAB c Parte 2

Esercizi scalari. 10*10^6 + 3; (Usare la notazione esponenziale) coseno(30 ) - seno(pi greco/2) + pi greco /6 (0.3896)

Laboratorio 1 Strumenti quantitativi per la gestione

Introduzione a MATLAB

MATLAB parte II. Array

Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

RICONOSCIMENTO DI FORME A.A OBIETTIVI PARTE 1 INTRODUZIONE A MATLAB

Introduzione all uso di MATLAB

MATLAB (II parte) Commenti. Input/Output (I/O) Istruzioni di Input/Output (I/O)

Metodi numerici con elementi di Programmazione A.A

FONDAMENTI DI SEGNALI E TRASMISSIONE 1 Laboratorio

Esercitazione 1: Introduzione a MATLAB

Introduzione a MATLAB

FONDAMENTI DI INFORMATICA

1 Introduzione. 1.2 Area di lavoro e comandi

Registro di Matematica Applicata /18 - Dott.ssa L. Fermo 2

8 Introduzione MATLAB

A = Quindi > b=a(:) b =

Università degli Studi di Ferrara

Metodi numerici con elementi di Programmazione A.A

Transcript:

Introduzione a MATLAB 23 febbraio 2009 cos'è MATLAB? - E' una calcolatrice (permette di fare le operazioni elementari +, -, *, /); - E' una calcolatrice scientifica (permette di trattare i numeri complessi, le radici, i logaritmi, le funzioni trigonometriche); - E' una calcolatrice programmabile: permette di memorizzare e richiamare dati; creare, eseguire e salvare sequenze di comandi (è un linguaggio di programmazione!); - E' una calcolatrice programmabile completa e potente: consente di visualizzare dati in molti modi diversi; di fare calcoli matriciali, manipolare polinomi, valutare integrali, trattare equazioni simboliche. Se serve una certa funzione, probabilmente è già disponibile in MATLAB, e se non lo è la si può creare. COMMAND WINDOW: E' la finestra principale attraverso la quale interagiamo con MATLAB. Quando questa finestra è attiva c'è un cursore che lampeggia a destra del prompt (), indicando che MATLAB è in attesa di ricevere un comando. Utilizziamo MATLAB per fare un semplice calcolo: 2+3 [invio] 5 possiamo anche definire delle variabili: a = 2 [invio] a = 2 b = 3 [invio] b = 3 c = a + b [invio] c = 5 la eco può essere eliminata con un ; d = 2 * c ; [invio] In questo modo la variabile d viene valutata ma non viene visualizzata. Per sapere qual è il suo valore dobbiamo richiamarla: d d = 10 1

Per definire più variabili in una unica riga di comando si possono usare la virgola e il punto e virgola come separatori: e = 2, f = 3 ; g = e + f e = 2 g = 5 Si noti che i valori di e di g vengono visualizzati, mentre il valore di f non viene visualizzato. attenzione! Se il valore di e cambia, il valore di g non viene automaticamente aggiornato. Per aggiornare la variabile g dobbiamo rieseguire l'istruzione g = e + f e = 4 e = 4 g = e + f g = 7 Proviamo a moltiplicare 2 per c 2c??? 2 Missing operator, comma, or semi-colon. c2??? Undefined function or variable 'c2'. Abbiamo ottenuto messaggi di errore; infatti ci vuole il * fra i due moltiplicandi. 2*c 10 oppure : c*2 10 Notiamo che se non assegniamo ad alcuna variabile il prodotto 2*c, MATLAB pone automaticamente il risultato nella variabile ans: 2 * ans 20 rieseguiamo adesso l ultima istruzione: 2

2 * ans 40 Regole da rispettare quando si nomina una variabile: - MATLAB è case sensitive (a e A' sono due variabili diverse); - un nome di variabile non può iniziare con una cifra, né con caratteri speciali (%, $, &, _, etc...), bensì con una lettera. Le cifre sono ammesse dalla seconda posizione in poi. Non sono ammessi spazi; - La lunghezza massima del nome di una variabile è 19 caratteri. I caratteri dal 20 esimo in poi vengono ignorati. Le operazioni elementari che MATLAB supporta sono: + - * / (divisione destra) \ (divisione sinistra) La divisione destra è quella ben nota. La divisione sinistra, il cui simbolo è \ (backslash) è meno familiare: 5/2 5\2 2\5 2.5 0.4 2.5 Il comando who permette di avere una lista di tutte le variabili che sono state definite fino a questo momento who Your variables are: a b d f ans c e g Il comando save permette di salvare in un file il workspace, ovvero l'insieme di tutte le variabili definite fino a questo momento e dei loro valori, in modo da poterle richiamare successivamente. Il salvataggio avviene in un file chiamato matlab.mat (che per default viene salvato nella directory C:\MATLABR11\work). 3

Se vogliamo salvare il workspace con un nome diverso utilizziamo il comando save nomefile Salviamo tutte le variabili che abbiamo definito fino a questo momento in un file chiamato paperino.mat save paperino nota: non è necessario scrivere l estensione del file (per intenderci: save paperino e save paperino.mat hanno lo stesso effetto). Il comando clear viene utilizzato per cancellare una o più variabili: Per cancellare la variabile a: clear a per cancellare le variabili b e c: clear b c Per cancellare tutte le variabili del workspace: clear oppure, indifferentemente, clear all Per caricare un workspace precedentemente salvato si utilizza l istruzione load nomefile load topolino??? Error using ==> load topolino.mat: Can't open file. Il file topolino.mat non esiste, oppure, se esiste, non si trova nella directory corrente di lavoro. load paperino Il file che generiamo con l'istruzione save ha estensione.mat 4

Con l'istruzione format si stabilisce in quale formato si possono visualizzare i risultati numerici: se il risultato è un intero, viene visualizzato come tale. a1 = 1 a1 = 1 Se è un numero reale, viene visualizzato per default con 4 cifre decimali a2 = 0.12345678 a2 = 0.1235 Se le cifre significative sono oltre questo range, viene automaticamente utilizzata la notazione scientifica. a3 = 0.000012345 a3 = 1.2345e-005 Questo formato si può modificare utilizzando il comando format format long a2 a2 = 0.12345678000000 a3 a3 = 1.234500000000000e-005 Importante: Il comando format agisce solo sulla visualizzazione dei numeri, non sulla loro rappresentazione interna!! Ci sono altre possibilità di visualizzazione dei risultati numerici. Quali? Chiediamo aiuto sull istruzione format utilizzando la funzione help help format FORMAT Set output format. All computations in MATLAB are done in double precision. FORMAT may be used to switch between different output display formats as follows: FORMAT Default. Same as SHORT. FORMAT SHORT Scaled fixed point format with 5 digits. FORMAT LONG Scaled fixed point format with 15 digits. FORMAT SHORT E Floating point format with 5 digits. FORMAT LONG E Floating point format with 15 digits. FORMAT SHORT G Best of fixed or floating point format with 5 digits. FORMAT LONG G Best of fixed or floating point format with 15 digits. FORMAT HEX Hexadecimal format. 5

FORMAT + The symbols +, - and blank are printed for positive, negative and zero elements. Imaginary parts are ignored. FORMAT BANK Fixed format for dollars and cents. FORMAT RAT Approximation by ratio of small integers. Spacing: FORMAT COMPACT Suppress extra line-feeds. FORMAT LOOSE Puts the extra line-feeds back in. Vediamo adesso un po di funzioni che MATLAB supporta: sqrt(a2) 0.35136417005722 exp(a2) 1.13140110432962 log(a2) % è il logaritmo naturale -2.09186414367840 log10(a2) % è il logaritmo in base 10-0.90848505449080 abs(ans) % è il valore assoluto 0.908485054490799 sin(a2) 0.12314340625081 Ce ne sono tante altre... (v. manuale) MATLAB supporta anche i numeri complessi: c = 1 + 2*i c = 1.00000000000000 + 2.00000000000000i abs(c) 2.23606797749979 Per tornare alla impostazione di visualizzazione di default è sufficiente digitare format short 6

oppure, più brevemente, format Vediamo ora come trattare vettori e matrici. Definiamo un vettore riga, che chiamiamo r r = [10 14 20] r = 10 14 20 oppure r = [10, 14, 20] r = 10 14 20 Si vede che la virgola, come separatore di elementi di un vettore riga, è facoltativa e può essere sostituita con uno spazio. Definiamo adesso un vettore colonna: c = [ 4 ; 7 ; 9 ] c = oppure 4 7 9 c = [4 7 9] c = 4 7 9 Quindi, per separare una riga da quella successiva si utilizza il ; oppure, alternativamente, si batte [invio] E una matrice? come si definisce? A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] 7

A = 1 2 3 4 5 6 7 8 9 oppure A = [ 1, 2, 3 4 5 6 7 8 9] A = 1 2 3 4 5 6 7 8 9 Le considerazioni sul ; e sulla, esposte a proposito della definizione di vettori sono valide anche per la definizione di matrici. Si possono comporre vettori e matrici: B = [A ; r] B = 1 2 3 4 5 6 7 8 9 10 14 20 e anche C = [A, c] C = 1 2 3 4 4 5 6 7 7 8 9 9 ma non si può fare D = [A, r]??? All matrices on a row in the bracketed expression must have the same number of rows. e neanche D = [A ; c]??? All rows in the bracketed expression must have the same 8

number of columns. Vogliamo adesso definire la matrice T come la trasposta della matrice C T = C' T = 1 4 7 2 5 8 3 6 9 4 7 9 Il ' può essere applicato anche a vettori riga (che diventano vettori colonna) e a vettori colonna (che diventano vettori riga): r' c' 10 14 20 4 7 9 e quindi possiamo fare: D = [A, r'] D = 1 2 3 10 4 5 6 14 7 8 9 20 D = [A ; c'] D = 1 2 3 4 5 6 7 8 9 4 7 9 si possono comporre anche matrici e vettori come segue: [A A] 9

1 2 3 1 2 3 4 5 6 4 5 6 7 8 9 7 8 9 [A ; A] [ r r ] 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 14 20 10 14 20 [r ; r ] 10 14 20 10 14 20 Un altro esempio: c2 = [ 0 ; 1 ; 5 ] ; [ c2, 2*c2, -c2 ] 0 0 0 1 2-1 5 10-5 Possiamo essere interessati a costruire vettori un po' particolari. In alcune circostanze ci sono comandi che semplificano l'immissione dei dati: Per esempio x = [ 0 : 2 : 10 ] x = 0 2 4 6 8 10 10

Si possono fare composizioni a piacere... X = [ x ; 2*x ; [1:1:6] ] X = 0 2 4 6 8 10 0 4 8 12 16 20 1 2 3 4 5 6...ma attenzione alle dimensioni dei vettori che compongono la matrice! X = [ x ; 2*x ; [1:1:5] ]??? All rows in the bracketed expression must have the same number of columns. Un altro modo per costruire il vettore x senza dover immettere ogni singolo elemento che lo compone è il seguente: linspace(0,10,6) 0 2 4 6 8 10 In un certo senso linspace è complementare all'istruzione che permette di costruire il vettore x impiegando i due punti. Infatti, in questo ultimo caso si forniscono i due elementi estremi del vettore e il passo fra due elementi successivi. Con linspace il vettore viene costruito fornendo i due elementi estremi e il numero di elementi totali del vettore (non il passo). Proviamo ad utilizzare l'istruzione linspace inizio = 10 ; fine = 24 ; nelem = 8 ; y = linspace(inizio,fine,nelem) y = 10 12 14 16 18 20 22 24 ha veramente 8 elementi il vettore y? length(y) 11

8 La funzione length fornisce quindi il numero di elementi di un vettore (indifferentemente per vettori riga e per vettori colonna). C'è un'altra funzione, simile a length, che fornisce invece le dimensioni di una variabile intesa come una matrice: size(y) 1 8 Dunque la funzione size accetta in ingresso una array (scalare, vettore o matrice) e restituisce un vettore i cui due elementi sono, rispettivamente, il numero di righe e il numero di colonne dell'array. size(a) % è una matrice 3x3 3 3 size(a) % è uno scalare 1 1 Infatti, MATLAB tratta gli scalari come matrici 1x1 e i vettori come matrici che hanno una sola riga o una sola colonna, a seconda del caso. Se moltiplichiamo uno scalare per un vettore? 5*y 50 60 70 80 90 100 110 120 La stessa cosa si può fare per una matrice: 2*A 2 4 6 8 10 12 14 16 18 12

Vediamo adesso come calcolare il determinante e la inversa di una matrice. Definiamo: Mat = [ 8 1 6 ; 3 5 7 ; 4 9 2] Mat = 8 1 6 3 5 7 4 9 2 Per calcolare il determinante: det(mat) -360 e per calcolare la matrice inversa: inv(mat) 0.1472-0.1444 0.0639-0.0611 0.0222 0.1056-0.0194 0.1889-0.1028 e il determinante dell inversa? det(inv(mat)) -0.0028 facciamo una verifica: inv(det(inv(mat))) -360 Richiamiamo la matrice Mat Mat Mat = 13

8 1 6 3 5 7 4 9 2 Come possiamo fare se vogliamo estrarre la diagonale principale della matrice Mat con poco sforzo? Utilizziamo il comando diag diag(mat) 8 5 2 Il comando diag è particolarmente utile anche per effettuare alcune operazioni sulle matrici. diag(mat,1) 1 7 diag(mat,-1) 3 9 diag(mat,2) 6 diag(mat,3) Empty matrix: 0-by-1 help diag DIAG Diagonal matrices and diagonals of a matrix. DIAG(V,K) when V is a vector with N components is a square matrix of order N+ABS(K) with the elements of V on the K-th diagonal. K = 0 is the main diagonal, K > 0 is above the main diagonal and K < 0 is below the main diagonal. DIAG(V) is the same as DIAG(V,0) and puts V on the main diagonal. DIAG(X,K) when X is a matrix is a column vector formed from 14

the elements of the K-th diagonal of X. DIAG(X) is the main diagonal of X. DIAG(DIAG(X)) is a diagonal matrix. Example m = 5; diag(-m:m) + diag(ones(2*m,1),1) + diag(ones(2*m,1),-1) produces a tridiagonal matrix of order 2*m+1. See also SPDIAGS, TRIU, TRIL. Vogliamo cancellare la matrice Mat? clear Mat Naturalmente MATLAB permette di eseguire anche prodotti scalari e vettoriali; definiamo adesso i due elementi e1 e e2 come segue: e1 = [ 1 0 0 ] ; e2 = [ 0 1 0 ] ; e1*e2??? Error using ==> * Inner matrix dimensions must agree. Perche??? e1*e2' 0 Ok. Ma attenzione! e1'*e2 0 1 0 0 0 0 0 0 0 Infatti abbiamo moltiplicato una matrice 3x1 e una 1x3. Il risultato una matrice 3x3. Abbiamo fatto il prodotto scalare fra due vettori di tre elementi ciascuno. Esiste una istruzione apposta: dot(e1,e2) 15

0 dot(e2,e1) 0 Esiste anche il prodotto vettoriale: e3 = cross(e1,e2) e3 = 0 0 1 e3 = cross(e2,e1) e3 = 0 0-1 NB: per usare l istruzione dot è sufficiente che i due vettori abbiano lo stesso numero di elementi, qualunque esso sia, per utilizzare cross, invece, i due vettori devono avere lunghezza 3!! Possiamo voler operare su uno specifico elemento di un array. Per esempio, qual è il terzo elemento di x? e l'ultimo elemento di y? Possiamo costruire un vettore colonna composto da questi due elementi? x(3) 4 y(end) 24 z = [ x(3) ; y(end) ] z = 4 24 Possiamo estrarre un elemento di una matrice? Per esempio, qual è l'elemento di coordinate (2,3) della matrice A? A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ; A(2,3) 6 16