Untitled
% 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);
Leave a Comment