
function [t,loesung,fehler] = gausei(n,ndiag,s,diagonal,f,tmax,w,irel,gen)

%  Matlab-Realisierung des Struktogramms Nr. 8  Gauss-Seidel-Iteration
%  fuer Bandmatrizen

% H. Sormann    2-11-2004
% last update  14-11-2006

  fehler=0;
  loesung=ones(1,n);
  t=0;

  k0=0;
  for k=1:ndiag
    if(s(k)==0)
      k0=k;
    end
  end
  
  if(k0==0)
    fehler=1;
    fprintf('Keine Hauptdiagonale -- Gauss-Seidel nicht anwendbar!\n');
    return
  end

  for j=1:n
    if(diagonal(j,k0)==0.0)
      fprintf('Hauptdiagonale enthaelt Null - Gauss-Seidel nicht anwendbar!\n');
      return
    end
  end


  for t=1:tmax
    isch=0;
    for j=1:n
      summe=0.0;
      for k=1:ndiag
        jj=s(k)+j;
        if(k ~= k0 & jj>0 & jj<= n)
          summe = summe + diagonal(j,k)*loesung(jj);
        end
      end
      dx(j)=w*((summe-f(j))/diagonal(j,k0)+loesung(j));
      loesung(j) = loesung(j) - dx(j);
      if(irel==1)
        err=abs(dx(j)/loesung(j));
      else
        err=abs(dx(j));
      end
      if(err > gen)
        isch=1;
      end
    end
%    fprintf('  %5i    %11.8f  %11.8f\n',t,loesung(1),loesung(2));
    if(isch == 0)
      return
    end
  end
  fehler=1;
  fprintf('Keine Konvergenz nach %5i Iterationen!\n',tmax);
