Untitled

 avatar
unknown
plain_text
a month ago
1.2 kB
6
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);

    
Leave a Comment