Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione a Matlab/Octave
ngeles Martnez Calomardo
http://www.dmsa.unipd.it/acalomar/DIDATTICA/
angeles.martinez@unipd.it
Laurea Triennale Ing. Industriale
Meccanica (matricole dispari) e Aerospaziale
A.A. 20142015
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
1 / A.A.
42
20142
Matlab
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
2 / A.A.
42
20142
Matlab
Matlab pu essere utilizzato nellambito del calcolo numerico per imparare a
scrivere e ad eseguire programmi al calcolatore.
Matlab ampiamente utilizzato in svariate applicazioni ingegneristiche.
Alcuni esempi:
I
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
3 / A.A.
42
20142
Octave
Anche Octave un ambiente integrato per il calcolo scientifico e la
visualizzazione grafica come Matlab.
distribuito gratuitamente dalla GNU (si veda il sito www.octave.org).
Matlab e Octave presentano delle differenze ma sono sufficientemente
compatibili da permettere alla maggior parte di programmi Matlab di essere
eseguiti senza modifiche in ambiente Octave e viceversa.
Per avviare Octave in ambiente Unix basta digitare il comando
octave force-gui
seguito dal tasto di invio.
LE INFORMAZIONI CONTENUTE IN QUESTI LUCIDI SONO VALIDE
PER ENTRAMBI I PROGRAMMI
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
4 / A.A.
42
20142
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
5 / A.A.
42
20142
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
6 / A.A.
42
20142
Variabili e assegnazione
In Matlab/Octave non occorre dichiarare le variabili: lassegnazione coincide
con la dichiarazione.
a = 2/3
a =
0.66667
b = 3/2
b = 1.5000
a b
ans = 1
Esercizio
Assegnare alla variabile A il valore 1, e scrivere a dopo il prompt. Si osservi che A
ed a sono due variabili distinte.
Calcolo Numerico (Ingegneria Industriale)
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
7 / A.A.
42
20142
Variabili e assegnazione
Il comando who permette di sapere quali sono le variabili dellutente
attualmente in memoria.
Il comando whos ne mostra anche la dimensione e loccupazione di memoria
(numero di bytes).
whos
V a r i a b l e s in the c ur r e n t scope :
A t t r Name
==== ====
A
a
ans
b
Size
====
1 x1
1 x1
1 x1
1 x1
Bytes
Class
===== =====
8 double
8 double
8 double
8 double
T o t a l i s 4 e l e m e n t s u s i n g 32 b y t e s
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
8 / A.A.
42
20142
addizione
sottrazione
prodotto
divisione
elevamento a potenza
Funzione
sin
cos
tan
arcsin
arccos
arctan
exp
ln
log2
log10
|.|
function MATLAB
sin
cos
tan
asin
acos
atan
exp
log
log2
log10
abs
sqrt
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
9 / A.A.
42
20142
Listruzione format
Permette di modificare il formato di visualizzazione dei risultati ma non
modifica la precisione con cui i calcoli vengono eseguiti.
Tutti i calcoli vengono effettuati in Matlab/Octave utilizzando i numeri in
virgola mobile in doppia precisione, secondo lo standard IEEE-754r.
I principali formati di visualizzazione dei risultati si ottengono digitando help
format.
Dato il numero 1/7, alcuni formati comunemente usati sono
format
format
format
format
format
format
short
short e
short g
long
long e
long g
produce
produce
produce
produce
produce
produce
0.1429
1.4286e-01
0.14286
0.142857142857143
1.428571428571428e-01
0.142857142857143
Gli stessi formati sono disponibili in Octave e forniscono risultati con lievi
discrepanze.
Calcolo Numerico (Ingegneria Industriale)
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
10 / A.A.
42
20142
Matrici e vettori
Le variabili per Matlab/Octave hanno una struttura di tipo matriciale.
I
I
I
si produce
A =
1
4
7
2
5
8
3
6
9
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
11 / A.A.
42
20142
Matrici e vettori
Lelemento in riga i e colonna j di A si accede con A(i, j). Per la matrice A
dellesempio precedente
>> A ( 2 , 3 )
ans = 6
Esercizio
Costruire una matrice 2 3 con i primi sei numeri interi come coefficienti.
Azzerare gli elementi A(1, 1) e A(2, 2).
Soluzione.
>> A = [ 1 2 3 ; 4 5 6 ]
A =
1
2
3
4
5
6
>> A ( 1 , 1 ) = 0 ;
>> A ( 2 , 2 ) = 0 ;
>> A
A =
0
4
2
0
3
6
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
12 / A.A.
42
20142
1
3
6
1
1
7
>> M=A ( 2 : 3 , : )
M =
2
4
3
6
1
7
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
13 / A.A.
42
20142
Matrici
Matlab allarga una matrice quanto basta per sistemare un elemento dato.
>> A=[1 1 1 ; 2 3 1 ; 4 6 7 ]
A =
1
2
4
1
3
6
1
1
7
>> A ( 5 , 5 ) =2
A =
1
1
2
3
4 6
0
0
0
0
>> A=A ( 1 : 3
A =
1
0
1
0
7
0
0
0
0
0
,1:3)
0
0
0
0
2
1
1
1
2
3
1
4 6
7
>> A ( 3 , 6 ) =9
A =
1
2
4
1
3
6
1
1
7
0
0
0
0
0
0
0
0
9
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
14 / A.A.
42
20142
Esercizio
Creare una matrice quadrata A di ordine 4 con tutti gli elementi uguali a 1 e
calcolarne il determinante.
Che cosa succede se proviamo a calcolare linversa di A?
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
15 / A.A.
42
20142
>> A = o n e s ( 4 )
A =
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
>> d e t (A)
ans = 0
>> i n v (A)
warning : i n v e r s e : m a t r i x s i n g u l a r to machine p r e c i s i o n , rcond = 0
ans =
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
Inf
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
16 / A.A.
42
20142
C = A
C = A+B
C = A-B
C = A*B
C = A.*B
Esempio:
>> A = [ 2 1; 3 4 ; 2 7 ]
A =
2 1
3
4
2
7
>> B = A
B =
2
3 2
1
4
7
Calcolo Numerico (Ingegneria Industriale)
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
17 / A.A.
42
20142
18
29
14
0
6
8
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
18 / A.A.
42
20142
Vettori
Matlab/Octave tratta i vettori come casi particolari di matrici.
Per memorizzare il vettore riga x = [1, 2, 3, 4, 5] occorre digitare
x = [1 2 3 4 5 ] ;
mentre
y = [ 2; 4 ;
12];
zeros(1,n) crea un vettore riga di dimensione n con tutti gli elementi nulli;
zeros(n,1) idem per vettori colonna.
Per creare un vettore riga (colonna) con elementi uguali ad 1 usiamo
ones(1,n) (ones(n,1)).
Calcolo Numerico (Ingegneria Industriale)
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
19 / A.A.
42
20142
Vettori
La componente i-esima di un vettore si identifica con x(i). Per esempio la
terza componente del precedente vettore y sar:
y (3)
ans =
12
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
20 / A.A.
42
20142
z = u+v
z = u-v
z = u.*v
Esercizio
Si definisca il vettore colonna u di componenti (1, 2) e il vettore colonna v di
componenti (3, 4); si calcoli u + v, u v, il prodotto scalare di u per v e il prodotto
componente a componente.
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
21 / A.A.
42
20142
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
22 / A.A.
42
20142
>> v = [ 5 : 1 : 1 ]
v =
5
4
3
2
>> w = [ 0 : 0 . 2 : 1 ]
w =
0.00000
0.20000
ad
Crea g l i e l e m e n t i
v e t t o r e ( i ) = i n i z i o + ( i 1) i n c r e m e n t o
f i n o a quando
v e t t o r e ( i ) <= f i n e
0.40000
0.60000
0.80000
1.00000
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
23 / A.A.
42
20142
2.50000
5.00000
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
24 / A.A.
42
20142
2.00000
1.50000
1.00000
0.50000
1.50000
1.00000
0.50000
>> u = l i n s p a c e ( 3 , 0 , 7 )
u =
3.00000
2.50000
0.00000
2.00000
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
25 / A.A.
42
20142
0.0000
0.5000
1.0000
0.00000
0.25000
1.00000
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
26 / A.A.
42
20142
Esercizio
Calcolare il seno e il coseno dei seguenti angoli: {0, 2 , , 3
2 , 2}.
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
27 / A.A.
42
20142
script
function
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
28 / A.A.
42
20142
Il costrutto for
La sintassi del costrutto for la seguente:
for k = vettore
istruzioni
end
I comandi che si trovano tra for e end sono eseguiti per tutti i valori di k
che sono nel vettore.
Esempio: calcolare la somma dei primi 10 numeri interi positivi usando un
ciclo for.
n =10;
somm=0
f o r k =1: n
somm=somm+k
end
Esercizio
Si scriva il programma su un file somma.m e lo si lanci dalla shell di
Matlab/Octave con il comando somma.
Calcolo Numerico (Ingegneria Industriale)
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
29 / A.A.
42
20142
Esercizio
Si scriva il programma su un file mathilb.m e lo si lanci dalla shell di
Matlab/Octave con il comando mathilb.
Definire le matrici scrivendole componente a componente va bene per matrici
di piccole dimensioni, essendo poche le componenti da scrivere manualmente.
Il metodo basto sul ciclo for potrebbe essere adatto a matrici strutturate
(come appunto la matrice di Hilbert).
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
30 / A.A.
42
20142
Operatori logici
&&
|
AND
OR
NOT
Operatori di relazione
==
=
<
>
<=
>=
uguale
diverso
minore
maggiore
minore o uguale
maggiore o uguale
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
31 / A.A.
42
20142
Il costrutto while
Per
il ciclo while la sintassi data da:
while espressione logica
istruzioni
end
Questo ciclo usato quando le istruzioni devono essere ripetute fino a quando
rimane vera lespressione logica (numero di volte indeterminato a priori).
Esempio:
f =1; j =1;
w h i l e j < 10
f=f j ;
j=j +1;
end
Esercizio
Calcolare la somma dei primi n numeri interi positivi utilizzando un ciclo while.
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
32 / A.A.
42
20142
Soluzione dellesercizio
n =10;
somm=0
k =1;
while
k <=n
somm=somm+k
k=k +1;
end
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
33 / A.A.
42
20142
x = 1;
d i f = 100;
w h i l e d i f > 1 e 8
xnew = c o s ( x ) ;
d i f = a b s ( xnewx ) ;
x = xnew ;
end
xnew
0.739085136646572
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
34 / A.A.
42
20142
Il costrutto if-else-end
Esempio
if espressione logica
istruzioni
end
if a > b
maxval = a
end
#
Esempio
if espressione logica
istruzioni
else
istruzioni
end
"
if espressione logica 1
istruzioni
elseif espressione logica 2
istruzioni
else
istruzioni
end
if x > 0
a = sqrt (x)
else
a = 0
end
!
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
35 / A.A.
42
20142
Per k = 5 si avrebbe:
a =
2
0
1
0
0
0
2
0
1
0
1
0
2
0
1
0
1
0
2
0
0
0
1
0
2
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
36 / A.A.
42
20142
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
37 / A.A.
42
20142
. . . , o u t n ] = nomefun ( i n 1 ,
. . . , inm )
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
38 / A.A.
42
20142
Programmi in Matlab/Octave
Esempio
f u n c t i o n [ x1 , x2 , e r r ] = r a d i c i ( a , b , c )
err = 0;
d e l t a = b^24a c ;
i f delta < 0
e r r = 1 ; x1 =0; x2 =0;
return
else
x1 = (b s q r t ( d e l t a ) ) / ( 2 a ) ;
x2 = (b+s q r t ( d e l t a ) ) / ( 2 a ) ;
end
file radici.m
a =1; b=3; c = 2 ;
[ x1 , x2 , e r r ] = r a d i c i ( a , b , c )
file scriptradici.m
>> s c r i p t r a d i c i
x1 = 1
x2 = 2
err = 0
>> d e l t a
e r r o r : d e l t a u n d e f i n e d n e a r l i n e 99 column 1
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
39 / A.A.
42
20142
11
13
15
17
19
>> d i s p ( Q u e s t a e una s t r i n g a ) ;
Q u e s t a e una s t r i n g a
2 . 3 0 0 0 e+01
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
40 / A.A.
42
20142
Significato
formato decimale (virgola fissa)
notazione esponenziale
notazione per interi con segno
la notazione pi compatta tra %f ed %e
stringa di caratteri
avanzamento di linea
tabulazione
backspace
%6.3f
2.000
0.020
200.000
1.414
%6.0f
2
2
200
1
%6.3e
2.000e+000
2.000e002
2.000e+002
1.414e+000
%6.3g
2
0.02
200
1.41
%6.3d
002
000
200
001
%d
2
0
200
1
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
41 / A.A.
42
20142
il
il
numero %5 f \ n , x )
numero 0 . 0 0 1 0 0 0
>> f p r i n t f ( \ n Ho s c r i t t o
Ho s c r i t t o
il
il
numero %5.3 f \ n , x )
numero 0 . 0 0 1
>> f p r i n t f ( \ n Ho s c r i t t o
Ho s c r i t t o i l numero
>> f p r i n t f ( \ n Ho s c r i t t o
il
numero %15.3 f \ n , x )
il
0.001
numero %5.1 f \ n , x )
Ho s c r i t t o i l numero
0.0
>> f p r i n t f ( \ n Ho s c r i t t o i l numero %5.1 e \ n , x )
Ho s c r i t t o i l numero 1 . 0 e 03
>> f p r i n t f ( \ n Ho s c r i t t o i l numero %5.3E \ n , x )
Ho s c r i t t o i l numero 1 . 0 0 0 E03
>> f p r i n t f ( \ n Ho s c r i t t o i l numero %5.3 g \ n , x )
Ho s c r i t t o
il
numero 0 . 0 0 1
(Laurea
Introduzione
Triennale
a Matlab/Octave
Ing. Industriale Meccanica
ngeles
(matricole
Martnez
dispari)
Calomardo
e Aerospaziale
42 / A.A.
42
20142