%%    matlab/esim/newtonajo.m    8.9.2010
%{ 
Ajotiedosto sisältää Newtonin menetelmän laskennan ja visualisoinnin.
Tiedostossa on 3 solua, jotka voidaan ajaa erikseen CTR-ENTER:llä
Erityisesti 3:nnessa solussa voit kokeilla alkupisteen muuttelemista
vuorovaikutteisesti vasemman yläkulman - [ ] + tekniikalla:

- Kirjoita pikkuikkunaan sopiva askel (vaikka 0.5).
- Maalaa hiirellä alkuarvo (esim. 1.3, vain numeroarvo.) 
- Paina esim. + (plus):aa
%}
%% 1. Alustussolu:
close all
% funktio ja derivaatta:
f=@sin; df=@cos;   % Muuteltavat funktiot (f ja f:n derivaatta)
fplot(f,[-4 pi]),hold on, grid on
%{
  Ohjelmointiopissa tehtiin yksi Newton askel newt1,
  jota "nuolinäppäiniteroitiin".
%} 
newt1=@(f,df,x) x-f(x)/df(x)      % Newtonaskel-funktiomääritys
x0=1.3
X=x0; 

%%    Suoritetaan Newton askeleita toistuvilla CTR-ENTER-näppäilyillä.
%{     
    Muutaman iteraation jälkeen kannattaa zoomata kuvaa.
    Tällä voi havainnollistaa menetelmän etenemistä lokaalisti.X
%}  
   x0=newt1(f,df,x0)
   X=[X x0];
   plot([X(end) X(end) x0],[0 f(X(end)) 0],'.-r')
%%  
   a=min([X(end-1),X(end)])- 1
   b=max([X(end-1),X(end)])+ 1
   xlim([a,b])
      
%%   Sama for-silmukoiden, globaalimpi koordinaatisto
%{     
    Zoomaa tätäkin, vaihtele N:ää ...
    Erityisesti tässä voit kokeilla x0:n vuorovaikutteisesti.
    Tällä voi erityisesti katsoa alkupisteen vaikutusta
    globaalista kuvasta.
%}
close all
%figure
f=@sin; df=@cos;   % Muuteltavat funktiot (f ja f:n derivaatta)
%fplot(f,[-4 pi]),hold on, grid on
X=[];
N=5;
x0=1.3;
hold on
for k=1:N
   X=[X x0]; 
   x0=newt1(f,df,x0)
    %if k <=3
      plot([X(end) X(end) x0],[0 f(X(end)) 0],'.-r')
    %end  
   text(X(end),-0.1,num2str(k-1))
end   
a=min(X); b=max(X);
xlim([a b])
ezplot(f,[a-.5 b+.5]); grid on;shg
title(['alkup = ',num2str(X(1)),' loppup.= ',num2str(X(end))])
%% Seuraava vaihe on rakentaa lopetusehto while-rakenteella.
%Tehdään siitä oma ohjelmointitehtävä.