Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di...

51
D D i i s s p p e e n n s s e e d d e e l l c c o o r r s s o o b b a a s s e e d d i i p p r r o o g g r r a a m m m m a a z z i i o o n n e e s s c c i i e e n n t t i i f f i i c c a a i i n n a a m m b b i i e e n n t t e e M M A A T T L L A A B B A cura di Andrea Di Ferdinando Anno accademico 2003-2004

Transcript of Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di...

Page 1: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

DDiissppeennssee ddeell ccoorrssoo bbaassee ddiipprrooggrraammmmaazziioonnee sscciieennttiiffiiccaa iinn

aammbbiieennttee MMAATTLLAABB

A cura di Andrea Di Ferdinando

Anno accademico 2003-2004

Page 2: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

2

Capitolo 1Panoramica dell’ambiente MatLab

1. Che cos’è MatLab

Per comprendere l’utilità ed il funzionamento di MatLab bisogna innanzi tutto spiegare l’origine del termine MatLab, che deriva da Matrix Laboratory. MatLab infatti fu inizialmente scritto per fornire un accesso più immediato ed intuitivo ai software sviluppati nell’ambito dei progetti LINPACK e ESIPAC, che si rivolgevano all’utilizzo ed alla programmazione di matrici. Ancora oggi, uno degli aspetti più importanti di MatLab è quello di presentare una serie di strumenti per lo studio e la risoluzione di problemi che coinvolgono matrici e vettori, permettendo di scrivere programmi più facilmente e più velocemente rispetto ai comuni linguaggi di programmazione, come ad esempio il C o il Fortran.Nel corso degli anni, tuttavia, MatLab ha ricevuto un notevole sviluppo. Le routine numeriche sono state perfezionate e la loro capacità è stata notevolmente ampliata; sono state aggiunte numerose funzioni al programma, e le capacità grafiche sono aumentate per rendere l’interfaccia sempre più facile da usare.Oggi MatLab è un ambiente di sviluppo che integra calcolo matematico, grafica e programmazionescientifica, il tutto in un’interfaccia familiare e facile da usare, che permette di risolvere varie classi di problemi. La versione attuale di Matlab non si limita più al solo calcolo matriciale e numerico, ma presenta tutta una serie di funzioni per le applicazioni più diverse nel campo scientifico, rendendolo uno dei programmi più diffusi in campi quali l'elettronica, la progettazione di sistemi di controllo, l'analisi dei segnali, l'elaborazione di immagini, la chimica, la statistica e numerosi altri.Inoltre, la sua estrema facilità di utilizzo lo rende uno dei software più utilizzati nei corsi universitari e nel mondo scientifico in generale.Il campo di applicazione di MatLab è ulteriormente estendibile grazie ai toolbox, collezioni di funzioni adatte a particolari classi di problemi, come l’analisi dei segnali, le reti neurali, la logica fuzzy, i sistemi di controllo e molti altri. La lista completa dei toolbox disponibili può essere trovata all’indirizzo:http://www.mathworks.it/products/products_by_category.shtml

2. L’ambiente di lavoro

La prima volta che si apre MatLab, l’ambiente di lavoro appare come mostrato in Figura 1.

Page 3: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

3

Figura 1. Il desktop di MatLab

Si possono osservare immediatamente alcune delle componenti principali di MatLab:

- Nella parte superiore del desktop è presente, come nelle classiche applicazioni per Windows, la barra dei menu (File, Edit, View, Web, Window, Help) attraverso la quale si può accedere a tutte le funzioni di Matlab.- Sotto la barra dei menu è presente la barra degli strumenti, costituita da una serie di icone che permettono di accedere in modo più rapido alle funzioni più importanti e maggiormente utilizzate.A destra nella barra degli strumenti è presente un riquadro che indica la cartella di lavoro corrente, ossia la cartella dove MatLab cerca e salva i files.- Sotto la barra degli strumenti ci sono le finestre che ci permettono di lavorare in MatLab. La prima volta che si apre MatLab, sono visibili tre finestre: Workspace e Command History a sinistra, e Command Window a destra.- Infine, in basso troviamo la barra di stato dove vengono visualizzati alcuni messaggi di MatLab e dove è presente il bottone Start, simile al bottone Start di Window, che ci permette di accedere in modo rapido ad alcune funzionalità di MatLab.

È possibile modificare e personalizzare il desktop, utilizzando i comandi del menu View o le icone presenti sulle finestre. È possibile ad esempio nascondere una determinata finestra semplicemente facendo clic sul pulsante nell’angolo superiore destro, oppure è possibile ancorarla al desktop (docking) cliccando sul pulsante accanto ad esso. Inoltre, si possono specificare le caratteristiche del desktop selezionando la voce Preferences nel menu View: ad esempio, è possibile cambiare il tipo di font utilizzato, le sue dimensioni e così via.

Page 4: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

4

È sempre possibile ritornare alla visualizzazione iniziale del desktop selezionando la voce Default nell’opzione Desktop Layout del menu View.Di seguito viene riportata una descrizione delle principali caratteristiche delle finestre del desktop.

Command Window

La finestra Command Window (a destra nella Figura 1) viene utilizzata per impartire dei comandi a MatLab o per eseguire funzioni e script. All’interno della Command Window è presente una linea di comando, rappresentata da un prompt simile a quello dei sistemi DOS, ossia il simbolo “>>” che indica che il programma è pronto a ricevere dei comandi (nella versione per studenti, il simbolo del prompt è “EDU>>”) . Su tale riga possiamo digitare direttamente i comandi che MatLab deve eseguire, sia che si tratti di operazioni, sia che si tratti di funzioni particolari. È possibile ad esempio utilizzare la Command Window come una normale calcolatrice, come mostrato nella Figura 2.

Figura 2. La Command Window.

Nell’esempio di Figura 2 abbiamo eseguito, utilizzando MatLab, una semplice operazione matematica, ossia una somma tra due numeri (3 e 5). Per fare ciò non dobbiamo far altro che scrivere “3 + 5” e premere il pulsante Invio. MatLab visualizza il risultato dell’operazione facendolo precedere dalla parola “ans” (answer) e crea una nuova riga di comando sotto la prima: a questo punto il programma è pronto per una nuova operazione. Per esempio, potremo dividere il risultato per due, per ottenere la media dei due numeri. Scriviamo semplicemente:

>> ans / 2

e MatLab visualizzerà sotto il nostro comando il risultato dell’operazione:

Page 5: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

5

ans =

4

>>

Se non vogliamo che MatLab visualizzi il risultato delle nostre operazioni dobbiamo far seguire il nostro comando dall’operatore ‘;’ (punto e virgola). La variabile ans viene comunque creata, ma non ne viene visualizzato il valore nella Command Window. Per poterne osservare il contenuto, dobbiamo utilizzare la finestra di Array Editor (vedi più avanti).

Di seguito vengono riportate alcune funzionalità della finestra dei comandi:- È possibile ripetere le ultime operazioni effettuate utilizzando i tasti (↑) e (↓) (freccia in alto e freccia in basso).- È possibile cancellare il contenuto della finestra mediante il comando clc.- È possibile digitare comandi diversi nella stessa riga separandoli con il simbolo ‘,’ (virgola) se si vuole visualizzare il risultato di ogni comando, oppure con il simbolo ‘;’ (punto e virgola) se non si desidera visualizzarlo.- Se un’istruzione è troppo lunga si può utilizzare l’operatore di continuazione di riga ‘...’ (tre punti) per andare a capo.

Launch Pad

La finestra Launch Pad mostra l’elenco dei toolbox e degli strumenti di MatLab installati nel computer, permettendo un rapido accesso ad essi. Come nella finestra Gestione Risorse di Windows, è possibile espandere o ridurre ciascuna delle voci elencate. Per esempio, cliccando sul segno “+” a sinistra dell’icona di Matlab, verranno mostrati tutti gli strumenti, i demo e le funzioni di help disponibili per MatLab (Figura 3). Cliccando sulla voce Help, ad esempio, potremmo accedere direttamente all’help in linea di MatLab.

Figura 3. La finestra Launch Pad

Command History

Page 6: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

6

La finestra Command History (Figura 4; in basso a sinistra in Figura 1) mostra tutti i comandi immessi precedentemente all’interno della Command Window. Ciò può essere utile non solo per ricordarsi di quello che si è precedentemente fatto, ma anche per richiamare velocemente un comando: basta infatti selezionarne uno nella finestra Command History, trascinarlo nella Command Window e premere Invio, per ripetere nuovamente un’operazione.

Figura 4. La finestra Command History

Workspace

La finestra Workspace mostra l’elenco delle variabili create in memoria. Ritorneremo sul concetto di variabile più avanti; per ora basta dire che le variabili sono degli oggetti che contengono una determinata informazione, che può essere un numero, una stringa od un insieme di numeri o stringhe. Ad esempio, anche la parola “ans” che abbiamo incontrato precedentemente è in realtà il nome di una variabile che MatLab crea automaticamente e che contiene l’informazione circa il risultato dell’operazione che abbiamo effettuato. Perciò, se visualizziamo la finestra Workspace, apparirà la variabile ans (Figura 5) e le sue principali caratteristiche: dimensioni (Size), memoria utilizzata (Bytes) e tipo di dati (Class). Si noti che la finestra Workspace ci mostra solo un elenco delle variabili in memoria, ma non il loro contenuto.

Page 7: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

7

Figura 5. La finestra Workspace.

Array Editor

Se clicchiamo nella finestra Workspace sulla variabile ans (o su qualunque altra variabile attualmente nel workspace) appare una nuova finestra, denominata Array Editor, nella quale possiamo osservare il contenuto della variabile stessa. Nel caso della variabile ans precedentemente creata, ad esempio, la finestra appare come mostrato nella Figura 6.

Figura 6. L’Array Editor.

Page 8: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

8

Subito sotto la barra degli strumenti, che in questa sede non tratteremo, appare una matrice di caselle simile a quella che appare nei fogli Excel, che ci mostra il contenuto di tutte i valori contenuti nella variabile esaminata. Nel caso di ans, appare un solo valore, cioè 4.

