Strumenti per il calcolo numerico Matlab/Octave

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

ESERCITAZIONE MATLAB

Caratteristiche di un linguaggio ad alto livello

Introduzione a Matlab (e al Calcolo Numerico)

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

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Strutture dati e loro organizzazione. Gabriella Trucco

Informatica Applicata al Suono Tutorial Matlab

3. Matrici e algebra lineare in MATLAB

Somma di numeri binari

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

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

PROBLEMI ALGORITMI E PROGRAMMAZIONE

MATLAB parte II. Array

Corso di Visione Artificiale. Matlab per Visione. Samuel Rota Bulò

Algoritmi e basi del C Struttura di un programma

Fortran in pillole : prima parte

DESCRIZIONI RIGOROSE c7

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Programmazione in Java (I modulo)

Introduzione a MATLAB. Il Laboratorio. MATLAB Cos è? Oltre alle lezioni. Octave ( ) Scilab ( )

INTRODUZIONE A MATLAB

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

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Lab. 1 - Introduzione a Matlab

Advanced level. Corso Matlab : Samuela Persia, Ing. PhD.

I numeri reali e la loro rappresentazione

Vettori e Matrici. Vettori. Vettori e matrici: dati. Vettori di caratteri Polinomi. Dimensione (Size) numero di righe e di colonne della matrice

Introduzione al MATLAB c Parte 2 Funzioni

Caratteri e stringhe

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

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

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

Espressione di chiamata di funzione

Struttura dei programmi C

Capitolo Tavola e grafico

Introduzione alla programmazione in C(++)

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Sviluppo di programmi

Laboratorio di Matematica Computazionale A.A Lab. 1 - Introduzione a Matlab

MATLAB (1) Introduzione e Operazioni con array

Linguaggio C - sezione dichiarativa: costanti e variabili

Operatori Relazionali in MATLAB. Logica e relazioni

LINGUAGGI DI PROGRAMMAZIONE!

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Linguaggio C++ 8. Matrici

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Introduzione al MATLAB c Parte 1

Laboratorio di Matlab

Codifica. Rappresentazione di numeri in memoria

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

Corso Matlab : Seconda lezione (Esercitazione, 10/05/13) Samuela Persia, Ing. PhD.

Inversa di una matrice quadrata. L operatore inv() inverte una matrice quadrata non singolare (cioè in cui il determinate è diverso da zero).

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

INTRODUZIONE A MATLAB Matrix Laboratory

Rappresentazione dell Informazione

Elementi di C++ di base

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

Lezioni su MATLAB. Ingegneria Civile/Meccanica

Cenni sull utilizzo dei fogli elettronici

EUROPEAN COMPUTER DRIVING LICENCE SYLLABUS VERSIONE 5.0

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

UD 3.2b: Programmazione in Pascal (1)

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

Corso di Matematica per la Chimica

Introduzione al Foglio Elettronico

Lezione 10. L arte della programmazione

2. Algoritmi e Programmi

Transcript:

Strumenti per il calcolo numerico Matlab/Octave Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 2 Dicembre 2016

Compitini Se non per il 7/12@3am 2

Compitini Se non per il 7/12@3am Arriveranno per il 19/12 3

4

Compitini Se non per il 7/12@3am Arriveranno per il 19/12 Visione @ 20/12 6

Obiettivi Benvenuti nel fantastico mondo di Matlab/Octave! 7

Matlab Cos è Matlab: strumento (e corrispondente linguaggio) per elaborazioni di calcolo numerico NB: sta per MATrix LABoratory» centrato sulle matrici (ma include generiche funzionalità matematiche) usato nei successivi corsi di calcolo numerico MATLAB è uno strumento commerciale distribuito, su licenza NON gratuita, da The MathWorks Inc Student edition disponibile quando si è al Politecnico Esiste un altro strumento di nome Octave identico nella concezione, molto simile per gli aspetti operativi disponibile gratuitamente, vedi www.gnu.org/software/octave/ 8

Caratteristiche del linguaggio di Matlab/ Octave (1) Linguaggio di alto livello simile a linguaggi di programmazione C, Java, Pascal possiede comandi sintetici per effettuare complesse elaborazioni numeriche Linguaggio interpretato, comandi e istruzioni NON tradotti in codice eseguibile dall hardware MA manipolati da un programma (l interprete) che li analizza ed esegue azioni da essi descritte Linguaggio dinamico NON occorre dichiarare le variabili risultano definite dal punto in cui vengono introdotte e vengono incluse in una struttura detta tabella dei simboli il tipo delle variabili è dinamico a una variabile si possono assegnare, successivamente, valori di tipo diverso (scalari, stringhe, vettori, matrici...) 9

