Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni134 pagine

Slides Intro Matlab 2020

Caricato da

Giovanni
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni134 pagine

Slides Intro Matlab 2020

Caricato da

Giovanni
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 134

Metodi Numerici per l’Ingegneria Civile A.A.

2019-20

Introduzione a
MATLAB

M. Porcelli
[email protected]

Slides della Prof.ssa C. Beccari - MetNumIngCiv A.A. 2018-2019


1
Prima di cominciare….
 Materiale didattico: slides, materiale esercitazioni (testi e
files) e …consegne esame
IOL https://iol.unibo.it

 Altri riferimenti:
Tutor: Luis Ferroni
Tirocinante: Clara Di Matteo

 Ricevimento:
Dipartimento di Matematica, Porta S. Donato 5 (ufficio B6)

 Modalità d’esame (parte Sgallari/Porcelli):


prova scritta (teoria) + progetto (Matlab)
(vedi intro Prof.ssa Sgallari).
Lezioni e argomenti
 21/02 Introduzione a Matlab, ambiente di
lavoro, variabili, operazioni di base
 06/03 Programmazione con script e function,
grafici, esercizi
 20/03 Esercizi su numeri finiti e approssimazione di
derivate
 27/03 Equazioni e sistemi non lineari
 03/03 Sistemi lineari, metodi diretti
 17/04 Sistemi lineari, metodi iterativi
 24/04 Approssimazione e interpolazione
 08/05(?) Calcolo di integrali
Matlab Tutorials
Sito web MATHWORKS:
http://www.mathworks.com/help/matlab/index.html

Tutorial in inglese: MATLAB primer:


http://math.ucsd.edu/~driver/21d-s99/matlab-primer.html
4
Contents
Introduzione

Parte I - Basi di MATLAB


 Variabili
e tipi di dati
 Espressioni e comandi di base
 Creazione di uno script

Parte II – Function e programmazione

Parte III - Grafici in MATLAB

5
History
 MATLAB è l’acronimo di MATrix LABoratory

 MATLAB fu originariamente scritto dal Cleve Moler, direttore


scientifico a The Math Works, Inc., per fornire un’interfaccia
elementare ed immediata all’uso delle più diffuse librerie scientifiche
(software) per la risoluzione numerica di problemi di Algebra
Lineare, quali LINPACK e EISPACK.

 La prima versione fu scritta nel 1970 per corsi di teoria delle matrici,
algebra lineare e analisi numerica. MATLAB è quindi
fondamentalmente costruito su un software sofisticato che ha come
struttura di base la matrice.

 Fu sperimentato in molte università ed ebbe grande successo nella


comunità di matematica applicata. Jack Little, un ingegnere, lo
conobbe durante una visita a Moler presso la Stanford University nel
1983. Riconobbe le potenzialità commerciali del prodotto e si unì in
società con Moler e Steve Bangert. Essi riscrissero MATLAB in C e
fondarono The MathWorks nel 1984 per continuarne lo sviluppo.
6
Foundation of Matlab

 MATLAB è un sistema integrato per lo sviluppo (IDE). La


struttura dati di base è costituita dalla matrice: ciò significa che
durante l’elaborazione ogni quantità viene trattata dall’ambiente
di calcolo come una matrice di dimensione mxn (uno scalare è
dunque memorizzato come una matrice 1x1)

 Ci sono software gratuiti open source alternativi a MATLAB, in


particulare GNU Octave, che è compatibile con il linguaggio
MATLAB.

http://www.gnu.org/software/octave/

7
Licenza Campus UNIBO
Licenza Campus UNIBO

Per scaricare ed installare MATLAB, occorre creare un account sul sito


Mathworks
Licenza Campus UNIBO

Per scaricare ed installare MATLAB, occorre creare un account sul sito


Mathworks
Overwiew
MATLAB permette di risolvere molti problemi matematici ed
applicativi, ad esempio:

 Calcolo matriciale
 Calcolo di radici di polinomi
 Elaborazione di segnali ed immagini (toolbox)
 Grafici: x-y e polari, grafica 3D

Particolarmente utile per:

 Sviluppo di algoritmi,
 Modellizzazione, simulazione e creazione di prototipi,
 Acquisizioni dati,
 Analisi di dati e visualizzazione,
 Sviluppo di applicazioni, con costruzione di interfacce
grafiche.

11
Overwiew
MATLAB è un linguaggio interpretato, gli errori sono facili da trovare ma è
lento in esecuzione. (Un linguaggio interpretato è un linguaggio di
programmazione le cui istruzioni vengono tradotte in linguaggio macchina solo
al momento dell’esecuzione).

 Grafica 2-D e 3-D per la


visualizzazione di dati.

 Tools per costruire comode


interfacce grafiche per l’utente.

 Funzioni per integrare gli


algoritmi di MATLAB con
applicazioni esterne e linguaggi,
come C, C++, Fortran, Java, COM,
e Microsoft Excel.

12
MATLAB Toolbox: some
 Mapping Toolbox fornisce gli strumenti e utilità per l'analisi di dati geografici e la
creazione di mappe.

 MATLAB Compiler consente di convertire automaticamente i propri programmi


MATLAB in applicazioni standalone e componenti software per condividerli con utenti
finali. Le applicazioni e i componenti creati con il Compiler non necessitano di
MATLAB per essere eseguiti.

 Partial Differential Equation (PDE) Toolbox contiene gli strumenti per lo studio e la
soluzione di equazioni alle derivate parziali (PDE) in due dimensioni spaziali (2-D) e
nel tempo. Un insieme di funzioni di comando e una interfaccia utente grafica consente
di preelaborare, risolvere, e post elaborare PDE-generiche per una vasta gamma di
applicazioni tecniche e scientifiche.

 Symbolic/Extended Math Toolbox fornisce gli strumenti per la risoluzione e la


manipolazione di espressioni matematiche.

 Image Processing Toolbox fornisce una serie completa di algoritmi standard e


strumenti grafici per l'elaborazione delle immagini, l'analisi, la visualizzazione e lo
sviluppo di nuovi algoritmi. È possibile migliorare la qualità delle immagini con
rumore o degradate, estrarre caratteristiche, analizzare forme e texture, e di registrare
due immagini.
13
L’ambiente Matlab
Current Folder Command Window