Current Directory

La finestra Current Directory (Figura 7) mostra tutti i file contenuti nella directory di lavoro, ossia la directory selezionata nella barra degli strumenti. Possiamo utilizzare questa finestra per avere un rapido accesso ai file del nostro progetto, per creare nuove directory, per trovare i files che ci interessano ed in breve per tutte quelle operazioni che riguardano la gestione dei nostri files.

Figura 7. La finestra Current Directory.

L’Help Browser

Una finestra molto importante è quella dell’help (Figura 8), a cui possiamo accedere sia attraverso il menu Help, sia attraverso il menu View. Possiamo notare che la finestra di Help è suddivisa in due pannelli: a sinistra l’Help Navigator, che consente di inserire i parametri di ricerca secondo la classica impostazione dei programmi per Windows; a destra il pannello di visualizzazione, in cui vengono visualizzati i documenti che soddisfano i criteri di ricerca.

Page 9: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

9

Figura 8. L’Help Browser.

Esistono altri metodi per ricevere aiuto in MatLab:

1. Un primo metodo utile quando si vogliono visualizzare velocemente le informazioni riguardanti la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window il comando: “help NomeFunzione ”. Ad esempio, per visualizzare le informazioni riguardanti la funzione per calcolare il seno (sin), possiamo scrivere:

>> help sin

a cui MatLab risponde con il messaggio:

SIN Sine. SIN(X) is the sine of the elements of X.

2. Un secondo metodo che abbiamo a disposizione è quello di digitare il comando: “lookfor ParolaChiave”, sempre nella Command Window. MatLab eseguirà una ricerca in tutti documenti basata sulla parola chiave che abbiamo digitato, e visualizzerà un elenco di funzioni, con relative descrizioni, nella cui prima riga di testo compare la parola chiave specificata. Questo metodo perciò, a differenza di quello precedente, è utile quando non sappiamo in anticipo qual è il nome della funzione appropriata per una certa operazione. Ad esempio, se vogliamo calcolare la radice quadrata di un numero, ma non sappiamo il nome della funzione che implementa tale operazione in MatLab, possiamo scrivere:

Page 10: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

10

>> lookfor square

MatLab visualizza un elenco di funzioni, di cui riportiamo solo una parte:

MAGIC Magic square.REALSQRT Real square root.SQRT Square root.LSCOV Least squares with known covariance.LSQNONNEG Linear least squares with nonnegativity constraints.NNLS Non-negative least-squares.SQRTM Matrix square root.CGS Conjugate Gradients Squared Method ....

È la terza funzione quella che sembra fare al caso nostro. A questo punto, se vogliamo ulteriori informazioni su di essa, possiamo scrivere: “help sqrt”. Si noti che se avessimo scritto direttamente“help square”, avremmo invece ottenuto informazioni sulla funzione che permette di generare onde quadre, informazione che era del tutto inutile per i nostri scopi.

3. Un terzo metodo per chiedere aiuto consiste nel digitare nella Command Window il comando: “doc NomeFunzione”. Questo metodo è simile al primo, ma a differenza del comando “help MatLab” ci mostra la finestra dell’Help Browser, ed in particolare la prima pagina della documentazione relativa alla funzione indicata. Digitando ad esempio il comando:

>> doc sin

apparirà la seguente finestra:

La barra dei menu

Nella parte superiore della finestra principale di MatLab (Figura 1) è presente la barra dei menu. Nella visualizzazione standard tali menu sono 6: File, Edit, View, Web, Window e Help. Il numero ed il contenuto dei menu può tuttavia variare a seconda delle operazioni che si stanno svolgendo. Per esempio, quando si opera sui file di programma (M-file) appaiono tre nuovi menu (Text, Debug

Page 11: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

11

e Breakpoints) che scompaiono quando si termina di lavorare con i file. Di seguito sono elencati i comandi più importanti presenti nella barra dei menu. I comandi presenti solitamente nelle applicazioni Windows (Open, Close, Cut, Paste, etc.) non verranno considerati, se non quando il loro uso è diverso da quello standard.

1. Menu File

Import Data avvia un’utilty che permette di importare dati in MatLab

Save Workspace Asapre una finestra di dialogo per salvare su file nomi e valori delle variabili caricate in memoria

Set Pathapre una finestra di dialogo per impostare il percorso di ricerca dei file

Preferencesapre una finestra di dialogo per impostare diversi parametri di Matlab

Printapre una finestra di dialogo per stampare il testo presente nella Command Window

Print Selctedapre una finestra di dialogo per stampare solo le parti selezionate del testo contenuto nella Command Window

File List visualizza un elenco cronologico dei file precedentemente aperti

2. Menu Edit

Delete cancella la variabile selezionata nella finestra Workspace

Clear Command Windows cancella tutto il testo presente nella Command Window

Clear Command History cancella l’elenco dei comandi presente nella Command History

Clear Workspace elimina tutte le variabili caricate in memoria

3. Menu View

Desktop Layoutpermette di selezionare il tipo di layout preferito, ossia la disposizione delle diverse finestre sul dektop

Dock / Undock “nome finestra”

ancora / disancora la finestra attualmente attiva

Workspace View Optionspermette di modificare le opzioni di visualizzazione delle variabili nel Workspace

Page 12: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

12

Capitolo 2Algoritmi ed elementi di programmazione in MatLab.

1. Algoritmi e programmi

Un algoritmo è una successione di operazioni elementari che possono essere eseguite da uncalcolatore per risolvere un determinato problema. In altre parole, un algoritmo rappresenta la soluzione ad un determinato problema.

Una volta trovato l’algoritmo corretto per risolvere un determinato problema, affinché le operazioni specificate nell’algoritmo possano essere eseguite dal calcolatore è necessario tradurle nel linguaggio macchina del calcolatore stesso. Dato però che scrivere direttamente in tale linguaggio sarebbe davvero molto difficile e dispendioso, sono nati a tal riguardo dei linguaggi di programmazione di livello più alto, ovvero linguaggi dotati di un formalismo (grammatica e sintassi) che codificano gli algoritmi in un modo simile a quello che fa la logica umana. Un ulteriore programma (detto traduttore) si occupa poi di convertire tale codice nel linguaggio macchina del calcolatore. Oggi esistono diversi linguaggi di programmazione, che si differenziano in base alla tipologia di problemi a cui sono orientati; per citarne alcuni dei più noti: C, C++, Fortran, Java, Basic, Perl, etc. Un programma è la codifica di un algoritmo in un particolare linguaggio di programmazione. Uno stesso algoritmo può dunque essere usato per creare diversi programmi, ciascuno scritto in un differente linguaggio di programmazione (Figura 9).

Figura 9. Algoritmi e programmi.

Algoritmo

Programma

Linguaggiomacchina

Problema

?

Page 13: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

13

MatLab rappresenta uno di questi differenti linguaggi di programmazione. Le potenzialità di MatLab da questo punto di vista sono molte:

1- Gli algoritmi sono la base del linguaggio MATLAB. Potendo contare su una libreria di oltre 600 funzioni matematiche, statistiche e tecniche, sviluppate direttamente da esperti di matematica, MATLAB permette il rapido accesso agli algoritmi matematici più complessi, senza il bisogno di doverli implementare da soli. Le routine numeriche sono rapide, precise e affidabili. I motori matematici principali incorporano le librerie di subroutine di algebra lineare LAPACK e BLAS e la libreria di elaborazione dei segnali FFTW, che rappresentano lo stato dell’arte del calcolo numerico.

2- MatLab, come è facile intuire dal nome, è ottimizzato per operare su matrici e vettori e può essere dunque utilizzato al posto di linguaggi di più basso livello come C e C++, raggiungendo uguali prestazioni ma richiedendo meno attività di programmazione. In questo modo, MatLab permette di concentrarsi maggiormente su concetti di alto livello, evitando invece le tediose attività di sviluppo, debug e manutenzione di codici dedicati.

3- La potenza di calcolo di MatLab può essere ulteriormente ampliata grazie ai toolbox, raccolte di funzioni e interfacce MATLAB, con i quali è possibile affrontare problemi più tecnici, come l’elaborazione di segnali o il processamento di immagini.

Tuttavia, sarebbe riduttivo considerare MatLab un semplice linguaggio di programmazione. L'ambiente MATLAB è stato infatti concepito per il calcolo interattivo o automatico. Accanto alle avanzate funzioni matematiche sono presenti funzioni grafiche e strumenti di facile utilizzo che consentono di analizzare e visualizzare i dati in tempo reale, rendendo MatLab un ambiente di lavoro interattivo e flessibile. Con MatLab possiamo importare ed esportare dati, eseguire delle operazioni direttamente sulla riga di comando (nella Command Window), visualizzare il risultato di tali operazioni utilizzando le avanzate capacità grafiche messe a disposizione, il tutto in modo completamente interattivo, a differenza dei normali ambienti di sviluppo.

2. Tipi di dati in MatLab: gli array

Quando si utilizza un qualunque linguaggio di programmazione, la prima cosa che è necessarioimparare è il tipo di dati che esso permette di gestire. Per ciascun tipo di dato il linguaggio forniràun insieme di operatori e funzioni per l’elaborazione.In MatLab esistono 15 diversi tipi di dati, che hanno però tutti la stessa forma, ossia l’array (Figura 10). Possiamo definire un array come un insieme di oggetti ordinati. Più specificatamente, gli elementi di un array sono distribuiti su un certo numero di dimensioni che formano una griglia di indicizzazione, attraverso la quale è possibile identificare in maniera univoca gli elementi.A seconda del tipo di oggetti contenuti nell’array si parla di numeric array, character array, cell array, e così via. I tipi di oggetti gestiti da MatLab sono appunto 15 e sono mostrati in Figura 10.

Page 14: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

14

Figura 10. I tipi di dati in MatLab.

In questa sede verrà usato principalmente un solo tipo di array, quello numerico, ed in particolare il double array. Esso rappresenta l’array numerico di default di MatLab; infatti, se scriviamo ad esempio nella riga di comando:

