%% This file can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%

\title{\texttt{gauss.sty} - Visualisierung des Gau�schen Eliminationsverfahrens}


\author{Herbert Vo�}

\maketitle
\begin{abstract}
Die Zahl der vorhanden \LaTeX{}-Pakete ist sicherlich endlich, wenn
man auch manchmal den gegenteiligen Eindruck hat. Neben den mehr oder
weniger bekannten Paketen gibt es eine erhebliche Anzahl, die einem
gro�en Anwenderkreis deswegen nicht bekannt sind, weil deren Anwendung
h�ufig sehr speziell ist. Dazu geh�rt sicherlich das Paket \texttt{gauss.sty},
welches nur sehr spezielle W�nsche erf�llt, die im folgenden an Beispielen
beschrieben werden.
\end{abstract}

\section{Einf�hrung}

Das Gau�sche Eliminationsverfahren zur L�sung linearer Gleichungssysteme
kann als Standardanwendung innerhalb der Naturwissenschaften bezeichnet
werden. \TeX{} ist daf�r bekannt, dass es insbesondere den mathematischen
Zeichensatz hervorragend beherrscht. Dabei kann es in der Darstellung
trotzdem zu erheblichen Problemen kommen, wenn zus�tzliche Erl�uterungen
zu den einzelnen Rechenschritten erforderlich sind.

F�r diesen Fall bietet das Paket \texttt{gauss.sty} eine spezielle
Unterst�tzung. Das Paket kann von jedem beliebigen CTAN-Server heruntergeladen
werden (\url{CTAN:/latex/contrib/other/gauss/gauss.sty}), beispielsweise von
\texttt{ftp.dante.de}. Eine entsprechende ausf�hrliche Dokumentation
mit einem zus�tzlichen Beispiel im Quellcode findet sich ebenfalls
dort. Das Paket wird in der �blichen Art und Weise in einen bestehenden
\TeX{}-Baum eingebunden.

\texttt{gauss.sty} verwendet zum Erstellen der diversen Linienz�ge
ausschlie�lich die picture-Umgebung, sodass eine PDF-Ausgabe ohne
weiteres m�glich ist.


\section{\texttt{gmatrix}-Umgebung}

In Analogie zum \texttt{amsmath.sty}-Paket wird eine Matrixumgebung
zur Verf�gung gestellt, was an sich nichts besonderes ist, wenn man
einmal davon absieht, dass standardm��ig keine Klammerung vorgesehen
ist. Diese kann der Einfachheit halber �ber einen optionalen Parameter
gesetzt werden, der letztlich bestimmt, welche der Matrixumgebungen
von amsmath benutzt wird:

\addtolength{\myVSpace}{0.9cm}

\begin{center}\noindent\begin{tabularx}{1.0\linewidth}{c|X}
Option&
Bedeutung\\
\hline
\texttt{\xstrut} &
\texttt{\textbackslash{}begin\{gmatrix\}} $\rightarrow $ \texttt{\textbackslash{}begin\{matrix\}}
$\rightarrow $ $\begin{gmatrix}
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\texttt{\xstrut} v&
\texttt{\textbackslash{}begin\{gmatrix\}{[}v{]}} $\rightarrow $ \texttt{\textbackslash{}begin\{vmatrix\}}
$\rightarrow $ $\begin{gmatrix}[v]
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\texttt{\xstrut}V&
\texttt{\textbackslash{}begin\{gmatrix\}{[}V{]}} $\rightarrow $ \texttt{\textbackslash{}begin\{Vmatrix\}}
$\rightarrow $ $\begin{gmatrix}[V]
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\texttt{\xstrut}p&
\texttt{\textbackslash{}begin\{gmatrix\}{[}p{]}} $\rightarrow $ \texttt{\textbackslash{}begin\{pmatrix\}}
$\rightarrow $ $\begin{gmatrix}[p]
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\texttt{\xstrut}b&
\texttt{\textbackslash{}begin\{gmatrix\}{[}b{]}} $\rightarrow $ \texttt{\textbackslash{}begin\{bmatrix\}}
$\rightarrow $ $\begin{gmatrix}[b]
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\texttt{\xstrut}B&
\texttt{\textbackslash{}begin\{gmatrix\}{[}B{]}} $\rightarrow $ \texttt{\textbackslash{}begin\{Bmatrix\}}
$\rightarrow $ $\begin{gmatrix}[B]
 1 & 2\\
 3 & 4
