
disp("testy metody siecznych")

function x=testsieczne(f,x0,x1=x0*(1+1e-8),xs=0)
#funcka z testami m siecznych rozwiazywania 
#rownania f(x)=0
#f -wskaznik do funkcji octave'a function y=f(x)
#x0,x1- startowe przyblizenia rozne
#xs- rozwiazanie rownania f(x)=0 (tylko do testow)

 x=x1;xp=x0;
 y=f(x);
 yp=f(xp);
 er=x-xs;
 it=0;
 while((it<100)&&(abs(y)>1e-8))
  it++;
  d=-y*(x-xp)/(y-yp);
  xp=x;
  x=x+d;
  yp=y;
  y=f(x);
  erp=er;  er=x-xs; #tylko do testow
  printf("[%d] %g %g %g\n",it,er,er/erp,er/(erp*erp)); 
 endwhile


endfunction

#testy m siecznych
f=@(x) x*x-4
testsieczne(f,3,3*(1+1e-7),2)
testsieczne(f,10,10*(1+1e-7),2)
#zbieznosc ponad kwadratowa (jak w m Newtona dla tej funkcji)
disp("cos(x)=0");
 testsieczne(@cos,1.5,1.5*(1+1e-7),pi/2)
#zera wielokrotne
disp("zera wielokrotne (x-2)^k=0");
f=@(x) (x-2)*(x-2)
testsieczne(f,3,3*(1+1e-7),2)
f=@(x) (x-2)^8
testsieczne(f,3,3*(1+1e-7),2)