>> 4 / 2

MatLab crea automaticamente, come già detto precedentemente, una variabile ans che contiene il risultato dell’operazione.

Se ora rivolgiamo la nostra attenzione alla finestra Workspace, possiamo notare che la variabile ans, alla voce Class (ossia tipo di dato), è considerata un double array, ossia un array di valori reali a doppia precisione, anche se si tratta in questo caso di un numero intero (cioè 2).Alla voce Size, inoltre, possiamo osservare che, trattandosi di un solo valore, MatLab considera ans un array 1x1, ossia un array a due dimensioni in cui ciascuna dimensione contiene un solo elemento.Gli array a due dimensioni sono gli array più comuni in MatLab. La prima dimensione viene chiamata riga e la seconda colonna. Casi speciali sono:

1. Gli scalari. Vengono chiamati scalari gli array a due dimensioni formati da una sola riga e da una sola colonna (come la variabile ans creata precedentemente).

2. I vettori. Vengono chiamati vettori gli array a due dimensioni formati da una sola riga (vettori riga) o da una sola colonna (vettori colonna).

È possibile creare un vettore riga in vari modi. Il modo più semplice è quello di digitarne tutti gli elementi, racchiusi da una coppia di parentesi quadre e separati con uno spazio od una virgola (scelta consigliata).

Page 15: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

15

>> riga = [1, 2, 3, 4, 5]

riga =

1 2 3 4 5

Allo stesso modo, è possibile creare un vettore colonna. In questo caso, però, gli elementi vanno separati da un punto e virgola, oppure andando a capo.

>> colonna = [1; 2; 3; 4; 5]

colonna =

1 2 3 4 5

3. Le Matrici. Vengono chiamate matrici gli array a due dimensioni formati da almeno due righe e due colonne.

Per creare una matrice possiamo combinare le tecniche viste precedentemente per i vettori riga e colonna. È sufficiente cioè digitare tutti gli elementi della matrice racchiusi tra parentesi quadre, separando le righe con un punto e virgola e gli elementi all’interno di una riga con una virgola o con uno spazio. Ad esempio:

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

matrice =

1 2 3 4 5 6 7 8 9

In MatLab è possibile creare anche array a più di due dimensioni. Tali oggetti vengono chiamati array multidimensionali. Per creare un array multidimesionale digitandone gli elementi non esiste un metodo diretto come per il caso delle matrici e dei vettori. Possiamo tuttavia estendere una matrice già esistente. Ad esempio, possiamo estendere la matrice precedente. Il comando che dobbiamo utilizzare è il seguente:

>> matrice(:,:,2) = [10, 11, 12; 13, 14, 15; 16, 17, 18]

matrice(:,:,1) =

1 2 3 4 5 6 7 8 9

Page 16: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

16

matrice(:,:,2) =

10 11 12 13 14 15 16 17 18

Possiamo immaginare il vettore multidimensionale appena creato come un libro che contiene 2 pagine, in ciascuna delle quali è presente una matrice (Figura 11). Il comando utilizzato (matrice(:,:,2)=) è dunque un modo per indicare a MatLab di creare una seconda pagina con i valori elencati.

Figura 11. La rappresentazione grafica di un array multidimensionale.

3. Le variabili

Nel paragrafo precedente si è visto come creare degli array in MatLab. L’array rappresenta la forma generale di ogni tipo di dati in MatLab, e si è visto come si possano creare diversi tipi di array (scalari, vettori, matrici e array multidimensionali) contenenti diversi tipi di dati (numeri, caratteri, etc).Nei prossimi capitoli si vedrà come utilizzare gli array. Prima di tutto, però, è importante conoscere il significato del termine “variabile”. In ogni linguaggio di programmazione il concetto di variabile sta a significare che una certa porzione della memoria del computer contiene un determinato valore, che può essere di ciascuno dei 15 tipi di dati mostrati in Figura 10, e questo valore viene memorizzato fino a quando non assegniamo alla variabile un nuovo valore.Abbiamo già visto, ad esempio, che MatLab crea automaticamente la variabile ans quando eseguiamo un’operazione nella riga di comando, ad esempio:

>> 5 / 2

ans =

2.5000

Dato che ora ans contiene un valore numerico (2.5), possiamo utilizzare tale variabile al posto di un numero in qualunque operazione aritmetica e qualunque funzione che opera su numeri. Ad esempio, possiamo scrivere:

Page 17: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

17

>> ans / 2

ans =

1.2500

Il risultato dell’operazione è lo stesso che se avessimo scritto 2.5 / 2. Qual è dunque il vantaggio di usare una variabile al posto di un numero? Il prossimo esempio servirà a chiarire la questione. Supponiamo di voler calcolare l’area di un triangolo, dati i valori di base ed altezza, che supponiamo essere di 5 e 3. Potremmo scrivere semplicemente:

>> area = (5 * 3)/2

area =

7.5000

oppure utilizzare delle variabili

>> base = 5;>> altezza = 3;>> area = (base * altezza )/2

area =

7.5000

Seppure in questo caso l’utilizzo delle variabili comporti una maggiore lunghezza del codice, esso ci permette non solo di implementare la regola geometrica in modo più semantico, ma anche di utilizzare la stessa formula al variare del valore di base ed altezza:

>> base = 10;>> altezza = 2;>> area = (base * altezza )/2

area =

10

Quando le operazioni da effettuare sono più di una come in questo caso, la possibilità di riutilizzare lo stesso codice per più situazioni, senza la necessità di doverlo riscrivere, si rivela di grande utilità.

L’operazione con cui diamo un valore ad una determinata variabile prende il nome di assegnazioneed utilizza l’operatore di uguaglianza (‘=’). C’è da notare, tuttavia, che tale operatore non ha, nel caso dell’assegnazione, il significato di uguaglianza matematica. Esso sta a significare che alla variabile posta a sinistra (‘area’ nell’esempio precedente) viene assegnato il valore indicato a destra ((base * altezza )/2). Invertire l’ordine delle due espressioni non è pertanto corretto e genera un messaggio d’errore da parte di MatLab.Il diverso significato di assegnazione ed uguaglianza è mostrato ancora più chiaramente nell’esempio seguente:

Page 18: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

18

>> area = area + 1

area =

11

In matematica, area non può mai essere uguale ad area+1. Tuttavia, l’espressione ha senso se noi la interpretiamo come un assegnazione alla variabile area del valore contenuto in essa più uno. Ad esempio, se uno stadio di calcio ha una capienza di 45 mila spettatori e vengono aggiunti altri 10 mila posti, la nuova capienza sarà data da:

>> capienza = capienza + 10000

capienza =

55000

Si noti che MatLab distingue tra lettere minuscole e maiuscole, per cui area ed Area sono ad esempio due variabili distinte.

Per eliminare una variabile possiamo usare il comando clear. Per eliminare ad esempio la variabile appena creata ‘capienza’ scriviamo semplicemente:

>> clear capienza

Per eliminare tutte le variabili attualmente in memoria possiamo usare il comando “clear all”.

Page 19: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

19

Capitolo 3Organizzazione e gestione dei dati

1. Creare un array

Nel capitolo precedente si è visto come creare un array digitandone direttamente gli elementi. In questo paragrafo prenderemo in considerazione altri metodi per creare vettori, matrici e array multidimensionali.

1.1 Utilizzo di funzioni quali zeros, ones and rand

Un primo metodo consiste nell’utilizzare funzioni predefinite in MatLab, quali zeros, ones e rand (o anche altre quali magic, eye, e così via). In tal caso ciò che dobbiamo specificare è la grandezza di ciascuna dimensione dell’array che vogliamo creare. Il comando zeros creerà un array contenente tutti zero, il comando ones una matrice contenente tutti uno, mentre il comando rand una matrice contenente valori casuali distribuiti uniformemente nell’intervallo [0 1]. Ad esempio, il seguente comando crea una matrice di zero, con 3 righe e 2 colonne.

>> matricezero = zeros(3,2)

matricezero =

0 0 0 0 0 0

Se volessimo creare una matrice di 5, e più in generale una matrice di valori tutti uguali tra loro, possiamo utilizzare il comando ones. Ad esempio:

>> matrice5 = ones(3,2) * 5

matrice5 =

5 5 5 5 5 5

Quello che abbiamo fatto è moltiplicare la matrice di uno creata con ones per lo scalare 5, ottenendo così una matrice di 5 (per le operazioni sugli array si veda più avanti).

1.2 Creazione di array equamente intervallati

Se gli elementi di un array sono, per ciascuna dimensione, equamente intervallati, si può ricorrere a metodi per creare l’array senza il bisogno di doverne digitare tutti i valori. Ciò può avvenire in 2 differenti modi:

Page 20: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

20

Utilizzo dell’operatore ‘:’ (due punti)

Utilizzando l’operatore ‘:’ (due punti), si può indicare a MatLab il valore iniziale e quello finale di una lista di numeri, insieme con il passo, ossia l’incremento da un valore all’altro della lista. Se tale passo viene omesso, MatLab assumerà per default un valore di incremento di 1. Di seguito viene mostrato un esempio, in cui viene creato un vettore contenente tutti i numeri pari compresi tra 2 e 20:

>> vettorepari = 2:2:20

vettorepari =

2 4 6 8 10 12 14 16 18 20

Nell’esempio seguente, invece, viene creata una matrice 2x3:

>> matrice = [2:4; 3:5]

matrice =

2 3 4 3 4 5

Utilizzo delle funzioni linspace e logspace

Attraverso le funzioni linspace e logspace possiamo creare array equamente intervallati allo stesso modo dell’operatore due punti, ma invece di specificare il passo dobbiamo indicare il numero di elementi dell’array. Ad esempio, per creare lo stesso vettore creato precedentemente contenente i numeri pari compresi tra 2 e 20 dobbiamo scrivere:

>> vettorepari = linspace(2,20,10)

vettorepari =

2 4 6 8 10 12 14 16 18 20

