
%% Euleresim1
% 
% $$y'= t+y, y(0)=0$$
% 
clear; close all;format compact
yanal=@(t) exp(t)-t-1;
f=@(t,y) t+y; % Diffyhtälö y'=t+y, Väli [0,1.2]
%% Tapaus a) h=0.4  
h=0.4; n=3;   
ta=(0:h:n*h)'; 
ya=zeros(n,1); % Alustetaan 0-vektori
ya(1)=0;       % Alkuarvo 0 
for k=1:n
    ya(k+1)=ya(k)+h*f(ta(k),ya(k));  % Eulerin askel
end;
[ta ya];
LW='LineWidth';MS='MarkerSize';

% MS viittaa "markkerin", seuraavissa piste(.) kokoon.
% MS,6 (tai 7,8,9)  on aika sopiva Octave-onlineen, asennetussa 
% (ja Matlab:ssa) voi reilusti isompi näkyä kunnolla,jopa MS,20.

plot(ta,ya,'.-',LW,2,MS,9);grid on
title(['Eulerin  menetelmä, y''=t+y, y(0)=0)']);
hold on
%% b)  h=0.2
h=0.2; n=6;
tb=0:h:n*h;
yb(1)=0;   
for k=1:n
    yb(k+1)=yb(k)+h*f(tb(k),yb(k));
end;
[tb;yb];
plot(tb,yb,'.-',LW,2,MS,8);grid on
%% c) h=0.1
h=0.1; n=12;
tc=0:h:n*h;
yc(1)=0;   
for k=1:n
    yc(k+1)=yc(k)+h*(tc(k)+yc(k));
end;
[tc;yc];
plot(tc,yc,'.-',LW,2,MS,7)
% Piirretään vielä tarkka analyyttinen ratkaisu:
t=linspace(0,1.2,100);
plot(t,yanal(t),LW,2)
NW='NorthWest';
legend('h=0.4','h=0.2','h=0.1','tarkka','Location',NW)

%Lasketaan numeerisia tuloksia,joiden tulostus estetään 
% puolipisteellä. Muuttujan nimen kirjoittamalla näet ao. arvon.

Yfinal=[ya(end);yb(end);yc(end)];
Tfinal=ta(end);   % ==tb(end) == tc(end)
%%
ylt=yanal(Tfinal); %ylopputarkka
%  Päteekö:"Virhe Puolttuu, kun askel puolittuu" ?
virheet=ylt-[ya(end);yb(end);yc(end)]; % Poista puolipiste!
t=linspace(0,1.2,100);
plot(t,yanal(t),LW,2)
NW='NorthWest';
legend('h=0.4','h=0.2','h=0.1','tarkka','Location',NW)