Workspace
14
Command Window

>> 39*4.4+5

ans = Comando MATLAB


176.6000

Risultato

15
Command Window
La command window permette di interagire
• Con MATLAB proprio come si digita su una calcolatrice

• Cut e paste di operazioni per una facile ripetizione di comandi

• Usare ‘up-arrow’ key ↑ per ripetere i comandi (riportati


nella command history)

16
Command Hystory

Per visualizzare la
Command Hystory,
nel menu HOME,
selezionare Layout

17
Matlab Workspace

• Il Workspace di Matlab visualizza tutte le variabili definite insieme


alla loro dimensione, occupazione di memoria e tipo;
• Anche dando il comando whos nella Command Window

18
Current Folder

• Fornisce un accesso rapido a tutti i files presenti nella directory


scelta
• Fornisce una breve descrizione (quando i files sono commentati) di
ciascun m-file (da attivare cliccando col tasto destro del mouse sulla
barra “Current Folder” della finestra)

19
Current Folder (II)

20
Desktop Layout

Per tornare al
desktop layout di
Default

utile quando si chiude accidentalmente una finestra!

21
Matlab Help
• L’Help di Matlab è uno strumento estremamente potente per imparare.
• L’ Help non solo contiene informazioni teoriche, ma mostra anche esempi per
l’implementazione

22
Matlab Help

L’Help di Matlab può essere aperto dal menu HOME

23
24
Utilizzo di Matlab
Due approcci

 Singoli comandi nella Command Window


Per risolvere problemi usando solo built-in function
 Programmazione usando script e function
Per risolvere problemi più complessi per i quali è
necessario scrivere personalmente uno o più algoritmi in
forma di script e/o function

 In entrambe gli approcci è comodo salvare quanto scritto in


un m-file (file MATLAB con estensione .m), per poterlo
riutilizzare successivamente.
25
Variabili

26
Tipi di dati
I tipi di dati predefiniti sono
scalari reali, complessi, carattere, logico
vettori e matrici reali, complessi, carattere

a = sqrt(3); Double
c = -2+i*8.2 Complex double
t = 1:10 Array di double
f = 1>0 Logical
q = 'k' Char
var_txt = ‘Questa stringa è assegnata alla variabile var_txt‘
Array di char

27
Tipi di dati

Tipo Tipo del dato Memoria


Real numbers
Double in [10-37,1037] 8 byte

Complex
Complex numbers 16 byte
double
Result of a
Logical logical operation 8 byte
double (1=true, 0=false)

Char Character 2 byte

28
Variabili
 Alcuni nomi non possono essere usati come nome di variabile:
for, end, if, while, function, return, elseif, case, otherwise,
switch, continue, else, global, break ……..

 Se si tenta di usare una parola riservata come nome di


variabile, MATLAB dà un messaggio di errore

 Naturalmente, si possono usare parole simili semplicemente


mettendo una o più lettere maiuscole

 MATLAB ha un numero di variabili e costanti speciali

29
Variabili e costanti speciali

Nome Descrizione
ans Nome di default usato per i risultati

eps Precisione di macchina

i,j Unità immaginaria, sqrt(-1)

Inf ∞

NaN Risultato numerico non definito (Not a Number)

pi 

realmax Massimo numero reale f.p. nel computer

realmin Minimo numero reale f.p. normalizzato nel computer

30
Vettore riga

Le parentesi quadre sono


usate per definire una matrice

» X=[2,3 7 ] Spazio o virgola sono usati per


separare gli elementi in una stessa
X= riga

2 3 7

Feedback di MATLAB
31
31
Vettore colonna

Le parentesi quadre sono


usate per definire una matrice

» X=[2;3 ; 7 ] il punto e virgola è usato per


delimitare una riga.
X= Si può anche usare ENTER per
2 terminare una riga
3
7 Feed-back di MATLAB
32
32
Istruzioni MATLAB

Istruzioni MATLAB Note


C=5.66 C è uno scalare

C=[5.66] Modo alternativo

X=[3.5 6.3, 33] X è una matrice 1X3 con elementi 3.5 ,


6.3 e 33. virgola o spazio sono usati per
separare gli elementi in una riga

Y=[1 Y è una matrice 2X1 con elementi 1 e 4.


4]
Y = [ 1 ; 4] Punto e virgola è usato per indicare la fine
di una riga.

C=[1:3:11] Equivale a C=[1 4 7 10]

33
33
Generazione automatica di vettori

>> x = [ 0 : 0.2 : 1 ] da 0 a 1 con incremento 0.2


x=
0 0.20 0.40 0.60 0.80 1.00

>> x = linspace(0, 1, 6) 6 punti da 0 a 1 con spaziatura in scala lineare


x=
0 0.20 0.40 0.60 0.80 1.00

>> x = logspace(0,1,6) 6 punti da 100 a 101 con spaziatura in scala


logaritmica (log(x(i))-log(x(i-1))=cost.)
x=
1.0000 1.5849 2.5119 3.9811 6.3096 10.0000

34
Generazione di Matrici
>> B = [ 1 2 ; 8 9 ] matrice definita ‘manualmente’, elemento per elemento
ans =
1 2
8 9

>> ones(2,2) genera una matrice 2 x 2 con elementi uguali a 1


ans =
1 1
1 1

>> zeros(2,3) genera una matrice 2 x 3 con elementi uguali a 0


ans =
0 0 0
0 0 0

>> rand(3,3) genera una matrice 3 x 3 di numeri casuali


ans =
0.4447 0.9218 0.4057
0.6154 0.7382 0.9355
0.7919 0.1763 0.9169

>> eye(2) genera la matrice identità 2 x 2


ans =
1 0
0 1
35
Gli elementi di una matrice
>> A= [ 1 2 3 ; 4 5 6 ; 7 8 9]; A=
1 2 3
>> x = A ( 1, 3 ) A(ind.riga , ind.colonna) 4 5 6
x= 7 8 9
3

>> y = A ( 2 , : ) seleziona la riga 2


y=
4 5 6

>> z = A ( 1:2 , 1:3 ) seleziona una sottomatrice


z=
1 2 3
Come selezionare l’ultima
4 5 6 colonna? A(:,end)