Ossia dobbiamo creare un vettore contenenti 10 valori compresi tra 2 e 20. Se omettiamo di indicare il numero di elementi, MatLab crea automaticamente un vettore di 100 elementi. Per creare una matrice possiamo combinare due funzioni linspace:

>> matrice = [linspace(1,5,3); linspace(2,6,3)]

matrice =

1 3 5 2 4 6

La funzione logspace è simile a linspace, ma a differenza di quest’ultima crea vettori logaritmicamente intervallati. Ad esempio:

Page 21: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

21

>> matricelog = logspace(1,2,5)

matricelog =

10.0000 17.7828 31.6228 56.2341 100.0000

2. Accedere agli elementi di un array

In un array, è possibile identificare ciascun elemento mediante una serie di indici che indicano la posizione dell’elemento nell’array. Più specificatamente, c’è bisogno di tanti indici quante sono le dimensioni dell’array, e ciascun indice indica la posizione dell’elemento in un certa dimensione.In un matrice, ad esempio, ci sono due indici che indicano la riga e la colonna in cui si trova l’elemento. Data ad esempio la matrice A

A =

1 2 3 4 5 6 7 8 9 10 11 12

per accedere all’elemento 5 dovremo scrivere:

>> A(2,1)

ans =

5

Ossia dovremo indicare a MatLab che vogliamo accedere all’elemento nella seconda riga e nella prima colonna.Possiamo modificare il valore di tale elemento semplicemente scrivendo:

>> A(2,1) = 0

A =

1 2 3 4 0 6 7 8 9 10 11 12

Se vogliamo selezionare non un singolo elemento dell’array, ma un insieme di elementi, possiamo utilizzare l’operatore ‘:’ (due punti). Ad esempio, per selezionare gli elementi 6 7 e 8 della matrice precedente possiamo scrivere:

>> A(2,2:4)

ans =

6 7 8

Page 22: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

22

Se vogliamo selezionare un’intera riga, o un’intera colonna, possiamo utilizzare l’operatore ‘:’ da solo. Ad esempio, per selezionare tutti gli elementi della seconda colonna scriveremo:

>> A(:,2)

ans =

2 7 10

Infine, è possibile anche selezionare righe o colonne non contigue tra loro. Il seguente codice seleziona ad esempio la seconda e la quarta colonna:

>> A(:,[2,4])

ans =

2 4 7 8 10 12

Nel caso di un vettore, valgono le stesse regole viste per le matrici. Ad esempio, dato il vettore V:

V =

1 2 3 4 5 6

Per accedere all’elemento 4 possiamo scrivere:

>> V(1,4)

ans =

4

Abbiamo cioè indicato a MatLab di selezionare l’elemento nella prima riga e nella quarta colonna. Dato tuttavia che si tratta di un vettore, ed in particolare in questo caso di un vettore riga, possiamo omettere di indicare l’indice della riga e scrivere più semplicemente:

>> V(4)

ans =

4

Lo stesso discorso vale per i vettori colonna.

Page 23: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

23

3. Operazioni matematiche sugli array

Come già abbiamo avuto modo di vedere nei capitoli precedenti, in MatLab possiamo effettuare operazioni matematiche sui dati. In generale è utile distingue tre casi, in base al tipo di operandi:

1. operazioni scalare – scalare2. operazioni array – scalare o scalare – array3. operazioni array - array

3.1. Operazioni scalare - scalare

Quando entrambi gli operatori sono degli scalari, possiamo effettuare semplici operazioni aritmetiche tra numeri interi o reali. MatLab utilizza i simboli ‘+’, ‘-‘, ‘*’, ‘/’ e ‘^’ per eseguire le operazioni classiche, ossia rispettivamente la somma, la sottrazione, la moltiplicazione, la divisione e l’elevamento a potenza. Il simbolo ‘\’ è inoltre utilizzato per la divisione sinistra o inversa.È possibile combinare a piacere tali simboli per scrivere espressioni matematiche di varia lunghezza. Quello a cui dobbiamo prestare attenzione, tuttavia, sono le regole di precedenza degli operatori. Ad esempio, la seguente operazione:

>> x= 5 + 3 - 4 ^ 2

potrebbe essere interpretata in vari modi. Potremmo calcolare il quadrato della somma di tre numeri (5, 3 e -4) oppure potremmo calcolare prima la somma tra 5 e 3 e poi sottrarre il quadrato di 4. Quale delle due è l’interpretazione corretta? Per rispondere alla domanda, dobbiamo conoscere appunto le regole di precedenza utilizzate da MatLab:

Livello di precedenza1 (livello più alto) Elevamento a potenza2 Moltiplicazione e divisione3 (livello più basso) Addizione e sottrazione

A parità di livello di precedenza, inoltre, le espressioni matematiche sono valutate da destra a sinistra.In base a queste regole, dunque, l’espressione precedente viene interpretata nel secondo modo indicato, producendo il seguente risultato:

x =

-8

Ma se il nostro scopo era invece l’altro, se volessimo cioè elevare al quadrato la somma dei tre numeri (5, 3 e -4), come potremmo comunicarlo a MatLab? Per risolvere questi problemi possiamo utilizzare le parentesi tonde. Matlab infatti esegue prima le operazioni racchiuse tra parentesi tonde. Se ci sono più parentesi, vengono valutate prima quelle più interne. Nell’esempio precedente, possiamo perciò scrivere:

>> x= (5 + 3 - 4) ^ 2

x =

Page 24: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

24

16

In genere, è buona norma utilizzare sempre le parentesi tonde, anche quando non sono necessarie, proprio per evitare errori di interpretazione.

3.2. Operazioni array - scalare o scalare – array

Quando uno dei due operandi è uno scalare e l’altro un array, l’operazione è equivalente ad eseguire una serie di operazioni tra gli elementi dell’array e lo scalare. Ad esempio, il prodotto di una matrice A per lo scalare 5 è equivalente a moltiplicare ciascun elemento della matrice per 5:

A =

1 2 3 4 5 7 7 8 9 10 11 12

>> A * 5

ans =

5 10 15 20 25 35 35 40 45 50 55 60

La stessa regola vale anche per la divisione, l’addizione e la sottrazione.Nel caso della divisione, tuttavia, a differenza delle altre tre operazioni, dobbiamo cambiare operatore a seconda della posizione dello scalare: se lo scalare è il secondo operando possiamo continuare ad utilizzare il simbolo ‘/’, mentre quando lo scalare è il primo operando dobbiamo utilizzare l’operatore ‘./’, come nell’esempio seguente:

>> 5 ./ A

ans =

5.0000 2.5000 1.6667 1.2500 1.0000 0.7143 0.7143 0.6250 0.5556 0.5000 0.4545 0.4167

Se proviamo ad utilizzare l’operatore ‘/’ MatLab segnala un messaggio d’errore, in quanto interpreta l’operazione come una divisione tra array (si ricordi che uno scalare è una matrice 1 x 1). La presenza del simbolo ‘.’ (punto) davanti a quello di divisione indica invece a MatLab che l’operazione va eseguita elemento per elemento.

Anche nel caso dell’operazione di elevazione a potenza, l’operatore ‘.^’ deve essere utilizzato al posto dell’operatore ‘^’, sia nel caso in cui lo scalare sia il primo operando che nel caso in cui sia il secondo. Ovviamente, il risultato non è lo stesso nei due casi.

>> A .^ 2

Page 25: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

25

ans =

1 4 9 16 25 36 49 64 81 100 121 144

>> 2 .^ A

ans =

2 4 8 16 32 64 128 256 512 1024 2048 4096

Nel primo caso eleviamo ogni elemento della matrice al quadrato. Nel secondo caso eleviamo 2 alla potenza di ciascun elemento della matrice.Se si usa l’operatore ‘^’ senza punto, l’operazione equivale a moltiplicare l’array per se stesso n volte e quindi diventa un caso di operazione array – array (si veda il paragrafo successivo). Per questo motivo, per utilizzare l’operatore ‘^’ la matrice deve essere quadra.

3.3 Operazioni array - array

Per quanto riguarda le operazioni tra due array (vettore – vettore, vettore – matrice, matrice –vettore o matrice – matrice), esistono in MatLab due classi di operazioni aritmetiche:

A. operazioni elemento per elemento, come nel caso degli scalari, caratterizzate dal punto davanti al simbolo di operatoreB operazioni tra array, definite dalle regole dell’algebra lineare

Per quanto riguarda la prima classe di operazioni, gli array devono necessariamente avere la stessa dimensione. Ad esempio:

A =

1 2 3 4

>> B = [2 4; 6 8]

B =

2 4 6 8

>> A .* B

ans =

2 8 18 32

Page 26: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

26

In pratica, quello che facciamo con l’operazione ‘.*’ è moltiplicare gli elementi delle due matrici tra di loro, ossia 1*2, 2*4, 3*6 e 4*8.Lo stesso principio si applica anche all’addizione, alla sottrazione, alla divisione e all’elevamento a potenza. Si noti, tuttavia, che nel caso dell’addizione e della sottrazione, poiché le due classi di operazioni coincidono, non si usa mai il punto davanti al simbolo dell’operatore.

Per quanto riguarda la seconda classe di operazioni, valgono le regole dell’algebra lineare. Ad esempio, nel caso della moltiplicazione tra array, le dimensioni interne devono corrispondere. In altre parole, data la matrice M1 [m x n] e la matrice M2 [o x p], affinché l’operazione tra M1 e M2 sia definita deve essere: n = o. L’array risultante avrà come dimensioni [m x p]. Ad esempio:

>> M1 = [1 2 3]

M1 =

1 2 3

>> M2 = [2 4; 3 6; 4 8]

M2 =

2 4 3 6 4 8

>> M1*M2

ans =

20 40

L’operazione è definita in quanto M1 è una matrice [1 x 3] e M2 una matrice [3 x 2]. Le dimensioni interne sono dunque le stesse ( = 3). La matrice risultante è [1 x 2]. Ciascun elemento di tale matrice è il risultato del prodotto scalare tra una riga di M1 ed una colonna di M2.Ad esempio, il prodotto scalare tra la prima (ed unica) riga di M1 e la prima colonna di M2 è:

