Facoltà di Ingegneria Industriale. Matlab/Octave - Esercitazione 8

Documenti analoghi
Introduzione a Matlab

Introduzione a MATLAB

Introduzione a Matlab

Introduzione a MATLAB

Fondamenti di Informatica A. A / 1 9

Laboratorio di Matlab

8 Introduzione MATLAB

Fondamenti di Informatica

INTRODUZIONE A MATLAB/OCTAVE

LABORATORIO /03/2005

Algoritmi stabili e instabili

8 Introduzione MATLAB

Introduzione al MATLAB c Parte 2

Introduzione a MATLAB

INTRODUZIONE A MATLAB

Introduzione. MATLAB è l acronimo di MATrix LABoratory

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

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

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

Esercitazione 00 Introduzione a Matlab

19 FEBBRAIO 2009 PRIMA PARTE

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

Introduzione al MATLAB c Parte 1 Variabili ed array

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

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

Laboratorio di Calcolo Numerico Laboratorio 8: Vettori e Matrici

Fondamenti di Informatica

Informazioni generali

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

Introduzione al MATLAB c Parte 1 Variabili ed array

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


MATLAB Elementi di grafica Costrutti di programmazione

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione a Matlab

Laboratorio 1 Introduzione a Matlab R - Octave

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

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

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

Laboratorio 1 Strumenti quantitativi per la gestione

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

CORSO DI LABORATORIO DI INFORMATICA

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

1 a lezione - laboratorio

3. Matrici e algebra lineare in MATLAB

A.A. 2018/2019. Introduzione a MATLAB FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Introduzione a MATLAB

Matlab: introduzione

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

FONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis Tutor: prof. Venturino Taggi

ESERCITAZIONE MATLAB

Fondamenti di Informatica

Uso avanzato di MATLAB

Matlab: Script e Funzioni

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

Matlab: Variabili e Array. Informatica B

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

MATLAB - Introduzione. Antonino Polimeno

8 Introduzione MATLAB

FONDAMENTI DI INFORMATICA

Introduzione. Corso di Metodi Numerici. 06 Marzo 2019

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

Informatica Applicata al Suono Tutorial Matlab

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

Variabile, costante ed espressione

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

Corso di Calcolo numerico

Laboratorio 1 - Introduzione a MATLAB

>> A = [1 2 3; 4 5 6; 7 8 9]; >> A

Introduzione al MATLAB c Parte 3 Script e function

INTRODUZIONE A MATLAB

Programmare. Condizioni logiche. Condizioni Logiche Costrutti Decisionali Costrutti di Ciclo

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

Introduzione all ambiente MATLAB. Richiami II. Analisi Numerica - A.A. 2007/08

Introduzione a Matlab

Primi script in MATLAB

Introduzione a MATLAB


Introduzione a MATLAB

Vettori Matrici Grafi. Renato Mainetti

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

Matlab. Cristina Falcinelli, PhD

UTILIZZO DI MATLAB OPERAZIONI FONDAMENTALI

PON Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

FONDAMENTI DI SEGNALI E TRASMISSIONE 1 Laboratorio

Laboratorio di Sperimentazioni di Fisica I MOD A. 14 ottobre 2009

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

Fondamenti di Informatica

Introduzione ad Octave

Ciclo di seminari: Metodi Computazionali per la Finanza

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

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

Lezione 6 programmazione in Java

Introduzione a Matlab

Transcript:

Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Matlab/Octave - Esercitazione 8 tipi di dato array e matrici assegnamento variabili predefinite operatori e funzioni predefinite file di script istruzioni di input/output da tastiera e da file Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012

Interfaccia utente workspace: visualizza tutte le variabili globali in uso, il loro valore ed i rispettivi valori max e min command windw: consente di eseguire comandi, lanciare script e controllare lo stato delle variabili in uso. All avvio di MATLAB, sulla command window compare il carattere di attesa (prompt) ed il cursore lampeggiante. command history: mantiene traccia dei comandi digitati nella command window. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 3