36
Concatenare, Appendere, …
>> R = [ 1 2 3 ] ; A =[A,[1;2;3]]
>> S = [ 10 20 30 ] ; A=
>> T = [ R S ] 2 0 1
T= 0 1 2
1 2 3 10 20 30 3 3 3
>> Q = [ R ; S ]
Q=
1 2 3
10 20 30

>> Q ( 3, 3 ) = 100 Se si memorizza un valore in un


Q= elemento fuori dalle dimensioni della
1 2 3 matrice, le dimensioni automaticamente
10 20 30
aumentano per accogliere il nuovo
elemento
0 0 100
37
Comandi di base
Comandi Descrizione
clc Svuota la Command window
clear Rimuove tutte le variabili
clear var1 var2 Rimuove le variabili in elenco
exist (‘name’) determina se name (file o var) esiste
quit Stop a MATLAB
who Lista delle variabili correnti
whos Lista delle variabili correnti con le loro dimensioni
: Genera un array
, Separa elementi di un array
; Sopprime la visualizzazione del risultato dal video,
anche nuova riga di un array
… Continuazione di una linea

38
Espressioni
 Le espressioni sono la componente fondamentale dei
comandi/istruzioni in MATLAB.
o Una espressione valuta un valore, che si può stampare,
testare, memorizzare in una variabile, passare ad una
funzione, o assegnare un nuovo valore ad una variabile
con un operatore di assegnazione.
o Una espressione da sola può essere una istruzione. Più
istruzioni contengono una o più espressioni che
specificano dati con cui si deve operare.
o Le espressioni includono variabili, riferimenti ad array,
constanti, e chiamate a funzioni, così come combinazioni
di queste con vari operatori.

39
Sintassi di base

40
Operazioni di base

Simbolo Operazione MATLAB


^ Elevamento a potenza: ab a^b
* Moltiplicazione: ab a*b
a
/ Divisione a destra: a/b = b a/b
b
\ Divisione a sinistra: a\b = a a\b
+ Addizione: a + b a+b
- Sottrazione: a-b a-b

1/4=4\1=0.25
41
Sintassi di base
Operatori matematici (su array ed elementi di array)
Array Elementi
+ Addizione + Addizione
- Sottrazione - Sottrazione

* Moltiplicazione .* Moltiplicazione
/ Divisione ./ Divisione
^ Potenza .^ Potenza
 Attenzione alle dimensioni di una matrice nel calcolo matriciale
• Esempio: A: matrice 2x1 , B: matrice 2x2
A*B  operazione non valida
B*A  operazione valida

42
Operazioni sugli elementi
>> B = [ 1 2 ; 3 4 ]
B=
1 2
3 4

>> C = B * B (oppure C = B^2)


C=
7 10
15 22

>> D = B .* B (oppure D = B.^2) il punto denota l’operazione termine


a termine
D=
1 4
9 16 Che significato ha B / B ? B ./ B ?
43
Alcune utili Funzioni
Alcune utili funzioni matematiche:
sin(x), cos(x), tan(x), atan(x), exp(x), log(x), log10(x), sqrt(x)

>> t = [ 0 : 0.01 : 10 ];
>> x = sin ( 2 * pi * t );

Calcolare la dimensione di matrici e vettori: A =[ 1 2 3


>> size (A) 4 5 6
ans = 7 8 9 ];
3 3

>> length ( t ) MA …. >> size ( t )


ans = ans
1001 1 1001

44
Altri operatori e funzioni
Per vettori, sum(x) è la somma degli elementi di x. Per matrici, sum(x) è un
vettore riga con la somma per colonne.
>> sum ( A ) A =[1 2 3
ans =
12 15 18 4 5 6
>> sum ( ans ) equivalente a sum(sum(A)) 7 8 9];
ans =
45

>> A’ equivalente a transpose(A)


ans =
1 4 7
2 5 8
3 6 9

>> diag(A)
ans=
1
5
9

Tutte le function Matlab agiscono in questo modo. Altri esempi: sin(x), cos(x),
min(x), max(x), mean(x),…
45
Numeri Complessi
Sia data: MATLAB memorizza la parte reale
e immaginaria di un numero
complesso.
>> x = 3+4j

>> abs(x) Valore assoluto x = 5

>> angle(x) Fase (in radianti) x = 0.9273

>> conj(x) Complesso coniugato x = 3-4j

>> imag(x) Parte immaginaria x=4

>> real(x) Parte reale x = 3

46
Formati di output
I risultati possono essere visualizzati in formati diversi
Esempio: >>y = 4/3
>>format short 5 cifre
1.3333
>>format short e 5 cifre
1.3333E+000
>>format short g 5 cifre
1.3333
>>format long 15 cifre
1.33333333333333
>>format long e 15 cifre
1.333333333333333E+000
>>format long g 15 cifre
1.33333333333333
>>format rat
default : format short
4/3
47
Formati di output
Riassumendo:

short Punto fisso, con 4 cifre dopo il punto decimale.


short e Formato Floating point, con 4 cifre dopo il punto
decimale.
ghort g Il migliore tra punto fisso o floating point, con 4 cifre dopo
il punto decimale.
long Punto fisso, con 14/15 cifre dopo il punto decimale.
long e Formato Floating point format, con 14/15 cifre dopo il
punto decimale.
long g Il migliore tra punto fisso o floating point,, con 14/15 cifre
dopo il punto decimale.
rat Frazione di interi.

48
M-files ed Editor

1) Creare un M-file
HOME  New Script

2) Aprire un M-file esistente


HOME  Open  selezionare un M-file

Si apre l’Editor di Matlab

49
Editor

Scrivere qui i comandi/istruzioni e


salfare il file

Si può eseguire un programma


• digitando il nome dello script nella Command Window
• scegliendo Run (tasto F5)
50
Esempio

Problema che possiamo risolvere usando built-in-


function di MATLAB;
Si realizzi uno script e lo si salvi in un m-file;
Esecuzione dello script richiamandolo o
eseguendolo.

51
51
Esempio

Esercizio:
Scrivere uno script per calcolare il determinante di una matrice.
• Definire una matrice A 5x5 di numeri reali
• Calcolare il determinante di A (built-in function det )
• Salvare lo script come M-file di nome sdet.m
• Chiamare/eseguire lo script: sdet.m