1*2 + 2*3 + 3*4 = 20

mentre il prodotto con la seconda colonna è:

1* 4 + 2*6 + 3*8 = 40

4. Operatori relazionali e logici

Oltre agli operatori matematici visti nel precedente paragrafo, MatLab mette a disposizione anche degli operatori di tipo relazionale e logico.Gli operatori relazionali permettono di confrontare variabili e array. In MatLab ne sono presenti sei:

< minore< = minore o uguale

Page 27: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

27

> maggiore> = maggiore o uguale= = uguale~ = diverso

Come nel caso delle operazioni matematiche, anche nel caso delle operazioni relazionali possiamo distinguere tre situazioni:

1. Operazioni scalare – scalare. Questo è il caso più semplice. Il risultato del confronto può essere falso (0) o vero (1) a seconda degli operandi e del tipo di relazione. Ad esempio:

>> C = 14>10

C =

1

2. Operazioni scalare – array o array – scalare. Il confronto viene eseguito tra lo scalare e tutti gli elementi dell’array. Il risultato è un array di 0 ed 1, come nell’esempio seguente:

A =

5 4 6 7

>> C = A>5

C =

0 0 1 1

3. Operazioni array – array. Vengono confrontati i singoli elementi di un array con i corrispondenti elementi dell’altro. Il risultato è un array delle stesse dimensioni dei due operandi, contenente 0 ed 1. Un esempio:

B =

8 3 9 3

>> C = A>B

C =

0 1 0 1

Un’istruzione relazionale viene valutata da sinistra a destra e tutti gli operatori relazionali hanno lo stesso livello di precedenza. È consigliabile comunque racchiudere un’istruzione relazionale tra

Page 28: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

28

parentesi tonde per agevolare la lettura del codice.

Per quanto riguarda gli operatori logici, invece, quelli utilizzati da Matlab sono 3:

~ NOT& AND| OR

~A restituisce un array avente le stesse dimensioni di A, i cui elementi sono pari a 1 se quelli di A sono nulli; pari a 0, altrimenti.A&B restituisce un array delle stesse dimensioni di A e B, i cui elementi sono pari a 1 se i corrispondenti elementi di A e B sono ENTRAMBI diversi da 0; pari a 0 se almeno uno tra i due elementi di A e B è uguale a 0.A|B restituisce un array delle stesse dimensioni di A e B, i cui elementi sono pari a 1 se almeno uno tra i due elementi corrispondenti di A e B è diverso da 0; pari a 0 se sono ENTRAMBI uguali a 0.

La presenza di operatori relazionali e logici introduce nuovi livelli di precedenza:

