function [A] = lu_pivot(A,pivot) 

% lu_pivot f"uhrt die LU-Zerlegung von A mit Spalten-Pivotsuche aus
% Die Pivotisierung ist abgeschaltet, falls pivot=0
% Aufruf [A] = lu_pivot(A,pivot) 

[n,m] =  size(A);

if n ~= m
  error('A ist keine quadratische Matrix')
end

% k - Schleife "uber die Zeilen von A
for k=1:n-1

  % falls Spalten-Pivotsuche
  if (pivot)
    % suche das betragsgr"osste Element der k-ten Spalte
    piv = abs(A(k,k));
    pivot_zeile =  k;
    for j=k+1:n
      if (abs(A(j,k))> piv)
        piv = abs(A(j,k));
        pivot_zeile =  j;
      end
    end
    % betragsgr"osste Element der k-ten Spalte gefunden,
    % f"uhre Vertauschung der Zeilen k und pivot_zeile durch
    if (pivot_zeile>k)
      for j=1:n
        tmp = A(k,j);
        A(k,j) = A(pivot_zeile,j);
        A(pivot_zeile,j) = tmp;
      end
    end
  end  % Pivotsuche

  % die Eintr"age der k-ten Spalte, deren Zeilenindex gr"osser als k ist,
  % werden durch A(k,k) dividiert und abgespeichert, das sind die Eintr"age
  % der Matrix L
  A(k+1:n,k) = A(k+1:n,k)/A(k,k);

  % die Restmatrix wird modifiziert
  for j=k+1:n
    for i=k+1:n
      A(i,j) = A(i,j) - A(i,k)*A(k,j);
    end
  end
end
