Strumenti per il calcolo numerico
Matlab/Octave
Informatica B – Prof. A. Morzenti
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)
usato nei successivi corsi di calcolo numerico
MATLAB è uno strumento commerciale
distribuito, su licenza NON gratuita, da “The MathWorks Inc”
Student edition disponibile quando si è al Politecnico
(http://www.asi.polimi.it/software/matlab.html)
Esiste un altro strumento di nome Octave
identico nella concezione, molto simile per gli aspetti operativi
disponibile gratuitamente, vedi www.gnu.org/software/octave/
-2-
Caratteristiche del linguaggio di
Matlab/Octave (1)
Linguaggio di alto livello
simile a linguaggi di programmazione C, Java, Pascal
possiede comandi sintetici per effettuare complesse
elaborazioni numeriche
Linguaggio interpretato, comandi e istruzioni
NON tradotti in codice eseguibile dall’hardware
MA manipolati da un programma (l’interprete) che li analizza ed
esegue azioni da essi descritte
Linguaggio dinamico
NON occorre dichiarare le variabili
risultano definite dal punto in cui vengono introdotte
– e vengono incluse in una struttura detta tabella dei simboli
il tipo delle variabili è dinamico
a una variabile si possono assegnare, successivamente, valori
di tipo diverso (scalari, stringhe, vettori, matrici...)
-3-
Caratteristiche del linguaggio di
Matlab/Octave (2)
In Matlab/Octave 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
-4-
Screenshot interfaccia MATLAB
Mostra le variabili nel workspace
Contenuto della
directory corrente
Finestra dei comandi
Storia dei comandi
Lancia i tool di MATLAB ed altro…
-5-
Screenshot dell’interfaccia OCTAVE
Linea di comando dell’interprete
-6-
Comandi in Matlab
Matlab accetta comandi che l’utente 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
help richiama la guida in linea
diary può essere utilizzato per salvare la sessione di lavoro
who, whos e workspace mostrano l’elenco delle variabili
definite
save permette di salvare in un file le variabili definite. Load le
ricarica
clear cancella tutte le variabili
-7-
Esempi
Input
Output
Commento
1234/6
ans = 205.67
calcolo di un valore scalare
a=1234/6
a = 205.67
assegnamento alla
risultato di 1234/6
eps
eps =
variabile predefinita: la più piccola
differenza rappresentabile tra due
numeri
2/5
ans = 0.40000
divisione “destra”
5/0
ans = Inf
divisione per zero
5^2
ans = 25
potenza
real(4+5j)
ans = 4
real è una funzione predefinita che
restituisce la parte reale di un numero
complesso
1+1==2
1+1~=2
ans = 1
ans = 0
1 = vero, 0 = falso, “==” uguale, “~=”
diverso (codice ASCII di ‘~’: 126)
2.2204e-16
-8-
variabile
a
del
Esempi con gli array
a=[1 2; 3, 4]
a =
1
3
a
2
4
a =
1
3
x =
-1.30000 1.73205
x(5)=abs(x(1))
x =
-1.30000 1.73205
1.30000
c=a+b
x=[-1 0 2]; y=x'
b =
1
2
c =
2
5
y =
-1
0
2
restituisce
variabile a
2
4
x=[-1.3
sqrt(3)
(1+2)/5]
b=a’
a ora è una matrice 2x2, “;”
separa
le
righe;
virgola
opzionalmente separa elementi
(ma basta lo spazio)
valore
elementi
possono
espressioni
0.60000
0.60000
il
0.00000
della
essere
Notazione con () per accedere a
elementi di una matrice; abs valore
assoluto; NB: vettore x esteso per
includere nuovo elemento; elementi
non assegnati sono nulli
matrice trasposta (scambiate
righe e colonne)
3
4
somma di matrici, elemento per
elemento (sottrazione con “-”
simile)
5
8
il “;” blocca l’output, ma non
impedisce la valutazione
-9-
Altre operazioni con gli array
a = []
a =
array vuoto, convenzionalmente
rappresenta valore nullo
[]
x=1:5
x =
1
2
3
4
y=0:pi/4:pi
y =
0.00000
1.57080
3.14159
v=10:-4:-3
v =
10
operatore “:” per
vettori di numeri
5
produrre
operatore “:” con passo di
0.78540
incremento e valori non interi
2.35619
(pi è pigreco)
6
2
sin(y)
ans =
0.00000
1.00000
0.00000
x=[0:pi/100:pi/2]';
[x sin(x)]
ans =
0.00000 0.00000
0.03142 0.03141
......
1.53938 0.99951
1.57080 1.00000
-2
valori negativi del passo e degli
estremi
funzioni predefinite si applicano
0.70711
ai vettori
0.70711
- 10 -
produce la tabella di sin(x),
0≤
≤x≤
≤π/2
Diagrammi a due dimensioni
Diagramma = insieme di coppie che rappresentano coordinate
di punti
Si usano vettori per contenere sequenze ordinate dei valori di
ognuna delle coordinate
plot(x,y) disegna digramma cartesiano dei punti che hanno
valori delle ascisse in x, delle ordinate in y
e li congiunge con una linea, per dare continuità al grafico
funzioni xlabel per visualizzare nome asse ascisse, ylabel per
ordinate, title per il titolo
cubica
1000
800
600
400
ordinate
200
0
-200
-400
-600
-800
- 11 -
-1000
-10
-8
-6
-4
-2
0
ascisse
2
4
6
8
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=50·t;
DistranzaTreno2=15000-30·t; (per mostrare la
provenienza dalla direzione opposta)
- 12 -
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
- 13 -
Risultati ottenuti con l’esempio
- 14 -
Istruzioni e ‘;’
Le istruzioni possono essere seguite da ‘;’ ma non è
obbligatorio
Il ‘;’ blocca la visualizzazione del valore delle variabili
coinvolte nell’istruzione
Maggiore velocità di esecuzione
Regola di buona programmazione
Inserire sempre il ‘;’, a meno che non si voglia
ispezionare il valore di una variabile a scopo di
debugging
- 15 -
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
- 16 -
Array e variabili
L’unità fondamentale di dati in MATLAB è l’array
Una variabile in MATLAB è una regione di memoria che
contiene un array
Ha un nome definito dall’utente
Per i nomi valgono regole simili a quelle del C
C è un linguaggio a tipizzazione forte
Le variabili vanno dichiarate prima dell’uso
MATLAB è un linguaggio a tipizzazione debole
Le variabili vengono create assegnando ad esse dei valori
Il loro tipo è determinato dal tipo dei valori assegnati
- 17 -
Tipo double
Una variabile di tipo double contiene uno scalare o
un array di numeri espressi in 64 bit con doppia
precisione
Questi numeri possono essere
Reali, es var1 = -10.7;
Immaginari, es var2 = 4i; var3 = 4j;
Complessi, es var3 = 10.3 + 10i;
Es: x = [-1.3 3.1+5.3j 0]
Le parti reali e immaginarie possono essere positive
e negative nell’intervallo di valori [10-308, 10308]
- 18 -
Tipo char
Una variabile di tipo char contiene uno scalare o un
array di valori a 16 bit (8 bit in Octave), ciascuno dei
quali rappresenta un carattere
Es: commento = ‘questa e` una stringa’;
Nome della variabile
Array di 1x21 caratteri
(NB: stringhe racchiuse tra apici singoli)
whos commento;
Name
Size Bytes Class Attributes
commento 1x21 42
char
- 19 -
Creazione e inizializzazione di una
variabile
Le variabili sono create al momento
dell’inizializzazione
Modi di inizializzazione
Assegnamento
Lettura dati da tastiera
Lettura da file
- 20 -
Assegnamento
variabile = espressione
Esempi
contenuto di a
a = [0 7+1];
b = [a(2) 5 a];
secondo elemento di a
Risultato
a = [0 8]
b = [8 5 0 8]
Non tutti gli elementi devono essere specificati alla
creazione…
c(2, 3) = 5;
0
0
0
0
- 21 -
0
5
Assegnamento (2)
L’array può essere esteso successivamente …
d = [2 5]; d(4)=2;
d = [2 5 0 2]
Operatore di trasposizione
g = d’;
2
5
0
2
Creare un vettore enumerando i valori di un insieme:
uso dell’operatore ‘:’
x = 1:2:10;
n = 1:3;
m = [n’ n’]
x = [1 3 5 7 9]
n = [1 2 3]
1
2
3
- 22 -
1
2
3
Tabella delle funzioni predefinite
Funzione
Significato
zeros (n)
Genera una matrice nxn di zeri
zeros (m,n)
Genera una matrice mxn di zeri
zeros (size(arr))
Genera una matrice di zeri della stessa dimensione di arr
ones(n)
Genera una matrice nxn di uno
ones(m,n)
Genera una matrice mxn di uno
ones(size(arr))
Genera una matrice di uno della stessa dimensione di arr
eye(n)
Genera la matrice identità nxn
eye(m,n)
Genera la matrice identità mxn
length(arr)
Ritorna la dimensione più lunga del vettore
size(arr)
Ritorna un vettore [r c] con il numero r di righe e c di colonne
della matrice; se arr ha più dimensioni ritorna array con
numero elementi per ogni dimensione
v(end)
m(end, end)
ultimo elemento di vettore v; ultimo elemento dell’ultima riga di
matrice m; la costante end, come indice in un array, denota il
più alto valore possibile dell’indice
- 23 -
Funzioni predefinite
Esempi
a = zeros(2);
0
0
0
0
b = zeros(2,3);
0
0
0
0
0
0
0
0
c = [1 2; 3 4];
d = zeros(size(c));
- 24 -
0
0
sottoarray: applicazione a vettori
Si denota un sottoinsieme di un array usando vettori per valori degli indici
>> v=[6 8 4 2 4 5 1 3]
v =
6
8
4
>> v([1 4 7])
ans =
6
2
1
>> v(2:2:6)
ans =
8
>> v(3:end-2)
ans =
4
>> v(v)
ans =
>>
2
2
4
5
1
3
primo, quarto settimo elemento
2:2:6 è il vettore [2, 4, 6]: indica
secondo, quarto, sesto elemento
5
dal terzo al terz’ultimo elemento
2
4
5
i valori di v usati come indice
5
3
2
8
2
- 25 -
4
6
4
sottoarray: applicazione a matrici
m = 9
8
7
6
5
4
3
2
1
0
11
12
0
0
0
tutti gli elementi sulle righe 1 e 4 e sulle
>> m([1 4], [2 3])
colonne 2 e 3
ans = 8
7
11
12
tutti gli elementi delle righe 1, 3 e 5
>> m(1:2:5, 1:end)
ans = 9
8
7
3
2
1
0
0
0
notazione ‘:’ abbreviata per 1:end, cioè tutti i
>>>> m(1:2:5, :)
valori di quell’indice
ans = 9
8
7
3
2
1
0
0
0
>> m(2:2:4, :) = [-1 -2 -3; -4 -5 -6];
>> m
uso della notazione dei sottoarray per
m =
9
8
7
individuare elementi oggetto di assegnamento
-1
-2
-3
3
2
1
-4
-5
-6
0
0
0
- 26 >>
Uso di uno scalare per assegnare valori a un array
Esempio
3
3
3
3
m(1:4, 1:3) = 3
3
3
3
3
3
3
3
3
Il modo con cui uno scalare viene assegnato a un
array dipende dalla forma dell’array che viene
specificata a sinistra dell’assegnamento
Esempio 2
4 4 3
4
3
3
m(1:2, 1:2) = 4
- 27 -
4
3
3
3
3
3
uso dell’array vuoto [] per cancellare elementi di un array
un array vuoto [] assegnato a un elemento di un vettore non crea un ‘buco’
ma cancella un elemento e ricompatta il vettore
un array vuoto [] non assegnabile a singoli elementi di matrici (non si possono “creare buchi”)
assegnabile a intere righe o colonne di matrici, che vengono cancellate (ricompattando la matrice)
>> a=[1 2 3 4 5];
>> length(a)
ans = 5
>> a(3)
ans = 3
>> a(3)=[]
a = 1
2
4
>> a(3)
ans = 4
>> length(a)
ans = 4
5
>> m=magic(4)
m = 16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
>> m(3,4)=[]
??? Subscripted assignment dimension mismatch.
>> m(3,:)=[]
m = 16
2
3
13
5
11
10
8
4
14
15
1
>> [r,c]=size(m)
r = 3
c = 4
>> m(:,2)=[]
m = 16
3
13
5
10
8
4
15
1
>> [r,c]=size(m)
r =
3
c =
3
- 28 -
Array: memorizzazione
Matrici memorizzate
per colonna: colonna 1, poi colonna 2, 3, etc.
ogni colonna memorizzata per indici di riga crescenti
Array memorizzati in forma lineare nella RAM variando
più velocemente i primi indici
più lentamente quelli successivi
NB: opposto a quanto avviene in C
...
1
3
1
2
3
4
5
6
5
2
4
6
...
- 29 -
Array: forma linearizzata
Si può accedere a un array a più dimensioni come se
ne avesse una sola
Usando un unico indice si segue l’ordine della
memorizzazione
Da NON usare nella programmazione
ma aiuta a capire certi costrutti....
>> a = [1 2 3; 4 5 6; 7 8 9; 10 11 12]
a =
1
2
3
4
5
6
7
8
9
10
11
12
>> a(3, 2)
ans =
8
>> a(10)
ans =
6
>>
- 30 -
Variabili predefinite
Matlab definisce un insieme di variabili predefinite (es, pi)
Queste variabili spesso rappresentano importanti costanti
della matematica (pi è pigreco, i e j sono sqrt(-1) )
Attenzione! Il valore di queste variabili può essere modificato,
per esempio
circ1=2*pi*10;
pi = 3;
circ2=2*pi*10;
Il valore di circ2 non sarà più la circonferenza di un cerchio
E` fortemente sconsigliato modificare il valore di una variabile
predefinita (⇒ evitare di usare variabili i e j come contatori)
- 31 -
Variabili predefinite più comuni
Variabile
Scopo
pi
contiene 15 cifre significative di π
i, j
contiene il valore i ( − 1 )
inf (o Inf)
rappresentazione dell’infinito
(ottenuto di solito come risultato di
una divisione per 0)
nan
Not-A-Number è il risultato di una
operazione matematica non definita,
es 0/0
clock
contiene la data e l’orario corrente.
E` un vettore di sei elementi (anno,
mese, giorno, ora, minuti, secondi)
date
contiene la data corrente sotto
forma di stringa
eps
epsilon: la più piccola differenza
rappresentabile tra due numeri
ans
Variabile speciale usata per
immagazzinare risultati non
assegnati ad altre variabili
- 32 -
Operazioni con scalari e array
Operazioni per gli scalari: + - * / ^
Operazioni per gli array
Elevamento a potenza
Array operation: eseguita sugli elementi corrispondenti degli array
coinvolti (devono avere lo stesso numero di righe e colonne); si indica
aggiungendo un punto prima dell’operatore aritmetico
a=
1
3
2
4
b=
2
5
3
7
a .* b=
2 6
15 28
Matrix operation: segue le regole dell’algebra lineare
(esempio: prodotto righe per colonne)
1
a= 3
2
4
2
b= 5
3
7
12 17
a*b = 26 37
- 33 -
(a * b )ij = ∑k aik * bkj
Operazioni tipiche per gli array
Operazione
Sintassi Commenti
Matlab
Array addition
a+b
Array e matrix addition sono
identiche
Array subtraction
a–b
Array e matrix subtraction sono
identiche
Array multiplication
a .* b
Ciascun elemento del risultato è
pari al prodotto degli elementi
corrispondenti nei due operandi
Matrix multiplication
a*b
Prodotto di matrici
Array right division
a ./ b
risultato(i,j)=a(i,j)/b(i,j)
Array left division
a .\ b
risultato(i,j)=b(i,j)/a(i,j)
Matrix right division
a/b
a*inversa(b)
Matrix left division
a\b
inversa(a)*b
Array
exponentiation
a .^ b
risultato(i,j)=a(i,j)^b(i,j)
- 34 -
Matrix left division
Serve per risolvere sistemi di equazioni lineari
a11x1+a12x2+a13x3=b1
a21x1+a22x2+a23x3=b2
a31x1+a32x2+a33x3=b3
può essere espresso come Ax=B con
a11 a12 a13
A = a21 a22 a23
a31 a32 a33
b1
B= b2
b3
x1
x = x2
x3
di conseguenza, x = A-1B=inversa(A)*b=A\B
- 35 -
Altre funzioni
Funzione
Scopo
ceil(x)
approssima x all’intero immediatamente maggiore
floor(x)
approssima x all’intero immediatamente minore
fix(x)
approssima x all’intero più vicino verso lo zero
max(x)
se x è un vettore, ritorna il valore massimo in x e, opzionalmente, la collocazione
di questo valore in x; se x è matrice, ritorna il vettore dei massimi delle sue
colonne
min(x)
se x è un vettore, ritorna il valore minimo nel vettore x e, opzionalmente, la
collocazione di questo valore nel vettore; se x è matrice, ritorna il vettore dei
minimi delle sue colonne
mean(x)
se x è un vettore ritorna uno scalare uguale alla media dei valori di x; se x è una
matrice, ritorna il vettore contentente le medie dei vettori colonna di x;
mod(m,n)
mod(m,n) è m - q.*n dove q = floor(m ./ n) se n ~= 0
round(x)
approssima x all’intero più vicino
rand(N)
genera una matrice di NxN numeri casuali
- 36 -
funzioni min (e anche max) applicate a vettori e matrici
>> b = [4 7 2 6 5]
b = 4
7
2
>> min(b)
ans = 2
>> [x y]=min(b)
x = 2
y = 3
>>
6
5
(con un solo risultato) dà il valore del minimo
con due risultati dà anche la posizione del minimo
>> a = [24 28 21; 32 25 27; 30 33 31; 22 29 26]
a = 24
28
21
32
25
27
30
33
31
22
29
26
per una matrice dà vettore dei minimi nelle colonne
>> min(a)
ans = 22
25
21
>> [x y]=min(a)
x = 22
25
y = 4
2
>>
21
1
per una matrice, con due risultati dà due vettori dei valori
minimi nelle colonne e della loro posizione (riga)
- 37 -
Input/output
Acquisizione dati da tastiera
Funzione input
valore = input(‘inserisci un valore ‘);
Matlab stampa a video la stringa ‘inserisci un valore’
ed aspetta di ricevere un dato
Valore scalare
Array racchiuso tra [ e ]
Stringa racchiusa tra ‘ e ’
Il dato inserito dall’utente viene memorizzato nella
variabile valore
- 39 -
Stampa dei risultati (1)
I risultati di un’operazione sono mostrati
immediatamente se non si inserisce il ;
Altri due modi
disp
accetta come parametro un array. Se questo array è di
tipo char, lo stampa
viene usato in congiunzione con num2str
Esempio:
– str = [‘il valore di pi e` ‘ num2str(pi)];
– disp(str);
Stampa: “il valore di pi e` 3.1416”
- 40 -
Stampa dei risultati (2)
…altro modo
fprintf
fprintf(‘Il valore di pi e` %f \n’, pi);
stringhe di formato: %d (interi), %e (formato
esponenziale), %f (virgola mobile), %g (il più corto tra il
formato esponenziale e quello in virgola mobile)
disp vs. fprintf
disp è in grado di stampare anche valori complessi
x=2*(1-2*i)^3;
str=[‘disp: x = ‘ num2str(x)];
disp(str);
disp: x = -22+4i
fprintf ne stampa solo la parte reale
fprintf(‘fprintf: x = %8.4f\n’, x);
- 41 -
fprintf: x = -22.0000
Lettura e scrittura di dati su file
Tipi di file gestiti
ascii = file di testo
.mat = file proprietari di Matlab
Comandi più semplici da usare
save
load
- 42 -
Salvataggio dei dati su file (1)
file .mat
save filename: salva su filename.mat tutte le variabili
contenute nello spazio di lavoro
save filename array1 array2: salva su filename.mat le
variabili array1 e array2
I file .mat hanno un formato compatto
Contengono
Nomi, tipi e valori di ogni variabile
La dimensione degli array
… in generale, tutto ciò che serve per ripristinare lo
stato dello spazio di lavoro
Possono essere portati da un computer all’altro, anche
con sistemi operativi diversi
- 43 -
Salvataggio dei dati su file (2)
Limitazione dei file .mat
E` un formato proprietario di MATLAB.
Non è utilizzabile per leggere/scrivere dati con un altro
programma
Es, un editor di testi, excel, …
Soluzione
Uso dei file di testo (ascii), esempio
x = [1.23 3.14 6.28; -5.1 7.00 0];
save –ascii filename.dat x;
Produce il file filename.dat organizzato come segue
1.2300000e+000
-5.1000000e+000
o
3.1400000e+000 6.2800000e+000
7.0000000e+000 0.0000000e+000
Nota: si può usare qualsiasi estensione per questi file, è buona
norma distinguerli dai file .mat
- 44 -
Acquisizione dati da file
load carica dati da file nello spazio di lavoro di
MATLAB
load filename: carica nello spazio di lavoro tutte le
variabili nel file
load filename x y: carica nello spazio di lavoro solo le
variabili x ed y
Se filename non ha estensione o ha estensione .mat,
viene trattato come un file .mat
File ascii
load filename.dat: crea una variabile di nome filename
che conterrà i dati in filename.dat
Il file deve contenere dati separati da virgole o spazi
- 45 -
Acquisizione di dati da fogli di calcolo
A = xlsread(’filename’) importa il file di Microsoft
Excel filename.xls nella matrice A
Alcuni fogli di calcolo salvano i dati nel formato .wk1
M = wk1read(’filename’)
per importare questi dati nella matrice M
- 46 -
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
I comandi all’interno di uno script sono eseguiti
sequenzialmente, come se fossero scritti nella finestra dei
comandi
Per eseguire il file si digita il suo nome (senza .m)
I risultati appaiono nella finestra dei comandi (se non usiamo il ; )
- 48 -
Vantaggi/Svantaggi
Uno script può
essere ri-eseguito
essere facilmente modificato
essere spedito a qualcuno
Uno script NON
accetta variabili di input
genera variabili di output
Uno script opera sulle variabili del workspace, che
può essere arricchito introducendone di nuove
durante l’esecuzione dello script stesso
- 49 -
Come creare uno script
Può essere creato utilizzando un qualsiasi editor di
testo
Ricordarsi di salvare il file come “solo testo” e di dare
l’estensione .m
Il file di script deve essere presente nella directory
corrente o il cammino (path) che identifica la directory
in cui si trova lo script deve essere salvato tra i path di
Matlab
- 50 -
Nomi degli script
Il nome del file deve cominciare con una lettera e può
contenere cifre e il carattere underscore, fino a 31 caratteri
Non dare lo stesso nome al file di script e a una variabile
Non chiamare uno script con lo stesso nome di un comando
o funzione MATLAB.
Per verificare se esiste già qualcosa che ha un certo nome
si può utilizzare la funzione exist.
- 51 -
Suggerimenti per strutturare e
documentare uno script
1. Sezione dei commenti:
Il nome del programma e le parole chiave, nella prima riga
La data di creazione e i nomi degli autori nella seconda riga
La definizione dei nomi delle variabili per ogni variabile di input e di
output
Il nome di ogni funzione creata dall’utente che viene usata nel
programma
Il comando help visualizza tutta la sezione dei commenti all’inizio dello
script
2. Sezione di Input: inserimento dei dati in input e/o uso di
funzioni di input
3. Sezione di calcolo
4. Sezione di output: uso si funzioni per visualizzare i risultati
del programma
- 52 -
Dati su cui opera uno script file
Gli script non accettano argomenti d’entrata e d’uscita
Usano
variabili già presenti nel workspace
variabili acquisite da tastiera o file
nuove variabili introdotte nello script
Le variabili interne allo script diventano variabili del
workspace
Permangono dopo l’esecuzione dello script
- 53 -
Sezione di calcolo
Calcoli matematici
Assegnamenti
Strutture di controllo
Condizioni
Cicli
Comandi per la costruzione di grafici
Chiamate a funzioni
- 54 -
Istruzioni della programmazione strutturata: if e while
Hanno sintassi simile a quella di C, semantica uguale
Vediamo due script che ne fanno uso
%script nel file
% quadWhile.m
quad=[];
k = 1;
while (k <= x)
quad (k) = k*k;
k=k+1;
end;
quad
>> x=3
x = 3
>> quadWhile
quad =
1 4 9
>>
%script nel file divisible,m
if (mod (x, 2) == 0)
fprintf ('even\n');
elseif (mod (x, 3) == 0)
fprintf ('divisible by 3\n');
elseif (mod(x,5)==0)
fprintf ('divisible by 5\n');
else
fprintf ('prime or divisible by x>5\n');
end
>> x=15
x = 15
>>divisible
divisible by 3
>> x=8
x =
8
>>divisible
even
- 55 -
>> x=17
x =
17
>> divisible
prime or divisible by x>5
Scarica

quinto fascicolo - Home page docenti