
function [x_koz, k] = SzeloModszer(f, x_0, x_1)
    %{        
    -- [x_koz, k] = SzeloModszer(f, x_0, x_1) 
    
    Minimális változat, csak a legutolsó közelítést adja vissza. 
    A tol és a k_max "bedrótozott", fix értékek 
    Az alkalmazott iterációs formula:
          x_(k+1) = x_k - f(x_k)*(x_k - x_(k-1))/(f(x_k) -f(x_(k-1)))
      azaz
          x_kp1 = x_k - f(x_k)*(x_k - x_km1)/(f(x_k) -f(x_km1))
      mivel mindig csak a 2 legutolsó közelítést tároljuk, tehát
          x_(k+1)  <-->   x_kp1
          x_k     <-->    x_k
          x_(k-1) <-->    x_km1  
          
      Bemenõ paraméterek
          f   :    az f(x) = 0 egyenlet bal oldalán álló függvény
          x_0 :    az x* pontos megoldás 0. közelítése
          x_1 :    az x* pontos megoldás 1. közelítése
          
      Kimenõ paraméter
         x_koz:  az utoljára kapott közelítés; kivéve, 
                 ha abs(f(x_0))<tol vagy abs(f(x_1))<tol
         k    :  a végrehajtott iterációs lépések száma
    %}
    
    tol = 10^(-10);     % ez elég kicsi szám ....
    k_max = 1000;       % ez meg elég nagy...   
    f_0 = f(x_0);
    f_1 = f(x_1);


    if abs(f_0)<tol
        x_koz = x_0;
        k = 0;
        return
    else if abs(f_1)<tol then
            x_koz = x_1;
            k = 1;
            return  
        end
    end

    k = 2;
    x_k = x_1; 
    f_k = f_1;
    x_km1 = x_0; 
    f_km1 = f_0;
    while abs(f_k) >=tol && k <= k_max
        if (f_k - f_km1) == 0 %% nem szép így...
            error("Stop: a szelõ párhuzamos az $x$ tengellyel!")
        end
        
        x_kp1 = x_k - f_k*(x_k - x_km1)/(f_k -f_km1);
        
        k     = k + 1;
        x_km1 = x_k;   f_km1 = f_k;
        x_k   = x_kp1; f_k   = f(x_kp1);
        x_koz = x_k;
    end

    if k == k_max + 1 then
        k = k-1;
        printf("Az iteráció valószínûleg nem konvergál\n a(z) %d. lépés után kapott közelítõ megoldás:\n x* ~ %1.14f\n", k, x_koz)
    end
endfunction