Richiami teorici Un programma in MATLAB/Octave non viene trasformato in codice eseguibile dal calcolatore. Esso viene interpretato direttamente dall ambiente di lavoro MATLAB/ Octave. Non occorre dichiarare variabili. Esse vengono definite automaticamente nel momento in cui vengono usate per la prima volta. Il tipo di variabile è dinamico, può cambiare durante l esecuzione del programma per effetto di assegnamenti diversi. MATLAB/Octave è focalizzato sulla trattazione di problemi di natura numerica, mentre C può trattare qualsiasi tipo di problema. L unità fondamentale di dato è l array. Un array è una collezione ordinata di valori. Gli array si dividono in: vettori: sono monodimensionali e caratterizzati da una sola riga o colonna; matrici: sono multidimensionali; gli scalari sono un tipo particolare di vettore con una sola riga e una sola colonna. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 4

Esercizio 1 Digitare sulla command window le seguenti istruzioni: - a = 2.5*2; - a - 3.5*7; - b = sqrt(100); - b = sqrt(100) - a+b - a-b - a/b - a^b - c = i - d = j - e = pi - f = eps - g = Esercizio numero 1 - whos g - ripetere tutte le istruzioni dopo aver digitato il comando: format long Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 5

Esercizio 1 - Soluzione Digitando sulla command window l istruzione: >> a = 2.5*4; Notiamo che MATLAB non fornisce nessuna risposta sul risultato dell operazione ma se osserviamo il Workspace noteremo che è stata creata una variabile di nome a. Questo succede perchè il ; alla fine dell istruzione sopprime la visualizzazione del risultato sulla command window. Digitando solamente il nome della variabile appena creata senza ;, il risultato sarà: >> a a = 10 avendo omesso il punto e virgola, MATLAB ci mostra il contenuto della variabile. La command window di MATLAB può essere utilizzata come una grande calcolatrice per fare calcoli rapidi. Digitiamo l istruzione: >> 3.5*7; come già detto prima, il risultato dell operazione non viene visualizzato sulla command window, ma nel Workspace viene creata una nuova variabile di nome ans. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 6

Esercizio 1 - Soluzione ans sta per answer e contiene sempre l'ultimo valore non esplicitamente assegnato dall'utente ad una variabile. Creiamo una nuova variabile b e gli assegniamo il valore specificato nella traccia. >> b = sqrt(100); Se vogliamo compiere la stessa operazione ma visualizzare contemporaneamente il suo risultato, basterà omettere il ; alla fine dell espressione. >> b = sqrt(100) b = 10 Si noti che per utilizzare la funzione sqrt() non è stato necessario includere alcuna libreria o header partiolare. MATLAB mette a disposizione una vastissima gamma di funzioni predefinite che possono essere utilizzate semplicemente richiamandole tramite uno script o dalla command window. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 7

Esercizio 1 - Soluzione Per sapere come utilizzare una qualsiasi funzione predefinita di MATLAB digitare il suo nome sulla command window anteponendo la parola help. >> help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also sqrtm, realsqrt, hypot. Overloaded methods: codistributed/sqrt Reference page in Help browser doc sqrt Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 8

Esercizio 1 - Soluzione Vediamo ora i risultati delle successive istruzioni: >> a+b ans = 20 >> a-b ans = 0 >> a/b ans = 1 >> a^b ans = 1.0000e+10 il valore della variabile di supporto ans viene aggiornata ad ogni istruzione. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 9

Esercizio 1 - Soluzione MATLAB definisce un insieme di variabili predefinite che rappresentano importanti costanti matematiche. Il valore di queste costanti è memorizzato in variabili e, per questo, possono essere modificate dall utente. Nonostante questa operazione sia consentita, è fortemente consigliato non modificarne il valore per non vere spiacevoli sorprese nel momento in cui vengono utilizzate. Il valore di default di tali variabili viene ripristinato ad ogni avvio di MATLAB o tramite il comando clear. >> c = i c = 0 + 1.0000i >> d = j d = 0 + 1.0000i in MATLAB il valore dell unità immaginaria 1 è contenuto sia nella variabile i che in j. Questo avviene perché nelle convenzioni ingegneristiche si usa indicarla con j mentre in quelle matematiche con i. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 10

Esercizio 1 - Soluzione Molto spesso gli indici dei cicli for e le variabili utilizzate come contatore sono chiamati con le lettere i e j. E consigliabile non utilizzare questa notazione per non modificare il valore delle unità immaginare ma sostituire con una notazione del tipo: ii o jj. >> e = pi e = 3.1416 Nella variabile pi è contenuto il valore di!. >> f = eps f = 2.2204e-16 La variabile eps, invece, contiene l epsilon macchina, ovvero il numero più piccolo rappresentabile da MATLAB sulla macchina sui cui sta girando. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 11