Caratteristiche del linguaggio di Matlab/ Octave (2) In Matlab/Octave tutto è un array ci sono casi particolari significativi di array array 1x1 sono gli scalari array con una sola riga o colonna sono i vettori array con due dimensioni sono le matrici array con >2 dimensioni: matrici multidimensionali 10

Per macchine PoliMI https://virtualdesktop.polimi.it 11

Screenshot interfaccia MATLAB Mostra le variabili nel workspace Contenuto della directory corrente Storia dei comandi Finestra dei comandi Lancia i tool di MATLAB ed altro - 12 12 - - 12

Screenshot dell interfaccia OCTAVE Linea di comando dell interprete 13

GUI di Octave Contenuto della directory corrente Storia dei comandi Finestra dei comandi 14

Comandi in Matlab Matlab accetta comandi che l utente scrive di seguito al prompt : >> es. >> a = 10; Assegna alla variabile a il valore 10 Esempio di alcuni comandi: help richiama la guida in linea diary può essere utilizzato per salvare la sessione di lavoro who, whos e workspace mostrano l elenco delle variabili definite save permette di salvare in un file le variabili definite. Load le ricarica clear cancella tutte le variabili 15

Esempi Input Output Commento 1234/6 ans = 205.67 calcolo di un valore scalare a=1234/6 a = 205.67 assegnamento alla variabile a del risultato di 1234/6 eps eps = 2.2204e-16 variabile predefinita: la più piccola differenza rappresentabile tra due numeri 2/5 ans = 0.40000 divisione destra 5/0 ans = Inf divisione per zero 5^2 ans = 25 potenza real(4+5j) ans = 4 real è una funzione predefinita che restituisce la parte reale di un numero complesso 1+1==2 1+1~=2 ans = 1 ans = 0 1 = vero, 0 = falso, == uguale, ~= diverso (codice ASCII di ~ : 126) 16

Esempi con gli array a=[1 2; 3, 4] a = a a = x=[-1.3 sqrt(3) (1+2)/5] 1 2 3 4 1 2 3 4 x = -1.30000 1.73205 0.60000 x(5)=abs(x(1)) x = -1.30000 1.73205 0.60000 0.00000 1.30000 b=a b = 1 3 2 4 a ora è una matrice 2x2, ; separa le righe; virgola opzionalmente separa elementi (ma basta lo spazio) restituisce il valore della variabile a elementi possono essere espressioni Notazione con () per accedere a elementi di una matrice; abs valore assoluto; NB: vettore x esteso per includere nuovo elemento; elementi non assegnati sono nulli matrice trasposta (scambiate righe e colonne) c=a+b c = 2 5 5 8 x=[-1 0 2]; y=x' y = -1 0 2-17 - somma di matrici, elemento per elemento (sottrazione con - simile) il ; blocca l output, ma non impedisce la valutazione 17

Altre operazioni con gli array a = [] a = [] array vuoto, convenzionalmente rappresenta valore nullo x=1:5 x = 1 2 3 4 5 operatore : per produrre vettori di numeri y=0:pi/4:pi y = 0.00000 0.78540 1.57080 2.35619 3.14159 v=10:-4:-3 v = 10 6 2-2 sin(y) ans = 0.00000 0.70711 1.00000 0.70711 0.00000 x=[0:pi/100:pi/2]'; [x sin(x)] ans = 0.00000 0.00000 0.03142 0.03141... 1.53938 0.99951 1.57080 1.00000 operatore : con passo di incremento e valori non interi (pi è pigreco) valori negativi del passo e degli estremi funzioni predefinite si applicano ai vettori produce la tabella di sin(x), 0 x π/2 18

Diagrammi a due dimensioni Diagramma = insieme di coppie che rappresentano coordinate di punti Si usano vettori per contenere sequenze ordinate dei valori di ognuna delle coordinate plot(x,y) disegna digramma cartesiano dei punti che hanno valori delle ascisse in x, delle ordinate in y e li congiunge con una linea, per dare continuità al grafico funzioni xlabel per visualizzare nome asse ascisse, ylabel per ordinate, title per il titolo 1000 800 cubica >> x = -10:0.1:10; >> y=x.^3; >> plot(x,y); >> xlabel('ascisse'); >> ylabel('ordinate'); >> title('cubica'); ordinate 600 400 200 0-200 -400-600 -800-1000 -10-8 -6-4 -2 0 2 4 6 8 10 ascisse 19

