Untitled
unknown
plain_text
a year ago
1.2 kB
10
Indexable
% Forward --> x(n+1) = x(n) + h*f(x(n))
%Nel nostro caso diventa --> 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 diventa --> 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)
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;
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:')
legend('Forward Eulero', 'Backward Eulero', 'Soluzione Esatta')
xlabel('Tempo')
ylabel('x(t)')
title(['Confronto metodi per k = ' num2str(k)])
grid on
end
k = 1;
x0 = 1;
tspan = [0 5];
N = 100;
[t, x_f, x_b, x_e] = metodi_eulero(k, x0, tspan, N);
Editor is loading...
Leave a Comment