Esercizio 1 - Soluzione Come già anticipato, in MATLAB non è necessario dichiarare una variabile per poterla utilizzare. Digitando la riga di codice: >> g = Esercizio numero 1 ; verrà creata automaticamente la variabile g di tipo char che conterrà la stringa specificata. Possiamo avere un riscontro di questa inizializzazione automatica digitando il comando: >> whos g Name Size Bytes Class Attributes g 1x18 36 char Omettendo il nome della variabile, il comando whos ci restituisce informazioni su tutte le variabili contenute nel Workspace. >> whos Name Size Bytes Class Attributes a 1x1 8 double ans 1x1 8 double... Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 12

Esercizio 1 - Soluzione >> whos Name Size Bytes Class Attributes a 1x1 8 double ans 1x1 8 double b 1x1 8 double c 1x1 16 double complex d 1x1 16 double complex e 1x1 8 double f 1x1 8 double g 1x18 36 char Cosa cambia se ripetiamo le operazioni precedenti dopo aver digitato il comando: >> format long? Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 13

Esercizio 2 Riportiamo MATLAB alla visualizzazione standard con il comando: format short. Digitare sulla command window le seguenti istruzioni: 1) row = [1 2 3] 2) row2 = [1, 2, 3] 3) col = [1; 2; 3] 4) col2 = row 5) line = [1:10] 6) line = [1:0.5:10] 7) line = linspace(0,1,5) 8) size(row) 9) length(row) 10) a = line(4) 11) line(1) 12) line(0) 13) line(end) 14) whos Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 24/11/2011 14

Esercizio 2 - Soluzione Digitiamo sulla command window le prime quattro istruzioni riportate nella traccia ed osserviamo i risultati che produce Matlab: >> row = [1 2 3] row = 1 2 3 >> row2 = [1,2,3] row2 = 1 2 3 >> col = [1;2;3;] col = 1 2 3 >> col2 = row' col2 = 1 2 3 I vettori riga row e row2 sono identici tra loro. Quando si crea un vettore roga in Matlab, infatti, è indifferente separare gli elementi che esso contiene con spazi o righe. Sono due istruzioni esattamente equivalenti. Anche i vettori colonna col e col2 sono identici tra loro. La creazione di una vettore colonna, infatti può essere fatta separando gli elementi che esso contiene con il delimitatore di riga ; o trasponendo un vettore riga. ; operatore di trasposizione: equivalente della trasposizione matematica di matrici e vettori. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 15

Esercizio 2 - Soluzione In Matlab è possibile creare array composti da N valori consecutivi equispaziati tra loro tramite un unica istruzione. Digitiamo le righe 5) 6) 7) dell esercizio: >> line = [1:10] line = 1 2 3 4 5 6 7 8 9 10 Questo comando genera un vettore riga di 10 elementi consecutivi equispaziati tra loro con passo incrementale uguale ad 1. Il passo può essere cambiato interponendolo tra il valore iniziale ed il valore finale: >> line = [1:0.5:10] line = Columns 1 through 12 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000 Columns 13 through 19 7.0000 7.5000 8.0000 8.5000 9.0000 9.5000 E stato generato un vettore riga di 10 elementi con passo = 0.5. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 16

Esercizio 2 - Soluzione Quando si vuole suddividere un intervallo in un determinato numero di passi, è utile utilizzare la funzione predefinita linspace. >> line = linspace(0,1,5) line = 0 0.2500 0.5000 0.7500 1.0000 linspace(x1, x2, N) genera un vettore riga di N elementi linearmente equispaziati tra x1 ed x2. Consultare help linspace. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 17

Esercizio 2 - Soluzione Riepilogo... Vettore RIGA: x = [valore_minimo:incremento:valore_massimo]; in questo caso la presenza delle parentesi è facoltativa; x = [valore1 valore2... valoren]; x = [valore1, valore2,..., valoren]; in questo caso la presenza delle parentesi è fondamentale. Vettore COLONNA: x = [valore1; valore2;...; valoren]; oppure si può utilizzare la trasposizione del vettore riga. x = [valore1 valore2... valoren] ; x = [valore_minimo:incremento:valore_massimo] ; Quando si usa la trasposizione, l uso delle parentesi è obbligatorio A differenza del C, gli indici di tutti i tipi di array, in Matlab, iniziano da 1 e non da 0. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 18