Lvello di precedenza1 (livello più alto parentesi tonde2 operatori aritmetici e operatore NOT; da sinistra a destra3 operatori relazionali; da sinistra a destra4 AND5 (Livello più basso) OR

4. Funzioni predefinite

Oltre alle classiche operazioni matematiche, relazionali e logiche è possibile applicare ai dati (scalari, vettori, matrici ed array multidimensionali) una serie di funzioni predefinite in MatLab. La lista completa delle funzioni è consultabile sull’help di MatLab.Per utilizzare una funzione basta scriverne il nome facendolo seguire da delle parentesi tonde, all’interno della quale vanno inseriti i parametri della funzione. Ad esempio:

V =

1 2 3 4 5 6

>> M = mean(V)

M =

3.5000

Tale codice calcola la media degli elementi del vettore V e pone tale risultato all’interno della variabile M. Se V è una matrice, il risultato della funzione è un vettore riga i cui elementi corrispondono alla media delle corrispondenti colonne di V, come nell’esempio seguente:

V =

1 2 3

Page 29: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

29

4 5 6

>> M = mean(V)

M =

2.5000 3.5000 4.5000

Di seguito sono riportate alcuni esempi di funzioni utilizzate in MatLab:

max (X) restituisce il valore massimo di X

min (X) restituisce il valore minimo di X

ndims (X) restituisce il numero di dimensioni di X

size (X) restituisce il numero di righe e colonne di X

length (X) restituisce il numero totale degli elementi di X

sum (X) restituisce la somma dei valori di X

sort (X) ordina gli elementi di X in senso crescente

find (X) restituisce gli indici degli elementi non nulli di x

Page 30: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

30

Capitolo 4Operazioni di Input/Output

Matlab dispone di vari strumenti che permettono di ottenere l’input dall’utente e di visualizzare l’output.

1. Ottenere l’input dall’utente

Se vogliamo che l’utente immetta un determinato valore, possiamo utilizzare il comando input. Immaginiamo ad esempio di voler creare un programmino che calcola l’area di un triangolo. Possiamo chiedere all’utente di immettere i valori di base ed altezza del triangolo, memorizzare i valori immessi in appropriate variabili (ad esempio Base ed Altezza) ed a quel punto scrivere la formula per calcolare l’area: Area = (Base * Altezza)/2.Quando utilizziamo il comando input dobbiamo specificare il messaggio che appare all’utente. Per esempio:

>> Base = input('Immettere il valore della base ')Immettere il valore della base 5

Base =

5

Il comando input visualizza il testo specificato, attende che l’utente digiti un valore e registra l’input nella variabile Base.

Se si vuole invece che l’utente scelga tra un certo numero di opzioni, si può utilizzare il comando menu, che genera appunto un menu di opzioni. Ad esempio, se vogliamo che l’utente specifichi se vuole calcolare l’area di un triangolo, di un quadrato o di un rettangolo, possiamo scrivere:

>> Scelta = menu (‘Forma geometrica:’,‘Triangolo’,‘Quadrato’,‘Rettangolo’)

Apparirà una piccola finestra con le tre opzioni specificate:

Il valore della variabile Scelta dipende dalla scelta dell’utente: 1 se viene scelta l’opzione 1 (Triangolo), 2 se viene scelta l’opzione 2 (Quadrato) e via dicendo.

Page 31: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

31

2. Visualizzare l’output in forma testuale

Nei capitoli precedenti si è già visto che, se non poniamo l’operatore ‘;’ (punto e virgola) dopo una certa espressione, MatLab ci visualizza automaticamente il risultato dell’espressione. Possiamo utilizzare questo metodo per visualizzare il contenuto di una variabile. Basta scrivere il nome della variabile e premere invio:

>> A

A =

1 2 3 4

Il comando disp può essere utilizzato allo stesso modo:

>> disp(A) 1 2 3 4

Possiamo utilizzare il comando disp anche per visualizzare testi. In questo caso la sintassi prevede di racchiudere il testo tra due apici:

>> disp ('ciao mondo')ciao mondo

In MatLab possiamo anche modificare il modo in cui i dati numerici vengono mostrati sullo schermo. Per default Matlab utilizza il formato short che visualizza quattro cifre decimali. Ad esempio:

>> C =2.5

C =

2.5000

In MatLab esistono vari formati, elencati di seguito:

Formato Visualizzazioneshort 4 cifre decimalilong 16 cifre decimalishort e 4 cifre decimali più l’esponentelong e 15 cifre decimali più l’esponentebank 2 cifre decimali+ positivo, negativo o zero

Per cambiare il tipo di formato è sufficiente digitare “format ‘ formato’”. Ad esempio:

>> format 'long'

Page 32: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

32

>> C =2.5

C =

2.50000000000000

3. Visualizzare l’output in forma grafica

Matlab prevede numerose funzioni che permettono di creare grafici, sia bidimensionali sia tridimensionali. In questo sede ci limiteremo a considerare i soli diagrammi bidimensionali. Per visualizzare le informazioni sulle funzioni grafiche basta digitare “help graph2d” nella Command Window.I tipi di diagrammi a cui di riferiremo sono in particolare i diagrammi xy. Tali diagrammi sono utilizzati per rappresentare funzioni tipo y = f (x). La variabile indipendente (x) è rappresentata lungo l’asse orizzontale e la variabile dipendente (y) lungo l’asse verticale. In generale, un diagramma può essere ottenuto da dati sperimentali o da un’espressione matematica.Per costruire correttamente un diagramma è necessario che:

1. ogni asse abbia un titolo o etichetta con il nome di ciò che rappresenta e l’unità di misura.2. ogni asse abbia segni di graduazione (tick marks) regolarmente distanziati.3. se il diagramma visualizza più curve deve essere presente una legenda per distinguerle.4. se il diagramma visualizza diversi insiemi di dati sperimentali è consigliabile utilizzare un

simbolo diverso (cerchio, quadrato, croce, ecc.) per ogni insieme5. non si utilizzino i simboli per distinguere curve generate da equazioni.

Per generare un diagramma si utilizza la funzione plot (x, y)Se x e y sono vettori Matlab genera una curva con i valori di x sull’asse orizzontale e i valori di y sull’asse verticale.

La seguente tabella riporta una serie di comandi utili per completare il diagramma:

xlabel (‘testo’) genera i titoli o etichette dell’asse xylabel (‘testo’) genera i titoli o etichette dell’asse ytitle (‘testo’) genera il titolo del graficogrid on aggiunge una griglia al diagrammagrid off elimina la griglia dal diagrammaaxis ([xmin xmax ymin ymax]) imposta i valori dei limiti degli assiaxis square seleziona automaticamente i limiti degli assi in modo da

ottenere un diagramma quadratoaxis equal imposta una spaziatura identica per gli assi axis auto imposta automaticamente limiti “ideali” per una corretta

visualizzazione

L’ordine di questi comandi non è rilevante purché seguano il comando plot e siano su un’unica riga, separati dall’operatore virgola (,). Di seguito viene mostrato un esempio

>> x = [0:0.1:52];y = 0.4*sqrt(1.8*x);plot (x,y), xlabel ('Distanza (km)'), ylabel ('Altezza (km)'), ...title ('Altezza di un razzo in funzione della distanza orizzontale'), grid on, axis ([0 52 0 5])

Page 33: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

33

MatLab visualizza la finestra seguente:

È possibile stabilire dei limiti di visualizzazione alla funzione, utilizzando il comando fplot. La sintassi generale di tale comando è: fplot (‘stringa’, [xmax xmin]), dove ‘stringa’ è il testo che descrive la funzione da rappresentare e [xmin xmax] l’intervallo della varibile x che si vuole visualizzare.Per esempio, potremmo voler visualizzare solo una parte della funzione precedente:

>> x = [0:0.1:52];fplot('0.4*sqrt(1.8*x)',[0 10]), xlabel ('Distanza (km)'), ylabel ('Altezza (km)'), ...title ('Altezza di un razzo in funzione della distanza orizzontale'), grid on, axis ([0 52 0 5])

MatLab produce ora il seguente grafico:

Per generare più digrammi nella stessa figura è possibile utilizzare il comando subplot. La sua sintassi generale è: “subplot (m,n,p)”, dove m e n rappresentano il numero di pannelli e p

Page 34: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

34

rappresenta il pannello in cui verrà posto il grafico successivo. Il codice seguente crea due grafici affiancati che visualizzano due diverse funzioni:

>> x = [1:10];>> y1 = 2*x;>> y2 = x.^2;>> subplot(1,2,1); plot(y1)>> subplot(1,2,2); plot(y2)

Il risultato è il seguente:

È possibile anche visualizzare le due curve nello stesso grafico. Ci sono due modi principali per fare ciò. Il primo è quello di utilizzare il comando hold on (hold off serve a disabilitare tale opzione).Ad esempio:

>> hold on>> plot(y1)>> plot(y2)

produce il seguente risultato:

Page 35: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

35

Lo stesso risultato si ottiene anche utilizzando un solo comando plot:

>> plot(x,[y1' y2'])

Page 36: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

36

Capitolo 5Programmare in MatLab

1. I file in Matlab

Matlab utilizza tre tipi di file: i MAT- file, i file dati e gli M-file,

- I MAT-file hanno estensione ‘.mat’ e permettono di salvare i nomi ed i valori delle variabili generate durante una sessione di lavoro. Sono file binari e pertanto possono essere letti soltanto dal software che li ha creati (ossia MatLab). - I file dati sono file ASCII (American Standard Code for Information Interchange), eventualmnete creati anche da altri programmi, che contengono dati che possiamo importare in MatLab.- Infine, gli M-file hanno estensione ‘.m’ e sono utilizzati per scrivere sequenze di comandi (script e funzioni). Essendo file ASCII, gli M-file possono essere scritti utilizzando qualsiasi editor di testi. Matlab, tuttavia, prevede un editor molto utile che include funzioni di correzione e di debug.

Per quanto riguarda il primo tipo di file, in esso possiamo salvare le variabili create nell’ambiente di lavoro, mediante il comando save. Ad esempio:

>> save prova.mat

salva tutte le variabili in memoria nel file “prova.mat” nella directory di lavoro.

Per caricare successivamente le variabili si usa il comando load:

>> load prova.mat

Se si vogliono salvare soltanto alcune variabili (per esempio A e B) basta porre il loro nome dopo il nome del file. Ad esempio:

>> save prova.mat A B

Oltre a file contenenti variabili salvate mediante il comando save, è possibile, come si è anticipato sopra, importare dati da qualunque file di testo. Per caricare tali dati basta indicare il nome completo del file, compresa l’estensione. Ad esempio:

>> load prova.txt

I dati saranno caricati in una variabile che ha lo stesso nome del file (senza estensione).

Si possono importare dati anche direttamente da una cartella Excel, utilizzando il comando xlsread. Ad esempio:

>> A = xlsread (‘prova.xls’)

Page 37: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

37

carica i dati dalla cartella ‘prova.xls’ nell’array A.

Il comando

>> [A, B]= xlsread (‘prova.xls’)

importa invece i dati numerici nell’array A ed i testi nell’array B.

Per rendere ancora più facile l’importazione dei dati, ASCII o binari, Matlab include inoltre un’applicazione chiamata Import Wizard (Figura 12). L’Import Wizard è accessibile selezionando Import Data dal menu File. Una volta selezionata tale voce, appare una finestra che permette di selezionare il file dal quale importare i dati. L’Import Wizard visualizzerà un’anteprima dei dati contenuti nel file.Dopo aver impostato il separatore di colonna appropriato (di default è selezionato lo spazio) bisogna premere il tasto Next. Apparirà una finestra di dialogo che consente di selezionare le variabili da importare (data, textdata, colheaders). A questo punto basta premere il tasto Finish per terminare il processo di importazione.

Figura 12. L'Import Wizard.

Infine, Matlab prevede anche per quanto riguarda l’esportazione la possibilità di utilizzare file di testo. Ci sono in particolare due opzioni per esportare un array come file ASCII delimitato: utilizzare il comando save seguito dall’opzione –ASCII, come nell’esempio seguente:

>> save prova.txt A –ASCII

oppure utilizzare la funzione dlmwrite. Quest’ultima è da preferirsi, poiché permette di specificare il delimitatore e di esportare sottoinsiemi di array. Ad esempio, per usare la funzione dlmwrite specificando il punto e virgola come delimitatore, si digiti:

>> dlmwrite (‘prova.tst’, A, ‘;’)

Page 38: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

38

Se non viene specificato nessun delimitatore, dlmwrite utilizza la virgola come delimitatore di default.

2. I file script

Fino ad ora si è utilizzato Matlab in modalità interattiva, ossia digitando le istruzioni direttamente nella finestra dei comandi. Questa modalità, tuttavia, è utile solo in casi limitati, quando i problemi da risolvere sono molto semplici. Nelle applicazioni pratiche è molto più conveniente scrivere e salvare i propri programmi contenenti i comandi di Matlab in un file tipo M (M-file). Eseguire un M-file corrisponde a digitare in sequenza tutti i comandi in esso contenuti nella finestra dei comandi. Per eseguire un M-file basta digitarne il nome nella Command Window.In altre parole, gli M-file sono semplici file di testo che contengono sequenze di comandi che l’utente intende far eseguire a Matlab. Esistono due categorie di M-file: i file script ed i filefunzione.

In questo paragrafo ci occuperemo dei file script. La proprietà principale di tali file è che i valori delle variabili create durante la loro esecuzione sono caricate nella sessione di lavoro e pertanto rimangono in memoria fino a quando non vengono esplicitamente cancellate attraverso un comandoclear. Tali variabili sono perciò definite “globali”.Per creare un nuovo file script è sufficiente cliccare sulla prima icona a sinistra della barra dei comandi o selezionando il menu File/New/M-file. Comparirà una nuova finestra di editing dell’utlity Editor\Debugger di Matlab, il cui utilizzo è molto simile a quello di qualsiasi editor di testi (Figura 13).

Figura 13. La finestra dell’Editor/Debugger.

A questo punto possiamo scrivere il codice che ci interessa, proprio come se fossimo sulla riga di comando. Tuttavia, l’effetto dei nostri comandi si vedrà solo dopo aver eseguito il file, e non quando premiamo il tasto invio.Possiamo inserire inoltre nel codice dei commenti per renderlo più comprensibile a noi stessi e ad altre persone che dovranno eventualmente utilizzarlo. Per fare ciò dobbiamo cominciare la linea utilizzando il simbolo ‘%’ (percentuale). È buona norma indicare nella prima riga di un file script il suo nome con l’estensione (.m) e successivamente una spiegazione sintetica del suo scopo.Il menu Text contiene una serie di funzioni utili mentre si scrive un M-file. Esso permette di:

a. inserire (Comment) o eliminare (Uncomment) commenti;b. aumentare (Increase Indent) o diminuire (Decrease Indent) i rientri (indentazione);c. evidenziare (Bilance Delimiters) il codice delimitato dalle parentesi (delimitatori bilanciati);

Page 39: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

39

d. impostare la funzione di rientro automatico (Smart Indent);e. visualizzare nella finestra dei comandi i valori delle variabili selezionate (Evaluate

Selection). Si noti tuttavia che per visualizzare il valore di una variabile si può più semplicemente posizionare il puntatore del mouse sopra il suo nome: il valore corrispondente comparirà all’interno di una piccola finestra chiamata Datatips.

Dopo aver digitato il codice desiderato, bisogna salvare il file cliccando sull’icona o selezionando l’opzione Save del menu File. Il nome del file deve essere diverso da quello delle variabili utilizzate.A questo punto possiamo eseguire il programma semplicemente digitando il suo nome nella finestra dei comandi.Se MatLab segnala errori nello script, ossia si interrompe durante la sua esecuzione, possiamo utilizzare il debugger. Gli errori riconosciuti dal debugger sono di due tipi:

1. Errori di sintassi: Matlab visualizza un messaggio nella finestra dei comandi che descrive l’errore e la sua posizione.

2. Errori di runtime: sono dovuti a procedure di calcolo sbagliate. Tipicamente si verificano per determinati valori delle variabili di input.

Nella fase di debug, un’importante funzione svolgono i breakpoint. Un breakpoint in Matlab è un marcatore, visualizzato come un cerchietto rosso, in corrispondenza del quale viene interrotta temporaneamente l’esecuzione del programma. Tale interruzione permette all’utente di esaminare eventuali errori di sintassi o di runtime e di valutare i valori delle variabili correnti. Per impostare un breakpoint basta posizionare il cursore in una riga di testo e fare clic sull’icona dei breackpoint

. Il menu Breakpoint prevede inoltre opzioni che permettono di:

1. impostare (Set Breakpoint) o eliminare un breakpoint (Clear Breakpoint);2. eliminare tutti i breakpoint (Clear All Breakpoint);3. interrompere il programma quando viene generato un messaggio di errore (Stop If Error), di

runtime (Stop If Warning), valori indefiniti (Stop If NaN), valori infiniti (Stop If Inf).

Altre funzioni importanti durante il debug sono contenute nel menu Debug. In particolare:

Opzione FunzioneStep il codice viene eseguito un passaggio alla voltaStep In il controllo viene passato alla prima riga eseguibile della funzione chiamata

(utenti esperti)Step Out il controllo ritorna alla funzione chiamante (utenti esperti)Run permette di eseguire interamente il codice del M-file fino al primo breakpoint

impostatoGo Unitl Cursor imposta un breakpoint temporaneo in corrispondenza della riga in cui si trova

il cursoreExit Debug Mode permette di uscire dalla modalità di debugging e tornare alla modalità di

editing normale

3. I file funzione

I file funzioni sono molto simili agli M-file, ma a differenza degli script tutte le variabili in un file funzione sono locali: i loro valori sono cioè disponibili solo all’interno della funzione.Un file funzione deve necessariamente iniziare con una riga di definizione della funzione, che

Page 40: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

40

contiene l’elenco delle variabili di input e output ed il nome della funzione:

function [VariabiliOutput] = NomeFunzione (VariabiliInput)

Nello scrivere una funzione bisogna fare molta attenzione alle seguenti regole:

1. la parola function va scritta sempre in lettere minuscole2. le variabili di output devono essere racchiuse tra parentesi quadre3. le variabili di input devono essere racchiuse tra parentesi tonde4. il nome del file deve essere uguale al nome della funzione

E’ utile scrivere una riga di commento, contenente le parole chiave della funzione, immediatamente dopo la riga di definizione della variabile per facilitare le ricerche con il comando lookfor.Per chiamare una funzione è sufficiente digitarne il nome seguito dagli argomenti racchiusi tra parentesi tonde. Ad esempio, supponiamo di avere creato una funzione che calcola l’area di un triangolo. La funzione avrà la seguente forma:

function Area = CalcolaArea (Base, Altezza)

Se vogliamo calcolare l’area di un triangolo avente come base 5 e come altezza 3, possiamo scrivere nella Command Window:

>> Area = CalcolaArea (5, 3)

Area =

7.5000

4. Elementi di programmazione strutturata

Tutti i linguaggi di programmazione possiedono strumenti per controllare il normale flussosequenziale nell’esecuzione delle istruzioni.I costrutti principali per il controllo del flusso sono le istruzioni condizionali e le istruzioni iterative

4.1 Istruzioni condizionali

Le istruzioni condizionali vengono utilizzate quando si vuole che determinate istruzioni vengano eseguite solo quando si verificano condizioni specifiche. Esistono varie forme di istruzioni condizionali. La più conosciuta ed utilizzata è sicuramente l’IF.

L’istruzione if

Sintassi:

if (EspressioneLogica)istruzioni

end

L’espressione logica rappresenta una condizione di controllo, che permette di decidere se eseguire o meno le istruzioni che precedono l’end.

Page 41: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

41

Per esempio, se vogliamo calcolare la radice quadrata di x soltanto per x maggiori o uguali a 9, possiamo scrivere:

if (x >= 9)y = sqrt (x)

end

Per convenzione, le istruzioni interne ad un’istruzione condizionale vengono rientrate (indentazione) per semplificare la lettura dei programmi. L’espressione logica può anche essere una combinazione di istruzioni. È fondamentale comprendere il meccanismo di funzionamento della verifica dell’espressione. Il risultato è vero (e pertanto vengono eseguite le istruzioni) se tutti gli elementi risultanti dal calcolo sono pari a 1. Si consideri il seguente esempio:

x = [3, -2, 0, 4, 6, 7]if x<0

disp (‘Almeno un elemento del vettore è minore di zero’)end

In questo caso il comando disp non verrà mai eseguito. Infatti “x < 0” restituisce l’array [0 1 0 0 0 0] i cui elementi non sono tutti pari a 1; pertanto, le istruzioni precedenti l’end non vengono eseguite.

Istruzioni condizionali annidate

È possibile annidare diverse istruzioni condizionali nel seguente modo:

if (EspressioneLogica1)istruzioni1if (EspressioneLogica2)

Istruzioni2end

end

Nel caso di istruzioni condizionali annidate l’indentazione risulta particolarmente utile.

L’istruzione else

L’istruzione else si utilizza quando si intende eseguire un determinato insieme di istruzioni nel caso l’espressione di controllo risulti vera, ed un altro insieme di istruzioni nel caso risulti falsa. La sua sintassi è:

if (EspressioneLogica)istruzioni1

elseistruzioni2

end

L’struzione elseif

Page 42: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

42

L’istruzione elseif viene utilizzata quando, nel caso l’espressione logica di controllo sia falsa, non si voglia sempre eseguire il codice alternativo (come nel caso dell’else), ma solo in certe condizioni. La sua sintassi è la seguente:

if (spressioneLogica1)istruzioni1

elseif (EspressioneLogica2)istruzioni2

end

Se la prima espressione è verificata vengono eseguite le istruzioni1, altrimenti se essa è falsa e contemporaneamente la seconda espressione è vera vengono eseguite le istruzioni2.

L’istruzione switch

L’istruzione switch è una struttura alternativa alle istruzioni if, else ed elseif. Essa è utile quando il processo decisionale prevede numerose alternative. La sua sintassi è la seguente:

swicth (variabile)case valore1

istruzioni1case valore2

istruzioni2…otherwise

istruzioniOtherwiseend

Matlab confronta il contenuto di ‘variabile’ (che può essere uno scalare o una stringa) con il valore che segue il case: se i due elementi sono uguali vengono eseguite le istruzioni corrispondenti. Se nessun valore corrisponde al contenuto di ‘variabile’ vengono eseguite le istruzioniOtherwise. La presenza dell’istruzione otherwise è facoltativa.

4.2 Istruzioni iterative

Un ciclo (loop) è una struttura utilizzata per ripetere un insieme di istruzioni un certo numero di volte (passaggi). In generale, si distinguono due tipi di cicli:

1. Cicli for: il numero di passaggi è noto in anticipo e viene perciò impostato a priori2. Cicli while: il numero di passaggi non è noto in anticipo. Il ciclo termina quando viene

soddisfatta una specifica condizione.

Il ciclo for

La sintassi dell’istruzione for è la seguente:

for variabile = valoriistruzioni

end

dove ‘valori’ contiene i vari valori da assegnare a ‘variabile’. Più specificatamente, al primo

Page 43: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

43

passaggio del ciclo, Matlab assegna il primo valore di ‘valori’ a ‘variabile’, esegue le istruzioni, assegna il secondo valore, riesegue le istruzioni e così via fino all’ultimo valore. L’esempio seguente:

x=0;for i = 1:10

x=x+1;end

incrementa il valore di x da 1 fino a 10. L’espressione 1:10 genera un vettore linearmente intervallato, con passo unitario, da 1 a 10. Quando Matlab entra nel ciclo per la prima volta, assegna alla variabile del ciclo (‘i’) il valore 1, al secondo passaggio il valore 2 e così via. L’ultimo passaggio coincide con l’ultimo valore del range di ‘valori’. Terminato il ciclo vengono eseguite le istruzioni successive all’end.

Il ciclo while

A differenza del ciclo for, il ciclo while si utilizza quando non si conosce in anticipo il numero di passaggi da eseguire. La sua sintassi è:

while (EspressioneLogica)istruzioni

end

Prima di ogni passaggio, Matlab verifica l’espressione logica: se è vera entra nel ciclo, esegue le istruzioni fino all’end e torna a verificare la condizione; se è ancora vera esegue nuovamente le istruzioni e così via. Quando Matlab verifica che la condizione è diventata falsa il ciclo termina e vengono eseguite le istruzioni successive all’end. È possibile ad esempio creare una versione dell’esempio precedente utilizzando l’istruzione while al posto dell’istruzione for.

x=0;while (x<10)

x = x+1;end

Quando Matlab entra nel ciclo la prima volta, verifica se x è diverso da 10; poiché x è uguale a 0, la condizione è vera e vengono eseguite le istruzioni. Quando Matlab verifica che la condizione è diventata falsa, x=10 nel nostro esempio, esce automaticamente dal ciclo.Si noti che, affinché il ciclo while venga correttamente implementato è necessario accertarsi che il contenuto dell’espressione logica venga aggiornato durante l’esecuzione delle istruzioni. Se ciò non avviene, infatti, Matlab non uscirà mai dal ciclo, generando un loop infinito. Nell’esempio precedente, ciò è assicurato dall’istruzione che modifica il valore della variabile contenuta nella condizione, ossia x stesso.

Page 44: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

44

Esercizi

1. Avviare e chiudere una sessione di lavoro. Dati x=10 e y=3, utilizzare Matlab per effettuare i seguenti calcoli:

1) u = x + y2) v = xy3) w = x/y4) z = sin x5) r = 8 sin x6) s = 5 sin (2y)7) p = x y

