Sei sulla pagina 1di 40

Universit degli Studi di Padova - Facolt di Ingegneria

A.A. 2006-2007

INTRODUZIONE A MATLAB

Prof. Giovanni Sparacino


Dipartimento di Ingegneria dellInformazione
Universit di Padova
e-mail: giovanni.sparacino@unipd.it
web: http: www.dei.unipd.it/~gianni
1

CHE COSA MATLAB


MATLAB= MATrix LABoratory.
Lelemento 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

2
PERCHE USEREMO MATLAB ?
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
3
lesecuzione.

UTILIZZO DI MATLAB: LA COMMAND WINDOW


Lanciato Matlab, appare la command window con un prompt

Uso la command window per:


lavorare in modalita' interattiva
lanciare lesecuzione di un M-file (= programma in Matlab) 4
UTILIZZO INTERATTIVO DELLA COMMAND WINDOW
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.

Luso interattivo della command window spesso poco conveniente e noioso


( difficile trovare gli errori, se voglio ripetere le operazioni pi volte 5devo
riscrivere tutto ogni volta...), ma a volte pu essere utile, specie per iniziare !

OPERAZIONI DI ASSEGNAZIONE
Dalla Command Window si possono assegnare valori a variabili in modo
intuitivo.
Osservazioni
Se non metto il punto e virgola (;) dopo
lassegnazione, 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) 6
Osservazione:
A = [1 2 3; 4 5 6; 7 8 9] e
A = [...
123
456
789]
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 lunit immaginaria. Se


dobbiamo usare numeri complessi, bene evitare nel codice luso di i e j
come variabili (anche se consentito) 7

Le matrici si inseriscono per righe


In unoperazione 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(#) 8
ESTRAZIONE DI SOTTOMATRICI
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 unintera riga, ad es. la 2
x=A(2,:) restituira [7 1 -3 4]
Per accedere ad unintera 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] 9

Le matrici si possono costruire


affiancando matrici piu' piccole (purch
le dimensioni siano compatibili)

10
Una matrice molto grande come ad es. dati (40 X 4) nellesempio sotto
pu essere salvata in un file di testo es. dati.dat e richiamabile nel
workspace con il comando load dati.dat

11

Matlab non richiede la


predichiarazione delle variabili
e della loro dimensione.
Addirittura, fa unallocazione
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 !

12
DIMENSIONE DELLE VARIABILI

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

13

COMANDO FORMAT
Internamente, Matlab usa sempre doppia precisione. Per lesterno, si
possono usare vari formati:
format short
pi
ans =
format short virgola fissa, 5 cifre 3.1416

format long virgola fissa, 15 cifre. format long


pi
ans =
3.14159265358979

format short e
pi
format short e virgola mobile, 5 cifre. ans =
3.1416e+000
format long e virgola mobile, 15 cifre.
format long e
pi
ans = 14
3.141592653589793e+000
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]
15

VARIABILI DI TIPO RECORD

16
17

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

18
RIEPILOGO

19

GENERAZIONE DI VETTORI O MATRICI SPECIALI

E possibile generare con


semplicita vettori con elementi
equispaziati avvalendosi del
simbolo :

20
Per generare un vettore A di N elementi equispaziati tra Min e Max,
posso anche usare il comando:
A = linspace(Min, Max, N)

Il comando
A=logspace(Min, Max, N)
genererebbe invece N valori equispaziati su scala logaritmica
21

GENERAZIONE DI VETTORI CASUALI

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)

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
22
RIEPILOGO

23

ALTRI ESEMPI

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

24
ESEMPI DI OPERAZIONI SULLE MATRICI
Trasposizione di matrice

Per la trasposizione di matrice si usa come in algebra lineare lapice


25

Prodotto per uno scalare, somma, prodotto tra matrici

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

26
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


nellesempio moltiplicare invece a per la trasposta di b, ottenendo:

>> a*b'
ans =
3 3
3 3

27

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^2
ans =
2 2
2 2
>> x.^2
ans =
1 1
1 1
28
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

29