Diagramma in GUI-Octave 20

Un esempio di cinematica Due treni partono da due stazioni adiacenti, che distano 15km, viaggiando a velocità di 50m/s e 30m/ s in direzione opposta Costruire un grafico che mostra il loro movimento, fino a quando il più veloce raggiunge la destinazione Il più veloce impiega 15000/50=300s DistanzaTreno1=50 t; DistranzaTreno2=15000-30 t; (per mostrare la provenienza dalla direzione opposta) 21

Soluzione t=0:1:300; p1=50 * t; p2=15000 30 * t; plot(t,p1); hold on %adesso è possibile inserire nuove curve sul grafico plot(t,p2) hold off 22

Risultati ottenuti con l esempio 23

Istruzioni e ; Non come in C Le istruzioni possono essere seguite da ; ma non è obbligatorio Il ; blocca la visualizzazione del valore delle variabili coinvolte nell istruzione Maggiore velocità di esecuzione Regola di buona programmazione Inserire sempre il ;, a meno che non si voglia ispezionare il valore di una variabile a scopo di debugging 24

Commenti Il simbolo di commento può essere messo in qualsiasi punto della linea. MATLAB ignorerà tutto quello che viene scritto alla destra del simbolo %. Per esempio: >>% This is a comment. >>x = 2+3 % So is this. x = 5 25

Array e variabili L unità fondamentale di dati in MATLAB è l array Una variabile in MATLAB è una regione di memoria che contiene un array Ha un nome definito dall utente Per i nomi valgono regole simili a quelle del C C è un linguaggio a tipizzazione forte Le variabili vanno dichiarate prima dell uso MATLAB è un linguaggio a tipizzazione debole Le variabili vengono create assegnando ad esse dei valori Il loro tipo è determinato dal tipo dei valori assegnati >> x = [1 2 3]; >> whos x; Name Size Bytes Class Attributes x 1x3 24 double 26

