function [x_koz, k]= Jacobi_iteracio_hibabecsles(A, b, k_max, hiba_max);
  %{
  
          [x_koz, k]= Jacobi_iteracio_hibabecsles(A, b, k_max, hiba_max)
  
      Az A*x = b lineáris egyenletrendszer közelítő megoldása az
      
          x_(k+1) = B*x_k + c 
        
      Jacobi-iterációval.
      
      Az iteráció akkor áll le, ha (lásd jegyzet 65.o.)
        ||x - x_koz| <= ||B||^(k+1)/(1-||B||)*||c|| < hiba_max  vagy k > k_max
    
      Bemenő paraméterek
      
       A, b       az egyenletrendszer együttható-mátrixa és jobboldala
       k_max      az iterációs lépések maximális száma    
       hiba_max   az x_koz kozelítés megengedett hibája
    
      Kimenő paraméterek
       x_koz     az utolsó kiszámolt közelítés 
       k         a végrehajtott iterációs lépések száma
   %} 
 
    %% Az input paraméterek  ellenőrzése
    if nargin != 4
      error('Jacobi_iteráció: Hibás az input paraméterek száma')
    endif
    
    [nA, mA]  =  size(A);
    [nb, mb]  =  size(b);
    
    
    if  nA != mA || nA != nb || mb != 1
      error('Jacobi_iteráció: Hibás az input paraméterek dimenziója!')
    elseif !isnumeric(A)     || !isnumeric(b) || ...
           !isnumeric(k_max) || !isnumeric(hiba_max) ...
           !isscalar(k_max)  || !isscalar(hiba_max)
      error('Jacobi_iteráció: Hibás az input paraméterek típusa!')       
    endif
    
    %% a Jacobi-iteráció B mátrixának kiszámolása:
    if prod(diag(A)) == 0
      error('Jacobi_iteracio_hibabecsles: Az iteráció nem alkalmazható, A diagonálisában van 0 elem')
    endif
    D	= diag(diag(A));    %% az A diagonálisából álló D mátrix
    
    B	= D\(D-A);
    Bnorm = norm(B)
    if Bnorm >= 1
      error('Jacobi_iteracio_hibabecsles: B normája egynél nagyobb, az iteráció (valószínűleg) nem konvergál!')
    endif

    %% a Jacobi-iteráció c vektorának kiszámolása:
    c	= D\b;
    cnorm = norm(c)
 
     
    %% A kódban föltesszük, hogy legalább egyszer lefut a while ciklus
    x_koz =  c;
    hiba = Bnorm/(1-Bnorm)*cnorm;
    k     =   0;
    
    while (k <= k_max) && (hiba >= hiba_max)
      x_new = B*x_koz + c;
      k     = k + 1;
      hiba  = Bnorm*hiba;
      x_koz = x_new;
    endwhile
    
    if k == k_max+1
        warning(" Az iteráció valószínűleg nem konvergált!")
        k = k -1;
    endif
endfunction
