Professional Documents
Culture Documents
MATLAB/Octave
Introduzione, input/output, script, strutture di controllo
Informatica B
Matlab
Cos Matlab:
strumento (e corrispondente linguaggio) per elaborazioni di
calcolo numerico
NB: sta per MATrix LABoratory
centrato sulle matrici (ma include generiche funzionalit matematiche)
-2-
Tutto un array
ci sono casi particolari significativi di array
array 1x1 sono gli scalari
array con una sola riga o colonna sono i vettori
array con due dimensioni sono le matrici
array con >2 dimensioni: matrici multidimensionali
-3-
Esempio
a = 10;
b = 20.5;
a+b
a = stringa
a cambia tipo dopo lultimo assegnamento di valore
-4-
Contenuto della
directory corrente
-6-
Comandi in Matlab
Matlab accetta comandi che lutente scrive di seguito al
prompt: >>
es. >> a = 10;
Assegna alla variabile a il valore 10
Esempio di alcuni comandi (analizzeremo quelli pi importanti)
Il prompt accetta i comandi del sistema operativo (DOS,
UNIX)
Esempio: in ambiente dos, dir mostra il contenuto della
directory corrente
-7-
Esempi
Input
Output
Commento
1234/6
ans = 205.67
a=1234/6
a = 205.67
assegnamento alla
risultato di 1234/6
eps
eps =
2/5
ans = 0.40000
divisione destra
5/0
ans = Inf
5^2
ans = 25
potenza
real(4+5j)
ans = 4
1+1==2
1+1~=2
ans = 1
ans = 0
2.2204e-16
-8-
variabile
del
a =
1
3
2
4
1
3
2
4
a =
restituisce
variabile a
x=[-1.3
sqrt(3)
(1+2)/5]
x =
-1.30000 1.73205
x(5)=abs(x(1))
x =
-1.30000 1.73205
1.30000
b=a
c=a+b
b =
1
2
3
4
c =
2
5
5
8
valore
elementi
possono
espressioni
0.60000
0.60000
il
0.00000
della
essere
y =
-1
0
2
a =
[]
x=1:5
y=0:pi/4:pi
v=10:-4:-3
x =
1
x=[0:pi/100:pi/2]';
[x sin(x)]
y =
0.00000
1.57080
3.14159
operatore : per
vettori di numeri
0.78540
2.35619
v =
10
sin(y)
ans =
0.00000
1.00000
0.00000
-2
0.70711
0.70711
ans =
0.00000 0.00000
0.03142 0.03141
......
1.53938 0.99951
1.57080 1.00000
- 10 -
produrre
a = [1 2; 3 4];
a^2
ans =
a = [1 2; 3 4];
a.^2
ans =
7 10
15 22
1 4
9 16
- 11 -
1000
800
>> x = -10:0.1:10;
>> y=x.^3;
>> plot(x,y);
>> xlabel('ascisse');
>> ylabel('ordinate');
>> title('cubica');
600
400
ordinate
200
0
-200
-400
-600
-800
- 12 -
-1000
-10
-8
-6
-4
-2
0
ascisse
10
Un esempio di cinematica
Due treni partono da due stazioni adiacenti, che
distano 15km, viaggiando a velocit di 50m/s e 30m/s
in direzione opposta
Costruire un grafico che mostra il loro movimento,
fino a quando il pi veloce raggiunge la destinazione
Il pi veloce impiega 15000/50=300s
DistanzaTreno1=50t;
DistanzaTreno2=15000-30t; (per mostrare la
provenienza dalla direzione opposta)
- 13 -
Soluzione
t=0:1:300;
p1=50 * t;
p2=15000 30 * t;
plot(t,p1);
hold on %adesso possibile inserire nuove curve sul grafico
plot(t,p2)
hold off
- 14 -
- 15 -
Istruzioni e ;
Le istruzioni possono essere seguite da ; ma non
obbligatorio
Il ; blocca la visualizzazione del valore delle variabili
coinvolte nellistruzione
Maggiore velocit di esecuzione
- 16 -
Commenti
Il simbolo di commento pu essere messo in
qualsiasi punto della linea.
MATLAB ignorer tutto quello che viene scritto alla
destra del simbolo %.
Per esempio:
>>% This is a comment.
>>x = 2+3 % So is this.
x=
5
- 17 -
Continuazione di linea
x = [(2+3)/2 (3+4)/3 (5+6)/4]
%equivalente a
x = [(2+3)/2 (3+4)/3
(5+6)/4]
- 18 -
Input/output
- 20 -
- 21 -
disp: x = -22+4i
fprintf: x = -22.0000
Script in MATLAB
Script (m-file)
Uno script un file di testo contenente una sequenza di
comandi MATLAB
non deve contenere caratteri di formattazione (solo testo puro)
viene salvato con estensione .m
- 24 -
- 25 -
- 27 -
- 29 -
Sezione di calcolo
Calcoli matematici
Assegnamenti
Strutture di controllo
Condizioni
Cicli
- 30 -
Strutture di controllo
- 31 -
>> x=3;
>> quadWhile
quad =
1 4 9
>>
>>x=15;
>>divisible
divisible by 3
>>x=8;
>>divisible
even
- 32 -
>>x=17;
>> divisible
prime or divisible by x>5
Il costrutto if
if espressione1
istruzione 1-1
istruzione 1-2
..........
elseif espressione2
istruzione 2-1
istruzione 2-2
..........
.....
else
istruzione k-1
istruzione k-2
..........
end
Il costrutto switch
Listruzione condizionale switch consente una scrittura
alternativa ad if/elseif/else
Qualunque struttura switch pu essere tradotta in un
if/elseif/else equivalente
switch variabile (scalare o stringa)
case valore1
istruzioni caso 1
case valore2
istruzioni caso 2
...
otherwise
istruzioni per i restanti casi
end
34
- 35 -
Il ciclo while
while espressione
istruzioni da ripetere finch espressione vera
end
espressione deve essere inizializzata (avere un valore) prima
dellinizio del ciclo
Il valore di espressione deve cambiare nelle ripetizioni
Esempio: Calcoliamo gli interessi fino al raddoppio del capitale
value = 1000;
year = 0;
while value < 2000
value = value * 1.08
year = year + 1;
fprintf('%g years: $%g\n', year,value)
end
36
Il ciclo for
for indice = espressione
istruzioni
end
Esempio leggi 7 numeri e mettili in un vettore di nome number:
for n = 1:7
number(n) = input('enter value ');
end
Esempio - conto alla rovescia in secondi
time = input('how long? ');
for count = time:-1:1
pause(1);
fprintf('%g seconds left \n',count);
end
disp('done');
37
Il ciclo for
Il ciclo for usa un array per assegnare valori alla variabile di
conteggio
Questo array pu essere generato al volo con unespressione
del tipo init:delta:fin
Nel primo esempio del lucido precedente larray [1 2 3 4 5 6 7]
38
Esempi
Inizializzazione dellindice del for a partire da una matrice
board = [ 1 1 1 ; 1 1 -1 ; 0 1 0 ];
1
for x = board
1
x
alla prima iterazione x e` il vettore colonna
0
end
Inizializzazione dellindice del for a partire da una stringa
for x = 'EGR106
disp(x) %alla prima iterazione x vale E
end
39