Tipo char Una variabile di tipo char contiene uno scalare o un array di valori a 16 bit (8 bit in Octave), ciascuno dei quali rappresenta un carattere Es: commento = questa e` una stringa ; Nome della variabile Array di 1x21 caratteri (NB: stringhe racchiuse tra apici singoli) whos commento; Name Size Bytes Class Attributes commento 1x21 42 char 27

Alcuni esempi 28

Una piccola nota italiana 29

Tipo double Una variabile di tipo double contiene uno scalare o un array di numeri espressi in 64 bit con doppia precisione Questi numeri possono essere Reali, es var1 = -10.7; Immaginari, es var2 = 4i; var3 = 4j; Complessi, es var3 = 10.3 + 10i; Es: x = [-1.3 3.1+5.3j 0] Le parti reali e immaginarie possono essere positive e negative nell intervallo di valori [10-308, 10 308 ] 30

Creazione e inizializzazione di una variabile Le variabili sono create al momento dell inizializzazione Modi di inizializzazione Assegnamento Lettura dati da tastiera Lettura da file 31

Assegnamento variabile = espressione Esempi 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 32

Assegnamento: NOTA Non tutti gli elementi devono essere specificati alla creazione Ricordiamo: pippo(2) è il secondo elemento di pippo Cosa sarà elemento_matrice_2d(6,3)? Ricordiamo: le variabili sono create al momento dell inizializzazione 33

Quindi, unendo i ricordiamo 34

Assegnamento (2) L array può essere esteso successivamente d = [2 5]; d(4)=2; d = [2 5 0 2] Operatore di trasposizione g = d ; 2 5 0 2 Creare un vettore enumerando i valori di un insieme: uso dell operatore : x = 1:2:10; x = [1 3 5 7 9] n = 1:3; n = [1 2 3] m = [n n ] 1 1 2 2 3 3 35

Tabella delle funzioni predefinite Funzione zeros (n) zeros (m,n) zeros (size(arr)) ones(n) ones(m,n) ones(size(arr)) eye(n) eye(m,n) length(arr) size(arr) v(end) m(end, end) Significato Genera una matrice nxn di zeri Genera una matrice mxn di zeri Genera una matrice di zeri della stessa dimensione di arr Genera una matrice nxn di uno Genera una matrice mxn di uno Genera una matrice di uno della stessa dimensione di arr Genera la matrice identità nxn Genera la matrice identità mxn Ritorna la dimensione più lunga del vettore Ritorna un vettore [r c] con il numero r di righe e c di colonne della matrice; se arr ha più dimensioni ritorna array con numero elementi per ogni dimensione ultimo elemento di vettore v; ultimo elemento dell ultima riga di matrice m; la costante end, come indice in un array, denota il più alto valore possibile dell indice 36

Funzioni predefinite Esempi a = zeros(2); 0 0 0 0 b = zeros(2,3); 0 0 0 0 0 0 c = [1 2; 3 4]; d = zeros(size(c)); 0 0 0 0 37

sottoarray: applicazione a vettori Si denota un sottoinsieme di un array usando vettori per valori degli indici >> v=[6 8 4 2 4 5 1 3] v = 6 8 4 2 4 5 1 3 >> v([1 4 7]) primo, quarto settimo elemento ans = 6 2 1 >> v(2:2:6) ans = 8 2 5 2:2:6 è il vettore [2, 4, 6]: indica secondo, quarto, sesto elemento >> v(3:end-2) ans = 4 2 4 5 dal terzo al terz ultimo elemento >> v(v) i valori di v usati come indice ans = 5 3 2 8 2 4 6 4 >> 38

sottoarray: applicazione a matrici m = 9 8 7 6 5 4 3 2 1 0 11 12 0 0 0 >> m([1 4], [2 3]) ans = 8 7 11 12 >> m(1:2:5, 1:end) ans = 9 8 7 3 2 1 0 0 0 >>>> m(1:2:5, :) ans = 9 8 7 3 2 1 0 0 0 >> m(2:2:4, :) = [-1-2 -3; -4-5 -6]; >> m m = 9 8 7-1 -2-3 3 2 1-4 -5-6 0 0 0 >> tutti gli elementi sulle righe 1 e 4 e sulle colonne 2 e 3 tutti gli elementi delle righe 1, 3 e 5 notazione : abbreviata per 1:end, cioè tutti i valori di quell indice uso della notazione dei sottoarray per individuare elementi oggetto di assegnamento 39

Nota sui sottoarray Perchè: temp(2:2:4, :) e non temp(2:4, :)? Perchè temp(2:4, :) sono le righe 2, 3 e 4!!! 40

Uso di uno scalare per assegnare valori a un array Esempio m(1:4, 1:3) = 3 3 3 3 3 3 3 3 3 3 3 3 3 Il modo con cui uno scalare viene assegnato a un array dipende dalla forma dell array che viene specificata a sinistra dell assegnamento Esempio 2 m(1:2, 1:2) = 4 4 4 3 4 4 3 3 3 3 3 3 3 41

Uso dell array vuoto [] per cancellare elementi di un array Un array vuoto [] assegnato a un elemento di un vettore non crea un buco ma cancella un elemento e ricompatta il vettore Un array vuoto [] non assegnabile a singoli elementi di matrici (non si possono creare buchi ) Assegnabile a intere righe o colonne di matrici, che vengono cancellate (ricompattando la matrice) >> a=[1 2 3 4 5]; >> length(a) ans = 5 >> a(3) ans = 3 >> a(3)=[] a = 1 2 4 5 >> a(3) ans = 4 >> length(a) ans = 4 >> m=magic(4) m = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> m(3,4)=[]??? Subscripted assignment dimension mismatch. >> m(3,:)=[] m = 16 2 3 13 5 11 10 8 4 14 15 1 >> [r,c]=size(m) r = 3 c = 4 >> m(:,2)=[] m = 16 3 13 5 10 8 4 15 1 >> [r,c]=size(m) r = 3 c = 3 42

Array: memorizzazione Matrici memorizzate per colonna: colonna 1, poi colonna 2, 3, etc. ogni colonna memorizzata per indici di riga crescenti Array memorizzati in forma lineare nella RAM variando più velocemente i primi indici più lentamente quelli successivi NB: opposto a quanto avviene in C 1 2 3 4 5 6... 1 3 5 2 4 6... 43

Array: forma linearizzata Si può accedere a un array a più dimensioni come se ne avesse una sola Usando un unico indice si segue l ordine della memorizzazione Da NON usare nella programmazione ma aiuta a capire certi costrutti... 44

Variabili predefinite Matlab definisce un insieme di variabili predefinite (es, pi) Queste variabili spesso rappresentano importanti costanti della matematica (pi è pigreco, i e j sono sqrt(-1) ) Attenzione! Il valore di queste variabili può essere modificato, per esempio circ1=2*pi*10; pi = 3; circ2=2*pi*10; Il valore di circ2 non sarà più la circonferenza di un cerchio E` fortemente sconsigliato modificare il valore di una variabile predefinita ( evitare di usare variabili i e j come contatori) 45