52
52
Creare uno script
Usare l’Editor per scrivere il seguente script:
%script di esempio
A=[….];
d=det(A);
%stampa del risultato
d

• Salvare il programma usando ‘Save’ e dando ‘sdet’ come nome


• Se si è usato un editor diverso da Matlab (es. NOTEPAD), salvare il
file con estensione .m (es. ‘sdet.m’)

53
53
Eseguire uno script
Dalla Command Window dare il comando:
>>sdet
• MATLAB cerca nelle directory di sua pertinenza se esiste un M-file
con questo nome
• Se lo trova lo carica in memoria e lo esegue, cioè esegue istruzione per
istruzione il contenuto dello script;
•L’output avrà la seguente forma

d=
40
>>

54
54
Controllo Input e Output
 Funzione input: usata per un input interattivo.

R = input('How many apples') dà all’utente il prompt


visualizzando il testo e attende l’input da tastiera.
L’input può essere ogni espressione MATLAB, che viene
valutata, usando le variabili nel workspace corrente, e il risultato
è memorizzato in R. Se l’utente preme il tasto return senza
digitare nulla, input restituisce una matrice vuota.

R = input('What is your name','s') dà all’utente il prompt


visualizzando il testo e attende in input da tastiera una stringa.
L’input digitato non viene valutato; i caratteri sono
semplicemente memorizzati come una stringa MATLAB.
55
Controllo Input e Output
 Funzione disp: utile per controllare l’output
disp(var): visualizza il valore di var.

disp(X) visualizza il contenuto dell’array X, senza visualizzare


il nome dell’array. Lo stesso risultato può essere ottenuto
omettendo il punto e virgola dopo il nome dell’array. Se X è una
stringa, è visualizzato il testo.

 Esempio:
>> disp(X) visualizza il contenuto dell’array, senza visualizzare il
nome dell’array
>> disp(‘The value of X is:’) visualizza la stringa
The value of X is:
56
Esempio

Esercizio:
Scrivere uno script per calcolare il fattoriale di un numero.
• Input: n
• Output : fc
• Chiamare lo script: sfattoriale.m

57
57
Creare uno script
Usare l’Editor per scrivere il seguente script:
%script di esempio
n=input(‘digita un intero positivo: ‘);
fc=factorial(n);
disp(‘Il fattoriale è ‘);
disp(fc);
•Salvare il programma usando salva con nome e dando ‘sfattoriale’ come
nome
•Se si è usato NOTEPAD per creare il file usare il nome ‘sfattoriale.m’

58
58
Eseguire uno script
Dalla Command Window dare il comando:
>>sfattoriale
•MATLAB cerca nella directory corrente se esiste un m-file con questo
nome
•Se lo trova lo carica in memoria e lo esegue, cioè esegue istruzione per
istruzione il contenuto dello script; nella fattispecie procede così:
digita un intero positivo: _
•Il cursore lampeggia in attesa che l’utente digiti un numero come input
digita un intero positivo: 7
Il fattoriale è
5040
>>
59
59
Controllo Input e Output
 Funzione fprintf: utile per controllare l’output

fprintf(format, args); visualizza a video


fprintf(fid, format, args); scrive su file identificato da fid

Esempi:
fprintf(‘%10.7f’,var);
fprintf(‘%10.7f %10.7f’,var1,var2);
fprintf(‘%d %20.16e %e \n’,n,var1,var2);

Legenda:
%d formato intero
%f formato fixed point
%e forma scientifica

60
Modifichiamo lo script
Usare l’Editor per modificare lo script:
%script di esempio
n=input(‘digita un intero positivo: ‘);
fc=factorial(n);
fprintf(‘Il fattoriale è %10.7f \n‘,fc);

• Salvare nuovamente lo script utilizzando ‘save’ e rieseguire.

61
61
Controllo Input e Output
 La funzione Menu: usata per un input interattivo scegliendo da
un menu
k = menu(‘title’,’option1’,’option2’,…)

choices = ['B','D','F'];
k = menu('What do you want? ',…
choices(1),choices(2),choices(3));
disp(['You picked ',choices(k)])

62
Caricare e salvare Dati
Durante il lavoro con MATLAB, si può avere la necessità di salvare
vettori e matrici definite nel programma. Per salvare il file dati nella
directory di lavoro, digitare
save filename
dove "filename" è un nome scelto dall’utente.
Per recuperare i dati nel seguito, digitare
load filename
>>save data; il nome del file che viene salvato è data.mat
>>load data; il nome del file letto sarà data.mat
>>load(‘data’); il nome del file letto sarà data.mat
>>save proj3.txt; il nome del file che viene salvato è proj3.txt
>>mydata = load(‘proj3.txt’); il nome del file letto sarà proj3.txt
e l’array sarà mydata

63
Pausa di riflessione

Seguendo il foglio dell’ Esercitazione 1 realizzare script


MATLAB per la risoluzione di semplici problemi

64
Programmare in MATLAB
 Gli M-file sono macro di comandi MATLAB, sono
memorizzati come files ordinari di testo con l’estensione
"m", cioè filename.m
 Ci sono due tipi di m-file MATLAB

script file function file

% script file % function file


p=[1 3 2]; function [y]=fun(x)
roots(p); y=x^2+3*x^2+2;

65
65
Script vs function
Ci sono due tipi di m-file
 Script
• Consiste di una lista di comandi e istruzioni che saranno
eseguiti sequenzialmente

 Function
• Definisce una o più funzioni che possono essere chiamate
• In Matlab, una function è simile ad una function C/Fortran
• Ci sono diversi tipi di function Matlab
• Function anonime, che non richiedono un m-file ma solo una
singola espressione Matlab
• Function primarie e secondarie

66
Script vs function
Function file
Script file • Inizia con function
• Lista di istruzioni • Lista di istruzioni
MATLAB MATLAB
• Le variabili sono • Le variabili sono
globali locali
• Si esegue digitando il • Si esegue digitando il
nome del file nome del file e
dando i parametri
67
67
Script file

 Usare uno script file quando si ha una lunga


sequenza di istruzioni per risolvere un problema
 Si esegue il programma
