function esponenziale(A0, k, DT)
% programma per confronto esponenziale con i metodi di Eulero ed RK4
% valori di input suggeriti: A0 = 1, k=-1, DT=0.1,0.5,1,2
% notare che all'aumentare di DT, eulero migliora rispetto al RK4
% il break-even si ha per DT = 1.7

if nargin < 3, 
    fprintf(' inserire A0, k, DT\n')
    return
end


time=abs(5/k);
N=floor(time/DT);
tf=DT*N;
x=zeros(8*N+1,1);
x(1)=A0;
y=zeros(N,1);
y(1)=A0;

tic;
for i = 1:N*8
    x(i+1,1)=x(i)+(k*x(i))*DT/8;
end
tempo_calcolo=toc;
fprintf('tempo di calcolo eulero = %.3e\n', tempo_calcolo)

te=(0:DT/8:tf)';
xte=A0*exp(k*te);
t_fitto=(0:DT/100:time)';
xt_fitto=A0*exp(k*t_fitto);

y(1)=A0;

tic;
for i = 1:N
    y1=(k*y(i))*DT;
    y2=(k*((y(i)+y1/2)))*DT;
    y3=(k*((y(i)+y2/2)))*DT;
    y4=(k*((y(i)+y3)))*DT;
    y(i+1,1)=y(i)+y1/6+y2/3+y3/3+y4/6;
end
tempo_calcolo=toc;
fprintf('tempo di calcolo RK4    = %.3e\n', tempo_calcolo)


trk=(0:DT:tf)';
xtrk=A0*exp(k*trk);

figure(1);clf;
subplot(2,1,1) 
plot(te, x, 'b*');hold on;
plot(t_fitto,xt_fitto,'r')
ylabel('x(t)')
xlabel('tempo');
s_title=sprintf('Esponenziale Eulero vs soluz. esatta');
title(s_title);
xlim([te(1) te(end)]);
ylim([0 max(x)*1.2]);
subplot(2,1,2)
plot(te,x-xte)

figure(2);clf;
subplot(2,1,1) 
plot(trk, y,'b*');hold on;
plot(t_fitto,xt_fitto,'r')
ylabel('x(t)')
xlabel('tempo');
s_title=sprintf('Esponenziale RK4 vs soluz. esatta');
title(s_title);
xlim([trk(1) trk(end)]);
ylim([0 max(y)*1.2]);
subplot(2,1,2)
plot(trk,y-xtrk)

figure(3);clf;
plot(te,abs(x-xte),trk,abs(y-xtrk))
s_title=sprintf('confronto errori Eulero RK4');
title(s_title);

return