Laboratorio 1 : Introduzione a MATLAB
Contents
Laboratorio 1 : Introduzione a MATLAB#
MATLAB/Simulink è uno strumento software per:
Esecuzione di calcoli matematici ed elaborazione dei segnali,
Analisi e visualizzazione dei dati: possiedi svariati strumenti grafici,
Modellazione di sistemi e fenomeni fisici,
Test e simulazioni di progetti ingegneristici.
Il Desktop di MATLAB#
La command window è dove digiti i comandi MATLAB seguendo il prompt:
>>
La finestra workspace mostra tutte le variabili che hai definito nella sessione corrente. Le variabili possono essere effettivamente manipolate all’interno della finestra dell’area di lavoro.
La command history mostra tutti i comandi MATLAB che hai usato di recente, includendo anche le sessioni passate.
La current folder mostra tutti i file in qualsiasi cartella sia stata selezionata per essere la cartella corrente.
Operazioni aritmetiche e ordine delle operazioni#
Le operazioni di base sono l’addizione (
+
), sottrazione (-
), la moltiplicazione (*
), la divisione (\
), l’elevamento a potenza (^
),L’ordine delle operazioni è quello canonico adoperato in matematica e segue le usuali convenzioni di una calcolatrice scientifica
Si completano tutte le operazioni tra parentesi
( )
usando le seguenti regole di precedenza,Elevamento a potenza (da sinistra verso destra)
Moltiplicazione e divisione (da sinistra verso destra)
Addizione e sottrazione (da sinistra verso destra)
Esempio
Si considerino ad esempio le seguenti operazioni:
30/5*3 5*2^4+4*(3) -1^8 8^(1/3)
Variabili#
Come in ogni linguaggio di programmazione, MATLAB fa utilizzo di variabili, che, in informatica, sono contenitori di dati situate in una porzione della memoria e destinate a contenere valori, che possono (in generale) essere modificati nel corso dell’esecuzione di un programma.
Una variabile è caratterizzata da un nome (inteso solitamente come una sequenza di caratteri e cifre) che deve seguire un insieme di convenzioni che dipende dal linguaggio che si sta adoperando. In MATLAB le seguenti convenzioni devono essere adoperate:
I nomi delle variabili devono iniziare con una lettera,
I nomi possono includere ogni combinazione di lettere, numeri, e underscore,
La lunghezza massima per il nome di una variabile è di 63 caratteri,
MATLAB è case sensitive. La variabile di nome
pAlla
è diversa dalla variabile di nomepalla
,È buona norma evitare i seguenti nomi:
i
,j
,pi
, e più in generale tutte i nomi di funzioni predefinite di MATLAB come, ad esempio,length
,char
,size
,plot
,break
,cos
,log
, etc.È buona norma chiamare le variabili con nomi intellegibili, cioè con nomi che riflettano l’uso che se ne fa all’interno del programma piuttosto che usare dei nomi generici di variabili come ad esempio
x
,y
,z
.
Suggerimento
Se vogliamo calcolare l’aria superficiale di una sfera \(A = 4\pi r^2\) di raggio \(r = 5\), è molto meglio scrivere
raggio = 5;
area_superficiale = 4*pi*raggio^2
al posto di
r = 5;
A = 4*pi*r^2
Quando riapriremo il secondo codice fra un mese le possibilità di ricordarsi cosa intendevamo saranno piuttosto scarse (o, nel mio caso, anche se lo aprissi fra due ore).
Dall’esempio che abbiamo appena inserito nella workspace osserviamo diverse cose
raggio = 5;
area_superficiale = 4*pi*raggio^2
una variabile
raggio
di tipodouble
è stata creata,una posizione di memoria per la variabile
raggio
è stata allocata ed inizializzata al valore \(5\),il
;
al termine dell’istruzione sopprime la stampa a schermo del contenuto della variabile,la variabile
area_superficiale
viene invece creata ed allocata utilizzando invece una delle quantità predeterminate di MATLAB, il valore di \(\pi\), ed il contenuto della variabileraggio
che abbiamo definito in precedenza. Poiché non abbiamo terminato la seconda istruzione con un;
, vediamo stampato nella command window
area_superficiale =
314.1593
A questo punto possiamo cambiare il valore della variabile raggio
semplicemente
riassegnandolo ad una nuova quantità senza alterare il valore conservato nel
workspace della variabile area_superficiale
.
Per mostrare il contenuto di una variabile, si può utilizzare il comando disp
,
ad esempio:
disp("L'area superficiale della sfera è:"); disp(area_superficiale);
che produrrà nella command window:
L'area superficiale della sfera è:
314.1593
Variabili carattere e stringhe#
Non siamo obbligati ad usare unicamente variabili di tipo numerico. Ad esempio possiamo scrivere nella command window:
studente='C.F. Gauss'
che ci stamperà
studente =
'C.F. Gauss'
Abbiamo costruito un”array di char
, cioè una variabile di nome studente
a cui abbiamo assegnato uno spazio di memoria e in cui abbiamo inserito i
caratteri C.F. Gauss
. Nel dubbio, possiamo interrogare MATLAB riguardo il
tipo della variabile con il comando
whos studente
che ci restituirà
Name Size Bytes Class Attributes
studente 1x10 20 char
Una variante all”array di char
è quello di definire invece un oggetto
string
, cioè assegnare
studente_stringa = "C.F. Gauss"
per cui whos studente_stringa
ci dirà invece
Name Size Bytes Class Attributes
studente_stringa 1x1 156 string
Riassumendo:
Un array di
char
è una sequenza di caratteri, proprio come un vettore numerico è una sequenza di numeri. Un suo uso tipico è quello di memorizzare brevi parti di testo come vettori di caratteri,Un oggetto
string
, ovvero un array distring
è un contenitore per parti di testo. Gli array di stringhe forniscono una serie di funzioni per lavorare con il testo come dati.
Alcune funzioni di cui è opportuno ricordarsi#
MATLAB contiene un grande numero di funzioni matematica già implementate, alcune di quelle di più frequente utilizzo sono riportate nella Tabella 1
Funzione |
MATLAB |
Funzione |
MATLAB |
---|---|---|---|
Coseno |
|
Radice quadrata |
|
Seno |
|
Esponenziale |
|
Tangente |
|
Logaritmo (base 10) |
|
Cotangente |
|
Logaritmo (naturale) |
|
Arcocoseno |
|
Arrotonda all’intero più vicino |
|
Arcotangente |
|
Arrotonda all’intero \(\leq\) |
|
Arcocotangente |
|
Arrotonda all’intero \(\geq\) |
|
Pericolo
Le funzioni trigonometriche così espresse assumono gli input in radianti, ovvero
le funzioni inverse restituiscono l’angolo in radianti. Le versioni che fanno
utilizzo dei gradi si invocano con il suffisso d
, e.g., cosd
, acosd
.
Se si incontra una funzione di cui non si conosce l’utilizzo è possibile interrogare la guida di MATLAB dalla command window con, ad esempio,
help cosd
che stamperà delle informazioni essenziali
cosd Cosine of argument in degrees.
cosd(X) is the cosine of the elements of X, expressed in degrees.
For odd integers n, cosd(n*90) is exactly zero, whereas cos(n*pi/2)
reflects the accuracy of the floating point value for pi.
Class support for input X:
float: double, single
See also acosd, cos.
Documentation for cosd
Other functions named cosd
per cui poi si potrà accedere alle informazioni complete utilizzando il link Documentation for ….
Un’ultima coppia di funzioni estremamente utili è rappresentata dalle funzioni
clear
che svuota la workspace di tutte le variabili, ovveroclear nomevariabile1 nomevariabile2
che cancella unicamente le variabilinomevariabile1
enomevariabile2
,clc
che cancella il contenuto stampato nella command window.
Creazione di Script#
Tutti (o quasi) i comandi visti fino ad ora sono in realtà degli script o delle funzioni pre-costruite e rese disponibili nell’ambiente generale. MATLAB permette all’utente di costruire i suoi script e le sue funzioni per la soluzione di problemi specifici.
Uno script file è semplicemente una collezione di comandi eseguibili di MATLAB e, in alcuni casi più raffinati, di interfacce verso software esterno prodotto in C o in Fortran.
Per creare un nuovo script è sufficiente fare click sull’icona New script, Fig. 2, che aprirà una nuova finestra editor in cui è possibile scrivere il proprio programma.
Come abbiamo detto uno script non è nient’altro che una sequenza di comandi da inserirsi nella finestra dell’editor. Per poter eseguire lo script è necessario che questo sia salvato nella Current Folder.
Avvertimento
Le convenzioni per i nomi degli script sono le stesse che per i nomi delle variabili (Variabili), in particolare è estremamente importante evitare di usare nomi di funzioni predefinite di MATLAB.
Per eseguire lo script si può
Fare click sul bottone Run
Inserire nella command window il nome con cui è stato salvato lo script (senza l’estensione
.m
).
Esempio
Trasformiamo in uno script il nostro codice per il calcolo dell’area superficiale di una sfera. Ovvero, scriviamo all’interno dell’editor:
raggio = 5;
area_superficiale = 4*pi*raggio^2;
disp("L'Area Superficiale della Sfera è: "); disp(area_superficiale);
Salviamo il file come areasfera.m
ed eseguiamolo una volta con il pulsante Run
ed una volta scrivendo areasfera
nella Command Window.
Riassumendo I file di script sono estremamente utili quando si intende eseguire sequenze di molti comandi MATLAB. Immaginiamo ad esempio una sequenza di calcoli divisa in \(n\) comandi, dopo averli inseriti tutti nel prompt ci accorgiamo che il valore assegnato ad una variabile al primo comando è sbagliato, o vogliamo cambiarlo. Lavorando solo nella command window dovremmo correggere l’errore nel primo comando, quindi eseguire di nuovo gli altri \(n-1\) comandi.
Se avessimo prodotto invece uno script, potremmo semplicemente correggere il primo comando ed eseguire nuovamente l’intera sequenza premendo un solo tasto o scrivendo un solo comando: il nome dello script.
Creazione di Funzioni#
Una funzione (detta anche, a seconda del linguaggio di programmazione, routine, subroutine, procedura, metodo), è un particolare costrutto sintattico che raggruppa all’interno di un singolo programma, una sequenza di istruzioni in un unico blocco. Il suo scopo è quello di portare a termine una operazione, azione, o elaborazione in modo tale che, a partire da determinati input, restituisca determinati output.
In MATLAB una funzione di nome miafunzione
è dichiarata come function [y1,...,yN] = miafunzione(x1,...,xM)
che accetta come input x1,...,xM
e restituisce come
output y1,...,yN
. Questa dichiarazione deve essere la prima istruzione
eseguibile del file che contiene la funzione. Nomi validi di funzioni iniziano
con un carattere alfabetico e possono contenere lettere, numeri o underscore.
Si può salvare una funzione in
un file funzione che contiene solamente definizioni di funzione. Il nome del file deve corrispondere esattamente con il nome della prima funzione contenuta nel file;
uno script che contiene comandi e definizioni di funzione. In questo caso le funzioni devono essere contenute alla fine del file e lo script non può avere lo stesso nome di nessuna delle funzioni contenute al suo interno.
I file possono includere molteplici funzioni locali o innestate. Al fine di
produrre del codice leggibile, è consigliato utilizzare sempre la parola chiave
end
per indicare la fine di ogni funzione all’interno di un file.
In particolare, la parola chiave end
è richiesta ogni qual volta:
una qualunque funzione in un file contiene una funzione innestata,
la funzione è una funzione locale all’interno di un file che contiene solo funzioni e, a sua volta, ogni funzione locale usa la parola chiave
end
,la funzione è una funzione locale all’intero di uno script.
Per interrompere l’esecuzione di una funzione prima del raggiungimento dell”end
finale, si può utilizzare la parola chiave return
che, come suggerisce il nome,
restituisce il controllo allo script che ha invocato la funzione. Una chiamata
diretta allo script o alla funzione che contiene return
, non richiama alcun
programma di origine e restituisce invece il controllo al prompt dei comandi.
Esempio
Trasformiamo in una funzione il nostro codice per il calcolo dell’area superficiale di una sfera. Ovvero, scriviamo all’interno dell’editor:
function [area_superficiale] = areasfera(raggio)
%%AREASFERA Funzione che calcola l'area superficiale di una sfera di raggio r
area_superficiale = 4*pi*raggio^2;
end
Salviamo il file come areasfera.m
e possiamo eseguire la funzione direttamente
nella command window come
area_superficiale = areasfera(raggio)
,area_superficiale = areasfera(raggio);
,areasfera(raggio)
. Si osservino le differenze.