Esercizio 2 - Soluzione Vediamo altre funzioni predefinite per la gestione di array: >> size(row) ans = 1 3 >> length(row) ans = 3 size(x) restituisce un vettore che indica le dimensioni dell array x. Se x è una matrice, ne indica le righe e le colonne; se x è un array multidimensionale ne indicherà tutte le dimensioni coinvolte. length(x) restituisce un solo numero che indica la dimensione massima dell array x. Consultare help size, help length Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 19

Esercizio 2 - Soluzione Vediamo adesso alcuni esempi di istruzioni che permettono di recuperare alcuni (o tutti) i dati contenuti negli array. Eseguiamo le operazioni sull array line che è così composto: >> line line = 0 0.2500 0.5000 0.7500 1.0000 >> a = line(4) a = 0.7500 >> a = line(1) a = 0 Usiamo questa istruzione per accedere alla componente di un vettore, ad esempio alla quarta, e assegnare alla variabile a tale valore. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 20

Esercizio 2 - Soluzione La numerazione dei valori inizia da 1 e non da zero, infatti, digitando... >> line(0)??? Subscript indices must either be real positive integers or logicals....matlab restituisce un errore! Esistono in Matlab le parole chiave start e end per accedere rispettivamente al primo e all'ultimo elemento di un vettore. NB: Queste parole chiave sono riconosciute da Matlab in base alla versione e al sistema operativo utilizzato. >> line(start) ans = 0 >> line(end) ans = 1 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 21

Esercizio 2 - Soluzione >> whos Name Size Bytes Class Attributes a 1x1 8 double ans 1x1 8 double col 3x1 24 double col2 3x1 24 double line 1x5 40 double row 1x3 24 double row2 1x3 24 double Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 22

Esercizio 3 Utilizzare la command window per: -creare due vettori riga e e o contenenti rispettivamente i primi dieci numeri naturali pari ed i primi dieci dispari. -realizzare le seguenti operazioni tra vettori: -prodotto componente per componente (e, o) =(e 1 o 1,e 2 o 2,..., e 10 o 10 ) -elevazione al quadrato di ogni componente del vettore e; ( e 2 1,e 2 2,..., 10) e2 -elevazione al cubo di ogni componente del vettore o; ( o 3 1,o 3 2,..., 10) o3 -somma algebrica dei due vettori; o + e =(e 1 + o 1,e 2 + o 2,..., e 10 + o 10 ) -prodotto scalare tra i due vettori; <e,o>=(e 1 o 1 + e 2 o 2 +,..., +e 10 o 10 ) Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 23

Esercizio 3 - Soluzione >> e = 0:2:18 e = 0 2 4 6 8 10 12 14 16 18 >> o = 1:2:19 o = 1 3 5 7 9 11 13 15 17 19 Calcolo il prodotto componente per componente: >> prodotto_cc = e.*o prodotto_cc = 0 6 20 42 72 110 156 210 272 342 Il prodotto componente per componente (attenzione: differente sia dal prodotto scalare che dal prodotto vettoriale!), si esegue usando la sintassi "punto", ovvero e.*o. Se i due vettori non hanno la stessa dimensione, o lo stesso orientamento (riga, colonna) Matlab genera un errore. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 24

Esercizio 3 - Soluzione >> e_quad = e.^2 e_quad = 0 4 16 36 64 100 144 196 256 324 Anche se si vuole calcolare il quadrato di ogni componente di un vettore, si utilizza "punto", ovvero e.^2. Se non si usasse questo tipo di sintassi Matlab restituirebbe un errore perché l operazione di elevazione al quadrato non è definita sui vettori ma solo sulle matrici quadrate. >> e_quad = e^2??? Error using ==> mpower Inputs must be a scalar and a square matrix. >> o_cub = o.^3 o_cub = 1 27 125 343 729 1331 2197 3375 4913 6859 Verificare che la sintassi di elevazione a potenza (e qualunque orazione su vettori in generale) non varia tra vettore riga e vettore colonna. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 25

