Untitled
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