% Euler Framåt och Bakåt (GNM Exempel 6.5)
% dy/dx = -8*x*y
% y(0) = 1
% Analytisk lösning y = e^(-4*x^2)
clear

% Definiera explicit funktion
f = @(x, y) -8*x*y;
% Definiera implicit funktion
g = @(x, y, h) y/(1 + 8*h*(x + h));


% Plotta analytisk lösning
true_x = 0:0.1:8;
true_y = exp(-4*true_x.^2);
 
figure(1)
clf
hold on
plot(true_x, true_y, 'k', 'LineWidth', 2)
xlabel('x')
ylabel('y')
axis([0 8 -1 1])
pause

% Steglängd
h = 0.1;

% De x för vilka vi beräknar y
all_x = 0:h:8.1;

% Euler framåt
x = 0;
y = 1;
all_y(1) = y;
step = 1;
while x < 8
	
	% Ett steg i derivatans riktning
	y = y + h*f(x, y);

	step = step + 1;
	x = x + h;
	all_y(step) = y;
	
	plot(all_x([step-1 step]), all_y([step-1 step]), 'r', 'LineWidth', 2)
	pause(0.1)
	
end
pause

% Euler bakåt
x = 0;
y = 1;
all_y(1) = y;
step = 1;
while x < 8
	
	% Ett steg i derivatans riktning
	y = g(x, y, h);

	step = step + 1;
	x = x + h;
	all_y(step) = y;
	
	plot(all_x([step-1 step]), all_y([step-1 step]), 'g', 'LineWidth', 2)
	pause(0.1)
	
end