Esercizio 3 - Soluzione >> somma = o + e somma = 1 5 9 13 17 21 25 29 33 37 Per realizzare la somma degli elementi di due vettori non è stato necessario implementare alcun ciclo for. Sono poche le operazioni effettuate su array che richiedono l implementazione di cicli iterativi. La maggior parte delle volte Matlab mette a disposizione strumenti che implementano il ciclo internamente. >> prodotto_sc = e*o prodotto_sc = 1230 Come per tutte le operazioni precedenti, anche in questo caso non è stato necessario implementare alcun ciclo. Rendendo il vettore o un vettore colonna, otteniamo il prodotto scalare tramite la semplice operazione di moltiplicazione. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 26

Esercizio 4 Utilizzare la command window per: -creare due matrici: A = 1 2 3 4 5 6 7 8 9, B = 1 0 0 0 1 0 0 0 1 -realizzare le seguenti operazioni: -somma delle matrici; -prodotto tra le matrici; -prodotto termine a termine tra le matrici; -cercare il massimo di ogni colonna di A; -cercare il minimo assoluto della matrice A.*B; -creare una matrice 6x4 di numeri casuali C con la funzione rand e: -porre in D l arrotondamento per eccesso dei numeri di C; -porre in E l arrotondamento per difetto dei numeri di C; Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 27

Esercizio 4 - Soluzione Creo le matrici separando le righe tra loro con il delimitatore di riga ; >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> B= [1 0 0; 0 1 0; 0 0 1] B = 1 0 0 0 1 0 0 0 1 Analogamente ai vettori, la somma tra matrici si calcola senza ricorrere ad alcun ciclo ma semplicemente: >> somma = A + B somma = 2 2 3 4 6 6 7 8 10 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 28

Esercizio 4 - Soluzione Calcolo il prodotto tra matrici semplicemente usando l operatore *... >> prodotto = A*B prodotto = 1 2 3 4 5 6 7 8 9...ed il prodotto componente per componente in maniera analoga ai vettori. >> prodotto_cc = A.*B prodotto_cc = 1 0 0 0 5 0 0 0 9 Se A e B fossero state due matrici con dimensioni rispettivamente 3x2 e 2x3, quale sarebbe stata l istruzione corretta per calcolare il prodotto elemento per elemento tra loro? Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 29

Esercizio 4 - Soluzione Calcolo il massimo di ogni colonna della matrice A utilizzando la funzione predefinita max: >> max_a = max(a) max_a = 7 8 9 Se x è un vettore, max(x) restituisce l elemento più grande di x. Se x è una matrice, la funzione restituisce un vettore contenente il massimo di ogni colonna. Consultare help max Dato che la funzione max ci restituisce il massimo di ogni colonna della matrice, per calcolarne il massimo assoluto sarà necessario chiamarla due volte in maniera annidata: >> abs_max_prod = max(max(prodotto)) abs_max_prod = 9 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 30

Esercizio 4 - Soluzione La funzione max più interna agisce sulle colonne della matrice prodotto e restituisce il vettore [7 8 9]. Fornendo questo vettore in input alla funzione max più esterna otteniamo il massimo assoluto: 9. prodotto = 1 2 3 4 5 6 7 8 9 7 8 9 9 Infatti... >> abs_max_prod = max(max(prodotto)) abs_max_prod = 9 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 31

Esercizio 4 - Soluzione Una soluzione alternativa per calcolare il massimo assoluto di un amatrice è srotolare la matrice per farla diventare un vettore. Dopodiché si applica la funzione max una sola volta. >> abs_max_b = max(prodotto(:)) abs_max_b = 9 L operatore : usato come indice unico di una matrice (o di un array in generale) la converte in un vettore colonna. >> prodotto(:) ans = 1 4... 6 9 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 32

Esercizio 4 - Soluzione Creo la matrice C utilizzando la funzione predefinita rand: >> C = rand(6, 4) C = 0.0855 0.4886 0.5211 0.3674 0.2625 0.5785 0.2316 0.9880 0.8010 0.2373 0.4889 0.0377 0.0292 0.4588 0.6241 0.8852 0.9289 0.9631 0.6791 0.9133 0.7303 0.5468 0.3955 0.7962 Pongo in D l arrotondamento per eccesso di C e in E l arrotondamento per difetto: >> D = ceil(c) D = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> E = floor(c) E = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 33

