...

Introduzione a MATLAB

by user

on
Category: Documents
18

views

Report

Comments

Transcript

Introduzione a MATLAB
Laboratorio del Dipartimento di
Metodi e Modelli Matematici per le Scienze Applicate
A.A. 2007/2008
Introduzione a MATLAB
INTRODUZIONE A MATLAB
1
Indice
1 Introduzione
1.1 Caratteristiche di MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Accesso a MATLAB da windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Regole Generali in MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
2
3
2 Primi passi
2.1 Operazioni di base . . . . . . . . . . . . .
2.2 Formato di output: il comando format . .
2.3 Il punto e virgola ; sulla riga di comando .
2.4 Costanti e Variabili . . . . . . . . . . . . .
4
4
5
5
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Salvare e leggere dati in/da un file
7
4 Matrici e vettori
4.1 Elementi di matrici e di vettori . . . . . . .
4.2 Funzioni per la costruzione di matrici . . .
4.3 Notazione dei due punti : . . . . . . . . . .
4.4 Matrici estratte e matrici a blocchi . . . . .
4.4.1 Matrici estratte . . . . . . . . . . . .
4.4.2 Matrici a Blocchi . . . . . . . . . . .
4.5 Operazioni Matriciali e Puntuali . . . . . .
4.6 Risoluzione di Sistemi di Equazioni Lineari
4.7 Altre operazioni sulle matrici . . . . . . . .
4.7.1 Operazioni sulle righe e sulle colonne
5 Grafici
5.1 Grafici in 2D . . . . .
5.2 Grafici in 2D multipli
5.3 Cambiare i grafici . . .
5.4 Grafici in 3D . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
11
12
13
13
14
15
16
17
18
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
21
21
23
24
6 Programmazione
6.1 Regole Generali . . . . . . . . . . . . . . . . . .
6.2 Tipi di m-files . . . . . . . . . . . . . . . . . . .
6.2.1 Files di comandi . . . . . . . . . . . . .
6.2.2 Files di funzioni . . . . . . . . . . . . .
6.3 Strutture di controllo del flusso del programma
6.3.1 Istruzione for . . . . . . . . . . . . . .
6.3.2 Istruzione if . . . . . . . . . . . . . . .
6.3.3 Istruzione while . . . . . . . . . . . . .
6.4 Operatori logici e operatori relazionali . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
25
26
27
29
29
30
30
31
7 Bibliografia
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
1
INTRODUZIONE
1
Introduzione
MATLAB
1.1
1
=⇒
MATrix LABoratory
Caratteristiche di MATLAB
• Programma di Calcolo Numerico e Calcolo Simbolico.
– Si può considerare come una calcolatrice programmabile molto
potente.
• Programma molto popolare tra studenti, ingegneri, tecnici e
ricercatori per le sue caratteristiche:
– Programma interattivo.
– Capacità Grafiche potenti e semplici.
– Possiede un gran numero di Funzioni di tutti i tipi.
– Linguaggio di programmazione di alto livello simile a
Fortran, C, Pascal o Basic, però più facile da imparare.
• Esistono versioni del programma MATLAB da piccoli PC fino a
supercomputers.
1
INTRODUZIONE
1.2
2
Accesso a MATLAB da windows
1. Cliccare due volte con il bottone sinistro del mouse sull’icona di
Matlab nel Desktop.
2. Apparirà una finestra con il prompt :
>>
3. Creare una directory sulla penna USB (che supponiamo in E)
>> mkdir E:\nome_directory
>> cd E:\nome_ directory
1
INTRODUZIONE
1.3
3
Regole Generali in MATLAB
• MATLAB distingue tra maiuscole e minuscole
>> min(2,3)
NON è lo stesso di:
>> MIN(2,3)
% errore
• Gli spazi HANNO significato in matlab =⇒ separano elementi
distinti in una matrice;
>> 12
>> 10e-12
non è lo stesso di
>> 1 2
>> 10 e-12
% errore
% errore
• Le PARENTESI TONDE ( ) e le PARENTESI QUADRATE [ ] hanno significati diversi.
• Le Frecce: ↑ y ↓ permettono di recuperare comandi.
• Le Frecce: ← y → permettono di correggere gli errori.
• Per avere AIUTO nell’ambiente MATLAB si utilizza il comando
help:
>> help help
>> help for
>> help plot
2
PRIMI PASSI
2
4
Primi passi
2.1
Operazioni di base
+
*
^
\
/
addizione
sottrazione
moltiplicazione
potenza
divisione a sinistra
divisione a destra
exp
sin
asin
abs
round
log
cos
acos
sqrt
floor
log10
tan
atan
sign
ceil
Esempi
'
>> 2 + 3
ans =
5
>> 2 * 2
ans =
4
>> 2/6
ans =
0.3333
>> 2\6
ans =
3
$
>> 3*(log10(14.7) - 4/6)/atan(2.3)
ans =
1.2940
>> 1+2i
ans =
1.0000+2.0000i
&
>> abs(4+3j)
ans =
5
%
2
PRIMI PASSI
2.2
5
Formato di output: il comando format
Possiamo cambiare il modo in cui i risultati numerici sono presentati
usando il comando format.
'
>> pi
ans =
3.1416
$
>> format long
>> pi
ans =
3.14159265358979
>> format short e
>> pi
ans =
3.1416e+00
>> format long e
>> pi
ans =
3.141592643589793e+00
>> format bank
>> pi
ans =
3.14
>> format
>> pi
ans =
3.1416
&
2.3
Il punto e virgola ; sulla riga di comando
Sulla riga di comando si usa il punto e virgola ; alla fine di una
istruzione affichè MATLAB non scriva sullo schermo il risultato corrispondente. Questo NON vuol dire che l’operazione non sia stata
eseguita.
%
2
PRIMI PASSI
2.4
6
Costanti e Variabili
Regole
• Possiamo definire costanti e variabili mediante nomi.
• Il nome consiste in una lettera seguita da altre lettere, cifre o
sottolinee, fino a un massimo di 31 caratteri in tutto.
• MATLAB distigue tra MAIUSCOLE e minuscole.
• Le variabili si possono cancellare con clear nome.
Esempi
'
$
>> a = 2; A = 3;
>> alfa = 30; conf = pi/180;
>> sin(conf*alfa+A*a)
ans =
0.2381
>> ans^2
ans =
0.0567
&
Se non diamo un nome a una espressione si crea automaticamente la
variabile ans con cui si possono eseguire operazioni posteriormente.
%
3
3
SALVARE E LEGGERE DATI IN/DA UN FILE
7
Salvare e leggere dati in/da un file
• Il comando
save fname1 x y z
salva le variabili x, y e z in un file (binario) di nome fname1.mat
(MAT-files).
• Il comando
load fname2 a b
legge le variabili a e b da un file (binario) di nome fname2.mat. In
fname2.mat potrebbero essere presenti altre variabili oltre ad a e b.
• È possibile anche salvare/leggere dati in/da files ASCII: si veda al
proposito l’opzione -ascii dei comandi load e save.
Esempio
'
>> x = 0:pi/5:2*pi;
>> y = sin(x.^2);
>> t = [ x’ y’ ];
>> save io.mat t
>> clear t
>> x = t(:,1);
??? Undefined function or variable ’t’.
>> load io
>> x = t(:,1);
>> y = t(:,2);
>> plot(x,y)
&
$
%
3
SALVARE E LEGGERE DATI IN/DA UN FILE
8
Il comando diary
Il comando
diary nomefile
si usa per creare un diario della sessione di MATLAB nel file (ASCII)
nomefile. A partire da questo comando fino alla introduzione sulla riga
di comando del comando
diary off
tutti i comandi che eseguiamo, cosı̀ come i risultati che fornisce MATLAB
(salvo i grafici) saranno salvati nel file nomefile. Dopo, e’ possibile aprire
tale file e modificarlo con un qualsiasi editor di testo.
4
4
MATRICI E VETTORI
9
Matrici e vettori
Matrice: Collezione di numeri ordinati per file
e per colonne.
• Le matrici si definiscono con parentesi quadrate [ ].
• Gli elementi di una stessa riga si separano con virgole o spazi.
• Per indicare la fine di una riga e l’inizio della seguente si usa il
punto e virgola.
• Un vettore riga di n elementi è una matrice 1 × n.
• Un vettore colonna di n elementi è una matrice n × 1.
• Uno scalare è una matrice 1 × 1.
'
>> A = [ 1 2 3; 4 5 6; 7 8 9 ]
A =
1
4
7
2
5
8
$
3
6
9
>> v1=[ 1, 2, 3, 4 ]
v1=
&1
2
3
4
%
4
MATRICI E VETTORI
10
'
$
>> v2=[ 1; 2; 3 ]
v2 =
1
2
3
>> size(A)
ans =
3
3
>> size(v1)
ans =
1
4
>> size(v2)
ans =
3
1
>> length(v1)
ans =
4
&
4.1
%
Elementi di matrici e di vettori
• Per estrarre l’elemento Aij da una matrice A si scrive
A(i,j).
• Per estrarre l’elemento vk di un vettore v si scrive v(k).
'
>> A(2,3)
ans =
6
&
>> v1(2)
ans =
2
$
%
4
MATRICI E VETTORI
4.2
11
Funzioni per la costruzione di matrici
eye(n)
zeros(m,n)
ones(m,n)
diag(v)
rand(m,n)
matrice identità di dimensioni n × n
matrice di zeri di dimensioni m × n
matrice di 1 di dimensioni m × n
matrice diagonale con diagonale {vk }k=1...n
matrice di numeri random di dimensioni m × n
Esempi
$
'
>> a=eye(2)
a =
1
0
0
1
>> b=zeros(2,5)
b =
0
0
0
0
0
0
0
0
0
0
>> c=rand(2,2)
c =
0.0579
0.8132
0.3529
0.0099
>> d=diag([-1, 1])
d =
-1
0
0
1
&
%
4
MATRICI E VETTORI
4.3
12
Notazione dei due punti :
L’operatore : è uno dei più importanti in MATLAB. Appare in diversi
contesti:
• Per creare una riga di elementi equidistanti:
>> v1= 1:10
v1 =
1
2
3
4
>> v2= 100:-7:50
v2 =
100
93
86
5
79
>> v3= 0:pi/4:pi
v3 =
0
0.7854
1.5708
6
7
65
8
58
2.3562
9
10
51
3.1416
• Per estrarre la riga i–esima di una matrice A si scrive
A(i,:).
• Per estrarre la colonna j–esima di una matrice A si scrive
A(:,j).
• Per eliminare la riga (colonna) i–esima di una matriz A si
scrive A(i,:)=[] (A(:,i)=[]).
• Per scrivere una matrice A di dimensioni m×n come un vettore
colonna di mn elementi si scrive A(:)
4
MATRICI E VETTORI
4.4
13
Matrici estratte e matrici a blocchi
4.4.1
Matrici estratte
• Il comando
A([i1, i2, ..., ir ], [j1, j2, ..., js])
estrae la matrice formata dalle righe i1, i2,. . ., ir e le colonne j1,
j2,. . ., js della matrice A.
• Il comando A([i1, i2, ..., ir ],:) estrae la matrice formata dalle
righe i1, i2,. . ., ir della matrice A.
• Il comando A(:,[j1, j2, ..., js]) estrae la matrice formata dalle
colonne j1, j2,. . ., js della matrice A.
'
>> A = [1:2:5
A =
1.0000
1.0000
1.0000
; 1:4:9 ; 1:0.1:1.2]
3.0000
5.0000
1.1000
>> B=A(1:2,[2 3])
B =
3
5
5
9
&
$
5.0000
9.0000
1.2000
>> C=A([2 1],:)
C =
1
5
1
3
9
5
%
4
MATRICI E VETTORI
4.4.2
14
Matrici a Blocchi
Supponiamo di avere una matrice A di dimensioni m × n definita a
blocchi, per esempio,
A11 A12
,
A=
A21 A22
dove A11, A12, A21 y A22 sono blocchi di dimensioni p × r, p × s, q × r
e q × s rispettivamente, tali che p + q = m e r + s = n. Supponiamo
anche di aver già definito questi blocchi in MATLAB e di averli salvati
nelle variabili A11, A12, A21 e A22 rispettivamente. Allora, possiamo
scrivere la matrice A come
>> A=[ A11, A12; A21, A22 ];
Esempi
'
>> A11 = [ 1 2; 3 4]; A12 = eye(2);
$
>> A21 = [ -1 0; 0 -1]; A22=ones(2);
>> A = [ A11
A =
1
2
3
4
-1
0
0
-1
&
A12; A21 A22 ]
1
0
1
1
0
1
1
1
%
4
MATRICI E VETTORI
4.5
15
Operazioni Matriciali e Puntuali
Operatori Matriciali
+ somma
− differenza
∗ moltiplicazione
/ divisione a destra
\ divisione a sinistra
ˆ potenza
’ trasposta
Operatori Puntuali
+ somma
− differenza
.∗ moltiplicazione
./ divisione a destra
.\ divisione a sinistra
.ˆ potenza
• Gli operatori matriciali sono quelli definiti in Algebra
Lineare.
• Gli operatori puntuali agiscono elemento per elemento.
Operano tra matrici con le stesse dimensioni. Il risultato è
un altra matrice della stessa grandezza.
• Le funzioni di MATLAB (sin, cos, tan, exp, log, sqrt,
abs, ...) quando applicate ad una matrice operano elemento
per elemento.
4
MATRICI E VETTORI
4.6
A
16
Risoluzione di Sistemi di Equazioni Lineari
Matrice Quadrata n × n. (e invertibile!)
x=A\b =⇒ Soluzione di A ∗ x = b (x e b vettori colonna)
x=b/A =⇒ Soluzione di x ∗ A = b (x e b vettori riga)
'
>> A = [ 1, 3, 0; -1, 2, 1; 2, 5, 4 ];
$
>> b = [ 7; 3 ; 12 ];
>> x = A \ b
x =
1
2
0
&
%
4
MATRICI E VETTORI
4.7
17
Altre operazioni sulle matrici
inv(A)
pinv(A)
det(A)
rank(A)
[n,m] = size(A)
tril(A)
triu(A)
trace(A)
null(A)
orth(A)
[L,U,P] = lu(A)
R=chol(A)
[S,D] = eig(A)
poly(A)
[U,T]=schur(A)
[Q,R] = qr(A)
[U,S,V] = svd(A)
norm(A,p)
norm(A,inf)
norm(A,’fro’)
cond(A,p)
inversa della matrice quadrata A
pseudoinversa (Moore-Penrose) di A
determinante della matrice quadrata A
rango della matrice A
dimensioni della matrice A
parte triangolare inferiore di A
parte triangolare superiore di A
traccia della matrice A
base ortogonale del nucleo di A
base ortogonale della immagine di A
fattorizzazione LU di A: P*A = L*U
fattorizzazione Cholesky di A: A = R’*R
autovettori/autovalori di A: A*S = S*D
coefficienti del polinomio caratteristico
fattorizzazione Schur di A: A = U’*T*U
fattorizzazione QR di A: Q*R = A
SVD de A: U*S*V’ = A
norma p=1,2 de A
norma ∞ de A
norma di Frobenius di A
fattore di condizionamiento in norma p di A
4
MATRICI E VETTORI
4.7.1
18
Operazioni sulle righe e sulle colonne
• Per scambiare le righe i–esima e j–esima di una matrice A
si scrive
>> A([i j],:) = A([j i],:);
• Per scambiare le colonne i–esima e j–esima di una matrice
A si scrive
>> A(:,[i j]) = A(:,[j i]);
• Per inserire una riga vr (vettore riga) tra le righe k–esima e
(k + 1)–esima di una matrice A m × n si scrive
>> A = [ A(1:k,:); vf; A(k+1:m,:)];
• Per inserire una colonna vc (vettore colonna) tra la colonna
kesima e (k + 1)–esima di una matrice A m×n si scrive
>> A = [ A(:,1:k), vc, A(:,k+1:n)];
4
MATRICI E VETTORI
19
Esempi con vettori
'
$
&
%
>> a = [1 2]; b = [3 4];
>> a+b
>> a-b
>> a-1
>> b-2
>> 3*a
>> a/2
>> c = a*b
??? Error using ==> *
Inner matrix dimensions must agree.
>> c = a.*b
c =
3
8
>> d = a*b’
d =
11
Esercizi
Definire due vettori riga a e b di 3 elementi.
1. Confronta
a.ˆb
2. Confronta
a\b
3. Confronta
a*b’
aˆb
a/b
b’*a
a.\b
a./b
4
MATRICI E VETTORI
20
Esempi con matrici
'
$
>> A = [ 1 2; 3 4];
>> B = [ 5 6; 7 8];
>> C = A*B
C =
19
22
43
50
>> D = A.*B
D =
5
12
21
32
>> E = B.^A
D =
5
36
343 4096
>> F = A.^3
F =
1
8
27
64
>> G = [ 0 pi/6; pi/2 pi];
>> H = sin(G)
H =
0.0000
0.5000
1.0000
0.0000
&
Esercizi
Definire una matrice A 2×2 e un vettore colonna x di 2 elementi.
1. Confronta
2. Calcola
3. Confronta
A.ˆ2
sin(A)
A\x
Aˆ2
A*x
cos(x)*(A+1)
x/A
x*A
%
5
GRAFICI
5
21
Grafici
5.1
Grafici in 2D
Rappresentazione dei vettori x e y.
>> plot(x,y)
Esempio:
>>x=-4:.01:4; y=sin(x); plot(x,y)
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
−4
−3
−2
−1
0
1
2
3
4
Provare con:
#
2
• y = e−x sull’intervallo [−1.5, 1.5]
• x = cos(3t), y = sen(2t) con t ∈ [0, 2π].
"
5.2
!
Grafici in 2D multipli
1a FORMA
'
$
&
%
>>x=0:.01:2*pi; y1=sin(x);
>>y2=sin(2*x);y3=sin(4*x);
>>plot(x,y1,x,y2,’--’,x,y3,’.’)
5
GRAFICI
22
1
0.8
0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0
1
2
3
4
5
6
7
2a FORMA
>>x=0:.01:2*pi; Y=[sin(x)’,sin(2*x)’,sin(4*x)’];
>>plot(x,Y)
Opzioni
• hold on permette la modifica dell’ultimo grafico.
• hold off disattiva questa opzione.
Esempio:
'
$
&
%
>>x=0:.01:2*pi;
>>y1=sin(x);y2=sin(2*x);y(3)=sin(4*x);
>>plot(x,y1)
>>hold on
>>plot(x,y2)
>>plot(x,y3)
>>hold off
5
GRAFICI
5.3
23
Cambiare i grafici
• Cambiare stile di linea, colore, ecc.:
'
$
&
%
>>x=0:.01:2*pi; y1=sin(x);
>>y2=sin(2*x);y3=sin(4*x);
>>plot(x,y1,’--’,x,y2,’:’,x,y3,’+’)
Digitare help plot per info su stili di linea e di colore
• grid disegna un reticolato quadrato sul grafico.
• Estremi della finestra grafica:
axis([xmin,xmax,ymin,ymax])
axis fissa gli estremi attuali.
Scrivendo axis auto torniamo agli estremi di default.
• Aggiungere titoli ed etichette:
title
xlabel
ylabel
gtext
text
titolo del grafico
etichetta dell’asse x
etichetta dell’asse y
testo posizionato interattivamente
testo posizionato mediante coordinate
• Esempi:
1. Scrivere: title(’Titolo’)
2. Scrivere: gtext(’Curva 1’) e cliccare con il mouse dove si vuole
che sia posizionato il testo
5
GRAFICI
5.4
24
Grafici in 3D
• meshgrid(xx,yy) crea un reticolato a partire dai vettori xx e yy
• mesh(xx,yy,z) rappresenta la funzione z(xx, yy) sul reticolato
Esempio:
2 −y 2
Graficare z = e−x
sul dominio [−2, 2].
1a FORMA
'
$
&
%
'
$
&
%
>>xx=-2:0.1:2;
>>yy=xx;
>>[x,y]=meshgrid(xx,yy);
>>z=exp(-x.^2-y.^2);
>>mesh(z)
2a FORMA
>>[x,y]=meshgrid(-2:0.1:2);
>>z=exp(-x.^2-y.^2);
>>mesh(z)
Altre funzioni per graficare in 3D: plot3, mesh, surf.
6
PROGRAMMAZIONE
6
25
Programmazione
MATLAB permette l’esecuzione di files di comandi detti mfiles.
nome.m
6.1
Regole Generali
• I file devono essere in formato ASCII.
MAI formato Word, WordPerfect, Write, ecc.
• MATLAB deve sapere la directory di lavoro (dove stanno i files).
A tal proposito usare il comando:
>> cd nome_directory
• Il simbolo di percentuale % si usa per commenti. È importante
commentare i files indicando il loro scopo.
6.2
Tipi di m-files
• Files di Comandi
• Files di Funzioni
6
PROGRAMMAZIONE
6.2.1
26
Files di comandi
• Sequenza di comandi dentro un m-file.
• Per eseguirne uno chiamato nome.m:
>> nome
• Sono molto utili, infatti permettono di depurare y riutilizzare
sequenze di comandi facilmente.
• Le righe di commenti % saranno mostrate se si scrive:
>> help
nome
Esempio : File figura.m
'
$
% File esempio di m-file
% Genera la figura di 5.2
x=0:.01:2*pi;y1=sin(x);
y2=sin(2*x);y3=sin(4*x);
plot(x,y1,x,y2,’--’,x,y3,’.’)
xlabel(’X’); ylabel(’Y’)
title(’Grafico multiplo’)
&
>> figura %
6
PROGRAMMAZIONE
6.2.2
27
Files di funzioni
• Questi files creano nuove funzioni definite dall’utente.
• Una volta create, si possono utilizzare come una funzione
interna di MATLAB.
Regole e Consigli
• File ASCII con estensione .m
(m-file).
• Cominciare sempre con commenti (%).
• La prima parola dopo i commenti deve essere:
function
• Il nome della funzione deve essere lo stesso nome del file senza
estensione .m
• I parametri di ingresso devono essere gli argomenti della
funzione, chiusi tra parentesi ().
• I parametri di uscita vanno davanti al nome della funzione.
• Si possono mettere righe in bianco dovunque.
• Le variabili definite dentro il file sono locali, cioè, valgono solo
dentro la funzione, fuori non esistono.
• I nomi dei parametri di ingresso e di uscita sono variabili mute,
cioè, il loro nome può essere qualsiasi.
6
PROGRAMMAZIONE
28
Esempio 1
'
% File: rand10.m
% rand10(m,n) produce una matrice m x n
% di numeri random interi tra 0 e 9
$
function a = rand10(m,n)
a = floor(10*rand(m,n));
&
Chiamata
>> matrice=rand10(3,4)
%
Esempio 2
'
$
function [out1,out2] = sr2(in1,in2)
out1=in1.^2+in2.^2;
out2=in1.^2-in2.^2;
&
%
%
%
%
%
%
%
%
File: sr2.m
Funzione esempio con parametri
di ingresso e di uscita.
I due parametri di ingresso x e y sono due numeri.
I due di uscita s e r sono la somma e la differenza
dei loro quadrati, rispettivamente.
[s,r]=sr2(x,y)
Chiamata
>> [s,r]=sr2(3,4)
6
PROGRAMMAZIONE
6.3
29
Strutture di controllo del flusso del programma
Permettono di cambiare l’ordine di esecuzione sequenziale dei
comandi (uno dietro l’altro) in un programma.
6.3.1
Istruzione for
Ripete un insieme di comandi un determinato numero di volte.
for i= vettore riga di indici
istruzioni(i)
end
'
x =[]; for i = 1:n, x(i)=i^2, end
$
oppure
x = [];
for i = 1:n
x(i) = i^2;
end
&
Loop concentrici
for i = 1:m
for j = 1:n
H(i, j) = 1/(i+j-1);
end
end
%
6
PROGRAMMAZIONE
6.3.2
30
Istruzione if
I comandi verranno eseguiti solo se la relazione è vera
if relazione
comandi
end
Espressioni più complicate
if n < 0
parita’ = 0;
elseif rem(n,2) == 0
parita’ = 2;
else
parita’ = 1;
end
6.3.3
Istruzione while
Esegue dei comandi Ejecuta fintanto che la relazione è vera.
while relazone
comandi
end
6
PROGRAMMAZIONE
6.4
31
Operatori logici e operatori relazionali
• Operatori relazionali
< minore di
> maggiore di
<= minore uguale di >= maggiore uguale di
== uguale
~= diverso.
• Operatori Logici
& e
| o
~ non
• Si usano con for, if e while.
• Si possono usare con scalari o matrici.
Quando se usano matrici, l’ operatore attua componente a
componente.
'
>> A =rand10(3,5)
A =
1
6
7
2
8
8
9
4
5
3
1
6
0
4
1
>> B= A < 5*ones(3,5)
B =
1
0
0
1
0
0
0
1
0
1
1
0
1
1
1
>> p= sum(B(:))/length(A(:))
p =
0.5333
&
$
%
6
PROGRAMMAZIONE
32
Programma Esempio
'
function P = mult(A,B)
%
%
%
%
$
P = mult(A,B) calcola il prodotto di
matrici P = A*B, con A e B di dimensioni
adeguate (se no, si ottiene un messaggio di
errore)
[mA,nA] = size(A);
[mB,nB] = size(B);
if nA~=mB
error(’Matrici di dimensioni inadeguate’)
else
P = zeros(mA,nB);
flops(0);
for i=1:mA
for j=1:nB
for k=1:nA
P(i,j) = P(i,j) + A(i,k)*B(k,j);
end
end
end
&
%
7
7
BIBLIOGRAFIA
33
Bibliografia
• D. Hanselman and B. Littefield, The Student edition of MATLAB:
version 4, Prentice-Hall, 1995.
• A. Biran and M. Breiner, Matlab for Engineers, Addison-Wesley,
1995.
• Eva Pärt-Enander, Anders Sjöberg, Bo Melin and Pernilla Isaksson,
The Matlab Handbook, Addison-Wesley, 1996.
Fly UP