• digitando il nome nella command window
• dai tools nell’editor window

68
68
Functions
Funzioni primarie
• Funzioni primarie danno il nome al file
• Un numero di function secondarie possono
essere definite nello stesso file
• Funzioni primarie possono essere richiamate da
un qualsiasi punto (di uno script o altra
function) mentre le function secondarie
possono essere richiamate solo dalla
corrispondente function primaria.

69
Function
Sintassi
 function [out1, out2, ...] = funname(in1, in2, ...)

Descrizione
 function [out1, out2, ...] = funname(in1, in2, ...)
definisce function funname che accetta in ingresso
in1, in2, …etc. e restituisce in uscita out1, out2,…
etc.

70
Creare o aprire uno script

1) Creare uno script


HOME  New Script

2) Aprire uno script esistente


HOME  Open  selezionare uno script

Si apre l’Editor di Matlab

71
71
Editor e codice sorgente

Per eseguire lo script

Codice MATLAB

Numeri di linea
72
Creare una function
Usare l’Editor per scrivere la seguente function:

%esempio di function
function [fc]=ffattoriale(n)
fc=factorial(n);

•Salvare il programma usando salva con nome e dare ‘ffattoriale.m’


come nome
•Se si è usato un altro editor per creare il file (es. NOTEPAD) usare il
nome ‘fattoriale.m’

73
73
Function template
I commenti sono usati per
spiegare le istruzioni MATLAB

% esempio di function
output nome function input
La prima
riga del file function [fc]=ffattoriale(n)
deve fc=factorial(n);
iniziare con
‘function’
built-in function

IMPORTANTE: Il nome della function deve essere lo stesso del file!


74
74
Eseguire una function
Dalla Command Window dare il comando:
>>fc=ffattoriale(7)
•MATLAB cerca nella directory corrente se esiste un m-file con questo
nome
•Se lo trova lo carica in memoria e lo esegue, cioè esegue istruzione per
istruzione il contenuto della function dopo avergli passato come
argomento il valore 7; alla fine dell’esecuzione il risultato viene
memorizzato in fc e visualizzato poiché non c’è il “;” alla fine
dell’istruzione.

5040
>>

75
75
function per calcolare cos(x)

% function per calcolare una stima di cos(x) con x scalare


% in [0,1]
% cos(x) ≈1-x^2/2!+x^4/4! (espansione in serie di Taylor)
function [Sum]=fcos(x)
Sum=1;
n=2; Built-in function factorial
[fc2]=factorial(n);
Sum=Sum-x^2/fc2;
n=4; Built-in function factorial
[fc4]=factorial(n);
Sum=Sum+x^4/fc4;

76
76
Esempio con functions secondarie
function [a,p] = polyGeom(s,n)
% polyGeom Calcola area e perimetro di un poligono regolare %
% Synopsis: [a,p] = polyGeom(s,n)
%
% Input: s = lunghezza di un lato del poligono
% n = numero dei lati del poligono
%
% Output: a = area del poligono
% p = perimetro del poligono

r = s/(2*tan(pi/n)); % "raggio" del poligono


a = area(r,n);
p = perimeter(r,n);

% ============ function secondaria "area"


function a = area(r,n)
% area calcola l’ area di un poligono con n lati e raggio r
a = n*r^2*sin(pi/n);

% ============ function secondaria "perimeter"


function p = perimeter(r,n)
% perimeter calcola il perimetro di un poligono con n lati e raggio r
p = n*2*r*tan(pi/n);
77
Strutture di Controllo
Esistono delle particolari strutture del linguaggio che
permettono di controllare il flusso di esecuzione (quindi delle
operazioni), ovvero di eseguire una certa serie di istruzioni
anche più volte nel momento in cui si verifica una
serie di condizioni.

Le strutture di controllo sono:


 if … elseif … else … end
 for … end
 while … end
 switch … case … otherwise … end

Vi sono inoltre due istruzioni utili per controllare il flusso:


 break
 continue
Struttura di controllo if
L’istruzione if valuta una espressione logica ed esegue un gruppo di istruzioni quando
l’espressione è vera. Le parole chiave elseif e else permettono di eseguire un gruppo
alternativo di istruzioni corrispondenti al caso in cui l’espressione in esame sia falsa. La
parola chiave end, che chiude l’if, termina l’ultimo gruppo di istruzioni.

Forma generale if (x>=0) if (x>0)


sign=1; sign=1;

if condizione else elseif (x==0)

istruzioni sign=-1; sign=0;


end else
else
sign=-1;
istruzioni
end
end

79
79
Esempio
if A > B
'greater‘ if condizione
elseif A < B istruzioni
'less'
elseif A == B end
'equal'
else
error('Unexpected situation')
end
if (x < 10)
disp(x); % only displays x when x < 10
end

if ((0 < x) & (x < 100))


disp('OK'); % displays OK if x between 0 and 100
end

80
Operatori relazionali

> Maggiore di

>= Maggiore o uguale a

< Minore di

<= Minore o uguale a

== uguale

~= Diverso da

(per ~ in una tastiera italiana premere ALT e digitare 126 nel tastierino numerico)

81
Operatori logici

& AND

| OR

~ NOT

82
for loop
Il ciclo for ripete gruppi di istruzioni per un numero
predeterminato di volte. Un end finale delimita le istruzioni del
ciclo.

Forma generale:

for indice=inizio : incremento : fine s=0;


istruzioni for i=1:3:11
end
s=s+i;
end

83
83
Esempi

x=rand(10,1); x=rand(10,1); s=0;


s=0; s=0; for x=0:pi/15:pi
for ii=1:length(x) for ii=length(x):-1:1 s=s+sin(x);
s=s+x(ii); s=s+x(ii); end
end end

for ii=1:m
for jj=1:n
A(ii,jj)=1/(ii+jj);
end
end

84
While … end
Il ciclo while ripete un gruppo di istruzioni un numero
indefinito di volte sotto il controllo di una condizione logica.
Un end finale delimita le istruzioni del ciclo.

Forma generale

while condizione
istruzioni
end

85
Esempio
Determinare il primo intero n per cui n! (fattoriale) è un
numero maggiore di 100.