Osservazione:
Mettere il . prima
delloperatore cambia
loperazione drasticamente
perch significa elemento
per elemento

30
Divisione

divisione elemento per elemento

equivale a a*inv(b)

31

Altre operazioni sulle matrici


Ce ne sono uninfinit, 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.
32
norm(X, p): norma p di X (matrice o vettore che sia)
Esempi: min, max, sort

33

Esempi: poly, eig

coeff. polinomio caratteristico

colonne di V = autovettori di a

autovalori di a

34
Esempi: lu

35

Manipolazione di matrici

36
RIEPILOGO

37

Funzioni matematiche

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.

38
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

39

RIEPILOGO

40
GESTIONE DI POLINOMI

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.

41

ALCUNI COMANDI PER SOPRAVVIVERE ...

Dalla Command Window


>> <FrecciaSu>,<FrecciaGiu> Richiama i comandi gi dati dalla Command Window

>> help <NomeComando> Consulta lhelp in linea per il comando NomeComando

>> lookfor <NomeComando> Ricerca nel manuale la parola chiave NomeComando

>> demos Dimostrazioni

>> exit Chiude Matlab

42
Nellhelp, per soli motivi grafici, la funzione viene scritta in maiuscolo,
ma va usata comunque in minuscolo !!!

Utili le funzioni correlate ! 43

Lookfor ci aiuta a trovare comandi di cui non conosciamo lesistenza ...

44
COMANDO diary (=big brother )

45

ESECUZIONE DI M-FILES DALLA COMMAND WINDOW


Una 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 nome
dellM-file e battere Invio.
Nella esecuzione di un M-file,
Matlab si comporta come
46 un
interprete.
M-FILES

La scrittura di un M-file rispetto allesecuzione 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

47

TIPI DI M-FILES
Scripts: 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 messaggio di errore
if a>=0
a=sqrt(a)
Attenzione: nel workspace deve essere stata definita una
else
variabile a
disp('errore')
end

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 messaggio di errore
%
if x>=0 Attenzione: Questo file deve essere salvato come
a=sqrt(x) radfunz.m
else
disp('errore')
end
48
Per cominciare ci concentreremo sugli scripts
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 nellinsieme delle cartelle presenti nel matlabpath (toolbox +


quello che abbiamo inserito noi) esiste una function di nome pippo ed
eventualmente cerca di eseguirla
49

USO DEL % (COMMENTI)

E buona abitudine sia negli scripts che nelle functions inserire dei commenti
I commenti sono segnalati da %: Matlab ignora tutti i caratteri dellintera riga
dopo il %
Le prime righe di commento di uno script o di una function diventano parte dell
help online

50
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

51

OPERATORI RELAZIONALI
Gli operatori relazionali pi comuni sono:

== uguale
~= diverso da
< minore di
<= minore o uguale
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 52
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

53

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 >=

54
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 =
55
1

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

56
USO DEGLI OPERATORI LOGICI SU MATRICI

any - True if any element of vector is nonzero


all - True if all elements of vector are nonzero

57

STRUTTURE DI PROGRAMMAZIONE

58
STRUTTURA IF ELSEEND
Struttura:

if espressione
istruzioni
else Esempio:
istruzioni
end
if mod(x,2)==0
disp(numero est pari)
else
disp(numero dispari)
end

59

STRUTTURA IF ELSEIF END


Struttura:

if espressione
istruzioni Esempio:
elseif espressione
if a>0
istruzioni
else disp(a positivo);
istruzioni elseif a == 0
end disp(a nullo);

else
disp(a negativo);
end 60
CICLO FOR END
Il ciclo for ha la struttura:

for variabile = espressione


istruzioni
end

In genere espressione del tipo IndMin:Incremento:IndMax.

Esempio

s=0;
for i=1:10 s=0;
s=s+i; for i=1:2:10
end s=s+i;
end
calcola la somma dei numeri interi61 dispari
calcola la somma dei primi 10 numeri interi (55)
minori di 10 (25)

CICLO WHILE END


Il ciclo while ha la seguente struttura

while espressione
istruzioni
end