\end{gmatrix}$\\
\end{tabularx}\end{center}

Ohne Parameter ist es die einfache Matrixumgebung von \texttt{amsmath.sty}.
Daneben wird noch der Befehl \texttt{\textbackslash{}newmatrix} angeboten,
der es erm�glicht, weitere Umgebungen mit beliebigen Klammern zu definieren,
beispielsweise:

\begin{center}\texttt{\textbackslash{}newmatrix\{{]}\}\{{[}\}\{q\}}
$\rightarrow $ \texttt{\textbackslash{}begin\{gmatrix\}{[}q{]}} $\rightarrow $
\newmatrix{]}{[}{q}
$\begin{gmatrix}[q]
 1 & 2\\
 3 & 4
\end{gmatrix}$\end{center}

Die ersten beiden Parameter geben die Klammerung und der dritte das
Optionsk�rzel an. Es ist offensichtlich, dass als K�rzel \texttt{v,
V, p, b, B} wenig Sinn machen und \texttt{g} nicht zur Verf�gung steht.


\section{Zeilen- und Spaltenmarkierungen}

Die Z�hlung der Zeilen und Spalten beginnt in der linken oberen Ecke
jeweils bei 0, womit der unteren Ecke dann (Zeilenanzahl-1, Spaltenanzahl-1)
zugeordnet wird.

Zeilenmarkierungen werden durch den Befehl \texttt{\textbackslash{}rowops}
und Spaltenoperationen durch \texttt{\textbackslash{}colops} eingeleitet.
F�r die speziellen Markierungen (Operationen) stehen die folgenden
drei Befehle zur Verf�gung

\noindent\begin{tabularx}{1.0\linewidth}{X|X}
Syntax&
Bedeutung\\
\hline
\texttt{\textbackslash{}add{[}<Summand>{]}\{<Z/S>\}\{<Z/S>\}}&
Gibt eine Additionsmarkierung f�r entsprechende Zeilen/Spalten \texttt{<Z/S>}
aus\\
\texttt{\textbackslash{}mult\{<Z/S>\}\{<Faktor>\}}&
Gibt eine Multiplikationsmarkierung f�r entsprechende Zeile/Spalte
\texttt{<Z/S>} aus\\
\texttt{\textbackslash{}swap\{<Z/S>\}\{<Z/S>\}}&
Markiert zwei Zeilen/Spalten \texttt{<Z/S>} durch einen Doppelpfeil\\
\end{tabularx}


\subsection{Beispiele}

In einem linearen Gleichungssystem sollen zwei linear abh�ngige Zeilen
und Spalten in der Koeffizientenmatrix markiert werden:

\begin{minipage}[c]{0.45\linewidth}%
$\begin{gmatrix}[b]
  1   & 2   & -3\\
  0.1 & 0.2 & -1\\
 -0.5 &-1   & \frac{3}{2}
\rowops
\swap{0}{2}
\colops
\swap{0}{1}
\end{gmatrix}$
\end{minipage}%
\hfill{}\begin{minipage}[c]{0.40\linewidth}%
{\setstretch{0.9}\footnotesize
\begin{verbatim}
$\begin{gmatrix}[b]
  1   & 2   & -3\\
  0.1 & 0.2 & -1\\
 -0.5 &-1   & \frac{3}{2}
\rowops
\swap{0}{2}
\colops
\swap{0}{1}
\end{gmatrix}$
\end{verbatim}}
\end{minipage}%


Prinzipiell ist der \texttt{\textbackslash{}swap}-Befehl vorgesehen
um zwei Zeilen/Spalten zu markieren, die in ihrer Anordnung vertauscht
werden sollen.

W�rde man dieses Gleichungssystem in der �blichen Art und Weise, beispielsweise
mit Hilfe der Additionsmethode, in eine Dreiecksform bringen wollen,
so bietet sich das Gau�sche Eliminationsverfahren an. F�r die ersten
beiden Durchg�nge ergibt sich dann:

\begin{minipage}[c]{0.45\linewidth}%
$\begin{gmatrix}[b]
  1   & 2   & -3\\
  0.1 & 0.2 & -1\\
 -0.5 &-1   & \frac{3}{2}
\rowops
\mult{0}{\cdot(-0.1)}
\add{0}{1}
\swap{1}{2}
\end{gmatrix}$\\[2ex]
$\begin{gmatrix}[b]
  1   & 2 & -3\\
 -0.5 &-1 & \frac{3}{2}\\
  0   & 0 & -0.7
\rowops
\mult{0}{\cdot0.5}
\add{0}{1}
\end{gmatrix}$
\end{minipage}%
\hfill{}\begin{minipage}[c]{0.40\linewidth}%
{\setstretch{0.9}\footnotesize
\begin{verbatim}
$\begin{gmatrix}[b]
  1   & 2   & -3\\
  0.1 & 0.2 & -1\\
 -0.5 &-1   & \frac{3}{2}
\rowops
\mult{0}{\cdot(-0.1)}
\add{0}{1}
\swap{1}{2}
\end{gmatrix}$\\[2ex]
..
\end{verbatim}}
\end{minipage}%


Eine komplette Anwendung zeigt das folgende Beispiel, welches das
lineare Gleichungssystem $\vec{A}\cdot \vec{x}=\vec{b}$ l�st:

\begin{equation}
\begin{gmatrix}[b]
1 &-2 & 1 & 2\\
2 & 3 &-2 & 3\\
4 &-1 & 3 &-1\\
3 & 2 &-4 & 5
\end{gmatrix}\cdot%
\begin{gmatrix}[b]
x\\
y\\
z\\
t
\end{gmatrix}=%
\begin{gmatrix}[b]
8\\
14\\
7\\
5
\end{gmatrix}
\end{equation}

\renewcommand\rowmultlabel[1]{%
 |\,\cdot#1%
}
\[
\begin{gmatrix}
1 &-2 & 1 & 2 & & 8 \\ % Zeile 0
2 & 3 &-2 & 3 & & 14\\ % 1
4 &-1 & 3 &-1 & & 7 \\ % 2
3 & 2 &-4 & 5 & & 5 \\ % 3
                    \\
1 &-2 & 1 & 2 & & 8 \\ % 5
0 & 7 &-4 &-1 & &-2 \\ % 6
0 & 7 &-1 &-9 & &-25\\ % 7
0 & 8 &-7 &-1 & &-9 \\ % 8
                    \\
1 &-2 & 1 & 2 & & 8 \\ % 10
0 & 7 &-4 &-1 & &-2 \\ % 11
0 & 0 & 3 &-8 & &-23\\ % 12
0 & 0 &-17& 1 & &-47\\ % 13
                    \\
1 &-2 & 1 & 2 & & 8 \\ % 15
0 & 7 &-4 &-1 & &-2 \\ % 16
0 & 0 & 3 &-8 & &-23\\ % 17
0 & 0 & 0 &-\frac{133}{3}& &\frac{-532}{3}
%
\rowops
\mult{0}{(-2)}\add{0}{1}            % 1. Matrix
\mult{0}{(-4)}\add{0}{2}
\mult{0}{(-3)}\add{0}{3}
%
\mult{6}{(-1)}\add{6}{7}            % 2. Matrix
\mult{6}{(-\frac{8}{7})}\add{6}{8}
%
\mult{12}{\frac{17}{3}}\add{12}{13} % 3. Matrix
\end{gmatrix}
\]

Die vertikale Ausrichtung ist dabei nicht ganz unproblematisch, denn
einerseits muss alles linksb�ndig ausgerichtet sein und andererseits
haben die einzelnen Zellen eine unterschiedliche horizontale Breite.
In solchen F�llen erstellt man am besten nicht vier verschiedene Matrizen,
sondern setzt alles in eine einzige ,,gmatrix{}``-Umgebung und markiert
sich dabei einfach die einzelnen Zeilen:

{%\setstretch{0.9}
\small
\begin{verbatim}
\begin{gmatrix}
1 &-2 & 1 & 2 & & 8 \\ % Zeile 0
2 & 3 &-2 & 3 & & 14\\ % Zeile 1
4 &-1 & 3 &-1 & & 7 \\ % Zeile 2
3 & 2 &-4 & 5 & & 5 \\ % Zeile 3
                    \\
1 &-2 & 1 & 2 & & 8 \\ % Zeile 5
0 & 7 &-4 &-1 & &-2 \\ % Zeile 6
0 & 7 &-1 &-9 & &-25\\ % Zeile 7
0 & 8 &-7 &-1 & &-9 \\ % Zeile 8
                    \\
1 &-2 & 1 & 2 & & 8 \\ % Zeile 10
0 & 7 &-4 &-1 & &-2 \\ % Zeile 11
0 & 0 & 3 &-8 & &-23\\ % Zeile 12
0 & 0 &-17& 1 & &-47\\ % Zeile 13
                    \\
1 &-2 & 1 & 2 & & 8 \\ % Zeile 15
0 & 7 &-4 &-1 & &-2 \\ % Zeile 16
0 & 0 & 3 &-8 & &-23\\ % Zeile 17
0 & 0 & 0 &-\frac{133}{3}& &\frac{-532}{3}
%
\rowops
\mult{0}{(-2)}\add{0}{1}            % 1. Matrix
\mult{0}{(-4)}\add{0}{2}
\mult{0}{(-3)}\add{0}{3}
%
\mult{6}{(-1)}\add{6}{7}            % 2. Matrix
\mult{6}{(-\frac{8}{7})}\add{6}{8}
%
\mult{12}{\frac{17}{3}}\add{12}{13} % 3. Matrix
\end{gmatrix}
\end{verbatim}}

Schwieriger wird es, wenn zus�tzlich eine Klammerung und Nummerierung
der einzelnen Teilmatrizen gew�nscht wird. In diesem Fall kann auf
die bekannte \texttt{tabular}-Umgebung zur�ckgegriffen werden, wobei
nur eine Spalte definiert wird.

\begin{tabular}{p{\columnwidth}}
\begin{equation}
 \begin{gmatrix}[p]
  1 &-2 & 1 & 2 \\ % Zeile 0
  2 & 3 &-2 & 3 \\ % 1
  4 &-1 & 3 &-1 \\ % 2
  3 & 2 &-4 & 5    % 3
 \rowops
 \mult{0}{(-2)}\add{0}{1}
 \mult{0}{(-4)}\add{0}{2}
 \mult{0}{(-3)}\add{0}{3}
 \end{gmatrix}
\end{equation}
\\ % Ende 1. Matrix
\begin{equation}
 \begin{gmatrix}[p]
  1 &-2 & 1 & 2 \\ % Zeile 0
  0 & 7 &-4 &-1 \\ % 1
  0 & 7 &-1 &-9 \\ % 2
  0 & 8 &-7 &-1    % 3
 \rowops
 \mult{1}{(-1)}\add{1}{2}
 \mult{1}{(-\frac{8}{7})}\add{1}{3}
 \end{gmatrix}
\end{equation}
\end{tabular}


{%\setstretch{0.9}
\small
\begin{verbatim}
\begin{tabular}{p{\columnwidth}}
\begin{equation}
 \begin{gmatrix}[p]
  1 &-2 & 1 & 2 \\ % Zeile 0
  2 & 3 &-2 & 3 \\ % 1
  4 &-1 & 3 &-1 \\ % 2
  3 & 2 &-4 & 5    % 3
 \rowops
 \mult{0}{(-2)}\add{0}{1}
 \mult{0}{(-4)}\add{0}{2}
 \mult{0}{(-3)}\add{0}{3}
 \end{gmatrix}
\end{equation}
\\ % Ende 1. Matrix
\begin{equation}
 \begin{gmatrix}[p]
  1 &-2 & 1 & 2 \\ % Zeile 0
  0 & 7 &-4 &-1 \\ % 1
  0 & 7 &-1 &-9 \\ % 2
  0 & 8 &-7 &-1    % 3
 \rowops
 \mult{1}{(-1)}\add{1}{2}
 \mult{1}{(-\frac{8}{7})}\add{1}{3}
 \end{gmatrix}
\end{equation}
\end{tabular}
\end{verbatim}}

Insbesondere die \texttt{mult}-Funktion kann auch f�r normale Gleichungsumformungen
benutzt werden, wenn man diese innerhalb der \texttt{gmatrix}-Umgebung
beschreibt.

\renewcommand\rowmultlabel[1]{\left|\,#1\right.}
\begin{equation}\label{schwingkreis}
 \begin{gmatrix}
   \displaystyle%
   \frac{1}{C}\int i\cdot dt+L\cdot\frac{di}{dt}+R\cdot i\hfill & = & 0\\
   \displaystyle%
   \frac{1}{C}\cdot i+L\cdot\frac{d^2i}{dt^2}+R\cdot\frac{di}{dt}\hfill & = &0\\
   \displaystyle%
   \frac{d^2i}{dt^2}+\frac{R}{L}\cdot\frac{di}{dt}+\frac{1}{LC}\cdot i\hfill & = & 0\\
   \\
   \displaystyle%
   \ddot{i}+\delta\dot{i}+\omega_0^2i\hfill & = &0
 \rowops
 \mult{0}{\mbox{Differentiation}}
 \mult{1}{:L\mbox{ und sortieren}}
 \mult{2}{\displaystyle\frac{R}{L}=\delta;\ \frac{1}{LC}=\omega_0^2}
 \end{gmatrix}
\end{equation}


Gl.\ref{schwingkreis} ergibt sich durch folgende Befehlssequenzen,
wobei der erste Befehl im folgenden Abschnitt beschrieben wird:

{%\setstretch{0.9}
\footnotesize
\begin{verbatim}
\renewcommand\rowmultlabel[1]{\left|\,#1\right.}
\begin{equation}
   \displaystyle%
   \frac{1}{C}\int i\cdot dt+L\cdot\frac{di}{dt}+R\cdot i\hfill & = & 0\\
   [ ... ]
   \displaystyle%
   \ddot{i}+\delta\dot{i}+\omega_0^2i\hfill & = &0
 \rowops
 \mult{0}{\mbox{Differentiation}}
 \mult{1}{:L\mbox{ und sortieren}}
 \mult{2}{\displaystyle\frac{R}{L}=\delta;\ \frac{1}{LC}=\omega_0^2}
 \end{gmatrix}
\end{equation}
\end{verbatim}}


\section{Weitere Funktionen}

Das Paket \texttt{gauss} gestattet die Neudefinition der Label f�r
die Additions- bzw. Multiplikationsmarkierungen, sodass beispielsweise
ein Multiplikationspunkt standardm��ig gesetzt werden kann.

\begin{verbatim}
\renewcommand{\rowmultlabel}[1]{|\,\cdot#1}
\end{verbatim}

F�r die Zeilen und Spalten gibt es dabei unterschiedliche Label, die
in der �blichen Weise �berschrieben werden k�nnen.

\begin{verbatim}
\rowaddlabel
\rowmultlabel
\coladdlabel
\colmultlabel
\end{verbatim}


\section{Hinweise}

Bei der Anwendung der gmatrix-Umgebung ist im wesentlichen nur zu
beachten, dass die letzte Zeile keinen \texttt{\textbackslash{}\textbackslash{}}-Befehl
aufweisen darf. Die letzte Zeile wird auch f�r die Berechnung der
einzelnen Spaltenbreiten herangezogen, woraus folgt, dass alle Spalten
vorhanden sein m�ssen. Die jeweilige H�he einer Zeile orientiert sich
nur an der H�he der einzelnen Spalten, nicht jedoch an der H�he der
Label.

Es ist grunds�tzlich darauf zu achten, dass bei gleichzeitiger Verwendung
von \texttt{amsmath.sty} dieses vor \texttt{gauss.sty} geladen wird.


\address{Herbert}{Vo�}{Wasgenstr. 21\\14129 Berlin\\[email protected]}