n=1;
fatt=1;
while fatt<=100 prod(1:n) < 1.e10)
n=n+1;
fatt = fatt*n;
end
disp(n)

86
Strutture di Controllo

L’istruzione break
Esce dal ciclo for o while in cui è inclusa.
L’istruzione break può essere usata solo nel
corpo di un ciclo.
L’istruzione continue
Come break, viene usato solo dentro cicli for o
while. Salta il resto del corpo del ciclo,
provocando il passaggio alla successiva
iterazione del ciclo.

87
Esempio: continue
Output:
% Get inputs from the user.
array=input('Please enter the array to search :'); Please enter the array to search :[2 4
n=input('Please enter the number to be searched 5; 6 13 2; 5 3 11]
:'); Please enter the number to be
searched :13
% Get size of the array.
[r c]=size(array); row 1
column 1
% Search for n in the array. column 2
for ii=1:r column 3
fprintf('row %d\n',ii); row 2
for jj=1:c column 1
fprintf(‘column %d\n',jj); column 2
if(array(ii,jj)==n) 13 found at row 2, column 2
fprintf('%d found at row %d, column column 3
%d\n',n,ii,jj); row 3
continue; column 1
end column 2
column 3
end
ii is 3, jj is 3
end
fprintf(‘ii is %d, jj is %d\n', ii,jj);

88
88
Esempio: break
% Get inputs from the user. Output:
array=input('Please enter the array to search :');
n=input('Please enter the number to be searched Please enter the array to search :[2
:'); 4 5; 6 13 2; 5 3 11]
% Get size of the array. Please enter the number to be
[r c]=size(array); searched :13

% Search for n in the array. row 1


for ii=1:r column 1
fprintf('row %d\n',ii); column 2
for jj=1:c column 3
fprintf(‘column %d\n',jj); row 2
if(array(ii,jj)==n) column 1
fprintf('%d found at row %d, column column 2
%d\n',n,ii,jj); 13 found at row 2, column 2
break; row 3
end column 1
end column 2
end column 3
fprintf(‘ii is %d, jj is %d\n', ii,jj); ii is 3, jj is 3

89
89
Switch e case
L’istruzione switch esegue gruppi di istruzioni basandosi sul valore di una
variabile o di una espressione. Le parole chiave case e otherwise delimitano i
gruppi. Ci deve sempre essere un end a chiudere lo switch iniziale.

Forma generale :
switch switch_expr n = input('Enter a number: ');
case case_expr switch n
istruzioni case -1
disp('negative one')
case {case_expr1, case 0
case_expr2, ….} disp('zero')
istruzioni case 1
disp('positive one')
otherwise
otherwise
istruzioni disp('other value')
end end
90
90
Esercizio per casa - Esempio
% Generate computer’s choice
a=ceil(rand(1)*3);
% Get user input
user=input(' enter 1 for rock \n enter 2 for paper \n enter 3 for scissors ');
% Display your choice, The '\n' means skip to the beginning of the next line.
if a==1;
disp('I choose rock');
elseif a==2;
disp('I choose paper');
else
disp('I choose scissors');
end
% Display user's choice
if user==1;
disp('You choose rock');
elseif user==2;
disp('You choose paper');
else
disp('You choose scissors');
end
91
Esercizio per casa - Esempio
% Generate computer’s choice
a=ceil(rand(1)*3);
% Get user input
user=input(' enter 1 for rock \n enter 2 for paper \n enter 3 for scissors ');
% Display your choice
switch(a)
case{1}
disp('I choose rock');
case{2}
disp('I choose paper');
case{3}
disp('I choose scissors');
end

92
Esercizio per casa - Esempio
answer='y';
while answer=='y' % Display user's choice
% Generate computer’s choice switch(user)
a=ceil(rand(1)*3); case{1}
% Get user input disp('You choose rock');
user=input(' enter 1 for rock \n enter 2 for case{2}
paper \n enter 3 for scissors '); disp('You choose paper');
% Check for erroneous input otherwise
while user~=1 & user~=2 & user~=3 disp('You choose scissors');
user=input(' enter 1 for rock \n enter 2 for end
paper \n enter 3 for scissors '); win=[0 2 1 ; 1 0 2 ; 2 1 0];
end result=win(user,a);
% Display your choice % Display result
switch(a) if result==0
case{1} disp('Settle for draw!');
disp('I choose rock'); elseif result==1
case{2} disp('You win!');
else
disp('I choose paper'); disp('You are a loser!');
case{3} end
disp('I choose scissors'); answer=input('do you want to
end continue(y,n)? ','s');
end
93
Nomi di function come argomenti

Un "function handle" (puntatore a funzione) è una variabile il cui


valore è una funzione.
Data una function esistente, il suo function handle è dichiarato:

handle = @nome dove nome è il nome di tale funzione


esistente

Una volta dichiarato l’handle, è possibile invocarlo come fosse una


funzione:

handle_sum = @sum;
handle_sum([3 2]); % calcola la somma degli elementi del vettore [3 2]

94
Nomi di function come argomenti
Un function handle può essere dichiarato anche “al volo”, ossia su
una funzione non esistente
È un handle di una funzione “anonima” che
handle = @(x)x*3 accetta in ingresso un parametro formale x e
svolge su di esso una moltiplicazione.

handle(10) Si noti che x 3 è a tutti gli effetti il corpo della


funzione anonima.

Essendo variabili, gli handle possono essere passati ad altre


funzioni:

handle_es = @(vett, func) func(vett)


handle_es([3 2], @sum)
handle_es([3 2], handle_sum)
Esempio

function s = fsum(fun,a,b,n)
% fsum Calcola la somma dei valori f(x) su n punti in a <= x <= b
%
% Synopsis: s = fsum(fun,a,b,n)
%
% Input: fun = puntatore alla function f(x) da valutare
% a,b = estremi dell’intervallo
% n = numero di punti nell’intervallo
%
% Output: s = somma di f(x) in n punti nell’intervallo

x = linspace(a,b,n); % crea punti nell’intervallo


y = fun(x); % valuta la function nei punti
s = sum(y); % calcola la somma

96
Esempio

>> s=fsum(@sin,0,pi,15) >> s=fsum(@cos,0,pi,15)


s = s =
8.8752 6.6613e-016

function y=sincos(x) >> s=fsum(@sincos,0,pi,15)


y=sin(x).*cos(x); s =
5.7142e-016

97
Esempio (2 variabili)
f ( x )  1  k 2 sin 2 ( x )

function y=elf(x,k)
y=sqrt(1-k.^2.*sin(x).^2);

function s = fsum1(fun,a,b,n,p1)
x = linspace(a,b,n);
y = fun(x,p1);
s = sum(y);

>>s=fsum1(@(x,k)elf(x,k),0,pi,15,0.9)
s =
11.4430

98
Function feval
Valuta function, permette di definire il nome dinamicamente:
se function è una stringa contenente il nome di una function,
allora feval(function,x1,...,xn) valuta tale funzione nei valori x1,…,xn
assegnati.

Esempio:
>> feval('sin',0.6*pi) >> sin(0.6*pi)
ans = ans =
0.9511 0.9511

feval è utile in funzioni che accettano in input il nome di altre funzioni.

Esempio: Genera il grafico della funzione specificata da fun


function plotf(fun,x) Chiamare con
y = feval(fun,x); plotf(‘sin’,0:0.01:2*pi) oppure
plot(x,y) plotf(@sin,0:0.01:2*pi)
99
Esempio

function s = fsum(fun,a,b,n)
% fsum Calcola la somma dei valori f(x) su n punti in a <= x <= b
%
% Synopsis: s = fsum(fun,a,b,n)
%
% Input: fun = (stringa) nome della function, f(x), da valutare
% a,b = estremi dell’intervallo
% n = numero di punti nell’intervallo
%
% Output: s = summa di f(x) in n punti nell’intervallo

x = linspace(a,b,n); % crea punti nell’intervallo


y = feval(fun,x); % valuta la function nei punti
s = sum(y); % calcola la somma

100
Esempio

>> s=fsum('sin',0,pi,15) >> s=fsum('cos',0,pi,15)


s = s =
8.8752 6.6613e-016

function y=sincos(x) >> s=fsum('sincos',0,pi,15)


y=sin(x).*cos(x); s =
5.7142e-016

function s = fsum1(fun,a,b,n,p1)
f ( x )  1  k 2 sin 2 ( x ) x = linspace(a,b,n);
y = feval(fun,x,p1);
s = sum(y);

>>s=fsum1('elf',0,pi,15,0.9) function y=elf(x,k)


s = y=sqrt(1-k.^2.*sin(x).^2);
11.4430

101
Pausa di Riflessione

Seguendo il foglio dell’Esercitazione 2 realizzare script e function


MATLAB riguardanti piccole elaborazioni con i numeri finiti

102
Grafici in MATLAB
MATLAB permette di realizzare dei grafici in una finestra speciale
definita con il comando figure. Per creare un grafico è necessario
definire un sistema di coordinate. Quindi, ogni grafico ha degli assi
coordinati che contengono la figure.

Comando Descrizione
plot(x,y) Genera il grafico

title(‘text’) Inserisce il titolo nel grafico

xlabel(‘text’) Aggiunge un’etichetta all’asse orizzontale

ylabel(‘text’) Aggiunge un’etichetta all’asse verticale

legend(‘text’) Inserisce una legenda

figure (n) Apre una nuova figura nella finestra numero n

hold on Mantiene la stessa finestra di graficazione


103
Grafici in MATLAB
Specif. linea Colori Marker
solida (default) - blu b punto .
tratteggiata -- nero k segno più +
punteggiata : verde g stelletta *
tratto punto -. rosso r cerchio o
giallo y croce x
bianco w
ciano c
magenta m

104
Grafici “continui”

time=[0:0.01:6]; Genera dati


Y=sin(time);
grafica Y versus time
time è in asse x, Y è in asse y
plot(time,Y);
xlabel('time'); Aggiunge una etichetta all’asse x
ylabel('sin(time) ');
title(' plot of sin(time) '); Aggiunge una etichetta all’asse y
grid;
Aggiunge un titolo

Aggiunge una griglia

105
105
Esempio

106
106
Esempio

time=[0:0.01:6]; Genera i dati


Y=sin(time);
Grafica Y versus time;
plot(time,Y); time è in asse x, Y è in
asse y

direttamente sul grafico (cliccare insert nel menu della figura),


si possono aggiungere
• etichetta all’asse x
• etichetta all’asse y
• titolo
• altre specifiche
107
107
Ancora su plot…
La funzione plot ha diverse forme, in base agli argomenti di ingresso.
• Se si specificano due vettori come argomenti, plot(x,y) produce un grafico
di y versus x.
• Se y è un vettore, plot(y) produce un grafico lineare a tratti in base ai valori
contenuti in y versus gli indici degli elementi.

time=[0:0.01:6]; Genera i dati


Y=sin(time);
Grafica Y versus indici;
plot(Y); nell’asse x ci sono i numeri
corrispondenti agli indici di Y
nell’asse y i valori di Y

108
108
Subplot
» t=-10:.01:10;
» y1=t;
Il comando subplot permette di
» y2=t.^2;
visualizzare più grafici distinti
» y3=exp(t);
» y4=abs(t);
nella stessa finestra grafica.
» subplot(221) Digitando subplot(m n p)
» plot(t,y1), si suddivide la finestra in m × n
title(‘Here is the line') finestre per grafici più piccoli e si
» subplot(222)
seleziona la finestra p-esima per il
» plot(t,y2),
grafico corrente.
title(‘Here is the parabola')
» subplot(223)
I grafici sono numerati lungo la
» plot(t,y3), prima riga, poi lungo la seconda e
title(‘Here is the exponential') così via.
» subplot(224)
» plot(t,y4),
title(‘Here is the absolute value')

113
Subplot

114
Example
subplot(133)
plot(t,y2),
hold on
plot(t,y1,'g.-'),
axis([0,3,-0.5,2])

subplot(131) subplot(132)
plot(t,y2,'b') plot(t,y2,'b')
hold on hold on
plot(t,y1,'r--') plot(t,y1,'k:')
axis([0,3,-0.5,2]) axis([0,3,-0.5,2])
115
Figure Tools

La figure ha una serie


di strumenti per
elaborare ancora il
grafico.

116
Figure Tools

La figure ha una serie


di strumenti per
elaborare ancora il
grafico.

I vari menù
consentono l’accesso a
vari strumenti.

117
Figure Tools

La figure ha una serie


di strumenti per
elaborare ancora il
grafico.

I vari menù
consentono l’accesso a
vari strumenti.

118
Figure Tools
Questa figura mostra una finestra grafica con tutti e 3 i tools grafici attivati.

119
Esportare un grafico
Esportare un grafico significa creare un file standard nel formato per
le immagini (come EPS o TIFF), che poi può essere importato in
altri documenti e applicazioni come word processors, pacchetti
software di graficazione, ecc.

Questo esempio esporta un grafico in un file EPS file con le seguenti


caratteristiche:
• la dimensione dell’immagine quando importata in un documento word deve
essere di 4 pollici (inches) di ampiezza (wide) e 3 inches in altezza.
• tutti i testi riportati nella figura devono avere un’ampiezza di 8 punti.

Specifica le dimensioni del grafico


Per scegliere le dimensioni, usare la finestra di dialogo Export Setup (selezionare
Export Setup dal File menu della figura). Poi selezionare 4 nella lista Width e 3
dalla lista Height .

120
Esportare un grafico

121
Esportare un grafico

Per scegliere la
dimensione del
carattere (font size)
dei testi del grafico,
selezionare Fonts
nella finestra di
dialogo Export
Setup - Properties.
Poi cliccare su Use
fixed font size e
fornire 8 nel
rettangolo.

122
Esportare un grafico
Selezionare il formato del File

Dopo aver finito le operazioni di scelta dei parametri per


l’esportazioni del grafico, cliccare il pulsante Export. Un
rettangolo di dialogo Save As si aprirà e permetterà di specificare
un nome per il file come pure di selezionare il formato del file.
Il menu a tendina di Save as type offre un numero di opzioni per
i formati del file. Per questo esempio, selezionare EPS (*.eps) dal
menu Save as type.
Si può poi importareil file salvato in ogni applicazione che
supporti il formato EPS per i files.

Si può anche usare il comando print per stampare le figure su una


stampante locale.
123
Grafici 3D
• plot3 la funzione plot3 visualizza un grafico tridimensionale di un
insieme di dati.

• mesh Crea una mesh.

• surf Creauna superficie 3-D ombreggiata.

● meshgrid la funzione meshgrid trasforma il dominio


specificato da un singolo vettore o da due vettori
in una matrice X e Y che verrà poi usata per
valutare una funzione di due variabili. Le righe di X
sono copie del vettore x e le colonne di Y sono
copie del vettore y.

124
plot3

>>t=0:0.1:10*pi;
>>x=exp(-t/20).*cos(t);
>>y=exp(-t/20).*sin(t);
>>z=t;
>>plot3(x,y,z);
>>title('Esempio di plot 3D');
>>xlabel('x');
>>ylabel('y');
>>zlabel('z');

125
mesh
>>x=linspace(0,2*pi,50); Crea una griglia di punti di valutazione a partire dai
>>y=linspace(0,pi,50); vettori x e y
>>[X,Y]=meshgrid(x,y);
>>Z=sin(X).*cos(Y); Notare l’uso del “.”
>>mesh(X,Y,Z);
>>title('Esempio di mesh (grafica wireframe)');
>>xlabel('x');
>>ylabel('y');
>>zlabel('z');

wireframe o wire frame model (lett. modello a fil di ferro ) indica un tipo di rappresentazione grafica di oggetti
tridimensionali. Con questo metodo vengono disegnati soltanto i bordi dell' oggetto, il quale di fatto resta trasparente al suo
interno (sembrando, appunto, costruito con fil di ferro).

126
surf
>>[X,Y]=meshgrid(-3:.2:3,-2:.2:2); Crea una griglia di punti di valutazione a
partire dai vettori -3:.2:3 e -2:.2:2
>>Z=exp(-(X.^2+Y.^2)/3);
Notare l’uso del “.”
>>surf(X,Y,Z);

>>title('Esempio di surf (grafica a faccette)');

>>xlabel('x');
>>ylabel('y');
>>zlabel('z');

127
Colormap e colorbar

surf(X,Y,Z)
colormap hsv
colorbar

surf(X,Y,Z)
colormap hsv
alpha(.4)

128
surf
surf(X,Y,Z,'FaceColor','red','EdgeColor','none')
camlight left;
lighting phong

129
Superficie da dati non uniformi
>>x=rand(100,1)*2*pi;
>>y=rand(100,1)*pi;
>>z=sin(x).*cos(y);
>>xlin=linspace(min(x),max(x),40);
>>ylin=linspace(min(y),max(y),40);
>>plot3(x,y,z,'.','MarkerSize',15);

>>[X,Y]=meshgrid(xlin,ylin); Interpolazione di dati(x,y,z) non uniformi:Visua-


>>Z=griddata(x,y,z,X,Y,'cubic'); lizza la funzione interpolante nei punti griglia
>>hold on;
>>mesh(X,Y,Z);
>>title('Esempio di mesh non uniforme');
>>xlabel('x');
>>ylabel('y');
>>zlabel('z');
>>grid on;

130
Superficie in forma parametrica
>>n=31;
>>theta=pi*(-n:2:n)/n;
>>phi=(pi/2)*(-n:2:n)'/n;
>>X=cos(phi)*cos(theta);
>>Y=cos(phi)*sin(theta);
>>Z=sin(phi)*ones(size(theta));
>>surf(X,Y,Z);
>>title('Esempio di surf in forma parametrica');
>>xlabel('x');
>>ylabel('y');
>>zlabel('z');
>>grid on;
>>axis square;

131
Manipolare la superficie
la figure toolbar e la camera toolbar permettono di esplorare
interattivamente il grafico 3-D. Si visualizza la camera toolbar
selezionando Camera Toolbar dal menu View della figura.
L’illustrazione sotto mostra entrambe le toolbars con il tool
Rotate 3D selezionato.

132
Esercitiamoci sui grafici

Seguendo il foglio dell’Esercitazione 3 realizzare script


MATLAB riguardanti grafici 2D e 3D.

133
Il modo migliore per
imparare MATLAB
è usarlo!

134

Potrebbero piacerti anche