Esercizio 4 - Soluzione L arrotondamento per eccesso si opera con la funzione ceil (soffitto), mentre quello per difetto con la funzione predefinita floor (pavimento). Dai risultati possiamo dedurre che la funzione rand restituisce valori casuali compresi tra 0 ed 1. Il suo alter-ego randn genera numeri casuali con distribuzione gaussiana. probabilità Distribuzione uniforme Distribuzione gaussiana 5 0,5 1 1,5 2 valori assunti rand(m, n) restituisce una matrice mxn contenente numeri casuali compresi nell intervalli [0, 1]. ceil(x) arrotonda gli elementi di x verso +inf. floor(x) arrotonda gli elementi di x verso -inf. Consultare help round, roundn, ceil, floor Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 34

File di script In MATLAB possono essere scritti dei programmi veri e propri usando l editor incorporato nell ambiente di lavoro. Cliccando sul pulsante new M-file si apre la finestra dell editor di script. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 35

Esercizio 5 Creare un file di script che: generi una matrice M quadrata di dimensione N (ove N è un dato chiesto in input all'utente) con numeri casuali estratti da una distribuzione uniforme nell'intervallo [0,1] e calcolare: - un vettore contenente la somma degli elementi di ciascuna colonna; - un vettore contenente la somma degli elementi di ciascuna riga; - un vettore contenente la somma del quadrato degli elementi di ciascuna riga; - il massimo degli elementi della matrice; - la somma di tutti gli elementi della matrice; Salvare sul file dati.mat tutte le variabili utilizzate nel programma. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 36

Esercizio 5 - Soluzione Chiedo in input la dimensione e genero la matrice M. N = input('dimensione = '); Con un solo comando, Matlab, visualizza la stringa compresa tra le virgolette e memorizza il risultato nella variabile N. M = rand(n); Per calcolare la somma degli elementi di un array, Matlab mette a disposizione una funzione che ci evita di implementare cicli for ed agevola l operazione. La funzione predefinita sum opera per colonne e restituisce un vettore contenente la somma dei valori calcolati lungo le colonne della matrice M. somma_col = sum(m); Se x è un vettore, sum(x) restituisce la somma dei suoi elementi. Se x è una matrice, la funzione restituisce un vettore contenente la somma operata lungo le colonne. Consultare help sum Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 37

Esercizio 5 - Soluzione Per calcolare la somma delle righe di uso sempre la funzione sum la sulla matrice trasposta M. somma_rig = sum(m'); Con la stessa tecnica calcolo la somma del quadrato degli elementi. Si noti che l uso della sintassi.^2 è fondamentale per avere il risultato corretto. somma_rig_quad = sum(m'.^2); Calcolo il massimo assoluto... max_m = max(max(m)); % max_m = max(m(:));...e la somma di tutti gli elementi. somma_m = sum(sum(m)); % somma_m = sum(m(:)); Anche il salvataggio di tutte le variabili globali presenti nel workspace è molto facilitata in Matlab e si implementa con una sola riga di codice: save dati L istruzione save dati salva nel file binario dati.mat il contenuto di tutte le variabili attive in memoria in quel momento. Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 38

Esercizio 5 - Soluzione l formato.mat è un formato binario proprietario di Matlab. Questo implica che non è un formato adatto per scambiare dati con altri ambienti di sviluppo ma che fornisce la massima flessibilità e facilità di utilizzo all interno dell ambiente Matlab. Per capire la versatilità di questa istruzione provare a digitare il comando clear all % cancella tutto il contenuto del workspace e a ricaricare tutte le variabili tramite: load(dati) Tutto il workspace è stato ricostruito nella forma esatta in cui lo si è salvato! save salva tutte le variabili del workspace su file. save FILENAME salva tutte le variabili del workspace corrente in un file binario in formato proprietario di Matlab con il nome di FILENAME.mat. save(filename, variabili) salva solo le variabili specificate. Consultare help save Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 39

Esercizio 5 - Soluzione Esercizio 5 - Codice completo clear all close all clc N = input('dimensione = '); M = rand(n); somma_col = sum(m); somma_rig = sum(m'); somma_rig_quad = sum(m'.^2); max_m = max(max(m)); %max_m = max(m(:)); somma_m = sum(sum(m)); %somma_m = sum(m(:)); save dati Politecnico di Milano - DEI Informatica B - Esercitazione 8 del 30/11/2012 40