Manuale_MatLab_completo

Manuale_MatLab_completo
Pagina 1 di 1
Introduzione a MATLAB |Sergio Cavaliere Gennaio 2002 [email protected]
Matlab
caratteristiche
di base
L'ambiente di
lavoro
1. Introduzione a MATLAB
2. L'ambiente Matlab
3. Lo spazio di lavoro
Sintassi del
linguaggio: sessioni
interattive
4.
5.
6.
7.
I programmi in
MATLAB: sessioni
batch
6. I programmi Matlab
7. Le funzioni
8. Le istruzioni di controllo
esempi
Variabili, costanti, assegnazioni
Le espressioni del linguaggio
Operatori del linguaggio
Visualizzazione dei dati: l'istruzione di plot
9. Un semplice esempio di sessione interattiva
10. Qualche esempio di programmi e funzioni
file://C:\DOCUME~1\Giovanni\IMPOST~1\Temp\NVGYLGCE.htm
18/10/2002
IntroMatlab
Pagina 1 di 18
Introduzione a MATLAB |Indice degli argomenti | Sergio Cavaliere Gennaio 2002
[email protected]
Introduzione a Matlab
Matlab è un programma di elaborazione numerica. Il termine elaborazione numerica va contrapposto
a quello di elaborazione simbolica: per elaborazione numerica s'intende elaborazione di dati
numerici, mentre per elaborazione simbolica s'intende elaborazione di formule ed altre espressioni.
Un programma che calcola il valore della funzione seno per un determinato argomento fornisce una
elaborazione numerica:
sin(0.1) = 0.0998
Un programma invece che fornisce la derivata della funzione seno
d(sin(x)) = cos(x)
ovvero che risolve con una formula chiusa l'equazione di secondo grado in una incognita, o fattorizza
un polinomio è un programma di elaborazione simbolica.
In questo contesto ci interessano soltanto gli aspetti di elaborazione numerica, quindi ci fermeremo a
questi aspetti di Matlab, anche se nelle ultime versioni Matlab è interfacciato ad un programma di
elaborazione matematica simbolica, Mathcad, e fornisce quindi strumenti di elaborazione simbolica
oltre a quelli di elaborazione numerica.
Due altre caratteristiche di Matlab vanno citate; una è il fatto che il linguaggio fornisce strumenti
potenti di sviluppo di interfacce utente di tipo grafico e molto flessibili, le cosiddette GUI, graphical
user interface: basta dare il comando demo o tour e visitare alcune delle tante demo fornite per
rendersi conto della potenza del linguaggio, delle sue funzioni grafiche grafiche e delle sue
interfacce. Un secondo aspetto è che si tratta di un linguaggio per così dire aperto: ogni utente può
mettere a punto un set di programmi, un toolbox, ed inglobarlo semplicemente nel corpo dei
comandi nativi; per questo motivo è facile trovare in rete toolbox relativi a vari campi di
applicazione, soprattutto DSP Digital Signal Processing - Elaborazione Numerica dei Segnali, e
calcolo numerico, campi in cui Matlab si è affermato come strumento insostituibile per le
applicazioni e la ricerca. Con Matlab sono forniti alcuni toolbox come statistica, reti neurali,
elaborazione delle immagini e tanti altri, ma anche in rete se ne trovano, forniti da gruppi di ricerca,
Università o altri. Va aggiunto a tutto ciò la semplicità con cui programmi scritti in linguaggio C
possono essere a loro volta inglobati nel set di comandi Matlab per velocizzare applicazioni più
intensive dal punto di vista del calcolo.
Infine Matlab contiene un secondo programma Simulink con cui graficamente è possibile costruire
dei modelli di sistemi sia analogici che digitali, lineari o non che utilizzano funzioni native ovvero
create dall'utente. Ma su questo aspetto non ci fermeremo.
Quella che segue è una breve e semplice introduzione alle caratteristiche principali del linguaggio.
L'uso dello stesso, il ricorso all'help in linea e la consultazione dei manuali in pdf su disco saranno
poi sufficienti ad affinare la conoscenza del linguaggio, man man che questo si renderà necessario.
Le note che seguono vanno accompagnate dall'uso contemporaneo del programma per sperimentare
direttamente sul campo le locuzioni ed i costrutti del linguaggio.
L'ambiente Matlab
Matlab è un programma interpretato e non compilato, questo vuol dire che quando scriviamo un
programma Matlab possiamo eseguirlo senza premettere la fase di compilazione. Questo semplifica
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 2 di 18
le procedure perché permette uno stile di lavoro interattivo, in cui le funzioni vengono messe a punto
man mano che occorrono, e possono essere semplicemente provate e corrette. Quando si entra in
Matlab, avviando ad esempio il programma dalla sua icona, si apre una finestra, la finestra di
transcript nella quale si possono dare comandi, richiamare funzioni o attivare programmi, in modo
appunto interattivo, creando man man uno spazio di lavoro (workspace), definendo variabili,
attribuendogli un valore, facendo operazioni su di esse. Un esempio di semplice sessione interattiva è
riportato in allegato.
Ma il concetto di ambiente di lavoro è più ampio: per ambiente di lavoro si intende in Matlab non
solo lo spazio delle variabili create fino ad ora, a cui è stato attribuito un valore ma anche lo spazio
disco, la directory di lavoro in cui stiamo lavorando, oltre a quelle predefinite che costituiscono un
insieme di percorsi che contengono le funzioni predefinite che Matlab fornisce con il programma,
ovvero i toolbox che vengono acquistati o realizzati da noi stessi..
Matlab dunque consente sessioni interattive: entrati in Matlab possiamo settare delle variabili, fare
delle operazioni su di esse, conservarle su disco se ci occorre. Queste variabili possono essere
aggiornate o modificate, ma rimangono a costituire il nostro spazio di lavoro, almeno finchè con un
comando opportuno non azzeriamo tutto il nostro spazio di lavoro ovvero singole variabili. Lo
spazio di lavoro può essere analizzato con una istruzione specifica: whos che fornisce anche
l'occupazione in bytes del dato, nei casi dell'esempio seguente dati scalari. Si osservi il carattere >> ;
>> a fine rigo: evita l'eco dei dati immessi o calcolati, eco che può essere utile durante una sessione
di debugging ma confonderebbe le idee in fase di run normale.
>> x=10;
>> y=20;
>> z=x*y;
>> whos
Name Size Bytes Class
x 1x1 8 double array
y 1x1 8 double array
z 1x1 8 double array
Grand total is 3 elements using 24 bytes
>> clear x
>> whos
Name Size Bytes Class
y 1x1 8 double array
z 1x1 8 double array
Grand total is 2 elements using 16 bytes
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 3 di 18
>> y
y=
20
>> z
z=
200
>> z=4*z
z=
800
>> clear
>> whos
>>
Lo spazio di lavoro può essere salvato su di un file di formato .mat con l'istruzione save per potere
poi essere ripristinato con l'istruzione load. Si può anche salvare passo passo tutta la sessione
interatttiva mediante l'istruzione diary nome, e le istruzioni collegate diary off e diary on; my_diary
sarà un file ASCII che si potrà editare per trasformarlo, ad esempio in un programma Matlab.
>> save my_space
>> clear
>> load my_space
Lo spazio di lavoro oltre che dalle variabili definite è costituito dai programmi e dalle funzioni
presenti nella directory di lavoro in cui siamo, o meglio nell'intero percorso (path) costituito dalla
directory corrente in cui è stato avviato il programma e dalle directory predefinite in cui Matlab
conserva tutte le funzioni ed i programmi di uso generale. Il concetto di percorso è simile al path del
DOS, cioè fornisce l'ordine di ricerca su disco. Il percorso si può conoscere con l'istruzione pwd o
path, e si può anche alterare, allo scopo di includere eventuali librerie che scriveremo. Lo spazio di
lavoro corrente si può alterare dando al comando path come argomento il nome del path in cui
vogliamo lavorare. Le istruzioni dir o ls elencano i files nella cartella corrente.
>> cd
C:\Users\Laboratorio Architettura\MatlabLogic
>> dir
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 4 di 18
. ck_bin_adder2.m logic_unit.m
.. ck_bin_adder_simple.m matlab logic.lnk
add_and_compare.m ck_sub_all.m modify_a.m
add_double_and_compare.m ck_sub_double.m modify_b.m
>> cd c:\ProveMatlab
>> pwd
c:\ProveMatlab
Nelle sessioni interattive Matlab conserva una lista dei comandi dati in precedenza, simile al
comando history di Unix; a questa lista si può accedere mediante la freccia in alto ed in basso della
tastiera che permettono appunto di scorrerla. Se poi viene battuta un gruppo di lettere e la freccia in
alto viene richiamato dalla lista l'ultimo comando dato che inizia con il pattern immesso. Queste
opzioni semplificano enormemente la sessione interattiva soprattutto quando la riga di comando da
dare nuovamente è compilcata: si aggiunga che questa righa di comando richiamata può essere
modificata, scorrendo al suo interno con le frecce a destra ed a sinistra.
Tra le altre istruzioni di una sessione interattiva ci sono type, per stampare nella finestra di transcript
un file ascii, programma o altro, delete per cancellare files con il formato usuale del DOS. I comandi
del DOS possono poi essere richiamati medainte il punte esclamativo, ad esempio !my_prg.exe
esegue il programma binario my_prg.exe supposto esistente nella nostra directory di lavoro.
Infine con il comando quit si esce da Matlab.
Lo spazio di lavoro
Lo spazio di lavoro si può alterare anche dal menù file -> Set Path, che è anche accessibile dall'icona
con il simbolo delle cartelle.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 5 di 18
Piuttosto che settare il percorso ogni volta che si entra in Matlab è preferibile creare un link al file di
programma matlab.exe sul desktop e poi modificare (con il pulsante destro del mouse) le proprietà di
questo link facendo partire il programma dalla directory in cui si vuole lavorare, DirectoryMia
nell'esempio, creata in precedenza. Si può ad esempio creare un link per ogni progetto che si
sviluppa.
Occorre sin da ora dire che Matlab fa uso intensivo di una funzione di help che permette, dalla
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 6 di 18
finestra di lavoro, di ottenere l'help su qualsiasi funzione o simbolo di Matlab, caratteristica che
conviene utilizzare fin dall'inizio per orientarsi sui comandi ed ottenerne una spiegazione esaustiva
con i relativi esempi. Il comando help senza argomenti elenca i varii help possibili.
>> help cd
CD Change current working directory.
CD directory-spec sets the current directory to the one specified.
CD .. moves to the directory above the current one.
CD, by itself, prints out the current directory.
WD = CD returns the current directory as a string.
Use the functional form of CD, such as CD('directory-spec'),
when the directory specification is stored in a string.
See also PWD.
>> help +
Operators and special characters.
Arithmetic operators.
plus - Plus +
uplus - Unary plus +
minus - Minus ......................
......................
Il comando helpwin (con o senza argomento) fornisce una semplice interfaccia grafica all'help,
mentre helpdesk fornisce un'interfaccia html con cui si può accedere sia all'help in linea che a quella
in rete, dove si può cercare tra i cosiddetti 'contributed files' se qualcuno ha già risolto il nostro
problema. Doc ha la stessa funzione di helpdesk, avvia il browser predefinito e, con un argomento,
va alla pagina html relativa (ad es doc sin). Attraverso helpwin si accede al set completo di manuali
in formato pdf sotto la voce documentation roadmap -> Online Manuals. E' consigliabile la lettura
del documento >>Getting Started with MATLAB>> file (getstart.pdf) ottima introduzione al
linguaggio.
Utili anche i comandi lookfor che cerca e localizza una parola chiave in tutti i files in cui è contenuta
e which che dato il nome di un file, funzione o altro ci dice la sua posizione sul disco.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 7 di 18
Variabili, costanti , assegnazione
Per quanto riguarda i tipi di variabile, molto semplicemente Matlab, ad un primo livello, ha variabili
di un'unico tipo: matrici, che possono degenerare in vettori (matrici di una sola riga o colonna,
quindi nx1 o 1xn) e scalari, matrici di un solo elemento (matrici 1x1); un secondo tipo di dati che
useremo sono le stringhe: una stringa è semplicemente un vettore o una matrice di caratteri. In realtà
Matlab possiede tipi di dati più complessi che sono cell : matrici di matrici e struct strutture che
somigliano alle strutture del linguaggio C, così come possiede delle tecniche per rappresentare
efficientemente matrici sparse. Queste strutture dati, però, non sono necessarie per un primo
approccio all linguaggio, perché fanno parte di un uso avanzato del linguaggio che per molte
applicazioni può essere ignorato.
I nomi di variabili seguono le usuali convenzioni, lettere, numeri e caratteri come _ (fino a 31) , il
linguaggio è sempre case sensitive cioè a ed A sono due variabili diverse, così come sin e SIN sono
due funzioni diverse. Le costanti si denotano con i formati comuni a tutti i linguaggi di
programmazione, eventualmente in notazione scientifica, ci sono costanti predefinite come pi (π ), i
o j l'unità immaginaria, ma anche la costante +/-Inf , ottenuta quando si divide per 0 un numero non
nullo , NaN Not a Number ottenuta dalla divisione 0/0, realmin e realmax i numeri massimi e
minimi.
Tutte le operazioni vengono fatte in doppia precisione, ma l'output può essere controllato nel suo
formato mediante l'istruzione format (vedi help format).
Le istruzioni di assegnazione hanno il solito formato comune a tutti i linguaggi di programmazione.
>> x= 10.089;
>> y= 10e-13;
>> y= 10.456e-13;
>> z= 3*pi;
>> >> w=x*z+y;
>> w
w = 95.0866
>> s='test' % stringa
s=
test
>> s'
ans =
t
e
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 8 di 18
s
t
>> size(s)
ans = 1 4
L'assegnazione in generale di una matrice o vettore si fa, con una elencazione degli elementi,
separati da uno spazio o un >>;>> come è illustrato negli esempi seguenti, in cui viene anche
illustrata la definizione di un vettore vuoto. In ogni caso non è necessario definire in anticipo delle
dimensioni, queste vengono ricavate automaticamente quando il vettore o matrice viene riempito,
eventualmente anche in fasi successive. Matlab fornisce delle funzioni per ricavare queste
dimensioni : size e length.
>> y=[10 4 pi 7.12]
y = 10.0000 4.0000 3.1416 7.1200
>> x=[0,1,2,10,3.6]
x = 0 1.0000 2.0000 10.0000 3.6000
>> z=[0,1,2,5;2.3 4.1 6 7.5;10,20,30,40]
z=
0 1.0000 2.0000 5.0000
2.3000 4.1000 6.0000 7.5000
10.0000 20.0000 30.0000 40.0000
>> size(z)
ans = 1 5
>> length(x)
ans = 4
>> size(x)
ans = 4 1
>> w=[]
Un meccanismo di assegnazione più potente è quello del ciclo implicito, in cui si dà valore iniziale,
incremento e valore finale; se l'incremento manca viene assunto pari ad 1, se è negativo l'incremento
è in realtà un decremento. Il formato del ciclo di assegnazione è come vedremo identico a quello del
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 9 di 18
ciclo for. Nell'esempio che segue è anche illustrato il modo in cui si costruisce un vettore colonna, ed
è illustrato l'operatore di trasposizione, l'apice: ' che traduce un vettore riga in vettore colonna e
viceversa e vale in generale per la trasposizione di matrici.
x=0:5
x=
012345
>> y=0:.2:1
y = 0 0.2000 0.4000 0.6000 0.8000 1.0000
>> z=5:-1:1
z=
54321
>> x=[];
>> x=[0;1;2;3]
x=
0
1
2
3
>> y=x'
y=0123
>> z=4:-1:0
z=43210
Poiché Matlab usa matrici come struttura dati tipica vengono fornite anche molte funzioni per creare
e modificare matrici: vedi help elmat.
Le espressioni del linguaggio
Le espressioni del linguaggio sono composte, al solito di variabili, numeri, operatori e funzioni,
concatenati secondo le regole usuali dell'algebra dei numeri e con le usuali priorità tra gli operatori,
nell'ordine ^,*/,+-.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 10 di 18
>> y=4.5*sin(pi*x+k^2)+12e-6;
Operatori del linguaggio
Gli operatori del linguaggio sono quelli comuni a tanti altri linguaggi di programmazione, in
particolare il linguaggio C. L'istruzione >> help ops li elenca tutti. Useremo più di altri i seguenti:
z
z
operatori matematici + - ,* prodotto, ^ potenza, / che hanno il consueto significato aritmetico.
Gli operatori + e - possono essere utilizzati indifferentemente su scalari, vettori, matrici. Nel
caso di matrici (o vettori) sono accessibili le normali operazioni matriciali, con i simboli .*
e ./ , cioè gli stessi simboli degli scalari ma premettendo un punto. Oltre alle operazione già
viste è fornita anche la divisione a sx tra due matrici di dimensioni opportune \, utile per la
risoluzione di sistemi di equazioni lineari. Se invece vogliamo eseguire operazioni tra matrici
o vettori termine a termine, useremo i normali simboli * e /.
operatori di relazione
==
~=
<
>
<=
>=
che forniscono come risultato i valori 1 o 0 a seconda che la proprietà relativa sia vera o falsa.
z
Operatori logici
and
or
not
&
|
~
xor
Anche questi operatori possono essere utilizzati indifferentemente per scalari, vettori o
matrici.
Per gli operatori logici è prevista sia la notazione funzionale ad es. z = and(x,y) sia la
notazione con operatore: . z = x&y.Naturalmente questa seconda è sempre preferibile,
soprattutto per espressioni complesse, perché è di più facile lettura. Ad es. si confrontino
le due espressioni equivalenti:
>> zz = and(or(and(x,y),z),w) >> zz = ((x&y)|z)&w
Per quanto riguarda la precedenza degli operatori, occorre tenere presente che l'ordine
di precedenza degli operatori logici nel calcolo delle espressioni non è identico a quello
usale per cui l'operatore & (and) lega più fortemente dell'operatore | (or). In realtà
Matlab si sta adeguando alla convenzione usuale, ma, in presenza di versioni più o meno
nuove del programma, è preferibile esplicitare l'ordine delle operazioni, ad evitare di
ottenere risultati errati. Ad esempio alla scrittura
x=a&b|c&d va preferita la formulazione x=(a&b)|(c&d) se si vuole evitare che
l'espressione venga valutata come x=a&(b|c)&d.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 11 di 18
Visualizzazione dei dati: l'istruzione di plot.
La visualizzazione dei dati mediante istruzione plot è illustrata dal seguente esempio che chiarisce
anche una particolarità utilissima del linguaggio, quella di potere operare mediante funzioni ed
operazioni su matrici arbitrarie quindi scalari, vettori, matrici. Sia le funzioni che gli operatori
aritmetici e logici lavorano mediante i cosiddetti cicli impliciti: che semplificano, come si vedrà, la
programmazione.
>> x=0:0.1:2*pi;
>> plot(x)
>> x=0:0.1:2*pi;
>> y=sin(x);
>> z=cos(x);
>> plot(x,y)
>> hold on
>> plot(x,z);
>> grid
>> zoom
>> title('Plot delle funzioni seno e coseno')
>> xlabel('argomento')
>> ylabel('valore della funzione')
Il risultato è nella figura seguente. Come si osserva dalla figura le istruzioni title, xlabel ed ylabel
semplicemente aggiungono delle scritte al diagramma, titolo, asse delle x e delle y, e la funzione
zoom permette di ingrandire con il mouse zone dello schermo selezionate. Infine l'istruzione hold on
serve a sovrapporre più curve nello stesso diagramma. Volendo invece plottare la seconda curva in
un'altra finestra avremmo usato l'istruzione figure, che, appunto, apre un'altra finestra grafica.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 12 di 18
Le opzioni fornite dall'istruzione di plot sono numerose: si possono al solito conoscere con l' help
plot e vale la pena di verificarle: si può controllare il colore del plot, il carattere con cui si segna il
punto, la resa della superfice nel caso di curve piane e tanti altri aspetti. L'istruzione di subplot poi
permette di dividere la finestra grafica in più settore per plottare più diagrammi ed osservarli
contemporaneamente. Si possono aggiungere diagrammi a qualsiasi delle figure aperte, si ossono
concatenare le figure per ottenere un'animazione mediante l'istruzione movie e getframe, e così via.
Nelle demo è fornita una panoramica delle possibilità grafiche.
I programmi in Matlab
Fino ad ora abbiamo visto l'uso di Matlab in sessioni cosiddette 'interattive', che ci permettono di
verificare delle ipotesi, fare dei diagrammi o analizzare dei dati, in modo interattivo, magari
sfruttando alcune interfacce già fornite con il programma o con i toolbox. Ad esempio si possono
provare >> sptool del signal processing toolbox, disttool e randtool del toolbox statistico. Tutto
questo senza dovere scrivere e debbuggare neanche una riga di programma.
Se però si vogliono sviluppare applicazioni più complesse occorre scrivere dei veri e propri
programmi, che però, grazie alle potenzialità del linguaggio e dell'ambiente di sviluppo sono spesso
molto semplici. Per editare questi programmi Matlab fornisce con un editor predefinito, medit, a cui
si accede dal menu file; medit è un editor molto potente che evidenzia la corretta corrispondenza di
coppie di parentesi ed evidenzia (in azzurro) le parole chiave del linguaggio, in verde i commenti, in
rosso le stringhe alfanumeriche. Con l'editor inoltre si può accedere ad una funzione di debugging,
cioè di prova di un programma che permette l'esecuzione passo passo, o consente di fermarsi in punti
del programma prefissati da appositi breakpoints e di analizzare in queste fasi del programma i valori
delle variabili. Questa funzione è utilissima nella fase di sviluppo del programma.
Nelle preferenze si può settare l'editor per l'utilizzo di default di qualsiasi editor si preferisca, e
comunque un file eseguibile matlab, con estensione .m, essendo un normale file Matlab, si può
modificare con qualsiasi editor si preferisca, anche al di fuori di matlab.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 13 di 18
Accediamo a questo editor predefinito medit dal menù file->new--> mfile, se vogliamo creare un
nuovo file ovvero file->open--> mfile se vogliamo modificare un file già su disco. Le altre voci
Figure e Model si riferiscono alla possibilità di apripe e modificare un'interfaccia grafica Matlab,
ovvero un Modello SIMULINK.
In questo file scriveremo di seguito le istruzioni che prima scrivevamo nella finestra di transcript. Il
salvataggio andrà fatto nella directory corrente, che è la nostra directory di lavoro, con un nome da
noi scelto; l'editor salverà con l'estensione .m , che permetterà in un secondo momento a Matlab di
riconoscere il file come un programma Matlab ed eseguirlo a nostra richiesta fornendo il suo nome
nella finestra di transcript. Per l'esempio seguente, salvato il file con il nome Prova0.m daremo il
comando: >> Prova0 .
% primo programma Matlab (nome del file Prova0.m)
clear %azzera lo spazio delle variabili
close all %chiudi eventuali finestre grafiche precedenti
x=0:0.1:4*pi;
y=sin(x); %plot della funzione seno
plot(x,y)
hold on
plot(x,y,'r.')
grid
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 14 di 18
figure %plot della funzione coseno
z=cos(x);
plot(x,z)
hold on
plot(x,z,'b.')
grid
figure %plot della funzione esponenziale
w=exp(x)
plot(x,w)
hold on
plot(x,w,'g.')
grid
Come in tutti i linguggi di programmazione, nella scrittura di un programma o di una funzione, è
importante documentare il lavoro fatto per rendere i programmi comprensibili a che li userà. Tra le
forme di documentazione è imoprtante il commento che, in Matlab, è costituito dalle parole che
seguono il carattere riservato %, come si vede nel programma precedente. In più Matlab usa le prime
righe commentate all'inizio del programma, per creare una semplice ed utilissima modalità di help.
Se si digita help nome_programma , Matlab farà eco nella finistra di transcript con queste prime
righe, che, quindi, costituiranno oltre ad una documentazione anche un help in linea che vi permette
di ricordare, ad esempio, che funzionalità offre un determinato programma o funzione, con che
ordine vanno dati i suoi parametri, che algoritmo viene usato e tutte quelle informazioni che si
reputano utili. La pratica del commentare i programmi è quindi particolarmente incoraggiata..
Le funzioni
Come in ogni linguaggio gruppi di istruzioni e funzionalità ripetitive possono essere organizzate in
funzioni, soprattutto quando hanno validità generale e possono essere riutilizzate in svariati contesti,
venendo a far parte così di una 'libreria' di funzioni. Plot, whos, size, length, istruzioni già viste, sono
esempi di funzioni.
Il formato di funzione (vedi help function) è data dal prototipo:
function y = my_fun(x) x è il parametro di ingresso, y di uscita, entrambi sono scalari, vettori o
matrici. Più in generale il formato può essere
[y,z,.w ]= my_fun(.a,b,c.)
Sia l'ingresso che l'uscita possono essere 'multipli' , ognuno dei parametri o delle variabili di ingresso
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 15 di 18
può essere scalare, vettore o matrice, di qualsiasi dimensione. Questo evidentemente fornisce
semplicemente grosse funzionalità al linguaggio: in particolare utilissima la circostanza che una
funzione può restituire più valori in uscita, cosa che, in altri linguaggi richiede la costruzione e la
gestione di strutture complesse. Nel seguente esempio la funzione meshgrid, predefinita, crea una
griglia di punti del piano su cui valutare la funzione esponenziale, che viene poi diagrammata con
l'istruzione mesh.
>> [x,y] = meshgrid(-2:.2:2, -2:.2:2);
>> z = x .* exp(-x.^2 - y.^2);
>> mesh(z)
Un altro esempio di funzione è fornito nel prossimo paragrafo.
Tutte le funzioni fornite con Matlab lavorano indifferentemente con matrici di dimensione arbitraria.
Ad esempio abbiamo visto che la funzione sin lavora su vettori.
Questo aspetto però non è automatico: occorre con cura fare in modo che, se lo si vuole, ma ove
possibile è sempre preferibile, le funzioni che scriviamo possano lavorare sia su scalari che su vettori
o matrici. Questo consentirà di semplificare i programmi chiamanti. Nell'esempio del plot della
funzione seno, il fatto che questa funzione lavora anche su vettori, permette di calcolare in blocco
tutti i valori che ci occorrono, evitando di scrivere esplicitamente le istruzioni per il ciclo (si parla
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 16 di 18
difatti di 'ciclo implicito').
Naturalmente come in ogni linguaggio sono fornite delle funzioni di uso generale, trigonometriche,
esponenziali ed altre : per un elenco completo vedi help elfun. Per funzioni più evolute help
specfun. Oltre alle funzioni usuali in molti linguaggi ce ne sono alcune estremamente utili che
evitano al programmatore noiose codifiche di algoritmi standard, come le funzioni max, min, sort ed
altre.
Le istruzioni di controllo
Per la gestione del flusso di esecuzione delle istruzioni, come in tutti i linguaggi, occorrono
istruzioni di controllo.
z
for con un formato derivato dal formato del ciclo implicito : for i=0:2.5:20. Il ciclo va chiuso
con la parola chiave end. Anche qui il ciclo può avere passo negativo for i=10:-1: 0. Dal ciclo
for si può uscire con l'istruzione di break, nel caso si avveri una condizione prefissata.
Nell'esempio seguente è una funzione che calcola, senza usare il logaritmo, il numero di bit
necessari a rappresentare un intero positivo in formato binario puro.
% nbits_of_n è una funzione che accetta in ingresso un intero
% positivo n (0<n<2^80) e restituisce in uscita il numero di
% bit necessari a rappresentare n nel formato binario puro
% prova: nbits_of_n(2^7-1) nbits_of_n(2^7)
function nbit=nbits_of_n(n)
for i=0:80
if 2^i>n
nbit=i;
break
end
end
z
if esecuzione condizionata, illustrata dall'esempio di sopra, con le parole chiave if else else ..
elseif end. Vedi help if
If condizione1
.....
elseif condizione2
.....
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 17 di 18
Elseif
......
else
.....
end
z
while ripetizione di un blocco di istruzioni finchè è verificata una condizione.Anche da questo
ciclo si può uscire con il break.
while condizione
.....
.....
.....
end
switch - switch tra vari casi sulla base del valore val0, val1,. assunto dalla variabile x. Anche
qui >>help switch fornisce dettagli ed esempi.
switch x
case val0
.......
case val1
.......
case ..
.......
otherwise
......
end
Pe rconcludere rimandiamo ad una semplice esercitazione in Matlab, che mostra la struttura di una
funzione ed il suo uso.
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
IntroMatlab
Pagina 18 di 18
Introduzione a MATLAB |Indice degli argomenti | Sergio Cavaliere Gennaio 2002
[email protected]
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
SessioneInterattiva
Pagina 1 di 2
Una sessione interattiva di Matlab
Introduzione a Matlab e primi programmi e
funzioni
Avviare il programma Matlab doppio click sull'icona ovvero
su matlab.exe
Automaticamente il programma avrà come spazio di lavoro la
directory su disco in cui il programma è stato avviato.
Provare i comandi :
z
{
„
„
>demo
>tour
eseguendo così alcuni dei programmi demo di Matlab.
Provare di seguito i comandi:
z
{
„
„
>pwd
>cd
>help
>help lang
>help for
>x=10;
>y=0:4
>y(3)=-10;
>y
>z=1E5
>x=0:0.1:2*pi;
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
SessioneInterattiva
Pagina 2 di 2
>y=sin(x);
>plot(x,y);
>grid
>title('plot del seno')
>xlabel('arg.tra 0 e 2 pi)
>ylabel('valore del seno')
>z=cos(2*x);
>plot(z);
>hold on
>plot(x,'r')
>title('blue=cos red=seno')
>whos
>clear
>whos
>x=0:5:
>y=0:10:50;
>z=x+y
>help ops
>help general (ed altri help che ritenete
utili)
>help function
>ls
Introduzione a MATLAB |Indice degli argomenti | Sergio Cavaliere
Gennaio 2002 [email protected]
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
PrimeFunzioni
Pagina 1 di 3
Una sessione con programmi in Matlab
Introduzione a Matlab e primi programmi e funzioni
Editare accedendo al menù file i seguenti programmi e le seguenti
funzioni. Ricordare che le funzioni devono essere salvate in files
con lo stesso nome della funzione. Funzioni e programma chiamante
vanno salvati su files diversi.
%nome del file di programma: Esercitazione1
clear
n = 1:100:1000000;
nb = NumeroDiBit(n);
plot(nb);
grid
title('Lunghezza di un numero in formato binario')
xlabel('numero da rappresentare')
ylabel('numero di bit')
% nome del file di funzione NumeroDiBit. Restituisce il
% numero di bit necessario ad esprimere un numero in
% formato binario
function nb = NumeroDiBit(n);
.
nb = log2(n);
nb = fix(nb +1);
Il risultato della esecuzione del programma è il seguente diagramma
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
PrimeFunzioni
Pagina 2 di 3
%Esercitazione2
n = 1:16384;
b = [2,10,16];
col='rgb';i=1;
for bx=b
nb = NumeroDiCifre(n,bx);
plot(nb,col(i));hold on
i=i+1;
end
title('N. di cifre necessarie: basi red=2 green=10 blue=16')
xlabel('n')
ylabel('n. di cifre')
grid on
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
PrimeFunzioni
Pagina 3 di 3
% funzione numero di cifre n numero b base
function nb = NumeroDiCifre(n,b);
nb = log(n)/log(b);
nb = fix(nb+1);
Il risultato della esecuzione del programma è il seguente diagramma
Completare entrambe gli esercizi analizzando i diagrammi mediante
le funzioni di zoom da menù (simboli ⊕ e Θ ).
Introduzione a MATLAB |Indice degli argomenti | Sergio Cavaliere Gennaio 2002
[email protected]
http://www.scienzeinfo.unina.it/download/anno2001_2002/LaboratorioArchitettura/M... 18/10/2002
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement