% tehtävä 5.
% Kankeita tehtäviä ja näemme, miten hyvin BDF-menetelmiin lukeutuva ode15s
% tässä pärjää.
function y = teht5()
opts = odeset('nonnegative',[1,2,3]);
%ode45(@f, [0, 20], [1,0.4,0.1], opts)
% Selvästi ode45 ei ole paras tapa ratkaista tätä systeemiä. Askelia menee
% suunnattomasti!

% ode15s sen sijaan vaihtaa nopeasti kasvavan alun jälkeen isoille
% askelille ja suorittaa laskun murto-osassa ajasta.

ode15s(@f, [0, 30], [1,0.4,0.1], opts)

ode15s(@f, [0, 30], [2,0,1], opts)

% katsotaan hieman raja-arvoja alkuarvoilla (1,0,0)
ode15s(@f, [0, 75000], [1,0,0], opts)

% Vaikka T kasvaa aika isoksi, BDF-menetelmillä ei tuota tuskaa nähdä, että
% esitetyt raja-arvot voivat hyvinkin olla aivan mahdollisia.

y = 0;

% tehtävän 5 systeemi.
function xs = f(t,x)
xs = zeros(3,1);
xs(1) = -.04*x(1) + 10000*x(2)*x(3);
xs(2) =  .04*x(1) - 10000*x(2)*x(3) - 3e7 * x(2)^2;
xs(3) = 3e7 * x(2)^2;