Introduzione a Matlab/Octave
ngeles Martnez Calomardo
http://www.dmsa.unipd.it/acalomar/DIDATTICA/
angeles.martinez@unipd.it
Laurea in Matematica
A.A. 20142015
Introduzione a Matlab/Octave
1 / 59
Matlab
Introduzione a Matlab/Octave
2 / 59
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 qtoctave
seguito dal tasto di invio.
LE INFORMAZIONI CONTENUTE IN QUESTI LUCIDI SONO VALIDE
PER ENTRAMBI I PROGRAMMI
Introduzione a Matlab/Octave
3 / 59
Introduzione a Matlab/Octave
4 / 59
Introduzione a Matlab/Octave
5 / 59
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 (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
6 / 59
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
Introduzione a Matlab/Octave
7 / 59
addizione
sottrazione
prodotto
divisione
elevamento a potenza
Funzione
sin
cos
tan
arcsin
arccos
arctan
exp
ln
log2
log10
|.|
Introduzione a Matlab/Octave
function MATLAB
sin
cos
tan
asin
acos
atan
exp
log
log2
log10
abs
sqrt
8 / 59
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 (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
9 / 59
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
Introduzione a Matlab/Octave
10 / 59
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
Introduzione a Matlab/Octave
11 / 59
1
3
6
1
1
7
>> M=A ( 2 : 3 , : )
M =
2
4
3
6
1
7
Introduzione a Matlab/Octave
12 / 59
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
Introduzione a Matlab/Octave
13 / 59
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?
Introduzione a Matlab/Octave
14 / 59
>> 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
Introduzione a Matlab/Octave
15 / 59
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 (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
16 / 59
18
29
14
0
6
8
Introduzione a Matlab/Octave
17 / 59
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 (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
18 / 59
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
Introduzione a Matlab/Octave
19 / 59
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.
Introduzione a Matlab/Octave
20 / 59
Esercizio
1 3 5
1
Sia A = 2 4 6 , u = 1. Calcolare w = A u.
1 3 0
2
Soluzione:
>> A = [ 1 3 5 ; 2 4 6 ; 1 3 0 ] ;
>> u = [ 1 1 2 ]
u =
1
1
2
>> w = Au
w =
14
18
2
Introduzione a Matlab/Octave
21 / 59
R
17
1 2
x1
=
Ad esempio, per risolvere il sistema
x2
39
3 4
scriveremo
>> A=[1 2 ; 3 4 ]
A =
1
2
3
4
>> b = [ 1 7 ; 3 9 ]
b =
17
39
>> x=A\ b
x =
5.0000
6.0000
>>
Attenzione:
x=A/ b
? ? ? E r r o r u s i n g ==> m r d i v i d e
M a t r i x d i m e n s i o n s must a g r e e .
Calcolo Numerico (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
22 / 59
>> 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
Introduzione a Matlab/Octave
0.80000
1.00000
23 / 59
2.50000
Introduzione a Matlab/Octave
5.00000
ngeles Martnez Calomardo
24 / 59
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
Introduzione a Matlab/Octave
25 / 59
0.0000
0.5000
1.0000
0.00000
0.25000
1.00000
Introduzione a Matlab/Octave
26 / 59
Esercizio
Calcolare il seno e il coseno dei seguenti angoli: {0, 2 , , 3
2 , 2}.
Introduzione a Matlab/Octave
27 / 59
Definizione di funzioni
Matlab/Octave mette a disposizione le funzioni matematiche predefinite viste in
precedenza, ma consente allutente di definire le proprie funzioni.
Ci sono diversi modi di definire una funzione:
1
Introduzione a Matlab/Octave
28 / 59
Valutazione
f =0 x. 3 log(x)0
y = eval(f)
f = inline(0 x. 3 log(x)0 )
y = f(x)
y = feval(f,x)
f = @(x)[x. 3 log(x)]
y = f(x)
y = feval(f,x)
Introduzione a Matlab/Octave
29 / 59
10
13
>> e v a l ( f )
ans =
1.0000
62.6137
341.0541
997.6974
2194.4351
>> f ( x )
>> e r r o r : A( I ) : I n d e x e x c e e d s m a t r i x d i m e n s i o n .
>> f= i n l i n e ( x . ^ 3 l o g ( x ) ) ;
>> f ( x )
ans =
1.0000
62.6137
341.0541
997.6974
2194.4351
62.6137
341.0541
997.6974
2194.4351
>> f e v a l ( f , x )
ans =
1.0000
Introduzione a Matlab/Octave
30 / 59
Esempio:
>> f= c o s ( x ) ;
>> e z p l o t ( f )
0.5
-0.5
Crea il grafico:
-1
-6
-4
-2
Introduzione a Matlab/Octave
31 / 59
Esempio:
>> e z p l o t ( x . ^ 2 , [ 2 , 2 ] )
Esempio:
>> e z p l o t ( x . ^ 2 , [ 2 , 2 , 1 , 1 ] )
Calcolo Numerico (LTM) (A.A.20142015)
Introduzione a Matlab/Octave
32 / 59
l i m s =[ p i , p i ] ;
f= s i n ( x ) ;
fplot ( f , lims )
a x i s ([ p i p i 1 1 ] )
1
sin(x)
0.5
-0.5
-1
-3
-2
-1
Introduzione a Matlab/Octave
33 / 59
1
1+x2
>> f= 1 . / ( 1 + x . ^ 2 )
f = 1./(1+ x . ^ 2 )
>> l i m s = [ 5 , 5 ] ;
>> f p l o t ( f , l i m s )
>> f 2= i n l i n e ( 1 . / ( 1 + x . ^ 2 ) )
f2 =
f ( x ) = 1./(1+ x . ^ 2 )
>> f p l o t ( f , l i m s )
>> f p l o t (@( x ) 1 . / ( 1 + x . ^ 2 ) , l i m s )
Introduzione a Matlab/Octave
34 / 59
Introduzione a Matlab/Octave
35 / 59
0.2
0.15
0.1
0.05
0
1
1.2
1.4
1.6
Introduzione a Matlab/Octave
1.8
36 / 59
-1
-2
-0.5
0.5
1.5
asse x
Introduzione a Matlab/Octave
37 / 59
f(x)=exp(3x)+2x22
3
2.5
1.5
0.5
0.5
1.5
2
0.5
0.5
asse x
Introduzione a Matlab/Octave
1.5
38 / 59
-1
-2
-0.5
0.5
1.5
asse x
Introduzione a Matlab/Octave
39 / 59
plot ([ a b ] ,[0
0 ] , k ) ; h o l d o f f ;
5 x exp(x)
5
10
15
20
25
30
35
2.5
1.5
1
x
0.5
Introduzione a Matlab/Octave
0.5
40 / 59
Introduzione a Matlab/Octave
41 / 59
plot
semilogy
-t
10
10
-2
0.8
10-4
10-6
0.6
10
0.4
-8
10-10
10-12
0.2
0
0
10
15
20
10
-14
10
-16
Introduzione a Matlab/Octave
10
15
20
42 / 59
script
function
Introduzione a Matlab/Octave
43 / 59
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 nellvettore.
Esempio: calcolare la somma dei primi 10 numeri interi positivi usando un
ciclo for.
somm=0;
f o r n =1:10
somm=somm+n ;
end
Introduzione a Matlab/Octave
44 / 59
Creazione di Matrici
possibile definire una matrice A mediante un ciclo for:
f o r s =1:3
f o r t =1:3
A( s , t ) =3( s 1)+t ;
end
end
Esercizio
Si scriva il programma su un file ciclofor.m e lo si lanci dalla shell di
Matlab/Octave con il comando ciclofor.
Definire le matrici scrivendole componente a componente va bene per matrici
di piccole dimensioni.
Il metodo basto sul ciclo for pi adatto a matrici strutturate (come, ad
esempio, la matrice di Hilbert che ha componenti ai, j = (i + j 1)1 ).
Introduzione a Matlab/Octave
45 / 59
Operatori logici
&&
||
AND
OR
NOT
Operatori di relazione
==
=
<
>
<=
>=
uguale
diverso
minore
maggiore
minore o uguale
maggiore o uguale
Introduzione a Matlab/Octave
46 / 59
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.
Introduzione a Matlab/Octave
47 / 59
0.739085136646572
Introduzione a Matlab/Octave
48 / 59
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 x > 0
a = sqrt (x)
else
a = 0
end
if espressione logica 1
istruzioni
elseif espressione logica 2
istruzioni
else
istruzioni
end
Introduzione a Matlab/Octave
49 / 59
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
Introduzione a Matlab/Octave
50 / 59
Introduzione a Matlab/Octave
51 / 59
. . . , o u t n ] = nomefun ( i n 1 ,
. . . , inm )
Introduzione a Matlab/Octave
52 / 59
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
Introduzione a Matlab/Octave
53 / 59
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
Pi variabili numeriche
>> d i s p ( [ v a l , e r r , i t e r ] )
2 . 1 0 9 9 e+00
1 . 0 0 0 0 e 10
2 . 3 0 0 0 e+01
Introduzione a Matlab/Octave
54 / 59
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
Introduzione a Matlab/Octave
%6.3g
2
0.02
200
1.41
%6.3d
002
000
200
001
%d
2
0
200
1
55 / 59
t f i n =c p u t i m e ; cpu=t f i n t
Esercizio
Si crei una matrice quadrata random A di dimensione variabile da n = 200 a
n = 8000 (con passo 200), e un vettore v lungo n. Misurare il tempo di esecuzione
del prodotto A v.
Introduzione a Matlab/Octave
56 / 59
Introduzione a Matlab/Octave
57 / 59
0.2
0.15
0.1
0.05
0
0
1000
2000
3000
4000
5000
6000
Introduzione a Matlab/Octave
7000
8000
58 / 59
Introduzione a Matlab/Octave
59 / 59