introduzione a matlab - home page | deigianni/elab_dati/intro_matlab.pdf · 1 università degli...
TRANSCRIPT
1
Università degli Studi di Padova - Facoltà di Ingegneria
A.A. 2006-2007
INTRODUZIONE A MATLABINTRODUZIONE A MATLAB
Prof. Giovanni SparacinoDipartimento di Ingegneria dell’Informazione
Università di Padovae-mail: [email protected]
web: http: www.dei.unipd.it/~gianni
2
CHE COSA È MATLAB
MATLAB= MATrix LABoratory.
L’elemento base sono le matrici
Al solito, matrice M X N significa matrice ad M righe ed N colonne.
Casi particolari: M=1 (vettore riga); N=1 (vettore colonna); M=N=1 (scalare)
Matlab sarà per noi:
•un linguaggio di programmazione
•un ambiente di calcolo scientifico con routines altamente specializzate
3
Matlab ha in se' centinaia di funzioni che possono essere built-in (es. det,
inv, ...) o incluse in toolbox opzionali (es. funzione remez nel Signal
Processing Toolbox) la cui licenza si acquista a parte.
Nei programmi che scriviamo in Matlab di solito richiamiamo queste funzioni (o
altre scritte da noi !). Grazie a queste funzioni, scrivere un programma in
Matlab per risolvere un problema ingegneristico che coinvolge calcolo
scientifico risulta molto più semplice e veloce che usare linguaggi come
Fortran, Pascal, C, ...
Poichè il codice Matlab viene scritto in file di testo, è immediatamente
trasferibile ad altre piattaforme dove Matlab è installabile (UniX, Mac,
Windows, VAX, ...).
Un codice Matlab viene di fatto interpretato, ma è anche teoricamente
possibile compilarlo tramite il Matlab Compiler (che però in questo corso non
useremo mai) rendendo così al contempo “chiuso” il sorgente e più veloce
l’esecuzione.
PERCHE’ USEREMO MATLAB ?
4
Uso la command window per:
•lavorare in modalita' interattiva
•lanciare l’esecuzione di un M-file (= programma in Matlab)
Lanciato Matlab, appare la command window con un prompt
UTILIZZO DI MATLAB: LA COMMAND WINDOW
5
Dalla command window posso ad es. fare operazioni come con una
calcolatrice e invocare comandi o funzioni (=programmi con argomenti).
All'enter Matlab fa le sue elaborazioni e mi fornisce i risultati.
UTILIZZO INTERATTIVO DELLA COMMAND WINDOW
L’uso interattivo della command window è spesso poco conveniente e noioso
(è difficile trovare gli errori, se voglio ripetere le operazioni più volte devo
riscrivere tutto ogni volta...), ma a volte può essere utile, specie per iniziare !
6
OPERAZIONI DI ASSEGNAZIONE
Osservazioni
•Se non metto il punto e virgola (“;”) dopo
l’assegnazione, Matlab fa un “eco”
•Matlab non richiede la dichiarazione delle variabili.
•Matlab è case-sensitive
•I nomi delle variabili sono a piacere (ma non
possono cominciare con un numero, includere
spazi e caratteri speciali, es. *, e non dovrebbero
coincidere con nomi riservati di comandi e funzioni,
es. pi)
•Il contenuto della memoria di lavoro si chiama
workspace
•Per vedere cosa ho nel workspace: who o whos
(who+size)
Dalla Command Window si possono assegnare valori a variabili in modo
intuitivo.
7
Osservazione:
A = [1 2 3; 4 5 6; 7 8 9] e
A = [...
1 2 3
4 5 6
7 8 9 ]
creano la stessa matrice 3 X 3 di nome A
Osservazione:
A = [1 2;3 4] + i*[5 6;7 8] e
A = [1+5i 2+6i;3+7i 4+8i]
creano la stessa matrice 2 X 2 ad elementi complessi.
NB: In Matlab “i” e “j” sono le costanti che rappresentano l’unità immaginaria. Se
dobbiamo usare numeri complessi, è bene evitare nel codice l’uso di i e j
come variabili (anche se è consentito)
8
•Le matrici si inseriscono per righe
•In un’operazione di assegnazione, a destra
dell'uguale posso avere delle matrici
•Per accedere a porzioni di matrici/vettori, si
usano le parentesi tonde•Le parentesi quadre si usano solo per
delimitare inizio e fine di matrici/vettori
•Gli indici delle matrici sono interi strettamente positivi
•In generale, per vettori riga, v(1,#) e’ accorciabile in v(#), mentre, per
vettori, colonna z(#,1) coincide con z(#)
9
Sia
A=[...
2 –2 10 3
7 1 -3 4
1 5 6 -4]
Per accedere ad un elemento:
x=A(3,4) assegnera’ –4
Per accedere ad un’intera riga, ad es. la 2
x=A(2,:) restituira’ [7 1 -3 4]
Per accedere ad un’intera colonna, ad es. la 3
x=A(:,3) restituira’ [10 -3 6]’
Per accedere ad una sottomatrice, ad es.la 2X2 in basso a destra
x=A(2:3,3:4) restituira’ [-3 4
6 -4]
ESTRAZIONE DI SOTTOMATRICI
10
Le matrici si possono costruire
“affiancando” matrici piu' piccole (purchè
le dimensioni siano compatibili)
11
Una matrice molto grande come ad es. dati (40 X 4) nell’esempio sotto
può essere salvata in un file di testo es. dati.dat e richiamabile nel
workspace con il comando load dati.dat
12
Matlab non richiede la
predichiarazione delle variabili
e della loro dimensione.
Addirittura, fa un’allocazione dinamica delle variabili:
quando definisco un solo
elemento di una matrice o
quando definisco un nuovo
elemento in una posizione che
eccede la vecchia dimensione
della matrice, gli altri elementi
vengono definiti di imperio e
posti uguali a zero !
13
Vettori
length(X) restituisce la lunghezza del vettore X
Matrici
[M,N]=size(X) righe e colonne della matrice X
size(X,1) numero di righe della matrice X
size(X,2) numero di colonne della matrice X
DIMENSIONE DELLE VARIABILI
14
COMANDO FORMAT
Internamente, Matlab usa sempre doppia precisione. Per l’esterno, si
possono usare vari formati:
format short virgola fissa, 5 cifre
format long virgola fissa, 15 cifre.
» format short
» pi
ans =
3.1416
» format long
» pi
ans =
3.14159265358979
format short e virgola mobile, 5 cifre.
format long e virgola mobile, 15 cifre.
» format short e
» pi
ans =
3.1416e+000
» format long e
» pi
ans =
3.141592653589793e+000
15
GESTIONE DI STRINGHE
Definizione e concatenamento
di stringhe
A='pinco'
B='pallino'
C=[A ' ' B]
Conversione di numeri in
stringhe
E=67
ES=num2str(E)
P=[C ES]
16
VARIABILI DI TIPO RECORD
17
18
GESTIONE DELLE VARIABILI NEL WORKSPACE
who produce la lista delle variabili nel workspace
whos la lista contiene anche informazioni su tipo e dimensioni
clear all elimina tutte le variabili nel workspace
clear <Variabile> cancella solo la variabile con nome Variabile
Ogni volta che Matlab viene chiuso il workspace viene perso. Comandi utili:
save <File> salva nel file File.mat tutte le variabili del workspace
load <File> carica nel workspace tutte le variabili presenti in File.mat
save <File> <Variabili> salva nel file File.mat le variabili in Variabili
load <File> <Variabili> carica nel workspace le variabili Variabili del file File.mat
19
RIEPILOGO
20
GENERAZIONE DI VETTORI O MATRICI “SPECIALI”
E’ possibile generare con
semplicita’ vettori con elementi
equispaziati avvalendosi del
simbolo “:”
21
Il comando
A=logspace(Min, Max, N)
genererebbe invece N valori equispaziati su scala logaritmica
Per generare un vettore A di N elementi equispaziati tra Min e Max,
posso anche usare il comando:
A = linspace(Min, Max, N)
22
A=rand(3,5) matrice 3x5 con elementi casuali distribuiti unif. in [0,1]
A=randn(3,5) matrice 3x5 con elementi casuali distribuiti gauss. come Ν(0, 1)
GENERAZIONE DI VETTORI CASUALI
Sfruttando le trasformazioni lineari riesco a estrarre da varie distribuzioni di
probabilita’
v=10+2*randn(50,1)
vettore colonna di lunghezza 50 con elementi tratti da una distribuzione
gaussiana media 10 e deviazione standard 2
u=15+5*rand(50,1)
vettore colonna di lunghezza 50 con elementi tratti da una distribuzione
uniforme tra 15 e 20
23
RIEPILOGO
24
A=[] : matrice vuota
A=eye(10) matrice identità 10x10
A=zeros(3,5) matrice 3x5 con elementi tutti nulli
A=ones(3,5) matrice 3x5 con elementi tutti pari a 1
A=diag([3, 5, 6]) matrice 3x3, con elementi sulla diagonale specificati
ALTRI ESEMPI
25
Per la trasposizione di matrice si usa come in algebra lineare l’apice
ESEMPI DI OPERAZIONI SULLE MATRICI
Trasposizione di matrice
26
Matlab esegue in modo intuitivo le operazioni algebriche sulle matrici
Esempio:>> a=2*eye(2)
a =
2 0
0 2
Esempio: >> a=ones(2,3);
>> b=ones(2,3);
>> a+b
ans =
2 2 2
2 2 2
Prodotto per uno scalare, somma, prodotto tra matrici
27
Naturalmente, quando si richiede di eseguire somma, differenza e prodotto,
le dimensioni delle matrici coinvolte devono essere compatibili. Ad
esempio, se usassimo a e b della slide precedente:
>> a*b
??? Error using ==> *
Inner matrix dimensions must agree.
Infatti il prodotto fra queste specifiche matrici non è definibile. Posso
nell’esempio moltiplicare invece a per la trasposta di b, ottenendo:
>> a*b'
ans =
3 3
3 3
28
Elevamento a potenza
•X^2 indica il prodotto della matrice X con se stessa ed è definito solo
per matrice quadrate, cioè X^2 = X*X,
•X.^2 indica invece la matrice con elementi A i,j = ( X i,j ) 2
Per esempio:
>> x=ones(2,2);>> x^2ans =
2 22 2
>> x.^2ans =
1 11 1
29
Altro esempio
>> x=[-1,2];
>> x^2
??? Error using ==> ^
Matrix must be square.
Posso invece sempre agire “elemento per elemento”
>> x.^2
ans =
1 4
30
Osservazione:Mettere il “.” prima
dell’operatore cambia
l’operazione drasticamente
perchè significa “elemento
per elemento”
31
Divisione
divisione elemento per elemento
equivale a a*inv(b)
32
Altre operazioni sulle matrici
Ce ne sono un’infinità, ad es. inv, det, trace, mean, std, var, sort, max, min,
diag, ... Solo per elencarne alcune:
max(x), min(x): massimo e minimo del vettore x.
sort(x): ordinamento ascendente del vettore x.
mean(x),median(x),var(x),std(x): media, mediana, varianza e sd campionaria di x (per
colonne se x è una matrice !!!).
sum(x) : somma gli elementi di x (per colonne se x è matrice).
prod(x): esegue il prodotto degli elementi di x (per colonne se x è matrice).
diff(x): calcola le differenze [x(2)-x(1), x(3)-x(2), … , x(n)-x(n-1)].
det(X) : determinante di X.
rank(X) : rango di X.
trace(X): traccia di X.
inv(X) : matrice inversa di X.
eig(X) : autovalori di X.
poly(X) : polinomio caratteristico di X.
norm(X, p): norma p di X (matrice o vettore che sia)
33
Esempi: min, max, sort
34
Esempi: poly, eig
coeff. polinomio caratteristico
colonne di V = autovettori di a
autovalori di a
35
Esempi: lu
36
Manipolazione di matrici
37
RIEPILOGO
38
Esistono innumerevoli funzioni, es.
cos, sin, cosh, sinh, tan, tanh, asin, asinh, acos, acosh, ...
log, log10, log2, exp,
abs, mod,
sqr, sqrt,
round, floor, ceil,
sign
che nei corsi di Matematica sono state definite su scalari e che, se
l'argomento e' una matrice, in Matlab lavorano elemento per elemento.
Funzioni matematiche
39
Si possono così calcolare funzioni di matrici:>> a=zeros(1,2)
a =
0 0
>> b=cos(a)
b =
1 1
Altro esempio (NB: pi è una variabile predefinita che vale π):>> t=[0 pi/6 pi/3 pi/2];
>> x=cos(t)
x =
1.0000 0.8660 0.5000 0.0000
40
RIEPILOGO
41
Valutazione:
polyval(p,x) : calcola il valore del polinomio in x
Radici:
roots(p) : radici del polinomio.
poly(r) : determina il polinomio le cui radici sono r.
GESTIONE DI POLINOMI
42
ALCUNI COMANDI PER SOPRAVVIVERE ...
Dalla Command Window
>> <FrecciaSu>,<FrecciaGiu> Richiama i comandi già dati dalla Command Window
>> help <NomeComando> Consulta l’help in linea per il comando NomeComando
>> lookfor <NomeComando> Ricerca nel manuale la parola chiave NomeComando
>> demos Dimostrazioni
>> exit Chiude Matlab
43
Nell’help, per soli motivi grafici, la funzione viene scritta in maiuscolo,
ma va usata comunque in minuscolo !!!
Utili le funzioni correlate !
44
Lookfor ci aiuta a trovare comandi di cui non conosciamo l’esistenza ...
45
COMANDO diary (=big brother …)
46
ESECUZIONE DI M-FILES DALLA COMMAND WINDOWUna sequenza ordinata di
comandi può essere scritta in
un M-file (=file testo con
estensione m).
Per scrivere M-files ci si può
servire di un comune text-editor (es. notepad) o del
potente editor interno di Matlab
Per far eseguire un M-file dalla
Command Window, è
sufficiente scrivere il nomedell’M-file e battere “Invio”.
Nella esecuzione di un M-file,
Matlab si comporta come un
interprete.
47
La scrittura di un M-file rispetto all’esecuzione di comandi dalla
Command Window permette di:
•Sperimentare un algoritmo, senza dover reintrodurre da tastiera, ad
ogni variazione dello stesso, una lunga lista di comandi
•Ottenere programmi che possono essere riutilizzati, per esempio
cambiando solo i dati
•Scambiare programmi con altri utenti
•Ottenere una documentazione permanente per un lavoro
M-FILES
48
TIPI DI M-FILESScripts: sono files di comandi. Non hanno variabili in entrata e in uscita e
operano sulle variabili del workspace
% Questo file calcola la radice degli elementi di % una matrice a, se a>0, altrimenti stampa un messa ggio di erroreif a>=0
a=sqrt(a)else
disp('errore')end
Attenzione: nel workspace deve essere stata definita una variabile a
Attenzione: Questo file deve essere salvato comeradfunz.m
Functions: sono files di comandi con argomenti in entrata e in uscita. Le
variabili interne a questi programmi non influenzano le variabili del workspace
function a=radfunz(x)% RADFUNZ(X) calcola la radice degli elementi di X% se X>=0, altrimenti stampa un messaggi o di errore%if x>=0
a=sqrt(x)else
disp('errore')end
Per cominciare ci concentreremo sugli scripts
49
DA RICORDARE
Quando dalla command window digitiamo “pippo” + Enter, Matlab:
1. Controlla nel workspace se pippo è una variabile ed eventualmente ce ne
restituisce il valore
2. Controlla se esiste una function built-in di nome pippo ed eventualmente
cerca di eseguirla
3. Controlla se esiste nella current directory un M-file di nome pippo.m ed ed
eventualmente cerca di eseguirlo
4. Controlla se nell’insieme delle cartelle presenti nel matlabpath (toolbox +
quello che abbiamo inserito noi) esiste una function di nome pippo ed
eventualmente cerca di eseguirla
50
•E’ buona abitudine sia negli scripts che nelle functions inserire dei commenti
•I commenti sono segnalati da %: Matlab ignora tutti i caratteri dell’intera rigadopo il %
•Le prime righe di commento di uno script o di una function diventano parte dell’ help online
USO DEL % (COMMENTI)
51
GESTIONE DELLA WORKING DIRECTORY
Dalla Command Window
>> dir contenuto della directory corrente
>> ls idem
>> pwd percorso della directory corrente
>> cd idem
>> cd <Percorso> cambia la directory corrente
>> chdir <Percorso> come sopra
>> what analogo a dir, ma mostra solo i file .m, .mat, .mdl
52
Si usano nelle strutture if… o while … oppure per in operazioni di verifica (vd
esempi sotto)
Esempi:>> x=2;
>> x==0 (questa relazione e’ falsa:)
ans =
0
>> x==2 (questa relazione è vera)
ans =
1
OPERATORI RELAZIONALI
Gli operatori relazionali più comuni sono:
== uguale
~= diverso da
< minore di
<= minore o uguale
53
Gli operatori relazionali possono essere applicati anche alle matrici:
>> a=[1 2; 0 -1];
>> a>0 (qui i primi due elementi sono veri)
ans =
1 1
0 0
>> a>=0 (qui i primi tre elementi sono veri)
ans =
1 1
1 0
54
USO DEGLI OPERATORI RELAZIONALI COME FUNZIONI BINARIE
eq - Equal ==
ne - Not equal ~=
lt - Less than <
gt - Greater than >
le - Less than or equal <=
ge - Greater than or equal >=
55
OPERATORI LOGICI
Gli operatori logici più comuni sono:
& and logico
| or logico
~ not logico
Si usano nelle strutture if… o while … oppure per in operazioni di verifica (vd
esempi sotto)
Esempi:>> x=1; y= -1;
>> x>0 & y>0 (questa relazione è falsa)
ans =
0
>> x>0 | y>0 (questa relazione è vera)
ans =
1
56
USO DEGLI OPERATORI LOGICI SU MATRICI
and - Logical AND &
or - Logical OR |
not - Logical NOT ~
xor - Logical EXCLUSIVE OR
any - True if any element of vector is nonzero
all - True if all elements of vector are nonzero
57
USO DEGLI OPERATORI LOGICI SU MATRICI
any - True if any element of vector is nonzero
all - True if all elements of vector are nonzero
58
STRUTTURE DI PROGRAMMAZIONE
59
STRUTTURA IF … ELSE…END
Struttura:
if espressione
istruzioni
elseistruzioni
end
Esempio:
if mod(x,2)==0
disp(‘numero est pari’)
else
disp(‘numero dispari’)
end
60
STRUTTURA IF … ELSEIF …END
Struttura:
if espressione
istruzioni
elseif espressione
istruzioni
elseistruzioni
end
Esempio:
if a>0
disp(‘a positivo’);
elseif a == 0
disp(‘a nullo’);
else
disp(‘a negativo’);
end
61
Il ciclo for ha la struttura:
for variabile = espressione
istruzioni
end
In genere espressione è del tipo IndMin:Incremento:IndMax.
CICLO FOR … END
s=0;
for i=1:2:10
s=s+i;
endcalcola la somma dei numeri interi dispari
minori di 10 (25)
Esempio
s=0;
for i=1:10
s=s+i;
end
calcola la somma dei primi 10 numeri interi (55)
62
Il ciclo while ha la seguente struttura
while espressione
istruzioni
end
Esempioi=1;
while i<5
i=i+1;
end
i
>> i
i =
5
CICLO WHILE … END
Esempio 2x=input( 'voto esame (0 per finire)' );sommavoti=0;n=0;while x~= 0
sommavoti=sommavoti+x;n=n+1;x=input( 'voto esame (0 per finire)' );
endmedia=sommavoti/n;disp([ 'la media calcolata est=' num2str(media)])
63
I cicli possono essere uno dentro l’altro.
Esempio (per il ciclo for)
Crea una matrice triangolare inferiore:
>> aa =
1 0 0 01 1 0 01 1 1 01 1 1 1
n=4;for i=1:n
for j=1:ia(i,j) = 1;
end % jend %i
64
Oss. trucchi per migliorare la velocita’
a=zeros(4,4)n=4;for i=1:n
for j=1:ia(i,j) = 1;
end % jend %i
Fa la stessa cosa del codice prima, ma è più veloce, perché Matlab non
deve ad ogni nuova riga/colonna riallocare lo spazio in memoria per la
matrice a
Meglio preallocare lo spazio per le variabili
65
Oss. trucchi per migliorare la velocita’
T=0.05;for i=0:100
t(i+1)=i*T+1;y(i+1)=log(t(i+1));
end %i
Fa la stessa cosa di
ma e’ decine di volte più lento. Meglio vettorizzare il codice.
t=(0:1:100)
y=log(t+1)
66
67
GRAFICI
Per ottenere il grafico di una funzione, devo:
•Preparare un vettore di ascisse
•Preparare un vettore di ordinate
•Scegliere la figura (opzionale) (Istruzione figure)
•Preparare il riquadro (opzionale) (istruzione subplot)
•Fare il grafico (istruzione plot)
•Settare gli assi (opzionale) (istruzione axis)
•Inserire titoli ed etichette (istruzioni title, xlabel, ylabel, ...)
68
Esempio: grafico di ex cos4x, su [0,2]
>> x=[0:0.01:2];
>> f=cos(4*x).*exp(x);
>> plot(x,f)
Esempio: grafico di una circonferenza sulla figura 3>> t=0:0.01:2*pi;
>> x=cos(t);
>> y=sin(t);
>> figure(3)
>> plot(x,y,'g+')
>> axis equal
69
Una serie temporale (senza asse ascisse)
plot(y)
Una funzione
plot(t,y) (di default vengono uniti i punti)
Con i circoletti
plot(t,y,'o')
Circoletti + linea
plot(t,y,'o',t,y)
Circoletti + linea rossa
plot(t,y,'o',t,y,'r')
Circoletti+linea rossa tratteggiata
plot(t,y,'o',t,y,'r--')
ISTRUZIONE PLOT
70
GESTIONE DI PIU’ GRAFICI
Oppure (comando hold on ... hold off)plot(t1,y1)
hold on
…
plot(t2,y2)
….
plot(t3,y3)
hold off
Due funzioni sovrapposte
plot(t1,y1,t2,y2) Due spezzate
plot(t1,y1,'o',t2,y2,'*') Una serie di circoletti ed una serie di asterischi
Piu' figure
figure(1)
plot(t1,y1)
figure(2)
plot(t2,y2)
71
L’istruzione subplot(M,N,K) crea una figura contenente M*N riquadri, distribuiti
su M righe ed N colonne. L’indice K indica che il plot che segue, con annessi
title, xlabel, etc.., si riferisce al K-esimo riquadro (con K che può assumere
valori fra 1 e M*N)
ISTRUZIONE SUBPLOT
prima del plot, subplot(2,2,4) prima del plot, subplot(6,3,5) prima del plot, subplot(6,1,6)
72
figure(n) : apre la figura n. Se la figura n è gia esistente, la rende la figura “attiva”, ovvero
quella su cui i plot avranno effetto.
close: chiusura finestra grafica corrente
close all: chiusura di tutte le finestre grafiche
close (n) : chiude la figura n
clf: cancellazione grafici, riquadri etc dalla figura corrente
title(stringa) : Inserisce il titolo nella figura attiva. stringa può contenere sequenze LaTeX.
ylabel(stringa) : aggiunge del testo all’asse delle ordinate.
xlabel(stringa) : aggiunge del testo all’asse delle ascisse.
grid on/off : attiva/disattiva la griglia nella figura attiva.
axis([xmin, xmax, ymin, ymax]) : specifica i range per ascisse e ordinate
axis tight : gli assi finiscono al valore massimo/minimo dei dati (non rimane contorno)
axis equal : fa in modo che incrementi unitari sui due assi abbiano la stessa lunghezza
effettiva su schermo.
axis square : si impostano gli stessi minimo e massimo per entrambi gli assi (
visualizzazione quadrata)
axis normal : si ritorna alla configurazione originale degli assi
…
73
ylabel('concentration c_{a}(t)')
Apici e Pedici nei titoli/label
xlabel('concentration c^{b}(t)')
Lettere greche nei titoli/label
title(‘ Risultati per \beta = 3')
74
GRAFICI A BARRE (in alternativa a plot)
hist(y,m): suddivide l’intervallo dei valori
compresi tra il minimo e il massimo di y in
m “bin” (=sottointervalli) di egual larghezza
e calcola (e poi disegna) il numero di
elementi di y compresi in ogni bin
-0.2 0 0.2 0.4 0.6 0.8 1 1.20
5
10
15
20
25
30
35
40
45
50
bar(x,y) : produce un diagramma a barre.
bar([0:.25:1],[10:10:50])
30 35 40 45 50 55 60 650
50
100
150
200
250
300
350
hist(50+4*randn(1,5000),50)
75
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
» x=[0:0.1:2*pi];
» y=sin(x);
» stem(x,y)
stem(x,y): adatto quando si
vuole mettere in evidenza il
fatto che il segnale è a tempo
discreto
semilogx(x,y) : come plot ma l’asse x viene rappresentato in scala log10
semilogy(x,y) : come plot ma l’asse y viene rappresentato in scala log10
loglog(x,y) : come plot ma con entrambi gli assi in scala log10.
76
77
Esempi semplici di M-file
Esempio 1
% qui posso mettere tutti i commenti che mi pare
t=(0:1:100)';y=5*exp(-0.05*t);
ts=(0:5:100)';ys=5*exp(-0.05*ts);
% aggiungo il rumore con varianza 0.8ns=length(ts);vn=randn(ns,1);v=sqrt(0.8)*vn;zs=ys+v;
plot(t,y, 'r--' ,ts,zs, 'bo' )gridtitle( 'curva e campioni rumorosi' )xlabel( 'tempo' )ylabel( 'concentrazione' )
78
Esempio 2
% esempio di programma che disegna% 5 decay esponenziali sovrapposti% nb: comando hold on, hold off, pause
t=(0:0.01:10)';tau0=0.5;figure(1)hold onfor k=1:5
tau=k*tau0;y=exp(-t/tau);plot(t,y)pause
endhold off
79
Esempio 3% esempio di programma che disegna% decay esponenziali, uno dopo l'altro e a volontà, s ulla stessa figura% NB comandi while ed input
t=(0:0.01:10)';tau0=0.5;ancora= 's'k=1;figure(1)clfhold on
while ancora== 's'tau=k*tau0;y=exp(-t/tau);plot(t,y)ancora=input( 'Vuoi continuare (s/n) ? ' )k=k+1
endhold off
80
Esempio 4
% esempio di programma che disegna% 5 decay esponenziali su 5 subplot% comandi eval, num2str, e subplot
t=(0:0.01:10)';tau0=0.5;figure(1)for k=1:5
tau=k*tau0;y=exp(-t/tau);stringa1=[ 'subplot(5,1,' num2str(k) ')' ];eval(stringa1)plot(t,y)
end