Variabili predefinite più comuni Variabile pi Scopo contiene 15 cifre significative di π i, j contiene il valore i ( 1) inf (o Inf) nan clock date eps ans rappresentazione dell infinito (ottenuto di solito come risultato di una divisione per 0) Not-A-Number è il risultato di una operazione matematica non definita, es 0/0 contiene la data e l orario corrente. E` un vettore di sei elementi (anno, mese, giorno, ora, minuti, secondi) contiene la data corrente sotto forma di stringa epsilon: la più piccola differenza rappresentabile tra due numeri Variabile speciale usata per immagazzinare risultati non assegnati ad altre variabili 46

Operazioni con scalari e array Operazioni per gli scalari: + - * / ^ Operazioni per gli array Array operation: eseguita sugli elementi corrispondenti degli array coinvolti (devono avere lo stesso numero di righe e colonne); si indica aggiungendo un punto prima dell operatore aritmetico a= 1 b= 2 b= 2 3 a.* b= 2 6 3 4 5 7 15 28 Elevamento a potenza Matrix operation: segue le regole dell algebra lineare (esempio: prodotto righe per colonne) a= 1 b= 2 b= 2 3 a*b= 3 4 5 7 12 17 26 37 ( * b) ij = a a * b k ik kj 47

Cosa succede con il. 48

Altre funzioni Funzione ceil(x) floor(x) fix(x) max(x) min(x) mean(x) Scopo approssima x all intero immediatamente maggiore approssima x all intero immediatamente minore approssima x all intero più vicino verso lo zero se x è un vettore, ritorna il valore massimo in x e, opzionalmente, la collocazione di questo valore in x; se x è matrice, ritorna il vettore dei massimi delle sue colonne se x è un vettore, ritorna il valore minimo nel vettore x e, opzionalmente, la collocazione di questo valore nel vettore; se x è matrice, ritorna il vettore dei minimi delle sue colonne se x è un vettore ritorna uno scalare uguale alla media dei valori di x; se x è una matrice, ritorna il vettore contentente le medie dei vettori colonna di x; mod(m,n) mod(m,n) è m - q.*n dove q = floor(m./ n) se n ~= 0 round(x) rand(n) approssima x all intero più vicino genera una matrice di NxN numeri casuali 49

funzioni min (e anche max) applicate a vettori e matrici >> b = [4 7 2 6 5] b = 4 7 2 6 5 >> min(b) ans = 2 >> [x y]=min(b) x = 2 y = 3 >> (con un solo risultato) dà il valore del minimo con due risultati dà anche la posizione del minimo >> a = [24 28 21; 32 25 27; 30 33 31; 22 29 26] a = 24 28 21 32 25 27 30 33 31 22 29 26 >> min(a) per una matrice dà vettore dei minimi nelle colonne ans = 22 25 21 >> [x y]=min(a) x = 22 25 21 y = 4 2 1 >> per una matrice, con due risultati dà due vettori dei valori minimi nelle colonne e della loro posizione (riga) 50

Operazioni tipiche per gli array Operazione Sintassi Matlab Commenti Array addition a + b Array e matrix addition sono identiche Array subtraction a b Array e matrix subtraction sono identiche Array multiplication a.* b Ciascun elemento del risultato è pari al prodotto degli elementi corrispondenti nei due operandi Matrix multiplication a * b Prodotto di matrici Array right division a./ b risultato(i,j)=a(i,j)/b(i,j) Array left division a.\ b risultato(i,j)=b(i,j)/a(i,j) Matrix right division a / b a*inversa(b) Matrix left division a \ b inversa(a)*b Array exponentiation a.^ b risultato(i,j)=a(i,j)^b(i,j) 51

Matrix left division Serve per risolvere sistemi di equazioni lineari a11x1+a12x2+a13x3=b1 a21x1+a22x2+a23x3=b2 a31x1+a32x2+a33x3=b3 può essere espresso come Ax=B con a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 A = B= x = b 1 b 2 b 3 x 1 x 2 x 3 di conseguenza, x = A-1B=inversa(A)*b=A\B 52

Fonti per lo studio + Credits Fonti per lo studio Introduzione alla programmazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio Capitolo 1 Credits Prof. A. Morzenti 53