8) k = xyx /

9) f = y)(sin(x +

10) g = y

x

5

2. Trovare le funzioni di Matlab che permettono di calcolare la media e la deviazione standard di un insieme di dati.

3. Calcolare il logaritmo naturale di 24 ed il logaritmo in base 2 di 73.

4. Creare il vettore i cui elementi sono linearmente intervallati con incrementi di 0.4 tra 2 e 14. Utilizzare due metodi diversi.

5. Creare il vettore che ha 100 elementi linearmente intervallati tra 5 e 28. Utilizzare due metodi diversi.

6. Creare il vettore che ha 50 elementi linearmente intervallati tra -2 e 5. Utilizzare due metodi diversi.

7. Creare il vettore che ha 50 elementi logaritmicamente intervallati tra 10 e 1000.

8. Creare il vettore che ha 20 elementi logaritmicamente intervallati tra 100 e 10000.

9. Definito il vettore

x = [-3, 4, 2, 1, 0, 2, 3, 5, 10]

calcolare:1. length (x)2. size (x)3. la media di x4. assegnare agli elementi con indici pari il valore 7, digitando un unico comando

Page 45: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

45

10. Data la matrice:

A=

1 0 6 -3 -1 2 0 2 0 3 -1 -2 -6 0 4 1

1. si valuti A(: , 2)2. si valuti le media della seconda colonna e della terza riga3. si generi la matrice composta dagli elementi appartenenti ala seconda e quarta riga ed alla

terza e quarta colonna4. si generi la matrice composta dagli elementi appartenenti alla prima e terza riga ed alla

seconda e quarta colonna

11. Data la matrice:

A=

1 2 34 5 67 8 9

si estragga la sottomatrice di A composta dagli elementi Aij, tali che i=2,3 e j=2,3.

12. Tabellare la funzione log(x) nell’intervallo [1,5] con passo 0.1. (Con il termine “tabellare” si intende creare una tabella, tale che la prima colonna rappresenti la variabile x e la seconda la variabile y).

13. Tabellare la funzione: y=e3x sin 5πx nell’intervallo [1,10] con passo 1 (Il π in Matlab si indica con pi).

14. Creare un array x con 8 valori compresi tra 2 e 16. Creare una matrice A tale che:1. la prima riga contenga i valori 3x2. la seconda riga contenga i valori (3x)2

3. la terza riga contenga i valori x-8 4. Scambiare la prima e la terza riga di A.

Creare la matrice C tale che:1. la prima riga corrisponda alla seconda colonna di A2. la seconda riga corrisponda alla terza colonna di A3. la terza riga corrisponda alla prima colonna di A

15. Date le seguenti matrici:

A =-7 16

4 9

Page 46: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

46

B = 6 -5 12 -2 C =

-3 -9 6 2

Usare Matlab per:1. Calcolare A+B+C2. Calcolare A-B+C3. Verificare la proprietà associativa:

(A+B)+C=A+(B+C)4. Calcolare il prodotto elemento-per-elemento di A per B5. Elevare al cubo gli elementi di B6. Elevare 3 alla prima riga di C

16. La seguente tabella riporta il consumo medio, i km percorsi e l’indice di affidabilità di 5 diverse automobili.

1 2 3 4 5Consumo km/l 11,2 8,8 9,1 12 16,4Km percorsi 240 550 302 667 980Affidabilità 0.921 0.454 0.980 0.777 0.602

Usare Matlab per:1. Calcolare i litri di benzina consumati da ogni automobile2. Calcolare il consumo medio delle 5 automobili prese in esame3. Calcolare la percorrenza media delle 5 automobili prese in esame4. Usare le funzioni corrette per determinare l’auto più affidabile e quella che consuma di

meno

18. Date le seguenti matrici:

A =

12 34 4 77 21 1 3 5 9

B =

6 -5 12 -2 3 7

Calcolare:1. il prodotto A*B2. la somma di tutti gli elementi di A*B3. il prodotto scalare tra la seconda colonna di A e la prima riga di B

Page 47: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

47

4. la media del prodotto scalare tra la prima colonna di A e di B, ed il prodotto scalare della seconda colonna di A e di B

19. Data la matrice:

A=3 7 -4 12-5 9 10 26 13 8 1115 5 4 1

1. Trovare i valori minimi e massimi di ogni colonna.2. Trovare i valori minimi e massimi di ogni riga.

20. Data la matrice:

A=3 58 -4 3

-5 42 80 26 -19 9 5517 -35 44 1

1. Ordinare gli elementi di ogni colonna e assegnare il risultato all’array B2. Ordinare gli elementi di ogni riga e assegnare il risultato all’array C3. Sommare gli elementi di ogni colonna e assegnare il risultato all’array E4. Sommare gli elementi di ogni riga e assegnare il risultato all’array D

21. Dati i seguenti array:

A=1 4 22 4 1007 9 73 π 42

B= ln (A)

1. Calcolare la somma degli elementi della seconda riga di B2. Calcolare il prodotto scalare tra la seconda colonna di B e la prima colonna di A3. Calcolare il valore massimo del vettore risultante dalla moltiplicazione elemento-per-

elemento dei primi tre elementi della seconda colonna di A e la prima riga di B4. Calcolare la somma degli elementi della terza riga di A dopo averli divisi elemento-per-

elemento per i primi tre elementi della terza colonna di B

22. Creare un array tridimensionale D le cui tre pagine siano le seguenti matrici:A=

3 -2 1 6 8 5 7 9 10

Page 48: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

48

B=6 9 -4

7 5 3 -8 2 1 C=

-7 -5 2 10 6 1

3 -9 8 Trovare l’elemento massimo in ogni strato di D e l’elemento massimo di D.

23. Creare uno script per simulare un modello computazionale in grado di computare la funzione logica AND.

24. Scrivere un file script per calcolare l’ipotenusa di un triangolo rettangolo i cui cateti misurano 12 cm e 16 cm. Il file deve avere due variabili di input ed una variabile di output. Inserire un commento che illustri lo scopo del codice. Salvare il file come teorema_pitagora.m.

25. Importare i dati da un file generato con il programma Excel. Calcolare la somma di tutti i dati e cancellare successivamente i dati dall’area di lavoro.

26. Importare i dati da un file di testo e calcolare la media e la deviazione standard di ogni colonna.

27. Dati i seguenti array:

x = [-3 0 0 2 6 8]

y = [-5 -2 0 3 4 10]

Utilizzare Matlab per trovare gli elementi di x maggiori dei corrispondenti elementi di y.

28. Il seguente array contiene le quotazioni di un noto titolo azionario

x = [220 330 221 198 208 206 188 196 200 204 219 205 177].

Usare Matlab per calcolare il numero di giorni in cui il titolo è stato superiore a 200. Calcolare media e deviazione standard.

29. I seguenti array contengono le quotazioni di due titoli azionari in un periodo di due settimane:

a = [220 330 221 198 208 206 188 196 209 200 198 204 219 205 177]b = [167 189 200 199 202 208 200 193 199 210 216 222 210 202 201]

Usare Matlab per trovare il numero dei giorni in cui il titolo a è stato superiore a b. Calcolare media e deviazione standard di a e b.

30. Dati i seguenti array:

x = [-3 0 0 2 6 8]

Page 49: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

49

y = [-5 -2 0 3 4 10]

Calcolare a mano le seguenti operazioni e valutarle successivamente con Matlab:

1. z = y < ~ x2. z = x & b3. z = ~ (x & b)4. z = x | b5. z = x | ~ b6. z = xor (x, y)7. z = xor (~ x+y, y)

31. Dato il seguente array

x = [1.92 0.05 -2.43 -0.02 0.09 0.85 -0.06]

creare un programma per eliminare tutti gli elementi di x tali che -0.1 ≤ x ≤ 0.1 e sostituirli con altrettanti 0 alla fine dell’array.

32. Un investitore ha 1000 azioni il primo giorno e intende comprare 100 azioni ogni giorno che il prezzo scende sotto le 200 lire e venderne 100 quando il prezzo sale sopra le 210 lire. Usare Matlab per calcolare:

1. la spesa totale per acquistare le azioni2. il guadagno totale dovuto alla vendita delle azioni3. il numero totale di azioni dopo 10 e 15 giorni

34. Utilizzando opportune istruzioni condizionali annidate, scrivere il codice per calcolare:

y = ln x per x > 0y = 5x per x ≤ 0;z = 4y per y ≥ 3z = 2y per 1 ≤ y < 3z = 0 per y < 1z = 7x per x ≤ 0.

35. Utilizzare Matlab per calcolare quanto tempo occorre per accumulare un miliardo di lire in un conto corrente con 10 milioni iniziali e tenendo conto che vengono depositati 10 milioni alla fine di ogni anno e che la banca offre un tasso di interesse annuo del 5%.

36. Date le seguenti matrici:

A=3 -2 1

6 8 5 7 9 10B=

6 9 -4 7 5 3 -8 2 1

Page 50: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

50

Calcolare A*B usando dei cicli e verificare il risultato.

37. Data la matrice:

A=3 7 -4 12-5 9 10 26 13 8 1115 5 4 1

Calcolare la media di ogni colonna usando dei cicli e verificare il risultato.

38. Scrivere una funzione sin_gradi che accetta un angolo x espresso in gradi e restituisce sin x sempre in gradi.

39. Scrivere una funzione che riceve come argomento una temperatura espressa in gradi Fahrenheit e restituisce il valore corrispondente in gradi Celsius. (C=5/9(F-32)).

Page 51: Dispense del corso base di programmazione scientifica in ......la sintassi ed il comportamento di una determinata funzione è semplicemente quello di digitare nella Command Window

51

Indice

Capitolo 1 Panoramica dell’ambiente MatLab......................................................... 21. Che cos’è MatLab ....................................................................................................................22. L’ambiente di lavoro................................................................................................................2

Capitolo 2 Algoritmi ed elementi di programmazione in MatLab. ......................... 121. Algoritmi e programmi ..........................................................................................................122. Tipi di dati in MatLab: gli array.............................................................................................133. Le variabili .............................................................................................................................16

Capitolo 3 Organizzazione e gestione dei dati ........................................................ 191. Creare un array.......................................................................................................................19

1.1 Utilizzo di funzioni quali zeros, ones and rand................................................................191.2 Creazione di array equamente intervallati .......................................................................19

2. Accedere agli elementi di un array ........................................................................................213. Operazioni matematiche sugli array ......................................................................................23

3.1. Operazioni scalare - scalare ............................................................................................233.2. Operazioni array - scalare o scalare – array....................................................................243.3 Operazioni array - array ...................................................................................................25

4. Operatori relazionali e logici..................................................................................................264. Funzioni predefinite ...............................................................................................................28

Capitolo 4 Operazioni di Input/Output.................................................................... 301. Ottenere l’input dall’utente ....................................................................................................302. Visualizzare l’output in forma testuale ..................................................................................313. Visualizzare l’output in forma grafica ...................................................................................32

Capitolo 5 Programmare in MatLab ....................................................................... 361. I file in Matlab........................................................................................................................362. I file script ..............................................................................................................................383. I file funzione .........................................................................................................................394. Elementi di programmazione strutturata................................................................................40

4.1 Istruzioni condizionali......................................................................................................404.2 Istruzioni iterative ............................................................................................................42

Esercizi..................................................................................................................... 44

Indice........................................................................................................................ 51