Untitled

 avatar
unknown
plain_text
a month ago
1.3 kB
1
Indexable
%FORWARD x(n+1) = x(n) + h*f(x(n)) h è il passo d'integrazione

% Nel nostro caso --> x(n+1) = x(n) + h*(-k*x(n))
% Semplificando diventa x(n+1)=x(n)*(1-kh)

%BACKWARD x(n+1) = x(n) + h*f(x(n+1))

% Nel nostro caso --> x(n+1) = x(n) + h*(-k*x(n+1))
% Semplificando diventa x(n+1)=x(n)/(1+kh)

function [t, x_forward, x_backward, x_exact]=metodi_eulero(k, x0, tspan, N) %tspan = tfin - t0; N = numero di punti

h = (tspan(2)-tspan(1))/N;
t=tspan(1):h:tspan(2);

x_forward=zeros(1, N+1);
x_backward=zeros(1, N+1);
x_exact=zeros(1, N+1);

x_forward(1)=x0; %diamo ad entrambe lo stesso x0 perchè i due metodi devono portare allo stesso risultato
x_backward(1)=x0;

for i=1:N
    %Forward
    x_forward(i+1)=x_forward(i)*(1-k*h);

    %Backward
    x_backward(i+1)=x_backward(i)/(1+k*h);

    %Soluzione esatta
    x_exact(i)=x0*exp(-k*t(i));

end

x_exact(N+1)=x0*exp(-k*t(N+1));


plot(t, x_forward, 'b-', t, x_backward, 'r--', t, x_exact, 'k:') %r=rosso, b=blu, k=black, -=linea continua, --=linea tratteggiata, :=linea coi punti
legend('Forward Eulero', 'Backward Eulero','Soluzione esatta')
xlabel('Tempo')
ylabel('x(t)')
title(['Confronto metodi per k=' num2str(k)])
grid on %plotta la griglia sopra cui mettere tutto

end


k=1;
x0=1;
tspan=[0 5];
N=100;

[t, x_forward, x_backward, x_exact]=metodi_eulero(k, x0, tspan, N);

Editor is loading...
Leave a Comment