Esempio
Esempio 2
i=1;
x=input('voto esame (0 per finire)');
sommavoti=0;
n=0;
while i<5
while x~=i=i+1;0
end
sommavoti=sommavoti+x;
n=n+1;
i
x=input('voto esame (0 per finire)');
>> i
end
i=
media=sommavoti/n;
disp(['la media calcolata est=' num2str(media)])
5 62
I cicli possono essere uno dentro laltro.

Esempio (per il ciclo for)


n=4;
for i=1:n
for j=1:i
a(i,j) = 1;
end % j
end %i

Crea una matrice triangolare inferiore:


>> a
a=
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
63

Oss. trucchi per migliorare la velocita


a=zeros(4,4)
n=4;
for i=1:n
for j=1:i
a(i,j) = 1;
end % j
end %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

64
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

t=(0:1:100)
y=log(t+1)

ma e decine di volte pi lento. Meglio vettorizzare il codice.

65

66
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, ...)

67

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

68
ISTRUZIONE PLOT
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--') 69

GESTIONE DI PIU GRAFICI


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

Oppure (comando hold on ... hold off)


plot(t1,y1)
hold on

plot(t2,y2)
.
plot(t3,y3)
hold off

Piu' figure
figure(1)
plot(t1,y1)
figure(2)
70
plot(t2,y2)
ISTRUZIONE SUBPLOT
Listruzione subplot(M,N,K) crea una figura contenente M*N riquadri, distribuiti
su M righe ed N colonne. Lindice 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)

prima del plot, subplot(2,2,4) prima del plot, subplot(6,3,5) 71


prima del plot, subplot(6,1,6)

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 allasse delle ordinate.
xlabel(stringa) : aggiunge del testo allasse 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
72
Apici e Pedici nei titoli/label

ylabel('concentration c_{a}(t)')

xlabel('concentration c^{b}(t)')

Lettere greche nei titoli/label

title( Risultati per \beta = 3')

73

GRAFICI A BARRE (in alternativa a plot)


50
bar(x,y) : produce un diagramma a barre. 45

40
35

30

bar([0:.25:1],[10:10:50]) 25
20

15

10

5
0
-0.2 0 0.2 0.4 0.6 0.8 1 1.2

350

hist(y,m): suddivide lintervallo dei valori 300

compresi tra il minimo e il massimo di y in 250

m bin (=sottointervalli) di egual larghezza


200

150

e calcola (e poi disegna) il numero di 100

elementi di y compresi in ogni bin 50

0
30 35 40 45 50 55 60 65

hist(50+4*randn(1,5000),50)
74
stem(x,y): adatto quando si 1

0.8

vuole mettere in evidenza il 0.6

fatto che il segnale a tempo 0.4

discreto 0.2

x=[0:0.1:2*pi]; -0.2

-0.4

y=sin(x); -0.6

stem(x,y) -0.8

-1
0 1 2 3 4 5 6 7

semilogx(x,y) : come plot ma lasse x viene rappresentato in scala log10

semilogy(x,y) : come plot ma lasse y viene rappresentato in scala log10

loglog(x,y) : come plot ma con entrambi gli assi in scala log10.


75

76
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.8


ns=length(ts);
vn=randn(ns,1);
v=sqrt(0.8)*vn;
zs=ys+v;

plot(t,y,'r--',ts,zs,'bo')
grid
title('curva e campioni rumorosi')
xlabel('tempo')
ylabel('concentrazione')

77

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 on
for k=1:5
tau=k*tau0;
y=exp(-t/tau);
plot(t,y)
pause
end
hold off

78
Esempio 3
% esempio di programma che disegna
% decay esponenziali, uno dopo l'altro e a volont, sulla stessa
figura
% NB comandi while ed input

t=(0:0.01:10)';
tau0=0.5;
ancora='s'
k=1;
figure(1)
clf
hold on

while ancora=='s'
tau=k*tau0;
y=exp(-t/tau);
plot(t,y)
ancora=input('Vuoi continuare (s/n) ? ')
k=k+1
end
hold off 79

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

80