%% Piirretään suuntakenttä ja ratkaisut hiirellä poimittuihin pisteisiin
% 
% $$y'= f(t,y), f(t,y) = y^2 - t$$
% 
close all; clear
%
n=16;
%tpoints=linspace(0,3,n); ypoints=linspace(-1,1,n);
tmin=-2;tmax=4;
ymin=-2;ymax=3;
tpoints=linspace(tmin,tmax,n); ypoints=linspace(ymin,ymax,n);
[t,y]=meshgrid(tpoints,ypoints); % Suorakulmainen hilapisteistö
%%
plot(t(:),y(:),'.');shg    % Piirretään pisteet.
%%
f=@(t,y) y.^2 -t
%f=@(t,y) -y-5*exp(-t).*sin(5*t)  % Toinen esimerkki
pt=ones(size(y));
py=f(t,y);   % The ratkaisukäyrän derivaatta y'=f(t,y)
normit=sqrt(pt.^2+py.^2);
pt=pt./normit; py=py./normit; % Yksikkövektoreiksi
hold on
%quiver(t,y,pt,py,1.5,'ShowArrowHead','off');
quiver(t,y,pt,py,0.5,'ShowArrowHead','off','LineWidth',2);
%title('y''=-y-5e^{-t}sin(5t)','FontSize',14)
title('y''=y^2 - t','FontSize',14)
xlabel('t');ylabel('y','Rotation',0)
% Väljennetään hiukan koordinaatistojen rajoja:
xlim([tmin-0.2,tmax+0.2]); ylim([ymin-0.2,ymax+0.2]);
%
%% Valitse alkupiste hiirellä grafiikkaikkunassa.
% help ginput
ty = [];  % Kerää valitut pisteet:
n = 0;
% 
disp('Sirrä hiiriosoitin grafiikkaikkunaan')
disp('******************************')
disp(' ')
disp('Vasemmalla klikkaat alkupisteen')
disp('Oikealla valitset viimeisen alkupisteen..')
but = 1;
while but == 1
    [ti,yi,but] = ginput(1);
    [Tr,Yr]=ode45(f,linspace(ti,tmax),yi); 
    plot(Tr,Yr,'LineWidth',2)  % Piirretään alkupisteestä oikeaan reunaan.
    [Tl,Yl]=ode45(f,linspace(ti,tmin),yi);
    plot(Tl,Yl,'LineWidth',2)  % Piirretään alkupisteestä vasempaan reunaan.
    n = n+1;
    ty(:,n) = [ti;yi];
end
plot(ty(1,:),ty(2,:),'b.','MarkerSize',20) % Merkitse alkupisteet

% HUOM!
  % 1) ginput ei näköjään toimi Octave-onlinessa.
  % 2) Asennetussa Octavessa ja tietysti Matlab:ssa toimii.
  % Tässä esimerkissä syntyy erityisesti jyrkillä alueilla
  % (mm. vas. laidassa) nopeasti äärettömiin kasvavia ratkaisuja, jotka
  % aiheuttavat virheilmoituksia. Kuva kyllä piirtyy ihan kunnolla,
  % ettei hätää.
  % Esteettisitä syistä koodia kannattaa vielä viilata
  % rajaamalla y-arvot y > 4  ja y < -3 pois. Se vaatii hiukan
  % ode45-funktion valinnaisten argumenttien tutkimista, mutta onnistuu.
  % Päivitän heti, kun ehdin. Siihen saakka, katso vain kuvaa ja ihastale!
  % JEHUU!
