diff options
118 files changed, 6325 insertions, 1769 deletions
diff --git a/buch/chapters/00-einleitung/chapter.tex b/buch/chapters/00-einleitung/chapter.tex index f673aa4..e4e58ee 100644 --- a/buch/chapters/00-einleitung/chapter.tex +++ b/buch/chapters/00-einleitung/chapter.tex @@ -14,17 +14,23 @@ Die Geometrie studiert zum Beispiel Objekte wie Punkte, Geraden, Kreise und deren Beziehungen untereinander, die man definieren kann ganz ohne das Wissen, was eine Zahl ist. Apollonius von Perga (262--190 BCE) hat in seinem Buch über Kegelschnitte +\index{Apollonius von Perga}% +\index{Perga, Appollonius von}% als erster einen algebraischen Zusammenhang zwischen Zahlen festgestellt, die man also die Vorläufer heutiger Koordinaten eines Punktes ansehen könnte. -Erst im 16.~Jahrhundert entwickelte sich die Algebra allerdings weit genug, +Erst im 16.~Jahrhundert entwickelte sich die Algebra weit genug, dass eine Algebraisierung der Geometrie möglich wurde. Pierre de Fermat \index{Fermat, Pierre de}% und René Descartes \index{Descartes, René}% schufen die sogenannte {\em analytische Geometrie}. +\index{analytische Geometrie}% +\index{Geometrie, analytische}% Das rechtwinklige Koordinatensystem, nach Descartes auch karteisches Koordinatensystem genannt, beschreibt Punkte als Zahlenpaare $(x,y)$ +\index{kartesisches Koordinatensystem}% +\index{Koordinatensystem, kartesisches}% und Kurven in der Ebene durch ihre Gleichungen. Geraden können als Graphen der Funktion $f(x) = ax+b$ oder als Lösungsmenge linearer Gleichungen wie $ax+by=c$ verstanden werden. @@ -46,7 +52,7 @@ x^2+(y-1)^2=4 einen Kreis mit Radius $2$ um den Punkt $(0,1)$. Der Kreis hat natürlich zwei Schnittpunkte mit der $x$-Achse, wie mit jeder Gerade, deren Abstand vom Mittelpunkt des Kreises kleiner ist als der Radius. -Schnittpunkte haben die Koordinaten $(x_S,0)$ und $x_S$ muss die +Die Schnittpunkte haben die Koordinaten $(x_S,0)$ und $x_S$ muss die Gleichung \[ x_S^2 + (0-1)^2 = x_S^2+1=4 @@ -54,11 +60,14 @@ x_S^2 + (0-1)^2 = x_S^2+1=4 x_S^2=3 \] erfüllen. +\index{rationale Zahlen}% Eine solche Lösung ist nicht möglich, wenn man sich auf rationale Koordinaten $x_S\in\mathbb{Q}$ beschränkt, die Erweiterung auf reelle Zahlen ist notwendig. +\index{reelle Zahlen}% Kapitel~\ref{buch:chapter:zahlen} übernimmt die Aufgabe, die Zahlensysteme +\index{Zahlensysteme}% klar zu definieren und ihre wichtigsten Eigenschaften zusammenzutragen. Sie bilden das Fundament aller folgenden Konstruktionen. @@ -69,12 +78,13 @@ Die Zahl $\alpha=\sqrt{2}$ ist ja nur ein Objekt, mit dem gerechnet werden kann wie mit jeder anderen Zahl, welche aber die zusätzliche Rechenregel $\alpha^2=2$ erfüllt. Die Erweiterung von $\mathbb{R}$ zu den komplexen Zahl verlangt nur, +\index{komplexe Zahlen}% dass man der Menge $\mathbb{R}$ ein neues algebraisches Objekt $i$ hinzufügt, welches als spezielle Eigenschaft die Gleichung $i^2=-1$ hat. Bei $\sqrt{2}$ hat die geometrische Anschauung suggeriert, dass es eine solche Zahl ``zwischen'' den rationalen Zahlen gibt, aber für $i$ gibt es keine solche Anschauung. -Die imaginäre Einheit $i$ erhielt daher auch diesen durchaus +Die imaginäre Einheit $i$ erhielt daher von Descartes auch diesen durchaus abwertend gemeinten Namen. Die Zahlensysteme lassen sich also verstehen als einfachere Zahlensysteme, @@ -89,6 +99,7 @@ erfüllen will, auch einfach wieder die Existenz des neuen Objektes postulieren? Komplexen Zahlen und Matrizen zeigen, wie das gehen könnte. +\index{Matrizen}% Indem man vier rationale Zahlen als $2\times 2$-Matrix in der Form \[ A= @@ -181,7 +192,7 @@ die Menge der Matrizen a,b\in\mathbb{Q} \right\} \] -verhält sich daher genau so wie die Menge der rationalen Zahlen, denen +verhält sich daher genau so wie die Menge der rationalen Zahlen, der man ein ``imaginäres'' neues Objekt $\!\sqrt{2}$ hinzugefügt hat. Matrizen sind also ein Werkzeug, mit dem sich ein algebraisches Systeme @@ -199,24 +210,33 @@ einzelnen Objektes, sowohl $\sqrt{2}$ wie auch $i$ sind Lösungen einer Polynomgleichung. Eine besondere Rolle spielen in der Mathematik die Symmetrien. +\index{Symmetrie}% Eine der frühesten Anwendungen dieses Gedankens in der Algebra war die Überlegung, dass sich die Nullstellen einer Polynomgleichung permutieren lassen. Die Idee der Permutationsgruppe taucht auch in algebraischen Konstruktionen wie der Determinanten auf. +\index{Permutation}% +\index{Permutationsgruppe}% +\index{Determinante}% Tatsächlich lassen sich Permutationen auch als Matrizen schreiben und die Rechenregeln für Determinanten sind ein direktes Abbild gewisser Eigenschaften von Transpositionen. +\index{Transposition}% Einmal mehr haben Matrizen ermöglicht, ein neues Konzept in einer bekannten Sprache auszudrücken. Die Darstellungstheorie ist das Bestreben, nicht nur Permutationen, +\index{Darstellungstheorie}% sondern beliebige Gruppen von Symmetrien als Mengen von Matrizen darzustellen. Die abstrakten Symmetriegruppen erhalten damit immer konkrete Realisierungen als Matrizenmengen. Auch kompliziertere Strukturen wie Ringe, Körper oder Algebren lassen sich mit Matrizen realisieren. +\index{Ring}% +\index{Körper}% +\index{Algebra}% Aber die Idee ist nicht auf die Geometrie beschränkt, auch analytische oder kombinatorische Eigenschaften lassen sich in Matrizenstrukturen abbilden und damit neuen rechnerischen Behandlungen zugänglich @@ -225,8 +245,10 @@ machen. Das Kapitel~\ref{buch:chapter:homologie} illustriert, wie weit dieser Plan führen kann. Die Konstruktion der Homologiegruppen zeigt, wie sich die Eigenschaften -der Gestalt gewisser geometrischer Strukturen zunächst mit Matrizen, -die kombinatorische Eigenschaften beschreiben, ausdrücken lassen. +\index{Homologiegruppe}% +der Gestalt gewisser geometrischer Strukturen zunächst mit Matrizen +ausdrücken lassen, +die kombinatorische Eigenschaften beschreiben. Anschliessend können daraus wieder algebraische Strukturen gewonnen werden. Gestalteigenschaften werden damit der rechnerischen Untersuchung zugänglich. diff --git a/buch/chapters/05-zahlen/chapter.tex b/buch/chapters/05-zahlen/chapter.tex index 56ef096..962dae4 100644 --- a/buch/chapters/05-zahlen/chapter.tex +++ b/buch/chapters/05-zahlen/chapter.tex @@ -11,7 +11,8 @@ Das Thema dieses Buches ist die Konstruktion interessanter mathematischer Objekte mit Hilfe von Matrizen. Die Einträge dieser Matrizen sind natürlich Zahlen. -Wir wollen von diesen grundlegenden Bausteinen ausgehen. +Wir wollen von den bekannten Zahlmengen als grundlegenden +Bausteinen ausgehen. Dies schliesst natürlich nicht aus, dass man auch Zahlenmengen mit Hilfe von Matrizen beschreiben kann, wie wir es später für die komplexen Zahlen machen werden. diff --git a/buch/chapters/05-zahlen/ganz.tex b/buch/chapters/05-zahlen/ganz.tex index fab2dcb..d86e225 100644 --- a/buch/chapters/05-zahlen/ganz.tex +++ b/buch/chapters/05-zahlen/ganz.tex @@ -31,6 +31,7 @@ Die Rechenoperationen sind wie folgt definiert: Die Darstellung ganzer Zahlen als Paare von natürlichen Zahlen findet man auch in der Buchhaltung, wo man statt eines Vorzeichen {\em Soll} und {\em Haben} verwendet. +\index{Soll und Haben}% Dabei kommt es nur auf die Differenz der beiden Positionen an. Fügt man beiden Positionen den gleichen Betrag hinzu, ändert sich nichts. @@ -44,8 +45,8 @@ Zum Beispiel ist $0=1+(-1) = (1,0) + (0,1) = (1,1)$. Die Paare $(u,u)$ müssen daher alle mit $0$ identifiziert werden. Es folgt dann auch, dass alle Paare von natürlichen Zahlen mit ``gleicher Differenz'' den gleichen ganzzahligen Wert darstellen, -allerdings können wir das nicht so formulieren, da ja die Differenz -noch gar nicht definiert ist. +allerdings können wir das nicht so formulieren, da ja der Begriff +der Differenz noch gar nicht definiert ist. Stattdessen gelten zwei Paare als äquivalent, wenn \begin{equation} (a,b) \sim (c,d) @@ -66,8 +67,9 @@ Zahlen mit der Eigenschaft a+b' = a'+b. \] Man nennt eine solche Menge eine {\em Äquivalenzklasse} der Relation $\sim$. - +\index{Äquivalenzklasse} Die Menge $\mathbb{Z}$ der {\em ganzen Zahlen} ist die Menge aller solchen +\index{ganze Zahlen}% Äquivalenzklassen. Die Menge der natürlichen Zahlen $\mathbb{N}$ ist in evidenter Weise darin eingebettet als die Menge der Äquivalenzklassen von Paaren der @@ -79,12 +81,16 @@ stellt das Paar $(b,a)$ eine ganze Zahl dar mit der Eigenschaft \begin{equation} z+(b,a) = -(a,b) + (b+a) = (a+b,a+b) \sim (0,0) = 0. +(a,b) + (b+a) = (a+b,a+b) \sim (0,0) = 0 \label{buch:zahlen:eqn:entgegengesetzt} \end{equation} +dar. Die von $(b,a)$ dargestellte ganze Zahl wird mit $-z$ bezeichnet, die Rechnung~\eqref{buch:zahlen:eqn:entgegengesetzt} lässt sich damit abgekürzt als $z+(-z)=0$ schreiben. +$-z$ heisst der $z$ {\em entgegengesetzte Wert} oder die +\index{entgegengesetzte Zahl}% +{\em entgegengesetzte Zahl} zu $z$. \subsubsection{Lösung von Gleichungen} Gleichungen der Form $a=x+b$ können jetzt für beliebige ganze Zahlen @@ -102,21 +108,27 @@ $a-b = (a,0) + (-(b,0)) = (a,0) + (0,b) = (a,b)$ schreibt. \subsubsection{Ring} \index{Ring}% -Die ganzen Zahlen sind ein Beispiel für einen sogenannten Ring, +Die ganzen Zahlen sind ein Beispiel für einen sogenannten {\em Ring}, +\index{Ring}% eine algebraische Struktur in der Addition, Subtraktion und Multiplikation definiert sind. -Weitere Beispiel werden später vorgestellt, +Weitere Beispiele von Ringen werden später vorgestellt, +darunter der Ring der Polynome $\mathbb{Z}[X]$ in Kapitel~\ref{buch:chapter:polynome} +\index{Polynomring}% +\index{ZX@$\mathbb{Z}[X]$} und der Ring der $n\times n$-Matrizen in +\index{Matrizenring}% Kapitel~\ref{buch:chapter:vektoren-und-matrizen}. In einem Ring wird nicht verlangt, dass die Multiplikation kommutativ -ist, Matrizenringe sind nicht kommutativ. -$\mathbb{Z}$ ist ein kommutativer Ring ebenso sind die Polynomringe +ist, Matrizenringe zum Beispiel sind meistens nicht kommutativ, selbst +wenn die Matrixelemente Elemente eines kommutativen Rings sind. +$\mathbb{Z}$ ist ein kommutativer Ring, ebenso sind die Polynomringe kommutativ. Die Theorie der nicht kommutativen Ringe ist sehr viel reichhaltiger und leider auch komplizierter als die kommutative Theorie. -\index{Ring!kommutativer}% +\index{Ring!kommutativ}% diff --git a/buch/chapters/05-zahlen/komplex.tex b/buch/chapters/05-zahlen/komplex.tex index 4ccea89..0f7e7f7 100644 --- a/buch/chapters/05-zahlen/komplex.tex +++ b/buch/chapters/05-zahlen/komplex.tex @@ -6,7 +6,8 @@ \section{Komplexe Zahlen \label{buch:section:komplexe-zahlen}} \rhead{Komplexe Zahlen} -In den reellen Zahlen lassen sich viele algebraische Gleichungen lösen. +In den reellen Zahlen lassen sich viele algebraische Gleichungen lösen, +die in $\mathbb{Q}$ nicht lösbar waren. Andere, z.~B.~die Gleichung \begin{equation} x^2+1=0, @@ -15,6 +16,7 @@ x^2+1=0, haben weiterhin keine Lösung. Der Grund dafür ist das Bestreben bei der Konstruktion der reellen Zahlen, die Ordnungsrelation zu erhalten. +\index{Ordnungsrelation}% Diese ermöglicht, Näherungsintervall und Intervallschachtelungen zu definieren. @@ -37,16 +39,18 @@ Die erste Komponente soll die bekannten reellen Zahlen darstellen, deren Quadrat positiv ist. Die zweite Komponente soll für die Zahlen verwendet werden, deren Quadrat negativ ist. -Die Zahl, deren Quadrat $-1$ sein soll, bezeichnen wir auch mit dem +Die Zahl, deren Quadrat $-1$ sein soll, bezeichnen wir mit dem Paar $(0,1)$ und schreiben dafür auch $i=(0,1)$ mit $i^2=-1$. +Das Paar $i=(0,1)$ heisst auch die {\em imaginäre Einheit}. +\index{imaginäre Einheit}% Die Rechenregeln sollen weiterhin erhalten bleiben, sie müssen daher wie folgt definiert werden: \begin{equation} \begin{aligned} -(a,b) + (c,d) &= (a+c,b+d) & (a+bi) + (c+di) &= (a+c) + (b+d)i +(a,b) + (c,d) &= (a+c,b+d) &&& (a+bi) + (c+di) &= (a+c) + (b+d)i \\ -(a,b) \cdot (c,d) & (ad-bd, ad+bc) & (a+bi)\cdot(c+di) &= ac-bd + (ad+bc)i. +(a,b) \cdot (c,d) &= (ad-bd, ad+bc) &&& (a+bi)\cdot(c+di) &= ac-bd + (ad+bc)i. \end{aligned} \label{buch:zahlen:cregeln} \end{equation} @@ -65,8 +69,10 @@ Die Menge $\mathbb{C}$ verhält sich daher wie eine zweidimensionaler reeller Vektorraum. \subsubsection{Real- und Imaginärteil} -Ist $z=a+bi$ eine komplexe Zahl, dann heisst $a$ der Realteil $a=\Re z$ -und $b$ heisst der Imaginärteil $\Im z$. +Ist $z=a+bi$ eine komplexe Zahl, dann heisst $a$ der {\em Realteil} $a=\Re z$ +\index{Realteil}% +und $b$ heisst der {\em Imaginärteil} $\Im z$. +\index{Imaginärteil}% Real- und Imaginärteil sind lineare Abbildungen $\mathbb{C}\to\mathbb{R}$, sie projizieren einen Punkt auf die Koordinatenachsen, die entsprechend auch die reelle und die imaginäre Achse heissen. @@ -86,13 +92,43 @@ a \Re z. \] Zusätzlich kehrt das Vorzeichen der einen Komponente. -Wir kommen auf diese Eigenschaft zurück, wenn wir später in Abschnitt~XXX +Wir kommen auf diese Eigenschaft zurück, wenn wir später in +Abschnitt~\ref{buch:grundlagen:subsection:ringe} komplexe Zahlen als Matrizen beschreiben. +\subsubsection{Gausssche Zahlenebene} +Beschränkt man die Multiplikation auf einen reellen Faktor, wird $\mathbb{C}$ +zu einem zweidimensionalen reellen Vektorraum. +Man kann die komplexe Zahl $a+bi$ daher auch als Punkt $(a,b)$ in der +sogenannten {\em Gaussschen Ebene} betrachten (Abbildung~\ref{buch:zahlen:cfig}). +\index{Gaussche Zahlenebene}% +Die Addition von komplexen Zahlen ist in diesem Bild die vektorielle +Addition, die Multiplikation mit reellen Zahlen werden wir weiter unten +genauer untersuchen müssen. + +\begin{figure} +\centering +\includegraphics{chapters/05-zahlen/images/komplex.pdf} +\caption{Argument und Betrag einer komplexen Zahl $z=a+ib$ in der +Gaussschen Zahlenebene +\label{buch:zahlen:cfig}} +\end{figure}% + +Die Zahlenebene führt auf eine weitere mögliche Parametrisierung einer +komplexen Zahl. +Ein Punkt $z$ der Ebene kann in Polarkoordinaten auch durch den {\em Betrag} +\index{Betrag}% +\index{Polarkoordinaten}% +und den Winkel zwischen der reellen Achse und dem Radiusvektor zum Punkt, +dem sogenannten {\em Argument}, +charakterisiert werden. + \subsubsection{Komplexe Konjugation} Der komplexen Zahl $u=a+bi$ ordnen wir die sogenannte {\em komplex konjugierte} Zahl $\overline{z} = a-bi$. Mit Hilfe der komplexen Konjugation kann man den Real- und Imaginärteil +\index{komplexe Konjugation}% +\index{Konjugation, komplexe}% algebraisch ausdrücken: \[ \Re z @@ -124,7 +160,8 @@ Wenn $x\ge 0$ ist und $x\le 0$, dann ist $x=0$. In $\mathbb{C}$ steht diese Ordnungsrelation nicht mehr zur Verfügung. Eine komplexe Zahl ist von $0$ verschieden, wenn die Länge des Vektors in der Zahlenebene verschieden von $0$ ist. -Wir definieren daher den Betrag einer komplexen Zahl $z=a+bi$ als +Wir definieren daher den {\em Betrag} einer komplexen Zahl $z=a+bi$ als +\index{Betrag} \[ |z|^2 = @@ -158,7 +195,7 @@ Produkt der komplexen Zahlen sein. Wie berechnet man den Quotienten $\frac{z}{w}$ für zwei beliebige komplexe Zahlen $z=a+bi$ und $w=c+di$ mit $w\ne 0$? -Dazu erweitert man den Bruch mit der komplex konjugierten des Nenners: +Dazu erweitert man den Bruch mit der komplex Konjugierten des Nenners: \begin{align*} \frac{z}{w} &= @@ -169,7 +206,7 @@ Dazu erweitert man den Bruch mit der komplex konjugierten des Nenners: Da der Nenner $|w|^2>0$ eine reelle Zahl ist, ist die Division einfach, es ist die Multiplikation mit der reellen Zahl $1/|w|^2$. -Wir können den Quotienten auch in Komponenten ausdrücken: +Wir können den Quotienten auch durch Real- und Imaginärteil ausdrücken: \begin{align*} \frac{z}{w} &= @@ -180,38 +217,20 @@ Wir können den Quotienten auch in Komponenten ausdrücken: \frac{ac-bd +(ad+bc)i}{c^2+d^2}. \end{align*} -\subsubsection{Gausssche Zahlenebene} -Beschränkt man die Multiplikation auf einen reellen Faktor, wird $\mathbb{C}$ -zu einem zweidimensionalen reellen Vektorraum. -Man kann die komplexe Zahl $a+bi$ daher auch als Punkt $(a,b)$ in der -sogenannten Gaussschen Ebene betrachten. -Die Addition von komplexen Zahlen ist in diesem Bild die vektorielle -Addition, die Multiplikation mit reellen Zahlen werden wir weiter unten -genauer untersuchen müssen. - -\begin{figure} -\centering -\includegraphics{chapters/05-zahlen/images/komplex.pdf} -\caption{Argument und Betrag einer komplexen Zahl $z=a+ib$ in der -Gaussschen Zahlenebene -\label{buch:zahlen:cfig}} -\end{figure} -Die Zahlenebene führt auf eine weitere Parametrisierung einer -komplexen Zahl. -Ein Punkt $z$ der Ebene kann in Polarkoordinaten auch durch den Betrag -und den Winkel zwischen der reellen Achse und dem Radiusvektor zum Punkt -beschrieben werden. - \subsubsection{Geometrische Interpretation der Rechenoperationen} -Die Addition kompelxer Zahlen wurde bereits als Vektoraddition -in der Gausschen Zahlenebene. +Die Addition komplexer Zahlen wurde bereits als Vektoraddition +in der Gausschen Zahlenebene interpretiert. Die Multiplikation ist etwas komplizierter, wir berechnen Betrag und Argument von $zw$ separat. Für den Betrag erhalten wir \begin{align*} |zw|^2 &= +zw\overline{(zw)} += +zw\overline{z}\overline{w} += z\overline{z}w\overline{w} = |z|^2|w|^2 @@ -252,6 +271,7 @@ und $c\ne 0$, was uns ermöglicht, den Bruch durch $ac$ zu kürzen: \bigr). \end{align*} Im letzten Schritt haben wir die Additionsformel für den Tangens verwendet. +\index{Additionstheorem für Tangens}% Daraus liest man ab, dass das Argument eines Produkts die Summe der Argumente ist. Die Multiplikation mit einer festen komplexen Zahl führt also mit der ganzen @@ -263,7 +283,7 @@ wenn wir die komplexen Zahlen als Matrizen beschreiben wollen. Die komplexen Zahlen $\mathbb{C}$ sind als Erweiterung von $\mathbb{R}$ so konstruiert worden, dass die Gleichung $x^2+1=0$ eine Lösung hat. Etwas überraschend ist dagegen, dass in dieser Erweiterung jetzt jede -beliebige algebraische Gleichung lösbar geworden. +beliebige algebraische Gleichung lösbar geworden ist. Dies ist der Inhalt des Fundamentalsatzes der Algebra. \begin{satz}[Fundamentalsatz der Algebra] @@ -273,7 +293,7 @@ Jede algebraische Gleichung der Form p(x)=x^n + a_{n-1}x^{n-1}+a_1x+a_0=0,\qquad a_k\in\mathbb{C} \] mit komplexen Koeffizienten hat $n$ möglicherweise mit Vielfachheit -gezähle Nullstellen $\alpha_1,\dots,\alpha_m$, d.~h.~das Polynom $p(x)$ +gezählte Nullstellen $\alpha_1,\dots,\alpha_m$, d.~h.~das Polynom $p(x)$ lässt sich in Linearfaktoren \[ p(x) @@ -281,12 +301,12 @@ p(x) (x-\alpha_1)^{k_1}(x-\alpha_2)^{k_2}\cdot\ldots\cdot(x-\alpha_m)^{k_m} \] zerlegen, wobei $k_1+k_2+\dots+k_m=n$. -Die Zahlen $k_j$ heisst die {\em Vielfachheit} der Nullstelle $\alpha_j$. +Die Zahl $k_j$ heisst die {\em Vielfachheit} der Nullstelle $\alpha_j$. \end{satz} Der Fundamentalsatz der Algebra wurde erstmals von Carl Friedrich Gauss \index{Gauss, Carl Friedrich}% -bewiesen. +vollständig bewiesen. Seither sind viele alternative Beweise mit Methoden aus den verschiedensten Gebieten der Mathematik gegeben worden. Etwas salopp könnten man sagen, dass der Fundamentalsatz ausdrückt, dass @@ -304,10 +324,11 @@ Da Drehungen um verschiedene Achsen nicht vertauschen, kann eine solche Erweiterung nicht mehr kommutativ sein. William Rowan Hamilton propagierte ab 1843 eine Erweiterung von $\mathbb{C}$ +\index{Hamilton, William Rowan}% mit zwei zusätzlichen Einheiten $j$ und $k$ mit den nichtkommutativen Relationen \begin{equation} -i^2 = j^2 = k^2 = ijk = -1. +i^2 = j^2 = k^2 = i\!jk = -1. \label{buch:zahlen:eqn:quaternionenregeln} \end{equation} Er nannte die Menge aller Linearkombinationen @@ -319,6 +340,9 @@ die {\em Quaternionen}, die Einheiten $i$, $j$ und $k$ heissen auch Einheitsquaternionen. \index{Einheitsquaternionen}% Konjugation, Betrag und Division können ganz ähnlich wie bei den +\index{Konjugation von Quaternionen}% +\index{Betrag einer Quaternion}% +\index{Division durch eine Quaternion}% komplexen Zahlen definiert werden und machen $\mathbb{H}$ zu einer sogenannten {\em Divisionsalgebra}. \index{Divisionsalgebra}% @@ -331,24 +355,24 @@ Aus den Regeln für die Quadrate der Einheiten in $i^{-1}=-i$, $j^{-1}=-j$ und $k^{-1}=-k$. Die letzte Bedingung liefert daraus \[ -ijk=-1 +i\!jk=-1 \qquad\Rightarrow\qquad \left\{ \quad \begin{aligned} -ij +i\!j &= -ijkk^{-1}=-1k^{-1}=k +i\!jkk^{-1}=-1k^{-1}=k \\ -i^2jk&=-i=-jk +i^2\!jk&=-i=-jk \\ -j^2k&=-ji=k \end{aligned} \right. \] Aus den Relationen~\eqref{buch:zahlen:eqn:quaternionenregeln} -folgt also insbesondere auch, dass $ij=-ji$. -Ebenso kann abgeleitet werden, dass $jk=-kj$ und $ik=-ki$. +folgt also insbesondere auch, dass $i\!j=-ji$. +Ebenso kann abgeleitet werden, dass $jk=-k\!j$ und $ik=-ki$. Man sagt, die Einheiten sind {\em antikommutativ}. \index{antikommutativ}% @@ -358,9 +382,15 @@ Komponenten $a_0,\dots,a_3$ vollständig beschrieben ist. Eine Transformationsmatrix des dreidimensionalen Raumes enthält dagegen neun Koeffizienten, die vergleichsweise komplizierte Abhängigkeiten erfüllen müssen. +Kapitel~\ref{chapter:clifford} behandelt nicht nur die Beschreibung +von Drehungen des dreidimensionalen Raumes sondern eine weitreichende +Verallgemeinerung dieser Idee, die sogenannte {\em geometrische Algebra}. +\index{geometrische Algebra}% Quaternionen haben auch in weiteren Gebieten interessante Anwendungen, zum Beispiel in der Quantenmechanik, wo antikommutierende Operatoren +\index{Quantenmechanik}% bei der Beschreibung von Fermionen eine zentrale Rolle spielen. +\index{Fermion}% Aus rein algebraischer Sicht kann man die Frage stellen, ob es eventuell auch noch grössere Divisionsalgebren gibt, die $\mathbb{H}$ erweitern. diff --git a/buch/chapters/05-zahlen/natuerlich.tex b/buch/chapters/05-zahlen/natuerlich.tex index f378aaf..4036327 100644 --- a/buch/chapters/05-zahlen/natuerlich.tex +++ b/buch/chapters/05-zahlen/natuerlich.tex @@ -9,7 +9,7 @@ \rhead{Natürliche Zahlen} Die natürlichen Zahlen sind die Zahlen, mit denen wir zählen. \index{natürliche Zahlen}% -\index{$\mathbb{N}$}% +\index{N@$\mathbb{N}$}% Sie abstrahieren das Konzept der Anzahl der Elemente einer endlichen Menge. Da die leere Menge keine Elemente hat, muss die Menge der natürlichen @@ -24,22 +24,25 @@ Wir schreiben \] \subsubsection{Peano-Axiome} -Man kann den Zählprozess durch die folgenden Axiome von Peano beschreiben: +\index{Peano}% +Man kann den Zählprozess durch die folgenden Axiome von Peano genauer fassen: \index{Peano-Axiome}% \begin{enumerate} -\item $0\in\mathbb N$. +\item $0$ ist eine natürliche Zahl: $0\in\mathbb N$. \item Jede Zahl $n\in \mathbb{N}$ hat einen {\em Nachfolger} $n'\in \mathbb{N}$. \index{Nachfolger}% \item $0$ ist nicht Nachfolger einer Zahl. \item Wenn zwei Zahlen $n,m\in\mathbb{N}$ den gleichen Nachfolger haben, -$n'=m'$, dann sind sie gleich $n=m$. +$n'=m'$, dann sind sie gleich: $n=m$. \item Enthält eine Menge $X$ die Zahl $0$ und mit jeder Zahl auch ihren Nachfolger, dann ist $\mathbb{N}\subset X$. \end{enumerate} \subsubsection{Vollständige Induktion} -Es letzte Axiom formuliert das Prinzip der vollständigen Induktion. +Es letzte Axiom formuliert das Prinzip der {\em vollständigen Induktion}. +\index{vollständige Induktion}% +\index{Induktion, vollständige}% Um eine Aussage $P(n)$ für alle natürlichen Zahlen $n$ mit vollständiger Induktion zu beweisen, bezeichnet man mit $X$ die Menge aller Zahlen, für die $P(n)$ wahr ist. @@ -77,11 +80,13 @@ Nach diesen Regeln ist (((5)')')'. \] Dies ist genau die Art und Weise, wie kleine Kinder Rechnen lernen. -Sie Zählen von $5$ ausgehend um $3$ weiter. +Sie zählen von $5$ ausgehend um $3$ weiter, manchmal unter Zuhilfenahme +ihrer Finger. Der dritte Nachfolger von $5$ heisst üblicherweise $8$. Die algebraische Struktur, die hier konstruiert worden ist, heisst -eine Halbgruppe. +ein {\em Monoid}. +\index{Monoid}% Allerdings kann man darin zum Beispiel nur selten Gleichungen lösen, zum Beispiel hat $3+x=1$ keine Lösung. Die Addition ist nicht immer umkehrbar. @@ -142,9 +147,9 @@ a+(b+c) \qquad\text{und}\qquad (a\cdot b)\cdot c = -a\cdot (b\cdot c) +a\cdot (b\cdot c), \] -dies ist das Assoziativgesetz. +dies ist das {\em Assoziativgesetz}. Es gestattet auch eine solche Summe oder ein solches Produkt einfach als $a+b+c$ bzw.~$a\cdot b\cdot c$ zu schreiben, da es ja keine Rolle spielt, in welcher Reihenfolge man die Teilprodukte berechnet. @@ -152,10 +157,11 @@ spielt, in welcher Reihenfolge man die Teilprodukte berechnet. Die Konstruktion der Multiplikation als iterierte Addition mit Hilfe der Rekursionsformel \eqref{buch:zahlen:multiplikation-rekursion} hat auch zur Folge, dass die {\em Distributivgesetze} +\index{Distributivgesetz}% \[ a\cdot(b+c) = ab+ac \qquad\text{und}\qquad -(a+b)c = ac+bc +(a+b)\cdot c = ac+bc \] gelten. Bei einem nicht-kommutativen Produkt ist es hierbei notwendig, @@ -175,7 +181,7 @@ Sie gelten immer für Matrizen. Die Lösbarkeit von Gleichungen der Form $ax=b$ mit $a,b\in\mathbb{N}$ gibt Anlass zum sehr nützlichen Konzept der Teilbarkeit. \index{Teilbarkeit}% -Die Zahl $b$ heisst teilbar durch $a$, wenn die Gleichung $ax=b$ eine +Die Zahl $b$ heisst {\em teilbar} durch $a$, wenn die Gleichung $ax=b$ eine Lösung in $\mathbb{N}$ hat. \index{teilbar}% Jede natürlich Zahl $n$ ist durch $1$ und durch sich selbst teilbar, @@ -240,7 +246,7 @@ n+1&= n \cup \{n\} = \{0,\dots,n-1\} \cup \{n\} = \{0,1,\dots,n\} \subsubsection{Natürliche Zahlen als Äquivalenzklassen} Im vorangegangenen Abschnitt haben wir die natürlichen Zahlen aus der leeren Menge schrittweise sozusagen ``von unten'' aufgebaut. -Wir können aber auch eine Sicht ``von oben'' einnehmen. +Wir können aber auch eine Sichtweise ``von oben'' einnehmen. Dazu definieren wir, was eine endliche Menge ist und was es heisst, dass endliche Mengen gleiche Mächtigkeit haben. @@ -258,6 +264,7 @@ Der Vorteil dieser Definition ist, dass sie die früher definierten natürlichen Zahlen nicht braucht, diese werden jetzt erst konstruiert. Dazu fassen wir in der Menge aller endlichen Mengen die gleich mächtigen Mengen zusammen, bilden also die Äquivalenzklassen der Relation $\sim$. +\index{Äquivalenzklasse}% Der Vorteil dieser Sichtweise ist, dass die natürlichen Zahlen ganz explizit als die Anzahlen von Elementen einer endlichen Menge entstehen. diff --git a/buch/chapters/05-zahlen/rational.tex b/buch/chapters/05-zahlen/rational.tex index 9d2f59e..440cc73 100644 --- a/buch/chapters/05-zahlen/rational.tex +++ b/buch/chapters/05-zahlen/rational.tex @@ -14,8 +14,8 @@ die negativen Zahlen kennenlernen. Wir können hierbei denselben Trick anwenden, wie schon beim Übergang von den natürlichen zu den ganzen Zahlen. -Wir kreieren wieder Paare $(z, n)$, deren Elemente nennen wir \emph{Zähler} und -\emph{Nenner}, wobei $z, n \in \mathbb Z$ und zudem $n \ne 0$. +Wir kreieren wieder Paare $(z, n)$, deren Elemente wir \emph{Zähler} und +\emph{Nenner} nennen, wobei $z, n \in \mathbb Z$ und zudem $n \ne 0$. Die Rechenregeln für Addition und Multiplikation lauten \[ (a, b) + (c, d) @@ -27,8 +27,8 @@ Die Rechenregeln für Addition und Multiplikation lauten (ac, bd) . \] -Die ganzen Zahlen lassen sich als in dieser Darstellung als -$z \mapsto (z, 1)$ einbetten. +Die ganzen Zahlen $z\in\mathbb{Z}$ lassen sich in dieser Darstellung als +$z \mapsto (z, 1)$ in diese Menge von Paaren einbetten. Ähnlich wie schon bei den ganzen Zahlen ist diese Darstellung aber nicht eindeutig. @@ -67,6 +67,7 @@ Rationale Zahlen sind genau die Äquivalenzklassen dieser Paare $(a, b)$ von ganzen Zahlen $a$ und $b\ne 0$. Da diese Schreibweise recht unhandlich ist, wird normalerweise die Notation als Bruch $\frac{a}{b}$ verwendet. +\index{Bruch}% Die Rechenregeln werden dadurch zu den wohlvertrauten \[ \frac{a}{b}+\frac{c}{d} @@ -120,6 +121,7 @@ Kürzen und Erweitern ineinander übergeführt werden können. Die Menge der Äquivalenzklassen von Brüchen ist die Menge $\mathbb{Q}$ der rationalen Zahlen. +\index{Q@$\mathbb{Q}$}% In $\mathbb{Q}$ sind Addition, Subtraktion und Multiplikation mit den gewohnten Rechenregeln, die bereits in $\mathbb{Z}$ gegolten haben, uneingeschränkt möglich. @@ -127,7 +129,7 @@ uneingeschränkt möglich. \subsubsection{Kehrwert} Zu jedem Bruch $\frac{a}{b}$ lässt sich der Bruch $\frac{b}{a}$, der sogenannte {\em Kehrwert} -\index{Kehrwert} +\index{Kehrwert}% konstruieren. Er hat die Eigenschaft, dass \[ @@ -139,7 +141,7 @@ Er hat die Eigenschaft, dass \] gilt. Der Kehrwert ist also das multiplikative Inverse, jede von $0$ verschiedene -rationale Zahl hat eine Inverse. +rationale Zahl hat eine solche Inverse. \subsubsection{Lösung von linearen Gleichungen} Mit dem Kehrwert lässt sich jetzt jede lineare Gleichung lösen. @@ -165,13 +167,24 @@ und Division möglich sind mit der einzigen Einschränkung, dass nicht durch $0$ dividiert werden kann. Körper sind die natürliche Bühne für die lineare Algebra, da sich lineare Gleichungssysteme ausschliesslich mit den Grundoperation lösen lassen. +Eine formelle Definition eines Körpers werden wir in +Abschnitt~\ref{buch:subsection:koerper} geben. Wir werden im Folgenden für verschiedene Anwendungszwecke weitere Körper konstruieren, zum Beispiel die reellen Zahlen $\mathbb{R}$ und die rationalen Zahlen $\mathbb{C}$. Wann immer die Wahl des Körpers keine Rolle spielt, werden wir den Körper mit $\Bbbk$ bezeichnen. -\index{$\Bbbk$}% +\index{k@$\Bbbk$}% +Ein Körper $\Bbbk$ zeichnet sich dadurch aus, dass alle ELemente ausser $0$ +invertierbar sind. +Diese wichtige Teilmenge wird mit $\Bbbk^* = \Bbbk \setminus\{0\}$ mit +bezeichnet. +\label{buch:zahlen:def:bbbk*} +In dieser Relation sind beliebige Multiplikationen ausführbar, das Element +$1\in\Bbbk^*$ ist neutrales Element bezüglich der Multiplikation. +Die Menge $\Bbbk^*$ trägt die Struktur einer Gruppe, siehe dazu auch +den Abschnitt~\ref{buch:grundlagen:subsection:gruppen}. diff --git a/buch/chapters/05-zahlen/reell.tex b/buch/chapters/05-zahlen/reell.tex index d5a193f..06eb7aa 100644 --- a/buch/chapters/05-zahlen/reell.tex +++ b/buch/chapters/05-zahlen/reell.tex @@ -10,6 +10,15 @@ In den rationalen Zahlen lassen sich algebraische Gleichungen höheren Grades immer noch nicht lösen. Dass die Gleichung $x^2=2$ keine rationale Lösung hat, ist schon den Pythagoräern aufgefallen. +\index{Pythagoräer} +Ziel dieses Abschnitts ist, den Körper $\mathbb{Q}$ zu einem +Körper $\mathbb{R}$ zu erweitern, in dem die Gleichung +gelöst werden kann, ohne dabei Ordnungsrelation zu zerstören, die +die hilfreiche und anschauliche Vorstellung der Zahlengeraden +liefert. +\index{Zahlengerade}% + +\subsubsection{Intervallschachtelung} Die geometrische Intuition der Zahlengeraden führt uns dazu, nach Zahlen zu suchen, die gute Approximationen für $\sqrt{2}$ sind. Wir können zwar keinen Bruch angeben, dessen Quadrat $2$ ist, aber @@ -29,16 +38,47 @@ Zahl $\sqrt{2}$ gewonnen worden.}. Jedes der Intervalle enthält auch das nachfolgende Intervall, und die intervalllänge konvergiert gegen 0. Eine solche \emph{Intervallschachtelung} beschreibt also genau eine Zahl, +\index{Intervallschachtelung}% aber möglicherweise keine, die sich als Bruch schreiben lässt. +\subsubsection{Reelle Zahlen als Folgengrenzwerte} +Mit einer Intervallschachtelung lässt sich $\sqrt{2}$ zwar festlegen, +noch einfacher wäre aber eine Folge von rationalen Zahlen $a_n\in\mathbb{Q}$ +derart, die $\sqrt{2}$ beliebig genau approximiert. +In der Analysis definiert man zu diesem Zweck, dass $a$ der Grenzwert +einer Folge $(a_n)_{n\in\mathbb{N}}$ ist, wenn es zu jedem $\varepsilon > 0$ +ein $N$ gibt derart, dass $|a_n-a|<\varepsilon$ für $n>N$ ist. +Das Problem dieser wohlbekannten Definition für die Konstruktion +reeller Zahle ist, dass im Falle der Folge +\[ +(a_n)_{n\in\mathbb{N}}= +(1, +\frac75, +\frac{41}{29}, +\frac{239}{169},\dots) \to a=\sqrt{2} +\] +das Objekt $a$ noch gar nicht existiert. +Es gibt keine rationale Zahl, die als Grenzwert dieser Folge dienen +könnte. + +Folgen, die gegen Werte in $\mathbb{Q}$ konvergieren sind dagegen +nicht in der Lage, neue Zahlen zu approximieren. +Wir müssen also auszudrücken versuchen, dass eine Folge konvergiert, +ohne den zugehörigen Grenzwert zu kennen. + +\subsubsection{Cauchy-Folgen} Die Menge $\mathbb{R}$ der reellen Zahlen kann man auch als Menge -aller Cauchy-Folgen $(a_n)_{n\in\mathbb{N}}$ betrachten. +aller Cauchy-Folgen $(a_n)_{n\in\mathbb{N}}$, $a_n\in\mathbb{Q}$, +betrachten. +\index{Cauchy-Folge}% Eine Folge ist eine Cauchy-Folge, wenn es für jedes $\varepsilon>0$ eine Zahl $N(\varepsilon)$ gibt derart, dass $|a_n-a_m|<\varepsilon$ für $n,m>N(\varepsilon)$. Ab einer geeigneten Stelle $N(\varepsilon)$ sind die Folgenglieder also mit Genauigkeit $\varepsilon$ nicht mehr unterscheidbar. + +\subsubsection{Relle Zahlen als Äquivalenzklassen von Cauchy-Folgen} Nicht jede Cauchy-Folge hat eine rationale Zahl als Grenzwert. Da wir für solche Folgen noch keine Zahlen als Grenzwerte haben, nehmen wir die Folge als eine mögliche Darstellung der Zahl. @@ -61,13 +101,14 @@ b_n&\colon&& \] beide Folgen, die die Zahl $\sqrt{2}$ approximieren. Im Allgemeinen tritt dieser Fall ein, wenn $|a_n-b_n|$ eine -Folge mit Grenzwert $0$ oder Nullfolge ist. +Folge mit Grenzwert $0$ oder {\em Nullfolge} ist. +\index{Nullfolge}% Eine reelle Zahl ist also die Menge aller rationalen Cauchy-Folgen, deren Differenzen Nullfolgen sind. Die Menge $\mathbb{R}$ der reellen Zahlen kann man also ansehen -als bestehend aus Mengen von Folgen, die alle den gleichen Grenzwert -haben. +als bestehend aus Äquivalenzklassen von Folgen, die alle den gleichen +Grenzwert haben. Die Rechenregeln der Analysis \[ \lim_{n\to\infty} (a_n + b_n) diff --git a/buch/chapters/10-vektorenmatrizen/algebren.tex b/buch/chapters/10-vektorenmatrizen/algebren.tex index 9e1d3dc..594b94e 100644 --- a/buch/chapters/10-vektorenmatrizen/algebren.tex +++ b/buch/chapters/10-vektorenmatrizen/algebren.tex @@ -10,10 +10,13 @@ vorhanden. Die Menge der Matrizen $M_n(\Bbbk)$ ist sowohl ein Ring als auch ein Vektorraum. Man nennt eine {\em $\Bbbk$-Algebra} oder {\em Algebra über $\Bbbk$} +\index{k-Algebra@$\Bbbk$-Algebra}% +\index{Algebra}% ein Ring $A$, der auch eine $\Bbbk$-Vektorraum ist. Die Multiplikation des Ringes muss dazu mit der Skalarmultiplikation verträglich sein. Dazu müssen Assoziativgesetze +\index{Assoziativgesetz} \[ \lambda(\mu a) = (\lambda \mu) a \qquad\text{und}\qquad @@ -42,7 +45,8 @@ beinhaltet aber auch das Distributivgesetz. $M_n(\Bbbk)$ ist eine Algebra. \subsubsection{Die Algebra der Funktionen $\Bbbk^X$} -Sie $X$ eine Menge und $\Bbbk^X$ die Menge aller Funktionen $X\to \Bbbk$. +Sei $X$ eine Menge und $\Bbbk^X$ die Menge aller Funktionen $X\to \Bbbk$. +\index{kX@$\Bbbk^X$}% Auf $\Bbbk^X$ kann man Addition, Multiplikation mit Skalaren und Multiplikation von Funktionen punktweise definieren. Für zwei Funktion $f,g\in\Bbbk^X$ und $\lambda\in\Bbbk$ definiert man diff --git a/buch/chapters/10-vektorenmatrizen/gruppen.tex b/buch/chapters/10-vektorenmatrizen/gruppen.tex index cb37d05..febf726 100644 --- a/buch/chapters/10-vektorenmatrizen/gruppen.tex +++ b/buch/chapters/10-vektorenmatrizen/gruppen.tex @@ -8,20 +8,23 @@ Die kleinste sinnvolle Struktur ist die einer Gruppe. Eine solche besteht aus einer Menge $G$ mit einer Verknüpfung, die additiv +\index{additive Verknüpfung}% \begin{align*} -G\times G \to G&: (g,h) = gh -\intertext{oder multiplikativ } G\times G \to G&: (g,h) = g+h +\intertext{oder multiplikativ } +G\times G \to G&: (g,h) = gh \end{align*} +\index{multiplikative Verknüpfung}% geschrieben werden kann. Ein Element $0\in G$ heisst {\em neutrales Element} bezüglich der additiv +\index{neutrales Element}% geschriebenen Verknüpfung falls $0+x=x$ für alle $x\in G$. \index{neutrales Element}% Ein Element $e\in G$ heisst neutrales Element bezüglich der multiplikativ geschriebneen Verknüpfung, wenn $ex=x$ für alle $x\in G$. In den folgenden Definitionen werden wir immer die multiplikative -Schreibweise verwenden, für Fälle additiv geschriebener siehe auch die -Beispiele weiter unten. +Schreibweise verwenden, für Fälle additiv geschriebener Verknüpfungen +siehe auch die Beispiele weiter unten. \begin{definition} \index{Gruppe}% @@ -32,24 +35,28 @@ Eigenschaften: \begin{enumerate} \item Die Verknüpfung ist assoziativ: $(ab)c=a(bc)$ für alle $a,b,c\in G$. +\index{assoziativ}% \item Es gibt ein neutrales Element $e\in G$ \item Für jedes Element $g\in G$ gibt es ein Element $h\in G$ mit $hg=e$. \end{enumerate} -Das Element $h$ heisst auch das Inverse Element zu $g$. +Das Element $h$ heisst auch das inverse Element zu $g$. +\index{inverses Element}% \end{definition} Falls nicht jedes Element invertierbar ist, aber wenigstens ein neutrales Element vorhanden ist, spricht man von einem {\em Monoid}. \index{Monoid}% -Hat man nur eine Verknüpfung, spricht man oft von einer {\em Halbruppe}. +Hat man nur eine Verknüpfung, aber kein neutrales Element, +spricht man oft von einer {\em Halbruppe}. \index{Halbgruppe}% \begin{definition} Eine Gruppe $G$ heisst abelsch, wenn $ab=ba$ für alle $a,b\in G$. \end{definition} +\index{abelsch}% Additiv geschrieben Gruppen werden immer als abelsch angenommen, multiplikativ geschrieben Gruppen können abelsch oder nichtabelsch sein. @@ -63,7 +70,9 @@ Das additive Inverse eines Elementes $a$ ist $-a$. \end{beispiel} \begin{beispiel} -Die von Null verschiedenen Elemente $\Bbbk^*$ eines Zahlekörpers bilden +Die von Null verschiedenen Elemente $\Bbbk^*=\Bbbk\setminus\{0\}$ (definiert +auf Seite~\pageref{buch:zahlen:def:bbbk*}) +eines Zahlekörpers bilden bezüglich der Multiplikation eine Gruppe mit neutralem Element $1$. Das multiplikative Inverse eines Elementes $a\in \Bbbk$ mit $a\ne 0$ ist $a^{-1}=\frac1{a}$. @@ -75,7 +84,7 @@ dem Nullvektor als neutralem Element. Betrachtet man $\Bbbk^n$ als Gruppe, verliert man die Multiplikation mit Skalaren aus den Augen. $\Bbbk^n$ als Gruppe zu bezeichnen ist also nicht falsch, man -verliert dadurch aber +verliert dadurch aber den Blick auf die Multiplikation mit Skalaren. \end{beispiel} \begin{beispiel} @@ -115,6 +124,7 @@ Ist $G$ eine Gruppe mit neutralem Element $e$, dann gilt $xe=x$ für alle $x\in G$ \item Es gibt nur ein neutrales Element. +\index{neutrales Element}% Wenn also $f\in G$ mit $fx=x$ für alle $x\in G$, ist dann folgt $f=e$. \item Wenn $hg=e$ gilt, dann auch $gh=e$ und $h$ ist durch $g$ eindeutig bestimmt. @@ -171,16 +181,22 @@ f = fe = e \] aus der Eigenschaft~1. -Schliesslich sei $x$ ein beliebiges Inverses von $g$, dann ist -$xg=e$, dann folgt +Schliesslich sei $x$ ein beliebiges Inverses von $g$. +Dann ist $xg=e$ und es folgt $x=xe=x(gh)=(xg)h = eh = h$, es gibt also nur ein Inverses von $g$. \end{proof} -Diesem Problem sind wir zum Beispiel auch in +Der Frage, ob Linksinverse und Rechtsinverse übereinstimmen, +sind wir zum Beispiel bereits in Abschnitt~\ref{buch:grundlagen:subsection:gleichungssyteme} -begegnet, wo wir nur gezeigt haben, dass $AA^{-1}=E$ ist. -Da aber die invertierbaren Matrizen eine Gruppe -bilden, folgt jetzt aus dem Satz automatisch, dass auch $A^{-1}A=E$. +begegnet. +Dort haben wir bereits gezeigt, dass nicht nur $AA^{-1}=I$, +sondern auch $A^{-1}A=I$. +Die dabei verwendete Methode war identisch mit dem hier gezeigten +Beweis. +Da die invertierbaren Matrizen eine Gruppe bilden, stellt sich +dieses Resultat jetzt als Spezialfall des +Satzes~\ref{buch:vektorenmatrizen:satz:gruppenregeln} dar. \subsubsection{Homomorphismen} \label{buch:gruppen:subsection:homomorphismen} Lineare Abbildung zwischen Vektorräumen zeichnen sich dadurch aus, @@ -231,17 +247,20 @@ e ghg^{-1}\in\ker\varphi. \] Der Kern wird also von der Abbildung $h\mapsto ghg^{-1}$, -der {\em Konjugation} in sich abgebildet. +der {\em Konjugation}, in sich abgebildet. +\index{Konjugation in einer Gruppe} \begin{definition} Eine Untergruppe $H \subset G$ heisst ein {\em Normalteiler}, geschrieben $H \triangleleft G$ wenn $gHg^{-1}\subset H$ für jedes $g\in G$. -\index{Normalteiler} +\index{Normalteiler}% \end{definition} Die Konjugation selbst ist ebenfalls keine Unbekannte, sie ist uns -bei der Basistransformationsformel schon begegnet. +bei der Basistransformationsformel +\eqref{buch:vektoren-und-matrizen:eqn:basiswechselabb} +schon begegnet. Die Tatsache, dass $\ker\varphi$ unter Konjugation erhalten bleibt, kann man also interpretieren als eine Eigenschaft, die unter Basistransformation erhalten bleibt. @@ -312,7 +331,7 @@ auf einem geeigneten Vektorraum. \begin{definition} \label{buch:vektorenmatrizen:def:darstellung} -Eine Darstellung einer Gruppe $G$ ist ein Homomorphismus +Eine {\em Darstellung} einer Gruppe $G$ ist ein Homomorphismus $G\to\operatorname{GL}_n(\mathbb{R})$. \index{Darstellung} \end{definition} @@ -324,11 +343,12 @@ sind alle Teilmengen von $\operatorname{GL}_n(\mathbb{R})$. Die Einbettungsabbildung $G\hookrightarrow \operatorname{GL}_n(\mathbb{R})$ ist damit automatisch eine Darstellung, sie heisst auch die {\em reguläre Darstellung} der Gruppe $G$. -\index{reguläre Darstellung} +\index{reguläre Darstellung}% +\index{Darstellung, reguläre}% \end{beispiel} In Kapitel~\ref{buch:chapter:permutationen} wird gezeigt, -dass Permutationen einer endlichen eine Gruppe bilden und wie +dass Permutationen einer endlichen Menge eine Gruppe bilden und wie sie durch Matrizen dargestellt werden können. diff --git a/buch/chapters/10-vektorenmatrizen/hadamard.tex b/buch/chapters/10-vektorenmatrizen/hadamard.tex index 1fd0373..787b0f5 100644 --- a/buch/chapters/10-vektorenmatrizen/hadamard.tex +++ b/buch/chapters/10-vektorenmatrizen/hadamard.tex @@ -25,14 +25,16 @@ dies ist das Hadamard-Produkt. \begin{definition} Das {\em Hadamard-Produkt} zweier Matrizen +\index{Hadamard-Produkt}% $A,B\in M_{m\times n}(\Bbbk)$ ist definiert als die Matrix $A\odot B$ mit den Komponenten \[ -(A\odot B)_{ij} = (A)_{ij} (B)_{ij}. +(A\odot B)_{i\!j} = (A)_{i\!j} (B)_{i\!j}. \] Wir nennen $M_{m\times n}(\Bbbk)$ mit der Multiplikation $\odot$ -auch die Hadamard-Algebra $H_{m\times n}(\Bbbk)$. +auch die {\em Hadamard-Algebra} $H_{m\times n}(\Bbbk)$. +\index{Hadamard-Algebra}% \end{definition} Dies ist jedoch nur interessant, wenn $M_{m\times n}(\Bbbk)$ mit diesem @@ -46,30 +48,30 @@ Es gilt \begin{align*} A\odot(B\odot C) &= (A\odot B)\odot C &&\Leftrightarrow& -a_{ij}(b_{ij}c_{ij}) &= (a_{ij}b_{ij})c_{ij} +a_{i\!j}(b_{i\!j}c_{i\!j}) &= (a_{i\!j}b_{i\!j})c_{i\!j} \\ A\odot(B+C) &= A\odot B + A\odot C &&\Leftrightarrow& -a_{ij}(b_{ij}+c_{ij}) &= a_{ij}b_{ij} + a_{ij}c_{ij} +a_{i\!j}(b_{i\!j}+c_{i\!j}) &= a_{i\!j}b_{i\!j} + a_{i\!j}c_{i\!j} \\ (A+B)\odot C&=A\odot C+B\odot C &&\Leftrightarrow& -(a_{ij}+b_{ij})c_{ij}&=a_{ij}c_{ij} + b_{ij}c_{ij} +(a_{i\!j}+b_{i\!j})c_{i\!j}&=a_{i\!j}c_{i\!j} + b_{i\!j}c_{i\!j} \\ (\lambda A)\odot B &= \lambda (A\odot B) &&\Leftrightarrow& -(\lambda a_{ij})b_{ij}&=\lambda(a_{ij}b_{ij}) +(\lambda a_{i\!j})b_{i\!j}&=\lambda(a_{i\!j}b_{i\!j}) \\ A\odot(\lambda B)&=\lambda(A\odot B) &&\Leftrightarrow& -a_{ij}(\lambda b_{ij})&=\lambda(a_{ij}b_{ij}) +a_{i\!j}(\lambda b_{i\!j})&=\lambda(a_{i\!j}b_{i\!j}) \end{align*} für alle $i,j$. Das Hadamard-Produkt ist kommutativ, da die Multiplikation in $\Bbbk$ kommuativ ist. Das Hadamard-Produkt kann auch für Matrizen mit Einträgen in einem -Ring definiert werden, in diesem Fall ist es möglich, dass die entsehende +Ring definiert werden, in diesem Fall ist es möglich, dass die entstehende Algebra nicht kommutativ ist. Die Hadamard-Algebra hat auch ein Eins-Elemente, nämlich die Matrix, @@ -77,6 +79,7 @@ die aus lauter Einsen besteht. \begin{definition} Die sogenannte {\em Einsmatrix} $U$ ist die Matrix +\index{Einsmatrix} \[ U=\begin{pmatrix} 1&1&\dots&1\\ @@ -106,7 +109,7 @@ Auch die Hadamard-Algebra $H_{m\times n}(\Bbbk)$ kann als Funktionenalgebra betrachtet werden. Einer Matrix $A\in H_{m\times n}(\Bbbk)$ ordnet man die Funktion \[ -a\colon [m]\times [n] : (i,j) \mapsto a_{ij} +a\colon [m]\times [n] : (i,j) \mapsto a_{i\!j} \] zu. Dabei gehen die Algebraoperationen von $H_{m\times n}(\Bbbk)$ über @@ -131,7 +134,7 @@ A=\begin{pmatrix}3&4\\4&5\end{pmatrix} B=\begin{pmatrix}-5&4\\4&-3\end{pmatrix} \] sind inverse Matrizen bezüglich des Matrizenproduktes, also -$AB=E$. +$AB=I$. Für das Hadamard-Produkt gilt dagegen \[ A\odot B @@ -141,13 +144,15 @@ A\odot B 16&-15 \end{pmatrix}. \] -Die Inverse einer Matrix $A$ Bezüglich des Hadamard-Produktes hat -die Einträge $a_{ij}^{-1}$. -Die Matrix $E$ ist bezüglich des gewöhnlichen Matrizenproduktes +Die Inverse einer Matrix $A$ bezüglich des Hadamard-Produktes hat +die Einträge $a_{i\!j}^{-1}$. +Die Matrix $I$ ist bezüglich des gewöhnlichen Matrizenproduktes invertierbar, aber sie ist bezüglich des Hadamard-Produktes nicht invertierbar. +Umgekehrt ist die Einsmatrix $U$ invertierbar bezüglich des +Hadamard-Produktes, aber für $n>1$ nicht für das Matrizenprodukt. -\subsubsection{Einbettung der Hadamard-Algebra ein eine Matrizenalgebra} +\subsubsection{Einbettung der Hadamard-Algebra in eine Matrizenalgebra} Hadamard-Algebren können als Unteralgebren einer Matrizenalgebra betrachtet werden. Der Operator $\operatorname{diag}$ bildet Vektoren ab in Diagonalmatrizen @@ -224,36 +229,32 @@ a_{nn} Bei dieser Abbildung geht die Hadamard-Multiplikation wieder in das gewöhnliche Matrizenprodukt über. -% XXX Faltungsmatrizen und Fouriertheorie -\subsubsection{Beispiel: Faltung und Fourier-Theorie} - -\subsection{Weitere Verknüpfungen -\label{buch:vektorenmatrizen:subsection:weitere}} - \subsubsection{Transposition} Das Hadamard-Produkt verträgt sich mit der Transposition: +\index{Transposition}% \[ (A\odot B)^t = A^t \odot B^t. \] Insbesondere ist das Hadamard-Produkt zweier symmetrischer Matrizen auch wieder symmetrisch. -\subsubsection{Frobeniusnorm} +\subsubsection{Frobenius-Norm} Das Hadamard-Produkt in der Hadamard-Algebra $H_{m\times n}(\mathbb{R})$ nimmt keine Rücksicht auf die Dimensionen einer Matrix und ist nicht unterscheidbar von $\mathbb{R}^{m\times n}$ mit dem Hadamard-Produkt. Daher darf auch der Begriff einer mit den algebraischen Operationen -verträglichen Norm nicht von von den Dimensionen abhängen. +verträglichen Norm nicht von den spezifischen Dimensionen $m$ und $n$ abhängen. Dies führt auf die folgende Definition einer Norm. \begin{definition} -Die {\em Frobenius-Norm} einer Matrix $A\in H_{m\times n}\mathbb{R})$ -mit den Einträgen $(a_{ij})=A$ ist +Die {\em Frobenius-Norm} einer Matrix $A\in H_{m\times n}(\mathbb{R})$ +\index{Frobenius-Norm}% +mit den Einträgen $(a_{i\!j})=A$ ist \[ \| A\|_F = \sqrt{ -\sum_{i,j} a_{ij}^2 +\sum_{i,j} a_{i\!j}^2 }. \] Das {\em Frobenius-Skalarprodukt} zweier Matrizen @@ -262,14 +263,15 @@ ist \[ \langle A,B\rangle_F = -\sum_{i,j} a_{ij} b_{ij} +\sum_{i,j} a_{i\!j} b_{i\!j} = \operatorname{Spur} A^t B \] und es gilt $\|A\|_F = \sqrt{\langle A,A\rangle}$. \end{definition} -Für komplexe Matrizen muss +Für komplexe Matrizen muss die Definition angepasst werden, damit +das Skalarprodukt sesquilinear und positiv definit wird. \begin{definition} Die {\em komplexe Frobenius-Norm} einer Matrix $A\in H_{m\times n}(\mathbb{C})$ @@ -278,11 +280,11 @@ ist \| A\| = \sqrt{ -\sum_{i,j} |a_{ij}|^2 +\sum_{i,j} |a_{i\!j}|^2 } = \sqrt{ -\sum_{i,u} \overline{a}_{ij} a_{ij} +\sum_{i,u} \overline{a}_{i\!j} a_{i\!j} } \] das {\em komplexe Frobenius-Skalarprodukt} zweier Matrizen @@ -290,18 +292,10 @@ $A,B\in H_{m\times n}(\mathbb{C})$ ist das Produkt \[ \langle A,B\rangle_F = -\sum_{i,j}\overline{a}_{ij} b_{ij} +\sum_{i,j}\overline{a}_{i\!j} b_{i\!j} = \operatorname{Spur} (A^* B) \] und es gilt $\|A\|_F = \sqrt{\langle A,A\rangle}$. \end{definition} -% XXX Frobeniusnorm - -\subsubsection{Skalarprodukt} - -% XXX Skalarprodukt - - - diff --git a/buch/chapters/10-vektorenmatrizen/koerper.tex b/buch/chapters/10-vektorenmatrizen/koerper.tex index e1dda6d..1754ce6 100644 --- a/buch/chapters/10-vektorenmatrizen/koerper.tex +++ b/buch/chapters/10-vektorenmatrizen/koerper.tex @@ -11,10 +11,67 @@ sehr spezielle Algebren, man nennt sie Körper. In diesem Abschnitt sollen die wichtigsten Eigenschaften von Körpern zusammengetragen werden. +\begin{definition} +Ein Körper $K$ ist ein additive Gruppe mit einer multiplikativen +Verknüpfung derart, dass $K^* = K \setminus \{0\}$ eine Gruppe bezüglich +der Multiplikation ist. +Ausserdem gelten die Distributivgesetze +\[ +(a+b)c = ac+bc +\qquad a,b,c\in K. +\] +\end{definition} -XXX TODO +Ein Körper ist also ein Ring derart, dass die Einheitengruppe $K^*$ ist. +\begin{beispiel} +Die Menge $\mathbb{F}_2=\{0,1\}$ mit der Additions- und +Mutliplikationstabelle +\begin{center} +\begin{tabular}{|>{$}c<{$}|>{$}c<{$}>{$}c<{$}|} +\hline ++&0&1\\ +\hline +0&0&1\\ +1&1&0\\ +\hline +\end{tabular} +\qquad +\qquad +\qquad +\begin{tabular}{|>{$}c<{$}|>{$}c<{$}>{$}c<{$}|} +\hline +\cdot&0&1\\ +\hline +0&0&0\\ +1&0&1\\ +\hline +\end{tabular} +\end{center} +ist der kleinste mögliche Körper. +\end{beispiel} +\begin{beispiel} +Die Menge der rationalen Funktionen +\[ +\mathbb{Q}(z) += +\biggl\{ +f(z) += +\frac{p(z)}{q(z)} +\, +\bigg| +\, +\begin{minipage}{5.5cm} +\raggedright +$p(z), q(z)$ sind Polynome mit rationalen Koeffizienten, $q(z)\ne 0$ +\end{minipage} +\, +\biggr\} +\] +ist ein Körper. +\end{beispiel} diff --git a/buch/chapters/10-vektorenmatrizen/linear.tex b/buch/chapters/10-vektorenmatrizen/linear.tex index 3ad51f1..ba89266 100755 --- a/buch/chapters/10-vektorenmatrizen/linear.tex +++ b/buch/chapters/10-vektorenmatrizen/linear.tex @@ -8,7 +8,7 @@ \rhead{Lineare Algebra} In diesem Abschnitt tragen wir die bekannten Resultate der linearen Algebra zusammen. -Meistens lernt man diese zuerst für Vektoren und Gleichungssyteme mit +Meistens lernt man diese zuerst für Vektoren und Gleichungssysteme mit reellen Variablen. In der linearen Algebra werden aber nur die arithmetischen Grundoperationen verwendet, es gibt also keinen Grund, warum sich @@ -16,7 +16,8 @@ die Theorie nicht über einem beliebigen Zahlenkörper entwickeln lassen sollte. Die in Kapitel~\ref{buch:chapter:endliche-koerper} untersuchten endlichen Körper sind zum Beispiel besser geeignet für Anwendungen in -der Kryptographie oder für die diskrete schnelle Fourier-Transformation. +der Kryptographie, der Codierungstheorie oder für die diskrete schnelle +Fourier-Transformation. Daher geht es in diesem Abschnitt weniger darum alles herzuleiten, sondern vor allem darum, die Konzepte in Erinnerung zu rufen und so zu formulieren, dass offensichtlich wird, dass alles mit einem @@ -28,27 +29,31 @@ beliebigen Zahlkörper $\Bbbk$ funktioniert. \subsection{Vektoren \label{buch:grundlagen:subsection:vektoren}} Koordinatensysteme haben ermöglicht, Punkte als Zahlenpaare zu beschreiben. -Dies ermöglicht, geometrische Eigenschaften als Gleichungen auszudrücken, -aber mit Punkten kann man trotzdem noch nicht rechnen. +Dies ermöglicht, geometrische Eigenschaften als Gleichungen auszudrücken. +Das bedeutet aber nur, dass man mit den Koordinaten rechnen kann, +mit den Punkten selbst kann man trotzdem noch nicht rechnen. Ein Vektor fasst die Koordinaten eines Punktes in einem Objekt zusammen, mit dem man auch rechnen und zum Beispiel Parallelverschiebungen algebraisieren kann. -Um auch Streckungen ausdrücken zu können, wird auch eine Menge von +Um auch Streckungen ausdrücken zu können, wird zudem eine Menge von Streckungsfaktoren benötigt, mit denen alle Komponenten eines Vektors multipliziert werden können. Sie heissen auch {\em Skalare} und liegen in $\Bbbk$. \subsubsection{Zeilen- und Spaltenvektoren} Vektoren sind Tupel von Elementen aus $\Bbbk$. +\index{Vektor}% \begin{definition} Ein $n$-dimensionaler {\em Spaltenvektor} ist ein $n$-Tupel von Zahlen aus +\index{Spaltenvektor}% $\Bbbk$ geschrieben als \[ v = \begin{pmatrix} v_1\\v_2\\\vdots\\v_n\end{pmatrix} \in \Bbbk^n. \] Ein $m$-dimensionaler {\em Zeilenvektor} wird geschrieben als +\index{Zeilenvektor}% \[ u = \begin{pmatrix}u_1&u_2&\dots&u_m\end{pmatrix} \in \Bbbk^m. \] @@ -56,6 +61,7 @@ u = \begin{pmatrix}u_1&u_2&\dots&u_m\end{pmatrix} \in \Bbbk^m. Für Vektoren gleicher Dimension sind zwei Rechenoperationen definiert. Die {\em Addition von Vektoren} $a,a\in\Bbbk^n$ und die Multiplikation +\index{Addition von Vektoren}% eines Vektors mit einem Skalar $\lambda\in\Bbbk$ erfolgt elementweise: \[ a+b @@ -75,6 +81,9 @@ a+b \] Die üblichen Rechenregeln sind erfüllt, nämlich \begin{equation} +\index{Kommutativgesetz}% +\index{Assoziativgesetz}% +\index{Distributivgesetz}% \begin{aligned} &\text{Kommutativität:} & @@ -105,12 +114,13 @@ man Skalare immer links von Vektoren schreiben muss. Die Distributivgesetze zum Beispiel sagen, dass man Ausmultipilizieren oder Ausklammern kann genauso wie in Ausdrücken, die nur Zahlen enthalten. -Man beachte, dass es im allgemeinen kein Produkt von Vektoren gibt. +Man beachte, dass es im Allgemeinen kein Produkt von Vektoren gibt. Das aus der Vektorgeometrie bekannte Vektorprodukt ist eine Spezialität des dreidimensionalen Raumes, es gibt keine Entsprechung dafür in anderen Dimensionen. \subsubsection{Standardbasisvektoren} +\index|{Standardbasisvektor}% In $\Bbbk^n$ findet man eine Menge von speziellen Vektoren, durch die man alle anderen Vektoren ausdrücken kann. Mit den sogenannten {\em Standardbasisvektoren} @@ -137,6 +147,10 @@ a_n \begin{pmatrix}0\\0\\\vdots\\1\end{pmatrix} a_1e_1+a_2e_2+\dots+a_ne_n \] ausgedrückt werden. +Dies ist ein Speziallfall des Begriffs der Linearkombination, der +weiter unten in +Definition~\ref{buch:vektoren-und-matrizen:def:linearkombination} +eingeführt wird. \subsubsection{Vektorraum} Die Rechnungen, die man gemäss der Rechengesetze @@ -147,7 +161,7 @@ Jede Art von mathematischem Objekt, mit dem man so rechen kann, kann als (abstrakter) Vektor betrachtet werden. \begin{definition} -Eine Menge $V$ von Objekten, auf der zwei Operationen definiert, +Eine Menge $V$ von Objekten, auf der zwei Operationen definiert sind, nämlich die Addition, geschrieben $a+b$ für $a,b\in V$ und die Multiplikation mit Skalaren, geschrieben $\lambda a$ für $a\in V$ und $\lambda\in \Bbbk$, heisst ein {\em $\Bbbk$-Vektorraum} oder {\em Vektorraum @@ -155,6 +169,8 @@ $\lambda\in \Bbbk$, heisst ein {\em $\Bbbk$-Vektorraum} oder {\em Vektorraum einfach nur {\em Vektorraum}, wenn $\Bbbk$ aus dem Kontext klar sind), wenn die Rechenregeln~\eqref{buch:vektoren-und-matrizen:eqn:vrgesetze} gelten +\index{Vektorraum}% +\index{k-Vektorraum@$\Bbbk$-Vektorraum}% \end{definition} Die Mengen von Spaltenvektoren $\Bbbk^n$ sind ganz offensichtlich @@ -164,6 +180,7 @@ Polynomen mit Koeffizienten in $\Bbbk$ sind ebenfalls Vektorräume. \begin{beispiel} Die Zahlenmenge $\mathbb{C}$ ist ein $\mathbb{R}$-Vektorraum. +\index{C als R-Vektorraum@$\mathbb{C}$ als $\mathbb{R}$-Vektorraum}% Elemente von $\mathbb{C}$ können addiert und mit reellen Zahlen multipliziert werden. Die Rechenregeln für die komplexen Zahlen umfassen auch alle Regeln @@ -174,6 +191,7 @@ $\mathbb{C}$ ein Vektorraum über $\mathbb{R}$. \begin{beispiel} Die Menge $C([a,b])$ der stetigen Funktionen $[a,b]\to\mathbb{Re}$ bildet ein Vektorraum. +\index{stetige Funktionen}% Funktionen können addiert und mit reellen Zahlen multipliziert werden: \[ (f+g)(x) = f(x) + g(x) @@ -190,13 +208,16 @@ Die Vektorraum-Rechenregeln Die Beispiele zeigen, dass der Begriff des Vektorraums die algebraischen Eigenschaften eine grosse Zahl sehr verschiedenartiger mathematischer Objekte beschreiben kann. -Alle Erkenntnisse, die man ausschliesslich aus Vekotorraumeigenschaften +Alle Erkenntnisse, die man ausschliesslich aus Vektorraumeigenschaften gewonnen hat, sind auf alle diese Objekte übertragbar. Im folgenden werden wir alle Aussagen für einen Vektorraum $V$ formulieren, wenn wir die Darstellung als Tupel $\Bbbk^n$ nicht brauchen. \subsubsection{Gleichungssysteme in Vektorform} Die Vektorraum-Operationen erlauben nun auch, lineare Gleichungssysteme +\index{lineares Gleichungssytem}% +\index{Gleichungssytem, lineares}% +\index{Vektorform}% in {\em Vektorform} zu schreiben: \index{Vektorform eines Gleichungssystems}% \begin{equation} @@ -222,11 +243,13 @@ x_n \begin{pmatrix}b_1\\\vdots\\b_m\end{pmatrix} \label{buch:vektoren-und-matrizen:eqn:vektorform} \end{equation} -Die rechte Seite von~\eqref{buch:vektoren-und-matrizen:eqn:vektorform} -ist eine Linearkombination der Spaltenvektoren. +Die linke Seite der Gleichung rechts in~\eqref{buch:vektoren-und-matrizen:eqn:vektorform} +\index{Linearkombination}% +ist, wie man sagt, eine Linearkombination der Spaltenvektoren. \begin{definition} -Eine Linearkombination der Vektoren $v_1,\dots,v_n\in V$ ist ein Ausdruck +\label{buch:vektoren-und-matrizen:def:linearkombination} +Eine {\em Linearkombination} der Vektoren $v_1,\dots,v_n\in V$ ist ein Ausdruck der Form \[ v @@ -249,7 +272,7 @@ Sind $a_1,\dots,a_n\in V$ Vektoren, dann heisst die Menge \] aller Vektoren, die sich durch Linearkombination aus den Vektoren $a_1,\dots,a_n$ gewinnen lassen, der von $a_1,\dots,a_n$ -aufgespannte Raum. +{\em aufgespannte Raum}. \end{definition} \subsubsection{Lineare Abhängigkeit} @@ -336,6 +359,7 @@ Skalaren immer noch möglich ist. \begin{definition} Eine Teilmenge $U\subset V$ heisst ein {\em Unterraum} von $V$, wenn +\index{Unterraum}% $U$ selbst ein $\Bbbk$-Vektorraum ist, also \[ \begin{aligned} @@ -359,7 +383,7 @@ Spaltenvektoren Spezialfälle sind. \subsubsection{Definition einer Matrix} \begin{definition} -Eine $m\times n$-Matrix $A$ (über $\Bbbk$) ist rechteckiges Schema +Eine {\em $m\times n$-Matrix} $A$ (über $\Bbbk$) ist ein rechteckiges Schema \index{Matrix}% \[ A @@ -371,10 +395,14 @@ a_{21}&a_{22}&\dots &a_{2n}\\ a_{m1}&a_{m2}&\dots &a_{mn}\\ \end{pmatrix} \] -mit $a_{ij}\in\Bbbk$. +mit $a_{i\!j}\in\Bbbk$. Die Menge aller $m\times n$-Matrizen wird mit \[ -M_{m\times n}(\Bbbk) = \{ A\;|\; \text{$A$ ist eine $m\times n$-Matrix}\}. +M_{m\times n}(\Bbbk) += +M_{m,n}(\Bbbk) += +\{ A\;|\; \text{$A$ ist eine $m\times n$-Matrix}\}. \] Falls $m=n$ gilt, heisst die Matrix $A$ auch {\em quadratisch} \index{quadratische Matrix}% @@ -385,7 +413,7 @@ $M_n(\Bbbk) = M_{n\times n}(\Bbbk)$ ab. Die $m$-dimensionalen Spaltenvektoren $v\in \Bbbk^m$ sind $m\times 1$-Matrizen $v\in M_{n\times 1}(\Bbbk)$, die $n$-dimensionalen Zeilenvetoren $u\in\Bbbk^n$ sind $1\times n$-Matrizen $v\in M_{1\times n}(\Bbbk)$. -Eine $m\times n$-Matrix $A$ mit den Koeffizienten $a_{ij}$ besteht aus +Eine $m\times n$-Matrix $A$ mit den Koeffizienten $a_{i\!j}$ besteht aus den $n$ Spaltenvektoren \[ a_1 = \begin{pmatrix} a_{11} \\ a_{21} \\ \vdots \\ a_{m1} \end{pmatrix},\quad @@ -426,54 +454,57 @@ a_{m1}+b_{m1}&a_{m2}+b_{m2}&\dots &a_{mn}+b_{mn} \end{definition} \subsubsection{Multiplikation} -Will man ein lineares Gleichungssystem mit Hilfe der Matrix $A$ der +Will man ein lineares Gleichungssystem +wie~\eqref{buch:vektoren-und-matrizen:eqn:vektorform} +mit Hilfe der Matrix $A$ der Koeffizienten schreiben, bekommt es die Form $Ax=b$, wobei der Vektor der rechten Seiten ist, und $x$ ein Vektor von unbekannten Zahlen. Dies ist jedoch nur sinnvoll, wenn das Produkt $Ax$ sinnvoll definiert werden kann. \begin{definition} +\label{buch:vektoren-und-matrizen:def:matrixmultiplikation} Eine $m\times n$-Matrix $A\in M_{m\times n}(\Bbbk)$ und eine $n\times l$-Matrix $B\in M_{n\times l}(\Bbbk)$ haben als Produkt eine $m\times l$-Matrix $C=AB\in M_{m\times l}(\Bbbk)$ mit den Koeffizienten \begin{equation} -c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}. -\label{buch:vektoren-unbd-matrizen:eqn:matrixmultiplikation} +c_{i\!j} = \sum_{k=1}^n a_{ik} b_{kj}. +\label{buch:vektoren-und-matrizen:eqn:matrixmultiplikation} \end{equation} \end{definition} Die Koeffizienten $a_{ik}$ kommen aus der Zeile $i$ von $A$, die Koeffizienten $b_{kj}$ stehen in der Spalte $j$ von $B$, die Multiplikationsregel \eqref{buch:vektoren-unbd-matrizen:eqn:matrixmultiplikation} -besagt also, dass das Element $c_{ij}$ entsteht als das Produkt +besagt also, dass das Element $c_{i\!j}$ entsteht als das Produkt der Zeile $i$ von $A$ mit der Spalte $j$ von $C$. \subsubsection{Einheitsmatrix} Welche $m\times m$-Matrix $I\in M_{m}(\Bbbk)$ hat die Eigenschaft, dass $IA=A$ für jede beliebige Matrix $A\in M_{m\times n}(\Bbbk)$. -Wir bezeichnen die Einträge von $I$ mit $\delta_{ij}$. +Wir bezeichnen die Einträge von $I$ mit $\delta_{i\!j}$. Die Bedingung $IA=A$ bedeutet \[ -a_{ij} = \delta_{i1}a_{1j} + \dots + \delta_{im}a_{mj}, +a_{i\!j} = \delta_{i1}a_{1j} + \dots + \delta_{im}a_{mj}, \] -Da auf der linken Seite nur $a_{ij}$ vorkommt, müssen alle Terme auf der -rechten Seite verschwinden ausser dem Term mit $a_{ij}$, dessen +Da auf der linken Seite nur $a_{i\!j}$ vorkommt, müssen alle Terme auf der +rechten Seite verschwinden ausser dem Term mit $a_{i\!j}$, dessen Koeffizient $\delta_{ii}=1$ sein muss. Die Koeffizienten sind daher \[ -\delta_{ij} +\delta_{i\!j} = \begin{cases} 1&\qquad i=j\\ 0&\qquad\text{sonst} \end{cases} \] -Die Zahlen $\delta_{ij}$ heissen auch das {\em Kronecker-Symbol} oder +Die Zahlen $\delta_{i\!j}$ heissen auch das {\em Kronecker-Symbol} oder {\em Kronecker-Delta}. \index{Kronecker-$\delta$}% \index{Kronecker-Symbol}% -Die Matrix $I$ hat die Einträge $\delta_{ij}$ und heisst die +Die Matrix $I$ hat die Einträge $\delta_{i\!j}$ und heisst die {\em Einheitsmatrix} \index{Einheitsmatrix}% \[ @@ -487,7 +518,27 @@ I \end{pmatrix}. \] - +\subsubsection{Transponierte Matrix} +\index{transponierte Matrix}% +\index{Matrix, transponiert}% +Die zu einer $m\times n$-Matrix $A$ {\em transponierte} Matrix ist die +$n\times m$-Matrix +\[ +A^t=\begin{pmatrix} +a_{11}&a_{21}&\dots&a_{m1}\\ +a_{12}&a_{22}&\dots&a_{m2}\\ +\vdots&\vdots&\ddots&\vdots\\ +a_{1n}&a_{2n}&\dots&a_{mn} +\end{pmatrix}. +\] +Sie entsteht aus der Matrix $A$ durch Vertauschung von Zeilen und Spalten. +Aus der Definition~\ref{buch:vektoren-und-matrizen:def:matrixmultiplikation} +folgt unmittelbar die Rechenregel $(AB)^t = B^tA^t$. + +Eine Matrix $A$ heisst {\em symmetrisch}, wenn $A^t=A$ ist, sie heisst +{\em antisymmetrisch}, wenn $A^t=-A$ gilt. +\index{symmetrische Matrix}% +\index{antisymmetrische Matrix}% % % Gleichungssysteme % @@ -523,17 +574,21 @@ Ein Gleichungssystem mit rechter Seite $0$ heisst {\em homogen}. \index{homogenes Gleichungssystem}% Zu jedem {\em inhomogenen} Gleichungssystem $Ax=b$ mit $b\ne 0$ ist $Ax=0$ das zugehörige homogene Gleichungssystem. +\index{inhomogenes Gleichungssystem}% Ein homogenes Gleichungssytem $Ax=0$ hat immer mindestens die Lösung $x=0$, man nennt sie auch die {\em triviale} Lösung. +\index{triviale Lösung}% Eine Lösung $x\ne 0$ heisst auch eine nichttriviale Lösung. Die Lösungen eines inhomgenen Gleichungssystem $Ax=b$ ist also nur dann eindeutig, wenn das zugehörige homogene Gleichungssystem eine nichttriviale Lösung hat. \subsubsection{Gauss-Algorithmus} -Der Gauss-Algorithmus oder genauer Gausssche Eliminations-Algorithmus -löst ein lineare Gleichungssystem der +Der Gauss-Algorithmus oder genauer Gausssche Eliminationsalgorithmus +löst ein lineares Gleichungssystem der +\index{Gauss-Algorithmus}% +\index{Gausscher Eliminationsalgorithmus}% Form~\eqref{buch:vektoren-und-matrizen:eqn:vektorform}. Die Koeffizienten werden dazu in das Tableau \[ @@ -547,21 +602,22 @@ a_{m1}&\dots &a_{mn}&b_m \\ \] geschrieben. Die vertikale Linie erinnert an die Position des Gleichheitszeichens. -Es beinhaltet alle Informationen zur Durchführung des Algorithmus. +Das Tableau beinhaltet alle Informationen zur Durchführung des Algorithmus. Der Algorithmus is so gestaltet, dass er nicht mehr Speicher als das Tableau benötigt, alle Schritte operieren direkt auf den Daten des Tableaus. In jedem Schritt des Algorithmus wird zunächst eine Zeile $i$ und -Spalte $j$ ausgewählt, das Elemente $a_{ij}$ heisst das Pivotelement. +Spalte $j$ ausgewählt, das Elemente $a_{i\!j}$ heisst das {\em Pivotelement}. \index{Pivotelement}% Die {\em Pivotdivision} +\index{Pivotdivision} \[ \begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|>{$}c<{$}|} \hline a_{11}&\dots &a_{1j}&\dots &a_{1n}&b_1 \\[-2pt] \vdots& &\vdots&\ddots&\vdots&\vdots\\ -a_{i1}&\dots &{\color{red}a_{ij}}&\dots &a_{in}&b_i \\[-2pt] +a_{i1}&\dots &{\color{red}a_{i\!j}}&\dots &a_{in}&b_i \\[-2pt] \vdots& &\vdots&\ddots&\vdots&\vdots\\ a_{m1}&\dots &a_{mj}&\dots &a_{mn}&b_m \\ \hline @@ -571,7 +627,7 @@ a_{m1}&\dots &a_{mj}&\dots &a_{mn}&b_m \\ \hline a_{11}&\dots &a_{1j}&\dots &a_{1n}&b_1 \\[-2pt] \vdots& &\vdots&\ddots&\vdots&\vdots\\ -{\color{red}\frac{a_{i1}}{a_{ij}}}&\dots &{\color{red}1}&\dots &{\color{red}\frac{a_{in}}{a_{ij}}}&{\color{red}\frac{b_i}{a_{ij}}}\\[-2pt] +{\color{red}\frac{a_{i1}}{a_{i\!j}}}&\dots &{\color{red}1}&\dots &{\color{red}\frac{a_{in}}{a_{i\!j}}}&{\color{red}\frac{b_i}{a_{i\!j}}}\\[-2pt] \vdots& &\vdots&\ddots&\vdots&\vdots\\ a_{m1}&\dots &a_{mj}&\dots &a_{mn}&b_m \\ \hline @@ -581,7 +637,8 @@ stellt sicher, dass das Pivot-Element zu $1$ wird. \index{Pivotdivision} Dies ist gleichbedeutend mit der Auflösung der Gleichung $i$ noch der Variablen $x_j$. -Mit der {\em Zeilensubtraktion} auf Zeile $k\ne i$ können die Einträge in der +Mit der {\em Zeilensubtraktion} auf Zeile $k>i$ können die Einträge in der +\index{Zeilenoperation}% Spalte $j$ zu Null gemacht werden. Dazu wird das $a_{kj}$-fache der Zeile $i$ von Zeile $k$ subtrahiert: \[ @@ -611,8 +668,10 @@ Pivotelement zu $0$ zu machen. Beide Operationen können in einem Durchgang durchgeführt werden. Die beiden Operationen Pivotdivision und Zeilensubtraktion werden jetzt -kombiniert um im linken Teil des Tableaus möglichst viele Nullen und +kombiniert, um im linken Teil des Tableaus möglichst viele Nullen und Einsen zu erzeugen. +Dabei kann es nötig werden, Zeilen zu vertauschen, um ein von $0$ +verschiedenes Pivotelement zu finden. Im Idealfall wird ein Tableau der Form \[ \begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|>{$}c<{$}|} @@ -626,8 +685,9 @@ Im Idealfall wird ein Tableau der Form \] erreicht, was natürlich nur $m=n$ möglich ist. Interpretiert man die Zeilen dieses Tableaus wieder als Gleichungen, -dann liefert die Zeile $i$ den Wert $x_i=u_i$ für die Variable $i$. -Die Lösung kann also in der Spalte rechts abgelesen werden. +dann liefert die Zeile $i$ den Wert $x_i=u_i$ für die Variable +mit Nummer $i$. +Der Lösungsvektor kann also in der Spalte rechts abgelesen werden. \begin{figure} \centering @@ -652,7 +712,7 @@ Spalten über den Pivotelemnten frei zu räumen. \index{Rückwärtseinsetzen}% Wenn in einer Spalte kein von $0$ verschiedenes Element als Pivotelement zur Verfügung steht, wird diese Spalte übersprungen. -Die so erzeuge Tableau-Form heisst auch die {\em reduzierte Zeilenstufenform} +Die so erzeugte Tableau-Form heisst auch die {\em reduzierte Zeilenstufenform} ({\em reduced row echelon form}, RREF). \index{reduzierte Zeilenstufenform}% \index{reduced row echelon form}% @@ -699,6 +759,19 @@ $x_{j_1}, x_{j_2},\dots, x_{j_k}$ kann die Lösungsmenge als \left\{ \left. \begin{pmatrix} +x_1\\ +x_2\\ +\vdots\\ +{\color{darkgreen}x_{i_1}}\\ +x_{i_1+1}\\ +\vdots\\ +{\color{darkgreen}x_{i_2}}\\ +x_{i_2+1}\\ +\vdots\\ +x_m +\end{pmatrix} += +\begin{pmatrix} d_1\\ d_2\\ \vdots\\ @@ -791,7 +864,7 @@ a_{n1}&a_{n2}&\dots &a_{nn}&0 &0 &\dots &1 \\ \end{tabular} \] Die Vektoren $c_k$ sind die Spaltenvektoren der Matrix $C$ mit den -Einträgen $c_{ij}$. +Einträgen $c_{i\!j}$. Mit den Vektoren $c_k$ können jetzt beliebige inhomogene Gleichungssysteme $Ax=b$ gelöst werden. @@ -812,7 +885,8 @@ b_1e_1 + b_2e_2 + \dots + b_ne_n b. \end{align*} Die Linearkombination $x=b_1c_1+\dots+b_nc_n$ kann in Vektorform als $x=Cb$ -geschrieben werden. +geschrieben werden, wenn die Vektoren $c_i$ als Spalten einer Matrix $C$ +interpretiert werden. Die Konstruktion von $C$ bedeutet auch, dass $AC=E$, daher heisst $C$ auch die zu $A$ {\em inverse Matrix}. @@ -824,7 +898,7 @@ daraus folgt aber noch nicht, dass auch $A^{-1}A=I$ ist. Diese Eigenschaft kann man jedoch wie folgt erhalten. Sei $C$ die inverse Matrix von $A$, also $AC=I$. Sei weiter $D$ die inverse Matrix von $C$, also $CD=I$. -Dann ist zunächst $A=AE=A(CD)=(AC)D=ID=D$ und weiter +Dann ist zunächst $A=AI=A(CD)=(AC)D=ID=D$ und weiter $CA=CD=I$. Mit der Bezeichnung $C=A^{-1}$ erhalten wir also auch $A^{-1}A=I$. @@ -848,7 +922,8 @@ lösbar ist. \label{buch:linear:determinate:def} Das Produkt der Pivot-Elemente bei der Durchführung des Gauss-Algorithmus für eine Gleichungssystem mit quadratischer Koeffizientenmatrix $A$ -heisst die Determinante $\det(A)$ der Matrix $A$. +heisst die {\em Determinante} $\det(A)$ der Matrix $A$. +\index{Determinante}% \end{definition} Aus den Regeln für die Durchführung des Gauss-Algorithmus kann man die @@ -887,17 +962,18 @@ und \ref{buch:linear:determinante:asymetrisch} eindeutig bestimmt. \item -Der Entwicklungssatz von Laplace. +Der Entwicklungssatz von Laplace: \index{Entwicklungssatz Laplace}% Die Determinante der $n\times n$-Matrix $A$ kann mit der Formel \begin{equation} \det(A) = -\sum_{i=1}^n (-1)^{i+j} a_{ij} \cdot \det(A_{ij}) +\sum_{i=1}^n (-1)^{i+j} a_{i\!j} \cdot \det(A_{i\!j}) \end{equation} -wobei die $(n-1)\times(n-1)$-Matrix $A_{ij}$ die Matrix $A$ ist, aus der +berechnet werden, +wobei die $(n-1)\times(n-1)$-Matrix $A_{i\!j}$ die Matrix $A$ ist, aus der man Zeile $i$ und Spalte $j$ entfernt hat. -$A_{ij}$ heisst ein {\em Minor} der Matrix $A$. +$A_{i\!j}$ heisst ein {\em Minor} der Matrix $A$. \index{Minor einer Matrix}% \end{enumerate} @@ -925,6 +1001,9 @@ aei + bfg + cdh - ceg - bdi - afh. Die Determinanten ermöglicht auch, eine Formel für die Lösung eines Gleichungssystems zu geben. Dies ist bekannt als die {\em Regel von Cramer}. +\index{Cramer, Regel von}% +\index{Cramersche Regel}% +\index{Regel von Cramer}% \begin{satz} \label{buch:linear:determinante:cramer} @@ -967,13 +1046,13 @@ Die Inverse der $n\times n$-Matrix $A$ ist gegeben durch \index{Formel für die inverse Matrix}% \index{inverse Matrix, Formel für}% \begin{equation} -(A^{-1})_{ij} +(A^{-1})_{i\!j} = \frac{1}{\det(A)} \begin{pmatrix} -\det(A_{11}) & -\det(A_{21}) & \dots & (-1)^{i+1}\det(A_{i1}) & \dots +\phantom{(-1)^{1+1}}\det(A_{11}) & \phantom{()^{1+1}}-\det(A_{21}) & \dots & (-1)^{i+1}\det(A_{i1}) & \dots & (-1)^{1+n} \det(A_{n1}) \\ --\det(A_{12}) & \det(A_{22}) & \dots & (-1)^{i+2}\det(A_{i2}) & \dots +\phantom{()^{1+1}}-\det(A_{12}) & \phantom{(-1)^{1+1}}\det(A_{22}) & \dots & (-1)^{i+2}\det(A_{i2}) & \dots & (-1)^{2+n} \det(A_{n2}) \\ \vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\ (-1)^{1+j}\det(A_{1j}) & (-1)^{2+j}\det(A_{2j}) & \dots @@ -982,7 +1061,7 @@ Die Inverse der $n\times n$-Matrix $A$ ist gegeben durch \vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\ (-1)^{1+n}\det(A_{1n}) & (-1)^{2+n}\det(A_{2n}) & \dots & (-1)^{i+n}\det(A_{in}) - & \dots & \det(A_{nn}) + & \dots & \phantom{(-1)^{n+n}}\det(A_{nn}) \end{pmatrix} \label{buch:linalg:inverse:formel} \end{equation} @@ -992,7 +1071,7 @@ heisst die {\em Adjunkte} $\operatorname{adj}A$ von $A$. \index{Adjunkte}% \end{satz} -Der Satz~\ref{buch:linalg:inverse:adjoint} liefert eine algebraische +Der Satz~\ref{buch:linalg:inverse:adjunkte} liefert eine algebraische Formel für die Elemente der inversen Matrix. Für kleine Matrizen wie im nachfolgenden Beispiel ist die Formel~\eqref{buch:linalg:inverse:formel} oft einfachter anzuwenden. @@ -1011,7 +1090,7 @@ d&-b\\ erhält. \begin{beispiel} -Die Inverse der Matrix +Die Matrix \begin{equation} A=\begin{pmatrix} 1&a&a\\ @@ -1022,8 +1101,9 @@ a&a&1 \end{equation} ist mit Hilfe von Determinanten besonders einfach zu invertieren. Die Determinante von $A$ ist nach der Sarrus-Formel +Satz~\ref{buch:linear:determinate:sarrus} \[ -\operatorname{adj}A +\operatorname{det}A = 1 + 2a^3 - 3a^2. \] @@ -1048,13 +1128,13 @@ A^{-1} -\left|\begin{matrix}a&a\\a&1\end{matrix}\right| & \left|\begin{matrix}a&a\\1&a\end{matrix}\right| -\\ +\\[10pt] -\left|\begin{matrix}a&a\\a&1\end{matrix}\right| & \left|\begin{matrix}1&a\\a&1\end{matrix}\right| & -\left|\begin{matrix}1&a\\a&a\end{matrix}\right| -\\ +\\[10pt] \left|\begin{matrix}a&1\\a&a\end{matrix}\right| & -\left|\begin{matrix}1&a\\a&a\end{matrix}\right| @@ -1071,7 +1151,7 @@ a^2-a & a^2-a & 1-a^2 \end{pmatrix}. \end{align*} Mit $1-a^2=(1+a)(1-a)$ und $a^2-a=a(a-1)$ kann man dies noch etwas -vereinfachen, indem man den gemeinsamen Faktor $1-a$ ausklammern. +vereinfachen, indem man den gemeinsamen Faktor $1-a$ ausklammert. Man erhält so die Form \begin{equation} A^{-1} @@ -1091,6 +1171,7 @@ für die Inverse einer Matrix der Form \subsubsection{Produktregel für die Determinante} Aus der Charakterisierung der Determinanten kann man auch ableiten, dass die Produktregel +\index{Produktregel}% \[ \det (AB) = \det(A) \cdot \det(B) \] @@ -1114,8 +1195,9 @@ dass die Operationen des Vektorraums erhalten bleiben. Dies wird von der folgenden Definition erreicht. \begin{definition} +\index{lineare Abbildung}% Eine Abbildung $f\colon V\to U$ zwischen Vektorräumen $V$ und $U$ -heisst linear, wenn +heisst {\em linear}, wenn \[ \begin{aligned} f(v+w) &= f(v) + f(w)&&\forall v,w\in V @@ -1126,12 +1208,13 @@ f(\lambda v) &= \lambda f(v) &&\forall v\in V,\lambda \in \Bbbk gilt. \end{definition} -Lineare Abbildungen sind in der Mathematik sehr verbreitet. +Lineare Abbildungen sind in der Mathematik weit verbreitet, wie die +folgenden Beispiele zeigen. \begin{beispiel} Sie $V=C^1([a,b])$ die Menge der stetig differenzierbaren Funktionen auf dem Intervall $[a,b]$ und $U=C([a,b])$ die Menge der -stetigen Funktion aif $[a,b]$. +stetigen Funktion auf $[a,b]$. Die Ableitung $\frac{d}{dx}$ macht aus einer Funktion $f(x)$ die Ableitung $f'(x)$. Die Rechenregeln für die Ableitung stellen sicher, dass @@ -1196,9 +1279,12 @@ x_n(a_{1n} c_1 + \dots + a_{mn} c_m) Die Koordinaten von $f(x)$ in der Basis $\mathcal{C}$ in $U$ sind also gegeben durch das Matrizenprodukt $Ax$, wenn $x$ der Spaltenvektor aus den Koordinaten in der Basis $\mathcal{B}$ in $V$ ist. +Die Matrix $A$ heisst die Matrix der linearen Abbildung $f$ in +den Basen $\mathcal{B}$ bzw.~$\mathcal{C}$. +\index{Matrix einer linearen Abbildung}% Die Matrix einer linearen Abbildung macht Aussagen über eine lineare -Abbilung der Rechnung zugänglich. +Abbilung der rechnerischen Untersuchung zugänglich. Allerdings hängt die Matrix einer linearen Abbildung von der Wahl der Basis ab. Gleichzeitig ist dies eine Chance, durch Wahl einer geeigneten Basis @@ -1208,10 +1294,10 @@ Problems optimal geeignet ist. \subsubsection{Basiswechsel} In einem Vektorraum $V$ seien zwei Basen $\mathcal{B}=\{b_1,\dots,b_n\}$ und $\mathcal{B}'=\{b_1',\dots,b_n'\}$ gegeben. -Ein Vektor $v\in V$ kann in beiden beiden Basen dargestellt werden. +Ein Vektor $v\in V$ kann in beiden Basen dargestellt werden. Wir bezeichnen mit dem Spaltenvektor $x$ die Koordinaten von $v$ in der Basis $\mathcal{B}$ und mit dem Spaltenvektor $x'$ die Koordinaten -in der Basisi $\mathcal{B}'$. +in der Basis $\mathcal{B}'$. Um die Koordinaten umzurechnen, muss man die Gleichung \begin{equation} x_1b_1 + \dots + x_nb_n = x_1'b_1' + \dots + x_n'b_n' @@ -1220,7 +1306,7 @@ x_1b_1 + \dots + x_nb_n = x_1'b_1' + \dots + x_n'b_n' lösen. Stellt man sich die Vektoren $b_i$ und $b_j'$ als $m$-dimensionale -Spaltenvektoren vor mit $m\ge n$, dann bekommt +Spaltenvektoren mit $m\ge n$ vor, dann bekommt \eqref{buch:vektoren-und-matrizen:eqn:basiswechselgleichung} die Form eines Gleichungssystems \[ @@ -1231,7 +1317,8 @@ b_{m1}x_1&+& \dots &+&b_{mn}x_n&=&b_{m1}'x_1'&+& \dots &+&b_{mn}'x_n' \end{linsys} \] Dieses Gleichungssystem kann man mit Hilfe eines Gauss-Tableaus lösen. -Wir schreiben die zugehörigen Variablen +Wir schreiben die zugehörigen Variablen in die Kopfzeile der Tableaus. +Die Durchführung des Gauss-Algorithmus liefert \[ \renewcommand{\arraystretch}{1.1} \begin{tabular}{|>{$}c<{$} >{$}c<{$} >{$}c<{$}|>{$}c<{$}>{$}c<{$}>{$}c<{$}|} @@ -1267,12 +1354,28 @@ Vektor in $V$ sich in beiden Mengen $\mathcal{B}$ und $\mathcal{B}'$ ausdrücken lässt. Dies folgt aber aus der Tatsache, dass $\mathcal{B}$ und $\mathcal{B}'$ beide Basen sind, also insbesondere den gleichen Raum aufspannen. -Die $n\times n$-Matrix $T$ mit Komponenten $t_{ij}$ rechnet Koordinaten +Die $n\times n$-Matrix $T$ mit Komponenten $t_{i\!j}$ rechnet Koordinaten in der Basis $\mathcal{B}'$ um in Koordinaten in der Basis $\mathcal{B}$. +\subsubsection{Basiswechselformel für die Matrix einer linearen Abbildung} +Die Matrix einer linearen Abbildung $f\colon U\to V$ ist abhängig von den +in $U$ bzw.~$V$ gewählten Basen $\mathcal{B}$ bzw.~$\mathcal{C}$. +Wechselt man die Basis und verwendet in $U$ die Basis $\mathcal{B}'$ und +in $V$ die Basis $\mathcal{C}'$, dann gibt es Matrizen +$T_U$ und $T_V$, die die Koordinaten in $U$ bzw.~$V$ von der gestrichenen +Basis in die gestrichen umzurechnen gestattet. +Ist $A$ die Matrix von $A$ in den Basen $\mathcal{B}$ und $\mathcal{C}$, +dann ist Matrix der gleichen Abbildung in den Basen $\mathcal{B}'$ +und $\mathcal{C}'$ gegeben durch die Matrix +\begin{equation} +A' = T_VAT_U^{-1}. +\label{buch:vektoren-und-matrizen:eqn:basiswechselabb} +\end{equation} + \subsubsection{Umkehrabbbildung} Sei $f$ eine umkehrbare lineare Abbildung $U\to V$ und $g\colon V\to U$. die zugehörige Umkehrabbildung. +\index{Umkehrabbildung}% Für zwei Vektoren $u$ und $w$ in $U$ gibt es daher Vektoren $a=g(u)$ und $b=g(w)$ in $V$ derart, dass $f(a)=u$ und $f(b)=w$. Weil $f$ linear ist, folgt daraus $f(a+b)=u+w$ und $f(\lambda a)=\lambda a$ @@ -1305,6 +1408,8 @@ Ist $f$ eine lineare Abbildung $U\to V$, dann heisst die Menge \{x\in U\;|\; f(x)=0\} \] der {\em Kern} oder {\em Nullraum} der linearen Abbildung $f$. +\index{Kern}% +\index{Nullraum}% Ist $A \in M_{m\times n}(\Bbbk)$ Matrix, dann gehört dazu eine lineare Abbildung $f\colon\Bbbk^n\to\Bbbk^m$. Der Kern oder Nullraum der Matrix $A$ ist die Menge @@ -1326,8 +1431,9 @@ gilt. Ob ein Gleichungssystem $Ax=b$ überhaupt eine Lösung hat, hängt davon, ob der Vektor $b$ als Bild der durch $A$ beschriebenen linearen Abbildung -$\Bbbk^n \to \Bbbk^m$ enthalten ist. -Wir definieren daher das Bild einer linearen Abbildung oder Matrix. +$\Bbbk^n \to \Bbbk^m$ dargestellt werden kann. +Wir definieren daher das Bild einer linearen Abbildung oder Matrix +wie folgt. \begin{definition} Ist $f\colon V\to U$ eine lineare Abbildung dann ist das Bild von $f$ @@ -1336,25 +1442,26 @@ der Unterraum \operatorname{im}f = \{ f(v)\;|\;v\in V\} \subset U \] von $U$. -Das Bild einer $m\times n$-Matrix $A$ ist die Menge +Das {\em Bild} einer $m\times n$-Matrix $A$ ist die Menge \[ \operatorname{im}A = \{ Av \;|\; v\in\Bbbk^n\} \subset \Bbbk^m. \] \end{definition} +\index{Bild}% Zwei Vektoren $a,b\in\operatorname{im} f$ haben Urbilder $u,w\in V$ mit $f(u)=a$ und $f(w)=b$. Für Summe und Multiplikation mit Skalaren folgt \[ \begin{aligned} -a+b&= f(u)+f(v)=f(u+v) &&\Rightarrow a+b\in\operatorname{im}f\\ -\lambda a&=\lambda f(u) = f(\lambda u) &&\Rightarrow \lambda a&\in\operatorname{im}f, +a+b &= f(u)+f(v)=f(u+v) & \Rightarrow & a+b &\in\operatorname{im}f\\ +\lambda a &=\lambda f(u) = f(\lambda u) & \Rightarrow & \lambda a &\in\operatorname{im}f, \end{aligned} \] also ist auch das Bild $\operatorname{im}f$ ein Unterraum von $U$. Das Bild der Matrix $A$ ist der Unterraum \[ -\{ x_1f(b_1) + \dots x_n f(b_n) | x_i\in\Bbbk\} +\{ x_1f(b_1) + \dots x_n f(b_n) \,|\, x_i\in\Bbbk\} = \langle f(b_1),\dots,f(b_n)\rangle = @@ -1369,6 +1476,7 @@ Sei $A$ eine Matrix $A\in M_{m\times n}(\Bbbk)$. Der {\em Rang} der Matrix $A$ ist die Dimension des Bildraumes von $A$: $\operatorname{rank}A=\dim\operatorname{im} A$. \index{Rang einer Matrix}% +\index{rank@$\operatorname{rank}A$}% Der {\em Defekt} der Matrix $A$ ist die Dimension des Kernes von $A$: $\operatorname{def}A=\dim\ker A$. \index{Defekt einer Matrix}% @@ -1389,5 +1497,94 @@ n-\operatorname{def}A. \] \end{satz} +\begin{proof}[Beweis] +Der Defekt der Matrix $A$ ist die Dimension des Kernes, also die +Dimension des Lösungsraumes des homogenen Gleichungssystems mit +Koeffizientenmatrix $A$. +Dies ist auch die Anzahl der frei wählbaren Variablen nach +der Durchführung des Gaussalgorithmus +Die behauptete Bezieung kann man jetzt unmittelbar aus dem +Schlusstableau +\begin{center} +\begin{tikzpicture}[>=latex,thick,scale=0.5] +\draw (0,0) rectangle (8,7); +\draw (0,3) -- (8,3); +\draw (4,0) -- (4,7); +\node at (0.5,6.5) {$1$}; +\node at (2,5.25) {$\ddots$}; +\node at (3.5,3.5) {$1$}; + +\node at (4.5,6.5) {$*$}; +\node at (4.5,3.5) {$*$}; +\node at (7.5,6.5) {$*$}; +\node at (7.5,3.5) {$*$}; +\node at (4.5,5.25) {$\vdots$}; +\node at (7.5,5.25) {$\vdots$}; +\node at (6,3.5) {$\cdots$}; +\node at (6,6.5) {$\cdots$}; +\node at (6,5.25) {$\ddots$}; + +\node at (2,1.5) {$0$}; +\node at (6,1.5) {$0$}; + +\draw[<->] (-0.3,7) -- (-0.3,3); +\node at (-0.3,5) [left] {$\operatorname{rank}A$}; +\draw[<->] (4,7.3) -- (8,7.3); +\node at (6,7.3) [above] {$\operatorname{def}A\mathstrut$}; +\node at (2,7.3) [above] {$n-\operatorname{def}A\mathstrut$}; +\draw[<->] (0,7.3) -- (4,7.3); +\draw[<->] (0,-0.3) -- (8,-0.3); +\node at (4,-0.3) [below] {$n$}; +\end{tikzpicture} +\end{center} +ablesen. +\end{proof} + +\subsubsection{Gauss-Algorithmus und Basiswechsel} +Die Zeilenoperationen des Gauss-Algorithmus können durch Multiplikation +mit Matrizen der Form +\[ +\begin{pmatrix} +1& & & & & & & \\ + &\ddots& & & & & & \\ + & &1& & & & & \\ + & & &{\color{red}1} & & & & \\ + & & &{\color{blue}-a_{i+1,i}}&1& & & \\ + & & &{\color{blue}-a_{i+2,i}}& &1& & \\ + & & &\vdots & & &\ddots& \\ + & & &{\color{blue}-a_{n,i}} & & & &1 +\end{pmatrix} +\] +ausgedrückt werden. +Diese Matrizen sind alle invertiertbar. +Man kann die Zeilenoperationen also als ein Basiswechsel im Bildraum +verstehen. + \subsubsection{Quotient} -TODO: $\operatorname{im} A \simeq \Bbbk^m/\ker A$ +Ist $U\subset V$ ein Unterraum, dann kann man einen neuen Vektorraum +$V/U$ bilden, dessen Vektoren Äquivalenzklassen von Vektoren aus $V$ +sind, die sich nur um einen Vektor aus $U$ unterscheiden. +Wir können solche Vektoren als $v+U$ schreiben. +Diese abstrakte Definition des Quotienten kann im Falle +des Quotienten $\Bbbk^n / \ker A$ mit Hilfe des +Gauss-Algorithmus wesentlich anschaulicher realisiert werden, +wie im folgenden Abschnitt gezeigt wird. + +\subsubsection{Realisierung des Quotienten} +Der Quotient besteht aus den Vektoren, die ``übrig'' bleiben, wenn man die +Vektoren im Kern mit $0$ identifiziert. +Man kann ihn sich als das Bild vorstellen. + +Etwas konkreter erlaubt der Gauss-Algorithmus, +für das Bild $\operatorname{im}A$ eine Basis zu finden. +Aus dem Schlusstableau lässt sich zunächst eine Basis des Kernes +ablesen, dies sind die ``grünen'' Spalten. +Die Pivotspalten bilden dagegen eine Basis für den Bildraum +nach dem im vorangegangenen Abschnitt angesprochenen Basiswechsel. + +Die Pivotspalten beschreiben Vektoren, die durch die Abbildung {\em nicht} +zu $0$ gemacht werden. +Wendet man $A$ auf die Standardbasisvektoren ab, die zu den +Pivospalten gehören, erhält man also eine Basis für da Bild +von $A$. + diff --git a/buch/chapters/10-vektorenmatrizen/ringe.tex b/buch/chapters/10-vektorenmatrizen/ringe.tex index 21b29c2..3b2780a 100644 --- a/buch/chapters/10-vektorenmatrizen/ringe.tex +++ b/buch/chapters/10-vektorenmatrizen/ringe.tex @@ -13,6 +13,7 @@ Eine ähnliche Situation haben wir bei $M_n(\Bbbk)$ angetroffen. $M_n(\Bbbk)$ ist eine zunächst eine Gruppe bezüglich der Addition, hat aber auch noch eine Multiplikation, die nicht immer umkehrbar ist. Diese Art von Struktur nennt man einen Ring. +\index{Ring} \subsubsection{Definition eines Rings} @@ -21,6 +22,7 @@ Diese Art von Struktur nennt man einen Ring. Eine Menge $R$ mit einer additiven Operation $+$ mit neutralem Element $0$ und einer multiplikativ geschriebenen Operation $\cdot$ heisst ein {\em Ring}, wenn folgendes gilt. +\index{Ring}% \begin{enumerate} \item $R$ ist eine Gruppe bezüglich der Addition. @@ -56,14 +58,15 @@ kein neutrales Element hat oder beides. \begin{definition} \index{Ring mit Eins}% -Ein Ring $R$ heisst ein Ring mit Eins, wenn die Multiplikation ein +Ein Ring $R$ heisst ein {\em Ring mit Eins}, wenn die Multiplikation ein neutrales Element hat. +\index{Ring mit Eins}% \end{definition} \begin{definition} \index{Ring!kommutativ}% \index{kommutativer Ring}% -Ein Ring $R$ heisst kommutativ, wenn die Multiplikation kommutativ +Ein Ring $R$ heisst {\em kommutativ}, wenn die Multiplikation kommutativ ist. \end{definition} @@ -93,7 +96,7 @@ für $a,b\in c(\mathbb{Z})$. Die Algebra ist kommutativ und hat die konstante Folge $u_n = 1\;\forall n$ als Eins. -Wir betrachten jetzt ein Unterring $c_0(\mathbb{Z})\subset c(\mathbb{Z})$ +Wir betrachten jetzt den Unterring $c_0(\mathbb{Z})\subset c(\mathbb{Z})$ bestehend aus den Folgen, die nur für endlich viele Folgenglieder von $0$ verschieden sind. Für eine Folge $a\in c_0(\mathbb{Z})$ gibt es eine Zahl $N$ derart, dass @@ -138,8 +141,8 @@ Ebenso ist das Produkt dieser Zahlen weil Realteil $ac-bd\in\mathbb{Z}$ und der Imaginärteil $ad+bc\in\mathbb{Z}$ ganze Zahlen sind. Die Menge $\mathbb{Z}[i]$ ist also ein kommutative Ring mit Eins, er -heisst der Ring der ganzen {\em Gaussschen Zahlen}. -\index{Gausssche Zahlen}% +heisst der Ring der {\em ganzen Gaussschen Zahlen}. +\index{ganze Gausssche Zahlen}% \end{beispiel} \begin{beispiel} @@ -214,14 +217,17 @@ $U(M_n(\Bbbk))=\operatorname{GL}_n(\Bbbk)$. \subsubsection{Nullteiler} Ein möglicher Grund, warum ein Element $r\in R$ nicht invertierbar -ist, kann sein, dass es ein Element $s\in R$ gibt mit $rs=0$. +ist, kann sein, dass es ein Element $s\in R$ mit $rs=0$ gibt. Wäre nämlich $t$ ein inverses Element, dann wäre $0=t0 = t(rs) = (tr)s=s$. \begin{definition} +\label{buch:grundlagen:def:nullteiler} Ein Element $r\in R^*$ heisst ein {\em Nullteiler} in $R$, wenn es ein $s\in R^*$ gibt mit $rs=0$ Ein Ring ohne Nullteiler heisst {\em nullteilerfrei}. \end{definition} +\index{Nullteiler}% +\index{nullteilerfrei}% In $\mathbb{R}$ ist man sich gewohnt zu argumentieren, dass wenn ein Produkt $ab=0$ ist, dann muss einer der Faktoren $a=0$ oder $b=0$ sein. diff --git a/buch/chapters/10-vektorenmatrizen/skalarprodukt.tex b/buch/chapters/10-vektorenmatrizen/skalarprodukt.tex index 408bfeb..b249d0d 100644 --- a/buch/chapters/10-vektorenmatrizen/skalarprodukt.tex +++ b/buch/chapters/10-vektorenmatrizen/skalarprodukt.tex @@ -17,8 +17,9 @@ der genau der geometrischen Intuition entspricht. \subsection{Bilinearformen und Skalarprodukte \label{buch:subsection:bilinearformen}} -Damit man mit einem Skalarprodukt rechnen kann wie mit jedem anderen -Produkt, müssen man auf beiden Seiten des Zeichesn ausmultiplizieren können: +Damit man mit einem Skalarprodukt wie mit jedem anderen Produkt +rechnen kann, müssen man auf beiden Seiten des Zeichesn ausmultiplizieren +können: \begin{align*} (\lambda x_1 + \mu x_2)\cdot y &= \lambda x_1\cdot y + \mu x_2\cdot y\\ x\cdot (\lambda y_1 + \mu y_2) &= \lambda x\cdot y_1 + \mu x\cdot y_2. @@ -48,7 +49,7 @@ Eine bilineare Funktion mit Werten in $\Bbbk$ heisst auch {\em Bilinearform}. Das Skalarprodukt hängt nicht von der Reihenfolge der Faktoren ab. In Frage dafür kommen daher nur Bilnearformen $f\colon V\times V\to\Bbbk$, die zusätzlich $f(x,y)=f(y,x)$ erfüllen. -Solche Bilinearformen heissen symmetrisch. +Solche Bilinearformen heissen {\em symmetrisch}. Für eine symmetrische Bilinearform gilt die binomische Formel \begin{align*} f(x+y,x+y) @@ -62,8 +63,19 @@ f(x,x)+2f(x,y)+f(y,y) \end{align*} wegen $f(x,y)=f(y,x)$. +Aus einer beliebigen bilinearen Funktion $g(x,y)$ kann immer eine +symmetrische bilineare Funktion $f(x,y)$ gewonnen werden, indem +man +\[ +f(x,y) = \frac12 \bigl(g(x,y)+g(x,y)\bigr) +\] +setzt. +Dieser Prozess heisst auch {\em Symmetrisieren}. +\index{symmetrisieren}% +Ist $g$ bereits symmetrische, dann ist $g(x,y)=f(x,y)$. + \subsubsection{Positiv definite Bilinearformen und Skalarprodukt} -Bilinearität alleine genügt nicht, um einen Vektorraum mit einem +Bilinearität allein genügt nicht, um einen Vektorraum mit einem nützlichen Abstandsbegriff auszustatten. Dazu müssen die berechneten Abstände vergleichbar sein, es muss also eine Ordnungsrelation definiert sein, wie wir sie nur in $\mathbb{R}$ @@ -75,15 +87,14 @@ Man lernt in der Vektorgeometrie, dass sich mit einer Bilinearform $f\colon V\times V\to\mathbb{R}$ die Länge eines Vektors $x$ definieren lässt, indem man $\|x\|^2 = f(x,x)$ setzt. -Ausserdem muss $f(x,x)\ge 0$ sein für alle $x$, was die Bilinearität +Dazu muss $f(x,x)\ge 0$ sein für alle $x$, was die Bilinearität allein nicht garantieren kann. Verschiedene Punkte in einem Vektorraum sollen in dem aus der Bilinearform abgeleiteten Abstandsbegriff immer unterscheidbar sein. Dazu muss jeder von $0$ verschiedene Vektor positive Länge haben. -% XXX Positiv definite Form \begin{definition} -Eine Bilinearform $f\colon V\times V\to\mathbb{R}$ +Eine symmetrische Bilinearform $f\colon V\times V\to\mathbb{R}$ heisst {\em positiv definit}, wenn \index{positiv definit}% \[ @@ -94,12 +105,14 @@ geschrieben. \index{Skalarprodukt}% Die {\em $l^2$-Norm} $\|x\|_2$ eines Vektors ist definiert durch $\|x\|_2^2 = \langle x,x\rangle$. +\index{l2-norm@$l^2$-Norm}% \end{definition} \subsubsection{Dreiecksungleichung} % XXX Dreiecksungleichung Damit man sinnvoll über Abstände sprechen kann, muss die Norm -$\|\;\cdot\;\|_2$ der geometrischen Intuition folgen, die durch +$\|\mathstrut\cdot\mathstrut\|_2$ +der geometrischen Intuition folgen, die durch die Dreiecksungleichung ausgedrückt wird. In diesem Abschnitt soll gezeigt werden, dass die $l^2$-Norm diese immer erfüllt. @@ -107,14 +120,17 @@ Dazu sei $V$ ein $\mathbb{R}$-Vektorraum mit Skalarprodukt $\langle\;,\;\rangle$. \begin{satz}[Cauchy-Schwarz-Ungleichung] +\label{buch:skalarprodukt:satz:cauchy-schwarz-ungleichung} Für $x,y\in V$ gilt -\[ +\begin{equation} |\langle x,y\rangle | \le \| x\|_2\cdot \|y\|_2 -\] +\label{buch:skalarprodukt:eqn:cauchy-schwarz-ungleichung} +\end{equation} mit Gleichheit genau dann, wenn $x$ und $y$ linear abhängig sind. \end{satz} +\index{Cauchy-Schwarz-Ungleichung}% \begin{proof}[Beweis] Wir die Norm von $z=x-ty$: @@ -152,7 +168,7 @@ x - \frac{\langle x,y\rangle}{\|y\|_2^2}y }{ \|y\|_2^2 } -\ge 0 +\ge 0. \intertext{Es folgt} &&&\Rightarrow& \|x\|_2^2\cdot\|y\|_2^2 - (\langle x,y\rangle)^2 &\ge 0 @@ -164,14 +180,18 @@ mit Gleichheit genau dann, wenn es ein $t$ gibt mit $x=ty$. \end{proof} \begin{satz}[Dreiecksungleichung] +\label{buch:skalarprodukt:satz:dreiecksungleichung} Für $x,y\in V$ ist \[ \| x + y \|_2 \le \|x\|_2 + \|y\|_2 \] mit Gleichheit genau dann, wenn $x=ty$ ist für ein $t\ge 0$. \end{satz} +\index{Dreiecksungleichung}% \begin{proof}[Beweis] +Wir berechnen die Norm von $x+y$ und wenden die +Cauchy-Schwarz-Ungleichung darauf an: \begin{align*} \|x+y\|_2^2 &= @@ -189,20 +209,21 @@ mit Gleichheit genau dann, wenn $x=ty$ ist für ein $t\ge 0$. 2\langle x,y\rangle + \|y\|_2^2 -= -\|x\|_2^2 + 2\langle x,y\rangle + \|y\|_2^2 -\le +\\ +&\le \|x\|_2^2 + 2\|x\|_2\cdot\|y\|_2 + \|y\|_2^2 \\ &= (\|x\|_2 + \|y\|_2)^2 \\ +\Rightarrow\qquad \|x + y\|_2 -&\le \|x\|_2 + \|y\|_2, +&\le \|x\|_2 + \|y\|_2. \end{align*} Gleichheit tritt genau dann ein, wenn $\langle x,y\rangle=\|x\|_2\cdot \|y\|_2$. -Dies tritt genau dann ein, wenn die beiden Vektoren linear abhängig sind. +Dies tritt nach Satz~\ref{buch:skalarprodukt:satz:cauchy-schwarz-ungleichung} +genau dann ein, wenn die beiden Vektoren linear abhängig sind. \end{proof} \subsubsection{Polarformel} @@ -215,6 +236,7 @@ Norm zurückgewinnen. Dies ist der Inhalt der sogenannte Polarformel. \begin{satz}[Polarformel] +\label{buch:skalarprodukt:satz:polarformel} Ist $\|\cdot\|_2$ eine Norm, die aus einer symmetrischen Bilinearform $\langle\;,\;\rangle$ hervorgegangen ist, dann kann die Bilinearform mit Hilfe der Formel @@ -232,6 +254,7 @@ mit Hilfe der Formel \end{equation} für $x,y\in V$ wiedergewonnen werden. \end{satz} +\index{Polarformel}% \begin{proof}[Beweis] Die binomischen Formel @@ -269,13 +292,14 @@ Seien $U,V,W$ komplexe Vektorräume. Eine Abbildung $f\colon U\times V\to W$ heisst {\em sesquilinear}\footnote{Das lateinische Wort {\em sesqui} bedeutet eineinhalb, eine Sesquilinearform ist also eine Form, die in einem -Faktor (dem zweiten) linear ist, und im anderen nur halb linear.} -\index{sesquilinear} +Faktor (dem zweiten) linear ist, und im anderen nur ``halb'' linear. +} +\index{sesquilinear}% wenn gilt \begin{align*} -f(\lambda x_1+\mu x_2,y) &= \overline{\lambda}f(x_1,y) + \overline{\mu}f(x_2,y) +f(\lambda x_1+\mu x_2,y) &= \overline{\lambda}f(x_1,y) + \overline{\mu}f(x_2,y), \\ -f(x,\lambda y_1+\mu y_2) &= \lambda f(x,y_1) + \mu f(x,y_2) +f(x,\lambda y_1+\mu y_2) &= \lambda f(x,y_1) + \mu f(x,y_2). \end{align*} \end{definition} @@ -295,6 +319,23 @@ Für die Norm $\|x\|_2^2=\langle x,x\rangle$ bedeutet dies jetzt \subsection{Orthognormalbasis \label{buch:subsection:orthonormalbasis}} \index{orthonormierte Basis}% +Sowohl die Berechnung von Skalarprodukten wie auch der Basis-Wechsel +werden besonders einfach, wenn die verwendeten Basisvektoren orthogonal +sind und Länge $1$ haben. + +\subsubsection{Orthogonale Vektoren} +In der Vektorgeometrie definiert man den Zwischenwinkel $\alpha$ +zwischen zwei von $0$ verschiedene Vektoren $u$ und $v$ mit Hilfe +des Skalarproduktes und er Formel +\[ +\cos\alpha = \frac{\langle u,v\rangle}{\|u\|_2\cdot\|v\|_2}. +\] +Der Winkel ist $\alpha=90^\circ$ genau dann, wenn das Skalarprodukt +verschwindet. +Zwei Vektoren $u$ und $v$ heissen daher {\em orthogonal} genau dann, +wenn $\langle u,v\rangle=0$. +Wir schreiben dafür auch $u\perp v$. +\index{orthogonal}% \subsubsection{Gram-Matrix} Sei $V$ ein Vektorraum mit einem Skalarprodukt und $\{b_1,\dots,b_n\}$ eine @@ -308,7 +349,7 @@ y = \sum_{i=1}^n \eta_i b_i \] berechnen? Setzt man $x$ und $y$ in das Skalarprodukt ein, erhält man -\begin{align*} +\begin{align} \langle x,y\rangle &= \biggl\langle @@ -317,31 +358,70 @@ Setzt man $x$ und $y$ in das Skalarprodukt ein, erhält man \biggr\rangle = \sum_{i,j=1}^n \xi_i\eta_j \langle b_i,b_j\rangle. -\end{align*} -Die Komponente $g_{ij}=\langle b_i,b_j\rangle$ bilden die sogenannte -Gram-Matrix $G$. +\label{buch:skalarprodukt:eqn:skalarproduktgram} +\end{align} +Die Komponente $g_{i\!j}=\langle b_i,b_j\rangle$ bilden die sogenannte +{\em Gram-Matrix} $G$. +\index{Gram-Matrix}% +Da das Skalarprodukt eine symmetrische Bilinearform ist, ist die +Gram-Matrix symmetrisch. Mit ihr kann das Skalarprodukt auch in Vektorform geschrieben werden als $\langle x,y\rangle = \xi^t G\eta$. \subsubsection{Orthonormalbasis} -Eine Basis $\{a_1,\dots,a_n\}$ aus orthogonalen Einheitsvektoren, +Eine Basis $\{b_1,\dots,b_n\}$ aus orthonormierten Einheitsvektoren, also mit $ -\langle a_i,a_j\rangle=\delta_{ij} +\langle b_i,b_j\rangle=\delta_{i\!j}, $ heisst {\em Orthonormalbasis}. -In einer Orthonormalbasis ist die Bestimmung der Koordinaten eines -beliebigen Vektors besonders einfach, ist nämlich +\index{Orthonormalbasis}% +Die Gram-Matrix einer Orthonormalbasis ist die Einheitsmatrix. + +Eine Orthonormalbasis zeichnet sich dadurch aus, dass die Berechnung +des Skalarproduktes in einer solchen Basis besonders einfach ist. +Aus \eqref{buch:skalarprodukt:eqn:skalarproduktgram} kann man ablesen, +dass $\langle x,y\rangle = \xi^t G \eta = \xi^t I \eta = \xi^t\eta$. + +In einer Orthonormalbasis ist auch die Bestimmung der Koordinaten +eines beliebigen Vektors besonders einfach. +Sei also $\{b_1,\dots,b_n\}$ eine Orthonormalbasis und $v$ ein +Vektor, der in dieser Basis dargestellt werden soll. +Der Vektor \begin{equation} -v=\sum_{i=1}^n \langle v,a_i\rangle a_i. +v'=\sum_{i=1}^n \langle v,b_i\rangle b_i, \label{buch:grundlagen:eqn:koordinaten-in-orthonormalbasis} \end{equation} -Die Gram-Matrix einer Orthonormalbasis ist die Einheitsmatrix. +hat die Skalarprodukte +\[ +\langle v',b_j\rangle= +\biggl\langle \sum_{i=1}^n \langle v,b_i\rangle b_i,b_j\biggr\rangle += +\sum_{i=1}^n \bigl\langle \langle v,b_i\rangle b_i, b_j\bigr\rangle += +\sum_{i=1}^n \langle v,b_i\rangle \rangle b_i, b_j\rangle += +\sum_{i=1}^n \langle v,b_i\rangle \delta_{i\!j} += +\langle v,b_j\rangle. +\] +Insbesondere gilt +\[ +\langle v,b_j\rangle = \langle v',b_j\rangle +\qquad\Rightarrow\qquad +\langle v-v',b_j\rangle = 0 +\qquad\Rightarrow\qquad +v-v'=0 +\qquad\Rightarrow\qquad +v=v'. +\] +Die Koordinaten von $v$ in der Basis $\{b_i\,|\,1\le i\le n\}$ +sind also genau die Skalarprodukte $\langle v,b_i\rangle$. \subsubsection{Gram-Schmidt-Orthonormalisierung} Mit Hilfe des Gram-Schmidtschen Orthonormalisierungsprozesses kann aus einer beliebige Basis $\{a_1,a_2,\dots,a_n\}\subset V$ eines Vektorraums -mit einem SKalarprodukt eine orthonormierte Basis +mit einem Skalarprodukt eine orthonormierte Basis $\{b_1,b_2,\dots,b_n\}$ gefunden werden derart, dass für alle $k$ $\langle b_1,\dots,b_k\rangle = \langle a_1,\dots ,a_k\rangle$. \index{Gram-Schmidt-Orthonormalisierung}% @@ -392,7 +472,7 @@ a_n-b_1\langle b_1,a_n\rangle-b_2\langle b_2,a_n\rangle \end{align*} Die Basisvektoren $b_i$ sind orthogonal, aber $\|b_i\|_2$ kann auch von $1$ abweichen. -Damit ist es zwar nicht mehr so einfach +Damit ist es leider nicht mehr so einfach wie in \eqref{buch:grundlagen:eqn:koordinaten-in-orthonormalbasis}, einen Vektor in der Basis zu zerlegen. Ein Vektor $v$ hat nämlich in der Basis $\{b_1,\dots,b_n\}$ die Zerlegung @@ -403,10 +483,10 @@ v \frac{\langle b_i,v\rangle}{\|b_i\|_2^2} b_i, \label{buch:grundlagen:eqn:orthogonal-basiszerlegung} \end{equation} -Die Koordinaten bezüglich dieser Basis sind also +die Koordinaten bezüglich dieser Basis sind also $\langle b_i,v\rangle/\|b_i\|_2^2$. -Die Gram-Matrix einer Orthogonalen Basis ist immer noch diagonal, +Die Gram-Matrix einer orthogonalen Basis ist immer noch diagonal, auf der Diagonalen stehen die Normen der Basisvektoren. Die Nenner in der Zerlegung \eqref{buch:grundlagen:eqn:orthogonal-basiszerlegung} @@ -416,7 +496,7 @@ sind die Einträge der inverse Matrix der Gram-Matrix. Die Gram-Matrix einer Basis $\{b_1,\dots,b_n\}$ in einem komplexen Vektorraum hat die Eigenschaft \[ -g_{ij} +g_{i\!j} = \langle b_i,b_j\rangle = @@ -430,11 +510,13 @@ der folgenden Definition. \begin{definition} \label{buch:grundlagen:definition:selstadjungiert} -Sei $A$ eine komplexe Matrix mit Einträgen $a_{ij}$, dann ist +Sei $A$ eine komplexe Matrix mit Einträgen $a_{i\!j}$, dann ist $\overline{A}$ die Matrix mit komplex konjugierten Elementen -$\overline{a}_{ij}$. +$\overline{a}_{i\!j}$. Die {\em adjungierte} Matrix ist $A^*=\overline{A}^t$. -Eine Matrix heisst selbstadjungiert, wenn $A^*=A$. +\index{adjungiert}% +Eine Matrix heisst {\em selbstadjungiert}, wenn $A^*=A$. +\index{selbstadjungiert}% \end{definition} \subsection{Symmetrische und selbstadjungierte Abbilungen @@ -456,12 +538,12 @@ Sei $f\colon V\to V$ eine lineare Abbildung. In einer Basis $\{b_1,\dots,b_n\}\subset V$ wird $f$ durch eine Matrix $A$ beschrieben. Ist die Basis orthonormiert, dann kann man die Matrixelemente -mit $a_{ij}=\langle b_i,Ab_j\rangle$ berechnen. +mit $a_{i\!j}=\langle b_i,Ab_j\rangle$ berechnen. Die Matrix ist symmetrisch, wenn \[ \langle b_i,Ab_j\rangle = -a_{ij} +a_{i\!j} = a_{ji} = @@ -477,6 +559,7 @@ symmetrischen Abbildung ab. Eine lineare Abbildung $f\colon V\to V$ heisst {\em symmetrisch}, wenn $\langle x,Ay\rangle=\langle Ax,y\rangle$ gilt für beliebige Vektoren $x,y\in V$. +\index{symmetrische Abbildung}% \end{definition} Für $V=\mathbb{R}^n$ und das Skalarprodukt $\langle x,y\rangle=x^ty$ @@ -507,6 +590,7 @@ und symmetrisch, sondern sesquilinear und konjugiert symmetrisch. \begin{definition} Eine lineare Abbildung $f\colon V\to V$ heisst {\em selbstadjungiert}, wenn $\langle x,fy\rangle=\langle fx,y\rangle$ für alle $x,y\in\mathbb{C}$. +\index{selbstadjungiert}% \end{definition} Im komplexen Vektorraum $\mathbb{C}^n$ ist das Standardskalarprodukt @@ -528,12 +612,13 @@ Die lineare Abbildung $f^*\colon V\to V$ definiert durch \langle f^*x,y\rangle = \langle x,fy\rangle,\qquad x,y\in V \] heisst die {\em Adjungierte} von $f$. +\index{Adjungierte}% \end{definition} Eine selbstadjungierte Abbildung ist also eine lineare Abbildung, die mit ihrer Adjungierte übereinstimmt, als $f^* = f$. In einer orthonormierten Basis $\{b_1,\dots,b_n\}$ hat die Abbildung -$f$ die Matrixelemente $a_{ij}=\langle b_i,fb_j\rangle$. +$f$ die Matrixelemente $a_{i\!j}=\langle b_i,fb_j\rangle$. Die adjungierte Abbildung hat dann die Matrixelemente \[ \langle b_i,f^*b_j \rangle @@ -560,6 +645,8 @@ Eine lineare Abbildung $f\colon V\to V$ in einem reellen Vektorraum mit heisst {\em orthogonal}, wenn $\langle fx,fy\rangle = \langle x,y\rangle$ für alle $x,y\in V$ gilt. +\index{orthogonale Abbildung}% +\index{orthogonale Matrix}% \end{definition} Die adjungierte einer orthogonalen Abbildung erfüllt @@ -579,18 +666,101 @@ Eine lineare Abbildung $f\colon V\to V$ eines komplexen Vektorraumes $V$ mit Skalarprodukt heisst unitär, wenn $\langle x,y\rangle = \langle fx,fy\rangle$ für alle Vektoren $x,y\in V$. Eine Matrix heisst unitär, wenn $U^*U=I$. +\index{unitäre Abbildung}% +\index{unitäre Matrix}% \end{definition} Die Matrix einer unitären Abbildung in einer orthonormierten Basis ist unitär. -% XXX Skalarprodukt und Lineare Abbildungen -% XXX Symmetrische Matrizen -% XXX Selbstadjungierte Matrizen - \subsection{Orthogonale Unterräume \label{buch:subsection:orthogonale-unterraeume}} -% XXX Invariante Unterräume -% XXX Kern und Bild orthogonaler Abbildungen +Die Orthogonalitätsrelation lässt sich auch auf Unterräume ausdehnen. +Zwei Unterräume $U\subset V$ und $W\subset V$ eines Vektorraums mit +Skalarprodukt heissen orthogonal, wenn gilt +\( +u\perp w\forall u\in U,w\in W +\). + +\subsubsection{Orthogonalkomplement} +Zu einem Unterraum $U$ kann man den Vektorraum +\[ +U^\perp = \{ v\in V\,|\, v\perp u\forall u\in U\} +\] +bilden. +$U^\perp$ ist ein Unterraum, denn für zwei Vektoren +$v_1,v_2\in U^\perp$ gilt +\[ +\langle \lambda v_1+\mu v_2,u\rangle += +\lambda \langle v_1,u\rangle + \mu \langle v_2,u\rangle += +0 +\] +für alle $u\in U$, also ist $\lambda v_1+\mu v_2\in U^\perp$. +Der Unterraum $U^\perp$ heisst das {\em Orthogonalkomplement} +von $U$. +\index{Orthogonalkomplement}% + +\subsubsection{Kern und Bild} +Die adjungierte Abbildung ermöglicht, eine Abbildung in einem +Skalarprodukt auf den anderen Faktor zu schieben und damit +einen Zusammenhang zwischen Bildern und Kernen mit Hilfe des +Orthogonalkomplements herzustellen. + +\begin{satz} +Sei $f\colon U\to V$ eine lineare Abbildung zwischen Vektorräumen +mit Skalarprodukt, und $f^*\colon V \to U$ die adjungierte Abbildung, +Dann gilt +\[ +\begin{aligned} +\ker f^* +&= +(\operatorname{im}f)^\perp +&& +& +\operatorname{im}f\phantom{\mathstrut^*} +&= +(\ker f^*)^\perp +\\ +\ker f\phantom{\mathstrut^*} +&= +(\operatorname{im}f^*)^\perp +& +&& +\operatorname{im}f^* +&= +(\ker f)^\perp. +\end{aligned} +\] +\end{satz} + +\begin{proof}[Beweis] +Es gilt $\langle fu,v\rangle = \langle u,f^*v\rangle$ für +alle $u\in U, v\in V$. +Das Orthogonalkomplement des Bildes von $f$ ist +\begin{align*} +(\operatorname{im} f)^\perp +&= +\{ +v\in V +\,|\, +\langle v, fu\rangle=0\forall u\in U +\} +\end{align*} +Ein Vektor $v$ ist genau dann in $(\operatorname{im}f)^\perp$ enthalten, +wenn für alle $u$ +\[ +0 += +\langle v,fu\rangle += +\langle f^*v,u\rangle +\] +gilt. +Das ist aber gleichbdeutend damit, dass $f^*v=0$ ist, dass also +$v\in\ker f^*$. +Dies beweist die erste Beziehung, alle anderen folgen auf analoge Weise. +\end{proof} \subsection{Andere Normen auf Vektorräumen \label{buch:subsection:andere-normen}} @@ -602,6 +772,7 @@ zusammen. \subsubsection{$l^1$-Norm} \begin{definition} Die $l^1$-Norm in $V=\mathbb{R}^n$ oder $V=\mathbb{C}^n$ ist definiert durch +\index{l1-Norm@$l^1$-Norm}% \[ \| v\|_1 = @@ -652,7 +823,6 @@ ein Widerspruch. \subsubsection{$l^\infty$-Norm} - \begin{definition} Die $l^\infty$-Norm in $V=\mathbb{R}^n$ und $V=\mathbb{C}^n$ ist definiert \[ @@ -662,6 +832,7 @@ Die $l^\infty$-Norm in $V=\mathbb{R}^n$ und $V=\mathbb{C}^n$ ist definiert \] Sie heisst auch die {\em Supremumnorm}. \index{Supremumnorm}% +\index{lunendlich-norm@$l^\infty$-Norm}% \end{definition} Auch diese Norm erfüllt die Dreiecksungleichung @@ -715,6 +886,7 @@ Norm ausgestattet werden, wenn $U$ und $V$ jeweils eine Norm haben. Seien $U$ und $V$ Vektorräume über $\mathbb{R}$ oder $\mathbb{C}$ und $f\colon U\to V$ eine lineare Abbildung. Die {\em Operatorname} der linearen Abbildung ist +\index{Operatornorm}% \[ \|f\| = @@ -736,7 +908,8 @@ l_y \colon V\to \mathbb{C}: x\mapsto \langle y,x\rangle. \] -Zur Berechnung der Operatorname von $l_y$ +Zur Berechnung der Operatorname von $l_y$ verwenden wir die +Cauchy-Schwarz-Ungleichung~\eqref{buch:skalarprodukt:eqn:cauchy-schwarz-ungleichung} \[ |l_y(x)|^2 = @@ -788,6 +961,7 @@ sich auf den Raum der stetigen Funktionen $[a,b]\to\mathbb{R}$ oder $[a,b]\to\mathbb{C}$ verallgemeinern. Die Supremumnorm auf dem Vektorraum der stetigen Funktionen ist +\index{Supremumnorm}% \[ \|f\|_\infty = \sup_{x\in[a,b]} |f(x)| \] @@ -796,6 +970,8 @@ für $f\in C([a,b],\mathbb{R})$ oder $f\in C([a,b],\mathbb{C})$. Für die anderen beiden Normen wird zusätzlich das bestimmte Integral von Funktionen auf $[a,b]$ benötigt. Die $L^2$-Norm wird erzeugt von dem Skalarprodukt +\index{L2-norm@$L^2$-Norm}% +\index{Skalarprodukt}% \[ \langle f,g\rangle = @@ -804,10 +980,38 @@ Die $L^2$-Norm wird erzeugt von dem Skalarprodukt \qquad\Rightarrow\qquad \|f\|_2^2 = \frac{1}{b-a}\int_a^b |f(x)|^2\,dx. \] -Die $L^2$-Norm ist dagegen +Die $L^1$-Norm ist dagegen definiert als. \[ \|f\|_1 = \int_a^b |f(x)|\,dx. \] +Die drei Normen stimmen nicht überein. +Beschränkte Funktionen sind zwar immer integrierbar und quadratintegrierbar. +Es gibt integrierbare Funktionen, die nicht quadratintegrierbar sind, zum +Beispiel ist die Funktion $f(x)=1/\sqrt{x}$ auf dem Interval $[0,1]$ +\begin{align*} +\|f\|_1 +&= +\int_0^1 \frac 1{\sqrt{x}}\,dx += +[2\sqrt{x}]_0^1 += +2 +< +\infty +&&\Rightarrow& \|f\|_1&<\infty +\\ +\|f\|_2^2 +&= +\int_0^1 \biggl(\frac1{\sqrt{x}}\biggr)^2\,dx += +\int_0^1 \frac1x\,dx += +\lim_{t\to 0} [\log x]_t^1 = \infty +&&\Rightarrow& +\|f\|_2 &= \infty. +\end{align*} +Die Vektorräume der integrierbaren und der quadratintegrierbaren Funktionen +sind also verschieden. diff --git a/buch/chapters/10-vektorenmatrizen/strukturen.tex b/buch/chapters/10-vektorenmatrizen/strukturen.tex index a2afa37..2ad7b88 100644 --- a/buch/chapters/10-vektorenmatrizen/strukturen.tex +++ b/buch/chapters/10-vektorenmatrizen/strukturen.tex @@ -17,9 +17,10 @@ werden. Im Laufe der Definition der Vektorräume $\Bbbk^n$ und der Operationen für die Matrizen in $M_{m\times n}(\Bbbk)$ haben wir eine ganze Reihe von algebraischen Strukturen kennengelernt. -Nicht immer sind alle Operationen verfügbar, in einem Vektorraum -gibt es normalerweise kein Produkt. -Und bei der Konstruktion des Zahlensystems wurde gezeigt, dass +Nicht immer sind alle Operationen verfügbar, die uns von der Diskussion +der Zahlenmengen her vertraut sind, zum Beispiel gibt es in einem +Vektorraum normalerweise kein Produkt. +Bei der Konstruktion des Zahlensystems wurde gezeigt, dass additive oder multiplikative Inverse nicht selbstverständlich sind. Sinnvolle Mathematik lässt sich aber erst betreiben, wenn zusammen diff --git a/buch/chapters/20-polynome/chapter.tex b/buch/chapters/20-polynome/chapter.tex index c7fc9e9..fd72a59 100644 --- a/buch/chapters/20-polynome/chapter.tex +++ b/buch/chapters/20-polynome/chapter.tex @@ -38,7 +38,7 @@ verwendet werden, warum also diese Beschränkung. Für die nachfolgenden Betrachtungen stellen wir uns $X$ daher nicht mehr einfach als einen Platzhalter für eine Zahl vor, sondern als ein neues algebraisches Objekt, für das man die Rechenregeln erst noch definieren muss. -In diesem Kapteil sollen die Regeln zum Beispiel sicherstellen, +In diesem Kapitel sollen die Regeln zum Beispiel sicherstellen, dass man mit Polynomen so rechnen kann, wie wenn $X$ eine Zahl wäre. Es sollen also zum Beispiel die Regeln \begin{align} @@ -120,7 +120,7 @@ Elemente einer Algebra sind. \input{chapters/20-polynome/definitionen.tex} \input{chapters/20-polynome/vektoren.tex} -\input{chapters/20-polynome/matrizen.tex} -\input{chapters/20-polynome/minimalpolynom.tex} +%\input{chapters/20-polynome/matrizen.tex} +%\input{chapters/20-polynome/minimalpolynom.tex} diff --git a/buch/chapters/20-polynome/definitionen.tex b/buch/chapters/20-polynome/definitionen.tex index 135ebf6..3c541d8 100644 --- a/buch/chapters/20-polynome/definitionen.tex +++ b/buch/chapters/20-polynome/definitionen.tex @@ -12,8 +12,8 @@ Rechnen mit Polynomen zusammen. % % Skalare % -\subsection{Skalare -\label{buch:subsection:polynome:skalare}} +\subsection{Polynome +\label{buch:subsection:polynome:polynome}} Wie schon in der Einleitung angedeutet sind Polynome nur dann sinnvoll, wenn man mit den Koeffizienten gewisse Rechenoperationen durchführen kann. Wir brauchen mindestens die Möglichkeit, Koeffizienten zu addieren. @@ -31,7 +31,7 @@ in das Polynom einsetzen kann, dann muss es möglich sein, in $R$ zu Multiplizieren und zu Addieren, und es müssen die üblichen Rechenregeln der Algebra gelten, $R$ muss also ein Ring sein. \index{Ring}% -Wir werden im folgenden meistens voraussetzen, dass $R$ sogar kommutativ +Wir werden im folgenden zusätzlich voraussetzen, dass $R$ sogar kommutativ ist und eine $1$ hat. \begin{definition} @@ -85,6 +85,7 @@ X^n + \frac{a_{n-1}}{a_n}X^{n-1} + \dots + \frac{a_0}{a_n} \] machen. Man sagt auch, das Polynom $p(X)$ wurde normiert. +Wenn $R$ ein Körper ist, ist die Normierung immer möglich. Die Tatsache, dass zwei Polynome nicht gleich viele von $0$ verschiedene Koeffizienten haben müssen, verkompliziert die Beschreibung der Rechenoperationen ein wenig. @@ -109,42 +110,10 @@ dass nur über diejenigen Indizes $k$ summiert wird, für die $a_k$ definiert ist. \label{summenzeichenkonvention} -% -% Abschnitt über Polynomring Definition -% -\subsection{Der Polynomring -\label{buch:subsection:polynome:ring}} -Die Menge $R[X]$ aller Polynome über $R$ wird zu einem Ring, wenn man die -Rechenoperationen Addition und Multiplikation so definiert, wie man das -in der Schule gelernt hat. -Die Summe von zwei Polynomen -\begin{align*} -p(X) &= a_nX^n + a_{n-1}X^{n-1} + \dots + a_1X + a_0\\ -q(X) &= b_mX^m + b_{m-1}X^{m-1} + \dots + b_1X + b_0 -\end{align*} -ist -\[ -p(X)+q(X) -= -\sum_{k} (a_k+b_k)X^k, -\] -wobei die Summe wieder so zu interpretieren ist, über alle Terme -summiert wird, für die mindestens einer der Summanden von $0$ -verschieden ist. - -Für das Produkt verwenden wir die Definition -\[ -p(X)q(X) -= -\sum_{k}\sum_{l} a_kb_l X^{k+l}, -\] -die natürlich mit Formel~\eqref{buch:eqn:polynome:faltung} -gleichbedeutend ist. -Die Polynom-Multiplikation und Addition sind nur eine natürliche -Erweiterung der Rechenregeln, die man schon in der Schule lernt, -es ist daher nicht überraschend, dass die bekannten Rechenregeln -auch für Polynome gelten. +Die Menge $R[X]$ aller Polynome über $R$ mit den beschriebenen +Operationen ist ein Ring. Das Distributivgesetz +\index{Distributivgesetz}% \[ p(X)(u(X)+v(X)) = p(X)u(X) + p(X)v(X) \qquad @@ -152,6 +121,7 @@ p(X)(u(X)+v(X)) = p(X)u(X) + p(X)v(X) \] zum Beispiel sagt ja nichts anderes, als dass man ausmultiplizieren kann. +\index{ausmultiplizieren}% Oder die Assoziativgesetze \begin{align*} p(X)+q(X)+r(X) @@ -178,6 +148,7 @@ Reihenfolge man die Additionen oder Multiplikationen ausführt. \begin{definition} Der {\em Grad} eines Polynoms $p(X)$ ist die höchste Potenz von $X$, die im Polynom vorkommt. +\index{Grad eines Polynoms}% Das Polynom \[ p(X) = a_nX^n + a_{n-1}X^{n-1}+\dots a_1X + a_0 @@ -219,10 +190,12 @@ $\deg(\lambda p) \le \deg\lambda + \deg p$. \begin{proof}[Beweis] Wir schreiben die Polynome wieder in der Form -\begin{align*} +\[ +\begin{aligned} p(X) &= a_nX^n + a_{n-1}X^{n-1} + \dots + a_1X + a_0&&\Rightarrow&\deg p&=n\\ q(X) &= b_mX^m + b_{m-1}X^{m-1} + \dots + b_1X + b_0&&\Rightarrow&\deg q&=m. -\end{align*} +\end{aligned} +\] Dann kann der höchste Koeffizient in der Summe $p+q$ nicht weiter oben sein als die grössere von den beiden Zahlen $n$ und $m$ angibt, dies beweist \eqref{buch:eqn:polynome:gradsumme}. @@ -230,48 +203,15 @@ Ebenso kann der höchste Koeffizient im Produkt nach der Formel~\eqref{buch:eqn:polynome:faltung} nicht weiter oben als bei $n+m$ liegen, dies beweist beweist \eqref{buch:eqn:polynome:gradprodukt}. -Es könnte aber passieren, dass $a_nb_m=0$ ist, d.~h.~es ist durchaus möglich, +In einem Ring mit Nullteilern +(Siehe Definition~\ref{buch:grundlagen:def:nullteiler}) +könnte es passieren, dass $a_nb_m=0$ ist, d.~h.~es ist durchaus möglich, dass der Grad kleiner ist. Schliesslich kann der höchsten Koeffizient von $\lambda p(X)$ nicht grösser als der höchste Koeffizient von $p(X)$ sein, was \eqref{buch:eqn:polynome:gradskalar} beweist. \end{proof} -Etwas enttäuschend an diesen Rechenregeln ist, dass der Grad eines -Produktes nicht exakt die Summe der Grade hat. -Der Grund ist natürlich, dass es in gewissen Ringen $R$ passieren kann, -dass das Produkt $a_n\cdot b_m=0$ ist. -Zum Beispiel ist im Ring der $2\times 2$ Matrizen das Produkt der Elemente -\begin{equation} -a_n = \begin{pmatrix}1&0\\0&0\end{pmatrix} -\quad\text{und}\quad -b_m = \begin{pmatrix}0&0\\0&1\end{pmatrix} -\qquad\Rightarrow\qquad -a_nb_m = \begin{pmatrix}0&0\\0&0\end{pmatrix}. -\label{buch:eqn:definitionen:nullteilerbeispiel} -\end{equation} -Diese unangehme Situation tritt immer ein, wenn es von Null verschiedene -Elemente gibt, deren Produkt $0$ ist. -In Matrizenringen ist das der Normalfall, man kann diesen Fall also nicht -einfach ausschliessen. -In den Zahlenmengen wie $\mathbb{Z}$, $\mathbb{Q}$ und $\mathbb{R}$ passiert -das natürlich nie. - -\begin{definition} -Ein Ring $R$ heisst {\em nullteilerfrei}, wenn für zwei Elemente -$a,b\in R$ aus $ab=0$ immer geschlossen werden kann, dass -$a=0$ oder $b=0$. -Ein von $0$ verschiedenes Element $a\in R$ heisst Nullteiler, -wenn es eine $b\in R$ mit $b\ne 0$ gibt derart dass $ab=0$. -\index{Nullteiler} -\index{nullteilerfrei} -\end{definition} - -Die beiden Matrizen in -\eqref{buch:eqn:definitionen:nullteilerbeispiel} -sind Nullteiler im Ring $M_2(\mathbb{Z})$ der $2\times 2$-Matrizen. -Der Matrizenring $M_2(\mathbb{Z})$ ist also nicht nullteilerfrei. - In einem nullteilerfreien Ring gelten die Rechenregeln für den Grad jetzt exakt: @@ -381,6 +321,7 @@ R^{(k+l)}[X]. Im Ring der ganzen Zahlen sind nicht alle Divisionen ohne Rest ausführbar, so entsteht das Konzept der Teilbarkeit. Der Divisionsalgorithmus, den man in der Schule lernt, liefert +\index{Divisionsalgorithmus}% zu beliebigen ganzen Zahlen $a,b\in\mathbb{Z}$ den Quotienten $q$ und den Rest $r$ derart, dass $a=qb+r$. Der Algorithmus basiert auf der Zehnersystemdarstellung @@ -399,11 +340,12 @@ b &= b_mX^{n} + b_{m-1}X^{n-1} + \dots + b_1X^{1} + b_0, \end{align*} mit dem einzigen Unterschied, dass statt $X$ mit der festen Zahl $X=10$ gearbeitet wird. -Der Teilungsalgorithmus für Polynome lässt sich aber leicht +Der Divisionsalgorithmus für Polynome lässt sich aber leicht rekonstruieren. \subsubsection{Polynomdivision} Wir zeigen den Polynomdivisionsalgorithmus an einem konkreten Beispiel. +\index{Polynomdivision}% Gesucht sind Quotient $q\in \mathbb{Z}[X]$ und Rest $r\in\mathbb{Z}[X]$ der beiden Polynome \begin{equation} @@ -427,7 +369,7 @@ X^4&-& X^3&-&7X^2&+& X&+&6&:&X^2&+&X&+&1&=&X^2&-&2X&-&6=q\\ & & & & & &9X&+&12\rlap{$\mathstrut=r$}& & & & & & & & & & & & \\ \cline{7-9} \end{array} \] -Durch nachrechnen kann man überprüfen, dass tatsächlich +Durch Nachrechnen kann man überprüfen, dass tatsächlich \begin{align*} bq &= @@ -445,7 +387,7 @@ Jedes für $q$ in Frage kommende Polynom vom Grad $2$ muss von der Form $q=q_2X^2+q_1X+q_0$ sein. Multipliziert man mit $b$, erhält man $bq=2q_2X^4 + (2q_1+q_2)X^3+\dots$. Insbesondere ist es nicht möglich mit ganzzahligen Quotienten -$q_k\in\mathbb{Z}$ auch nur der ersten Koeffizienten von $a$ zu +$q_k\in\mathbb{Z}$ auch nur den ersten Koeffizienten von $a$ zu erhalten. Dazu müsste nämlich $a_n = 1 = 2q_2$ oder $q_2 = \frac12\not\in\mathbb{Z}$ sein. @@ -454,7 +396,7 @@ Division durch den führenden Koeffizienten des Divisorpolynomes $b$ immer ausführbar ist. Im Beispiel~\eqref{buch:polynome:eqn:divisionsaufgabe} war das der Fall, weil der führende Koeffizient $1$ war. -Für beliebige Polynome $b\in R[X]$ ist das aber nur der Fall, +Für beliebige Polynome $b\in R[X]$ ist dies aber nur dann immer der Fall, wenn die Koeffizienten in Tat und Wahrheit einem Körper entstammen. Im Folgenden betrachten wir daher nur noch Polynomringe mit Koeffizienten @@ -494,6 +436,7 @@ $f=qg+r$, wobei ausserdem $\deg r<\deg g$ ist. \begin{definition} Ein {\em euklidischer Ring} $R$ ist ein nullteilerfreier Ring mit einer +\index{euklischer Ring}% Gradfunktion $\deg\colon R\setminus\{0\}\to\mathbb{N}$ mit folgenden Eigenschaften \begin{enumerate} @@ -520,10 +463,12 @@ zerlegt werden. \subsubsection{Irreduzible Polynome} Das Konzept der Primzahl lässt sich wie folgt in den Polynomring übertragen. +\index{Primzahl}% \begin{definition} -Ein Polynom $f\in R[X]$ heisst irreduzibel, es keine Faktorisierung $f=gh$ -in Faktoren $g,h\in R[X]$ mit $\deg(g)>0$ und $\deg(h) >0$. +Ein Polynom $f\in R[X]$ heisst irreduzibel, wenn es keine Faktorisierung $f=gh$ +in Faktoren $g,h\in R[X]$ mit $\deg(g)>0$ und $\deg(h) >0$ gibt. +\index{irreduzibles Polynom}% \end{definition} \begin{beispiel} @@ -540,7 +485,7 @@ x_i = -\frac{b}2\pm\sqrt{\frac{b^2}{4}-c} \] gefunden werden. Die Faktorisierung ist also genau dann möglich, wenn $b^2/4-c$ ein -Quadrat in $\mathbb{Q}$. +Quadrat in $\mathbb{Q}$ ist. In $\mathbb{R}$ ist das Polynom faktorisierbar, wenn $b^2-4c\ge 0$ ist. In $\mathbb{C}$ gibt es keine Einschränkung, die Wurzel zu ziehen, in $\mathbb{C}$ gibt es also keine irreduziblen Polynome im Grad $2$. @@ -572,12 +517,3 @@ eindeutig sind. \end{satz} -% -% Abschnitt über formale Potenzreihen -% -\subsection{Formale Potenzreihen -\label{buch:subsection:polynome:potenzreihen}} -XXX TODO - - - diff --git a/buch/chapters/20-polynome/vektoren.tex b/buch/chapters/20-polynome/vektoren.tex index 408587d..0743592 100644 --- a/buch/chapters/20-polynome/vektoren.tex +++ b/buch/chapters/20-polynome/vektoren.tex @@ -25,14 +25,14 @@ a_{n-1}\\ a_{n} \end{pmatrix} \in -R^n. +R^{n+1}. \] Diese Darstellung eines Polynoms gibt auch die Addition von Polynomen und die Multiplikation von Polynomen mit Skalaren aus $R$ korrekt wieder. Die Abbildung von Vektoren auf Polynome \[ \varphi -\colon R^n \to R[X] +\colon R^{n+1} \to R[X] : \begin{pmatrix}a_0\\\vdots\\a_n\end{pmatrix} \mapsto @@ -52,7 +52,7 @@ Die Abbildung $\varphi$ ist also ein Isomorphismus \varphi \colon \{p\in R[X]\;|\; \deg(p) \le n\} -\overset{\equiv}{\to} +\overset{\cong}{\to} R^{n+1} \] zwischen der Menge @@ -93,7 +93,7 @@ mit der Eigenschaft, dass die Komponenten mit Indizes $m+1,\dots n$ verschwinden. Polynome vom Grad $m<n$ bilden einen Unterraum der Polynome vom Grad $n$. Wir können auch die $m+1$-dimensionalen Vektoren in den $n+1$-dimensionalen -Vektoren einbetten, indem wir die Vektoren durch ``auffüllen'' mit Nullen +Vektoren einbetten, indem wir die Vektoren durch ``Auffüllen'' mit Nullen auf die richtige Länge bringen. Es gibt also eine lineare Abbildung \[ @@ -108,25 +108,25 @@ b_0\\b_1\\\vdots\\b_m\\0\\\vdots \end{pmatrix} . \] -Die Moduln $R^{k}$ sind also alle ineinandergeschachtelt, können aber +Die Moduln $R^{k+1}$ sind also alle ineinandergeschachtelt, können aber alle auf konsistente Weise mit der Abbildung $\varphi$ in den Polynomring $R[X]$ abgebildet werden. \begin{center} -\begin{tikzcd} -\{0\}\ar[r] %\arrow[d,"\varphi"] - &R \ar[r] %\arrow[d, "\varphi"] - &R^2 \ar[r] %\arrow[d, "\varphi"] +\begin{tikzcd}[>=latex] +R \ar[r] \arrow[d, "\varphi"] + &R^2 \ar[r] \arrow[d, "\varphi"] + &R^3 \ar[r] \arrow[d, "\varphi"] &\dots \ar[r] - &R^k \ar[r] %\arrow[d, "\varphi"] - &R^{k+1} \ar[r] %\arrow[d, "\varphi"] + &R^k \ar[r] \arrow[d, "\varphi"] + &R^{k+1} \ar[r] \arrow[d, "\varphi"] &\dots \\ R^{(0)}[X]\arrow[r,hook] \arrow[drrr,hook] &R^{(1)}[X]\arrow[r,hook] \arrow[drr,hook] &R^{(2)}[X]\arrow[r,hook] \arrow[dr,hook] &\dots\arrow[r,hook] - &R^{(k)}[X]\arrow[r,hook] \arrow[dl,hook] - &R^{(k+1)}[X]\arrow[r,hook] \arrow[dll,hook] + &R^{(k-1)}[X]\arrow[r,hook] \arrow[dl,hook] + &R^{(k)}[X]\arrow[r,hook] \arrow[dll,hook] &\dots \\ & @@ -137,10 +137,115 @@ R^{(0)}[X]\arrow[r,hook] \arrow[drrr,hook] & \end{tikzcd} \end{center} +In diesem Sinne können wir $R^m$ für $m<n$ als Teilmenge von $R^n$ betrachten +und $R^\infty$ als deren Vereinigung definieren. +Polynome in $R[X]$ sind also Vektoren beliebiger Länge mit Kompoenten +in $R$. + \subsection{Multiplikative Struktur \label{buch:subsection:polynome:multiplikativestruktur}} +Den Polynomring $R[X]$ aus den Vektoren $R^{k}$ aufzubauen, bedeutet, +dass wir die multiplikative Struktur ignorieren. +Augrund der Rechenregeln für das Symbol $X$ können wir $X$ als einen +Multiplikationsoperator +\[ +{X\cdot} +\colon R^{m} \to R^{n} +: +\begin{pmatrix}a_0\\a_1\\a_2\\\vdots\end{pmatrix} +\mapsto +\begin{pmatrix}0\\a_0\\a_1\\\vdots\end{pmatrix} +\] +betrachten. +Diese Operatoren setzen sich zusammen zu einem Operator +\[ +{X\cdot} \colon R^\infty \to \infty, +\] +der die Multiplikation mit $X$ beschreibt. +Ist $p(X)$ ein Polynom, dann lässt sich die Multiplikation +in von Polynome mit $R[X]$ ebenfalls als Operator schreiben. +Die Potenz $X^k$ wird durch $k$-fache Iteration des Operators +$X\cdot$. +Das Polynom $p(X)$ wird durch Linearkombination, entspricht +also dem Operator, den man durch Einsetzen von $X\cdot$ +in das Polynom erhalten kann: +\[ +p(X\cdot) += +a_n(X\cdot)^n + a_{n-1}(X\cdot)^{n+1} + \dots + a_1(X\cdot) + a_0 +\colon +R^\infty \to R^\infty +: +q(X) +\mapsto +p(X)q(X). +\] +Man kann den Operator $X\cdot$ oder den iterierten Operator +$(X\cdot)^k$ auch in Matrixform darstellen: +\begin{align*} +{X\cdot} +&= +\begin{pmatrix} +0&0&0&0&\dots\\ +1&0&0&0&\dots\\ +0&1&0&0&\dots\\ +0&0&1&0&\dots\\ +\vdots&\vdots&\vdots&\ddots&\ddots +\end{pmatrix} +& +(X\cdot)^k +&= +\begin{pmatrix} + 0 & 0 & 0 & 0 &\dots\\ +\vdots&\vdots&\vdots&\vdots& \\ + 0 & 0 & 0 & 0 &\dots\\ + 1 & 0 & 0 & 0 &\dots\\ + 0 & 1 & 0 & 0 &\dots\\ + 0 & 0 & 1 & 0 &\dots\\ +\vdots&\vdots&\vdots&\ddots&\ddots +\end{pmatrix}. +\end{align*} +In der Matrix für $(X\cdot)^k$ steht die erste $1$ auf der +$k+1$-ten Zeile. +Der zum Polynom $p(X)$ gehörige Operator $p(X\cdot)$ bekommt +damit die Matrix +\[ +p(X\cdot) += +\begin{pmatrix} +a_0 & 0 & 0 & 0 & 0 & \dots \\ +a_1 &a_0 & 0 & 0 & 0 & \dots \\ +a_2 &a_1 & a_0 & 0 & 0 & \dots \\ +a_3 &a_2 & a_1 & a_0 & 0 & \dots \\ +a_4 &a_3 & a_2 & a_1 & a_0 & \dots \\ +\vdots &\vdots &\vdots&\vdots&\vdots&\ddots +\end{pmatrix}. +\] +Da die Matrix-Operation als Produkt +$\text{Zeile}\times\text{Spalte}$ ausgeführt wird, +kann man erkennen, dass das Polynomprodukt auch auf +eine Faltung hinausläuft. +Die wichtigste Lehre aus obigen Ausführungen aber ist +die Beobachtung, dass sich eine ganz allgemeine Algebra +wie die der Polynome auf sehr direkte Art und Weise auf +abbilden lässt in eine Algebra von Matrizen auf einem +geeigneten Vektorraum. +Im vorliegenden Fall sind das zwar ``undendliche'' +Matrizen, in zukünftigen Beispielen werden wir das +selbe Prinzip jedoch in Aktion sehen in Situationen, +wo eine Operation auf einem endlichen Vektorraum +und ``gewöhnliche'' Matrizen entstehen. +Die Möglichkeit, beliebige Polynome solcher Operatoren +zu berechnen, erlaubt uns, mehr über den Operator +herauszufinden - +Dies eröffnet vielfältige Möglichkeiten, auf einfachere +Art mit den Operatoren zu rechnen. +In Kapitel~\ref{buch:chapter:eigenwerte-und-eigenvektoren} +wird sich daraus eine Reihe von Normalformen einer Matrix +ergeben sowie die Möglichkeit, für viele Matrizen $A$ +die Matrix $f(A)$ für eine grosse Zahl von praktisch +interessanten Funktionen $f(z)$ zu berechnen. diff --git a/buch/chapters/30-endlichekoerper/chapter.tex b/buch/chapters/30-endlichekoerper/chapter.tex index 1a0a323..b4c602e 100644 --- a/buch/chapters/30-endlichekoerper/chapter.tex +++ b/buch/chapters/30-endlichekoerper/chapter.tex @@ -8,13 +8,14 @@ \lhead{Endliche Körper} \rhead{} Aus den ganzen Zahlen $\mathbb{Z}$ entsteht ein Körper, indem wir Brüche -bilden alle von $0$ verschiedenen Nenner zulassen. +bilden und dabei alle von $0$ verschiedenen Nenner zulassen. Der Körper der rationalen Zahlen $\mathbb{Q}$ enthält unendliche viele Zahlen und hat zusätzlich die sogenannte archimedische Eigenschaft, nämliche dass es zu zwei positiven rationalen Zahlen $a$ und $b$ immer eine ganze Zahl $n$ gibt derart, dass $na>b$. Dies bedeutet auch, dass es in den rationalen Zahlen beliebig grosse Zahlen gibt. + Man kann aus den ganzen Zahlen aber auch eine Reihe von Körpern ableiten, die diese Eigenschaft nicht haben. Nicht überraschend werden die ersten derartigen Körper, die wir diff --git a/buch/chapters/30-endlichekoerper/euklid.tex b/buch/chapters/30-endlichekoerper/euklid.tex index 0bf3016..a75046f 100644 --- a/buch/chapters/30-endlichekoerper/euklid.tex +++ b/buch/chapters/30-endlichekoerper/euklid.tex @@ -8,18 +8,33 @@ \rhead{Der euklidische Algorithmus} Der euklidische Algorithmus bestimmt zu zwei gegebenen ganzen Zahlen $a$ und $b$ den grössten gemeinsamen Teiler $g$. -Zusätzlich findet er ganze Zahlen $s$ und $t$ derart, dass + +\begin{definition} +\label{buch:endliche-koerper:def:ggt} +Der grösste gemeinsame Teiler von $a$ und $b$ ist die grösste +ganze Zahl $g$, die sowohl $a$ als auch $b$ teilt: $g|a$ und +$g|b$. +\index{grösster gemeinsamer Teiler}% +\index{ggT}% +\end{definition} + +Zusätzlich findet der euklidische Algorithmus ganze Zahlen $s$ +\index{euklidischer Algorithmus}% +und $t$ derart, dass \[ sa + tb = g. \] In diesem Abschnitt soll der Algorithmus zunächst für ganze Zahlen vorgestellt werden, bevor er auf Polynome verallgemeinert und dann in Matrixform niedergeschrieben wird. +Die Matrixform ermöglicht, einfach zu implementierende iterative +Algorithmen für die Zahlen $s$ und $t$ un später auch für die +Berechnung des kleinsten gemeinsamen Vielfachen zu finden. % % Der euklidische Algorithmus für ganze Zahlen % -\subsection{Ganze Zahlen} +\subsection{Grösster gemeinsamer Teiler ganzer Zahlen} Gegeben sind zwei ganze Zahlen $a$ und $b$ und wir dürfen annehmen, dass $a\ge b$. Gesucht ist der grösste gemeinsame Teiler $g$ von $a$ und $b$. @@ -55,11 +70,11 @@ neuen Quotienten $q_1$ und einen neuen Rest $r_1$ liefert mit $a_1-q_1b_1=r_1$. So entstehen vier Folgen von Zahlen $a_k$, $b_k$, $q_k$ und $r_k$ derart, dass in jedem Schritt gilt \begin{align*} -a_k - q_kb_k &= r_k & g&|a_k & g&|b_k & a_k &= b_{k-1} & b_k = r_{k-1} +a_k - q_kb_k &= r_k & g&|a_k & g&|b_k & a_k &= b_{k-1} & b_k = r_{k-1}. \end{align*} Der Algorithmus bricht im Schritt $n$ ab, wenn $r_{n+1}=0$. Der letzte nicht verschwindende Rest $r_n$ muss daher der grösste gemeinsame -Teiler sein: $g=r_n$. +Teiler $g$ von $a$ und $b$ sein: $g=r_n$. \begin{beispiel} \label{buch:endlichekoerper:beispiel1} @@ -131,7 +146,7 @@ In jedem Schritt arbeitet man mit zwei ganzen Zahlen $a_k$ und $b_k$, die wir als zweidimensionalen Spaltenvektor betrachten können. Der Algorithmus macht aus $a_k$ und $b_k$ die neuen Zahlen $a_{k+1} = b_k$ und $b_{k+1} = r_k = a_k - q_kb_k$, dies -kann man als +kann man als die Matrixoperation \[ \begin{pmatrix} a_{k+1} \\ b_{k+1} \end{pmatrix} = @@ -143,7 +158,7 @@ kann man als schreiben. Der Algorithmus bricht ab, wenn die zweite Komponente des Vektors $=0$ ist, in der ersten steht dann der grösste gemeinsame Teiler. -Hier ist die Durchführung des Algorithmus in Matrix-Schreibweise: +Hier die Durchführung des Algorithmus in Matrix-Schreibweise: \begin{align*} \begin{pmatrix} 23205 \\ 6800 \end{pmatrix} &= @@ -196,16 +211,16 @@ beschreiben. \begin{algorithmus}[Euklid] \label{lifting:euklid} -Der Algorithmus operiert auf zweidimensionalen Zustandsvektoren +Der Algorithmus operiert auf zweidimensionalen Vektoren $x\in\mathbb Z^2$ wie folgt: \begin{enumerate} -\item Initialisiere den Zustandsvektor mit den ganzen Zahlen $a$ und $b$: -$\displaystyle x = \begin{pmatrix}a\\b\end{pmatrix}$ +\item Initialisiere den Vektor mit den ganzen Zahlen $a$ und $b$: +$\displaystyle x = \begin{pmatrix}x_1\\x_2\end{pmatrix}=\begin{pmatrix}a\\b\end{pmatrix}$ \item Bestimme den Quotienten $q$ als die grösste ganze Zahl, für die $qx_2\le x_1$ gilt. -\item Berechne den neuen Zustandsvektor als $Q(q)x$. -\item Wiederhole Schritte 2 und 3 bis die zweite Komponente des Zustandsvektors +\item Berechne den neuen Vektor als $Q(q)x$. +\item Wiederhole Schritte 2 und 3 bis die zweite Komponente des Vektors verschwindet. Die erste Komponente ist dann der gesuchte grösste gemeinsame Teiler. \end{enumerate} @@ -319,13 +334,11 @@ Q(q) = \begin{pmatrix} 0 & 1 \\ 1 & -q \end{pmatrix} \] lässt sich mit genau einer Multiplikation und einer Addition berechnen. -Dies ist die Art von Matrix, die wir für die Implementation der -Wavelet-Transformation anstreben. % % Vereinfachte Durchführung des euklidischen Algorithmus % -\subsection{Vereinfachte Durchführung +\subsection{Iterative Durchführung des erweiterten euklidischen Algorithmus \label{buch:endlichekoerper:subsection:matrixschreibweise}} Die Durchführung des euklidischen Algorithmus mit Hilfe der Matrizen $Q(q_k)$ ist etwas unhandlich. @@ -334,7 +347,7 @@ dargestellt werden, die leichter als Programm zu implementieren ist. In Abschnitt~\ref{buch:endlichekoerper:subsection:matrixschreibweise} wurde gezeigt, dass das Produkt der aus den Quotienten $q_k$ gebildeten -Matrizen $Q(q_k)$ berechnet werden müssen. +Matrizen $Q(q_k)$ berechnet werden muss. Dazu beachten wir zunächst, dass die Multiplikation mit der Matrix $Q(q_k)$ die zweite Zeile in die erste Zeile verschiebt: \[ @@ -357,7 +370,7 @@ u-q_kc&v-q_kd \] Die Matrizen \[ -Q_k = Q(q_k)Q(q_{k-1})\dots Q(q_0) +Q_k = Q(q_k)Q(q_{k-1})\cdots Q(q_0) \] haben daher jeweils für aufeinanderfolgende Werte vo $k$ eine Zeile gemeinsam. @@ -419,7 +432,7 @@ gesetzt werden muss. Mit diesen Notationen kann man den Algorithmus jetzt in der früher verwendeten Tabelle durchführen, die man um die zwei -Spalten $c_k$ und $d_k$ hinzufügt und die Werte in dieser +Spalten $c_k$ und $d_k$ erweitert und die Werte in dieser Spalte mit Hilfe der Rekursionsformeln~\eqref{buch:endlichekoerper:eqn:cdrekursion} aus den initialen Werten~\eqref{buch:endlichekoerper:eqn:cdinitial} @@ -428,7 +441,7 @@ berechnet. \begin{beispiel} Wir erweitern das Beispiel von Seite~\pageref{buch:endlichekoerper:beispiel1} zur Bestimmung des grössten gemeinsamen Teilers von $76415$ und $23205$ -zur Berechnung der Koeffizienten $c_k$ und $d_k$ +um die Spalten zur Berechnung der Koeffizienten $c_k$ und $d_k$ Wir schreiben die gefundenen Zahlen in eine Tabelle: \begin{center} \label{buch:endlichekoerper:beispiel1erweitert} @@ -503,7 +516,7 @@ Tabelle vertauscht wurden. % % Der euklidische Algorithmus für Polynome % -\subsection{Polynome} +\subsection{Grösster gemeinsare Teiler von Polynomen} Der Ring $\mathbb{Q}[X]$ der Polynome in der Variablen $X$ mit rationalen Koeffizienten\footnote{Es kann auch ein beliebiger anderer Körper für die Koeffizienten verwendet werden. @@ -579,7 +592,7 @@ ta+sb (X^4+X^3-7X^2-X+6) \\ &= --4X^2+4X+8 +-4X^2+4X+8, \end{align*} und dies ist tatsächlich der gefundene grösste gemeinsame Teiler. Die zweite Zeile von $Q$ gibt uns die Polynomfaktoren, mit denen @@ -621,6 +634,8 @@ $ua-vb = ab/g - ab/g = 0$, wie erwartet. % \subsection{Das kleinste gemeinsame Vielfache \label{buch:subsection:daskgv}} +\index{kleinstes gemeinsames Vielfaches}% +\index{kgV}% Das kleinste gemeinsame Vielfache zweier Zahlen $a$ und $b$ ist \[ \operatorname{kgV}(a,b) @@ -631,8 +646,8 @@ Wir suchen nach einen Algorithmus, mit dem man das kleinste gemeinsame Vielfache effizient berechnen kann. Die Zahlen $a$ und $b$ sind beide Vielfache des grössten gemeinsamen -Teilers $g=\operatorname{ggT}(a,b)$, es gibt also Zahlen $u$ und $v$ derart, -dass $a=ug$ und $b=vg$. +Teilers $g=\operatorname{ggT}(a,b)$. +Es gibt daher Zahlen $u$ und $v$ derart, dass $a=ug$ und $b=vg$. Wenn $t$ ein gemeinsamer Teiler von $u$ und $v$ ist, dann ist $tg$ ein grösserer gemeinsamer Teiler von $a$ und $b$. Dies kann nicht sein, also müssen $u$ und $v$ teilerfremd sein. @@ -641,6 +656,7 @@ Die Bestimmung des kleinsten gemeinsamen Vielfachen ist also gleichbedeutend mit der Bestimmung der Zahlen $u$ und $v$. Die definierende Eigenschaften von $u$ und $v$ kann man in Matrixform als +\index{Matrixform des kgV-Algorithmus}% \begin{equation} \begin{pmatrix} a\\b @@ -669,7 +685,7 @@ Algorithmus beschreiben, ergeben ihn als \operatorname{ggT}(a,b)\\0 \end{pmatrix} = -Q(q_n)Q(q_{n-1}) \dots Q(q_1)Q(q_0) +Q(q_n)Q(q_{n-1}) \cdots Q(q_1)Q(q_0) \begin{pmatrix}a\\b\end{pmatrix}. \] Indem wir die Matrizen $Q(q_n)$ bis $Q(q_0)$ auf die linke Seite der @@ -679,7 +695,7 @@ Gleichung schaffen, erhalten wir = Q(q_0)^{-1} Q(q_1)^{-1} -\dots +\cdots Q(q_{n-1})^{-1} Q(q_n)^{-1} \begin{pmatrix}\operatorname{ggT}(a,b)\\0\end{pmatrix}. @@ -692,15 +708,14 @@ K = Q(q_0)^{-1} Q(q_1)^{-1} -\dots +\cdots Q(q_{n-1})^{-1} Q(q_n). \] Insbesondere ist die Matrix $K$ die Inverse der früher gefundenen Matrix $Q$. -Die Berechnung der Matrix $K$ als Inverse von $Q$ ist nicht sehr -effizient. +Die Berechnung der Matrix $K$ als Inverse von $Q$ ist nicht schwierig. Genauso wie es möglich war, das Produkt $Q$ der Matrizen $Q(q_k)$ iterativ zu bestimmen, muss es auch eine Rekursionsformel für das Produkt der inversen Matrizen $Q(q_k)^{-1}$ geben. @@ -709,7 +724,7 @@ Schreiben wir die gesuchte Matrix \[ K_k = -Q(q_0)^{-1}\dots Q(q_{k-1})^{-1} +Q(q_0)^{-1}\cdots Q(q_{k-1})^{-1} = \begin{pmatrix} e_k & e_{k-1}\\ @@ -825,13 +840,12 @@ va \] \end{beispiel} +\subsection{Kleinstes gemeinsames Vielfaches von Polynomen} Der erweiterte Algorithmus kann auch dazu verwendet werden, das kleinste gemeinsame Vielfache zweier Polynome zu berechnen. Dies wird zum Beispiel bei der Decodierung des Reed-Solomon-Codes in Kapitel~\ref{chapter:reedsolomon} verwendet. -\subsubsection{Polynome -\label{buch:endlichekoerper:eqn:polynomkgv}} Im Beispiel auf Seite~\pageref{buch:endlichekoerper:eqn:polynomggt} wird der grösste gemeinsame Teiler der Polynome \[ @@ -844,6 +858,8 @@ b = X^4 + X^3 -7X^2 -X + 6 berechnet. Dies kann jetzt erweitert werden für die Berechnung des kleinsten gemeinsamen Vielfachen. +\index{kleinstes gemeinsames Vielfaches von Polynomen}% +\index{kgV von Polynomen}% \begin{beispiel} Die Berechnungstabelle nur für die Spalten $e_k$ und $f_k$ ergibt @@ -890,8 +906,9 @@ Daraus ergibt sich das kleinste gemeinsame Vielfache auf zwei verschiedene Weise Die beiden Berechnungsmöglichkeiten stimmen wie erwartet überein. \end{beispiel} -\subsubsection{Anwendung: Decodierung des Reed-Solomon-Codes} +\subsection{Anwendung: Decodierung des Reed-Solomon-Codes} Der Reed-Solomon-Code verwendet Polynome zur Codierung der Daten, +\index{Reed-Solomon-Code}% dies wird in Kapitel~\ref{chapter:reedsolomon} im Detail beschrieben. Bei der Decodierung muss der Faktor $u$ für zwei gegebene Polynome $n(X)$ und $r(X)$ bestimmt werden. @@ -902,6 +919,7 @@ Algorithmus braucht. Daraus lässt sich genügend Information gewinnen, um die Faktoren $u$ und $v$ zu bestimmen. Das Video \url{https://youtu.be/uOLW43OIZJ0} von Edmund Weitz +\index{Weitz, Edmund} erklärt die Theorie hinter dieser Teilaufgabe anhand von Beispielen. \begin{beispiel} diff --git a/buch/chapters/30-endlichekoerper/galois.tex b/buch/chapters/30-endlichekoerper/galois.tex index c7147bf..5189dec 100644 --- a/buch/chapters/30-endlichekoerper/galois.tex +++ b/buch/chapters/30-endlichekoerper/galois.tex @@ -9,11 +9,11 @@ \rhead{Galois-Körper} Ein Körper $\Bbbk$ enthält mindestens die Zahlen $0$ und $1$. Die Null ist nötig, damit $\Bbbk$ eine Gruppe bezüglich der -Addition ist, die immer ein neutrales Element, geschrieben $0$ +Addition ist, die immer ein neutrales Element, geschrieben $0$, enthält. Die Eins ist nötig, damit $\Bbbk^*=\Bbbk\setminus\{0\}$ eine Gruppe bezüglich der Multiplikation ist, die immer eine neutrales -Element, geschrieben $1$ enthält. +Element, geschrieben $1$, enthält. Durch wiederholte Addition entstehen auch die Zahlen $2=1+1$, $3=2+1$ und so weiter. Es sieht also so aus, als ob ein Körper immer unendliche viele @@ -21,6 +21,8 @@ Elemente enthalten müsste. Wie können also endliche Körper entstehen? In diesem Abschnitt sollen die sogenannten Galois-Körper $\mathbb{F}_p$ +\index{Galois-Körper}% +\index{Fp@$\mathbb{F}_p$}% mit genau $p$ Elementen konstruiert werden, die es für jede Primzahl $p$ gibt. Sie sind die Basis für weitere endliche Körper, die eine beliebige Primzahlpotenz $p^n$ von Elementen haben und die die Basis wichtiger @@ -51,6 +53,7 @@ Zahlen $\{0,1,2,\dots,n-1\}$ identifiziert werden kann. \begin{definition} Die Zahlen $a,b\in\mathbb{Z}$ heissen {\em kongruent modulo $n$}, +\index{kongruent modulo $n$}% geschrieben \[ a\equiv b\mod n, @@ -60,6 +63,7 @@ wenn $a-b$ durch $n$ teilbar ist, also $n|(a-b)$. Die Zahlen mit gleichem Rest sind Äquivalenzklassen der Kongruenz modulo $n$. Die Zahlen mit Rest $k$ modulo $n$ bilden die {\em Restklasse} +\index{Restklasse}% \[ \llbracket k\rrbracket=\{\dots,k-2n,k-n,k,k+n,k+2n,\dots\} \subset\mathbb{Z}. \] @@ -90,7 +94,7 @@ Tatsächlich kann man auf den Restklassen eine Ringstruktur definieren. Dazu muss man sicherstellen, dass die Auswahl eines Repräsentanten keinen Einfluss auf den Rest hat. Der Rest $a$ kann jede Zahl der Form $a+kn$ darstellen. -Ebenso kann der Rest $b$ jede zahl der Form $b+ln$ darstellen. +Ebenso kann der Rest $b$ jede Zahl der Form $b+ln$ darstellen. Deren Summe ist $a+b+(k+l)n\equiv a+b\mod n$. Der Repräsentant des Restes hat also keinen Einfluss auf die Summe. @@ -121,8 +125,9 @@ Insbesondere darf kein Produkt $a\cdot b$ mit Faktoren in $\mathbb{Z}/n\mathbb{Z} \setminus \{\llbracket0\rrbracket\}$ zu Null werden. Für $n=15$ funktioniert dies nicht, das Produkt $3\cdot 5\equiv 0\mod 15$. -Man nennt von Null verschiedene Faktoren, deren Produkt Null ist, einen -{\em Nullteiler}. +Wir kommen daher zu der Forderung, dass der Ring $\mathbb{Z}/n\mathbb{Z}$ +nur dann ein Körper sein kann, wenn er nullteilerfrei ist. + Falls sich $n=p_1\cdot p_2$ in zwei Faktoren zerlegen lässt, dann sind $p_1$ und $p_2$ Nullteiler in $\mathbb{Z}/n\mathbb{Z}$. Ein Körper kann also nur entstehen, wenn $n$ eine Primzahl ist. @@ -130,7 +135,9 @@ Ein Körper kann also nur entstehen, wenn $n$ eine Primzahl ist. \begin{definition} \label{buch:endlichekoerper:def:galois-koerper} Ist $p$ eine Primzahl, dann heisst $\mathbb{F}_p=\mathbb{Z}/p\mathbb{Z}$ +\index{Primzahl}% der Galois-Körper der Ordnung $p$. +\index{Galois-Körper}% \end{definition} Diese Definition ist nur gerechtfertigt, wenn $\mathbb{F}_p^*$ tatsächlich @@ -152,6 +159,7 @@ lösen kann, wenn die beiden gegebenen Zahlen $a$ und $p$ teilerfremd sind. Dies ist aber dadurch garantiert, dass $p$ eine Primzahl ist und $1\le a <p$. Die multiplikative Inverse von $a$ in $\mathbb{F}_p^*$ kann also mit Hilfe des euklidischen Algorithmus effizient gefunden werden. +\index{multiplikative Inverse in $\mathbb{F}_p$}% \begin{beispiel} Die kleinste Primzahl grösser als $2021$ ist $p=2063$. @@ -210,6 +218,8 @@ Inverse von $2021$ in $\mathbb{F}_{2063}$. \end{beispiel} \subsubsection{Der kleine Satz von Fermat} +\index{Fermat, kleiner Satz von}% +\index{kleiner Satz von Fermat}% In $\mathbb{Z}$ wachsen die Potenzen einer Zahl immer weiter an. In einem endlichen Körper kann dies nicht gelten, da nur endlich viele Werte zur Verfügung stehen. @@ -221,6 +231,22 @@ die Potenz mit Exponent $p$ muss also mit einer früheren Potenz Der kleine Satz von Fermat sagt etwas genauer: die $p$-te Potenz von $a$ ist genau die Zahl $a$: +\begin{figure} +\centering +\includegraphics{chapters/30-endlichekoerper/images/fermat.pdf} +\caption{$G$ ist die Menge aller verschiedenfarbigen geschlossenen +Perlenketten mit $p$ Perlen und $a$ Farben. +$A$ ist die Menge aller linearen verschiedenfarbigen Ketten. +Die Abbildung $s_i$ schneidet die Ketten an der Stelle $i$ auf, +dadurch entstehen die Menge $A_i$, verschiedenfarbigen linearen +Ketten der Länge $p$ mit $a$ Farben. +Die Abbildungen $s_i$ sind injektiv, die Mengen $A_i$ haben alle +die gleiche Anzahl Elemente. +Genau dann ist $|A|$ durch $p$ teilbar, wenn die Mengen $A_i$ +disjunkt sind. +\label{buch:endliche-koerper:fig:fermat}} +\end{figure} + \begin{satz}[Kleiner Satz von Fermat] \label{buch:endliche-koerper:satz:fermat} In $\mathbb{F}_p$ gilt $a^p=a$ für alle $a\in\mathbb{F}_p^*$. @@ -237,10 +263,10 @@ $p$ eine Primzahl ist. \begin{proof}[Beweis] Wir müssen zeigen, dass $p$ ein Teiler ist von $a^p-a$. Das nachfolgende kombinatorische Argument wird zum Beispiel -von Mathologor auf seinem Youtube-Kanal im Video +von Mathologer auf seinem Youtube-Kanal im Video \url{https://youtu.be/_9fbBSxhkuA} illustriert. -Zum Beiweis interpretieren wir die vorkommenden Zahlen kombinatorisch. +Zum Beweis interpretieren wir die vorkommenden Zahlen kombinatorisch. Die Zahl $a^p$ ist die Anzahl der verschiedenen Perlenketten der Länge $p$, die sich aus Glasperlen mit $a$ verschiedenen Farben herstellen lassen. @@ -248,26 +274,52 @@ Davon bestehen $a$ Perlenketten aus nur einer einzigen Farbe. Die Zahl $a^p-a$ ist also die Anzahl der Perlenketten der Länge $p$ aus Glasperlen mit $a$ verschiedenen Farben, die mindestens zwei verschiedene Farben verwenden. +Wir bezeichnen die Menge der nicht einfarbigen Perlenketten der +Länge $p$ mit $a$ Farben mit $A$. +Es ist $|A|=a^p-a$. + +Zu sagen, dass $a^p-a$ durch $p$ teilbar ist, ist gleichbedeutend +damit, dass die Menge der Perlenkette in $p$ +disjunkte, gleichmächtige Mengen aufgeteilt werden kann. +Es ist also zu zeigen, dass sich die Menge $A$ genau dann in +disjunkte gleichmächtige Mengen zerlegen lässt, wenn $p$ eine +Primzahl ist. + +Wir betrachten dazu die Menge der nicht einfarbigen, geschlossenen +Perlenketten der Länge $p$ mit $a$ Farben. +Einge dieser Perlenketten unterscheiden sich nur durch eine +Drehung um einzelne Perlen. +Sei $G$ die Menge der nicht einfarbigen, geschlossenen +Perlenketten, die sich nicht nur um eine Drehung unterscheiden. + +Die Abbildung $s_i\colon G\to A$ +in Abbildung~\ref{buch:endliche-koerper:satz:fermat} +schneidet die Perlenkette in $G$ an der Stelle $i$ auf. +Diese Abbildungen sond ganz offensichtlich injektiv. +Die Bildmengen $A_i = s_i(G)$ haben daher alle gleich +viele Elemente wie $G$: $|A_i|=|G|$. + +Da jede lineare Perlenkette in $A$ durch geeignetes Aufschneiden +einer geschlossenen Perlenkette in $G$ entsteht, ist +\[ +A=\bigcup_{i=1}^p A_i. +\] -Wir stellen jetzt die Frage nach der Anzahl der geschlossenen -Perlenketten der Länge $p$ als Glasperlen in $a$ verschiedenen Farben. -Aus jeder geschlossenen Perlenkette lassen sich $p$ Perlenketten machen, -indem man sie an einer der $p$ Trennstellen zwischen Perlen aufteilt. - -Wir müssen uns noch überlegen, unter welchen Voraussetzungen -alle diese möglichen Auftrennungen zu verschiedenen Perlenketten -führen. -Zwei Trennstellen, die $k$-Perlen auseinander liegen, führen nur dann -zur gleichen Perlenkette, wenn die geschlossenen Ketten durch Drehung -um $k$ Perlen ineinander übergehen. -Dies bedeutet aber auch, dass sich das Farbmuster alle $k$-Perlen -wiederholen muss. -Folglich ist $k$ ein Teiler von $p$. -$p$ verschiedene Perlenketten entstehen also immer genau dann, wenn $p$ +Wir müssen jetzt nur noch untersuchen, unter welchen Bedingungen +die Mengen $A_i$ disjunkt sind. +Zwei Mengen $A_i$ und $A_j$ enthalten genau dann eine +gemeinsame Perlenkette, wenn es eine geschlossene Kette in $G$ +gibt, die beim Aufschneiden an den Stellen $i$ und $j$ die +gleiche Kette ergeben. +Dies bedeutet, dass sich die Farben zwischen $i$ und $j$ nach +der Stelle $j$ wiederholen. +Die Mengen sind also genau dann nicht disjunkt, wenn es +peridische Ketten gibt mit einer Periode $k<p$. + +Da die Periode einer periodischen Kette ein Teiler von $p$ +ist, gibt es genau dann keine periodischen Ketten, wenn $p$ eine Primzahl ist. - -Wir schliessen daraus, dass $a^p-a$ durch $p$ teilbar ist, genau dann, -wenn $p$ eine Primzahl ist. +Damit ist die Behauptung gezeigt. \end{proof} Der kleine Satz von Fermat kann auch dazu verwendet werden, Potenzen @@ -302,6 +354,8 @@ Sie ist zwar nicht unbedingt einfacher, aber manchmal nützlich für theoretische Überlegungen. \begin{satz}[Wilson] +\index{Wilson, Satz von}% +\index{Satz von Wilson}% Die ganze Zahl $p\ge 2$ ist genau dann eine Primzahl, wenn $(p-1)!\equiv -1\mod p$. \end{satz} @@ -341,7 +395,7 @@ die Behauptung des Satzes. \end{proof} Mit dem Satz von Wilson kann man die Inverse einer beliebigen Zahl -$a\in\mathbb{F}_p$ finden. +$a\in\mathbb{F}_p$ wie folgt finden. Dazu verwendet man, dass $a$ einer der Faktoren in $(p-1)!$ ist. Lässt man diesen Faktor weg, erhält man eine Zahl \[ @@ -390,6 +444,7 @@ der Körper $\mathbb{F}_p$ in $\Bbbk$ enthalten sein muss. Dies ist der kleinste Teilkörper, der in $\Bbbk$ enthalten ist. \begin{definition} +\index{Primkörper} Der kleinste Teilkörper eines Körpers $\Bbbk$ heisst der {\em Primkörper} von $\Bbbk$. \end{definition} @@ -398,7 +453,8 @@ Der Primkörper erlaubt jetzt, die Charakteristik eines Körpers $\Bbbk$ zu definieren. \begin{definition} -Die Charakteristik eines Körpers $\Bbbk$ ist $p$, wenn der Primkörper +\index{Charakteristik}% +Die {\em Charakteristik} eines Körpers $\Bbbk$ ist $p$, wenn der Primkörper $\mathbb{F}_p$ ist. Falls der Primkörper $\mathbb{Q}$ ist, ist die Charakteristik $0$. \end{definition} @@ -411,6 +467,10 @@ Ein Körper mit Charakteristik $0$ enthält immer unendliche viele Elemente. \subsubsection{Teilbarkeit von Binomialkoeffizienten} +Als Beispiel für die Auswrikung der Charakteristik auf die Arithmetik +in einem endlichen Körper betrachten wir die Teilbarkeitseigenschaften +der Binomialkoeffizienten. + \begin{figure} \centering \includegraphics{chapters/30-endlichekoerper/images/binomial2.pdf} @@ -437,11 +497,14 @@ sind alle Koeffizienten ausser dem ersten und letzten durch $5$ teilbar. \egroup Die Abbildung~\ref{buch:endliche-koerper:fig:binomial2} zeigt den Rest bei Teilung durch $2$ der Binomialkoeffizienten. +\index{Binomialkoeffizient}% Man kann daraus ablesen, dass $\binom{n}{m}\equiv 0\mod 2$ für $n=2^k$ und $0<m<n$. Abbildung~\ref{buch:endliche-koerper:fig:binomial5} zeigt das Pascal-Dreieck auch noch für $p=5$. Hier ist auch schön die Selbstähnlichkeit des Pascal-Dreiecks erkennbar. +\index{Selbstähnlichkeit}% +\index{Pascal-Dreieck}% Ersetzt man die ``5er-Dreiecke'' durch ein volles Dreieck mit der Farbe des kleinen Dreiecks an seiner Spitze, entsteht wieder das ursprüngliche Pascal-Dreieck. @@ -454,6 +517,10 @@ Sei $p$ eine Primzahl, dann ist \binom{p}{m} \equiv 0\mod p \] für $0<m<n$. +Für $a,b\in\mathbb{Z}$ bedeutet dies +\[ +(a+b)^p \equiv a^p + b^p\mod p. +\] \end{satz} \begin{proof}[Beweis] @@ -466,6 +533,30 @@ Für den Binomialkoeffizienten gilt Für $m<p$ kann keiner der Faktoren im Nenner $p$ sein, der Faktor $p$ im Zähler kann also nicht weggekürzt werden, so dass der Binomialkoeffizient durch $p$ teilbar sein muss. + +In der binomischen Formel +\[ +(a+b)^p += +a^p ++ +\binom{p}{1} a^{p-1}b ++ +\binom{p}{2} a^{p-2}b^2 ++ +\dots ++ +\binom{p}{p-1} ab^{p-1} ++ +b^p +\] +sind alle ``inneren'' Terme auf der rechten Seite durch $p$ teilbar, +weil der Binomialkoeffizient durch $p$ teilbar ist. +Modulo $p$ ergibt sich daher +\[ +(a+b)^p \equiv a^p + b^p \mod p. +\] +Damit ist alles bewiesen. \end{proof} \begin{satz} @@ -544,6 +635,7 @@ Binomialkoeffizienten der Zwischenterme der Summe \eqref{buch:endliche-koerper:fig:binomischeformel} als Elemente von $\mathbb{F}_p$. Daher gilt +\index{Frobenius-Automorphismus}% \begin{satz}[Frobenius-Automorphismus] In einem Körper $\Bbbk$ der Charakteristik $p$ ist die Abbildung diff --git a/buch/chapters/30-endlichekoerper/images/Makefile b/buch/chapters/30-endlichekoerper/images/Makefile index c49fe56..bf53c29 100644 --- a/buch/chapters/30-endlichekoerper/images/Makefile +++ b/buch/chapters/30-endlichekoerper/images/Makefile @@ -3,10 +3,14 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: binomial2.pdf binomial5.pdf +all: binomial2.pdf binomial5.pdf fermat.pdf binomial2.pdf: binomial2.tex pdflatex binomial2.tex binomial5.pdf: binomial5.tex farben.tex pdflatex binomial5.tex + +fermat.pdf: fermat.tex + pdflatex fermat.tex + diff --git a/buch/chapters/30-endlichekoerper/images/fermat.pdf b/buch/chapters/30-endlichekoerper/images/fermat.pdf Binary files differnew file mode 100644 index 0000000..4513e62 --- /dev/null +++ b/buch/chapters/30-endlichekoerper/images/fermat.pdf diff --git a/buch/chapters/30-endlichekoerper/images/fermat.tex b/buch/chapters/30-endlichekoerper/images/fermat.tex new file mode 100644 index 0000000..6cdafaa --- /dev/null +++ b/buch/chapters/30-endlichekoerper/images/fermat.tex @@ -0,0 +1,138 @@ +% +% fermat.tex -- Illustration zum kleinen Satz von Fermat +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math,calc} +\begin{document} +\def\skala{1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\def\s{34} + +\definecolor{farbe1}{rgb}{0.0,0.4,0.0} +\definecolor{farbe2}{rgb}{0.0,1.0,1.0} +\definecolor{farbe3}{rgb}{0.0,0.4,0.6} +\definecolor{farbe4}{rgb}{0.0,0.0,0.8} +\definecolor{farbe5}{rgb}{0.4,0.0,1.0} +\definecolor{farbe6}{rgb}{0.8,0.0,0.0} +\definecolor{farbe7}{rgb}{0.8,0.4,0.4} +\definecolor{farbe8}{rgb}{1.0,0.8,0.0} + +\def\perle#1#2#3{ + \fill[color=#3] ($#1+({#2*0.15},0)$) circle[radius=0.075]; +} + +\def\perlena#1#2#3#4#5#6{ + \draw #1 -- ($#1+({0.15*9},0)$); + \perle{#1}{0}{#2} + \perle{#1}{1}{#3} + \perle{#1}{2}{#4} + \perle{#1}{3}{#5} + \perle{#1}{4}{#6} +} +\def\perlenb#1#2#3#4#5#6{ + \perle{#1}{5}{#2} + \perle{#1}{6}{#3} + \perle{#1}{7}{#4} + \perle{#1}{8}{#5} + \perle{#1}{9}{#6} +} + +\begin{scope}[xshift=3cm] +\draw (0,0) circle[radius=4]; +\foreach \k in {-1,...,8}{ + \draw (0,0) -- ({90+\k*\s}:4); +} +\foreach \k in {1,...,8}{ + \node at ({90+\s*(\k-0.5)}:3.7) {$A_{\k\mathstrut}$}; +} + +\pgfmathparse{90-(360-9*\s)/2-\s} +\xdef\b{\pgfmathresult} +\foreach \d in {-10,-5,...,10}{ + \fill ({\b+\d}:2.8) circle[radius=0.04]; +} +\node at ({90-(\s/2)}:3.7) {$A_{p\mathstrut}$}; + +\node at (-4,4) {$s_1$}; +\node at (-3.8,2.6) {$s_2$}; +\node at (-4.8,0.6) {$s_3$}; +\node at (-4.2,-2) {$s_4$}; +\node at (-4,-4) {$s_5$}; + +\perlena{({-3*sin(-0.5*\s)-0.54},{3*cos(-0.5*\s)})}{farbe8}{farbe1}{farbe2}{farbe3}{farbe4} +\perlenb{({-3*sin(-0.5*\s)-0.54},{3*cos(-0.5*\s)})}{farbe5}{farbe6}{farbe7}{black,opacity=0}{black,opacity=0} + +\perlena{({-3*sin(0.5*\s)-0.74},{3*cos(0.5*\s)})}{farbe1}{farbe2}{farbe3}{farbe4}{farbe5} +\perlenb{({-3*sin(0.5*\s)-0.74},{3*cos(0.5*\s)})}{farbe6}{farbe7}{black,opacity=0}{black,opacity=0}{farbe8} + +\perlena{({-3*sin(1.5*\s)-0.74},{3*cos(1.5*\s)-0.2})}{farbe2}{farbe3}{farbe4}{farbe5}{farbe6} +\perlenb{({-3*sin(1.5*\s)-0.74},{3*cos(1.5*\s)-0.2})}{farbe7}{black,opacity=0}{black,opacity=0}{farbe8}{farbe1} + +\perlena{({-3*sin(2.5*\s)-0.0},{3*cos(2.5*\s)-0.0})}{farbe3}{farbe4}{farbe5}{farbe6}{farbe7} +\perlenb{({-3*sin(2.5*\s)-0.0},{3*cos(2.5*\s)-0.0})}{black,opacity=0}{black,opacity=0}{farbe8}{farbe1}{farbe2} + +\perlena{({-3*sin(3.5*\s)-0.74},{3*cos(3.5*\s)+0.2})}{farbe4}{farbe5}{farbe6}{farbe7}{black,opacity=0} +\perlenb{({-3*sin(3.5*\s)-0.74},{3*cos(3.5*\s)+0.2})}{black,opacity=0}{farbe8}{farbe1}{farbe2}{farbe3} + +\perlena{({-3*sin(4.5*\s)-0.74},{3*cos(4.5*\s)})}{farbe5}{farbe6}{farbe7}{black,opacity=0}{black,opacity=0} +\perlenb{({-3*sin(4.5*\s)-0.74},{3*cos(4.5*\s)})}{farbe8}{farbe1}{farbe2}{farbe3}{farbe4} + +\perlena{({-3*sin(5.5*\s)-0.64},{3*cos(5.5*\s)})}{farbe6}{farbe7}{black,opacity=0}{black,opacity=0}{farbe8} +\perlenb{({-3*sin(5.5*\s)-0.64},{3*cos(5.5*\s)})}{farbe1}{farbe2}{farbe3}{farbe4}{farbe5} + +\perlena{({-3*sin(6.5*\s)-0.64},{3*cos(6.5*\s)})}{farbe7}{black,opacity=0}{black,opacity=0}{farbe8}{farbe1} +\perlenb{({-3*sin(6.5*\s)-0.64},{3*cos(6.5*\s)})}{farbe2}{farbe3}{farbe4}{farbe5}{farbe6} + +\perlena{({-3*sin(7.5*\s)-1.14},{3*cos(7.5*\s)+0.1})}{black,opacity=0}{black,opacity=0}{farbe8}{farbe1}{farbe2} +\perlenb{({-3*sin(7.5*\s)-1.14},{3*cos(7.5*\s)+0.1})}{farbe3}{farbe4}{farbe5}{farbe6}{farbe7} + +\node at (45:4) [above right] {$A$}; + +\clip (-7,-4.4) rectangle (0,4.8); +\foreach \k in {1,...,5}{ + \pgfmathparse{20*(3-\k)} + \xdef\c{\pgfmathresult} + \pgfmathparse{90+(\k-0.5)*\s} + \xdef\a{\pgfmathresult} + \pgfmathparse{\a-180} + \xdef\b{\pgfmathresult} + \draw[->] (-7.5,0) to[out={\c},in={180+\b}] (\a:4); + %\node at (\a:4) [left] {$\b$}; +} +\end{scope} + +\def\pearl#1#2{ + \fill[color=#2] ($({90+(#1-0.5)*\s}:0.6)$) circle[radius=0.12]; + \draw[line width=0.1pt] ($({90+(#1-0.5)*\s}:0.6)$) circle[radius=0.12]; +} + +\def\kette{ + \draw (0,0) circle[radius=0.6]; + \pearl{1}{farbe1} + \pearl{2}{farbe2} + \pearl{3}{farbe3} + \pearl{4}{farbe4} + \pearl{5}{farbe5} + \pearl{6}{farbe6} + \pearl{7}{farbe7} + \pearl{0}{farbe8} +} + +\begin{scope}[xshift=-4.5cm] +\fill[color=white] (-1.5,-2.5) rectangle (1.5,2.5); +\draw (-1.5,-2.5) rectangle (1.5,2.5); +\kette +\node at (-1.5,2.5) [below right] {$G$}; +\end{scope} + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/30-endlichekoerper/wurzeln.tex b/buch/chapters/30-endlichekoerper/wurzeln.tex index 600336c..b066969 100644 --- a/buch/chapters/30-endlichekoerper/wurzeln.tex +++ b/buch/chapters/30-endlichekoerper/wurzeln.tex @@ -52,10 +52,10 @@ Inverse kann zum Beispiel als die inverse Matrix mit dem Gauss-Algorithmus berechnet werden. In einem zweiten Schritt zeigen wir dann, dass man die Rechnung noch etwas vereinfachen kann, wenn man in Polynomringen arbeitet. -Schliesslich zeigen wir dann im -Abschnitt~\ref{buch:subsection:zerfaellungskoerper}, wie man -den Prozess iterieren kann und so für beliebige Polynome immer einen -Körper finden kann, der alle Nullstellen enthält. +%Schliesslich zeigen wir dann im +%Abschnitt~\ref{buch:subsection:zerfaellungskoerper}, wie man +%den Prozess iterieren kann und so für beliebige Polynome immer einen +%Körper finden kann, der alle Nullstellen enthält. Wir beginnen in Abschnitt~\ref{buch:subsection:irreduziblepolynome} damit, die Polynome, die für die Konstruktion in Frage kommen, etwas genauer zu charakterisieren. @@ -608,7 +608,17 @@ $J$ mit $I\subset J\subset R$ entweder $I=J$ oder $J=R$ gilt. Die Ideale $p\mathbb{Z}\subset \mathbb{Z}$ sind maximal genau dann, wenn $p$ eine Primzahl ist. -TODO: XXX Begründung +Ist nämlich $p=n_1n_2$ eine Faktorisierung, dann ist +$\mathbb{Z}\supset n_1\mathbb{Z} \supset p\mathbb{Z}$ +und $n_1\mathbb{Z}$ ist ein grössers Ideal als $p\mathbb{Z}$, +d.~h.~$p\mathbb{Z}$ ist nicht maximal. + +In $\mathbb{Z}$ sind alle Ideale von der Form $n\mathbb{Z}$. +Wenn es also ein Ideal $I\supset p\mathbb{Z}$ gibt, welches +$p\mathbb{Z}$ echt enthält, dann gibt es $n\in\mathbb{Z}$ derart, +dass $n\mathbb{Z} \subset p\mathbb{Z}$. +Dies ist gleichbedeutend damit, dass $n$ ein echter Teiler von $p$ +ist, also ist $p$ keine Primzahl. \end{beispiel} \begin{satz} @@ -616,6 +626,23 @@ Der Ring $R/I$ ist genau dann ein Körper, wenn $I$ ein maximales Ideal ist. \end{satz} \begin{proof}[Beweis] +Nehmen wir zunächst an, dass $I$ ein maximales Ideal ist. +Damit $R/I$ ein Körper ist, muss jedes von $0$ verschiedene Element +eine multiplikatives Inverses haben. +Sei als $a\in R\setminus I$, dann ist $a+I$ ein von $0$ verschiedenes +Körperelement. +Die Menge $Ra+I$ ist dann ein Ideal von $R$, welches $I$ echt enthält. +Weil $I$ maximal ist, ist $Ra+I=R$, also gibt es ein Element $b\in I$ +derart, dass $ab+I=1+I$, d.~h.~$b+I$ ist das gesuchte multiplikative +Inverse. + +Sei nun umgekehrt $R/I$ ein Körper und $J\supset I$ sei ein Ideal, +welches $I$ echt enhält. +Sei $a\in J\setminus I$. +Da $R/I$ ein Körper ist, ist $a+I$ invertierbar, es gibt also ein +$b\in R$ mit $ab+I=1+I$. +Da $a\in J$ folgt $Ra\subset J$. +Andererseits ist $1\in Ra$, also ist $J=R$ und das Ideal $J$ ist maximal. \end{proof} Ein irreduzibles Polynom $m\in\Bbbk[X]$ erzeugt ein maximales Ideal, @@ -894,10 +921,3 @@ Dieser Spezialfall ist für die praktische Anwendung in der Kryptographie von besonderer Bedeutung, daher wird er im In Kapitel~\ref{buch:chapter:kryptographie} genauer untersucht. -\subsection{Zerfällungskörper -\label{buch:subsection:zerfaellungskoerper}} -XXX TODO - - - - diff --git a/buch/chapters/95-homologie/Makefile.inc b/buch/chapters/95-homologie/Makefile.inc index 41b1569..3b2b50c 100644 --- a/buch/chapters/95-homologie/Makefile.inc +++ b/buch/chapters/95-homologie/Makefile.inc @@ -8,7 +8,11 @@ CHAPTERFILES = $(CHAPTERFILES) \ chapters/95-homologie/simplex.tex \ chapters/95-homologie/komplex.tex \ chapters/95-homologie/homologie.tex \ + chapters/95-homologie/homologieketten.tex \ + chapters/95-homologie/basiswahl.tex \ chapters/95-homologie/fixpunkte.tex \ + chapters/95-homologie/eulerchar.tex \ + chapters/95-homologie/induzierteabb.tex \ chapters/95-homologie/chapter.tex diff --git a/buch/chapters/95-homologie/basiswahl.tex b/buch/chapters/95-homologie/basiswahl.tex new file mode 100644 index 0000000..aacfa9f --- /dev/null +++ b/buch/chapters/95-homologie/basiswahl.tex @@ -0,0 +1,817 @@ +\subsection{Basiswahl +\label{buch:subsection:basiswahl}} +Die Definition der Homologiegruppen $H_k(C)$ als Quotient von +Vektorräumen ist ziemlich abstrakt. +Sie besteht aus Klassen von Zyklen, die sich höchstens um einen +Rand unterscheiden. +Indem wir eine geeignete Basis wählen, können wir konkrete Zyklen +identifizieren, die eine Basis für den Vektorraum $H_k(C)$ bilden. +Dies soll im Folgenden schrittweise durchgeführt werden. + +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/gausshomoex.pdf} +\caption{Beispiel für die Berechnung von Basisvektoren und Homologieklassen +mit Hilfe des Gauss-Algorithmus +\label{buch:homologie:fig:gausshomoex}} +\end{figure} + +\subsubsection{Basis von $Z_k(C)$} +Um eine Basis für $H_k(C)$ zu konstruieren, ist es zunächst nötig, +eine Basis der Zyklen $Z_k(C)$ zu bestimmen. +Ausgehend von einer beliebigen Basis der $C_k$ und einer +zugehörigen Darstellung des Randoperators $\partial_k$ als +Matrix, kann eine Basis von Zyklen mit Hilfe des Gauss-Algorithmus +gefunden werden. +Wir bezeichnen die Menge dieser Zyklen mit +\[ +\mathcal{Z}_k += +\{ +z_1^{(k)}, +z_2^{(k)}, +\dots, +z_l^{(k)} +\}. +\] +$\mathcal{Z}_k$ erzeugt den $l$-dimensionalen Vektorraum $Z_k(C)$. + +\begin{beispiel} +\label{buch:homologie:beispiel:gausshomo} +In Abbildung~\ref{buch:homologie:fig:gausshomoex} ist ein Polyeder +dargestellt, dessen Homologiegruppe $H_1$ berechnet werden soll. +Um eine Basis für die Zyklen zu berechnen, wird zunächst die Matrix +des Randoperators $\partial_1$ aufgestellt. +Sie ist +\[ +\setcounter{MaxMatrixCols}{27} +\partial_1 += +\footnotesize +\setlength\arraycolsep{2pt} +\begin{pmatrix*}[r] +%1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 +-1& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 1 + 1&-1& 0& 0& 0&-1& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 2 + 0& 1&-1& 0& 0& 0& 0&-1& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 3 + 0& 0& 1&-1& 0& 0& 0& 0& 0&-1& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 4 + 0& 0& 0& 1& 0& 0& 0& 0& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 5 + 0& 0& 0& 0& 1& 1& 0& 0& 0& 0& 0& 0&-1& 0& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 6 + 0& 0& 0& 0& 0& 0&-1& 1& 0& 0& 0& 0& 1& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 7 + 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 0& 0& 0&-1& 0& 0& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 8 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 0& 1& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ % 9 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 0& 0&-1& 0& 1& 0& 0& 0& 0& 0& 0\\ %10 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 1&-1& 0&-1& 1& 0& 0& 0& 0\\ %11 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 0& 1& 0& 0& 0&-1& 0& 0& 0\\ %12 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 0& 0&-1& 1& 0\\ %13 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1& 1& 0&-1\\ %14 + 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&-1& 1\\ %15 +\end{pmatrix*} +\] +Die reduzierte Zeilenstufenform von $\partial_1$ ist +(Pivotpositionen in {\color{red}rot}, frei wählbare Variablen +in {\color{darkgreen}grün}) +\begin{center} +%\tiny +\scriptsize +%\footnotesize +\setlength\tabcolsep{3pt} +\begin{tabular}{|>{$}r<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|} +\hline + & 1& 2& 3& 4& 5&{\color{darkgreen}6}& 7&{\color{darkgreen}8}& 9&{\color{darkgreen}10}&11&{\color{darkgreen}12}&{\color{darkgreen}13}&{\color{darkgreen}14}&15&{\color{darkgreen}16}&17&{\color{darkgreen}18}&19&{\color{darkgreen}20}&21&{\color{darkgreen}22}&23&{\color{darkgreen}24}&{\color{darkgreen}25}&26&{\color{darkgreen}27}\\ +\hline + 1&\phantom{-}{\color{red}1}& 0& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 1& 0& 0&-1& 0& 0& 0& 1& 0& 0& 0&-1& 0& 0& 0\\ + 2& 0&\phantom{-}{\color{red}1}& 0& 0& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 1& 0& 0& 0&-1& 0& 0& 0\\ + 3& 0& 0&\phantom{-}{\color{red}1}& 0& 0& 0& 0& 0& 0&-1& 0& 0& 0& 1& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 4& 0& 0& 0&\phantom{-}{\color{red}1}& 0& 0& 0& 0& 0& 0& 0&-1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 5& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0& 0& 0& 0& 0& 0& 1& 0& 0&-1& 0& 0& 0& 1& 0& 0& 0&-1& 0& 0& 0\\ + 6& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0& 0& 0& 0&-1& 0& 0& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 7& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0& 0& 0& 1& 0& 0& 0&-1& 0&-1& 0& 0& 0& 1& 0& 0& 0\\ + 8& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0&-1& 0& 0& 0& 1& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ + 9& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0& 0& 0& 1& 0& 0& 0&-1& 0& 0& 0\\ +10& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0&-1& 0& 0& 0& 1& 0& 0& 0\\ +11& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0&-1& 0& 1& 1& 0&-1\\ +12& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1& 0& 0& 1& 0&-1\\ +13& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1&-1& 0& 1\\ +14& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0&\phantom{-}{\color{red}1}&-1\\ +15& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0& 0\\ +\hline +\end{tabular}. +\end{center} +Daraus kann man die Zyklen wie folgt ablesen, indem man jeweils +genau eine frei wählbare Variable auf $1$ setzt: +\begin{align*} +z_1 +&= +\tiny +\begin{pmatrix*}[r] +\phantom{-} + 1\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_2 +&= +\tiny +\begin{pmatrix*}[r] +\phantom{-} + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_3 +&= +\tiny +\begin{pmatrix*}[r] +\phantom{-} + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_4 % variable 12 = 1 +&= +\tiny +\begin{pmatrix*}[r] +\phantom{-} + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_5 % variable 13 = 1 +&= +\tiny +\begin{pmatrix*}[r] +-1\\ + 0\\ + 0\\ + 0\\ +-1\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_6 % variable 14 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 0\\ + 0\\ +-1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ +-1\\ + 0\\ + 1\\ + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_7 % variable 16 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 1\\ + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ +-1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*},\\ +z_8 % variable 18 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ +-1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_9 % variable 20 = 1 +&= +\tiny +\begin{pmatrix*}[r] +-1\\ +-1\\ + 0\\ + 0\\ +-1\\ + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ +-1\\ + 0\\ + 1\\ + 0\\ + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0 +\end{pmatrix*}, +&z_{10} % variable 22 = 1 +&= +\tiny +\begin{pmatrix*}[r] +\phantom{-} + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ %5 + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ %10 + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ %15 + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ %20 + 1\\ + 1\\ + 0\\ + 0\\ + 0\\ %25 + 0\\ + 0 +\end{pmatrix*}, +&z_{11} % variable 24 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 1\\ + 1\\ + 0\\ + 0\\ + 1\\ %5 + 0\\ + 0\\ + 0\\ +-1\\ + 0\\ %10 + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ %15 + 0\\ +-1\\ + 0\\ +-1\\ + 0\\ %20 + 0\\ + 0\\ + 1\\ + 1\\ + 0\\ %25 + 0\\ + 0 +\end{pmatrix*}, +&z_{12} % variable 25 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ %10 + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ %15 + 0\\ + 0\\ + 0\\ +-1\\ + 0\\ %20 +-1\\ + 0\\ + 1\\ + 0\\ + 1\\ %25 + 0\\ + 0 +\end{pmatrix*}, +&z_{13} % variable 27 = 1 +&= +\tiny +\begin{pmatrix*}[r] + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 0\\ + 1\\ + 0\\ %20 + 1\\ + 0\\ +-1\\ + 0\\ + 0\\ %25 + 1\\ + 1 +\end{pmatrix*} +\end{align*} +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/homocycles.pdf} +\caption{Zyklen des Randoperators $\partial_1$ im Beispiel von +Seite~\pageref{buch:homologie:beispiel:gausshomo}. +\label{buch:homologie:fig:homocycles}} +\end{figure}% +Die Zyklen sind in Abbildung~\ref{buch:homologie:fig:homocycles} {\color{red}rot} dargestellt. +\end{beispiel} + +\subsubsection{Basis für $B_k(C)$} +Da $B_k(C)\subset Z_k(C)$ gilt, lässt sich für jedes $c_{k+1}\in C_{k+1}$ +der Rand $\partial_{k+1}c_{k+1}$ als Linearkombination der im +vorangegangenen Schritt gefundenen Basiszyklen finden. +Wir können also aus der Standardbasis $e^{(k+1)}_i\in C_{k+1}$ eine Menge +von Vektoren $\partial_{k+1}e^{(k+1)}_i$ gewinnen, die mit Sicherheit +ganz $B_k(C)$ aufspannen. +Es ist aber davon auszugehen, dass diese Vektoren nicht linear unabhängig +sind. +Es ist also nötig, eine Teilmenge +\[ +\mathcal{B}_k += +\{ +\partial_{k+1}e^{(k+1)}_{i_1}, +\partial_{k+1}e^{(k+1)}_{i_2}, +\dots, +\partial_{k+1}e^{(k+1)}_{i_m} +\} +\] +von Vektoren auszuwählen, die linear +unabhängig sind. +Diese bilden eine Basis von $B_k(C)$. + +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/homoboundaries.pdf} +\caption{Die Ränder $\partial_2e_i^{(2)}$ für das Beispiel von +Seite~\pageref{buch:homologie:beispiel:gausshomo}. +Die grauen Dreiecke bilden die Standardbasis $e_i^{(2)}$ von $C_2$, +die blauen Dreiecke sind die Ränder $\partial_2e_i^{(2)}$ dieser +Dreiecke. +\label{buch:homologie:fig:homoboundaries}} +\end{figure} + +Aus den Abbildungen~\ref{buch:homologie:fig:homocycles} und +\ref{buch:homologie:fig:homoboundaries} kann man auch ablesen, +wie die Ränder $\partial_2e_i^{(2)}$ aus den Zyklen von $\mathcal{Z}_1$ +linear kombiniert werden können. +Man erhält so die Beziehungen +\begin{equation} +\setcounter{MaxMatrixCols}{29} +\setlength\arraycolsep{1pt} +\begin{array}{lcrcrcrcrcrcrcrcrcrcrcrcrcr} +\partial_2e_1^{(2)} &=&z_1& & & & & & & & & & & & & & & & & & & & & & & & \\ +\partial_2e_2^{(2)} &=& & &z_2& & & & & & & & & & & & & & & & & & & & & & \\ +\partial_2e_3^{(2)} &=& & & & &z_3& & & & & & & & & & & & & & & & & & & & \\ +\partial_2e_4^{(2)} &=& & & & & & &z_4& & & & & & & & & & & & & & & & & & \\ +\partial_2e_5^{(2)} &=& & & & & & & & &z_5& & &+&z_7& & & & & & & & & & & & \\ +\partial_2e_6^{(2)} &=& & & & & & & & & & &z_6& & &+&z_8& & & & & & & & & & \\ +\partial_2e_7^{(2)} &=& & & & & & & & & & & & & & & & & & &z_{10}& & & & & & \\ +\partial_2e_8^{(2)} &=& & & & & & & & & & & & & & & & & & & & &z_{11}& & & & \\ +\partial_2e_9^{(2)} &=& &\phantom{+}& &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & &\phantom{+} & & &z_{12}&+&z_{13} +\end{array} +\end{equation} +Dies reicht jedoch nicht, um herauszufinden, welche der blauen Dreiecke +linear unabhängig sind. +Im vorliegenden Fall ist dies einfach: jedes blaue Dreieck besteht aus +Kanten, die in keinem anderen blauen Dreieck vorkommen, daher müssen +sie alle linear unabhängig sein. + +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/gausshomobasis.pdf} +\caption{Bestimmung einer Basis für die Homologiegruppe $H_k(C)$ mit +Hilfe der Vorwärtsreduktion des Gaussalgorithmus. +Die schwarzen Nullzeilen zeigen an, welche Zeilenvektoren zusammen mit +den darüberliegenden Vektoren nicht linear unabhängig sind und damit nicht +in Frage kommen für die besuchte Basis. +Übrig bleiben die {\color{red}rot} und {\color{darkgreen}grün} hervorgehobenen +Vektoren. +\label{buch:homologie:fig:gausshomobasis}} +\end{figure} + +Diese Auswahl lässt sich sehr leicht mit Hilfe der folgenden +Variante des Gauss-Algorithmus realisieren. +Dazu werden die $n_{k+1}$ Zeilen Gauss-Tableau zunächst mit den Vektoren +$\partial_{k+1}{e_i^{(k+1)}}^t$ gefüllt. +Führt man in diesem Tableau die Vorwärtsreduktion durch, wobei man +entstehende Nullzeilen einfach überspringt, bleiben nur noch Zeilen +übrig, die linear unabhängig sind. +Diese Zeilen entsprechen den linear unabhängigen Vektoren von $\mathcal{B}_k$, +die Zeilennummern sind $i_1,i_2,\dots,i_m$. +Dieses Vorgehen ist schematisch im oberen Teil der +Abbildung~\ref{buch:homologie:fig:gausshomobasis} dargestellt. + +\subsubsection{Basis für die Homologiegruppe $H_k(C)$} +Um eine Basis von $H_k(C)$ zu konstruieren, müssen wir jetzt eine +Basis von Zyklen finden, die sich nicht nur um einen Rand unterscheiden, +die also zu verschiedenen Homologie-Klassen in $H_k(C)$ gehören. +Gesucht sind jetzt also Vektoren $\mathcal{Z}'_k$ derart, dass +die Vektoren von $\mathcal{Z}'_k\cup\mathcal{B}_k$ immer noch $Z_k(C)$ +aufspannen, aber zusätzlich linear unabhängig sind. + +Dazu kann man wie folgt vorgehen. +\begin{enumerate} +\item +Man beginnt mit $\mathcal{D}_0=\emptyset$ und setzt $j=0$. +\item +Dann testet man der Reihe nach alle noch nicht getesteten Vektoren +von $z_i^{(k)}\in\mathcal{Z}_k$ daraufhin, ob sie von den Vektoren +$\mathcal{B}_k\cup \mathcal{D}_j$ linear unabhängig sind. +Wenn ja, bildet man $\mathcal{D}_{j+1} = \mathcal{D}\cup\{z^{(k)}_i\}$ und +setzt $j=1$. +Andernfalls ignoriert man $z^{(k)}_i$. +\item +Schritt 2 wird wiederholt, bis man alle Vektoren von $\mathcal{Z}_k$ +getestet hat. +Die gesuchte Basis setzt sich zusammen aus $\mathcal{B}_k$ und +$\mathcal{D}_l$, +also +$ +\mathcal{Z}_k' += +\mathcal{B}_k +\cup +\mathcal{D}_l. +$ +\end{enumerate} + +Dieser Algorithmus kann ebenfalls mit der oben angesprochenen Variante +des Gauss-Algorithmus durchgeführt werden. +Dazu werden die Zeilen $n_k+1$ bis $n_k+1+|\mathcal{Z}_k|$ mit den +Vektoren $z_i^t$. +Dann führt man die Vorwärtsreduktion im ganzen Tableau durch, wobei +man wieder die Nullzeilen stehen lässt. +Nullzeilen zeigen wieder Vektoren an, die sich linear durch die darüber +liegenden Vektoren ausdrücken lassen. +Die auszuwählenden Vektoren sind daher genau diejenigen, die für +$\mathcal{Z}_k'$ ausgewählt werden müssen. + +Um den Algorithmus durchzuführen, bilden wir daher das Gauss-Tableau +in Abbildung~\ref{buch:homologie:beispiel:gausstableau}, +bestehend aus den Vektoren $\partial_2e_i^{(2)}$ in den ersten 9 +Zeilen und den Zyklen $z_1,\dots,z_{13}$ in den folgenden 13 Zeilen. +Das reduzierte Tableau nach der Vorwärtsreduktion ist in +Abbildung~\ref{buch:homologie:beispiel:gausstableaureduziert} +dargestellt, amn erkennt, dass die Zyklen $z_1$ bis $z_4$, $z_7$ und $z_8$, +$z_9$ und $z_{10}$ sowie $z_{13}$ weggelassen werden müssen. +Es bleiben die folgenden Zyklen: +\begin{center} +\begin{tabular}{>{$}l<{$}l} +\text{Zyklus}&Eigenschaft\\ +\hline +z_5 &Zyklus umschliesst das kleine weisse Dreieck links unten\\ +z_6 &Zyklus umschliesst das kleine weisse Dreieck rechts unten\\ +z_9 &Zyklus umschliesst das grosse weisse Dreieck\\ +z_{12}&Zyklus umschliesst das kleine weisse Dreicke oben\\ +\hline +\end{tabular} +\end{center} +Die Zyklen, die nach der Reduktion übrig bleiben, sind in +Abbildung~\ref{buch:homologie:beispiel:homoclasses} zusammengestellt. +Jede solche Klasse entspricht genau einem der ``Löcher'', der weissen +Dreiecke. +Die Homologie kann man also als eine exakte Version der Idee eines +Vektorraums erzeugt von den ``Löchern'' eines Polygons verstehen. + +\begin{figure} +\centering +\setlength\tabcolsep{1pt} +\begin{tabular}{|>{$}c<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|} +\hline +&\scriptstyle 1&\scriptstyle 2&\scriptstyle 3&\scriptstyle 4 &\scriptstyle 5 +&\scriptstyle 6 &\scriptstyle 7 &\scriptstyle 8 &\scriptstyle 9 &\scriptstyle 10 +&\scriptstyle 11 &\scriptstyle 12 &\scriptstyle 13 &\scriptstyle 14 &\scriptstyle 15 +&\scriptstyle 16 &\scriptstyle 17 &\scriptstyle 18 &\scriptstyle 19 &\scriptstyle 20 +&\scriptstyle 21 &\scriptstyle 22 &\scriptstyle 23 &\scriptstyle 24 &\scriptstyle 25 +&\scriptstyle 26 &\scriptstyle 27 +\\ +% 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 +\hline +\scriptstyle\partial_2e_1^{(2)}& 1& & & & 1&\phantom{-}1& & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_2^{(2)}& & 1& & & & & 1&\phantom{-}1& & & & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_3^{(2)}& & & 1& & & & & &\phantom{-}1&\phantom{-}1& & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_4^{(2)}& & & &\phantom{-}1& & & & & & & 1&\phantom{-}1& & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_5^{(2)}& & & & & & & & & & & & & 1& & 1&\phantom{-}1& & & & & & & & & & & \\ +\scriptstyle\partial_2e_6^{(2)}& & & & & & & & & & & & & &\phantom{-}1& & & 1&\phantom{-}1& & & & & & & & & \\ +\scriptstyle\partial_2e_7^{(2)}& & & & & & & & & & & & & & & & & & & 1& &\phantom{-}1& 1& & & & & \\ +\scriptstyle\partial_2e_8^{(2)}& & & & & & & & & & & & & & & & & & & &\phantom{-}1& & & 1&\phantom{-}1& & & \\ +\scriptstyle\partial_2e_9^{(2)}& & & & & & & & & & & & & & & & & & & & & & & & &\phantom{-}1&\phantom{-}1&\phantom{-}1\\ +\hline +% 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 +\scriptstyle z_{ 1}& 1& & & & 1& 1& & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 2}& & 1& & & & & 1& 1& & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 3}& & & 1& & & & & & 1& 1& & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 4}& & & & 1& & & & & & & 1& 1& & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 5}&-1& & & &-1& & 1& & & & & & 1& & & & & & & & & & & & & & \\ +\scriptstyle z_{ 6}& & &-1& & & & & &-1& & 1& & & 1& & & & & & & & & & & & & \\ +\scriptstyle z_{ 7}& 1& & & & 1& &-1& & & & & & & & 1& 1& & & & & & & & & & & \\ +\scriptstyle z_{ 8}& & & 1& & & & & & 1& &-1& & & & & & 1& 1& & & & & & & & & \\ +\scriptstyle z_{ 9}&-1&-1& & & 1& & & & 1& & & & & &-1& & 1& 1& 1& & & & & & & & \\ +\scriptstyle z_{10}& & & & & & & & & & & & & & & & & & 1& & 1& 1& & & & & & \\ +\scriptstyle z_{11}& 1& 1& & & 1& & & &-1& & & & & & 1& &-1& &-1& & & & 1& 1& & & \\ +\scriptstyle z_{12}& & & & & & & & & & & & & & & & & & &-1& &-1& & 1& & 1& & \\ +\scriptstyle z_{13}& & & & & & & & & & & & & & & & & & & 1& & 1& &-1& & & 1& 1\\ +\hline +\end{tabular} +\caption{Gauss-Tableau für die Bestimmung einer Basis von +$H_1$ für das Beispiel. +Die ersten neuen Zeilen bestehen aus den Bildern der +Basisvektoren von $C_2$. +Im vorliegenden Fall kann man sofort sehen, dass alle diese +Zeilen linear unabhängig sind. +Die folgenden Zeilen sind die Zyklen in $\mathbb{Z}_2$, sie +sind ebenfalls linear unabhängig. +Mit Hilfe der Vorwärtsreduktion müssen jetzt diejenigen +Zeilen elminiert werden, die bereits aus anderen Zyklen +mit Hilfe von Rändern der Zeilen 1--9 kombiniert werden können. +\label{buch:homologie:beispiel:gausstableau}} +\end{figure} + +\begin{figure} +\centering +\setlength\tabcolsep{1pt} +\begin{tabular}{|>{$}c<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}>{$}r<{$}|} +\hline +&\scriptstyle 1&\scriptstyle 2&\scriptstyle 3&\scriptstyle 4 &\scriptstyle 5 +&\scriptstyle 6 &\scriptstyle 7 &\scriptstyle 8 &\scriptstyle 9 &\scriptstyle 10 +&\scriptstyle 11 &\scriptstyle 12 &\scriptstyle 13 &\scriptstyle 14 &\scriptstyle 15 +&\scriptstyle 16 &\scriptstyle 17 &\scriptstyle 18 &\scriptstyle 19 &\scriptstyle 20 +&\scriptstyle 21 &\scriptstyle 22 &\scriptstyle 23 &\scriptstyle 24 &\scriptstyle 25 +&\scriptstyle 26 &\scriptstyle 27 +\\ +% 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 +\hline +\scriptstyle\partial_2e_1^{(2)}&\phantom{-}1& & & &\phantom{-}1&\phantom{-}1& & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_2^{(2)}& &\phantom{-}1& & & & &\phantom{-}1&\phantom{-}1& & & & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_3^{(2)}& & &\phantom{-}1& & & & & &\phantom{-}1&\phantom{-}1& & & & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_4^{(2)}& & & &\phantom{-}1& & & & & & &\phantom{-}1&\phantom{-}1& & & & & & & & & & & & & & & \\ +\scriptstyle\partial_2e_5^{(2)}& & & & & & & & & & & & & 1& & 1&\phantom{-}1& & & & & & & & & & & \\ +\scriptstyle\partial_2e_6^{(2)}& & & & & & & & & & & & & &\phantom{-}1& & & 1&\phantom{-}1& & & & & & & & & \\ +\scriptstyle\partial_2e_7^{(2)}& & & & & & & & & & & & & & & & & & & 1& &\phantom{-}1& 1& & & & & \\ +\scriptstyle\partial_2e_8^{(2)}& & & & & & & & & & & & & & & & & & & &\phantom{-}1& & & 1&\phantom{-}1& & & \\ +\scriptstyle\partial_2e_9^{(2)}& & & & & & & & & & & & & & & & & & & & & & & & &\phantom{-}1&\phantom{-}1&\phantom{-}1\\ +\hline +% 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 +\scriptstyle z_{ 1}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 2}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 3}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 4}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 5}'& & & & & & 1& 1& & & & & & & &-1&-1& & & & & & & & & & & \\ +\scriptstyle z_{ 6}'& & & & & & & & & & 1& 1& & & & & &-1&-1& & & & & & & & & \\ +\scriptstyle z_{ 7}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 8}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{ 9}'& & & & & & & & 1& 1& & & & & & & 1& 1& & & &-1&-1&-1&-1& & & \\ +\scriptstyle z_{10}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{11}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\scriptstyle z_{12}'& & & & & & & & & & & & & & & & & & & & & & 1& 1& & &-1&-1\\ +\scriptstyle z_{13}'& & & & & & & & & & & & & & & & & & & & & & & & & & & \\ +\hline +\end{tabular} +\caption{Nach Durchführung der Vorwärtsreduktion kann man die Zyklen +ablesen, die nicht für eine Basis von $H_1$ gebraucht werden. +Die resultierenden Zyklen sind in Abbildung~\ref{buch:homologie:beispiel:homoclasses} +dargestellt. +\label{buch:homologie:beispiel:gausstableaureduziert}} +\end{figure} + +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/homoclasses.pdf} +\caption{Repräsentanten für die reduzierten Klassen aus dem +Tableau von +Abbildung~\ref{buch:homologie:beispiel:gausstableaureduziert}, +sie bilden eine Basis der Homologie-Gruppe $H_1$. +Jeder dieser Repräsentanten umschliesst genau ein ``Loch'', +also genau ein weisses Dreieck. +\label{buch:homologie:beispiel:homoclasses}} +\end{figure} + +\subsubsection{Basis von $H_k(C)$} +Die im vorangegangenen Abschnitt konstruierte Basis kann jetzt auch +dazu verwendet werden, eine Basis von $H_k(C)$ zu finden. +Die Vektoren in $\mathcal{B}_k$ bilden eine Basis von $B_k(C)$ +und die Vektoren in $\mathcal{Z}_k'$ sind davon unabhängig. +Die Klassen der Vektoren von $\mathcal{Z}_k'$ in $H_k(C)$ sind +daher ebenfalls linear unabhängig und bilden damit eine Basis +von $H_k(C)$. +Die von obigem Algorithmus ausgewählten Zyklen bilden also automatisch +eine Basis von Zyklen, die nicht Rand irgend einer Kette in $C_{k+1}$ +sein können. diff --git a/buch/chapters/95-homologie/chapter.tex b/buch/chapters/95-homologie/chapter.tex index 994c400..e25188c 100644 --- a/buch/chapters/95-homologie/chapter.tex +++ b/buch/chapters/95-homologie/chapter.tex @@ -3,9 +3,9 @@ % % (c) 2021 Prof Dr Andreas Müller, Hochschule Rapperswil % -\chapter{Homologie +\chapter{Kettenkomplexe und Homologie \label{buch:chapter:homologie}} -\lhead{Homologie} +\lhead{Kettenkomplexe und Homologie} \rhead{} Mit der Inzidenzmatrix war es möglich, einen Graphen zu beschreiben und verschiedene interessante Eigenschaften desselben zu berechnen. @@ -35,6 +35,16 @@ Der sogenannte Randoperator ordnet jedem Dreieck, Tetraeder oder allgemein jedem Simplex seinen Rand zu. Damit wird es möglich, das Dreieck vom Rand des Dreiecks zu unterschieden. +Die Verallgemeinerung dieser Idee liefert eine algebraische Konstruktion +zu jedem topologischen Raum, die sogenannten Homologie-Gruppen. +Sie formalisieren ein mögliches Konzept der Dimension und der +Idee von ``Löchern'' in einem topologischen Raum. +Sie können dabei helfen, die topologische Struktur verschiedener +Räume zu unterscheiden. +Das Ziel dieses Kapitels ist nicht, die Homologietheorie +vollständig zu entwickeln, sondern zu zeigen, wie man Matrizen +verwenden kann, um konkrete Rechnungen durchzuführen. + \input{chapters/95-homologie/simplex.tex} \input{chapters/95-homologie/komplex.tex} \input{chapters/95-homologie/homologie.tex} diff --git a/buch/chapters/95-homologie/eulerchar.tex b/buch/chapters/95-homologie/eulerchar.tex new file mode 100644 index 0000000..03e389b --- /dev/null +++ b/buch/chapters/95-homologie/eulerchar.tex @@ -0,0 +1,139 @@ +\subsection{Euler-Charakteristik} +Die Homologiegruppen fassen die Idee, die ``Löcher'' in +Dimension $k$ eines Polyeders zu zählen, algebraisch exakt. +Dazu ist aber die algebraische Struktur von $H_k(C)$ gar +nicht nötig, nur schon die Dimension des Vektorraumes $H_k(C)$ +liefert bereits die verlange Information. + +Dies ist auch der Ansatz, den der eulersche Polyedersatz verfolgt. +Euler hat für dreidimensionale Polyeder eine Invariante gefunden, +die unabhängig ist von der Triangulation. + +\begin{definition} +\label{buch:homologie:def:eulerchar0} +Ist $E$ die Anzahl der Ecken, $K$ die Anzahl der Kanten und $F$ +die Anzahl der Flächen eines dreidimensionalen Polyeders $P$, dann +heisst +\[ +\chi(P) = E-K+F +\] +die {\em Euler-Charakteristik} des Polyeders $P$. +\end{definition} + +Der Eulersche Polyedersatz, den wir nicht gesondert beweisen +wollen, besagt, dass $\chi(P)$ unabhängig ist von der +Triangulation. +Alle regelmässigen Polyeder sind verschiedene Triangulationen +einer Kugel, sie haben alle den gleichen Wert $2$ +der Euler-Charakteristik. + +Ändert man die Triangulation, dann wird die Dimension der +Vektorräume $B_k(C)$ und $Z_k(C)$ grösser werden. +Kann man eine Grösse analog zu $\chi(P)$ finden, die sich nicht ändert? + +\begin{definition} +\label{buch:homologie:def:eulerchar} +Sei $C$ ein Kettenkomplex, dann heisst +\[ +\chi(C) = \sum_{k=0}^n (-1)^k\dim H_k(C) +\] +die Euler-Charakteristik von $C$. +\end{definition} + +Die Summe in Definition~\ref{buch:homologie:def:eulerchar} erstreckt +sich bis zum Index $n$, der Dimension des Simplexes höchster Dimension +in einem Polyeder. +Für $k>n$ ist $H_k(C)=0$, es ändert sich also nichts, wenn wir +die Summe bis $\infty$ erstrecken, da die zusätzlichen Terme alle +$0$ sind. +Wir werden dies im folgenden zur Vereinfachung der Notation tun. + +Die Definition verlangt, dass man erst die Homologiegruppen +berechnen muss, bevor man die Euler-Charakteristik bestimmen +kann. +Dies ist aber in vielen Fällen gar nicht nötig, da dies nur +eine Frage der Dimensionen ist, die man direkt aus den +$C_k$ ablesen kann, wie wir nun zeigen wollen. + +Die Dimension der Homologiegruppen ist +\begin{equation} +\dim H_k(C) += +\dim \bigl(Z_k(C) / B_k(C)\bigr) += +\dim Z_k(C) - \dim B_k(C). +\label{buch:homologie:eqn:dimHk} +\end{equation} +Die Bestimmung der Dimensionen der Zyklen und Ränder erfordert +aber immer noch, dass wir dafür Basen bestimmen müssen, es ist +also noch nichts eingespart. +Die Zyklen bilden den Kern von $\partial$, also +\[ +\dim Z_k(C) = \dim\ker \partial_k. +\] +Die Ränder $B_k(C)$ sind die Bilder von $\partial_{k+1}$, also +\[ +\dim B_k(C) += +\dim C_{k+1} - \ker\partial_{k+1} += +\dim C_{k+1} - \dim Z_{k+1}(C). +\] +Daraus kann man jetzt eine Formel für die Euler-Charakteristik +gewinnen. +Sie ist +\begin{align*} +\chi(C) +&= +\sum_{k=0}^\infty (-1)^k \dim H_k(C) +\\ +&= +\sum_{k=0}^\infty (-1)^k \bigl(\dim Z_k(C) - \dim B_k(C)\bigr) +\\ +&= +\sum_{k=0}^\infty (-1)^k \dim Z_k(C) +- +\sum_{k=0}^\infty (-1)^k \bigl(\dim C_{k+1} - \dim_{k+1}(C)\bigr) +\\ +&= +-\sum_{k=0}^\infty (-1)^k \dim C_{k+1} ++ +\sum_{k=0}^\infty (-1)^k \dim Z_k(C) ++ +\sum_{k=0}^\infty (-1)^k \dim Z_{k+1}(C). +\intertext{Indem wir in der letzten Summe den Summationsindex $k$ durch +$k-1$ ersetzen, können wir bis auf den ersten Term die Summen +der $\dim Z_k(C)$ zum Verschwinden bringen:} +&= +-\sum_{k=0}^\infty (-1)^k \dim C_{k+1} ++ +\sum_{k=0}^\infty (-1)^k \dim Z_k(C) +- +\sum_{k=1}^\infty (-1)^k \dim Z_k(C) +\\ +&= +\sum_{k=1}^\infty (-1)^k \dim C_{k} ++ +\dim \underbrace{Z_0(C)}_{\displaystyle =C_0}. +\intertext{In der letzten Umformung haben wir auch in der ersten +Summe den Summationsindex $k$ durch $k-1$ ersetzt. +Damit beginnt die Summation bei $k=1$. +Der fehlende Term ist genau der Term, der von den Summen der +$\dim Z_k(C)$ übrig bleibt. +Damit erhalten wir} +&= +\sum_{k=0}^\infty (-1)^k \dim C_{k}. +\end{align*} + +\begin{satz} +Für die Euler-Charakteristik eines endlichdimensionalen Kettenkomplexes $C$ gilt +\[ +\chi(C) += +\sum_{k=0}^\infty (-1)^k \dim H_k(C) += +\sum_{k=0}^\infty (-1)^k \dim C_k. +\] +\end{satz} +Im nächsten Abschnitt wird gezeigt, dass die Euler-Charakteristik +als Spezialfall der Lefshetz-Zahl verstanden werden kann. diff --git a/buch/chapters/95-homologie/fixpunkte.tex b/buch/chapters/95-homologie/fixpunkte.tex index a03d4b5..b3b184e 100644 --- a/buch/chapters/95-homologie/fixpunkte.tex +++ b/buch/chapters/95-homologie/fixpunkte.tex @@ -33,7 +33,7 @@ ist die Spur von $H_k(f)$ wohldefiniert. \begin{definition} Die {\em Lefshetz-Zahl} einer Abbildung $f$ von Kettenkomplexen ist -\[ +\begin{equation} \lambda(f) = \sum_{k=0}^\infty @@ -41,7 +41,8 @@ Die {\em Lefshetz-Zahl} einer Abbildung $f$ von Kettenkomplexen ist = \sum_{k=0}^\infty (-1)^k \operatorname{Spur}(H_k(f)). -\] +\label{buch:homologie:lefschetz-zahl} +\end{equation} \end{definition} Die zweite Darstellung der Lefshetz-Zahl auf der rechten Seite ist @@ -49,11 +50,55 @@ meistens viel leichter zu berechnen als die erste. Die einzelnen Vektorräume eines Kettenkomplexes können haben typischerweise eine hohe Dimension, so hoch wie die Anzahl der Simplizes der Triangulation. Die Homologiegruppen dagegen haben typischerweise sehr viel kleinere -Dimension, die Matrizen $H_k(F)$ sind also relativ klein. +Dimension, die Matrizen $H_k(f)$ sind also relativ klein. Es ist aber nicht klar, dass beide Berechnungsmethoden für die Lefshetz-Zahl auf das gleiche Resultat führen müssen. +\begin{figure} +\centering +\includegraphics[width=\textwidth]{chapters/95-homologie/images/approximation.pdf} +\caption{Stückweise lineare Approximation einer Abbildung derart, +dass die Bildpunkt von Knoten auf Gitterpunkte fallen. +Die Abbildung wird damit zu einer Abbildung von Polyedern und +die induzierte Abbildung der Kettenkomplexe lässt sich direkt berechnen. +Wenn die Auflösung des Gitters klein genug ist, hat die Approximation +einer Abbildung ohne Fixpunkte immer noch keine Fixpunkte. +\label{buch:homologie:fig:simplapprox}} +\end{figure}% + \begin{proof}[Beweis] +Im Abschnitt~\ref{buch:subsection:induzierte-abbildung} wurde gezeigt, +dass die Basis des Komplexes immer so gewählt werden kann, dass für +die Spuren der Teilmatrizen von $f_k$ die +Formel~\eqref{buch:homologie:eqn:spur} gilt. +Damit kann jetzt die alternierenierden Summe der Spuren von $f_k$ ermittelt +werden: +\begin{align*} +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_k) +&= +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,B}) ++ +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,Z}) ++ +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k-1,B}) +\\ +&= +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,B}) ++ +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,Z}) +- +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,B}) +\\ +&= +\sum_{k=0}^\infty (-1)^k\operatorname{Spur}(f_{k,Z}). +\intertext{Die Abbildung $H_k(f)$ hat $f_{k,Z}$ als Matrix, also ist +die letzte Form gleichbedeutend mit} +&= +\sum_{k=0} (-1)^k\operatorname{Spur} H_k(f). +\end{align*} +Damit ist die Formel +\eqref{buch:homologie:lefschetz-zahl} +bewiesen. \end{proof} Die Lefshetz-Zahl ist eine Invariante einer topologischen Abbildung, @@ -67,6 +112,7 @@ ist $\lambda(f) \ne 0$, dann hat $f$ einen Fixpunkt. Im Folgenden soll nur ein heuristisches Argument gegeben werden, warum ein solcher Satz wahr sein könnte. + Wenn eine Abbildung keinen Fixpunkt hat, dann ist $f(x) \ne x$ für alle Punkte von $X$. Da $X$ kompakt ist, gibt es einen minimalen Abstand $d$ zwischen $f(x)$ und $x$. @@ -76,6 +122,9 @@ Punkte im selben Simplex oder in einem Nachbarsimplex abgebildet wird. Indem man nötigenfalls die Triangulation nochmals verfeinert, kann man auch genügend Platz schaffen, dass man die Abbildung $f$ etwas modifizieren kann, so dass auch die deformierte Abbildung immer noch diese Eigenschaft hat. +Die Abbildung~\ref{buch:homologie:fig:simplapprox} illustriert, wie eine +Abbildung durch eine andere approximiert werden kann, die die Triangulation +im Bildraum respektiert. Die zugehörige Abbildung des Kettenkomplexes der Triangulation hat damit die Eigenschaft, dass kein Basisvektor auf sich selbst abgebildet wird. diff --git a/buch/chapters/95-homologie/homologie.tex b/buch/chapters/95-homologie/homologie.tex index 905ecc3..747c00f 100644 --- a/buch/chapters/95-homologie/homologie.tex +++ b/buch/chapters/95-homologie/homologie.tex @@ -34,321 +34,8 @@ Es soll möglich werden, kompliziertere Fragen des Zusammenhangs, zum Beispiel das Vorhandensein von Löchern mit algebraischen Mitteln zu analysieren. -\subsection{Homologie eines Kettenkomplexes -\label{buch:subsection:homologie-eines-kettenkomplexes}} -Wegzusammenhang lässt sich untersuchen, indem man in der Triangulation -nach Linearkombinationen von Kanten sucht, die als Rand die beiden Punkte -haben. -Zwei Punkte sind also nicht verbindbar und liegen damit in verschiedenen -Komponenten, wenn die beiden Punkte nicht Rand irgend einer -Linearkombination von Kanten sind. -Komponenten können also identifiziert werden, indem man unter allen -Linearkombinationen von Punkten, also $C_0$ all diejenigen ignoriert, -die Rand einer Linearkombinationv on Kanten sind, also $\partial_1C_1$. -Der Quotientenraum $H_0=C_0/\partial_1C_1$ enthält also für jede Komponente -eine Dimension. - -Eine Dimension höher könnten wir danach fragen, ob sich ein geschlossener -Weg zusammenziehen lässt. -In der Triangulation zeichnet sich ein geschlossener Weg dadurch aus, -dass jedes Ende einer Kante auch Anfang einer Folgekante ist, dass also -der Rand der Linearkombination von Kanten 0 ist. -Algebraisch bedeutet dies, dass wir uns für diejenigen Linearkombinationen -$z\in C_1$ interessieren, die keinen Rand haben, für die also $\partial_1z=0$ -gilt. - -\begin{definition} -Die Elemente von -\[ -Z_k -= -Z_k^C -= -\{z\in C_k\;|\; \partial_k z = 0\} -= -\ker \partial_k -\] -heissen die {\em ($k$-dimensionalen) Zyklen} von $C_*$. -\end{definition} - -In einem Dreieck ist der Rand ein geschlossener Weg, der sich zusammenziehen -lässt, indem man ihn durch die Dreiecksfläche deformiert. -Entfernt man aber die Dreiecksfläche, ist diese Deformation nicht mehr -möglich. -Einen zusammenziehbaren Weg kann man sich also als den Rand eines Dreiecks -einer vorstellen. -``Löcher'' sind durch geschlossene Wege erkennbar, die nicht Rand eines -Dreiecks sein können. -Wir müssen also ``Ränder'' ignorieren. - -\begin{definition} -Die Elemente von -\[ -B_k -= -B_k^C -= -\{\partial_{k+1}z\;|\; C_{k+1}\} -= -\operatorname{im} \partial_{k+1} -\] -heissen die {\em ($k$-dimensionalen) Ränder} von $C_*$. -\end{definition} - -Algebraisch ausgedrückt interessieren uns also nur Zyklen, die selbst -keine Ränder sind. -Der Quotientenraum $Z_1/B_1$ ignoriert unter den Zyklen diejenigen, die -Ränder sind, drückt also algebraisch die Idee des eindimensionalen -Zusammenhangs aus. -Wir definieren daher - -\begin{definition} -Die $k$-dimensionale Homologiegruppe des Kettenkomplexes $C_*$ ist -\[ -H_k(C) = Z_k/B_k = \ker \partial_k / \operatorname{im} \partial_{k+1}. -\] -Wenn nur von einem Kettenkomplex die Rede ist, kann auch $H_k(C)=H_k$ -abgekürzt werden. -\end{definition} - -Die folgenden zwei ausführlichen Beispiele sollen zeigen, wie die -Homologiegruppe $H_2$ die Anwesenheit eines Hohlraumes detektieren kann, -der entsteht, wenn man aus einem Tetraeder das innere entfernt. - -\begin{beispiel} -\begin{figure} -\centering -XXX Bild eines Tetraeders mit Bezeichnung der Ecken und Kanten -\caption{Triangulation eines Tetraeders, die Orientierung von Kanten -und Seitenflächen ist immer so gewählt, dass die Nummern der Ecken -aufsteigend sind. -\label{buch:homologie:tetraeder:fig}} -\end{figure} -Ein Tetraeder ist ein zweidmensionales Simplex, wir untersuchen seinen -Kettenkomplex und bestimmen die zugehörigen Homologiegruppen. -Zunächst müssen wir die einzelnen Mengen $C_k$ beschreiben und verwenden -dazu die Bezeichnungen gemäss Abbildung~\ref{buch:homologie:tetraeder:fig}. -$C_0$ ist der vierdimensionale Raum aufgespannt von den vier Ecken -$0$, $1$, $2$ und $3$ des Tetraeders. -$C_1$ ist der sechsdimensionale Vektorraum der Kanten -\[ -k_0 = [0,1],\quad -k_1 = [0,2],\quad -k_2 = [0,3],\quad -k_3 = [1,2],\quad -k_4 = [1,3],\quad -k_5 = [2,3] -\] -Der Randoperator $\partial_1$ hat die Matrix -\[ -\partial_1 -= -\begin{pmatrix*}[r] --1&-1&-1& 0& 0& 0\\ - 1& 0& 0&-1&-1& 0\\ - 0& 1& 0& 1& 0&-1\\ - 0& 0& 1& 0& 1& 1 -\end{pmatrix*}. -\] - -Wir erwarten natürlich, dass sich zwei beliebige Ecken verbinden lassen, -dass es also nur eine Komponente gibt und dass damit $H_1=\Bbbk$ ist. -Dazu beachten wir, dass das Bild von $\partial_1$ genau aus den Vektoren -besteht, deren Komponentensumme $0$ ist. -Das Bild $B_0$ von $\partial_1$ ist daher die Lösungsmenge der einen -Gleichung -\( -x_0+x_1+x_2+x_3=0. -\) -Der Quotientenraum $H_0=Z_0/B_0 = C_0/\operatorname{im}\partial_1$ -ist daher wie erwartet eindimensional. - -Wir bestimmen jetzt die Homologiegruppe $H_1$. -Da sich im Tetraeder jeder geschlossene Weg zusammenziehen lässt, -erwarten wir $H_1=0$. - -Die Menge der Zyklen $Z_1$ wird bestimmt, indem man die Lösungsmenge -des Gleichungssystems $\partial_1z=0$ bestimmt. -Der Gauss-Algorithmus für die Matrix $\partial_1$ liefert das -Schlusstableau -\[ -\begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|} -\hline -k_0&k_1&k_2&k_3&k_4&k_5\\ -\hline - 1& 0& 0& -1& -1& 0\\ - 0& 1& 0& 1& 0& -1\\ - 0& 0& 1& 0& 1& 1\\ - 0& 0& 0& 0& 0& 0\\ -\hline -\end{tabular} -\] -Daraus lassen sich drei linear unabhängig eindimensionale Zyklen ablesen, -die zu den Lösungsvektoren -\[ -z_1 -= -\begin{pmatrix*}[r] -1\\ --1\\ -0\\ -1\\ -0\\ -0 -\end{pmatrix*}, -\qquad -z_2 -= -\begin{pmatrix*}[r] -1\\ -0\\ --1\\ -0\\ -1\\ -0 -\end{pmatrix*}, -\qquad -z_3 -= -\begin{pmatrix*}[r] -0\\ -1\\ --1\\ -0\\ -0\\ -1 -\end{pmatrix*} -\] -gehören. - -$C_2$ hat die vier Seitenflächen -\[ -f_0=[0,1,2],\quad -f_1=[0,1,3],\quad -f_2=[0,2,3],\quad -f_3=[1,2,3] -\] -als Basis. -Der zweidimensionale Randoperator ist die $6\times 4$-Matrix -\[ -\partial_2 -= -\begin{pmatrix*}[r] - 1& 1& 0& 0\\ --1& 0& 1& 0\\ - 0&-1&-1& 0\\ - 1& 0& 0& 1\\ - 0& 1& 0&-1\\ - 0& 0& 1& 1 -\end{pmatrix*}. -\] -Man kann leicht nachrechnen, dass $\partial_1\partial_2=0$ ist, wie es -für einen Kettenkomplex sein muss. - -Um nachzurechnen, dass die Homologiegruppe $H_1=0$ ist, müssen wir jetzt -nachprüfen, ob jeder Zyklus in $Z_1$ auch Bild der Randabbildung $\partial_2$ -ist. -Die ersten drei Spalten von $\partial_2$ sind genau die drei Zyklen -$z_1$, $z_2$ und $z_3$. -Insbesondere lassen sich alle Zyklen als Ränder darstellen, die -Homologiegruppe $H_1=0$ verschwindet. - -Die Zyklen in $C_2$ sind die Lösungen von $\partial_2z=0$. -Der Gauss-Algorithmus für $\partial_2$ liefert das -Tableau -\[ -\begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|} -\hline -f_0&f_1&f_2&f_3\\ -\hline -1&0&0& 1\\ -0&1&0&-1\\ -0&0&1& 1\\ -0&0&0& 0\\ -0&0&0& 0\\ -0&0&0& 0\\ -\hline -\end{tabular} -\] -Daraus liest man ab, dass es genau einen Zyklus nämlich -\[ -z -= -\begin{pmatrix} --1\\1\\-1\\1 -\end{pmatrix} -\] -$Z_2$ besteht also aus Vielfachen des Vektors $z$. - -Da es nur ein zweidimensionales Simplex gibt, ist $C_3$ eindimensional. -Die Randabbildung $\partial_3$ hat die Matrix -\[ -\partial_3 -= -\begin{pmatrix} -1\\ --1\\ -1\\ --1 -\end{pmatrix}. -\] -Die Zyklen $Z_2$ und die Ränder $B_2$ bilden also dieselbe Menge, auch -die Homologie-Gruppe $H_2$ ist $0$. - -Da es keine vierdimensionalen Simplizes gibt, ist $B_3=0$. -Die Zyklen $Z_3$ bestehen aus den Lösungen von $\partial_3w=0$, da -aber $\partial_3$ injektiv ist, ist $Z_3=0$. -Daher ist auch $H_3=0$. -\end{beispiel} - -\begin{beispiel} -Für dieses Beispiel entfernen wir das Innere des Tetraeders, es entsteht -ein Hohlraum. -Am Kettenkomplex der Triangulation ändert sich nur, dass $C_3$ jetzt -nur noch den $0$-Vektor enthält. -Das Bild $B_2=\operatorname{im}\partial_3$ wird damit auch $0$-dimensional, -während es im vorigen Beispiel eindimensional war. -Die einzige Änderung ist also in der Homologiegruppe -$H_2 = Z_2/B_2 = Z_2 / \{0\} \simeq \Bbbk$. -Die Homologiegruppe $H_2$ hat jetzt Dimension $1$ und zeigt damit den -Hohlraum an. -\end{beispiel} - -\subsection{Induzierte Abbildung -\label{buch:subsection:induzierte-abbildung}} -Früher haben wurde eine Abbildung $f_*$ zwischen Kettenkomplexen $C_*$ und -$D_*$ so definiert, -dass sie mit den Randoperatoren verträglich sein muss. -Diese Forderung bewirkt, dass sich auch eine lineare Abbildung -\[ -H_k(f) \colon H_k(C) \to H_k(D) -\] -zwischen den Homologiegruppen ergibt, wie wir nun zeigen wollen. - -Um eine Abbildung von $H_k(C)$ nach $H_k(D)$ zu definieren, müssen wir -zu einem Element von $H_k(C)$ ein Bildelement konstruieren. -Ein Element in $H_k(C)$ ist eine Menge von Zyklen in $Z^C_k$, die sich -nur um einen Rand in $B_k$ unterscheiden. -Wir wählen also einen Zyklus $z\in Z_k$ und bilden ihn auf $f_k(z)$ ab. -Wegen $\partial^D_kf(z)=f\partial^C_kz = f(0) =0 $ ist auch $f_k(z)$ -ein Zyklus. -Wir müssen jetzt aber noch zeigen, dass eine andere Wahl des Zyklus -das gleiche Element in $H_k(D)$ ergibt. -Dazu genügt es zu sehen, dass sich $f(z)$ höchstens um einen Rand -ändert, wenn man $z$ um einen Rand ändert. -Sei also $b\in B^C_k$ ein Rand, es gibt also ein $w\in C_{k+1}$ mit -$\partial^C_{k+1}w=b$. -Dann gilt aber auch -\[ -f_k(z+b) -= -f_k(z) + f_k(b) -= -f_k(z) + f_k(\partial^C_{k+1}w) -= -f_k(z) + \partial^D_{k+1}(f_k(w)). -\] -Der letzte Term ist ein Rand in $D_k$, somit ändert sich $f_k(z)$ nur -um diesen Rand, wenn man $z$ um einen Rand ändert. -$f_k(z)$ und $f_k(z+b)$ führen auf die selbe Homologieklasse. - +\input{chapters/95-homologie/homologieketten.tex} +\input{chapters/95-homologie/basiswahl.tex} +\input{chapters/95-homologie/eulerchar.tex} +\input{chapters/95-homologie/induzierteabb.tex} diff --git a/buch/chapters/95-homologie/homologieketten.tex b/buch/chapters/95-homologie/homologieketten.tex new file mode 100644 index 0000000..1b40147 --- /dev/null +++ b/buch/chapters/95-homologie/homologieketten.tex @@ -0,0 +1,286 @@ +% +% homologieketten.tex +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\subsection{Homologie eines Kettenkomplexes +\label{buch:subsection:homologie-eines-kettenkomplexes}} +Wegzusammenhang lässt sich untersuchen, indem man in der Triangulation +nach Linearkombinationen von Kanten sucht, die als Rand die beiden Punkte +haben. +Zwei Punkte sind also nicht verbindbar und liegen damit in verschiedenen +Komponenten, wenn die beiden Punkte nicht Rand irgend einer +Linearkombination von Kanten sind. +Komponenten können also identifiziert werden, indem man unter allen +Linearkombinationen von Punkten, also $C_0$ all diejenigen ignoriert, +die Rand einer Linearkombinationv on Kanten sind, also $\partial_1C_1$. +Der Quotientenraum $H_0=C_0/\partial_1C_1$ enthält also für jede Komponente +eine Dimension. + +Eine Dimension höher könnten wir danach fragen, ob sich ein geschlossener +Weg zusammenziehen lässt. +In der Triangulation zeichnet sich ein geschlossener Weg dadurch aus, +dass jedes Ende einer Kante auch Anfang einer Folgekante ist, dass also +der Rand der Linearkombination von Kanten 0 ist. +Algebraisch bedeutet dies, dass wir uns für diejenigen Linearkombinationen +$z\in C_1$ interessieren, die keinen Rand haben, für die also $\partial_1z=0$ +gilt. + +\begin{definition} +Die Elemente von +\[ +Z_k += +Z_k^C += +\{z\in C_k\;|\; \partial_k z = 0\} += +\ker \partial_k +\] +heissen die {\em ($k$-dimensionalen) Zyklen} von $C_*$. +\end{definition} + +In einem Dreieck ist der Rand ein geschlossener Weg, der sich zusammenziehen +lässt, indem man ihn durch die Dreiecksfläche deformiert. +Entfernt man aber die Dreiecksfläche, ist diese Deformation nicht mehr +möglich. +Einen zusammenziehbaren Weg kann man sich also als den Rand eines Dreiecks +einer vorstellen. +``Löcher'' sind durch geschlossene Wege erkennbar, die nicht Rand eines +Dreiecks sein können. +Wir müssen also ``Ränder'' ignorieren. + +\begin{definition} +Die Elemente von +\[ +B_k += +B_k^C += +\{\partial_{k+1}z\;|\; C_{k+1}\} += +\operatorname{im} \partial_{k+1} +\] +heissen die {\em ($k$-dimensionalen) Ränder} von $C_*$. +\end{definition} + +Algebraisch ausgedrückt interessieren uns also nur Zyklen, die selbst +keine Ränder sind. +Der Quotientenraum $Z_1/B_1$ ignoriert unter den Zyklen diejenigen, die +Ränder sind, drückt also algebraisch die Idee des eindimensionalen +Zusammenhangs aus. +Wir definieren daher + +\begin{definition} +Die $k$-dimensionale Homologiegruppe des Kettenkomplexes $C_*$ ist +\[ +H_k(C) = Z_k/B_k = \ker \partial_k / \operatorname{im} \partial_{k+1}. +\] +Wenn nur von einem Kettenkomplex die Rede ist, kann auch $H_k(C)=H_k$ +abgekürzt werden. +\end{definition} + +% XXX Visualisierung Zyklen/Ränder, Klassen von Zyklen, die sich um einen +% XXX Rand unterscheiden + +Die folgenden zwei ausführlichen Beispiele sollen zeigen, wie die +Homologiegruppe $H_2$ die Anwesenheit eines Hohlraumes detektieren kann, +der entsteht, wenn man aus einem Tetraeder das innere entfernt. + +\begin{beispiel} +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/tetraeder.pdf} +\caption{Triangulation eines Tetraeders, die Orientierung von Kanten +und Seitenflächen ist immer so gewählt, dass die Nummern der Ecken +aufsteigend sind. +\label{buch:homologie:tetraeder:fig}} +\end{figure} +Ein Tetraeder ist ein zweidmensionales Simplex, wir untersuchen seinen +Kettenkomplex und bestimmen die zugehörigen Homologiegruppen. +Zunächst müssen wir die einzelnen Mengen $C_k$ beschreiben und verwenden +dazu die Bezeichnungen gemäss Abbildung~\ref{buch:homologie:tetraeder:fig}. +$C_0$ ist der vierdimensionale Raum aufgespannt von den vier Ecken +$0$, $1$, $2$ und $3$ des Tetraeders. +$C_1$ ist der sechsdimensionale Vektorraum der Kanten +\[ +k_0 = [0,1],\quad +k_1 = [0,2],\quad +k_2 = [0,3],\quad +k_3 = [1,2],\quad +k_4 = [1,3],\quad +k_5 = [2,3] +\] +Der Randoperator $\partial_1$ hat die Matrix +\[ +\partial_1 += +\begin{pmatrix*}[r] +-1&-1&-1& 0& 0& 0\\ + 1& 0& 0&-1&-1& 0\\ + 0& 1& 0& 1& 0&-1\\ + 0& 0& 1& 0& 1& 1 +\end{pmatrix*}. +\] + +Wir erwarten natürlich, dass sich zwei beliebige Ecken verbinden lassen, +dass es also nur eine Komponente gibt und dass damit $H_1=\Bbbk$ ist. +Dazu beachten wir, dass das Bild von $\partial_1$ genau aus den Vektoren +besteht, deren Komponentensumme $0$ ist. +Das Bild $B_0$ von $\partial_1$ ist daher die Lösungsmenge der einen +Gleichung +\( +x_0+x_1+x_2+x_3=0. +\) +Der Quotientenraum $H_0=Z_0/B_0 = C_0/\operatorname{im}\partial_1$ +ist daher wie erwartet eindimensional. + +Wir bestimmen jetzt die Homologiegruppe $H_1$. +Da sich im Tetraeder jeder geschlossene Weg zusammenziehen lässt, +erwarten wir $H_1=0$. + +Die Menge der Zyklen $Z_1$ wird bestimmt, indem man die Lösungsmenge +des Gleichungssystems $\partial_1z=0$ bestimmt. +Der Gauss-Algorithmus für die Matrix $\partial_1$ liefert das +Schlusstableau +\[ +\begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|} +\hline +k_0&k_1&k_2&k_3&k_4&k_5\\ +\hline + 1& 0& 0& -1& -1& 0\\ + 0& 1& 0& 1& 0& -1\\ + 0& 0& 1& 0& 1& 1\\ + 0& 0& 0& 0& 0& 0\\ +\hline +\end{tabular} +\] +Daraus lassen sich drei linear unabhängig eindimensionale Zyklen ablesen, +die zu den Lösungsvektoren +\[ +z_1 += +\begin{pmatrix*}[r] +1\\ +-1\\ +0\\ +1\\ +0\\ +0 +\end{pmatrix*}, +\qquad +z_2 += +\begin{pmatrix*}[r] +1\\ +0\\ +-1\\ +0\\ +1\\ +0 +\end{pmatrix*}, +\qquad +z_3 += +\begin{pmatrix*}[r] +0\\ +1\\ +-1\\ +0\\ +0\\ +1 +\end{pmatrix*} +\] +gehören. + +$C_2$ hat die vier Seitenflächen +\[ +f_0=[0,1,2],\quad +f_1=[0,1,3],\quad +f_2=[0,2,3],\quad +f_3=[1,2,3] +\] +als Basis. +Der zweidimensionale Randoperator ist die $6\times 4$-Matrix +\[ +\partial_2 += +\begin{pmatrix*}[r] + 1& 1& 0& 0\\ +-1& 0& 1& 0\\ + 0&-1&-1& 0\\ + 1& 0& 0& 1\\ + 0& 1& 0&-1\\ + 0& 0& 1& 1 +\end{pmatrix*}. +\] +Man kann leicht nachrechnen, dass $\partial_1\partial_2=0$ ist, wie es +für einen Kettenkomplex sein muss. + +Um nachzurechnen, dass die Homologiegruppe $H_1=0$ ist, müssen wir jetzt +nachprüfen, ob jeder Zyklus in $Z_1$ auch Bild der Randabbildung $\partial_2$ +ist. +Die ersten drei Spalten von $\partial_2$ sind genau die drei Zyklen +$z_1$, $z_2$ und $z_3$. +Insbesondere lassen sich alle Zyklen als Ränder darstellen, die +Homologiegruppe $H_1=0$ verschwindet. + +Die Zyklen in $C_2$ sind die Lösungen von $\partial_2z=0$. +Der Gauss-Algorithmus für $\partial_2$ liefert das -Tableau +\[ +\begin{tabular}{|>{$}c<{$}>{$}c<{$}>{$}c<{$}>{$}c<{$}|} +\hline +f_0&f_1&f_2&f_3\\ +\hline +1&0&0& 1\\ +0&1&0&-1\\ +0&0&1& 1\\ +0&0&0& 0\\ +0&0&0& 0\\ +0&0&0& 0\\ +\hline +\end{tabular} +\] +Daraus liest man ab, dass es genau einen Zyklus nämlich +\[ +z += +\begin{pmatrix} +-1\\1\\-1\\1 +\end{pmatrix} +\] +$Z_2$ besteht also aus Vielfachen des Vektors $z$. + +Da es nur ein zweidimensionales Simplex gibt, ist $C_3$ eindimensional. +Die Randabbildung $\partial_3$ hat die Matrix +\[ +\partial_3 += +\begin{pmatrix} +1\\ +-1\\ +1\\ +-1 +\end{pmatrix}. +\] +Die Zyklen $Z_2$ und die Ränder $B_2$ bilden also dieselbe Menge, auch +die Homologie-Gruppe $H_2$ ist $0$. + +Da es keine vierdimensionalen Simplizes gibt, ist $B_3=0$. +Die Zyklen $Z_3$ bestehen aus den Lösungen von $\partial_3w=0$, da +aber $\partial_3$ injektiv ist, ist $Z_3=0$. +Daher ist auch $H_3=0$. +\end{beispiel} + +\begin{beispiel} +Für dieses Beispiel entfernen wir das Innere des Tetraeders, es entsteht +ein Hohlraum. +Am Kettenkomplex der Triangulation ändert sich nur, dass $C_3$ jetzt +nur noch den $0$-Vektor enthält. +Das Bild $B_2=\operatorname{im}\partial_3$ wird damit auch $0$-dimensional, +während es im vorigen Beispiel eindimensional war. +Die einzige Änderung ist also in der Homologiegruppe +$H_2 = Z_2/B_2 = Z_2 / \{0\} \simeq \Bbbk$. +Die Homologiegruppe $H_2$ hat jetzt Dimension $1$ und zeigt damit den +Hohlraum an. +\end{beispiel} diff --git a/buch/chapters/95-homologie/hx.m b/buch/chapters/95-homologie/hx.m new file mode 100644 index 0000000..0003e76 --- /dev/null +++ b/buch/chapters/95-homologie/hx.m @@ -0,0 +1,129 @@ +split_long_rows(0) + +d = [ +#1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 +-1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 1 + 1,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 2 + 0, 1,-1, 0, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 3 + 0, 0, 1,-1, 0, 0, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 4 + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 5 + 0, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 6 + 0, 0, 0, 0, 0, 0,-1, 1, 0, 0, 0, 0, 1, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 7 + 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 1, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 0,-1, 0, 1, 0, 0, 0, 0, 0, 0; # 10 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1, 0,-1, 1, 0, 0, 0, 0; # 11 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 1, 0, 0, 0,-1, 0, 0, 0; # 12 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 0,-1, 1, 0; # 13 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 1, 0,-1; # 14 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1 # 15 +] + +rref(d) + +B = [ +#1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 + 1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1 +]'; + +d*B + +Z = [ +#1 2 3 4 5 6 7 8 9 10 11 12 13 + 1, 0, 0, 0,-1, 0, 1, 0,-1, 0, 1, 0, 0; # 1 + 0, 1, 0, 0, 0, 0, 0, 0,-1, 0, 1, 0, 0; # 2 + 0, 0, 1, 0, 0,-1, 0, 1, 0, 0, 0, 0, 0; # 3 + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 4 + 1, 0, 0, 0,-1, 0, 1, 0,-1, 0, 1, 0, 0; # 5 + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 6 + 0, 1, 0, 0, 1, 0,-1, 0, 0, 0, 0, 0, 0; # 7 + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 8 + 0, 0, 1, 0, 0,-1, 0, 1, 1, 0,-1, 0, 0; # 9 + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 10 + 0, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0; # 11 + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0; # 12 + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0; # 13 + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0; # 14 + 0, 0, 0, 0, 0, 0, 1, 0,-1, 0, 1, 0, 0; # 15 + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0; # 16 + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,-1, 0, 0; # 17 + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0; # 18 + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,-1,-1, 1; # 19 + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0; # 20 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,-1, 1; # 21 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0; # 22 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,-1; # 23 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0; # 24 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0; # 25 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1; # 26 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 # 27 +] + +d * Z + +T = zeros(22, 9); +T(1:9,1:27) = B'; +T(10:22,1:27) = Z'; + +T + +for i = (2:22) + T(i,:) = T(i,:) - T(i,1) * T(1,:); +end +for i = (3:22) + T(i,:) = T(i,:) - T(i,2) * T(2,:); +end +for i = (4:22) + T(i,:) = T(i,:) - T(i,3) * T(3,:); +end +for i = (5:22) + T(i,:) = T(i,:) - T(i,4) * T(4,:); +end + +T + +for i = (15:22) + T(i,:) = T(i,:) - T(i,6) * T(14,:); +end +T +for i = (19:22) + T(i,:) = T(i,:) - T(i,8) * T(18,:); +end +T +for i = (16:22) + T(i,:) = T(i,:) - T(i,10) * T(15,:); +end +T +for i = (6:22) + T(i,:) = T(i,:) - T(i,13) * T(5,:); +end +T +for i = (7:22) + T(i,:) = T(i,:) - T(i,14) * T(6,:); +end +T +for i = (8:22) + T(i,:) = T(i,:) - T(i,19) * T(7,:); +end +T +for i = (9:22) + T(i,:) = T(i,:) - T(i,20) * T(8,:); +end +T +for i = (22:22) + T(i,:) = T(i,:) - T(i,22) * T(21,:); +end +T +for i = (10:22) + T(i,:) = T(i,:) - T(i,25) * T(9,:); +end +# +T diff --git a/buch/chapters/95-homologie/images/Makefile b/buch/chapters/95-homologie/images/Makefile index ac964ff..0a3979e 100644 --- a/buch/chapters/95-homologie/images/Makefile +++ b/buch/chapters/95-homologie/images/Makefile @@ -3,7 +3,9 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: dreieck.pdf polyeder.pdf +all: complexbasis.pdf homocycles.pdf homoboundaries.pdf homoclasses.pdf \ + gausshomoex.pdf gausshomobasis.pdf dreieck.pdf polyeder.pdf \ + approximation.pdf tetraeder.pdf dreieck.pdf: dreieck.tex pdflatex dreieck.tex @@ -11,3 +13,34 @@ dreieck.pdf: dreieck.tex polyeder.pdf: polyeder.tex pdflatex polyeder.tex +gausshomobasis.pdf: gausshomobasis.tex + pdflatex gausshomobasis.tex + +gausshomoex.pdf: gausshomoex.tex + pdflatex gausshomoex.tex + +homocycles.pdf: homocycles.tex + pdflatex homocycles.tex + +homoboundaries.pdf: homoboundaries.tex + pdflatex homoboundaries.tex + +homoclasses.pdf: homoclasses.tex + pdflatex homoclasses.tex + +complexbasis.pdf: complexbasis.tex + pdflatex complexbasis.tex + +approximation.pdf: approximation.tex approx.tex + pdflatex approximation.tex + +approx.tex: approx.m + octave approx.m + +tetraeder.png: tetraeder.pov + povray +A0.1 -W1920 -H1080 -O$@ $< +tetraeder.jpg: tetraeder.png Makefile + convert -extract 1080x1080+520 tetraeder.png tetraeder.jpg +tetraeder.pdf: tetraeder.tex tetraeder.jpg + pdflatex tetraeder.tex + diff --git a/buch/chapters/95-homologie/images/approx.m b/buch/chapters/95-homologie/images/approx.m new file mode 100644 index 0000000..0db41c2 --- /dev/null +++ b/buch/chapters/95-homologie/images/approx.m @@ -0,0 +1,77 @@ +# +# approx.m +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +x = zeros(7,7); +y = zeros(7,7); + +s = 1.05; + +for i = (1:7) + winkel = (i-1) * 8.333333 + 20; + for j = (1:7) + radius = (j-1) * 0.5 + 3; + x(i,j) = 1.05 * radius * cosd(winkel); + y(i,j) = 1.05 * radius * sind(winkel); + endfor +endfor + +X = x; +Y = y; +for i = (1:7) + for j = (1:7) + X(i,j) = round(2 * x(i,j)) / 2; + Y(i,j) = round(2 * y(i,j)) / 2; + endfor +endfor + +fn = fopen("approx.tex", "w"); + + +for i = (1:6) + for j = (1:6) + winkel = (i-1+0.6666) * 8.33333 + 20; + radius = (j-1+0.3333) * 0.5 + 3; + fprintf(fn, "\\definecolor{mycolor}{rgb}{%.2f,%.2f,%.2f};\n", + (winkel - 20) / 50, 0.8, (radius-3)/3); + fprintf(fn, "\\fill[color=mycolor] (%.3f,%.3f) -- (%.3f,%.3f) -- (%.3f,%.3f) -- cycle;\n", + X(i,j), Y(i,j), + X(i+1,j+1), Y(i+1,j+1), + X(i+1,j), Y(i+1,j)); + winkel = (i-1+0.3333) * 8.33333 + 20; + radius = (j-1+0.6666) * 0.5 + 3; + fprintf(fn, "\\definecolor{mycolor}{rgb}{%.2f,%.2f,%.2f};\n", + (winkel - 20) / 50, 0.8, (radius-3)/3); + fprintf(fn, "\\fill[color=mycolor] (%.3f,%.3f) -- (%.3f,%.3f) -- (%.3f,%.3f) -- cycle;\n", + X(i,j), Y(i,j), + X(i,j+1), Y(i,j+1), + X(i+1,j+1), Y(i+1,j+1)); + endfor +endfor + +linewidth = 0.4; + +fprintf(fn, "\\gitter\n"); + +for i = (1:7) + for j = (1:6) + fprintf(fn, "\\draw[color=darkred,line width=%.1fpt] (%.3f,%.3f) -- (%.3f,%.3f);\n", linewidth, + X(i,j), Y(i,j), X(i,j+1), Y(i,j+1)); + endfor +endfor +for i = (1:6) + for j = (1:7) + fprintf(fn, "\\draw[color=darkred,line width=%.1fpt] (%.3f,%.3f) -- (%.3f,%.3f);\n", linewidth, + X(i,j), Y(i,j), X(i+1,j), Y(i+1,j)); + endfor +endfor +for i = (1:6) + for j = (1:6) + fprintf(fn, "\\draw[color=darkred,line width=%.1fpt] (%.3f,%.3f) -- (%.3f,%.3f);\n", linewidth, + X(i,j), Y(i,j), X(i+1,j+1), Y(i+1,j+1)); + endfor +endfor + +fclose(fn) + diff --git a/buch/chapters/95-homologie/images/approximation.pdf b/buch/chapters/95-homologie/images/approximation.pdf Binary files differnew file mode 100644 index 0000000..8bdd2e7 --- /dev/null +++ b/buch/chapters/95-homologie/images/approximation.pdf diff --git a/buch/chapters/95-homologie/images/approximation.tex b/buch/chapters/95-homologie/images/approximation.tex new file mode 100644 index 0000000..042f0e2 --- /dev/null +++ b/buch/chapters/95-homologie/images/approximation.tex @@ -0,0 +1,69 @@ +% +% approximation.tex -- Approximation einer Abbildung durch eine simpliziale +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1.3} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\definecolor{darkred}{rgb}{0.8,0,0} +\definecolor{darkred}{rgb}{0,0,0} + +\def\gitter{ + \foreach \x in {1,1.5,...,6}{ + \draw[color=gray] (\x,1) -- (\x,6); + \draw[color=gray] (1,\x) -- (6,\x); + } +} + +\def\s{1.05} + +\def\colorsector{ + \foreach \r in {3,3.2,...,5.8}{ + \foreach \a in {20,...,69}{ + \pgfmathparse{(\a-20)/50} + \xdef\rot{\pgfmathresult} + \pgfmathparse{(\r-3)/3} + \xdef\blau{\pgfmathresult} + \definecolor{mycolor}{rgb}{\rot,0.8,\blau} + \fill[color=mycolor] + (\a:{\s*\r}) -- (\a:{\s*(\r+0.2)}) -- ({\a+1}:{\s*(\r+0.2)}) -- ({\a+1}:{\s*\r}) -- cycle; + } + } +} + +\begin{scope}[xshift=0cm] +\colorsector +\gitter +\foreach \r in {3,3.5,...,6.0}{ + \draw[color=black,line width=0.4pt] (20:{\s*\r}) arc (20:70:{\s*\r}); +} +\foreach \a in {20,28.3333,...,70}{ + \draw[color=black,line width=0.4pt] (\a:{\s*3}) -- (\a:{\s*6}); +} +\begin{scope} +\clip (20:{\s*3}) -- (20:{\s*6}) arc (20:70:{\s*6}) -- (70:{\s*3}); +\foreach \a in {-5,...,5}{ + \draw[color=black,line width=0.4pt] + plot[domain={20+8.33333*\a}:{70+8.3333*\a},samples=100] + (\x:{\s*(3+3*(\x-(20+8.3333*\a))/50)}); +} +\end{scope} + +\end{scope} + +\begin{scope}[xshift=5.5cm] +\input{approx.tex} +\end{scope} + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/complexbasis.pdf b/buch/chapters/95-homologie/images/complexbasis.pdf Binary files differnew file mode 100644 index 0000000..9ff6709 --- /dev/null +++ b/buch/chapters/95-homologie/images/complexbasis.pdf diff --git a/buch/chapters/95-homologie/images/complexbasis.tex b/buch/chapters/95-homologie/images/complexbasis.tex new file mode 100644 index 0000000..bab89d2 --- /dev/null +++ b/buch/chapters/95-homologie/images/complexbasis.tex @@ -0,0 +1,158 @@ +% +% complexbasis.tex -- template for standalon tikz images +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\usetikzlibrary{decorations.pathreplacing} +\begin{document} +\def\skala{1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\definecolor{darkgreen}{rgb}{0,0.6,0} + +\def\s{0.5} +\def\h{0.02} + +\def\rechteck#1#2#3{ + \fill[color=#3!20,rounded corners=2pt] + ({-\s+\h},{(2*(#1)-1)*\s+\h}) + rectangle + ({\s-\h},{(2*(#2)+1)*\s-\h}); + \draw[color=#3,rounded corners=2pt] + ({-\s+\h},{(2*(#1)-1)*\s+\h}) + rectangle + ({\s-\h},{(2*(#2)+1)*\s-\h}); + \foreach \y in {{#1},...,{#2}}{ + \fill[color=#3] (0,{2*\y*\s}) circle[radius=0.05]; + } +} +\def\Rechteck#1#2{ + \draw[rounded corners=3pt] + ({-\s-\h},{(2*(#1)-1)*\s-\h}) + rectangle + ({\s+\h},{(2*(#2)+1)*\s+\h}); +} + +\def\abbildung#1#2#3#4{ + \fill[color=gray!20] + ({\s+\h},{(2*(#1)+1)*\s}) + -- + ({3.5-\s-\h},{-\s}) + -- + ({3.5-\s-\h},{(2*(#3)+1)*\s}) + -- + ({\s+\h},{(2*(#1)+1)*\s}) + -- + cycle; + \fill[color=gray!40] + ({\s+\h},{(2*(#1+1)-1)*\s}) + -- + ({3.5-\s-\h},{(2*(#3+1)-1)*\s}) + -- + ({3.5-\s-\h},{(2*(#4)+1)*\s}) + -- + ({\s+\h},{(2*(#2)+1)*\s}) + -- + cycle; + \draw[<-,color=gray] + ({\s+\h},{(2*(#1+1)-1)*\s}) + -- + ({3.5-\s-\h},{(2*(#3+1)-1)*\s}); + \draw[->,color=gray] + ({3.5-\s-\h},{(2*(#4)+1)*\s}) + -- + ({\s+\h},{(2*(#2)+1)*\s}); + \draw[<-,color=gray!40] + ({\s+\h},{(2*(#1)+1)*\s}) + -- + ({3.5-\s-\h},{-\s}); +} + +\clip ({-3.5-1.7},-1.2) rectangle ({7+1.7},11.7); + +\begin{scope}[xshift=-7cm] + \abbildung{6}{7}{10}{11} +\end{scope} + +\begin{scope}[xshift=-3.5cm] + \abbildung{6}{10}{7}{11} + \rechteck{0}{6}{red} + \rechteck{7}{10}{darkgreen} + \rechteck{11}{11}{blue} + \Rechteck{0}{11} + \node[color=darkgreen] at ({0},{(9*2-1)*\s}) {$B_{k-2\mathstrut}$}; + \node at (1.75,{9*2*\s}) {$\Delta_{k-1}$}; + \node at (1.75,{-\s}) [above] {$\partial_{k-1\mathstrut}$}; + \draw[decorate,decoration={brace,amplitude=4pt}] + ({-\s-0.1},{-\s}) -- ({-\s-0.1},{(2*10+1)*\s}); + \node at ({-\s-0.17},{10*\s}) [left] {$Z_{k-2\mathstrut}$}; + \node at (0,{-\s}) [below] {$C_{k-2\mathstrut}$}; +\end{scope} + +\begin{scope} + \abbildung{2}{7}{5}{10} + \rechteck{8}{11}{blue} + \rechteck{3}{7}{darkgreen} + \rechteck{0}{2}{red} + \Rechteck{0}{11} + \node at (0,{-\s}) [below] {$C_{k-1\mathstrut}$}; + \node[color=darkgreen] at ({0},{(5*2-1)*\s}) {$B_{k-1\mathstrut}$}; + \node at (1.75,{6.5*2*\s}) {$\Delta_k$}; + \node at (1.75,{-\s}) [above] {$\partial_{k\mathstrut}$}; + \draw[decorate,decoration={brace,amplitude=4pt}] + ({-\s-0.1},{-\s}) -- ({-\s-0.1},{(2*7+1)*\s}); + \node at ({-\s-0.17},{7*\s}) [left] {$Z_{k-1\mathstrut}$}; +\end{scope} + +\begin{scope}[xshift=3.5cm] + \abbildung{3}{5}{5}{7} + \rechteck{6}{10}{blue} + \rechteck{4}{5}{darkgreen} + \rechteck{0}{3}{red} + \Rechteck{0}{10} + \node at (0,{-\s}) [below] {$C_{k\mathstrut}$}; + \node[color=darkgreen] at ({-0.25},{9*\s}) + {$B_{k\mathstrut}$}; + \node[color=darkgreen] at (0.24,{2*4*\s}) {$b_1$}; + \node[color=darkgreen] at (0.24,{2*4.5*\s+0.1}) {$\vdots$}; + \node[color=darkgreen] at (0.24,{2*5*\s}) {$b_r$}; + \node[color=red] at (0.24,{2*0*\s}) {$z_1$}; + \node[color=red] at (0.24,{2*1*\s}) {$z_2$}; + \node[color=red] at (0.24,{2*2*\s+0.1}) {$\vdots$}; + \node[color=red] at (0.24,{2*3*\s}) {$z_l$}; + \node[color=blue] at (0.24,{2*6*\s}) {$c_1$}; + \node[color=blue] at (0.24,{2*7*\s}) {$c_2$}; + \node[color=blue] at (0.24,{2*8*\s}) {$c_3$}; + \node[color=blue] at (0.24,{2*9*\s}) {$\vdots$}; + \node[color=blue] at (0.24,{2*10*\s}) {$c_s$}; + \node at (1.75,{5.5*2*\s}) {$\Delta_{k+1}$}; + \node at (1.75,{-\s}) [above] {$\partial_{k+1\mathstrut}$}; + \draw[decorate,decoration={brace,amplitude=4pt}] + ({-\s-0.1},{-\s}) -- ({-\s-0.1},{(2*5+1)*\s}); + \node at ({-\s-0.17},{5*\s}) [left] {$Z_{k\mathstrut}$}; +\end{scope} + +\begin{scope}[xshift=7cm] + \abbildung{0}{5}{4}{8} + \rechteck{5}{7}{blue} + \rechteck{1}{5}{darkgreen} + \rechteck{0}{0}{red} + \Rechteck{0}{7} + \node at (0,{-\s}) [below] {$C_{k+1\mathstrut}$}; + \node[color=darkgreen] at ({0},{(2.0*2+1)*\s}) + {$B_{k+1\mathstrut}$}; + \draw[decorate,decoration={brace,amplitude=4pt}] + ({-\s-0.1},{-\s}) -- ({-\s-0.1},{(2*5+1)*\s}); + \node at ({-\s-0.17},{5*\s}) [left] {$Z_{k+1\mathstrut}$}; +\end{scope} + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/gausshomobasis.pdf b/buch/chapters/95-homologie/images/gausshomobasis.pdf Binary files differnew file mode 100644 index 0000000..07414bb --- /dev/null +++ b/buch/chapters/95-homologie/images/gausshomobasis.pdf diff --git a/buch/chapters/95-homologie/images/gausshomobasis.tex b/buch/chapters/95-homologie/images/gausshomobasis.tex new file mode 100644 index 0000000..ba21f54 --- /dev/null +++ b/buch/chapters/95-homologie/images/gausshomobasis.tex @@ -0,0 +1,109 @@ +% +% gaushomobasis.tex -- Bestimmung einer Basis der Homologiegruppen +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1} +\definecolor{darkgreen}{rgb}{0,0.6,0} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\def\s{0.5} +\def\inset{0.05} +\def\w{8} + +\def\zeile#1#2{ + \fill[color=#2] ({0+\inset},{(12-#1)*\s+\inset}) + rectangle ({\w*\s-\inset},{(13-#1)*\s-\inset}); +} +\def\marke#1#2{ +\node at ({0.5*\w*\s},{12.5-#1)*\s}) {$#2\mathstrut$}; +} + +\def\gauss{ +\draw (0,0) rectangle ({\w*\s},{12*\s}); +\draw (0,{7*\s}) -- ({\w*\s},{7*\s}); +} + +\draw[->,color=red,line width=1pt] ({0.1*\s},{(12.5-1)*\s}) + to[out=180,in=90] (-3.6,-2); +\draw[->,color=red,line width=1pt] ({0.1*\s},{(12.5-2)*\s}) + to[out=180,in=90] (-2.2,-2); +\draw[->,color=red,line width=1pt] ({0.1*\s},{(12.5-4)*\s}) + to[out=180,in=90] (-0.7,-2); + +\draw[->,color=darkgreen,line width=1pt] ({0.1*\s},{(12.5-7)*\s}) + to[out=180,in=90] (0.9,-2); +\draw[->,color=darkgreen,line width=1pt] ({0.1*\s},{(12.5-8)*\s}) + to[out=180,in=90] (1.6,-2); +\draw[->,color=darkgreen,line width=1pt] ({(\w-0.1)*\s},{(12.5-12)*\s}) + to[out=0,in=90] (2.6,-2); + +\draw[->,line width=2pt] ({\w*\s+0.1},{6*\s}) -- (5.4,{6*\s}); +\node at ({0.5*(\w*\s+5.5)},{6*\s}) [above] {Gauss}; + +\begin{scope} +\zeile{1}{red!30} +\zeile{2}{red!30} +\zeile{4}{red!30} +\zeile{7}{darkgreen!30} +\zeile{8}{darkgreen!30} +%\zeile{10}{darkgreen!30} +\zeile{12}{darkgreen!30} +\marke{1}{\scriptstyle\partial_{k+1}e_1^{(k+1)}} +\marke{2}{\scriptstyle\partial_{k+1}e_2^{(k+1)}} +\marke{3}{\scriptstyle\partial_{k+1}e_3^{(k+1)}} +\marke{4}{\vdots} +\marke{5}{\scriptstyle\partial_{k+1}e_{n_{k+1}}^{(k+1)}} +\marke{6}{\scriptstyle z_1^{(k)}} +\marke{7}{\scriptstyle z_2^{(k)}} +\marke{8}{\scriptstyle z_3^{(k)}} +\marke{9}{\scriptstyle z_4^{(k)}} +\marke{10}{\vdots} +\marke{11}{\scriptstyle z_{l-1}^{(k)}} +\marke{12}{\scriptstyle z_{l}^{(k)}} +\gauss +\end{scope} + +\begin{scope}[xshift=5.5cm] +\zeile{1}{black!20} +\zeile{2}{black!20} +\zeile{3}{black} +\marke{3}{\color{white}0} +\zeile{4}{black!20} +\zeile{5}{black} +\marke{5}{\color{white}0} +\zeile{6}{black} +\marke{6}{\color{white}0} +\zeile{7}{black!20} +\zeile{8}{black!20} +\zeile{9}{black} +\marke{9}{\color{white}0} +\zeile{10}{black} +\marke{10}{\color{white}0} +\zeile{11}{black} +\marke{11}{\color{white}0} +\zeile{12}{black!20} +\gauss +\end{scope} + +\node at (-4.4,-2) [below right] {$\{ +{\color{red}\partial_{k+1}e_1^{(k+1)}}, +{\color{red}\partial_{k+1}e_2^{(k+1)}}, +{\color{red}\partial_{k+1}e_{i_3}^{(k+1)}},\dots, +{\color{darkgreen}z_2^{(k)}}, +{\color{darkgreen}z_3^{(k)}}, +\dots +{\color{darkgreen}z_l^{(k)}} +\} = {\color{red}\mathcal{B}_k} \cup {\color{darkgreen}\mathcal{Z}_k'}$}; + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/gausshomoex.pdf b/buch/chapters/95-homologie/images/gausshomoex.pdf Binary files differnew file mode 100644 index 0000000..bc0b766 --- /dev/null +++ b/buch/chapters/95-homologie/images/gausshomoex.pdf diff --git a/buch/chapters/95-homologie/images/gausshomoex.tex b/buch/chapters/95-homologie/images/gausshomoex.tex new file mode 100644 index 0000000..df53f70 --- /dev/null +++ b/buch/chapters/95-homologie/images/gausshomoex.tex @@ -0,0 +1,120 @@ +% +% gausshomoex.tex -- Beispiel für die Bestimmung einer Basis von H_1 +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\def\s{2.0} + +\def\punkt#1#2{({((#1)+0.5*(#2))*\s},{(#2)*\s*sqrt(3)/2})} + +\def\knoten#1#2#3{ + \fill[color=white] \punkt{#1}{#2} circle[radius=0.3]; + \node at \punkt{#1}{#2} {$#3$\strut}; + \draw \punkt{#1}{#2} circle[radius=0.3]; +} +\def\dreieck#1#2#3{ + \fill[color=gray] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1}{(#2)+1} -- cycle; + \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; + \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] + \punkt{#1}{#2} -- \punkt{#1+1}{#2}; + \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] + \punkt{#1+1}{#2} -- \punkt{#1}{#2+1}; + \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] + \punkt{#1}{#2+1} -- \punkt{#1}{#2}; +} + +\def\Dreieck#1#2#3{ + \fill[color=gray!50] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1+1}{(#2)-1} -- cycle; + \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; +} + +\def\kante#1#2#3{ + \fill[color=white,opacity=0.8] \punkt{#1}{#2} circle[radius=0.15]; + \node at \punkt{#1}{#2} {$\scriptstyle #3$}; +} + +\dreieck{0}{0}{1} +\dreieck{1}{0}{2} +\dreieck{2}{0}{3} +\dreieck{3}{0}{4} + +\dreieck{0}{1}{5} +\dreieck{2}{1}{6} + +\dreieck{0}{2}{7} +\dreieck{1}{2}{8} + +\dreieck{0}{3}{9} + + +\knoten{0}{0}{1} +\knoten{1}{0}{2} +\knoten{2}{0}{3} +\knoten{3}{0}{4} +\knoten{4}{0}{5} + +\knoten{0}{1}{6} +\knoten{1}{1}{7} +\knoten{2}{1}{8} +\knoten{3}{1}{9} + +\knoten{0}{2}{10} +\knoten{1}{2}{11} +\knoten{2}{2}{12} + +\knoten{0}{3}{13} +\knoten{1}{3}{14} + +\knoten{0}{4}{15} + +\kante{0.5}{0}{1} +\kante{1.5}{0}{2} +\kante{2.5}{0}{3} +\kante{3.5}{0}{4} + +\kante{0}{0.5}{5} +\kante{0.5}{0.5}{6} +\kante{1}{0.5}{7} +\kante{1.5}{0.5}{8} +\kante{2}{0.5}{9} +\kante{2.5}{0.5}{10} +\kante{3}{0.5}{11} +\kante{3.5}{0.5}{12} + +\kante{0.5}{1}{13} +\kante{2.5}{1}{14} + +\kante{0}{1.5}{15} +\kante{0.5}{1.5}{16} +\kante{2}{1.5}{17} +\kante{2.5}{1.5}{18} + +\kante{0.5}{2}{19} +\kante{1.5}{2}{20} + +\kante{0}{2.5}{21} +\kante{0.5}{2.5}{22} +\kante{1}{2.5}{23} +\kante{1.5}{2.5}{24} + +\kante{0.5}{3}{25} + +\kante{0}{3.5}{26} +\kante{0.5}{3.5}{27} + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/homoboundaries.pdf b/buch/chapters/95-homologie/images/homoboundaries.pdf Binary files differnew file mode 100644 index 0000000..fb94ec8 --- /dev/null +++ b/buch/chapters/95-homologie/images/homoboundaries.pdf diff --git a/buch/chapters/95-homologie/images/homoboundaries.tex b/buch/chapters/95-homologie/images/homoboundaries.tex new file mode 100644 index 0000000..53087fa --- /dev/null +++ b/buch/chapters/95-homologie/images/homoboundaries.tex @@ -0,0 +1,115 @@ +% +% tikztemplate.tex -- template for standalon tikz images +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\def\s{0.55} + +\def\punkt#1#2{({((#1)+0.5*(#2))*\s},{(#2)*\s*sqrt(3)/2})} +\def\A{\punkt{0}{0}} +\def\B{\punkt{1}{0}} +\def\C{\punkt{2}{0}} +\def\D{\punkt{3}{0}} +\def\E{\punkt{4}{0}} +\def\F{\punkt{0}{1}} +\def\G{\punkt{1}{1}} +\def\H{\punkt{2}{1}} +\def\I{\punkt{3}{1}} +\def\J{\punkt{0}{2}} +\def\K{\punkt{1}{2}} +\def\L{\punkt{2}{2}} +\def\M{\punkt{0}{3}} +\def\N{\punkt{1}{3}} +\def\O{\punkt{0}{4}} + +\def\dreieck#1#2#3{ + \fill[color=gray] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1}{(#2)+1} -- cycle; +} + +\def\blau#1#2{ + \draw[color=blue] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1}{(#2)+1} -- cycle; + \draw[->,color=blue] \punkt{#1}{#2} -- \punkt{#1+1}{#2}; +} + +\def\gebiet{ + \dreieck{0}{0}{1} + \dreieck{1}{0}{2} + \dreieck{2}{0}{3} + \dreieck{3}{0}{4} + \dreieck{0}{1}{5} + \dreieck{2}{1}{6} + \dreieck{0}{2}{7} + \dreieck{1}{2}{8} + \dreieck{0}{3}{9} +} + +\begin{scope} +\gebiet +\blau{0}{0} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_1^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=3cm] +\gebiet +\blau{1}{0} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_2^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=6cm] +\gebiet +\blau{2}{0} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_3^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=9cm] +\gebiet +\blau{3}{0} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_4^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=1.5cm,yshift=2.59cm] +\gebiet +\blau{0}{1} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_5^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=7.5cm,yshift=2.59cm] +\gebiet +\blau{2}{1} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_6^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=3cm,yshift=5.19cm] +\gebiet +\blau{0}{2} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_7^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=6cm,yshift=5.19cm] +\gebiet +\blau{1}{2} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_8^{(2)}$}; +\end{scope} + +\begin{scope}[xshift=4.5cm,yshift=7.79cm] +\gebiet +\blau{0}{3} +\node[color=blue] at ({2*\s},-0.5) {$\partial_2e_9^{(2)}$}; +\end{scope} + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/homoclasses.pdf b/buch/chapters/95-homologie/images/homoclasses.pdf Binary files differnew file mode 100644 index 0000000..fbbaedd --- /dev/null +++ b/buch/chapters/95-homologie/images/homoclasses.pdf diff --git a/buch/chapters/95-homologie/images/homoclasses.tex b/buch/chapters/95-homologie/images/homoclasses.tex new file mode 100644 index 0000000..4467f08 --- /dev/null +++ b/buch/chapters/95-homologie/images/homoclasses.tex @@ -0,0 +1,109 @@ +% +% homoclasses.tex -- template for standalon tikz images +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1.4} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\definecolor{darkgreen}{rgb}{0,0.6,0} +\def\s{0.4} +\def\h{-0.3} + +\def\punkt#1#2{({((#1)+0.5*(#2))*\s},{(#2)*\s*sqrt(3)/2})} +\def\A{\punkt{0}{0}} +\def\B{\punkt{1}{0}} +\def\C{\punkt{2}{0}} +\def\D{\punkt{3}{0}} +\def\E{\punkt{4}{0}} +\def\F{\punkt{0}{1}} +\def\G{\punkt{1}{1}} +\def\H{\punkt{2}{1}} +\def\I{\punkt{3}{1}} +\def\J{\punkt{0}{2}} +\def\K{\punkt{1}{2}} +\def\L{\punkt{2}{2}} +\def\M{\punkt{0}{3}} +\def\N{\punkt{1}{3}} +\def\O{\punkt{0}{4}} + +%\def\knoten#1#2#3{ +% \fill[color=white] \punkt{#1}{#2} circle[radius=0.3]; +% \node at \punkt{#1}{#2} {$#3$\strut}; +% \draw \punkt{#1}{#2} circle[radius=0.3]; +%} +\def\dreieck#1#2#3{ + \fill[color=gray] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1}{(#2)+1} -- cycle; +% \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1}{#2} -- \punkt{#1+1}{#2}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1+1}{#2} -- \punkt{#1}{#2+1}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1}{#2+1} -- \punkt{#1}{#2}; +} + +%\def\Dreieck#1#2#3{ +% \fill[color=gray!50] \punkt{#1}{#2} -- \punkt{#1+1}{#2} +% -- \punkt{#1+1}{(#2)-1} -- cycle; +% \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; +%} + +%\def\kante#1#2#3{ +% \fill[color=white,opacity=0.8] \punkt{#1}{#2} circle[radius=0.15]; +% \node at \punkt{#1}{#2} {$\scriptstyle #3$}; +%} + +\def\gebiet{ + \dreieck{0}{0}{1} + \dreieck{1}{0}{2} + \dreieck{2}{0}{3} + \dreieck{3}{0}{4} + \dreieck{0}{1}{5} + \dreieck{2}{1}{6} + \dreieck{0}{2}{7} + \dreieck{1}{2}{8} + \dreieck{0}{3}{9} +} + +\begin{scope} +\gebiet +\draw[color=darkgreen] \B -- \G -- \J -- \F -- cycle; +\draw[->,color=darkgreen] \B -- \G; +\node[color=darkgreen] at ({2*\s},{\h}) {$z_5'$}; +\end{scope} + +\begin{scope}[xshift=2cm] +\gebiet +\draw[color=darkgreen] \D -- \I -- \L -- \H -- cycle; +\draw[->,color=darkgreen] \D -- \I; +\node[color=darkgreen] at ({2*\s},{\h}) {$z_6'$}; +\end{scope} + +\begin{scope}[xshift=4cm] +\gebiet +\draw[color=darkgreen] \C -- \L -- \N -- \K -- \M -- \J -- cycle; +\draw[->,color=darkgreen] \C -- \L; +\node[color=darkgreen] at ({2*\s},{\h}) {$z_9'$}; +\end{scope} + +\begin{scope}[xshift=6cm] +\gebiet +\draw[color=darkgreen] \K -- \N -- \O -- \M -- cycle; +\draw[->,color=darkgreen] \K -- \N; +\node[color=darkgreen] at ({2*\s},{\h}) {$z_{12}'$}; +\end{scope} + + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/homocycles.pdf b/buch/chapters/95-homologie/images/homocycles.pdf Binary files differnew file mode 100644 index 0000000..b68519e --- /dev/null +++ b/buch/chapters/95-homologie/images/homocycles.pdf diff --git a/buch/chapters/95-homologie/images/homocycles.tex b/buch/chapters/95-homologie/images/homocycles.tex new file mode 100644 index 0000000..8f20a0c --- /dev/null +++ b/buch/chapters/95-homologie/images/homocycles.tex @@ -0,0 +1,170 @@ +% +% tikztemplate.tex -- template for standalon tikz images +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\begin{document} +\def\skala{1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\def\s{0.4} + +\def\punkt#1#2{({((#1)+0.5*(#2))*\s},{(#2)*\s*sqrt(3)/2})} +\def\A{\punkt{0}{0}} +\def\B{\punkt{1}{0}} +\def\C{\punkt{2}{0}} +\def\D{\punkt{3}{0}} +\def\E{\punkt{4}{0}} +\def\F{\punkt{0}{1}} +\def\G{\punkt{1}{1}} +\def\H{\punkt{2}{1}} +\def\I{\punkt{3}{1}} +\def\J{\punkt{0}{2}} +\def\K{\punkt{1}{2}} +\def\L{\punkt{2}{2}} +\def\M{\punkt{0}{3}} +\def\N{\punkt{1}{3}} +\def\O{\punkt{0}{4}} + +%\def\knoten#1#2#3{ +% \fill[color=white] \punkt{#1}{#2} circle[radius=0.3]; +% \node at \punkt{#1}{#2} {$#3$\strut}; +% \draw \punkt{#1}{#2} circle[radius=0.3]; +%} +\def\dreieck#1#2#3{ + \fill[color=gray] \punkt{#1}{#2} -- \punkt{#1+1}{#2} + -- \punkt{#1}{(#2)+1} -- cycle; +% \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1}{#2} -- \punkt{#1+1}{#2}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1+1}{#2} -- \punkt{#1}{#2+1}; +% \draw[->,line width=1pt,shorten >= 0.3cm,shorten <= 0.3cm] +% \punkt{#1}{#2+1} -- \punkt{#1}{#2}; +} + +%\def\Dreieck#1#2#3{ +% \fill[color=gray!50] \punkt{#1}{#2} -- \punkt{#1+1}{#2} +% -- \punkt{#1+1}{(#2)-1} -- cycle; +% \node at \punkt{#1+0.3333}{#2+0.3333} {$#3$\strut}; +%} + +%\def\kante#1#2#3{ +% \fill[color=white,opacity=0.8] \punkt{#1}{#2} circle[radius=0.15]; +% \node at \punkt{#1}{#2} {$\scriptstyle #3$}; +%} + +\def\gebiet{ + \dreieck{0}{0}{1} + \dreieck{1}{0}{2} + \dreieck{2}{0}{3} + \dreieck{3}{0}{4} + \dreieck{0}{1}{5} + \dreieck{2}{1}{6} + \dreieck{0}{2}{7} + \dreieck{1}{2}{8} + \dreieck{0}{3}{9} +} + +\begin{scope} +\gebiet +\draw[->,color=red] \A -- \B -- \F -- cycle; +\draw[->,color=red] \A -- \B; +\node[color=red] at ({2*\s},-0.5) {$z_1$}; +\end{scope} + +\begin{scope}[xshift=2cm] +\gebiet +\draw[color=red] \B -- \C -- \G -- cycle; +\draw[->,color=red] \B -- \C; +\node[color=red] at ({2*\s},-0.5) {$z_2$}; +\end{scope} + +\begin{scope}[xshift=4cm] +\gebiet +\draw[color=red] \C -- \D -- \H -- cycle; +\draw[->,color=red] \C -- \D; +\node[color=red] at ({2*\s},-0.5) {$z_3$}; +\end{scope} + +\begin{scope}[xshift=6cm] +\gebiet +\draw[color=red] \D -- \E -- \I -- cycle; +\draw[->,color=red] \D -- \E; +\node[color=red] at ({2*\s},-0.5) {$z_4$}; +\end{scope} + +\begin{scope}[xshift=8cm] +\gebiet +\draw[color=red] \A -- \B -- \G -- \F -- cycle; +\draw[<-,color=red] \A -- \B; +\node[color=red] at ({2*\s},-0.5) {$z_5$}; +\end{scope} + +\begin{scope}[xshift=10cm] +\gebiet +\draw[color=red] \C -- \D -- \I -- \H -- cycle; +\draw[<-,color=red] \C -- \D; +\node[color=red] at ({2*\s},-0.5) {$z_6$}; +\end{scope} + +\begin{scope}[xshift=12cm] +\gebiet +\draw[color=red] \A -- \B -- \G -- \J -- \F -- cycle; +\draw[->,color=red] \A -- \B; +\node[color=red] at ({2*\s},-0.5) {$z_7$}; +\end{scope} + +\begin{scope}[xshift=0cm,yshift=-3cm] +\gebiet +\draw[color=red] \C -- \D -- \I -- \L -- \H -- cycle; +\draw[->,color=red] \C -- \D; +\node[color=red] at ({2*\s},-0.5) {$z_8$}; +\end{scope} + +\begin{scope}[xshift=2cm,yshift=-3cm] +\gebiet +\draw[color=red] \A -- \B -- \C -- \H -- \L -- \K -- \J -- \F -- cycle; +\draw[<-,color=red] \A -- \B; +\node[color=red] at ({2*\s},-0.5) {$z_9$}; +\end{scope} + +\begin{scope}[xshift=4cm,yshift=-3cm] +\gebiet +\draw[color=red] \J -- \K -- \M -- cycle; +\draw[->,color=red] \J -- \K; +\node[color=red] at ({2*\s},-0.5) {$z_{10}$}; +\end{scope} + +\begin{scope}[xshift=6cm,yshift=-3cm] +\gebiet +\draw[color=red] \A -- \B -- \C -- \H -- \L -- \N -- \K -- \J -- \F -- cycle; +\draw[->,color=red] \A -- \B; +\node[color=red] at ({2*\s},-0.5) {$z_{11}$}; +\end{scope} + +\begin{scope}[xshift=8cm,yshift=-3cm] +\gebiet +\draw[color=red] \J -- \K -- \N -- \M -- cycle; +\draw[<-,color=red] \J -- \K; +\node[color=red] at ({2*\s},-0.5) {$z_{12}$}; +\end{scope} + +\begin{scope}[xshift=10cm,yshift=-3cm] +\gebiet +\draw[color=red] \J -- \K -- \N -- \O -- \M -- cycle; +\draw[->,color=red] \J -- \K; +\node[color=red] at ({2*\s},-0.5) {$z_{13}$}; +\end{scope} + + +\end{tikzpicture} +\end{document} + diff --git a/buch/chapters/95-homologie/images/tetraeder.jpg b/buch/chapters/95-homologie/images/tetraeder.jpg Binary files differnew file mode 100644 index 0000000..0ec168b --- /dev/null +++ b/buch/chapters/95-homologie/images/tetraeder.jpg diff --git a/buch/chapters/95-homologie/images/tetraeder.pdf b/buch/chapters/95-homologie/images/tetraeder.pdf Binary files differnew file mode 100644 index 0000000..0a57e95 --- /dev/null +++ b/buch/chapters/95-homologie/images/tetraeder.pdf diff --git a/buch/chapters/95-homologie/images/tetraeder.pov b/buch/chapters/95-homologie/images/tetraeder.pov new file mode 100644 index 0000000..b110f96 --- /dev/null +++ b/buch/chapters/95-homologie/images/tetraeder.pov @@ -0,0 +1,116 @@ +// +// tetraeder.pov +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "colors.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.169; +#declare O = <0, 0, 0>; +#declare at = 0.02; + +camera { + location <-2, 3, -10> + look_at <0, 0.18, 0> + right 16/9 * x * imagescale + up y * imagescale +} + +//light_source { +// <-14, 20, -50> color White +// area_light <1,0,0> <0,0,1>, 10, 10 +// adaptive 1 +// jitter +//} + +light_source { + <-41, 20, -20> color White + area_light <1,0,0> <0,0,1>, 10, 10 + adaptive 1 + jitter +} + +sky_sphere { + pigment { + color rgb<1,1,1> + } +} + +#declare v1 = <1,1,1>; +#declare v2 = <-1,1,-1>; +#declare farbe = rgbf<0.8,0.8,1.0,0.5>; + +#declare tetraederwinkel = acos(vdot(v1,v2)/(vlength(v1)*vlength(v2))); + +#declare O = < 0, 0, 0 >; +#declare A = < 0, 1, 0 >; +#declare B = < sin(tetraederwinkel), cos(tetraederwinkel), 0>; +#declare C = < sin(tetraederwinkel)*cos(2*pi/3), cos(tetraederwinkel), sin(2*pi/3)>; +#declare D = < sin(tetraederwinkel)*cos(2*pi/3), cos(tetraederwinkel), -sin(2*pi/3)>; + +#macro arrow(from, to, arrowthickness, c) +#declare arrowdirection = vnormalize(to - from); +#declare arrowlength = vlength(to - from); +union { + sphere { + from, 1.0 * arrowthickness + } + cylinder { + from, + from + (arrowlength - 8 * arrowthickness) * arrowdirection, + arrowthickness + } + cone { + from + (arrowlength - 8 * arrowthickness) * arrowdirection, + 2 * arrowthickness, + to - 3 * arrowthickness * arrowdirection, + 0 + } + pigment { + color c + } + finish { + specular 0.9 + metallic + } +} +#end + +union { + arrow(B, C, at, White) + arrow(D, C, at, White) + arrow(D, B, at, White) + arrow(B, A, at, White) + arrow(C, A, at, White) + arrow(D, A, at, White) + sphere { A, 4 * at } + sphere { B, 4 * at } + sphere { C, 4 * at } + sphere { D, 4 * at } + pigment { + color White + } + finish { + specular 0.9 + metallic + } +} + +mesh { + triangle { A, B, C } + triangle { A, C, D } + triangle { A, D, B } + triangle { B, C, D } + pigment { + color farbe + } +// finish { +// specular 0.9 +// metallic +// } +} diff --git a/buch/chapters/95-homologie/images/tetraeder.tex b/buch/chapters/95-homologie/images/tetraeder.tex new file mode 100644 index 0000000..e62770f --- /dev/null +++ b/buch/chapters/95-homologie/images/tetraeder.tex @@ -0,0 +1,97 @@ +% +% tetraeder.tex +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{times} +\usepackage{amsmath} +\usepackage{txfonts} +\usepackage[utf8]{inputenc} +\usepackage{graphics} +\usetikzlibrary{arrows,intersections,math,calc} +\usepackage{ifthen} +\begin{document} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{7} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=8cm]{tetraeder.jpg}}; + +% Gitter +\ifthenelse{\boolean{showgrid}}{ +\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe); +\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe); +\draw (-\breite,-\hoehe) grid (\breite, \hoehe); +\fill (0,0) circle[radius=0.05]; +}{} + +\def\knoten#1#2{ + %\fill[color=white,opacity=0.5] #1 circle[radius=0.2]; + \node at #1 {$#2$}; +} + +\knoten{(-2.2,-3.6)}{0}; +\knoten{( 3.3,-1.9)}{1}; +\knoten{(-3.4,-1.2)}{2}; +\knoten{(-0.75,3.6)}{3}; + +\def\s{0.2} + +\def\kante#1#2{ + %\fill[color=white,opacity=0.5] #1 circle[radius=0.2]; + \fill[color=white,opacity=0.5] + ($#1+(-\s,-\s)$) -- + ($#1+(+\s,-\s)$) -- + ($#1+(+\s,+\s)$) -- + ($#1+(-\s,+\s)$) -- cycle; + \node at #1 {$#2$}; +} + +\kante{(0.5,-2.8)}{k_0} +\kante{(-2.8,-2.3)}{k_1} +\kante{(-1.4,0)}{k_2} +\kante{(-0.4,-1.55)}{k_3} +\kante{(1.25,0.95)}{k_4} +\kante{(-2.08,1.1)}{k_5} + +\def\r{0.33} + +\def\flaeche#1#2{ + \fill[color=white,opacity=0.5] + ($#1+({-\r*cos(30)},{-\r*sin(30)})$) -- + ($#1+({\r*cos(30)},{-\r*sin(30)})$) -- + ($#1+(0,{\r})$) -- cycle; + \node at #1 {$#2$}; +} + +\flaeche{(-0.7,-5)}{f_0} +\draw (-0.7,-4.7) -- (-0.7,-3.25); +\draw[->,color=black!70] (-0.7,-3.06) -- (-0.7,-2.5); +\flaeche{(0.2,-0.5)}{f_1} +\flaeche{(-2.3,-0.7)}{f_2} +\coordinate (A) at (1,2.6); +\coordinate (B) at (0,1); + +\flaeche{($1.2*(A)-0.2*(B)$)}{f_3} + +\def\t{0.58} +\pgfmathparse{1-\t} +\xdef\T{\pgfmathresult} +\draw (A) -- ($\t*(A)+\T*(B)$); + +\def\t{0.48} +\pgfmathparse{1-\t} +\xdef\T{\pgfmathresult} +\draw[->,color=black!70] ($\t*(A)+\T*(B)$) -- (B); + + +\end{tikzpicture} + +\end{document} + diff --git a/buch/chapters/95-homologie/induzierteabb.tex b/buch/chapters/95-homologie/induzierteabb.tex new file mode 100644 index 0000000..13591d7 --- /dev/null +++ b/buch/chapters/95-homologie/induzierteabb.tex @@ -0,0 +1,204 @@ +\subsection{Induzierte Abbildung +\label{buch:subsection:induzierte-abbildung}} +Früher haben wurde eine Abbildung $f_*$ zwischen Kettenkomplexen $C_*$ und +$D_*$ so definiert, +dass sie mit den Randoperatoren verträglich sein muss. +Diese Forderung bewirkt, dass sich auch eine lineare Abbildung +\[ +H_k(f) \colon H_k(C) \to H_k(D) +\] +zwischen den Homologiegruppen ergibt, wie wir nun zeigen wollen. + +\subsubsection{Definition der induzierten Abbildung} +Um eine Abbildung von $H_k(C)$ nach $H_k(D)$ zu definieren, müssen wir +zu einem Element von $H_k(C)$ ein Bildelement konstruieren. +Ein Element in $H_k(C)$ ist eine Menge von Zyklen in $Z^C_k$, die sich +nur um einen Rand in $B_k$ unterscheiden. +Wir wählen also einen Zyklus $z\in Z_k$ und bilden ihn auf $f_k(z)$ ab. +Wegen $\partial^D_kf(z)=f\partial^C_kz = f(0) =0 $ ist auch $f_k(z)$ +ein Zyklus. +Wir müssen jetzt aber noch zeigen, dass eine andere Wahl des Zyklus +das gleiche Element in $H_k(D)$ ergibt. +Dazu genügt es zu sehen, dass sich $f(z)$ höchstens um einen Rand +ändert, wenn man $z$ um einen Rand ändert. +Sei also $b\in B^C_k$ ein Rand, es gibt also ein $w\in C_{k+1}$ mit +$\partial^C_{k+1}w=b$. +Dann gilt aber auch +\[ +f_k(z+b) += +f_k(z) + f_k(b) += +f_k(z) + f_k(\partial^C_{k+1}w) += +f_k(z) + \partial^D_{k+1}(f_k(w)). +\] +Der letzte Term ist ein Rand in $D_k$, somit ändert sich $f_k(z)$ nur +um diesen Rand, wenn man $z$ um einen Rand ändert. +$f_k(z)$ und $f_k(z+b)$ führen auf die selbe Homologieklasse. + +\subsubsection{Matrixdarstellung} +In Abschnitt~\ref{buch:subsection:basiswahl} wurde gezeigt, wie man +für die Vektorräume der Zyklen eine Basis derart finden kann, +dass die Ränder von einer Teilmenge der Basis aufgespannt werden. +Eine solche Basis kann man immer erweitern zu einer Basis von $C_k$. +Für das Folgende bezeichnen wir die Vektoren einer solche Basis von $C_k$ +mit +\[ +\{ +b_1,\dots, b_r, +z_1,\dots,z_l, +c_1,\dots,c_s +\}. +\] +wobei die Vektoren die folgende Bedeutung haben: +\begin{center} +\begin{tabular}{|l|l|} +\hline +Vektoren&Bedeutung\\ +\hline +$b_1,\dots,b_r$ & Basis für $B_k(C)$ \\ +$z_1,\dots,z_l$ & zusätzliche Vektoren für eine Basis von $Z_k(C)$ \\ +$c_1,\dots,c_s$ & zusätzliche Vektoren für eine Basis von $C_k$ \\ +\hline +\end{tabular} +\end{center} + +Wählt man eine Basis dieser Art sowohl in $C_*$ wie auch in $D_*$, +dann kann man die induzierte Abbildung als $3\times 3$-Blockmatrix +schreiben. +Man verwendet dabei, dass $f_k$ die Unterräume $B_k(C)$ und +$Z_k(C)$ in die entsprechenden Unterräume $B_k(D)$ und $Z_k(D)$ +abbildet, also +\[ +f_k(B_k(C)) \subset B_k(D) +\qquad\text{und}\qquad +f_k(Z_k(C)) \subset Z_k(D). +\] +In der Matrixdarstellung äussert sich das darin, dass die Blöcke +links unten zu Null werden. +Die Matrixdarstellung von $f_k$ hat daher die Form +\[ +f_k += +\begin{pmatrix} +f_{k,B} & * & * \\ + 0 & f_{k,Z} & * \\ + 0 & 0 & f_{k,*} +\end{pmatrix}. +\] +Genauso kann man natürlich auch die Randoperatoren in dieser Basis +ausdrücken. +Sie bilden die Zyklen auf $0$ ab und aus den Vektoren $c_1,\dots,c_s$ +werden Ränder. +Die Matrix hat daher die Form +\[ +\partial_k += +\begin{pmatrix} +0& 0 & \Delta_k \\ +0& 0 & 0 \\ +0& 0 & 0 +\end{pmatrix} +\] +\begin{figure} +\centering +\includegraphics{chapters/95-homologie/images/complexbasis.pdf} +\caption{Basiswahl für den Kettenkomplex $C_k$. +Der Randoperator $\partial_k$ bildet $Z_k$ auf $0$ ab, der blaue +Unterraum, aufgespannt von den Vektoren $c_i$, wird bijektiv auf $B_{k-1}$ +abgebildet. +Eine Basis kann immer so gefunden werden, dass die Vektoren $c_i$ +von $\partial_k$ auf die Basisvektoren von $B_{k-1}$ abgebildet werden. +In dieser Basis ist $\Delta_k$ eine Einheitsmatrix. +\label{buch:homologie:fig:komplexbasis}} +\end{figure}% +Die Bedingung \eqref{buch:komplex:abbildung} für die Komplexabbildung +bekommt jetzt die Matrixform +\begin{equation} +\left. +\begin{aligned} +\partial_k^{D}\circ f_k +&= +\begin{pmatrix} +0&0&\Delta_k^{(D)}\\ +0&0&0\\ +0&0&0 +\end{pmatrix} +\begin{pmatrix} +f_{k,B} & * & * \\ + 0 & f_{k,Z} & * \\ + 0 & 0 & f_{k,*} +\end{pmatrix} += +\begin{pmatrix} +0&0&\Delta_k^{(D)}f_{k,*}\\ +0&0&0\\ +0&0&0 +\end{pmatrix} +\\ +f_{k-1}\circ \partial_k^C +&= +\begin{pmatrix} +f_{k-1,B}& * & * \\ + 0 &f_{k-1,Z}& * \\ + 0 & 0 &f_{k-1,*} +\end{pmatrix} +\begin{pmatrix} +0&0&\Delta_k^{(C)}\\ +0&0&0\\ +0&0&0 +\end{pmatrix} += +\begin{pmatrix} +0&0&f_{k-1,B}\Delta_k^{(C)}\\ +0&0&0\\ +0&0&0 +\end{pmatrix} +\end{aligned} +\right\} +\Rightarrow +\Delta_k^{(D)}f_{k,*} += +f_{k-1,B}\Delta_k^{(C)}. +\label{buch:homologie:matrixform} +\end{equation} +Für die induzierte Abbildung in Homologie ist ausschliesslich der +Block $f_{k,Z}$ notwendig, die Matrix von $H_k(f)$ in der gewählten +Basis von $H_k(C)$ bzw.~$H_k(D)$ ist also genau die Matrix $f_{k,Z}$. + + +Wie Abbildung~\ref{buch:homologie:fig:komplexbasis} können die +Basisvektoren $c_*$ in $C_k$ so gewählt werden, dass sie vom Randoperator +$\partial_k$ auf die Basisvektoren von $Z_{k-1}$ abgebildet werden. +Bei dieser Wahl wird die Matrix $\Delta_k$ eine Einheitsmatrix. + +\subsubsection{Spur} +Wir betrachten jetzt den Fall einer Selbstabbildung $f_*\colon C_*\to C_*$. +Die Basis soll so gewählt werden, dass $\Delta_k$ eine Einheitsmatrix ist. +Aus~\eqref{buch:homologie:matrixform} kann man ablesen, dass für diese +Basiswahl $f_{k,*}=f_{k-1,B}$ gilt. +Die Matrizen von $f_k$ haben daher die Form +\[ +f_k += +\begin{pmatrix} +f_{k,B} & * & * \\ + 0 & f_{k,Z} & * \\ + 0 & 0 & f_{k-1,B} +\end{pmatrix}. +\] +Entsprechend ist die Spur +\begin{equation} +\operatorname{Spur} f_k += +\operatorname{Spur} f_{k,B} ++ +\operatorname{Spur} f_{k,Z} ++ +\operatorname{Spur} f_{k-1,B}. +\label{buch:homologie:eqn:spur} +\end{equation} + + + diff --git a/buch/chapters/95-homologie/komplex.tex b/buch/chapters/95-homologie/komplex.tex index 7ed5937..9787bb2 100644 --- a/buch/chapters/95-homologie/komplex.tex +++ b/buch/chapters/95-homologie/komplex.tex @@ -56,7 +56,7 @@ für jedes $k$ \circ f_{k} = -f_{k+1} +f_{k-1} \circ \partial^C_k \label{buch:komplex:abbildung} @@ -76,26 +76,26 @@ kommutatives Diagramm dargestellt werden. & C_2 \arrow[l,"\partial_2^C" above] \arrow[d, "f_2"] & \dots \arrow[l] - \arrow[l, "\partial_{k-1}^C" above] - & C_k - \arrow[l, "\partial_k^C" above] - \arrow[d, "f_k"] - & C_{k+1}\arrow[l, "\partial_{k+1}^C" above] - \arrow[d, "f_{k+1}"] + \arrow[l, "\partial_{3}^C" above] + & C_{k-1} + \arrow[l, "\partial_{k-1}^C" above] + \arrow[d, "f_{k-1}"] + & C_{k}\arrow[l, "\partial_{k}^C" above] + \arrow[d, "f_{k}"] & \dots - \arrow[l,"\partial_{k+2}^C"] + \arrow[l,"\partial_{k+1}^C" above] \\ 0 & D_0 \arrow[l, "\partial_0^D" above] & D_1 \arrow[l,"\partial_1^D" above] & D_2 \arrow[l,"\partial_2^D" above] & \dots \arrow[l] - \arrow[l, "\partial_{k-1}^D" above] - & D_k - \arrow[l, "\partial_k^D" above] - & D_{k+1}\arrow[l, "\partial_{k+1}^D" above] + \arrow[l, "\partial_{3}^D" above] + & D_{k-1} + \arrow[l, "\partial_{k-1}^D" above] + & D_{k}\arrow[l, "\partial_{k}^D" above] & \dots - \arrow[l,"\partial_{k+2}^D" above] + \arrow[l,"\partial_{k+1}^D" above] \end{tikzcd} \label{buch:komplex:abbcd} \end{equation} diff --git a/buch/chapters/95-homologie/simplex.tex b/buch/chapters/95-homologie/simplex.tex index 0cf4aa7..3bf1004 100644 --- a/buch/chapters/95-homologie/simplex.tex +++ b/buch/chapters/95-homologie/simplex.tex @@ -3,14 +3,14 @@ % % (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule % -\section{Simplices +\section{Simplizes \label{buch:section:simplexe}} -\rhead{Simplices} +\rhead{Simplizes} Die Idee, das Dreieck und seinen Rand zu unterscheiden verlangt, dass wir zunächst Dreiecke und deren höherdimensionale Verallgemeinerungen, die sogenannten Simplizes entwickeln müssen. -\subsection{Simplices und Rand +\subsection{Simplizes und Rand \label{buch:subsection:simplices}} \subsubsection{Rand eines Dreiecks} diff --git a/buch/papers/clifford/10_Quaternionen.tex b/buch/papers/clifford/10_Quaternionen.tex index 3fe2876..d04ea38 100644 --- a/buch/papers/clifford/10_Quaternionen.tex +++ b/buch/papers/clifford/10_Quaternionen.tex @@ -6,208 +6,172 @@ \section{Quaternionen} \rhead{Quaternionen} -Wie die komplexen Zahlen eine Erweiterung der reellen Zahlen sind, sind die Quaternionen eine Erweiterung der komplexen Zahlen für den dreidimensionalen Raum. Sie haben, wie die komplexen Zahlen, eine dreh-streckende Eigenschaft. +Wie die komplexen Zahlen eine Erweiterung der reellen Zahlen sind, sind die Quaternionen eine Erweiterung der komplexen Zahlen für den dreidimensionalen Raum. Sie haben, wie die komplexen Zahlen, eine drehstreckende Eigenschaft. Sie finden beispielsweise in der Computergrafik und Robotik Anwendung. Die Quaternionen \begin{align} - q = w + xi + yj + zk \quad w,x,y,z \in \mathbb{R}\enspace q \in \mathbb{H} +q = w + xi + yj + zk \quad w,x,y,z \in \mathbb{R}\enspace q \in \mathbb{H} \end{align} können dabei eine Drehstreckung mit \begin{align} \label{QuatRot} - \begin{split} - v \mapsto v'' = qvq^{-1} - \end{split} +\begin{split} +v \mapsto v'' = qvq^{-1} +\end{split} \end{align} erreichen, falls $q,v,q^{-1} \in \mathbb{H}$ und die Zusammenhänge \begin{align} - \operatorname{Re}(q) = \operatorname{Re}(q^{-1})\quad \operatorname{Im}(q) = -\operatorname{Im}(q^{-1}) +\operatorname{Re}(q) = \operatorname{Re}(q^{-1})\quad\text{und}\quad \operatorname{Im}(q) = -\operatorname{Im}(q^{-1}) \end{align} -gelten. Auffallend ist bei der abbildenden Funktion \eqref{QuatRot} schon die Ähnlichkeit zu \eqref{rotGA} im Kapitel Rotation. Man könnte sich nun fragen wieso es drei imaginäre Einheiten $i,j,k$ gibt und nicht zwei, was doch näherliegender wäre. Der Grund liegt darin, weil es in der dritten Dimension drei Drehachsen gibt, anstatt nur eine. Wie im Kapitel Rotation beschrieben können wir auch hier die drei Drehungen durch Linearkombinationen von drei Bivektoren beschreiben. In der geometrischen Algebra ist es leicht herauszufinden wie viele Imaginärteile für jede weitere Dimension existieren. Dabei muss man nur die Anzahl der unabhängigen Bivektoren ermitteln. In der vierten Dimension würden es beispielsweise durch alle Vektorkombinationen von $\mathbf{e}_1, \mathbf{e}_2,\mathbf{e}_3, \mathbf{e}_4$ insgesamt 8 Bivektoren existieren (Nicht 16, da $\mathbf{e}_{ij} = -\mathbf{e}_{ji}$ nicht unabhängig voneinander sind). +gelten. Auffallend ist bei der abbildenden Funktion \eqref{QuatRot} schon die Ähnlichkeit zur Funktion \eqref{rotGA} im Abschnitt Drehung. Man könnte sich nun fragen wieso es drei imaginäre Einheiten $i,j,k$ gibt und nicht zwei, was doch näherliegender wäre. Der Grund liegt darin, weil es in drei Dimensionen drei Drehachsen gibt, anstatt nur eine. Wie im Abschnitt Drehung beschrieben, können wir auch hier die drei Drehungen durch Linearkombinationen von drei Bivektoren beschreiben. In der geometrischen Algebra ist es leicht herauszufinden, wie viele Imaginärteile für jede weitere Dimension existieren. Dabei muss man nur die Anzahl der unabhängigen Bivektoren ermitteln. In vier Dimensionen würden es beispielsweise durch alle Vektorkombinationen von $\mathbf{e}_1, \mathbf{e}_2,\mathbf{e}_3, \mathbf{e}_4$ insgesamt 8 Bivektoren existieren (Nicht 16, da $\mathbf{e}_{ij} = -\mathbf{e}_{ji}$ nicht unabhängig voneinander sind). -Ohne die geometrische Algebra, haben wir jetzt aber leider ein kleines Problem. Für die Darstellung der Quaternionen bräuchten wir insgesamt vier Achsen. Drei für die imaginären Einheiten und eine für die reelle Einheit. Ein weiterer Nachteil in visueller Hinsicht entsteht beim Anwenden eines Quaternion auf einen Vektor. Sie befinden sich nicht im gleichen Raum und müssen zuerst durch +Ohne die geometrische Algebra, haben wir jetzt aber leider ein kleines Problem. Für die Darstellung der Quaternionen bräuchten wir insgesamt vier Achsen. Drei für die imaginären Einheiten und eine für die reelle Einheit. Ein weiterer Nachteil in visueller Hinsicht entsteht beim Anwenden einer Quaternion auf einen Vektor. Sie befinden sich nicht im gleichen Raum und müssen zuerst durch \begin{align} - \mathbf{v} = x\mathbf{\hat{x}} + y\mathbf{\hat{y}} + z \mathbf{\hat{z}} \in \mathbb{R}^3 \enspace\mapsto\enspace v = 0 + xi + yj + zk \in \mathbb{H} +\mathbf{v} = x\mathbf{\hat{x}} + y\mathbf{\hat{y}} + z \mathbf{\hat{z}} \in \mathbb{R}^3 \enspace\mapsto\enspace v = 0 + xi + yj + zk \in \mathbb{H} \end{align} ineinander umgewandelt werden, um damit zu rechnen. \subsection{Geometrische Algebra} Die geometrische Algebra kann beide Probleme beheben. Die Quaternionen können, wie schon im zweidimensionalen Fall durch die gerade Grade $G_3^+(\mathbb{R}) \cong \mathbb{H}$ dargestellt werden. Da wir uns jetzt aber in $G_3(\mathbb{R})$ befinden haben wir drei Basisvektoren $\mathbf{e}_1, \mathbf{e}_2, \mathbf{e}_3$ und können somit drei Bivektoren $\mathbf{e}_{12}, \mathbf{e}_{23}, \mathbf{e}_{31}$ bilden. \begin{definition} - Die Multivektoren mit Drehstreckenden Eigenschaften in $G_3(\mathbb{R})$ sind + Die Multivektoren mit drehstreckenden Eigenschaften in $G_3(\mathbb{R})$ sind \begin{align} - \mathbf{q} = w + x\mathbf{e}_{12} + y\mathbf{e}_{23} + z\mathbf{e}_{31} \quad w,x,y,z \in \mathbb{R}\enspace \mathbf{q} \in \mathbb{G}_3^+. + \mathbf{q} = w + x\mathbf{e}_{12} + y\mathbf{e}_{23} + z\mathbf{e}_{31} \quad w,x,y,z \in \mathbb{R}\enspace \mathbf{q} \in \mathbb{G}_3^+. \end{align} \end{definition} Die Probleme werden dadurch gelöst, da wir die Bivektoren im Raum nicht durch einzelne Achsen darstellen müssen, sondern sie als eine orientiere Fläche darstellen können. Anstatt die Vektoren in Quaternionen umzurechnen, können wir jetzt die Vektoren separat im gleichen Raum, wie in Abbildung \ref{BildQuaternionen} gezeigt, darstellen. \begin{figure} \centering - \begin{tikzpicture} - % Koordinatensystem - \draw[thin,gray!40] (-3,-2) grid (3,3); - \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; - \draw[<->] (0,-2)--(0,3) node[above]{$a_2$}; - \draw[<->] (3,3)--(-2,-2) node[left]{$a_3$}; - - % v Vektor - \draw[line width=2pt,black,-stealth](0,0)--(2,-1) node[anchor=north]{$\boldsymbol{v}$}; - - % q Quaternion - \draw[line width=0,fill=blue!40] (0,0)--(0.75,0)--(0.75,0.75)--(0,0.75) - node[xshift=0.375cm, yshift=-0.5cm, blue]{$x\boldsymbol{e_{12}}$}; - \draw[->] (0.7,0.55) arc (0:310:0.15); - - \draw[line width=0,fill=blue!40] (0,0)--(-1,-1)--(-1,0.71)--(0,1.71) - node[xshift=-0.5cm, yshift=-1.5cm, blue]{$y\boldsymbol{e_{23}}$}; - \draw[->] (-0.1,1.1) arc (0:310:0.15); - - \draw[line width=0,fill=blue!40] (0,0)--(-0.71,-0.71)--(0.29,-0.71)--(1,0) - node[xshift=-0.7cm, yshift=-0.2cm, blue]{$z\boldsymbol{e_{31}}$}; - \draw[->] (0,-0.5) arc (0:310:0.15); - - % Basisvektoren - \draw[line width=1.5pt,gray,-stealth](0,0)--(1,0) node[anchor=south west]{$\boldsymbol{e_1}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(0,1) node[anchor=north west, yshift=0.2cm]{$\boldsymbol{e_2}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(-0.71,-0.71) node[anchor=south, yshift=0.2cm]{$\boldsymbol{e_3}$}; - \end{tikzpicture} + \includegraphics{papers/clifford/3d/dq.pdf} \caption{Darstellung eines Quaternion $\mathbf{q}$ und eines Vektors $\mathbf{v}$ im selben Raum} \label{BildQuaternionen} \end{figure} -Wie schon im zweidimensionalen Fall \eqref{GAdrehstreck} beschreibt im dreidimensionalen Fall mit drei Bivektoren + +Betrachten wir nun das Produkt \begin{align} - \mathbf{qv} &= (w + x\mathbf{e}_{12} + y\mathbf{e}_{23} + z\mathbf{e}_{31})(a\mathbf{e}_1+b\mathbf{e}_2+c\mathbf{e}_3)\\ - &= \underbrace{w(a\mathbf{e}_1+b\mathbf{e}_2+c\mathbf{e}_3)}_{w\mathbf{v}} + \underbrace{x(-a\mathbf{e}_2+b\mathbf{e}_1}_{x\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{12}}}+c\mathbf{e}_{123}) + \underbrace{y(-b\mathbf{e}_3+c\mathbf{e}_2}_{y\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{23}}}+a\mathbf{e}_{123}) + \underbrace{z(a\mathbf{e}_3-c\mathbf{e}_1}_{z\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{31}}}-b\mathbf{e}_{123}) +\mathbf{qv} &= (w + x\mathbf{e}_{12} + y\mathbf{e}_{23} + z\mathbf{e}_{31})(a\mathbf{e}_1+b\mathbf{e}_2+c\mathbf{e}_3)\\ +&= \underbrace{w(a\mathbf{e}_1+b\mathbf{e}_2+c\mathbf{e}_3)}_{\displaystyle{w\mathbf{v}}} + \underbrace{x(-a\mathbf{e}_2+b\mathbf{e}_1}_{\displaystyle{x\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{12}}}}+c\mathbf{e}_{123}) + \underbrace{y(-b\mathbf{e}_3+c\mathbf{e}_2}_{\displaystyle{y\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{23}}}}+a\mathbf{e}_{123}) + \underbrace{z(a\mathbf{e}_3-c\mathbf{e}_1}_{\displaystyle{z\mathbf{v}_{\angle 90^\circ, \parallel \mathbf{e}_{31}}}}-b\mathbf{e}_{123}). \end{align} -jeder Bivektoranteil, um wie viel der um 90° gedrehte zu der Ebene parallele Teil des Vektors gestreckt wird. Dabei dreht jeder Bivektor den Vektor um eine andere Achse und man sieht die dreh-streckende Eigenschaft ähnlich zu den komplexen Zahlen. Der störende Trivektoranteil $(xc+ya+zb)\mathbf{e}_{123}$ bekommt man aber nur weg, indem man noch wie in der Rotationsformel \eqref{QuatRot} den Inversen Quaternion $\mathbf{q}^{-1}$ anschliessend multipliziert, wobei die dreh-gestreckten parallelen Anteile nochmals um den gleichen Faktor dreh-gestreckt werden. Da nur so der Trivektoranteil wegfällt, sieht man, dass die Rotationsformel, der einzige Vernünftige weg ist, mit Quaternionen zu arbeiten. +Wie schon im zweidimensionalen Fall \eqref{GAdrehstreck}, beschreibt im dreidimensionalen Fall mit drei Bivektoren jeder Bivektoranteil um wie viel der um 90° gedrehte zu der Ebene parallele Teil des Vektors gestreckt wird. Dabei dreht jeder Bivektor den Vektor um eine andere Achse und man sieht die drehstreckende Eigenschaft ähnlich zu den komplexen Zahlen. Der störende Trivektoranteil $(xc+ya+zb)\mathbf{e}_{123}$ bekommt man aber nur weg, indem man, wie in der Drehungsgleichung \eqref{QuatRot}, mit der Inversen Quaternion $\mathbf{q}^{-1}$ multipliziert, wobei die drehgestreckten parallelen Anteile nochmals drehgestreckt werden. Da nur so der Trivektoranteil wegfällt, sieht man, dass die Drehungsformel, der einzige vernünftige Weg ist, mit Quaternionen zu arbeiten. -In der Computergraphik und Robotik macht eine Drehstreckung aber nicht viel Sinn. Wieso sollte ein Objekt bei einer Drehung zusätzlich noch grösser werden? Darum verwendet man sogenannte Einheitsquaternionen, welche den Betrag $|\mathbf{q}|=1$ haben und somit rotieren sie die Objekte bzw. Vektoren lediglich. +In der Computergraphik und Robotik macht eine Drehstreckung aber nicht viel Sinn. Wieso sollte ein Objekt bei einer Drehung zusätzlich noch grösser werden? Darum verwendet man sogenannte Einheitsquaternionen, welche den Betrag $|\mathbf{q}|=1$ haben und somit drehen sie die Objekte bzw. Vektoren lediglich. \begin{definition} Die Einheitsquaternionen sind definiert als \begin{align} - \mathbf{q} = \cos(\alpha) + sin(\alpha)(\tilde{x}\mathbf{e}_{12} + \tilde{y}\mathbf{e}_{23} + \tilde{z}\mathbf{e}_{31}) + \mathbf{q} = \cos(\alpha) + \sin(\alpha)(\tilde{x}\mathbf{e}_{12} + \tilde{y}\mathbf{e}_{23} + \tilde{z}\mathbf{e}_{31}) \end{align} \end{definition} Zudem setzten wir $\tilde{x}^2+\tilde{y}^2+\tilde{z}^2=1$, damit \begin{align} - |\mathbf{q}| = \sqrt{cos(\alpha)^2 + sin(\alpha)^2(\tilde{x}^2+\tilde{y}^2+\tilde{z}^2) } = \sqrt{cos(\alpha)^2 + sin(\alpha)^2} = 1. +|\mathbf{q}| = \sqrt{\cos(\alpha)^2 + \sin(\alpha)^2(\tilde{x}^2+\tilde{y}^2+\tilde{z}^2) } = \sqrt{\cos(\alpha)^2 + \sin(\alpha)^2} = 1. \end{align} -Der Winkel $\alpha$ beschreibt dabei, wie im Bild \ref{BildQuaternionBeispiel2} gezeigt den halben Winkel, um welchen der parallelen Anteil $\mathbf{v_{\parallel}}$ des Vektors $\mathbf{v}$ zur kombinierten Bivektorebene $sin(\alpha)^2(\tilde{x}\mathbf{e}_{12} + \tilde{y}\mathbf{e}_{23} + \tilde{z}\mathbf{e}_{31})$ gedreht wird. +Der Winkel $\alpha$ beschreibt dabei, wie im Bild \ref{BildQuaternionBeispiel2} gezeigt, den halben Winkel, um welchen der parallelen Anteil $\mathbf{v_{\parallel}}$ des Vektors $\mathbf{v}$ zur kombinierten Bivektorebene $sin(\alpha)(\tilde{x}\mathbf{e}_{12} + \tilde{y}\mathbf{e}_{23} + \tilde{z}\mathbf{e}_{31})$ gedreht wird. -Um einen Vektor zu drehen, verwendet man die in Kapitel Rotation hergeleitete Formel +Um einen Vektor zu drehen, verwendet man die in Abschnitt 18.4 hergeleitete Formel \begin{align} \label{QuatRotGA} - \begin{split} - \mathbf{v}'' = \mathbf{qvq}^{-1}, - \end{split} +\begin{split} +\mathbf{v}'' = \mathbf{qvq}^{-1}, +\end{split} \end{align} wobei wie auch schon bei den Quaternionen gelten muss, dass \begin{align} \label{GAReIm} - \operatorname{Re}(\mathbf{q}) = \operatorname{Re}(\mathbf{q}^{-1}) \enspace\text{und}\enspace \operatorname{Im}(\mathbf{q}) = -\operatorname{Im}(\mathbf{q}^-1). +\operatorname{Re}(\mathbf{q}) = \operatorname{Re}(\mathbf{q}^{-1}) \quad\text{und}\quad \operatorname{Im}(\mathbf{q}) = -\operatorname{Im}(\mathbf{q}^{-1}). \end{align} -Der Grund für die Zusammenhänge \eqref{GAReIm} kann man durch die hergeleitete vereinfachte Rotationsformel \eqref{GAvereinfRot} sehen, weil durch den negierten Winkel $\theta$ der Reelle bzw. Grad 0 Anteil +Der Grund für die Zusammenhänge \eqref{GAReIm} kann man durch die hergeleitete vereinfachte Drehungsgleichung \eqref{GAvereinfRot} sehen, weil durch den negierten Winkel $\theta$ der Reelle bzw. Grad 0 Anteil \begin{align} - \operatorname{Re}(e^{-\theta \mathbf{e}_{12}}) = \operatorname{Re}(e^{\theta \mathbf{e}_{12}}) +\operatorname{Re}(e^{-\theta \mathbf{e}_{12}}) = \operatorname{Re}(e^{\theta \mathbf{e}_{12}}) \end{align} -und der Imaginäre bzw. Grad 2 Anteil +und der imaginäre bzw. Grad 2 Anteil \begin{align} - \operatorname{Im}(e^{-\theta \mathbf{e}_{12}}) = -\operatorname{Im}(e^{\theta \mathbf{e}_{12}}) +\operatorname{Im}(e^{-\theta \mathbf{e}_{12}}) = -\operatorname{Im}(e^{\theta \mathbf{e}_{12}}) \end{align} -ist. Durch die geometrische Algebra sieht man nun wieso es wichtig ist bei Quaternionen für eine reine Drehstreckung mit $\mathbf{q}$ und $\mathbf{q}^{-1}$ beidseitig zu multiplizieren, sonst werden die senkrechten Anteile zu den Bivektorebenen ebenfalls beeinflusst, wie man im Kapitel Rotation bei der Formel (\ref{RotAufPerpPar}) sehen kann. +ist. Durch die geometrische Algebra sieht man nun, wieso es wichtig ist, bei Quaternionen für eine reine Drehstreckung mit $\mathbf{q}$ und $\mathbf{q}^{-1}$ beidseitig zu multiplizieren, sonst werden die senkrechten Anteile zu den Bivektorebenen ebenfalls beeinflusst, wie man im Abschnitt Drehung bei der Formel \eqref{RotAufPerpPar} sehen kann. \begin{beispiel} - Eine Drehung eines Vektors $\mathbf{v}= 1\mathbf{e}_2$ um 90 Grad um die $\mathbf{e}_1$-Achse und danach 90 Grad um die $\mathbf{e}_2$-Achse. Dafür nehmen wir zuerst einen Einheitsquaternion + Eine Drehung eines Vektors $\mathbf{v}= 1\mathbf{e}_2$ um 90 Grad um die $\mathbf{e}_1$-Achse und danach 90 Grad um die $\mathbf{e}_2$-Achse. Dafür nehmen wir zuerst die Einheitsquaternion \begin{align} - \mathbf{q}_{23} &= \cos(\pi/4) + sin(\pi/4)(1\mathbf{e}_{23}) = e^{(\pi/4)\mathbf{e}_{23}} &= \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{23})\\ - \mathbf{q}_{23}^{-1} &&= \textstyle{\frac{\sqrt{2}}{2}} (1- \mathbf{e}_{23}) + \mathbf{q}_{23} &= \cos(\pi/4) + \sin(\pi/4)(1\mathbf{e}_{23}) = e^{(\pi/4)\mathbf{e}_{23}} &= \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{23})\\ + \mathbf{q}_{23}^{-1} &&= \textstyle{\frac{\sqrt{2}}{2}} (1- \mathbf{e}_{23}) \end{align} - welcher um die $\mathbf{e}_{2}$-$\mathbf{e}_{3}$-Ebene um 90 Grad dreht und danach Einheitsquaternion + welche um die $\mathbf{e}_{2}$-$\mathbf{e}_{3}$-Ebene um 90 Grad dreht und danach die Einheitsquaternion \begin{align} - \mathbf{q}_{31} &= \cos(\pi/4) + sin(\pi/4)(1\mathbf{e}_{31}) = e^{(\pi/4)\mathbf{e}_{31}} &= \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{31})\\ - \mathbf{q}_{31}^{-1} &&= \textstyle{\frac{\sqrt{2}}{2}}(1 - \mathbf{e}_{31}) + \mathbf{q}_{31} &= \cos(\pi/4) + \sin(\pi/4)(1\mathbf{e}_{31}) = e^{(\pi/4)\mathbf{e}_{31}} &= \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{31})\\ + \mathbf{q}_{31}^{-1} &&= \textstyle{\frac{\sqrt{2}}{2}}(1 - \mathbf{e}_{31}), \end{align} - welcher um die $\mathbf{e}_{3}$-$\mathbf{e}_{1}$-Ebene um 90 Grad dreht. Um die vollständige Rotation zu beschreiben können die Einheitsquaternion multipliziert werden, wobei die Reihenfolge der Ausführung beachtet werden muss. Somit ist + welche um die $\mathbf{e}_{3}$-$\mathbf{e}_{1}$-Ebene um 90 Grad dreht. Um die vollständige Drehung zu beschreiben, können die Einheitsquaternionen multipliziert werden, wobei die Reihenfolge der Ausführung beachtet werden muss. Somit ist \begin{align} \label{FormelBeispielQuaternion} - \mathbf{q} &= \mathbf{q}_{31}\mathbf{q}_{23} = \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{31})\textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{23}) &= \textstyle{\frac{1}{2}}(1 + \mathbf{e}_{31} + \mathbf{e}_{23} + \mathbf{e}_{12})\\ - \mathbf{q}^{-1} &= \mathbf{q}_{23}^{-1}\mathbf{q}_{31}^{-1} = \textstyle{\frac{\sqrt{2}}{2}} (1- \mathbf{e}_{23})\textstyle{\frac{\sqrt{2}}{2}}(1 -\mathbf{e}_{31}) &= \textstyle{\frac{1}{2}}(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12}). + \mathbf{q} &= \mathbf{q}_{31}\mathbf{q}_{23} = \textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{31})\textstyle{\frac{\sqrt{2}}{2}}(1 + \mathbf{e}_{23}) &= \textstyle{\frac{1}{2}}(1 + \mathbf{e}_{31} + \mathbf{e}_{23} + \mathbf{e}_{12})\\ + \mathbf{q}^{-1} &= \mathbf{q}_{23}^{-1}\mathbf{q}_{31}^{-1} = \textstyle{\frac{\sqrt{2}}{2}} (1- \mathbf{e}_{23})\textstyle{\frac{\sqrt{2}}{2}}(1 -\mathbf{e}_{31}) &= \textstyle{\frac{1}{2}}(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12}). \end{align} - Wenn wir nun den Quaternion $\mathbf{q}$ auf den Vektor $\mathbf{v}$ anwenden + Wenn wir nun die Quaternion $\mathbf{q}$ auf den Vektor $\mathbf{v}$ anwenden, erhalten wir \begin{align} - \mathbf{v}'' = \mathbf{qvq}^{-1} &= \textstyle{\frac{1}{2}}(1 + \mathbf{e}_{31} + \mathbf{e}_{23} + \mathbf{e}_{12})(1\mathbf{e}_2)\textstyle{\frac{1}{2}}(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12})\\ - &= \textstyle{\frac{1}{4}}(\mathbf{e}_2 + \mathbf{e}_{123} - \mathbf{e}_3 + \mathbf{e}_1)(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12})\\ - &= (\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_1 + (\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}})\mathbf{e}_2 +\\ &(-\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_3 + (\textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_{123}\\ - &= 1e_1 + \mathbf{v}'' = \mathbf{qvq}^{-1} &= \textstyle{\frac{1}{2}}(1 + \mathbf{e}_{31} + \mathbf{e}_{23} + \mathbf{e}_{12})(1\mathbf{e}_2)\textstyle{\frac{1}{2}}(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12})\\ + &= \textstyle{\frac{1}{4}}(\mathbf{e}_2 + \mathbf{e}_{123} - \mathbf{e}_3 + \mathbf{e}_1)(1 - \mathbf{e}_{31} - \mathbf{e}_{23} - \mathbf{e}_{12})\\ + &= (\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_1 + (\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}})\mathbf{e}_2 +\\ &\qquad(-\textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_3 + (\textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} - \textstyle{\frac{1}{4}} + \textstyle{\frac{1}{4}})\mathbf{e}_{123}\\ + &= 1e_1. \end{align} Anders betrachtet könnte man von der Formel \eqref{FormelBeispielQuaternion} sehen, dass der Drehwinkel \begin{align} - \alpha = \arccos(w) = \arccos(\textstyle{\frac{1}{2}}) = 60° + \alpha = \arccos(w) = \arccos(\textstyle{\frac{1}{2}}) = 60^\circ \end{align} und die Ebene der kombinierten Bivektoren wie in Abbildung \ref{BildQuaternionBeispiel2} aussieht. - Somit kann man sich ebenfalls Vorstellen, wie der parallele Anteil zur Ebene insgesamt um 120° rotiert wird während der senkrechte Anteil unverändert bleibt + Somit kann man sich ebenfalls vorstellen, wie der parallele Anteil zur Ebene insgesamt um 120° gedreht wird, während der senkrechte Anteil unverändert bleibt. \end{beispiel} +\begin{figure} + \centering + \includegraphics{papers/clifford/3d/qq.pdf} + + \caption{Beispiel für Drehung um 90 Grad je um die $\mathbf{e}_1$- und $\mathbf{e}_2$-Achse.} + \label{BildQuaternionBeispiel} +\end{figure} \begin{figure} \centering - \begin{tikzpicture} - % q Quaternion - \draw[line width=0,fill=blue!40] (-0.75,-1)--(1.5,-0.5)--(0.55,1.35)--(-1.5,1) - node[xshift=0.375cm, yshift=-0.5cm, blue]{$\boldsymbol{q}$}; - \draw[->] (-0.7, 0.5) arc (310:0:0.15); - - % Koordinatensystem - \draw[thin,gray!40] (-3,-2) grid (3,3); - \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; - \draw[<->] (0,-2)--(0,3) node[above]{$a_2$}; - \draw[<->] (3,3)--(-2,-2) node[left]{$a_3$}; - - % Basisvektoren - \draw[line width=1.5pt,gray,-stealth](0,0)--(2,0) node[anchor=south west]{$\boldsymbol{e_1}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(0,2) node[anchor=north west, yshift=0.2cm]{$\boldsymbol{e_2}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(-1.41,-1.41) node[anchor=south, yshift=0.2cm]{$\boldsymbol{e_3}$}; - - % v Vektor - \draw[line width=2pt,black,-stealth](-0.05,0)--(-0.05,2) node[anchor=east]{$\boldsymbol{v}$}; - % vpar Vektor - \draw[line width=2pt,red,-stealth](0,0)--(-0.33,1.25) node[anchor=east]{$\boldsymbol{v_{\parallel}}$}; - % vperp Vektor - \draw[line width=2pt,green,-stealth](-0.33,1.25)--(0,2) node[anchor=east, xshift = -0.05, yshift = -0.3cm]{$\boldsymbol{v_{\perp}}$}; - % v'' Vektor - \draw[line width=2pt,black,-stealth](0,0.05)--(2,0.05) node[anchor=north, xshift = 0.25cm]{$\boldsymbol{v}''$}; - % vpar'' Vektor - \draw[line width=2pt,red,-stealth](0,0)--(1.66,-0.75) node[anchor=east, yshift = -0.2cm, xshift = -0.1cm]{$\boldsymbol{v_{\parallel}''}$}; - % vperp'' Vektor - \draw[line width=2pt,green,-stealth](1.66,-0.75)--(2,0) node[anchor=east, xshift = 0.5cm, yshift = -0.65cm]{$\boldsymbol{v_{\perp}''}$}; - - \coordinate (A) at (0,0); - \coordinate (B) at (-0.33,1.25); - \coordinate (C) at (1.66,-0.75); - \tikzset{anglestyle/.style={angle eccentricity=2, draw, thick, angle radius=0.75cm, purple}} - \draw pic ["120° $=2\alpha$", anglestyle] {angle = C--A--B}; - \end{tikzpicture} + \includegraphics{papers/clifford/3d/drehung.pdf} \caption{Beim Beispiel wird der parallele Anteil um 120° gedreht während der senkrechte Anteil zur kombinierten Ebene (Bivektoraddition) gleich bleibt} \label{BildQuaternionBeispiel2} \end{figure} \subsection{Interpolation} -In der Computergrafik wird Interpolation verwendet, um eine flüssige Drehbewegung zu erreichen. Dabei wird die gewünschte Drehbewegungen des Objektes in kleinere aufgeteilt. Man kann dabei mit zwei verschiedenen Systemen arbeiten. +In der Computergrafik wird Interpolation verwendet, um eine flüssige Drehbewegung zu erreichen. Dabei wird die ganze gewünschte Drehbewegungen des Objektes in kleinere Drehbewegungen aufgeteilt, wobei diese zeitlich nacheinander auf das Objekt angewendet werden. Als Vergleich könnte man sagen, dass ein Film auch nur Bilder sind, welche zeitlich nacheinander gezeigt werden. Man kann dabei mit zwei verschiedenen Systemen arbeiten. \begin{itemize} - \item Mit den Eulerschen Winkeln, welche für die Meisten zwar intuitiver sind, aber dafür Nachteile haben, worauf ich in diesem Abschnitt eingehen werde. Dabei kann eine ganze Drehbewegung $\mathbf{v}'' = R\mathbf{v}$ durch die Drehmatrix $R$ - \begin{align} - \begin{split} - &R = R_z(\gamma) R_y(\beta) R_x(\alpha)\\ - &R = - \begin{pmatrix} - \cos(\gamma) & -\sin(\gamma) & 0\\ \sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 - \end{pmatrix} - \begin{pmatrix} - \cos(\beta) & 0 & \sin(\beta)\\ 0 & 1 & 0 \\ -\sin(\beta) & 0 & \cos(\beta) - \end{pmatrix} - \begin{pmatrix} - 1 & 0 & 0 \\ 0 & \cos(\alpha) & -\sin(\alpha)\\ 0 & \sin(\alpha) & \cos(\alpha) - \end{pmatrix} - \end{split} + \item Mit den Eulerschen Winkeln, welche für die Meisten zwar intuitiver sind, aber dafür Nachteile haben, worauf ich in diesem Abschnitt eingehen werde. Dabei kann eine ganze Drehbewegung $\mathbf{v}'' = R\mathbf{v}$ durch die Drehmatrix + \begin{align} \label{GADrehmatrix} + R = + \underbrace{ + \begin{pmatrix} + \cos(\gamma) & -\sin(\gamma) & 0\\ \sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 + \end{pmatrix} + }_{\displaystyle{R_z(\gamma)}} + \underbrace{ + \begin{pmatrix} + \cos(\beta) & 0 & \sin(\beta)\\ 0 & 1 & 0 \\ -\sin(\beta) & 0 & \cos(\beta) + \end{pmatrix} + }_{\displaystyle{R_y(\beta)}} + \underbrace{ + \begin{pmatrix} + 1 & 0 & 0 \\ 0 & \cos(\alpha) & -\sin(\alpha)\\ 0 & \sin(\alpha) & \cos(\alpha) + \end{pmatrix} + }_{\displaystyle{R_x(\alpha)}} \end{align} - dargestellt werden. Wichtig dabei zu sehen ist, dass die Drehbewegungen durch die einzelnen Matrizen nacheinander ausgeführt werden. Das bedeutet, wenn man die Reihenfolge vertauscht, bekommt man eine völlig andere Drehung. Man kann die Auswirkungen der Reihenfolge gut bei einem Gimbal (REF zu BILD) sehen. Die Matrix ganz links ist die, welche als letztes Angewendet wird. Somit bildet sie die Drehung des äusseren Rings, welche auch die zwei inneren Ringe und das Objekt mitdreht. Die Matrix ganz rechts hingegen bildet nur die Drehung des inneren Rings, welche nur das Objekt selber dreht. Man kann dabei erkennen, dass vorgehen dabei sehr intuitiv ist, aber es kompliziert sein kann eine gewünschte Drehbewegung auszuführen, da sich beim Drehen der äusseren Achse, sich auch die Inneren drehen. Das bedeutet, wenn man sich eine Drehbewegung um die anfängliche x Achse mit $R_x(\alpha_2)$ wünscht, und vorher eine beliebige Drehung $R = R_z(\gamma_1) R_y(\beta_1) R_x(\alpha_1)$ ausgeführt hat, bekommt man nicht das richtige Ergebnis, da die anfängliche x-Achse durch die Drehmatrizen $R_z(\gamma_1)$ und $R_y(\beta_1)$ zu einer neuen, lokalen x-Achse wurde. - \item Andererseits mit den Quaternionen, welche die besondere Eigenschaft haben, dass eine Drehung immer um die globale Achsen ausgeführt wird, egal in welcher Rotationsposition sich das Objekt befindet. + dargestellt werden. Wichtig dabei zu sehen ist, dass die Drehbewegungen durch die einzelnen Matrizen nacheinander ausgeführt werden. Das bedeutet, wenn man die Reihenfolge vertauscht, bekommt man eine völlig andere Drehung. Man kann die Auswirkungen der Reihenfolge gut bei einem Gimbal im Bild \ref{BildReihenfolgeGimbal} sehen. Die Matrix ganz links in der Gleichung \eqref{GADrehmatrix} ist die, welche als letztes Angewendet wird. Somit bildet sie die Drehung des äusseren Rings, welche auch die zwei inneren Ringe und das Objekt mitdreht. Die Matrix ganz rechts hingegen bildet nur die Drehung des inneren Rings, welche nur das Objekt mitdreht. Man kann dabei erkennen, dass Vorgehen dabei sehr intuitiv ist, aber es kompliziert sein kann, eine gewünschte Drehbewegung auszuführen, da sich beim Drehen der äusseren Achse, sich auch die inneren drehen. Das bedeutet, wenn man sich eine Drehbewegung um die anfängliche x Achse mit $R_x(\alpha_2)$ wünscht, und vorher eine beliebige Drehung $R = R_z(\gamma_1) R_y(\beta_1) R_x(\alpha_1)$ ausgeführt hat, bekommt man nicht das richtige Ergebnis, da die anfängliche $x$-Achse durch die Drehmatrizen $R_z(\gamma_1)$ und $R_y(\beta_1)$ zu einer neuen, lokalen $x$-Achse wurde. + \item Mit den Quaternionen, welche die besondere Eigenschaft haben, dass eine Drehung immer um die globale Achsen ausgeführt wird, egal in welcher Drehungsposition sich das Objekt befindet. \end{itemize} Für Spielentwickler ist es darum meist sinnvoller Quaternionen für Drehbewegungen anzuwenden, als sich mit komplizierten Berechnungen mit Eulerschen Winkeln herumzuschlagen. + +\begin{figure} + \centering + \includegraphics[width=10cm]{papers/clifford/Bilder/ReihenfolgeGimbal.png} + \caption{Das Gimbal Lock tritt ein, wenn zwei Drehachsen in der gleichen Ebene liegen. Dies ist im rechten Bild bei der grünen und blauen Achse der Fall. Der rote Kreis würde sich an der oberen Halterung genau in die gleiche Richtung drehen, wie der grüne Kreis an der unteren Halterung. Man verliert somit eine Drehrichtung.} + \label{BildReihenfolgeGimbal} +\end{figure} + \subsection{Gimbal-Lock} -Ein weiterer Nachteil der Eulerschen Winkel ist das Gimbal-Lock. Es entsteht dann, wenn der äussere Ring Deckungsgleich über denn Inneren gedreht wird. Dabei verliert das Gimbal eine Drehrichtung, da der äussere und Innere Ring nun die gleiche Drehrichtung besitzen. Dies kann beispielsweise Probleme bei Spielen bei der Berechnung der Interpolation führen. Man hat das bei älteren Spielen dann gesehen, wenn plötzlich Gliedmassen bei den Spielermodellen in unnatürlichen Richtungen gesprungen sind.
\ No newline at end of file +Ein weiterer Nachteil der Eulerschen Winkel ist das Gimbal-Lock. Es entsteht dann, wenn zwei Ringe Deckungsgleich übereinander gedreht werden, wie man im Bild \eqref{BildReihenfolgeGimbal} sieht. Dabei verliert das Gimbal eine Drehrichtung, da der äussere und Innere Ring nun die gleiche Drehrichtung besitzen. Dies kann beispielsweise Probleme bei Spielen bei der Berechnung der Interpolation führen. Man hat dies bei älteren Spielen wie im Bild \ref{BildGimbalLock} dann gesehen, wenn plötzlich Gliedmassen bei den Spielermodellen in unnatürliche Richtungen gesprungen sind. + +\begin{figure} + \centering + \includegraphics[width=10cm]{papers/clifford/Bilder/GimbalLock.png} + \caption{Interpolationsfehler durch Gimbal-Lock} + \label{BildGimbalLock} +\end{figure}
\ No newline at end of file diff --git a/buch/papers/clifford/11_Fazit.tex b/buch/papers/clifford/11_Fazit.tex index 7352399..79a683d 100644 --- a/buch/papers/clifford/11_Fazit.tex +++ b/buch/papers/clifford/11_Fazit.tex @@ -6,4 +6,4 @@ \section{Fazit} \rhead{Fazit} -Die geometrische Algebra ist dafür ausgelegt geometrische Operationen, wie die Spiegelung oder Rotation, einfach zu beschreiben. Dadurch kann sie als gute alternative zu der linearen Algebra angewendet werden, um graphische Probleme zu lösen. Sie kann zudem zum Verständnis hinter der Rotierenden Eigenschaften der komplexen Zahlen und Quaternionen beitragen und die Zusammenhänge zwischen den komplexen Zahlen und den Quaternionen besser zeigen.
\ No newline at end of file +Die geometrische Algebra ist dafür ausgelegt, geometrische Operationen, wie die Spiegelung oder Drehung, einfach zu beschreiben. Dadurch kann sie als gute Alternative zu der linearen Algebra angewendet werden, um grafische Probleme zu lösen. Sie kann zudem zum Verständnis der drehenden Eigenschaften der komplexen Zahlen und Quaternionen beitragen und die Zusammenhänge zwischen den komplexen Zahlen und den Quaternionen zeigen.
\ No newline at end of file diff --git a/buch/papers/clifford/6_PauliMatrizen.tex b/buch/papers/clifford/6_PauliMatrizen.tex index 4438aeb..4e82f28 100644 --- a/buch/papers/clifford/6_PauliMatrizen.tex +++ b/buch/papers/clifford/6_PauliMatrizen.tex @@ -10,33 +10,33 @@ Was ist der beste Weg um einen Computeralgorithmus für die Rechenoperationen in \begin{beispiel} Der Algorithmus weiss, dass er $a\mathbf{e}_1\cdot b\mathbf{e}_1$ zu $ab\cdot1$ vereinfachen kann. Dies ermöglicht zum Beispiel die Vereinfachung \begin{align} - 3\mathbf{e}_1 \cdot 2\mathbf{e}_1 + 3\mathbf{e}_2 \Rightarrow 6 + 3\mathbf{e}_2 + 3\mathbf{e}_1 \cdot 2\mathbf{e}_1 + 3\mathbf{e}_2 \Rightarrow 6 + 3\mathbf{e}_2 \end{align} \end{beispiel} Ein textueller Algorithmus ist aber sehr ineffizient. Die Pauli-Matrizen bilden eine elegante und schnellere Alternative, welche für die dreidimensionale Clifford-Algebra verwendet werden können und alle Operationen aus der Clifford-Algebra gleich wie die Matrixoperationen ausführen lassen. \begin{definition} \label{def:defPauli} Die Matrizen \begin{align} \label{Pauli} - \mathbf{e}_0 = E = - \begin{pmatrix} - 1 & 0 \\ - 0 & 1 - \end{pmatrix},\quad - \mathbf{e}_1 = - \begin{pmatrix} - 0 & 1 \\ - 1 & 0 - \end{pmatrix},\quad - \mathbf{e}_2 = - \begin{pmatrix} - 0 & -j \\ - j & 0 - \end{pmatrix},\quad - \mathbf{e}_3 = - \begin{pmatrix} - 1 & 0 \\ - 0 & -1 - \end{pmatrix} + \mathbf{e}_0 = E = + \begin{pmatrix} + 1 & 0 \\ + 0 & 1 + \end{pmatrix},\quad + \mathbf{e}_1 = + \begin{pmatrix} + 0 & 1 \\ + 1 & 0 + \end{pmatrix},\quad + \mathbf{e}_2 = + \begin{pmatrix} + 0 & -j \\ + j & 0 + \end{pmatrix},\quad + \mathbf{e}_3 = + \begin{pmatrix} + 1 & 0 \\ + 0 & -1 + \end{pmatrix} \end{align} heissen Pauli-Matrizen ($\mathbf{e}_0$ = Skalare) \end{definition} @@ -44,85 +44,85 @@ Die Matrix-Multiplikationen der Pauli-Matrizen führt auf die gleichen algebrais \begin{definition} \label{def:defPauli2} Die Bivektoren und Trivektoren hergeleitet aus den Pauli-Matrizen sind \begin{align} \label{Pauli2} - \mathbf{e}_{12} = - \begin{pmatrix} - j & 0 \\ - 0 & -j - \end{pmatrix}\quad - \mathbf{e}_{23} = - \begin{pmatrix} - 0 & j \\ - j & 0 - \end{pmatrix}\quad - \mathbf{e}_{31} = - \begin{pmatrix} - 0 & 1 \\ - -1 & 0 - \end{pmatrix}\enspace\text{und}\enspace - \mathbf{e}_{123} = - \begin{pmatrix} - j & 0 \\ - 0 & j - \end{pmatrix}. - \end{align} -\end{definition} -Dabei ist wichtig, dass sich die Matrizen gleich verhalten, wie es die Clifford-Algebra für die Basiselemente definiert hat. Zum Beispiel gilt in der Clifford-Algebra $\mathbf{e}_1^2=\mathbf{e}_0$ und $\mathbf{e}_{12}^2=-\mathbf{e}_0$, genau die selbe Relation gilt auch für die zugehörigen Matrizen, wie man durch die Matrizenrechnungen -\begin{align} - \mathbf{e}_1^2 &= + \mathbf{e}_{12} = \begin{pmatrix} - 0 & 1 \\ - 1 & 0 - \end{pmatrix}^2 = + j & 0 \\ + 0 & -j + \end{pmatrix}\quad + \mathbf{e}_{23} = \begin{pmatrix} - 1 & 0 \\ - 0 & 1 - \end{pmatrix}= \mathbf{e}_0 \quad\text{und}\\ - \mathbf{e}_{12}^2 &= + 0 & j \\ + j & 0 + \end{pmatrix}\quad + \mathbf{e}_{31} = \begin{pmatrix} - j & 0 \\ - 0 & -j - \end{pmatrix}^2 = + 0 & 1 \\ + -1 & 0 + \end{pmatrix}\enspace\text{und}\enspace + \mathbf{e}_{123} = \begin{pmatrix} - -1 & 0 \\ - 0 & -1 - \end{pmatrix} = -\mathbf{e}_0 + j & 0 \\ + 0 & j + \end{pmatrix}. + \end{align} +\end{definition} +Dabei ist wichtig, dass sich die Matrizen gleich verhalten, wie es die Clifford-Algebra für die Basiselemente definiert hat. Zum Beispiel gilt in der Clifford-Algebra $\mathbf{e}_1^2=\mathbf{e}_0$ und $\mathbf{e}_{12}^2=-\mathbf{e}_0$, genau die selbe Relation gilt auch für die zugehörigen Matrizen, wie man durch die Matrizenrechnungen +\begin{align} +\mathbf{e}_1^2 &= +\begin{pmatrix} +0 & 1 \\ +1 & 0 +\end{pmatrix}^2 = +\begin{pmatrix} +1 & 0 \\ +0 & 1 +\end{pmatrix}= \mathbf{e}_0 \quad\text{und}\\ +\mathbf{e}_{12}^2 &= +\begin{pmatrix} +j & 0 \\ +0 & -j +\end{pmatrix}^2 = +\begin{pmatrix} +-1 & 0 \\ +0 & -1 +\end{pmatrix} = -\mathbf{e}_0 \end{align} -bestätigt. Man kann bei den Definitionen \ref{def:defPauli} und \ref{def:defPauli2} sehen, dass alle Matrizen linear unabhängig voneinander sind. Das bedeutet, dass wenn man die Matrizen der Basiselemente normal addiert und zu einer Matrix zusammenfasst, kann man anschliessend die einzelnen Anteile der Basiselemente wieder herausgelesen. +bestätigt. Man kann bei den Definitionen \ref{def:defPauli} und \ref{def:defPauli2} sehen, dass alle Matrizen linear unabhängig voneinander sind. Das bedeutet, dass wenn man die Matrizen der Basiselemente normal addiert und zu einer Matrix zusammenfasst, kann man anschliessend die einzelnen Anteile der Basiselemente wieder herauslesen. \begin{hilfssatz} Ein beliebiger Multivektor \begin{align} \label{MultiVektorAllg} - M = a_0\mathbf{e}_0 + a_1\mathbf{e}_1 + a_2\mathbf{e}_3 + a_{12}\mathbf{e}_{12} + a_{23}\mathbf{e}_{23} + a_{31}\mathbf{e}_{31} + a_{123}\mathbf{e}_{123} + M = a_0\mathbf{e}_0 + a_1\mathbf{e}_1 + a_2\mathbf{e}_3 + a_{12}\mathbf{e}_{12} + a_{23}\mathbf{e}_{23} + a_{31}\mathbf{e}_{31} + a_{123}\mathbf{e}_{123} \end{align} erhält durch das einsetzten der Formel Matrizen \eqref{Pauli} und \eqref{Pauli2} die Form \begin{align} - M = - \begin{pmatrix} - (a_0+a_3) + (a_{12}+a_{123})j & (a_1+a_{31})+(-a_2+a_{23})j \\ - (a_1-a_{31})+(a_2+a_{23})j & (a_0-a_3)+(-a_{12}+a_{123})j - \end{pmatrix}.\label{MultivektorMatirx} + M = + \begin{pmatrix} + (a_0+a_3) + (a_{12}+a_{123})j & (a_1+a_{31})+(-a_2+a_{23})j \\ + (a_1-a_{31})+(a_2+a_{23})j & (a_0-a_3)+(-a_{12}+a_{123})j + \end{pmatrix}.\label{MultivektorMatirx} \end{align} \end{hilfssatz} Die Anteile treten zudem immer paarweise auf und können somit immer je durch zwei Gleichungen bestimmt werden. \begin{beispiel} Die Matrix \begin{align} - M &= - \begin{pmatrix} - 1 & 0 \\ - 0 & -1j - \end{pmatrix} + M &= + \begin{pmatrix} + 1 & 0 \\ + 0 & -1j + \end{pmatrix} \end{align} soll als Multivektor in der Form \eqref{MultiVektorAllg} geschrieben werden. Dafür entnehmen wir aus \eqref{MultivektorMatirx} die Gleichungen \begin{align} - a_0 + a_3 = 1,\quad a_0 - a_3 = 0,\quad a_{12}+a_{123} = 0\enspace\text{und}\enspace -a_{12}+a_{123}=-1 + a_0 + a_3 = 1,\quad a_0 - a_3 = 0,\quad a_{12}+a_{123} = 0\enspace\text{und}\enspace -a_{12}+a_{123}=-1, \end{align} aus denen man auf \begin{align} - a_0 = \dfrac{1}{2},\quad a_3 = \dfrac{1}{2},\quad a_{12}=\dfrac{1}{2}\enspace\text{und}\enspace a_{123}=-\dfrac{1}{2} + a_0 = \dfrac{1}{2},\quad a_3 = \dfrac{1}{2},\quad a_{12}=\dfrac{1}{2}\enspace\text{und}\enspace a_{123}=-\dfrac{1}{2} \end{align} schliessen kann. Da die restlichen Realteile und Imaginärteile 0 sind, werden die anderen Anteile ebenfalls 0 sein. Daher ist \begin{align} - M = \dfrac{1}{2} \mathbf{e}_0+ \dfrac{1}{2} \mathbf{e}_3 + \dfrac{1}{2} \mathbf{e}_{12} - \dfrac{1}{2} \mathbf{e}_{123}. + M = \dfrac{1}{2} \mathbf{e}_0+ \dfrac{1}{2} \mathbf{e}_3 + \dfrac{1}{2} \mathbf{e}_{12} - \dfrac{1}{2} \mathbf{e}_{123}. \end{align} \end{beispiel} Die Clifford-Algebra ist bei der Darstellung durch Matrizen kein Ausnahmefall. Es lässt sich theoretisch jede algebraische Struktur durch Matrizen darstellen.
\ No newline at end of file diff --git a/buch/papers/clifford/7_Spiegelung.tex b/buch/papers/clifford/7_Spiegelung.tex index 549848c..c79d908 100644 --- a/buch/papers/clifford/7_Spiegelung.tex +++ b/buch/papers/clifford/7_Spiegelung.tex @@ -6,55 +6,55 @@ \section{Spiegelung} \rhead{Spiegelung} -Die Spiegelung ist eine grundlegende, geometrische Operation, aus welcher man weitere Operationen, wie beispielsweise die später beschriebene Rotation, ableiten kann. Da die geometrische Algebra für geometrische Anwendungen ausgelegt ist, sollte die Spiegelung auch eine einfache, praktische Formulierung besitzen. +Die Spiegelung ist eine grundlegende, geometrische Operation, aus welcher man weitere Operationen, wie beispielsweise die später beschriebene Drehung, ableiten kann. Da die geometrische Algebra für geometrische Anwendungen ausgelegt ist, sollte die Spiegelung auch eine einfache, praktische Formulierung besitzen. \begin{figure} \centering \begin{tikzpicture} - \draw[thin,gray!40] (-3,-1) grid (3,3); - \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; - \draw[<->] (0,-1)--(0,3) node[above]{$a_2$}; - \draw[blue, line width=1.0pt] (0,3)--(0,-1) node[anchor=south east]{$\sigma_u$}; - \draw[line width=2pt,black,-stealth](0,0)--(2,2) node[anchor=south east]{$\boldsymbol{v}$}; - \draw[line width=2pt,black,-stealth](0,0)--(-2,2) node[anchor=south east]{$\boldsymbol{v'}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(1,0) node[anchor=north]{$\boldsymbol{e_1}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(0,1) node[anchor=north east]{$\boldsymbol{e_2}$}; - \draw[line width=1.5pt,red,-stealth](0,2)--(2,2) node[xshift=-1cm, yshift= - 0.25cm]{$\boldsymbol{v_{\perp u}}$}; - \draw[line width=1.5pt,red,-stealth](-2,2)--(0,2) node[xshift=-1cm, yshift= - 0.25cm]{$\boldsymbol{v_{\perp u}}$}; - \draw[line width=1.5pt,blue,-stealth](0,0.05)--(1,0.05) node[xshift=-0.5cm, yshift=-0.25cm]{$\boldsymbol{\hat{u}}$}; + \draw[thin,gray!40] (-3,-1) grid (3,3); + \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; + \draw[<->] (0,-1)--(0,3) node[above]{$a_2$}; + \draw[blue, line width=1.0pt] (0,3)--(0,-1) node[anchor=south east]{$\sigma_u$}; + \draw[line width=2pt,black,-stealth](0,0)--(2,2) node[anchor=south east]{$\boldsymbol{v}$}; + \draw[line width=2pt,black,-stealth](0,0)--(-2,2) node[anchor=south east]{$\boldsymbol{v'}$}; + \draw[line width=1.5pt,gray,-stealth](0,0)--(1,0) node[anchor=north]{$\boldsymbol{e_1}$}; + \draw[line width=1.5pt,gray,-stealth](0,0)--(0,1) node[anchor=north east]{$\boldsymbol{e_2}$}; + \draw[line width=1.5pt,red,-stealth](0,2)--(2,2) node[xshift=-1cm, yshift= + 0.25cm]{$\boldsymbol{v_{\parallel u}}$}; + \draw[line width=1.5pt,red,-stealth](-2,2)--(0,2) node[xshift=-1cm, yshift= + 0.25cm]{$\boldsymbol{v_{\parallel u}}$}; + \draw[line width=1.5pt,blue,-stealth](0,0.05)--(1,0.05) node[xshift=-0.5cm, yshift=-0.25cm]{$\boldsymbol{\hat{u}}$}; \end{tikzpicture} \caption{Spiegelung des Vektors $\mathbf{v}$ an der Spiegelebene $\sigma_u$ mit dem Normalenvektor $\mathbf{\hat{u}}$} \label{BildSpiegelung} \end{figure} \subsection{Linearen Algebra} -Aus der linearen Algebra ist bekannt, dass man eine Spiegelung an einer Ebene wie folgt beschreiben kann. +Aus der linearen Algebra ist bekannt, dass man eine Spiegelung an einer Ebene, wie in Abbildung \ref{BildSpiegelung} gezeigt, wie folgt beschreiben kann. \begin{definition} Die Abbildung der Spiegelung in der linearen Algebra mit dem Normalenvektor $\mathbf{\hat{u}}$ zur Spiegelebene ist \begin{equation} \label{RefLinAlg} - \mathbf{v} = \mathbf{v_{\perp u}} + \mathbf{v_{\parallel u}} \enspace\mapsto\enspace \mathbf{v'} = \mathbf{v_{\perp u}} - \mathbf{v_{\parallel u}} = \mathbf{v} - 2 \cdot \mathbf{v_{\parallel u}}. + \mathbf{v} = \mathbf{v_{\perp u}} + \mathbf{v_{\parallel u}} \enspace\mapsto\enspace \mathbf{v'} = \mathbf{v_{\perp u}} - \mathbf{v_{\parallel u}} = \mathbf{v} - 2 \cdot \mathbf{v_{\parallel u}}. \end{equation} \end{definition} Es scheint für diese Formel \eqref{RefLinAlg} aber umständlich zu sein, weitere Spiegelungen mit weiteren Spiegelebenen anzufügen. Weil man $\mathbf{v_{\parallel u}}$ auch als Skalarprodukt $\mathbf{v_{\parallel u}} = \mathbf{\hat{u}} \cdot \mathbf{v}$ schreiben kann, ist es leicht diese Abbildung auch als Matrix darzustellen. Sei $\mathbf{\hat{u}}$ ein Normalenvektor auf die Spiegelungsebene, also $\mathbf{\hat{u}}\perp \sigma_u$, und sei ausserdem normiert $|\mathbf{\hat{u}}| = 1$, dann kann man die Spiegelung durch die Matrix \begin{align} - S = E - 2\mathbf{\hat{u}\hat{u}}^t +S = E - 2\mathbf{\hat{u}\hat{u}}^t \end{align} -beschrieben werden. In der zweiten und dritten Dimension ergibt die Berechnung +beschrieben werden. In zwei und drei Dimensionen ergibt die Berechnung \begin{align} \label{Spiegelmatrizen} - S_2 = \begin{pmatrix} - 1-2u_1^2 & -2u_1u_2 \\ - -2u_1u_2 & 1-2u_2^2 - \end{pmatrix}\enspace\text{und}\enspace - S_3 = \begin{pmatrix} - 1-2u_1^2 & -2u_1u_2 & -2u_1u_3\\ - -2u_1u_2 & 1-2u_2^2 & -2u_2u_3\\ - -2u_1u_3 & -2u_2u_3 & 1-2u_3^2\\ - \end{pmatrix}. +S_2 = \begin{pmatrix} +1-2u_1^2 & -2u_1u_2 \\ +-2u_1u_2 & 1-2u_2^2 +\end{pmatrix}\quad\text{und}\quad +S_3 = \begin{pmatrix} +1-2u_1^2 & -2u_1u_2 & -2u_1u_3\\ +-2u_1u_2 & 1-2u_2^2 & -2u_2u_3\\ +-2u_1u_3 & -2u_2u_3 & 1-2u_3^2\\ +\end{pmatrix}. \end{align} -Diese Spiegelmatrizen gehören der orthogonalen Matrizengruppe $S_n\in \text{O}(n)$ an. Die Matrizengruppe $\text{O}(n)$ haben die Eigenschaft $S_n^t S_n = E$, was bedeutet, dass die Länge und Winkel bei der Abbildung beibehalten bleiben. Zusätzlich sind die Spiegelmatrizen symmetrisch, es gilt $S_n^t = S_n$. Somit liefert zweimal dieselbe Spiegelung wieder die identische Abbildung, wie man aus +Diese Spiegelmatrizen gehören der orthogonalen Matrizengruppe $S_n\in \text{O}(n)$ an. Die Matrizengruppe $\text{O}(n)$ hat die Eigenschaft $S_n^t S_n = E$, was bedeutet, dass die Länge und Winkel bei der Abbildung beibehalten bleiben. Zusätzlich sind die Spiegelmatrizen symmetrisch, es gilt $S_n^t = S_n$. Somit liefert zweimal dieselbe Spiegelung wieder die identische Abbildung, wie man aus \begin{align} - S_n^t S_n = S_n^2 = E +S_n^t S_n = S_n^2 = E \end{align} schliessen kann. @@ -63,33 +63,38 @@ Wir definieren zuerst die Inverse eines Vektors, welche in dieser Form nicht in \begin{definition} Die Inverse eines Vektors wird definiert als \begin{align} \label{InverseGA} - \mathbf{u}^{-1} = \dfrac{\mathbf{u}}{|\mathbf{u}|^2}. + \mathbf{u}^{-1} = \dfrac{\mathbf{u}}{|\mathbf{u}|^2}. \end{align} \end{definition} Diese Definition ist sinnvoll, da wegen $\mathbf{u}^2 = |\mathbf{u}|^2$ folgt \begin{align} - \mathbf{uu}^{-1} = \mathbf{u} \frac{\mathbf{u}}{|\mathbf{u}|^2} = \frac{\mathbf{u}^2}{|\mathbf{u}|^2} = \frac{|\mathbf{u}|^2}{|\mathbf{u}|^2} = 1. +\mathbf{uu}^{-1} = \mathbf{u} \frac{\mathbf{u}}{|\mathbf{u}|^2} = \frac{\mathbf{u}^2}{|\mathbf{u}|^2} = \frac{|\mathbf{u}|^2}{|\mathbf{u}|^2} = 1. \end{align} Der Vektor $\mathbf{u}^{-1}$ in \eqref{InverseGA} ist also tatsächlich das inverse Element im Sinne des Produktes in der geometrischen Algebra. Die geometrische Algebra leitet aus der obigen Formel \eqref{RefLinAlg} für eine Spiegelung eine einfache und intuitive Form her, welche auch für weitere Operationen erweitert werden kann. \begin{definition} Die Abbildung der Spiegelung in der geometrischen Algebra mit dem senkrechten Vektor $\mathbf{u}$ zur Spiegelungsebene $\sigma_u$ ist \begin{align}\label{RefGA} - \mathbf{v} \enspace\mapsto\enspace \mathbf{v}' = -\mathbf{uvu}^{-1} + \mathbf{v} \enspace\mapsto\enspace \mathbf{v}' = -\mathbf{uvu}^{-1} \end{align} \end{definition} -Diese Abbildung muss stimmen, weil man durch die Schlussfolgerungen \eqref{uperpv} und \eqref{uparallelv} die Zusammenhänge +Um zu überprüfen, ob die Spiegelungsgleichung \eqref{RefGA} wirklich eine Spiegelung ist, setzen wir zuerst in diese Gleichung $\mathbf{v} = \mathbf{v_{\perp u}} + \mathbf{v_{\parallel u}}$ ein. Wir bekommen somit \begin{align} - \mathbf{uv_{\perp u}} = -\mathbf{v_{\perp u}u} \enspace\text{und}\enspace \mathbf{uv_{\parallel u}}=\mathbf{v_{\parallel u}u} +\mathbf{v}' = -\mathbf{uv_{\perp u}u}^{-1} - \mathbf{uv_{\parallel u}u}^{-1}. \end{align} -der geometrischen Produkte findet und somit die Abbildung aus der geometrischen Algebra \eqref{RefGA} wegen +Danach können wir mit Hilfe der aus der Schlussfolgerung \eqref{uperpv} und \eqref{uparallelv} hergeleiteten Zusammenhänge \begin{align} - \mathbf{v}' = -\mathbf{uvu}^{-1} = -\mathbf{uv_{\perp u}u}^{-1} - \mathbf{uv_{\parallel u}u}^{-1} = -(-\mathbf{v_{\perp u}}\underbrace{\mathbf{u})\mathbf{u}^{-1}}_{1} -(\mathbf{v_{\parallel u}}\underbrace{\mathbf{u})\mathbf{u}^{-1}}_{1} = \mathbf{v_{\perp u}} - \mathbf{v_{\parallel u}} +\mathbf{uv_{\perp u}} = -\mathbf{v_{\perp u}u} \quad\text{und}\quad \mathbf{uv_{\parallel u}}=\mathbf{v_{\parallel u}u}, \end{align} +die Gleichung weiter umformen zu +\begin{align} +\mathbf{v}' = -(-\mathbf{v_{\perp u}}\underbrace{\mathbf{u})\mathbf{u}^{-1}}_{1} -(\mathbf{v_{\parallel u}}\underbrace{\mathbf{u})\mathbf{u}^{-1}}_{1} = \mathbf{v_{\perp u}} - \mathbf{v_{\parallel u}}. +\end{align} +Man sieht, dass das Resultat $\mathbf{v}' = \mathbf{v_{\perp u}} - \mathbf{v_{\parallel u}}$ gleichbedeutend zu der Definition \eqref{RefLinAlg} der Spiegelung ist. Verwendet man für $\mathbf{u}$ nur einen Einheitsvektor $\mathbf{\hat{u}}$, welcher die Länge 1 besitzt, wird die Gleichung \eqref{RefGA} zu \begin{align} - \mathbf{v'} = -\mathbf{\hat{u}v\hat{u}} +\mathbf{v'} = -\mathbf{\hat{u}v\hat{u}} \end{align} -vereinfacht. Im Gegensatz zu den Abbildungen in der linearen Algebra, welche in jeder anderen Dimension, durch andere Matrizen \eqref{Spiegelmatrizen} beschrieben werden müssen, ist es in der geometrischen Algebra immer der gleiche Vorgehensweise. Zudem ist diese kompakte Schreibweise in der linearen Algebra nicht möglich, da bis auf das Vektorprodukt in der dritten Dimension keine Multiplikation von Vektoren definiert ist.
\ No newline at end of file +vereinfacht. Im Gegensatz zu den Abbildungen in der linearen Algebra, welche in jeder anderen Dimension, durch andere Matrizen \eqref{Spiegelmatrizen} beschrieben werden müssen, ist es in der geometrischen Algebra immer der gleiche Vorgehensweise. Zudem ist diese kompakte Schreibweise in der linearen Algebra nicht möglich, da bis auf das Vektorprodukt in drei Dimensionen keine Multiplikation von Vektoren definiert ist.
\ No newline at end of file diff --git a/buch/papers/clifford/8_Rotation.tex b/buch/papers/clifford/8_Rotation.tex index 1d5e889..43d8f8a 100644 --- a/buch/papers/clifford/8_Rotation.tex +++ b/buch/papers/clifford/8_Rotation.tex @@ -3,64 +3,76 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Rotation} -\rhead{Rotation} +\section{Drehung} +\rhead{Drehung} -Eine Rotation kann man aus zwei aufeinanderfolgenden Spiegelungen bilden. Das kann vielleicht zuerst eine verwirrende Aussage sein, da man aus den vorherig gezeigten Formeln annehmen könnte, dass die Spiegelung schon für eine Drehung ausreicht. Obwohl sich die Längen, Winkel und Volumen sich bei einer Spiegelung, wie bei einer Rotation, nicht ändert, sind sie doch verschieden, da die Orientierung bei der Spiegelung invertiert wird. Stellt man sich beispielsweise ein Objekt im Dreidimensionalen vor und spiegelt dieses an einer Fläche, dann ist es unmöglich nur durch eine Rotation (egal an welchem Punkt) das ursprüngliche Objekt deckungsgleich auf das Gespiegelte zu drehen. Hingegen ist es wiederum möglich ein zweifach gespiegeltes Objekt durch eine Drehung zu erreichen. Das liegt daran, da die Orientierung zweimal invertiert wurde. -\\(Hier wird noch ein Bild für das Verständnis eingefügt) +Eine Drehung kann man aus zwei aufeinanderfolgenden Spiegelungen bilden. Das kann vielleicht zuerst eine verwirrende Aussage sein, da man aus den vorherig gezeigten Formeln annehmen könnte, dass die Spiegelung schon für eine Drehung ausreicht. Obwohl sich die Längen, Winkel und Volumen sich bei einer Spiegelung, wie bei einer Drehung, nicht ändert, sind sie doch verschieden, da die Orientierung bei der Spiegelung invertiert wird. Stellt man sich, wie im Bild \ref{BildSpiegRot} dargestellt, beispielsweise ein Objekt vor und spiegelt dieses an einer Ebene, dann ist es unmöglich, nur durch eine Drehung (egal an welchem Punkt) das ursprüngliche Objekt deckungsgleich auf das Gespiegelte zu drehen. Hingegen ist es wiederum möglich ein zweifach gespiegeltes Objekt durch eine Drehung zu erreichen. Das liegt daran, da die Orientierung zweimal invertiert wurde. + +\begin{figure} + \centering + \includegraphics[width=10cm]{papers/clifford/images/spiegelung.pdf} + \caption{Der wesentliche Unterschied zwischen Spiegelung und Drehung ist die Umkehrung der Orientierung} + \label{BildSpiegRot} +\end{figure} \begin{figure} \centering \begin{tikzpicture} - \draw[thin,gray!40] (-3,-1) grid (3,3); - \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; - \draw[<->] (0,-1)--(0,3) node[above]{$a_2$}; - \draw[line width=1.0pt,green,-stealth](2,2)--(-2,2) node[anchor=south west]{$\boldsymbol{-2v_{\parallel u}}$}; - \draw[line width=1.0pt,green,-stealth](-2,2)--(-2.828,0) node[anchor=north west]{$\boldsymbol{-2v'_{\parallel w}}$}; - \draw[blue, line width=1.0pt] (0,3)--(0,-1) node[anchor=south east]{$\sigma_u$}; - \draw[red, line width=1.0pt] (-3,1.24)--(2.21,-1) node[anchor=south]{$\sigma_w$}; - \draw[line width=2pt,black,-stealth](0,0)--(2,2) node[anchor=south east]{$\boldsymbol{v}$}; - \draw[line width=1.5pt,blue,-stealth](0,0)--(2.5, 0) node[anchor=south east]{$\boldsymbol{u}$}; - \draw[line width=2pt,black,-stealth](0,0)--(-2,2) node[anchor=south east]{$\boldsymbol{v'}$}; - \draw[line width=1.5pt,red,-stealth](0,0)--(0.957, 2.31) node[anchor=south east]{$\boldsymbol{w}$}; - \draw[line width=2pt,black,-stealth](0,0)--(-2.828,0) node[anchor=south east]{$\boldsymbol{v''}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(1,0) node[anchor=north]{$\boldsymbol{e_1}$}; - \draw[line width=1.5pt,gray,-stealth](0,0)--(0,1) node[anchor=north east]{$\boldsymbol{e_2}$}; - - \coordinate (A) at (0,0); - \coordinate (B) at (2.5,0); - \coordinate (C) at (0.957, 2.31); - \tikzset{anglestyle/.style={angle eccentricity=1.25, purple, draw, thick, angle radius=1cm}} - \draw pic ["$\theta$", anglestyle] {angle = B--A--C}; - \coordinate (D) at (0,0); - \coordinate (E) at (1,1); - \coordinate (F) at (-1, 0); - \tikzset{anglestyle/.style={angle eccentricity=1.25, purple, draw, thick, angle radius=1.25cm}} - \draw pic ["$2\theta$", anglestyle] {angle = E--D--F}; + \draw[thin,gray!40] (-3,-1) grid (3,3); + \draw[<->] (-3,0)--(3,0) node[right]{$a_1$}; + \draw[<->] (0,-1)--(0,3) node[above]{$a_2$}; + \draw[line width=1.0pt,green,-stealth](2,2)--(-2,2) node[anchor=south west]{$\boldsymbol{-2v_{\parallel u}}$}; + \draw[line width=1.0pt,green,-stealth](-2,2)--(-2.828,0) node[anchor=north west]{$\boldsymbol{-2v'_{\parallel w}}$}; + \draw[blue, line width=1.0pt] (0,3)--(0,-1) node[anchor=south east]{$\sigma_u$}; + \draw[red, line width=1.0pt] (-3,1.24)--(2.21,-1) node[anchor=south]{$\sigma_w$}; + \draw[line width=2pt,black,-stealth](0,0)--(2,2) node[anchor=south east]{$\boldsymbol{v}$}; + \draw[line width=1.5pt,blue,-stealth](0,0)--(2.5, 0) node[anchor=south east]{$\boldsymbol{u}$}; + \draw[line width=2pt,black,-stealth](0,0)--(-2,2) node[anchor=south east]{$\boldsymbol{v'}$}; + \draw[line width=1.5pt,red,-stealth](0,0)--(0.957, 2.31) node[anchor=south east]{$\boldsymbol{w}$}; + \draw[line width=2pt,black,-stealth](0,0)--(-2.828,0) node[anchor=south east]{$\boldsymbol{v''}$}; + \draw[line width=1.5pt,gray,-stealth](0,0)--(1,0) node[anchor=north]{$\boldsymbol{e_1}$}; + \draw[line width=1.5pt,gray,-stealth](0,0)--(0,1) node[anchor=north east]{$\boldsymbol{e_2}$}; + + \coordinate (A) at (0,0); + \coordinate (B) at (2.5,0); + \coordinate (C) at (0.957, 2.31); + \tikzset{anglestyle/.style={angle eccentricity=1.25, purple, draw, thick, angle radius=1cm}} + \draw pic ["$\theta$", anglestyle] {angle = B--A--C}; + \coordinate (D) at (0,0); + \coordinate (E) at (1,1); + \coordinate (F) at (-1, 0); + \tikzset{anglestyle/.style={angle eccentricity=1.25, purple, draw, thick, angle radius=1.25cm}} + \draw pic ["$2\theta$", anglestyle] {angle = E--D--F}; \end{tikzpicture} - \caption{Rotation des Vektors $\textbf{v}$ um $2\theta$} - \label{BildRotation} + \caption{Drehung des Vektors $\textbf{v}$ um $2\theta$} + \label{BildDrehung} \end{figure} \subsection{Linearen Algebra} In der linearen Algebra haben wir Drehungen durch die Matrizen der Gruppe $\text{SO}(n)$ beschrieben. Beispielsweise besteht $\text{SO}(2)$ aus den Matrizen \begin{align} - D = - \begin{pmatrix} - \cos(\alpha) & \sin(\alpha) \\ - -\sin(\alpha) & \cos(\alpha) - \end{pmatrix},\quad - \alpha \in [0, 2\pi). -\end{align} -Diese Drehmatrizen gehören der speziellen orthogonalen Matrizengruppe $D\in \text{SO}(n) = \text{SL}_n(\mathbb{R})\enspace \cap \enspace \text{O}(n)$ an. $\text{SL}_n(\mathbb{R})$ beinhaltet die Matrizen mit scherenden Eigenschaften. Diese Drehmatrizen haben die Eigenschaft $D^t D = E \enspace \land \enspace \det(D)=1$. Da $\det(D) = 1$ und nicht $-1$ sein kann fallen alle Spiegelungen aus der Menge heraus. $\det(D) = -1$ bedeutet, dass eine Orientierungsinversion stattfindet. -\\(BILD Mengen Spezieller Matrizen von Herrn Müller Präsentation) +D = +\begin{pmatrix} +\cos(\alpha) & \sin(\alpha) \\ +-\sin(\alpha) & \cos(\alpha) +\end{pmatrix},\quad +\alpha \in [0, 2\pi). +\end{align} +Diese Drehmatrizen gehören der speziellen orthogonalen Matrizengruppe $D\in \text{SO}(n) = \text{SL}_n(\mathbb{R})\enspace \cap \enspace \text{O}(n)$ an. $\text{SL}_n(\mathbb{R})$ beinhaltet die Matrizen mit scherenden Eigenschaften. Die Drehmatrizen haben die Eigenschaft $D^t D = E \enspace \land \enspace \det(D)=1$. Da $\det(D) = 1$ und nicht $-1$ sein kann fallen alle Spiegelungen aus der Menge heraus. $\det(D) = -1$ bedeutet, dass eine Orientierungsinversion stattfindet. Eine übersichtliche Darstellung der beschriebenen Matrizengruppen sieht man in der Abbildung \ref{BildMatrizenGruppen} + +\begin{figure} + \centering + \includegraphics[width=10cm]{papers/clifford/Bilder/MatrizenGruppen.png} + \caption{Matrizengruppen} + \label{BildMatrizenGruppen} +\end{figure} \subsection{Geometrische Algebra} -Da wir jetzt aus der Geometrie wissen, dass eine Rotation durch zwei Spiegelungen gebildet werden kann, können wir die Rotation mit der Formel \eqref{RefGA} einfach herleiten. +Da wir jetzt aus der Geometrie wissen, dass eine Drehung durch zwei Spiegelungen gebildet werden kann, können wir die Drehung mit der Formel \eqref{RefGA} einfach herleiten. \begin{satz} - Durch zwei nacheinander auf einen Vektor $\mathbf{v}$ angewendete Spiegelungen lässt sich eine Rotation + Durch zwei nacheinander auf einen Vektor $\mathbf{v}$ angewendete Spiegelungen lässt sich eine Drehung \begin{align} \label{rotGA} - \mathbf{v}'' = -\mathbf{wv}'\mathbf{w}^{-1} = -\mathbf{w}(-\mathbf{uvu}^{-1})\mathbf{w}^{-1} = (\mathbf{wu})\mathbf{v}(\mathbf{u}^{-1}\mathbf{w}^{-1}) + \mathbf{v}'' = -\mathbf{wv}'\mathbf{w}^{-1} = -\mathbf{w}(-\mathbf{uvu}^{-1})\mathbf{w}^{-1} = (\mathbf{wu})\mathbf{v}(\mathbf{u}^{-1}\mathbf{w}^{-1}) \end{align} beschreiben. \end{satz} @@ -68,120 +80,119 @@ Die Vektoren $\mathbf{w}$ und $\mathbf{u}$ bilden hier wiederum die Spiegelachse \subsubsection{Exponentialform} Dazu leiten wir zuerst die Exponentialform eines Vektors her. Es wird dabei zur Vereinfachung davon ausgegangen, dass alle Vektoren $\mathbf{w}, \mathbf{u}, \mathbf{v}$ in der $\mathbf{e}_{1}$-$\mathbf{e}_{2}$-Ebene liegen. Weitere Drehungen können in höheren Dimensionen durch Linearkombinationen von Drehungen in den $\mathbf{e}_{i}$-$\mathbf{e}_{j}$-Ebenen $(i\not=j)$ erreicht werden. Für die Herleitung ersetzen wir als erstes in der Polarform \begin{align} - \mathbf{w} = |\mathbf{w}| \left(\cos(\theta_w) \mathbf{e}_1 + \sin(\theta_w) \mathbf{e}_2\right) +\mathbf{w} = |\mathbf{w}| \left(\cos(\theta_w) \mathbf{e}_1 + \sin(\theta_w) \mathbf{e}_2\right) \end{align} eines Vektors einen Faktor 1 durch $1=\mathbf{e}_1^2$ und erhalten beim Sinus \begin{align}\label{e1ausklammern} - \mathbf{w} &= |\mathbf{w}| \left(\cos(\theta_w) \mathbf{e}_1 + \sin(\theta_w) \mathbf{e}_1\mathbf{e}_1\mathbf{e}_2\right). +\mathbf{w} &= |\mathbf{w}| \left(\cos(\theta_w) \mathbf{e}_1 + \sin(\theta_w) \mathbf{e}_1\mathbf{e}_1\mathbf{e}_2\right). \end{align} In einem zweiten Schritt klammern wir $\mathbf{e}_1$ aus, dies ergibt \begin{align} - \mathbf{w} = |\mathbf{w}|\mathbf{e}_1\left(\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12}\right). \label{ExponentialGA} +\mathbf{w} = |\mathbf{w}|\mathbf{e}_1\left(\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12}\right). \label{ExponentialGA} \end{align} Die Ähnlichkeit des Klammerausdrucks in der Formel \eqref{ExponentialGA} zu der Eulerschen Formel bei den komplexen Zahlen ist nun schon gut erkennbar. Versuchen wir nun mithilfe der Reihenentwicklungen \begin{align} - \sin(\theta_w)\mathbf{e}_{12}&=\sum _{n=0}^{\infty }(-1)^{n}{\frac {\theta_w^{2n+1}}{(2n+1)!}}\mathbf{e}_{12} =\theta_w\mathbf{e}_{12}-{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}-\cdots \\ - \cos(\theta_w)&=\sum _{n=0}^{\infty }(-1)^{n}{\frac {\theta_w^{2n}}{(2n)!}} =1-{\frac {\theta_w^{2}}{2!}}+{\frac {\theta_w^{4}}{4!}}-\cdots +\sin(\theta_w)\mathbf{e}_{12}&=\sum _{n=0}^{\infty }(-1)^{n}{\frac {\theta_w^{2n+1}}{(2n+1)!}}\mathbf{e}_{12} =\theta_w\mathbf{e}_{12}-{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}-\cdots \\ +\cos(\theta_w)&=\sum _{n=0}^{\infty }(-1)^{n}{\frac {\theta_w^{2n}}{(2n)!}} =1-{\frac {\theta_w^{2}}{2!}}+{\frac {\theta_w^{4}}{4!}}-\cdots \end{align} diesen Zusammenhang auch hier herzustellen. Setzt man diese beiden Reihenentwicklungen in \eqref{ExponentialGA} ein, erhält man \begin{align} - \cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12} &= 1+\theta_w\mathbf{e}_{12}-{\frac {\theta_w^{2}}{2!}}-{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}+{\frac {\theta_w^{4}}{4!}}+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}-\cdots +\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12} &= 1+\theta_w\mathbf{e}_{12}-{\frac {\theta_w^{2}}{2!}}-{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}+{\frac {\theta_w^{4}}{4!}}+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}-\cdots \end{align} Dies sieht noch nicht wie eine Exponentialreihe aus, da $\mathbf{e}_{12}$ nur in jedem zweiten Term auftritt. Da aber $\mathbf{e}_{12}=-1$ gibt, erhält man für \begin{align} - e^{\theta_w\mathbf{e}_{12}} = 1 \mathbf{e}_{12}^0+\theta_w\mathbf{e}_{12}^1+{\frac {\theta_w^{2}}{2!}}\mathbf{e}_{12}^2+{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}^3+{\frac {\theta_w^{4}}{4!}}\mathbf{e}_{12}^4+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}^5+\cdots - \label{ExponentialGA2} +e^{\theta_w\mathbf{e}_{12}} = 1 \mathbf{e}_{12}^0+\theta_w\mathbf{e}_{12}^1+{\frac {\theta_w^{2}}{2!}}\mathbf{e}_{12}^2+{\frac {\theta_w^{3}}{3!}}\mathbf{e}_{12}^3+{\frac {\theta_w^{4}}{4!}}\mathbf{e}_{12}^4+{\frac {\theta_w^{5}}{5!}}\mathbf{e}_{12}^5+\cdots +\label{ExponentialGA2} \end{align} Man sieht, dass die beiden Reihen übereinstimmen. Es folgt somit \begin{align}\label{EulerGA} - e^{\theta_w \mathbf{e}_{12}} = \cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12}, +e^{\theta_w \mathbf{e}_{12}} = \cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12}, \end{align} -es gibt eine Euler-Formel mit $\mathbf{e}_{12}$ anstelle der imaginären Einheit $j$. +was zeigt, dass es eine Euler-Formel mit $\mathbf{e}_{12}$ anstelle der imaginären Einheit $j$ gibt. Wenn man jetzt den Vektor \eqref{ExponentialGA} durch die eulersche Schreibweise \begin{align} - \mathbf{w} = |\mathbf{w}|\mathbf{e}_1e^{\theta_w\mathbf{e}_{12}} +\mathbf{w} = |\mathbf{w}|\mathbf{e}_1e^{\theta_w\mathbf{e}_{12}} \end{align} ersetzt, kann die Exponentialform des Vektors ähnlich wie die der komplexen Zahlen interpretieren. Der Einheitsvektor $\mathbf{e}_1$ wird um die Länge $|\mathbf{w}|$ gestreckt und um $\theta_w$ gedreht. \subsubsection{Vektormultiplikation} Nun werden wir das Vektorprodukt \begin{align} \label{VektorproduktformelGA} - \mathbf{wu} = |\mathbf{w}|\mathbf{e}_1 e^{\theta_w \mathbf{e}_{12}}|\mathbf{u}|\mathbf{e}_1 e^{\theta_u \mathbf{e}_{12}} +\mathbf{wu} = |\mathbf{w}|\mathbf{e}_1 e^{\theta_w \mathbf{e}_{12}}|\mathbf{u}|\mathbf{e}_1 e^{\theta_u \mathbf{e}_{12}} \end{align} so umformen, dass wir die Drehung nur durch Exponentialterme beschreiben können. Wir tauschen dafür zuerst beim Vektor $\mathbf{w}$ die Reihenfolge von -$\mathbf{e}_1$ mit dem Exponentialterm $e^{\theta_w \mathbf{e}_{12}}$, indem wir bei der Gleichung \eqref{e1ausklammern} $1=\mathbf{e}_1^2$ an einer anderen Position +$\mathbf{e}_1$ mit dem Exponentialterm $e^{\theta_w \mathbf{e}_{12}}$, indem wir bei der Gleichung \eqref{e1ausklammern} $1=\mathbf{e}_1^2$ an einer anderen Position einsetzten. Wir erhalten \begin{align} - \mathbf{w} &= |\mathbf{w}|\left(\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_2\mathbf{e}_1\right)\mathbf{e}_1 +\mathbf{w} &= |\mathbf{w}|\left(\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_2\mathbf{e}_1\right)\mathbf{e}_1. \end{align} -einsetzten. Mithilfe der Formel \eqref{EulerGA} und dem Wissen, dass $\mathbf{e}_{21}= -\mathbf{e}_{12}$ können wir die Umformung +Mithilfe der Formel \eqref{EulerGA} und dem Wissen, dass $\mathbf{e}_{21}= -\mathbf{e}_{12}$ können wir die Umformung \begin{align} - |\mathbf{w}|e^{-\theta_w \mathbf{e}_{12}}\mathbf{e}_1 +|\mathbf{w}|e^{-\theta_w \mathbf{e}_{12}}\mathbf{e}_1 \end{align} ausführen. Diese wichtige Umstrukturierung können wir wieder in die Vektorproduktformel \eqref{VektorproduktformelGA} einsetzen un erhalten \begin{align} - \mathbf{wu} &= |\mathbf{w}||\mathbf{u}|e^{-\theta_w \mathbf{e}_{12}}\mathbf{e}_1\mathbf{e}_1 e^{\theta_u \mathbf{e}_{12}}\\ - &= |\mathbf{w}||\mathbf{u}|e^{(\theta_u-\theta_w) \mathbf{e}_{12}}. +\mathbf{wu} &= |\mathbf{w}|\,|\mathbf{u}|e^{-\theta_w \mathbf{e}_{12}}\mathbf{e}_1\mathbf{e}_1 e^{\theta_u \mathbf{e}_{12}}\\ +&= |\mathbf{w}|\,|\mathbf{u}|e^{(\theta_u-\theta_w) \mathbf{e}_{12}}. \end{align} Das inverse Vektorprodukt \begin{align} - \mathbf{u}^{-1}\mathbf{w}^{-1} = \dfrac{1}{|\mathbf{w}||\mathbf{u}|}e^{(\theta_w-\theta_u) \mathbf{e}_{12}} +\mathbf{u}^{-1}\mathbf{w}^{-1} = \dfrac{1}{|\mathbf{w}|\,|\mathbf{u}|}e^{(\theta_w-\theta_u) \mathbf{e}_{12}} \end{align} kann durch die selbe Methode vereinfacht werden. Wenn wir den Winkel zwischen den Vektoren $\mathbf{w}$ und $\mathbf{u}$ als $\theta = \theta_w - \theta_u$ definieren erhalten wir als endgültige Form der Vektorprodukte \begin{align}\label{wuExpo} - \mathbf{wu} &= |\mathbf{w}||\mathbf{u}|e^{-\theta \mathbf{e}_{12}}\enspace\text{und}\\ - \mathbf{u}^{-1}\mathbf{w}^{-1} &= \dfrac{1}{|\mathbf{w}||\mathbf{u}|}e^{\theta \mathbf{e}_{12}} \label{wuExpoInv}. +\mathbf{wu} &= |\mathbf{w}|\,|\mathbf{u}|e^{-\theta \mathbf{e}_{12}}\enspace\text{und}\\ +\mathbf{u}^{-1}\mathbf{w}^{-1} &= \dfrac{1}{|\mathbf{w}|\,|\mathbf{u}|}e^{\theta \mathbf{e}_{12}} \label{wuExpoInv}. \end{align} \subsubsection{Umstrukturierte Drehungsgleichung} -Setzten wir nun unsere neuen Erkenntnisse in die Gleichung \eqref{rotGA} ein +Setzten wir nun unsere neuen Erkenntnisse in die Gleichung \eqref{rotGA} ein, erhalten wir \begin{align} - \mathbf{v''} = (|\mathbf{w}||\mathbf{u}|e^{-\theta \mathbf{e}_{12}})\mathbf{v}\biggl(\dfrac{1}{|\mathbf{w}||\mathbf{u}|}e^{\theta \mathbf{e}_{12}}\biggr), +\mathbf{v''} = (|\mathbf{w}|\,|\mathbf{u}|e^{-\theta \mathbf{e}_{12}})\mathbf{v}\biggl(\dfrac{1}{|\mathbf{w}|\,|\mathbf{u}|}e^{\theta \mathbf{e}_{12}}\biggr) \end{align} -erhalten wir durch die Kürzungen der Längen die vereinfachte Drehungsgleichung -\begin{align} - \mathbf{v''} = e^{-\theta \mathbf{e}_{12}} v e^{\theta \mathbf{e}_{12}}. +und können durch die Kürzungen der Längen die vereinfachte Drehungsgleichung +\begin{align} \label{GAvereinfRot} +\mathbf{v''} = e^{-\theta \mathbf{e}_{12}} v e^{\theta \mathbf{e}_{12}} \end{align} - -Wir wissen nun, dass das diese beidseitige Multiplikation die Länge von $\mathbf{v}$ nicht verändert, da sich die Längen von $\mathbf{w}$ und $\mathbf{u}$ kürzen. Betrachten wir nun den Effekt der Exponentialterme auf $\mathbf{v}$. Dabei Teilen wir den Vektor $\mathbf{v}$ auf in einen Anteil $\mathbf{v_\parallel}$, welcher auf der Ebene $\mathbf{e}_{12}$ liegt, und einen Anteil $\mathbf{v_\perp}$, welcher senkrecht zu der Ebene steht. Wir bekommen durch Einsetzten nun diese Form +bilden. Wir wissen nun, dass das diese beidseitige Multiplikation die Länge von $\mathbf{v}$ nicht verändert, da sich die Längen von $\mathbf{w}$ und $\mathbf{u}$ kürzen. Betrachten wir nun den Effekt der Exponentialterme auf $\mathbf{v}$. Dabei teilen wir den Vektor $\mathbf{v}$ auf in einen Anteil $\mathbf{v_\parallel}$, welcher auf der Ebene $\mathbf{e}_{12}$ liegt, und einen Anteil $\mathbf{v_\perp}$, welcher senkrecht zu der Ebene steht. Wir bekommen durch Einsetzten nun diese Form \begin{align} \label{RotAufPerpPar} - \mathbf{v}'' = e^{-\theta \mathbf{e}_{12}} (\mathbf{v_\perp + v_\parallel}) e^{\theta \mathbf{e}_{12}} = e^{-\theta \mathbf{e}_{12}} \mathbf{v_\perp} e^{\theta \mathbf{e}_{12}} + e^{-\theta \mathbf{e}_{12}} \mathbf{v_\parallel} e^{\theta \mathbf{e}_{12}}. +\mathbf{v}'' = e^{-\theta \mathbf{e}_{12}} (\mathbf{v_\perp + v_\parallel}) e^{\theta \mathbf{e}_{12}} = e^{-\theta \mathbf{e}_{12}} \mathbf{v_\perp} e^{\theta \mathbf{e}_{12}} + e^{-\theta \mathbf{e}_{12}} \mathbf{v_\parallel} e^{\theta \mathbf{e}_{12}}. \end{align} -Auf eine allgemeine Herleitung wird hier zwar verzichtet, aber man kann zeigen, dass die Reihenfolge so umstrukturiert werden kann +Auf eine allgemeine Herleitung wird hier zwar verzichtet, aber man kann zeigen, dass man die Reihenfolge der Vektoranteile $\mathbf{v_\perp}$ und $\mathbf{v_\parallel}$ mit dem Exponentialterm $e^{-\theta \mathbf{e}_{12}}$ so vertauschen kann, dass sich \begin{align} - \mathbf{v}'' = \mathbf{v_\perp} e^{-\theta \mathbf{e}_{12}} e^{\theta \mathbf{e}_{12}} + \mathbf{v_\parallel} e^{-(-\theta) \mathbf{e}_{12}} e^{\theta \mathbf{e}_{12}}, +\mathbf{v}'' = \mathbf{v_\perp} e^{-\theta \mathbf{e}_{12}} e^{\theta \mathbf{e}_{12}} + \mathbf{v_\parallel} e^{-(-\theta) \mathbf{e}_{12}} e^{\theta \mathbf{e}_{12}} \end{align} -dass der Winkel beim parallelen Anteil negiert wird. An der Zusammengefassten Gleichung +ergibt. Der Winkel wird beim parallelen Anteil negiert. An der Zusammengefassten Gleichung \begin{align}\label{RotParPerp} - \mathbf{v}'' = \mathbf{v_\perp} + \mathbf{v_\parallel} e^{2\theta \mathbf{e}_{12}} +\mathbf{v}'' = \mathbf{v_\perp} + \mathbf{v_\parallel} e^{2\theta \mathbf{e}_{12}} \end{align} kann man sehen, dass nur der parallele Anteil $\mathbf{v_\parallel}$ des Vektors $\mathbf{v}$ auf der Ebene $\mathbf{e}_{12}$ um $2\theta$ gedreht wird. Der senkrechte Anteil $\mathbf{v_\perp}$ bleibt gleich. Wichtig dabei zu sehen ist, dass nur der Winkel zwischen den Vektoren $\mathbf{w}$ und $\mathbf{u}$ von Bedeutung ist. Die Länge und Richtung der einzelnen Vektoren spielt keine Rolle. Zeigen wir nun diese Eigenschaften an einem Beispiel \begin{beispiel} - Gegeben sei ein Vektor $\mathbf{v} = 1\mathbf{e}_1 + 2\mathbf{e}_2 + 3\mathbf{e}_3$ mit zur $\mathbf{e}_{12}$-Ebene parallelen Anteil $\mathbf{v_\parallel} = 1\mathbf{e}_1 + 2\mathbf{e}_2$ und senkrechten Anteil $\mathbf{v_\perp} = 3\mathbf{e}_3$. Zusätzlich sind die Spiegelachsen $\mathbf{u} = \mathbf{e}_1$ und $\mathbf{w} = 2\mathbf{e}_2$ gegeben. Gesucht ist der rotierte Vektor $\mathbf{v}''$. Bestimmen wir als erstes das Vektorprodukt $\mathbf{wu}$ + Gegeben sei ein Vektor $\mathbf{v} = 1\mathbf{e}_1 + 2\mathbf{e}_2 + 3\mathbf{e}_3$ mit zur $\mathbf{e}_{12}$-Ebene parallelen Anteil $\mathbf{v_\parallel} = 1\mathbf{e}_1 + 2\mathbf{e}_2$ und senkrechten Anteil $\mathbf{v_\perp} = 3\mathbf{e}_3$. Zusätzlich sind die Spiegelachsen $\mathbf{u} = \mathbf{e}_1$ und $\mathbf{w} = 2\mathbf{e}_2$ gegeben. Gesucht ist der rotierte Vektor $\mathbf{v}''$. Bestimmen wir als erstes das Vektorprodukt \begin{align} - \mathbf{wu} = (2\mathbf{e}_2)(\mathbf{e}_1) = -2\mathbf{e}_{12} + \mathbf{wu} = (2\mathbf{e}_2)(\mathbf{e}_1) = -2\mathbf{e}_{12} \end{align} - und das Produkt der Inversen $\mathbf{u}^{-1}\mathbf{w}^{-1}$ + und das Produkt der Inversen \begin{align} - \mathbf{u}^{-1}\mathbf{w}^{-1} = \biggl(\dfrac{\mathbf{e}_1}{1^2}\biggr) \left(\dfrac{2\mathbf{e}_2}{2^2}\right) = \dfrac{1}{2}\mathbf{e}_{12}. + \mathbf{u}^{-1}\mathbf{w}^{-1} = \biggl(\dfrac{\mathbf{e}_1}{1^2}\biggr) \left(\dfrac{2\mathbf{e}_2}{2^2}\right) = \dfrac{1}{2}\mathbf{e}_{12}. \end{align} - Der rotierte Vektor $\mathbf{v}''$ können wir nun durch das einsetzten und auflösen der Produkte in die Gleichung \eqref{rotGA} + Den gedrehten Vektor $\mathbf{v}''$ können wir nun durch Einsetzen und Auflösen der Produkte in die Gleichung \eqref{rotGA} bestimmen. Der Rechnenvorgang ist \begin{align} - \mathbf{v}'' = (\mathbf{wu})\mathbf{v}(\mathbf{u}^{-1}\mathbf{w}^{-1}) &= (-2e_{12})(1\mathbf{e}_1 + \mathbf{e}_2 + 1\mathbf{e}_3)(\textstyle{\frac{1}{2}}\mathbf{e}_{12})\\ - &= (2\mathbf{e}_2-2\mathbf{e}_1-2\mathbf{e}_{123})(\textstyle{\frac{1}{2}}\mathbf{e}_{12})\\ - &= -1\mathbf{e}_1 - 1\mathbf{e}_2 + 1\mathbf{e}_3 + \mathbf{v}'' = (\mathbf{wu})\mathbf{v}(\mathbf{u}^{-1}\mathbf{w}^{-1}) &= (-2e_{12})(1\mathbf{e}_1 + \mathbf{e}_2 + 1\mathbf{e}_3)(\textstyle{\frac{1}{2}}\mathbf{e}_{12})\\ + &= (2\mathbf{e}_2-2\mathbf{e}_1-2\mathbf{e}_{123})(\textstyle{\frac{1}{2}}\mathbf{e}_{12})\\ + &= -1\mathbf{e}_1 - 1\mathbf{e}_2 + 1\mathbf{e}_3. \end{align} - finden. Aus dem Resultat $\mathbf{v}''= -1\mathbf{e}_1 + 1\mathbf{e}_2 + 1\mathbf{e}_3$ können wir bestätigen, dass + Aus dem Resultat $\mathbf{v}''= -1\mathbf{e}_1 + 1\mathbf{e}_2 + 1\mathbf{e}_3$ können wir bestätigen, dass \begin{itemize} \item die Länge $|\mathbf{v}| = \sqrt{3}$ zur Länge $|\mathbf{v}''|=\sqrt{3}$ gleich blieb. \item sich der parallele Anteil $\mathbf{v_\parallel}'' = -1\mathbf{e}_1 - 1\mathbf{e}_2$ gedreht hat und der senkrechte Anteil $\mathbf{v_\perp}'' = 1\mathbf{e}_3$ unverändert blieb. \item der parallele Teil sich genau um $2\theta=180$° gedreht hat. $\theta$ kann übrigens durch die Umformung des Produkt $\mathbf{wu}$ in die Exponentialschreibweise \begin{align} - &\mathbf{wu} = -2\mathbf{e}_{12} = 2(0-1\mathbf{e}_{12})=2(\cos\biggl(\dfrac{-\pi}{2}\biggr) + \sin\biggl(\dfrac{-\pi}{2}\biggr)\mathbf{e}_{12}) = 2e^{(-\pi/2)\mathbf{e}_{12}} + &\mathbf{wu} = -2\mathbf{e}_{12} = 2(0-1\mathbf{e}_{12})=2(\cos\biggl(\dfrac{-\pi}{2}\biggr) + \sin\biggl(\dfrac{-\pi}{2}\biggr)\mathbf{e}_{12}) = 2e^{(-\pi/2)\mathbf{e}_{12}} \end{align} durch einen Vergleich mir der Formel \eqref{wuExpo} \begin{align} - \theta = -\biggl(\dfrac{-\pi}{2}\biggr) = \dfrac{\pi}{2} + \theta = -\biggl(\dfrac{-\pi}{2}\biggr) = \dfrac{\pi}{2} \end{align} - ausgelesen werden. + ausgelesen werden. \qedhere \end{itemize} -\end{beispiel}
\ No newline at end of file +\end{beispiel}
\ No newline at end of file diff --git a/buch/papers/clifford/9_KomplexeZahlen.tex b/buch/papers/clifford/9_KomplexeZahlen.tex index aaccd3d..12fa546 100644 --- a/buch/papers/clifford/9_KomplexeZahlen.tex +++ b/buch/papers/clifford/9_KomplexeZahlen.tex @@ -6,34 +6,34 @@ \section{Komplexe Zahlen} \rhead{Komplexe Zahlen} -Die komplexen Zahlen finden eine Vielzahl von Anwendungsgebiete in den Ingenieurwissenschaften. Das liegt daran, weil die komplexen Zahlen Rotationen und Schwingungen gut beschreiben können. Nach dem vorherigen Kapitel überrascht es wahrscheinlich nicht viele, dass es möglich ist komplexe Zahlen in der geometrischen Algebra darzustellen. Sie können durch die geraden Grade der zweidimensionalen geometrischen Algebra vollständig beschrieben werden: $\mathbf{g}_n \in G_2^+(\mathbb{R}) \cong \mathbb{C}$. Das bedeutet eine komplexe Zahl +Die komplexen Zahlen finden eine Vielzahl von Anwendungsgebiete in den Ingenieurwissenschaften. Das liegt daran, weil die komplexen Zahlen Drehungen und Schwingungen gut beschreiben können. Nach dem vorherigen Abschnitt ist es nicht überraschend, dass es möglich ist, komplexe Zahlen in der geometrischen Algebra darzustellen. Sie können durch die geraden Grade der zweidimensionalen geometrischen Algebra vollständig beschrieben werden: $\mathbf{g}_n \in G_2^+(\mathbb{R}) \cong \mathbb{C}$. Das bedeutet eine komplexe Zahl \begin{align} - a_0 + a_1 j \cong a_0 + a_1 \mathbf{e}_{12} = \mathbf{g}_n\quad a_0, a_1 \in \mathbb{R}\\ - |r|e^{\theta j} \cong |r|e^{\theta \mathbf{e}_{12}} = \mathbf{g}_n; \quad r, \theta \in \mathbb{R} +a_0 + a_1 j \cong a_0 + a_1 \mathbf{e}_{12} = \mathbf{g}_n\quad a_0, a_1 \in \mathbb{R}\\ +|r|e^{\theta j} \cong |r|e^{\theta \mathbf{e}_{12}} = \mathbf{g}_n; \quad r, \theta \in \mathbb{R} \end{align} kann durch ein Skalar (Grad 0) und einem Bivektor (Grad 2) dargestellt werden, weil $j$ und $\mathbf{e}_{12}$ beide die Eigenschaft \begin{align} - j^2 = -1\quad \mathbf{e}_{12}^2 = -1 +j^2 = -1\quad\text{und}\quad\mathbf{e}_{12}^2 = -1 \end{align} besitzen. Die Kommutativität \begin{align} - \begin{split} - \mathbf{g}_1\mathbf{g}_2 = \mathbf{g}_2\mathbf{g}_1 \enspace&\Leftrightarrow\enspace (a + b \mathbf{e}_{12})(f + g \mathbf{e}_{12}) = (f + g \mathbf{e}_{12})(a + b \mathbf{e}_{12})\\ &\Leftrightarrow\enspace |\mathbf{g}_1||\mathbf{g}_2|e^{(\theta_{g_1} + \theta_{g_2})\mathbf{e}_{12}} = |\mathbf{g}_2||\mathbf{g}_1|e^{(\theta_{g_2} + \theta_{g_1})\mathbf{e}_{12}}, - \end{split} +\begin{split} +\mathbf{g}_1\mathbf{g}_2 = \mathbf{g}_2\mathbf{g}_1 \enspace&\Leftrightarrow\enspace (a + b \mathbf{e}_{12})(f + g \mathbf{e}_{12}) = (f + g \mathbf{e}_{12})(a + b \mathbf{e}_{12})\\ &\Leftrightarrow\enspace |\mathbf{g}_1|\,|\mathbf{g}_2|e^{(\theta_{g_1} + \theta_{g_2})\mathbf{e}_{12}} = |\mathbf{g}_2|\,|\mathbf{g}_1|e^{(\theta_{g_2} + \theta_{g_1})\mathbf{e}_{12}}, +\end{split} \end{align} welche wir schon von den komplexen Zahlen her kennen, ist dabei eine in der geometrischen Algebra nur selten anzutreffende Eigenschaft. Beispielsweise ist das geometrische Produkt von \begin{align} - \mathbf{g}_1\mathbf{v}\not= \mathbf{v}\mathbf{g}_1 \quad\Leftrightarrow\quad(a + b \mathbf{e}_{12})(x\mathbf{e}_1+y\mathbf{e}_2)\not= (x\mathbf{e}_1+y\mathbf{e}_2)(a + b \mathbf{e}_{12}) +\mathbf{g}_1\mathbf{v}\not= \mathbf{v}\mathbf{g}_1 \quad\Leftrightarrow\quad(a + b \mathbf{e}_{12})(x\mathbf{e}_1+y\mathbf{e}_2)\not= (x\mathbf{e}_1+y\mathbf{e}_2)(a + b \mathbf{e}_{12}) \end{align} -und auch die im folgenden Kapitel behandelten Quaternionen nicht kommutativ. +und auch die im folgenden Kapitel behandelten Quaternionen sind nicht kommutativ. -Um später die Auswirkung der Quaternionen auf Vektoren besser zu verstehen, möchte ich kurz darauf eingehen, was ein $\mathbf{g}_n$ für eine Auswirkung auf einen Vektor hat. +Um später die Auswirkung der Quaternionen auf Vektoren besser zu verstehen, möchten wir kurz darauf eingehen, was ein $\mathbf{g}_n$ für eine Auswirkung auf einen Vektor hat. Wir kennen diesen Effekt schon von den komplexen Zahlen. Wenn eine komplexe Zahl $c_1=a+bj$ mit einer zweiten $c_2=f+gj$ multipliziert wird, dann kann man \begin{align} - c = c_1\cdot c_2 = (a + bj)(d + ej) = a\cdot(d+ej) + bj\cdot(d+ej) +c = c_1\cdot c_2 = (a + bj)(d + ej) = \underbrace{a\cdot(d+ej)}_{\displaystyle{a\cdot c_2}} + \underbrace{bj\cdot(d+ej)}_{\displaystyle{b\cdot c_2 \cdot (1\angle 90^\circ)}} \end{align} -so aufteilen. Dabei ist $a\cdot(d+ej)$ die jetzige komplexe Zahl $c_2$ um den Faktor $a$ steckt und $bj\cdot(d+ej)$ die um 90° im Gegenuhrzeigersinn gedrehte Zahl $c_2$ um den Faktor $b$ streckt. Diese Anteile addiert ergeben, dann den um $c_1$ dreh-gestreckten Vektor $c_2$. Der gleiche Effekt hat +so aufteilen. Dabei ist $a\cdot(d+ej)$ die komplexe Zahl $c_2$ um den Faktor $a$ steckt und $bj\cdot(d+ej)$ die um 90° im Gegenuhrzeigersinn gedrehte Zahl $c_2$ um den Faktor $b$ streckt. Diese Anteile addiert ergeben dann den um $c_1$ drehgestreckten Vektor $c_2$. Den gleichen Effekt hat \begin{align}\label{GAdrehstreck} - \mathbf{v}' = \mathbf{g}\mathbf{v} = (a + b\mathbf{e}_{12})(d\mathbf{e}_{1} + e\mathbf{e}_{2}) = a(d\mathbf{e}_{1} + e\mathbf{e}_{2}) + b\mathbf{e}_{12}(d\mathbf{e}_{1} + e\mathbf{e}_{2}) +\mathbf{v}' = \mathbf{g}\mathbf{v} = (a + b\mathbf{e}_{12})(d\mathbf{e}_{1} + e\mathbf{e}_{2}) = a(d\mathbf{e}_{1} + e\mathbf{e}_{2}) + b\mathbf{e}_{12}(d\mathbf{e}_{1} + e\mathbf{e}_{2}) \end{align} in der zweidimensionalen geometrischen Algebra. Im Falle der komplexen Zahlen macht es jetzt noch nicht wirklich Sinn in die geometrische Algebra zu wechseln. Die potenziellen Vorteile der geometrischen Algebra werden sich aber erst bei den Quaternionen zeigen.
\ No newline at end of file diff --git a/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png b/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png Binary files differnew file mode 100644 index 0000000..625757d --- /dev/null +++ b/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png diff --git a/buch/papers/clifford/Bilder/test.png b/buch/papers/clifford/Bilder/test.png Binary files differdeleted file mode 100644 index 1633a2e..0000000 --- a/buch/papers/clifford/Bilder/test.png +++ /dev/null diff --git a/buch/papers/clifford/images/Makefile b/buch/papers/clifford/images/Makefile new file mode 100644 index 0000000..cc621fb --- /dev/null +++ b/buch/papers/clifford/images/Makefile @@ -0,0 +1,13 @@ +# +# Makefile +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +all: spiegelung.pdf + +spiegelung.pdf: spiegelung.tex punkte.tex + pdflatex spiegelung.tex + +punkte.tex: spiegelung.m + octave spiegelung.m + diff --git a/buch/papers/clifford/images/punkte.tex b/buch/papers/clifford/images/punkte.tex new file mode 100644 index 0000000..41d2247 --- /dev/null +++ b/buch/papers/clifford/images/punkte.tex @@ -0,0 +1,21 @@ +\coordinate (A) at (2.300,1.700); +\coordinate (B) at (4.300,2.500); +\coordinate (C) at (2.800,2.700); +\coordinate (S) at (3.133,2.300); +\coordinate (G1) at (0.489,0.873); +\coordinate (G1oben) at (4.886,8.725); +\coordinate (G1unten) at (-4.886,-8.725); +\coordinate (G2) at (0.336,-0.942); +\coordinate (G2oben) at (3.363,-9.417); +\coordinate (G2unten) at (-3.363,9.417); +\coordinate (A1) at (0.248,2.849); +\coordinate (B1) at (-0.115,4.973); +\coordinate (C1) at (0.839,3.798); +\coordinate (S1) at (0.324,3.873); +\coordinate (A2) at (-1.997,2.048); +\coordinate (B2) at (-3.061,3.921); +\coordinate (C2) at (-3.055,2.407); +\coordinate (S2) at (-2.704,2.792); +\def\winkela{60.7512} +\def\winkelb{48.9027} +\coordinate (G) at (0.489,0.873); diff --git a/buch/papers/clifford/images/spiegelung.m b/buch/papers/clifford/images/spiegelung.m new file mode 100644 index 0000000..a086cb5 --- /dev/null +++ b/buch/papers/clifford/images/spiegelung.m @@ -0,0 +1,66 @@ +# +# spiegelung.m +# +# +fn = fopen("punkte.tex", "w"); + + +a = [ 2.3; 1.7 ]; +b = [ 4.3; 2.5 ]; +c = [ 2.8; 2.7 ]; +s = (a + b + c)/3; + +fprintf(fn, "\\coordinate (A) at (%.3f,%.3f);\n", a(1, 1), a(2, 1)); +fprintf(fn, "\\coordinate (B) at (%.3f,%.3f);\n", b(1, 1), b(2, 1)); +fprintf(fn, "\\coordinate (C) at (%.3f,%.3f);\n", c(1, 1), c(2, 1)); +fprintf(fn, "\\coordinate (S) at (%.3f,%.3f);\n", s(1, 1), s(2, 1)); + +n1 = [ -2.5; 1.4 ]; +n1 = n1 / norm(n1); +S1 = eye(2) - 2 * (n1 * n1'); +g1 = [ n1(2,1); -n1(1,1) ]; + +fprintf(fn, "\\coordinate (G1) at (%.3f,%.3f);\n", g1(1,1), g1(2,1)); +fprintf(fn, "\\coordinate (G1oben) at (%.3f,%.3f);\n", 10*g1(1,1), 10*g1(2,1)); +fprintf(fn, "\\coordinate (G1unten) at (%.3f,%.3f);\n", -10*g1(1,1), -10*g1(2,1)); + +n2 = [ 1.4; 0.5 ]; +n2 = n2 / norm(n2); +S2 = eye(2) - 2 * (n2 * n2'); +g2 = [ n2(2,1); -n2(1,1) ]; + +fprintf(fn, "\\coordinate (G2) at (%.3f,%.3f);\n", g2(1,1), g2(2,1)); +fprintf(fn, "\\coordinate (G2oben) at (%.3f,%.3f);\n", 10*g2(1,1), 10*g2(2,1)); +fprintf(fn, "\\coordinate (G2unten) at (%.3f,%.3f);\n", -10*g2(1,1), -10*g2(2,1)); + +D = S2 * S1; + +a1 = S1 * a; +b1 = S1 * b; +c1 = S1 * c; +s1 = S1 * s; + +fprintf(fn, "\\coordinate (A1) at (%.3f,%.3f);\n", a1(1, 1), a1(2, 1)); +fprintf(fn, "\\coordinate (B1) at (%.3f,%.3f);\n", b1(1, 1), b1(2, 1)); +fprintf(fn, "\\coordinate (C1) at (%.3f,%.3f);\n", c1(1, 1), c1(2, 1)); +fprintf(fn, "\\coordinate (S1) at (%.3f,%.3f);\n", s1(1, 1), s1(2, 1)); + +a2 = D * a; +b2 = D * b; +c2 = D * c; +s2 = D * s; + +fprintf(fn, "\\coordinate (A2) at (%.3f,%.3f);\n", a2(1, 1), a2(2, 1)); +fprintf(fn, "\\coordinate (B2) at (%.3f,%.3f);\n", b2(1, 1), b2(2, 1)); +fprintf(fn, "\\coordinate (C2) at (%.3f,%.3f);\n", c2(1, 1), c2(2, 1)); +fprintf(fn, "\\coordinate (S2) at (%.3f,%.3f);\n", s2(1, 1), s2(2, 1)); + +winkel1 = atan2(g1(2,1), g1(1,1)) * (180 / pi); +winkel2 = acosd(g1' * g2); + +fprintf(fn, "\\def\\winkela{%.4f}\n", winkel1); +fprintf(fn, "\\def\\winkelb{%.4f}\n", 180 - winkel2); + +fprintf(fn, "\\coordinate (G) at (%.3f,%.3f);\n", g1(1,1), g1(2,1)); + +fclose(fn); diff --git a/buch/papers/clifford/images/spiegelung.pdf b/buch/papers/clifford/images/spiegelung.pdf Binary files differnew file mode 100644 index 0000000..a17d369 --- /dev/null +++ b/buch/papers/clifford/images/spiegelung.pdf diff --git a/buch/papers/clifford/images/spiegelung.tex b/buch/papers/clifford/images/spiegelung.tex new file mode 100644 index 0000000..0960456 --- /dev/null +++ b/buch/papers/clifford/images/spiegelung.tex @@ -0,0 +1,85 @@ +% +% spiegelung.tex -- template for standalon tikz images +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math,calc} +\begin{document} +\def\skala{1.1} +\begin{tikzpicture}[>=latex,thick,scale=\skala] + +\definecolor{darkgreen}{rgb}{0,0.6,0} + +\def\punkt#1{ +\fill #1 circle[radius=0.06]; +} + +\coordinate (M) at (0,0); + +\fill[color=blue] (M) circle[radius=0.06]; +\node[color=blue] at (M) [left] {$M$}; + +\input{punkte.tex} + +\fill[color=red!30] (A) -- (B) -- (C) -- cycle; +\draw[color=red] (A) -- (B) -- (C) -- cycle; +\node at (A) [below] {$A$}; +\node at (B) [above right] {$B$}; +\node at (C) [above] {$C$}; +\node at (S) {$\circlearrowleft$}; + +\fill[color=red!30] (A1) -- (B1) -- (C1) -- cycle; +\draw[color=red] (A1) -- (B1) -- (C1) -- cycle; +\node at (A1) [below] {$A'$}; +\node at (B1) [above] {$B'$}; +\node at (C1) [above right] {$C'$}; +\node at (S1) {$\circlearrowright$}; + +\fill[color=red!30] (A2) -- (B2) -- (C2) -- cycle; +\draw[color=red] (A2) -- (B2) -- (C2) -- cycle; +\node at (A2) [below] {$A''$}; +\node at (B2) [above] {$B''$}; +\node at (C2) [left] {$C''$}; +\node at (S2) {$\circlearrowleft$}; + +\draw[color=gray,dotted] (A) -- (A1); +\draw[color=gray,dotted] (B) -- (B1); +\draw[color=gray,dotted] (C) -- (C1); + +\draw[color=gray,dotted] (A1) -- (A2); +\draw[color=gray,dotted] (B1) -- (B2); +\draw[color=gray,dotted] (C1) -- (C2); + +\punkt{(A)} +\punkt{(B)} +\punkt{(C)} +\punkt{(A1)} +\punkt{(B1)} +\punkt{(C1)} +\punkt{(A2)} +\punkt{(B2)} +\punkt{(C2)} + +\fill[color=darkgreen!30] (M) -- (G1) arc ({\winkela}:{\winkela+\winkelb}:1) -- cycle; +\draw[color=darkgreen] (G1) arc ({\winkela}:{\winkela+\winkelb}:1); +\node[color=darkgreen] at ({\winkela+0.5*\winkelb}:0.7) {$\alpha$}; + +\node at ($6*(G1)$) [right] {$g\mathstrut$}; +\node at ($-5.6*(G2)$) [left] {$h\mathstrut$}; + +\clip (-3,-0.2) rectangle (4.5,5.5); + +\draw[line width=1pt] (G1oben) -- (G1unten); +\draw[line width=1pt] (G2oben) -- (G2unten); + +\fill[color=blue] (M) circle[radius=0.06]; + +\end{tikzpicture} +\end{document} + diff --git a/buch/papers/erdbeben/teil0.tex b/buch/papers/erdbeben/teil0.tex index c985713..d32b316 100644 --- a/buch/papers/erdbeben/teil0.tex +++ b/buch/papers/erdbeben/teil0.tex @@ -20,9 +20,9 @@ Um ein Erdbeben kenntlich zu machen, werden in der Regel Seismographen mit viele Ein Seismograph besteht im Grunde aus einer federgelagerten Masse. Wirkt eine Bodenerregung auf das Gerät ein, schwing das Gehäuse und dadurch auch die gekoppelte Masse. Stoppt das Erdbeben, schwingt das Gehäuse nicht mehr. Die Masse schwing jedoch in seiner Eigendynamik weiter. -Relativbewegung des Bodens kann damit als Auslenkung im Zeitverlauf gemessen werden. +Eine Relativbewegung des Bodens kann damit als Auslenkung im Zeitverlauf gemessen werden. In modernen Seismographen wird die Bodenbewegung in alle Richtungen gemessen, sowohl Horizontal als auch Vertikal. -Wir konstruieren uns eine einfachere Version eines Seismographen mit eine Gehäuse, an dem zwei Federn und eine Masse befestigt sind. +Wir konstruieren uns eine einfachere Version eines Seismographen mit einem Gehäuse, an dem zwei Federn und eine Masse befestigt sind. Der Seismograph ist in Abbildung ~\ref{erdbeben:Seismograph} ersichtlich. Ein Sensor unter der Masse misst die Position, bzw. die Auslenkung der Feder und der Masse. Dies bedeutet, unser Seismograph kann nur in eine Dimension Messwerte aufnehmen. @@ -53,28 +53,40 @@ Die Gleichung lautet: m\ddot s + 2k \dot s + Ds = f. \end{equation} wobei $m$ die Masse, $k$ die Dämpfungskonstante und $D$ die Federkonstante bezeichnet. -Da die Differentialgleichung linear ist, kann sie in die kompaktere und einfachere Matrix-Form umgewandelt werden. -Dazu verwenden wir die Subsitution: -\[
s_1 = s
\qquad \text{und} \qquad
s_2 = \dot s
.
\] -Somit entstehen die Gleichungen für die Position $ \dot s_1(t)$ der Masse : + + +Da die Differentialgleichung linear ist möchten wir diese Gleichung in die Darstellung $\dot x = Ax$ überführen, wobei $x$ der Zustandsvektor und $A$ die Systemmatrix bezeichnet. Dazu verwenden wir die Subsitution: +\[ +s_1 = s +\qquad \text{und} \qquad +s_2 = \dot s. +\] +Somit entstehen die Gleichungen für die Geschwindigkeit $ \dot s_1(t)$ der Masse : \[ \dot {s_1} = {s_2}\] und \[ \dot s_2 = -\frac{D}{m} {s_1} -\frac{2k}{m} {s_2} + \frac{f} {m} \] für die Beschleunigung $\dot s_2(t)$ der Masse. Diese können wir nun in der Form -\[ f =-\frac{D}{m} {s_1} -\frac{2k}{m} {s_2} + \frac{f} {m} \] -auch als Matrix-Vektor-Gleichung darstellen. -Dafür wird die Gleichung in die Zustände aufgeteilt. -Die für uns relevanten Zustände sind die Position der Masse, die Geschwindigkeit der Masse und die äussere Beschleunigung des ganzen Systems. +\[ \ddot f =-\frac{D}{m} {s_1} -\frac{2k}{m} {s_2} + \frac{f} {m} \] +als skalare Gleichung darstellen. -Dabei muss unterschieden werden, um welche Beschleunigung es sich handelt. -Das System beinhaltet sowohl eine Beschleunigung der Masse (innere Beschleunigung) als auch eine Beschleunigung der ganzen Apparatur (äussere Beschleunigung). +Die für uns relevanten Zustände sind die Position der Masse, die Geschwindigkeit der Masse und die äussere Beschleunigung des ganzen Systems. +Unüblich ist nun, dass der Stör-Term $f$ in Gleichung (20.1) gerade das ist, was wir eigentlich bestimmen möchten. In unserem Fall wird die äusseren Beschleunigung gesucht, da diese der Erdbebenanregung gleich kommt. -Dazu wird ein Zustandsvektor definiert: +Deshalb nehmen wir $f$ als dritte Grösse in den Zustandsvektor auf und definieren: + \[ - \left(\begin{array}{c} {s_1} \\ {s_2} \\ {f} \end{array}\right). - \] -Durch Rücksubstituion ergibt sich uns folgende Systemgleichung in Matrix schreibweise, , wobei $\dot {s_1}= v$ ist: + x = (s_1, s_2, f)^T. +\] + +Für die Standard-Form $\dot x = Ax$ brauchen wir als nächstes die Ableitungen aller Elemente von $x$. Für $\dot s_1$ und $\dot s_2$ folgen diese direkt aus Gleichung (20.1), aber über $\dot f$ wissen wir nichts. +Wir müssen also eine Annahme treffen: $\dot f = 0$. Diese Annahme ist im Allgemeinen falsch, aber etwas Besseres haben wir zurzeit nicht zur Verfügung. +Zudem treffen wir die Annahme, das sich die Kraft über die Beobachtungszeit nicht verändert. +Wir werden dies in einem späteren Schritt kompensieren müssen. +Da die Kraft unbekannt ist, wird die letzte Zeile mit Nullen gefüllt, denn genau diese Werte wollen wir. + + +Durch Rücksubstituion ergibt sich uns folgende Systemgleichung in Matrix schreibweise, wobei $\dot {s_1}= v$ ist. Damit haben wir nun alles, was wir für die Matrix-Darstellung von Gleichung (20.1) benötigen. Diese lautet: \begin{equation} \frac{d}{dt} \left(\begin{array}{c} s(t) \\ v(t) \\ f(t) \end{array}\right) = \left( \begin{array}{ccc} @@ -83,11 +95,7 @@ Durch Rücksubstituion ergibt sich uns folgende Systemgleichung in Matrix schrei 0 & 0 & 0\\ \end{array}\right) \left(\begin{array}{c} s(t)\\ v(t)\\ f(t) \end{array}\right). \end{equation} -Wir wissen nicht wie sich die Kraft verhält. -Deshalb treffen wir die Annahme, das sich die Kraft über die Beobachtungszeit nicht verändert. -Diese Annahme ist nicht zulässig, jedoch ist dies das beste, was wir Annehmen können. -Diese unzutreffende Annahme wird späteren Berechnungen berücksichtigen werden -Da die Kraft unbekannt ist, wird die letzte Zeile mit Nullen gefüllt, denn genau diese Werte wollen wir. + diff --git a/buch/papers/erdbeben/teil1.tex b/buch/papers/erdbeben/teil1.tex index 6c334bf..014b53e 100644 --- a/buch/papers/erdbeben/teil1.tex +++ b/buch/papers/erdbeben/teil1.tex @@ -14,15 +14,20 @@ \rhead{Kalman-Filter} \section{Kalman-Filter} -Interessante Grösse ist also Integral von Überlagerung zweier Kräfte. -Wir brauchen also dir zweite Ableitung von der Messung , ohne deren Eigendynamik. +Die interessante Grösse ist also das Integral der Überlagerung zweier Kräfte. +Wir brauchen also die zweite Ableitung der Messung, ohne deren Eigendynamik. Da wir die äussere Kraft nicht direkt messen können, benötigen wir ein Werkzeug, welches aus der gemessenen Position, die Krafteinwirkung auf unsere System schätzt. Dies ist eine typische Anwendung für das Kalman-Filter. + +Das Filter schätzt den Zustand eines Systems anhand von Messungen und kann den nächsten Zustand errechnen und aus dieser Schätzung auch eine erwartete Messung herleiten. +Die für das Filter relevante Grösse ist dann nicht mehr die eigentliche Messung, sondern die Differenz aus Messung und Erwartung, da diese Differenz, die Innovation, eine Aussage über die nicht-deterministischen, externen Einflüsse auf das System ermöglicht. +Das Filter berücksichtigt dazu nicht nur die Messung und den Zustand, sondern auch die Unsicherheiten dieser beiden Grössen, welche als Parameter in das Modell des Systems einfliessen. + Unser Ziel ist es, anhand der Messung die eigentlich interessante Grösse $f$ zu bestimmen. -Dabei wird durch eine deterministische Vorhersage, in dem der Zustand * Eigendynamik des Systems gerechnet. +Dabei wird durch eine deterministische Vorhersage, in dem der Zustand mit der Eigendynamik des Systems multipliziert wird. Die Idee dahinter ist, dass das Kalman-Filter die nicht-deterministische Grösse $f$ anhand der Messung und der Vorhersage zu bestimmen. -Für mehrere Dimensionen (x,y,z) würde der Pythagoras für das System benötigt werden. +Für mehrere Dimensionen (x,y,z) würde der Satz von Pythagoras für das System benötigt. Da sich der Pythagoras bekanntlich nicht linear verhält, kann kein lineares Kalman-Filter implementiert werden. Da das Kalman-Filter besonders effektiv und einfach für lineare Abläufe geeignet ist, würde eine zweidimensionale Betrachtung den Rahmen dieser Arbeit sprengen. Einfachheitshalber beschränken wir uns auf den linearen Fall, da dadurch die wesentlichen Punkte bereits aufgezeigt werden. @@ -30,8 +35,7 @@ Für ein nicht-lineares System werden Extended Kalman-Filter benötigt, bei dene \subsection{Geschichte} Das Kalman-Filter wurde 1960 von Rudolf Emil Kalman entdeckt und direkt von der NASA für die Appollo Mission benutzt. -Das Filter kommt mit wenig Rechenleistung aus und war somit dafür geeignet die Rakete bei der Navigation zu unterstützen. -Das Filter schätzt den Zustand eines Systems anhand von Messungen und kann den nächsten Zustand errechnen. Eine typische Anwendungen des Kalman-Filters ist Glättung von verrauschten Daten und die Schätzung von Parametern. Dies kommt heutzutage in jedem Satellit, Navigationssystem, Smartphones und Videospielen vor. +Das Filter kommt mit wenig Rechenleistung aus und war somit dafür geeignet die Rakete bei der Navigation zu unterstützen.
Eine typische Anwendungen des Kalman-Filters ist Glättung von verrauschten Daten und die Schätzung von Parametern. Dies kommt heutzutage in jedem Satellit, Navigationssystem, Smartphones und Videospielen vor. \subsection{Wahrscheinlichkeit} Das Kalman-Filter schätzt den wahrscheinlichsten Wert zwischen Normalverteilungen. @@ -62,11 +66,14 @@ und der Messung: {y_2}(x;{\mu_2},{\sigma_2})=\frac{1}{\sqrt{2\pi\sigma_2^2}}\quad e^{-\frac{(x-{\mu_2})^2}{2{\sigma_2}^2}}. \] Diesen werden nun multipliziert und durch deren Fläche geteilt um sie wieder zu normieren, $\odot$ beschreibt dabei die Multiplikation und die Normierung auf den Flächeninhalt eins : -\begin{align*}
{y_f}(x; {\mu_f}, {\sigma_f}) = {y_1}(x;{ \mu_1},{ \sigma_1}) \odot {y_2}(x; {\mu_2}, {\sigma_2}) +\begin{align*} + {y_f}(x; {\mu_f}, {\sigma_f}) = {y_1}(x;{ \mu_1},{ \sigma_1}) \odot {y_2}(x; {\mu_2}, {\sigma_2}) &= \frac{1}{\sqrt{2\pi\sigma_1^2}}\quad e^{-\frac{(x-{\mu_1})^2}{2{\sigma_1}^2}} \odot \frac{1}{\sqrt{2\pi\sigma_2^2}}\quad e^{-\frac{(x-{\mu_2})^2}{2{\sigma_2}^2}} \\ - &=
\frac{ \frac{1}{\sqrt{2\pi\sigma_1^2}}e^{-\frac{(x-{\mu_1})^2}{2{\sigma_1}^2}} \cdot \frac{1}{\sqrt{2\pi\sigma_2^2}}e^{-\frac{(x-{\mu_2})^2}{2{\sigma_2}^2}}}{\int {y_1} {y_2} dx}.
\end{align*} + &= + \frac{ \frac{1}{\sqrt{2\pi\sigma_1^2}}e^{-\frac{(x-{\mu_1})^2}{2{\sigma_1}^2}} \cdot \frac{1}{\sqrt{2\pi\sigma_2^2}}e^{-\frac{(x-{\mu_2})^2}{2{\sigma_2}^2}}}{\int {y_1} {y_2} dx}. +\end{align*} Diese Kombination der beiden Verteilungen resultiert wiederum in einer Normalverteilung mit Erwartungswert \[ \mu_f = \frac{\mu_1\sigma_2^2 + \mu_2 \sigma_1^2}{\sigma_1^2 + \sigma_2^2} \] @@ -94,6 +101,78 @@ Da wir nun ein Werkzeug besitzen, dass die Beschleunigung, welche auf das Gehäu Um den Kalman Filter zu starten, müssen gewisse Bedingungen definiert werden. In diesem Abschnitt werden die einzelnen Parameter und Matrizen erklärt und erläutert, wofür sie nützlich sind. +\subsection{Fiter-Agorithmus} +Nachdem alle Parameter aufgestellt sind, wird das Filter initialisiert. +Zuerst wird der nächste Zustand der Masse vorhergesagt, danach wird die Messung präzisiert und laufend aktualisiert. +Das Filter berechnet aufgrund der aktuellen Schätzung eine Vorhersage. +Diese wird, sobald verfügbar, mit der Messung verglichen. +Aus dieser Differenz und den Unsicherheiten des Prozesses ($Q$) und der Messung ($R$) wird der wahrscheinlichste, neue Zustand geschätzt. +Dabei muss genau auf den Index geachtet werden. Nach dem Artikel~\cite{erdbeben:wikipedia} ist die Indexierung so genormt: +Der Zeitschritt wird mit $k$ definiert, $k-1$ ist somit ein Zeitschritt vor $k$. +Auf der linken Seite von | wird der aktuelle Zustand verlangt, bzw. ausgegeben, auf der rechten Seiten den bisherigen Zustand. +Dies bedeutet, dass die Notation $x_{n|m}$ die Schätzung von $x$ zum Zeitpunkt $n$ bis und mit zur Zeitpunkt $m \leq \ n$ präsentiert. + +\subsubsection*{Vorhersage} +Im Filterschritt Vorhersage wird der nächste Zustand anhand des Anfangszustand und der Systemmatrix berechnet. +Dies funktioniert mit dem Rechenschritt: +\[ +{x_{k|k-1}}=\Phi{x_{k-1|k-1}}= \exp(A\Delta t){x_{k-1|k-1}}. +\] +Die Kovarianz $P_{k|k-1}$ wird ebenfalls neu berechnet. Zudem kommt noch die Prozessunsicherheit $Q$ dazu, so dass die Unsicherheit des Anfangsfehlers $P$ laufend verändert. +Dies funktioniert durch multiplizieren der Systemmatrix mit dem aktualisierten Anfangsfehler. +Dazu wird noch die Prozessunsicherheit addiert, somit entsteht die Gleichung +\[ +{P_{k|k-1}}=\Phi {P_{k-1|k-1}} {\Phi _{k}}^T + {Q_{k-1}}. +\] +Es vergeht genau $\Delta t$ Zeit, und dieser Vorgang wird wiederholt. +Das hochgestellte T bezeichnet die transponierte Matrix. +Dabei wird in den späteren Schritten überprüft, wie genau die letzte Anpassung von $P$ zur Messung stimmt. +Ist der Unterschied klein, wird die Kovarianz $P$ kleiner, ist der Unterschied gross, wird auch die Kovarianz grösser. +Das Filter passt sich selber an und korrigiert sich bei grosser Abweichung. + +\subsubsection*{Messen} +Der Sensor wurde noch nicht benutz, doch genau der liefert Werte für das Filter. +Die aktuellen Messwerte $z$ werden die Innovation $w$ mit dem Zustandsvektor $x$ und der Messmatrix $H$ zusammengerechnet. +Hier bei wird lediglich die Messung mit dem Fehler behaftet, und die Messmatrix $H$ mit der Vorhersage multipliziert. +\[ +{w_{k}}={z_{k}}-{H}{x_{k|k-1}}. +\] +Die Innovation ist der Teil der Messung, die nicht durch die Systemdynamik erklärt werden kann. +Die Hilfsgröße Innovation beschreibt, wie genau die Vorhersage den aktuellen Messwert mittels der Systemmatrix $\Phi$ beschreiben kann. +Für eine schlechte Vorhersage wird die dazugehörige Innovation gross, für eine genaue Vorhersage dagegen klein sein. +Entsprechende Korrekturen müssen dann gross bzw. nur gering ausfallen. +Innovation = Messung - Vorhersage. Dies leuchtet ein, eine Innovation von 0 bedeutet, dass die Messung nichts Neues hervorbrachte. + +Im nächsten Schritt wir analysiert, mit welcher Kovarianz weiter gerechnet wird. +Hierbei wird die Unsicherheit $P$, die Messmatrix $H$ und die Messunsicherheit $R$ miteinander verrechnet. +\[ +{S_{k}}={H}{P_{k|k-1}}{H}^T+{R_{k}} +\] + +\subsubsection*{Aktualisieren} +Im nächsten Schritt kommt nun die Wahrscheinlichkeit dazu. +\[{K_{k}}= {P_{k|k-1}} {H^T}{S_{k}^{-1}}\] +Die Grösse $K$ wird Kalman-Gain genannt. +Das Kalman-Gain gibt dem Zustand die Gewichtung, bzw. wie die Vorhersage auf den Zustand passt. +Vereinfacht gesagt: Es wird das das Verhältnis zwischen der Unsicherheit der Vorhersage $P_k$ zu der zugehörigen Messunsicherheit $R_k$ gebildet. +In unserem Fall wird werden die Elemente der Kalman-Matrix vorweg berechnet, da das Kalman-Gain ohne Messungen auskommt. + +Anhand der Informationen aus der Innovation wird das Kalman-Gain $K$ gebildet. Dabei beschreibt das Kalman-Gain die Wirkung der Innovation auf den geschätzten Zustand. So wird das System aktualisiert. +\[ +{x_{k|k}}={x_{k|k-1}}+{K_{k}}{w_{k}} +\] +Dabei wird der Unterschied zwischen dem erwarteten, errechneten, Zustand und dem gemessenen Zustand berechnet. + +Dazu kommt eine neue Kovarianz für den nächste Vorhersageschritt: +\[ +{P_{k|k}}=(I-{K_{k}}{H}){P_{k|k-1}} +\] +Der ganze Algorithmus und beginnt wieder mit der Vorhersage +\[ +{x_{k|k-1}}=\Phi{x_{k-1|k-1}}= \exp(A\Delta t){x_{k|k-1}}. +\] + + \subsection{Anfangsbedingungen} \subsubsection*{Anfangszustand $x$} Das Filter benötigt eine Anfangsbedingung. @@ -141,14 +220,14 @@ A = \left( \end{array}\right) \] Dabei soll der Kalman-Filter in diskreten Zeitschritten $\Delta t$ arbeiten. +$A$ beschreibt ein kontinuierliches System ($\dot x = Ax$), wir benötigen jedoch ein Zeit-diskretes System $x_{k+1} = \Phi x_k$. Die Übergangs-Matrix erhalten wir aus der Systemdynamikmatrix mittels Exponentialfunktion: \[\Phi = \exp(A\Delta t). \] Die Matrix $\Phi$ beschreibt die Übergänge zwischen zeitlich aufeinanderfolgenden Zuständen $x_{k-1}$ und $x_{k}$ \subsubsection*{Prozessrauschkovarianzmatrix $Q$} Die Prozessrauschmatrix teilt dem Filter mit, wie sich der Prozess verändert. -Kalman-Filter berücksichtigen Unsicherheiten wie Messfehler und -rauschen. -In der Matrix $Q$ geht es jedoch um die Unsicherheit, die der Prozess mit sich bringt. +Die Matrix $Q$ beschreibt die Unsicherheit, die der Prozess mit sich bringt. Bei unserem Modell könnte das beispielsweise ein Windstoss an die Masse sein oder auch die Ungenauigkeiten im Modell, wie die Annahme das dich die Kraft nicht ändert. Für uns wäre dies: \[ @@ -160,11 +239,10 @@ Q = \left( \end{array}\right) \] Die Standabweichungen müssten statistisch ermittelt werden, da der Fehler nicht vom Sensor kommt und somit nicht vom Hersteller gegeben ist. -Das Bedeutet wiederum dass $Q$ die Unsicherheit des Prozesses beschreibt und nicht die der Messung. \subsubsection*{Messmatrix $H$} Die Messmatrix gibt an, welche Parameter gemessen werden. -$H$ ist die Gleichung die für die Vorhersage der Messung. +$H$ ist die Matrix für die Vorhersage der Messung. In unserem Falle ist es die Position der Massen. \[ H = (1, 0, 0) @@ -179,77 +257,6 @@ R= ({\sigma_\mathrm{sensor}}^2). Diese Messrauchen wird meistens vom Sensorhersteller angegeben. Für unsere theoretische Apparatur wird hier ein kleiner Fehler eingesetzt da heutige Sensoren sehr genau messen können. -\subsection{Fiter-Agorithmus} -Nachdem alle Parameter aufgestellt sind, wird das Filter initialisiert. -Zuerst wird der nächste Zustand der Masse vorhergesagt, danach wird die Messung präzisiert und laufend aktualisiert. -Das Filter berechnet aufgrund der aktuellen Schätzung eine Vorhersage. -Diese wird, sobald verfügbar, mit der Messung verglichen. -Aus dieser Differenz und den Unsicherheiten des Prozesses ($Q$) und der Messung ($R$) wird der wahrscheinlichste, neue Zustand geschätzt. -Dabei muss genau auf den Index geachtet werden. Nach dem Artikel~\cite{erdbeben:wikipedia} ist die Indexierung so genormt: -Der Zeitschritt wird mit $k$ definiert, $k-1$ ist somit ein Zeitschritt vor $k$. -Auf der linken Seite von | wird der aktuelle Zustand verlangt, bzw. ausgegeben, auf der rechten Seiten den bisherigen Zustand. -Dies bedeutet, dass die Notation $x_{n|m}$ die Schätzung von $x$ zum Zeitpunkt $n$ bis und mit zur Zeitpunkt $m \leq \ n$ präsentiert. - -\subsubsection*{Vorhersage} -Im Filterschritt Vorhersage wird der nächste Zustand anhand des Anfangszustand und der Systemmatrix berechnet. -Dies funktioniert mit dem Rechenschritt: -\[ -{x_{k|k-1}}=\Phi{x_{k-1|k-1}}= \exp(A\Delta t){x_{k-1|k-1}}. -\] -Die Kovarianz $P_{k|k-1}$ wird ebenfalls neu berechnet. Zudem kommt noch die Prozessunsicherheit $Q$ dazu, so dass die Unsicherheit des Anfangsfehlers $P$ laufend verändert. -Dies funktioniert durch multiplizieren der Systemmatrix mit dem aktualisierten Anfangsfehler. -Dazu wird noch die Prozessunsicherheit addiert, somit entsteht die Gleichung -\[ -{P_{k|k-1}}=\Phi {P_{k-1|k-1}} {\Phi _{k}}^T + {Q_{k-1}}. -\] -Es vergeht genau $\Delta t$ Zeit, und dieser Vorgang wird wiederholt. -Das hochgestellte T bezeichnet die transponierte Matrix. -Dabei wird in den späteren Schritten überprüft, wie genau die letzte Anpassung von $P$ zur Messung stimmt. -Ist der Unterschied klein, wird die Kovarianz $P$ kleiner, ist der Unterschied gross, wird auch die Kovarianz grösser. -Das Filter passt sich selber an und korrigiert sich bei grosser Abweichung. - -\subsubsection*{Messen} -Der Sensor wurde noch nicht benutz, doch genau der liefert Werte für das Filter. -Die aktuellen Messwerte $z$ werden die Innovation $w$ mit dem Zustandsvektor $x$ und der Messmatrix $H$ zusammengerechnet. -Hier bei wird lediglich die Messung mit dem Fehler behaftet, und die Messmatrix $H$ mit der Vorhersage multipliziert. -\[ -{w_{k}}={z_{k}}-{H}{x_{k|k-1}}. -\] -Die Innovation ist der Teil der Messung, die nicht durch die Systemdynamik erklärt werden kann. -Die Hilfsgröße Innovation beschreibt, wie genau die Vorhersage den aktuellen Messwert mittels der Systemmatrix $\Phi$ beschreiben kann. -Für eine schlechte Vorhersage wird die dazugehörige Innovation gross, für eine genaue Vorhersage dagegen klein sein. -Entsprechende Korrekturen müssen dann gross bzw. nur gering ausfallen. -Innovation = Messung - Vorhersage. Dies leuchtet ein, eine Innovation von 0 bedeutet, dass die Messung nichts Neues hervorbrachte. - -Im nächsten Schritt wir analysiert, mit welcher Kovarianz weiter gerechnet wird. -Hierbei wird die Unsicherheit $P$, die Messmatrix $H$ und die Messunsicherheit $R$ miteinander verrechnet. -\[ -{S_{k}}={H}{P_{k|k-1}}{H}^T+{R_{k}} -\] - -\subsubsection*{Aktualisieren} -Im nächsten Schritt kommt nun die Wahrscheinlichkeit dazu. -\[{K_{k}}= {P_{k|k-1}} {H^T}{S_{k}^{-1}}\] -Dieser Vorgang wird Kalman-Gain genannt. -Das Kalman-Gain gibt dem Zustand die Gewichtung, bzw. wie die Vorhersage auf den Zustand passt. -Vereinfacht gesagt: Es wird das das Verhältnis zwischen der Unsicherheit der Vorhersage $P_k$ zu der zugehörigen Messunsicherheit $R_k$ gebildet. -In unserem Fall wird werden die Elemente der Kalman-Matrix vorweg berechnet, da das Kalman-Gain ohne Messungen auskommt. - -Anhand der Informationen aus dem Kalman-Gain $K$ wird das System aktualisiert. -\[ -{x_{k|k}}={x_{k|k-1}}+{K_{k}}{w_{k}} -\] -Dabei wird der Unterschied zwischen dem erwarteten, errechneten, Zustand und dem gemessenen Zustand berechnet. - -Dazu kommt eine neue Kovarianz für den nächste Vorhersageschritt: -\[ -{P_{k|k}}=(I-{K_{k}}{H}){P_{k|k-1}} -\] -Der ganze Algorithmus und beginnt wieder mit der Vorhersage -\[ -{x_{k|k-1}}=\Phi{x_{k-1|k-1}}= \exp(A\Delta t){x_{k|k-1}}. -\] - \subsection{Zusammenfassung } Zusammenfassend kann das Kalman-Filter in offizieller Typus dargestellt werden. Dabei beginnt das Filter mit dem Anfangszustand für $k=0$ diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM Binary files differdeleted file mode 100755 index d52dda4..0000000 --- a/buch/papers/multiplikation/code/MM +++ /dev/null diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c index a897d4f..2588262 100755 --- a/buch/papers/multiplikation/code/MM.c +++ b/buch/papers/multiplikation/code/MM.c @@ -28,11 +28,12 @@ int main() { // omp_set_num_threads(4);
// run_algo(openMP_MM, "openMP_MM",0);
run_algo(MM_dc, "MM_dc",0);
+
run_algo(strassen, "strassen",0);
run_algo(MM, "MM", 0);
- run_algo(winograd, "winograd", 0);
- run_algo_cblas(0);
+ run_algo(winograd, "winograd", 0);
+ run_algo_cblas(0);
return 0;
}
@@ -414,12 +415,12 @@ void run_algo(void (*algo)(), char alog_name[], int print) for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
- int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
- double dtime = omp_get_wtime();
- algo(Ap[i], Bp[i], (int*) C, n[i]);
- dtime = omp_get_wtime() - dtime;
+ int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
+ double dtime = omp_get_wtime();
+ algo(Ap[i], Bp[i], (int*) C, n[i]);
+ dtime = omp_get_wtime() - dtime;
// printf("The %s program took %f seconds to execute \n", alog_name, dtime);
fprintf(fptr, "%f,%d\n", dtime, n[i]);
@@ -428,7 +429,7 @@ void run_algo(void (*algo)(), char alog_name[], int print) printMatrix((int*)C, n[i]);
}
free(C);
- }
+ }
}
fclose(fptr);
@@ -442,7 +443,7 @@ void run_algo_cblas(int print) fptr = fopen("meas/blas.txt", "w");
for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
double *dC = (double*) malloc(n[i] * n[i] * sizeof(double));
double dtime = omp_get_wtime();
diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index 7220ae1..8057850 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -5,6 +5,7 @@ Created on Fri Mar 19 07:31:29 2021 @author: nunigan """ +import scipy.stats import numpy as np import time import matplotlib.pyplot as plt @@ -133,9 +134,6 @@ def winograd2(A, B): def test_perfomance(n): - import mkl - mkl.set_num_threads(1) - t_mm = [] t_mm_dc = [] t_mm_strassen = [] @@ -148,21 +146,21 @@ def test_perfomance(n): # A = np.random.randint(-100, 100,(i, i)) # B = np.random.randint(-100, 100,(i, i)) - # start = time.time() - # C3 = strassen(A, B) - # t_mm_strassen.append(time.time() - start) + start = time.time() + C3 = strassen(A, B) + t_mm_strassen.append(time.time() - start) - # start = time.time() - # C1 = MM(A, B) - # t_mm.append(time.time() - start) + start = time.time() + C1 = MM(A, B) + t_mm.append(time.time() - start) - # start = time.time() - # C2 = MM_dc(A, B) - # t_mm_dc.append(time.time() - start) + start = time.time() + C2 = MM_dc(A, B) + t_mm_dc.append(time.time() - start) - # start = time.time() - # C4 = winograd2(A, B) - # t_wino.append(time.time() - start) + start = time.time() + C4 = winograd2(A, B) + t_wino.append(time.time() - start) start = time.time() C = A@B @@ -173,10 +171,10 @@ def test_perfomance(n): plt.rc('axes', labelsize=23) plt.rc('xtick', labelsize=23) plt.rc('ytick', labelsize=23) - # plt.plot(n, t_mm, label='Standard', lw=5) - # plt.plot(n, t_mm_dc, label='Divide and conquer', lw=5) - # plt.plot(n, t_mm_strassen, label='Strassen', lw=5) - # plt.plot(n, t_wino, label='Winograd', lw=5) + plt.plot(n, t_mm, label='Standard', lw=5) + plt.plot(n, t_mm_dc, label='Divide and conquer', lw=5) + plt.plot(n, t_mm_strassen, label='Strassen', lw=5) + plt.plot(n, t_wino, label='Winograd', lw=5) plt.plot(n, t_np, label='NumPy A@B', lw=5) # plt.xscale('log', base=2) plt.legend() @@ -186,9 +184,9 @@ def test_perfomance(n): plt.tight_layout() # plt.yscale('log') plt.legend(fontsize=19) - # plt.savefig('meas_' + str(max(n))+ '.pdf') - # arr = np.array([n, t_mm, t_mm_dc, t_mm_strassen, t_wino, t_np]) - # np.savetxt('meas_' + str(max(n))+ '.txt',arr) + plt.savefig('meas_' + str(max(n))+ '.pdf') + arr = np.array([n, t_mm, t_mm_dc, t_mm_strassen, t_wino, t_np]) + np.savetxt('meas_' + str(max(n))+ '.txt',arr) return t_np @@ -249,6 +247,8 @@ def plot_c_res(ave, num): # blas_t = np.mean(blas_t.reshape(-1,ave),axis=1) # blas_n = np.mean(blas_n.reshape(-1,ave),axis=1) + + def func(x, a,b): return b*x**a @@ -261,11 +261,11 @@ def plot_c_res(ave, num): plt.rc('axes', labelsize=23) plt.rc('xtick', labelsize=23) plt.rc('ytick', labelsize=23) - plt.loglog(MM_n, MM_t, label='3 For Loops', lw=5) - plt.loglog(winograd_n, winograd_t, label='Winograd MM', lw=5) - plt.loglog(blas_n, blas_t, label='Blas', lw=5) - plt.loglog(strassen_n, strassen_t, label='Strassen', lw=5) - plt.loglog(MM_dc_n, MM_dc_t, label='Divide and Conquer', lw=5) + plt.loglog(MM_n, MM_t, '.', label='3 For Loops', lw=5) + plt.loglog(winograd_n, winograd_t, '.', label='Winograd MM', lw=5) + plt.loglog(blas_n, blas_t, '.', label='Blas', lw=5) + plt.loglog(strassen_n, strassen_t, '.', label='Strassen', lw=5) + plt.loglog(MM_dc_n, MM_dc_t, '.', label='Divide and Conquer', lw=5) plt.xlabel("n") # plt.yscale('log', base=10) # plt.xscale('log', base=2) @@ -281,16 +281,33 @@ def plot_c_res(ave, num): plt.legend() # return [MM_n,winograd_n,blas_n,strassen_n,MM_dc_n] + + return [MM_t,winograd_t,blas_t,strassen_t,MM_dc_t] +def mean_confidence_interval(data, confidence=0.95): + a = 1.0 * np.array(data) + n = len(a) + m, se = np.mean(a), scipy.stats.sem(a) + h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1) + return m, h + # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - # A = plot_c_res(1, 4096) - - - arr = plot(1024) + # A = plot_c_res(10, 4096) + # name = ['MM', 'Wino', 'blas', 'strassen', 'dc'] + # for i in range(5): + # ci_inner = [] + # print(name[i]) + # for j in range(11): + # m,h=mean_confidence_interval(A[i][j*10:(j+1)*10]) + # print("({},{})".format(2**(j+1),m)) + # np.savetxt('meas/ci/' + name[i]+'.txt',ci_inner) + + arr = plot(4096) # n = np.logspace(1,12,12,base=2,dtype=(np.int)) + # n=[2048,4096] # n = np.arange(1,50,2) # A = np.random.randint(-10, 6, (5,3)) # B = np.random.randint(-10, 6, (3,5)) diff --git a/buch/papers/multiplikation/code/c_matrix.h b/buch/papers/multiplikation/code/c_matrix.h index 14389fc..63d5390 100644 --- a/buch/papers/multiplikation/code/c_matrix.h +++ b/buch/papers/multiplikation/code/c_matrix.h @@ -1,101 +1,177 @@ -/* Seminar Matrizen, autogenerated File, Michael Schmid, 02/08/2021, 22:48:43 */ +/* Seminar Matrizen, autogenerated File, Michael Schmid, 10/08/2021, 05:46:32 */ #include <stdint.h> const int A0[][2] = { - {75,47}, - {-41,-24} + {60,-84}, + {-66,-1} }; const int B0[][2] = { - {-53,-95}, - {-93,30} + {-45,87}, + {-38,-73} }; const double dB0[][2] = { - {-53,-95}, - {-93,30} + {-45,87}, + {-38,-73} }; const double dA0[][2] = { - {75,47}, - {-41,-24} + {60,-84}, + {-66,-1} }; const int A1[][4] = { - {47,11,-66,8}, - {36,98,39,82}, - {-32,12,40,-79}, - {61,-20,-85,-98} + {-72,-19,-91,62}, + {-36,-74,-44,-47}, + {-39,-31,50,-93}, + {-81,2,-17,-86} }; const int B1[][4] = { - {37,75,-53,9}, - {37,-33,-67,38}, - {70,39,-93,43}, - {43,41,23,-4} + {-66,39,-23,52}, + {-88,-13,13,-13}, + {-45,-70,28,-20}, + {96,5,88,96} }; const double dB1[][4] = { - {37,75,-53,9}, - {37,-33,-67,38}, - {70,39,-93,43}, - {43,41,23,-4} + {-66,39,-23,52}, + {-88,-13,13,-13}, + {-45,-70,28,-20}, + {96,5,88,96} }; const double dA1[][4] = { - {47,11,-66,8}, - {36,98,39,82}, - {-32,12,40,-79}, - {61,-20,-85,-98} + {-72,-19,-91,62}, + {-36,-74,-44,-47}, + {-39,-31,50,-93}, + {-81,2,-17,-86} }; const int A2[][8] = { - {-54,-87,87,69,52,-21,-86,55}, - {19,-75,-61,-50,-55,-23,66,-92}, - {-73,-67,-36,19,84,-11,24,46}, - {-98,62,-76,57,-100,6,-23,-51}, - {62,46,1,-64,42,-9,85,-12}, - {35,-59,-17,-47,78,86,-50,74}, - {-15,45,33,-59,-9,-81,49,96}, - {-57,22,-43,7,-30,-45,-5,13} + {-36,-2,-58,-32,34,-89,49,-55}, + {-68,-73,52,-3,-51,-37,-31,70}, + {73,-90,-21,-79,-15,96,-99,12}, + {68,-25,38,-73,-60,35,-99,72}, + {-43,-87,48,-84,-100,37,80,53}, + {-27,88,-5,-82,-57,-27,20,10}, + {-91,-47,54,-90,-99,-76,50,-18}, + {69,-36,76,5,-67,-38,-95,91} }; const int B2[][8] = { - {-71,-82,-80,-78,83,-97,48,-24}, - {15,75,15,-60,-63,-53,1,-50}, - {-84,63,67,-2,78,93,-13,95}, - {61,-26,-88,56,56,27,26,1}, - {2,54,21,36,9,-41,53,53}, - {85,-11,42,-51,-6,3,27,97}, - {10,-2,90,-76,-75,0,8,-37}, - {10,-64,47,-69,66,-50,89,-66} + {-84,22,-13,-66,-42,51,66,0}, + {37,-65,66,-85,-10,-23,77,5}, + {1,41,-79,0,63,-37,-10,29}, + {72,66,-99,92,-28,65,25,-40}, + {69,-49,65,-18,64,-97,-47,30}, + {36,86,66,-12,-17,89,1,-37}, + {-100,11,27,23,-75,-23,96,-9}, + {68,90,-87,-99,-70,-28,98,-76} }; const double dB2[][8] = { - {-71,-82,-80,-78,83,-97,48,-24}, - {15,75,15,-60,-63,-53,1,-50}, - {-84,63,67,-2,78,93,-13,95}, - {61,-26,-88,56,56,27,26,1}, - {2,54,21,36,9,-41,53,53}, - {85,-11,42,-51,-6,3,27,97}, - {10,-2,90,-76,-75,0,8,-37}, - {10,-64,47,-69,66,-50,89,-66} + {-84,22,-13,-66,-42,51,66,0}, + {37,-65,66,-85,-10,-23,77,5}, + {1,41,-79,0,63,-37,-10,29}, + {72,66,-99,92,-28,65,25,-40}, + {69,-49,65,-18,64,-97,-47,30}, + {36,86,66,-12,-17,89,1,-37}, + {-100,11,27,23,-75,-23,96,-9}, + {68,90,-87,-99,-70,-28,98,-76} }; const double dA2[][8] = { - {-54,-87,87,69,52,-21,-86,55}, - {19,-75,-61,-50,-55,-23,66,-92}, - {-73,-67,-36,19,84,-11,24,46}, - {-98,62,-76,57,-100,6,-23,-51}, - {62,46,1,-64,42,-9,85,-12}, - {35,-59,-17,-47,78,86,-50,74}, - {-15,45,33,-59,-9,-81,49,96}, - {-57,22,-43,7,-30,-45,-5,13} - }; -const int *Ap[3] = {(int*) A0,(int*) A1,(int*) A2}; -const int *Bp[3] = {(int*) B0,(int*) B1,(int*) B2}; -const double *dAp[3] = {(double*) dA0,(double*) dA1,(double*) dA2}; -const double *dBp[3] = {(double*) dB0,(double*) dB1,(double*) dB2}; -int n[3] = {2,4,8}; -int n_arrays = 3; + {-36,-2,-58,-32,34,-89,49,-55}, + {-68,-73,52,-3,-51,-37,-31,70}, + {73,-90,-21,-79,-15,96,-99,12}, + {68,-25,38,-73,-60,35,-99,72}, + {-43,-87,48,-84,-100,37,80,53}, + {-27,88,-5,-82,-57,-27,20,10}, + {-91,-47,54,-90,-99,-76,50,-18}, + {69,-36,76,5,-67,-38,-95,91} + }; +const int A3[][16] = + { + {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59}, + {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66}, + {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54}, + {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26}, + {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14}, + {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97}, + {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80}, + {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63}, + {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52}, + {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41}, + {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4}, + {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6}, + {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19}, + {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49}, + {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58}, + {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61} + }; +const int B3[][16] = + { + {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70}, + {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50}, + {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71}, + {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24}, + {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91}, + {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69}, + {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45}, + {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7}, + {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42}, + {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35}, + {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91}, + {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61}, + {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23}, + {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8}, + {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57}, + {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75} + }; +const double dB3[][16] = + { + {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70}, + {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50}, + {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71}, + {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24}, + {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91}, + {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69}, + {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45}, + {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7}, + {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42}, + {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35}, + {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91}, + {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61}, + {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23}, + {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8}, + {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57}, + {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75} + }; +const double dA3[][16] = + { + {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59}, + {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66}, + {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54}, + {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26}, + {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14}, + {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97}, + {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80}, + {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63}, + {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52}, + {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41}, + {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4}, + {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6}, + {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19}, + {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49}, + {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58}, + {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61} + }; +const int *Ap[4] = {(int*) A0,(int*) A1,(int*) A2,(int*) A3}; +const int *Bp[4] = {(int*) B0,(int*) B1,(int*) B2,(int*) B3}; +const double *dAp[4] = {(double*) dA0,(double*) dA1,(double*) dA2,(double*) dA3}; +const double *dBp[4] = {(double*) dB0,(double*) dB1,(double*) dB2,(double*) dB3}; +int n[4] = {2,4,8,16}; +int n_arrays = 4; diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf Binary files differindex 5236afb..f637ae4 100644 --- a/buch/papers/multiplikation/code/c_meas_4096.pdf +++ b/buch/papers/multiplikation/code/c_meas_4096.pdf diff --git a/buch/papers/multiplikation/code/ci.txt b/buch/papers/multiplikation/code/ci.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/ci.txt diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py index 485fa76..3b74f67 100755 --- a/buch/papers/multiplikation/code/helper_class.py +++ b/buch/papers/multiplikation/code/helper_class.py @@ -101,5 +101,6 @@ if __name__ == '__main__': helper = Helper() # n = np.arange(2,10) - n = np.logspace(1,3,3,base=2,dtype=(np.int)) - C = helper.write_c_matrix(n) + n = np.logspace(1,11,11,base=2,dtype=(np.int)) + # n=[8192] + # C = helper.write_c_matrix(n) diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt index e296dd7..7bffb6e 100644 --- a/buch/papers/multiplikation/code/meas/MM.txt +++ b/buch/papers/multiplikation/code/meas/MM.txt @@ -1,12 +1,110 @@ -0.000001,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 0.000001,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000001,4 +0.000001,4 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000001,8 0.000001,8 -0.000010,16 -0.000081,32 -0.000654,64 -0.005556,128 -0.054253,256 -0.487317,512 -4.162845,1024 -125.909034,2048 -1111.312696,4096 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000021,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000090,32 +0.000093,32 +0.000083,32 +0.000082,32 +0.000090,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000089,32 +0.000126,32 +0.000771,64 +0.000651,64 +0.000651,64 +0.000651,64 +0.000731,64 +0.000673,64 +0.000745,64 +0.000672,64 +0.000671,64 +0.000707,64 +0.005642,128 +0.005579,128 +0.005768,128 +0.005745,128 +0.005518,128 +0.005877,128 +0.005513,128 +0.005850,128 +0.005769,128 +0.005581,128 +0.052188,256 +0.051988,256 +0.051888,256 +0.051518,256 +0.051709,256 +0.051543,256 +0.051707,256 +0.051845,256 +0.051495,256 +0.051834,256 +0.507020,512 +0.504111,512 +0.502049,512 +0.529743,512 +0.501028,512 +0.502097,512 +0.503490,512 +0.502079,512 +0.506688,512 +0.504163,512 +4.538722,1024 +4.291473,1024 +4.516302,1024 +4.374630,1024 +4.719557,1024 +4.438999,1024 +4.641680,1024 +4.407959,1024 +4.441451,1024 +4.677313,1024 +129.433279,2048 +129.277802,2048 +129.284817,2048 +129.086884,2048 +129.197444,2048 +129.350999,2048 +129.264250,2048 +129.295723,2048 +129.402601,2048 +129.300820,2048 diff --git a/buch/papers/multiplikation/code/meas/MM_dc.txt b/buch/papers/multiplikation/code/meas/MM_dc.txt index f6be928..b78b925 100644 --- a/buch/papers/multiplikation/code/meas/MM_dc.txt +++ b/buch/papers/multiplikation/code/meas/MM_dc.txt @@ -1,12 +1,110 @@ 0.000003,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 0.000002,4 -0.000010,8 -0.000068,16 -0.000594,32 -0.004264,64 -0.036289,128 -0.324645,256 -2.612010,512 -19.928951,1024 -159.333884,2048 -1147.106865,4096 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000001,4 +0.000008,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000007,8 +0.000007,8 +0.000007,8 +0.000007,8 +0.000018,8 +0.000008,8 +0.000075,16 +0.000063,16 +0.000088,16 +0.000062,16 +0.000086,16 +0.000092,16 +0.000081,16 +0.000080,16 +0.000070,16 +0.000085,16 +0.000581,32 +0.000659,32 +0.000584,32 +0.000714,32 +0.000666,32 +0.000574,32 +0.000616,32 +0.000534,32 +0.000506,32 +0.000506,32 +0.004567,64 +0.004502,64 +0.004332,64 +0.004578,64 +0.004543,64 +0.004426,64 +0.004497,64 +0.004329,64 +0.004288,64 +0.004277,64 +0.036456,128 +0.034901,128 +0.034545,128 +0.034283,128 +0.035150,128 +0.034663,128 +0.034901,128 +0.034022,128 +0.034368,128 +0.035154,128 +0.296292,256 +0.297592,256 +0.302464,256 +0.299557,256 +0.299367,256 +0.306394,256 +0.287616,256 +0.292630,256 +0.289542,256 +0.277019,256 +2.331956,512 +2.224501,512 +2.203910,512 +2.198937,512 +2.206083,512 +2.199477,512 +2.199847,512 +2.225379,512 +2.202491,512 +2.235926,512 +17.649432,1024 +17.636769,1024 +17.639024,1024 +17.625402,1024 +17.722286,1024 +17.611777,1024 +17.653120,1024 +17.748270,1024 +17.691817,1024 +17.614448,1024 +141.943689,2048 +141.580812,2048 +141.882050,2048 +141.516253,2048 +141.351237,2048 +141.641167,2048 +141.596407,2048 +141.607048,2048 +141.469723,2048 +141.515550,2048 diff --git a/buch/papers/multiplikation/code/meas/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt index 92a61b9..9414d8f 100644 --- a/buch/papers/multiplikation/code/meas/blas.txt +++ b/buch/papers/multiplikation/code/meas/blas.txt @@ -1,12 +1,110 @@ 0.000001,2 -0.000001,4 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 0.000001,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 0.000003,16 -0.000022,32 -0.000179,64 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000012,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000021,32 +0.000019,32 +0.000030,32 +0.000020,32 +0.000020,32 +0.000020,32 +0.000020,32 +0.000020,32 +0.000020,32 +0.000020,32 +0.000180,64 +0.000192,64 +0.000163,64 +0.000153,64 +0.000153,64 +0.000197,64 +0.000163,64 +0.000267,64 +0.000226,64 +0.000164,64 +0.001216,128 +0.001233,128 +0.001364,128 0.001278,128 -0.010165,256 -0.074739,512 -0.704748,1024 -6.845095,2048 -55.845038,4096 +0.001211,128 +0.001295,128 +0.001206,128 +0.001371,128 +0.001225,128 +0.001250,128 +0.009733,256 +0.009497,256 +0.009586,256 +0.009600,256 +0.009768,256 +0.009566,256 +0.009731,256 +0.009550,256 +0.009664,256 +0.009794,256 +0.077453,512 +0.076616,512 +0.088812,512 +0.075990,512 +0.076925,512 +0.076303,512 +0.075915,512 +0.075600,512 +0.075122,512 +0.075029,512 +0.769186,1024 +0.775780,1024 +0.753906,1024 +0.757834,1024 +0.772001,1024 +0.770950,1024 +0.791317,1024 +0.753319,1024 +0.747228,1024 +0.752347,1024 +7.625205,2048 +7.652278,2048 +7.640682,2048 +7.649428,2048 +7.632806,2048 +7.579347,2048 +7.612317,2048 +7.676742,2048 +7.632979,2048 +7.619210,2048 diff --git a/buch/papers/multiplikation/code/meas/ci/MM.txt b/buch/papers/multiplikation/code/meas/ci/MM.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/MM.txt diff --git a/buch/papers/multiplikation/code/meas/ci/Wino.txt b/buch/papers/multiplikation/code/meas/ci/Wino.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/Wino.txt diff --git a/buch/papers/multiplikation/code/meas/ci/blas.txt b/buch/papers/multiplikation/code/meas/ci/blas.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/blas.txt diff --git a/buch/papers/multiplikation/code/meas/ci/dc.txt b/buch/papers/multiplikation/code/meas/ci/dc.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/dc.txt diff --git a/buch/papers/multiplikation/code/meas/ci/strassen.txt b/buch/papers/multiplikation/code/meas/ci/strassen.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/strassen.txt diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM.txt b/buch/papers/multiplikation/code/meas/old/8196/MM.txt new file mode 100644 index 0000000..0edf9f6 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/8196/MM.txt @@ -0,0 +1 @@ +9376.173434,8192 diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt new file mode 100644 index 0000000..36f6ff0 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt @@ -0,0 +1 @@ +9606.402522,8192 diff --git a/buch/papers/multiplikation/code/meas/old/8196/blas.txt b/buch/papers/multiplikation/code/meas/old/8196/blas.txt new file mode 100644 index 0000000..b5989fb --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/8196/blas.txt @@ -0,0 +1 @@ +478.429957,8192 diff --git a/buch/papers/multiplikation/code/meas/old/8196/strassen.txt b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt new file mode 100644 index 0000000..ca06e97 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt @@ -0,0 +1 @@ +3014.235467,8192 diff --git a/buch/papers/multiplikation/code/meas/old/8196/winograd.txt b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt new file mode 100644 index 0000000..2a529c4 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt @@ -0,0 +1 @@ +10071.512655,8192 diff --git a/buch/papers/multiplikation/code/meas/old/MM.txt b/buch/papers/multiplikation/code/meas/old/MM.txt new file mode 100644 index 0000000..e296dd7 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/MM.txt @@ -0,0 +1,12 @@ +0.000001,2 +0.000001,4 +0.000001,8 +0.000010,16 +0.000081,32 +0.000654,64 +0.005556,128 +0.054253,256 +0.487317,512 +4.162845,1024 +125.909034,2048 +1111.312696,4096 diff --git a/buch/papers/multiplikation/code/meas/old/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/MM_dc.txt new file mode 100644 index 0000000..f6be928 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/MM_dc.txt @@ -0,0 +1,12 @@ +0.000003,2 +0.000002,4 +0.000010,8 +0.000068,16 +0.000594,32 +0.004264,64 +0.036289,128 +0.324645,256 +2.612010,512 +19.928951,1024 +159.333884,2048 +1147.106865,4096 diff --git a/buch/papers/multiplikation/code/meas/old/blas.txt b/buch/papers/multiplikation/code/meas/old/blas.txt new file mode 100644 index 0000000..92a61b9 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/blas.txt @@ -0,0 +1,12 @@ +0.000001,2 +0.000001,4 +0.000001,8 +0.000003,16 +0.000022,32 +0.000179,64 +0.001278,128 +0.010165,256 +0.074739,512 +0.704748,1024 +6.845095,2048 +55.845038,4096 diff --git a/buch/papers/multiplikation/code/meas/old/strassen.txt b/buch/papers/multiplikation/code/meas/old/strassen.txt new file mode 100644 index 0000000..fdfbf2b --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/strassen.txt @@ -0,0 +1,12 @@ +0.000001,2 +0.000003,4 +0.000010,8 +0.000066,16 +0.000470,32 +0.003368,64 +0.024232,128 +0.172000,256 +1.209262,512 +8.457472,1024 +59.267256,2048 +414.648901,4096 diff --git a/buch/papers/multiplikation/code/meas/old/winograd.txt b/buch/papers/multiplikation/code/meas/old/winograd.txt new file mode 100644 index 0000000..d185906 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/old/winograd.txt @@ -0,0 +1,12 @@ +0.000001,2 +0.000001,4 +0.000002,8 +0.000011,16 +0.000100,32 +0.000654,64 +0.005229,128 +0.057440,256 +0.517850,512 +4.539413,1024 +130.627663,2048 +1179.261048,4096 diff --git a/buch/papers/multiplikation/code/meas/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt index fdfbf2b..d6e040e 100644 --- a/buch/papers/multiplikation/code/meas/strassen.txt +++ b/buch/papers/multiplikation/code/meas/strassen.txt @@ -1,12 +1,110 @@ -0.000001,2 -0.000003,4 -0.000010,8 -0.000066,16 -0.000470,32 -0.003368,64 -0.024232,128 -0.172000,256 -1.209262,512 -8.457472,1024 -59.267256,2048 -414.648901,4096 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000004,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000002,4 +0.000001,4 +0.000020,8 +0.000018,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000008,8 +0.000019,8 +0.000080,16 +0.000075,16 +0.000078,16 +0.000085,16 +0.000065,16 +0.000065,16 +0.000065,16 +0.000064,16 +0.000065,16 +0.000065,16 +0.000546,32 +0.000480,32 +0.000563,32 +0.000551,32 +0.000502,32 +0.000504,32 +0.000463,32 +0.000462,32 +0.000508,32 +0.000462,32 +0.003675,64 +0.003665,64 +0.003493,64 +0.003708,64 +0.003465,64 +0.003502,64 +0.003710,64 +0.003537,64 +0.003637,64 +0.003568,64 +0.025342,128 +0.025179,128 +0.026475,128 +0.025758,128 +0.025333,128 +0.024988,128 +0.025727,128 +0.025298,128 +0.025283,128 +0.025098,128 +0.181311,256 +0.178432,256 +0.177075,256 +0.177474,256 +0.177025,256 +0.177805,256 +0.177944,256 +0.178151,256 +0.177858,256 +0.178742,256 +1.283374,512 +1.246682,512 +1.245898,512 +1.251547,512 +1.250288,512 +1.250495,512 +1.257037,512 +1.255247,512 +1.255382,512 +1.259050,512 +8.784102,1024 +8.845725,1024 +8.771100,1024 +8.770184,1024 +8.955977,1024 +8.849161,1024 +8.806902,1024 +8.808937,1024 +8.848900,1024 +8.861383,1024 +61.787123,2048 +61.972599,2048 +61.822434,2048 +62.051331,2048 +61.946171,2048 +61.911404,2048 +61.872671,2048 +61.791260,2048 +61.818110,2048 +62.045588,2048 diff --git a/buch/papers/multiplikation/code/meas/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt index d185906..970a3f4 100644 --- a/buch/papers/multiplikation/code/meas/winograd.txt +++ b/buch/papers/multiplikation/code/meas/winograd.txt @@ -1,12 +1,110 @@ 0.000001,2 -0.000001,4 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,2 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 +0.000000,4 0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000021,16 +0.000011,16 0.000011,16 -0.000100,32 -0.000654,64 -0.005229,128 -0.057440,256 -0.517850,512 -4.539413,1024 -130.627663,2048 -1179.261048,4096 +0.000092,32 +0.000092,32 +0.000081,32 +0.000081,32 +0.000081,32 +0.000081,32 +0.000088,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000670,64 +0.000739,64 +0.000609,64 +0.000609,64 +0.000700,64 +0.000648,64 +0.000626,64 +0.000626,64 +0.000626,64 +0.000626,64 +0.005321,128 +0.005286,128 +0.005180,128 +0.005223,128 +0.005249,128 +0.005299,128 +0.005205,128 +0.005268,128 +0.005464,128 +0.005378,128 +0.053123,256 +0.052325,256 +0.052729,256 +0.052930,256 +0.052207,256 +0.053178,256 +0.052122,256 +0.052681,256 +0.052965,256 +0.052486,256 +0.527028,512 +0.525201,512 +0.521822,512 +0.525147,512 +0.525241,512 +0.527725,512 +0.526321,512 +0.526479,512 +0.524020,512 +0.520768,512 +4.732299,1024 +4.617253,1024 +4.647425,1024 +4.519233,1024 +4.917471,1024 +4.564929,1024 +4.870771,1024 +4.555407,1024 +4.727473,1024 +4.559349,1024 +136.409028,2048 +136.390557,2048 +136.541672,2048 +136.598491,2048 +137.720790,2048 +136.825926,2048 +136.367686,2048 +136.650627,2048 +136.642195,2048 +136.622805,2048 diff --git a/buch/papers/multiplikation/code/meas_4096.pdf b/buch/papers/multiplikation/code/meas_4096.pdf Binary files differindex e889d17..ecf2cff 100644 --- a/buch/papers/multiplikation/code/meas_4096.pdf +++ b/buch/papers/multiplikation/code/meas_4096.pdf diff --git a/buch/papers/multiplikation/code/meas_4096.txt b/buch/papers/multiplikation/code/meas_4096.txt index e69de29..cae1bc6 100644 --- a/buch/papers/multiplikation/code/meas_4096.txt +++ b/buch/papers/multiplikation/code/meas_4096.txt @@ -0,0 +1,6 @@ +2.048000000000000000e+03 4.096000000000000000e+03 +6.154183513402938843e+03 4.681333474493026733e+04 +7.375929301261901855e+03 5.846600176072120667e+04 +3.860573610544204712e+03 2.290433094644546509e+04 +4.884613198995590210e+03 4.359707747149467468e+04 +2.157390117645263672e-01 1.491588830947875977e+00 diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index 9f1cb04..9b03a4e 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -3,18 +3,17 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Einleitung \label{multiplikation:section:einleitung}} -\rhead{Einleitung} +\section{Matrizenmultiplikation \label{multiplikation:section:einleitung}} +\rhead{Matrizenmultiplikation} -Die Multiplikation zweier Matrizen ist eine wichtige Operation die in verschiedensten Teilen der Mathematik Anwendung findet. +Die Multiplikation zweier Matrizen ist eine wichtige Operation, die in verschiedensten Teilen der Mathematik Anwendung findet. Die Beschreibung der Multiplikation aus der Definition 2.10: - Eine $m\times n$-Matrix $\mathbf{A}\in M_{m\times n}(\Bbbk)$ und eine -$n\times p$-Matrix $\mathbf{B}\in M_{n\times l}(\Bbbk)$ haben als Produkt -eine $n\times l$-Matrix $\mathbf{C}=\mathbf{AB}\in M_{n\times l}(\Bbbk)$ mit den +$n\times p$-Matrix $\mathbf{B}\in M_{n\times p}(\Bbbk)$ haben als Produkt +eine $m\times p$-Matrix $\mathbf{C}=\mathbf{AB}\in M_{m\times p}(\Bbbk)$ mit den Koeffizienten \begin{equation} -c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}. +C_{ij} = \sum_{k=1}^n A_{ik} B_{kj}. \label{multiplikation:eq:MM} \end{equation} Grafisch kann die Matrizenmultiplikation $\mathbf{AB}=\mathbf{C}$ wie in Abbildung \ref{multiplikation:fig:mm_viz} visualisiert werden. @@ -34,7 +33,7 @@ C_{11} & C_{12}\\ C_{21} & C_{22} \end{bmatrix} \end{equation} -explizt als Gleichung +explizt als Gleichungen \begin{equation} \label{multiplikation:eq:MM_exp} \begin{split} C_{11} &= A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ @@ -47,6 +46,6 @@ der einzelnen Terme geschrieben werden. \begin{figure} \center \includegraphics[]{papers/multiplikation/images/mm_visualisation} - \caption{Matrizen Multiplikation} + \caption{Grafische Illustration der Matrizenmultiplikation} \label{multiplikation:fig:mm_viz} \end{figure} diff --git a/buch/papers/multiplikation/images/algo_tab.pdf b/buch/papers/multiplikation/images/algo_tab.pdf Binary files differnew file mode 100644 index 0000000..7f2bb4f --- /dev/null +++ b/buch/papers/multiplikation/images/algo_tab.pdf diff --git a/buch/papers/multiplikation/images/algo_tab.tex b/buch/papers/multiplikation/images/algo_tab.tex new file mode 100644 index 0000000..50ce392 --- /dev/null +++ b/buch/papers/multiplikation/images/algo_tab.tex @@ -0,0 +1,122 @@ +\documentclass{article} +\usepackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{times} +\usepackage{geometry} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{algorithm} +\usepackage{algpseudocode} +\usepackage{mathrsfs} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{lipsum} +\usepackage{amscd} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{textcomp} +\usepackage{pgfplots} +\usepackage{txfonts} +\usepackage[all]{xy} +\usepackage{paralist} +\usepackage[colorlinks=true]{hyperref} +\usepackage{array} +\usepackage{tikz} +\usepackage{slashed} +\usepackage{pdfpages} +\usepackage{multicol} +\usepackage{cite} +\usepackage{url} +\usepackage{amsmath,amsfonts,amssymb} +\usepackage{tikz} +\usetikzlibrary{arrows,matrix,positioning} +\usetikzlibrary{overlay-beamer-styles} +\usetikzlibrary{matrix.skeleton} +\usetikzlibrary{automata,positioning} +\usetikzlibrary{decorations.text} +\usepackage{listings} +\usepackage{multirow} +\usepackage{color} + +\begin{document} + + + +\begin{table}[t] + \begin{tabular}{ll} + \begin{minipage}{0.4\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:b1} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{B1}{$a, b$} + \State \textbf{return} $a+b$ + \EndFunction + \State + \State + \end{algorithmic} + \end{algorithm} + \end{minipage} + & + \begin{minipage}{0.4\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:b2} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{B2}{$a, b$} + \State $ x \gets a+b $ + \State $ y \gets a \cdot b $ + \State \textbf{return} $x+y$ + \EndFunction + \end{algorithmic} +\end{algorithm} + + \end{minipage} + \end{tabular} +\end{table} + +\begin{table} + \begin{tabular}[t]{ll} + \begin{minipage}{0.4\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \label{multiplikation:alg:linear} + \Function{L}{$\mathbf{a}, \mathbf{b}$,n} + \State $ sum \gets 0$ + \For{$i = 0,1,2 \dots,n$} + \State $ sum \gets sum + A[i] \cdot B[i] $ + \EndFor + + \State \textbf{return} $sum$ + + \EndFunction + \State + \State + \end{algorithmic} + \end{algorithm} + \end{minipage} + & + \begin{minipage}{0.4\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:q1} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{Q}{$\mathbf{A}, \mathbf{B}$,n} + \State $ sum \gets 0$ + \For{$i = 0,1,2 \dots,n$} + \For{$j = 0,1,2 \dots,n$} + \State $ sum \gets sum + A[i] \cdot B[j] $ + \EndFor + \EndFor + \State \textbf{return} $sum$ + \EndFunction + \end{algorithmic} + \end{algorithm} + \end{minipage} + \end{tabular} +\end{table} + +dhdfh +\end{document} diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf Binary files differindex 8a53398..2519553 100644 --- a/buch/papers/multiplikation/images/bigo.pdf +++ b/buch/papers/multiplikation/images/bigo.pdf diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex index 9ee3a68..63fd0fd 100644 --- a/buch/papers/multiplikation/images/bigo.tex +++ b/buch/papers/multiplikation/images/bigo.tex @@ -54,6 +54,7 @@ xticklabels=\empty, scale only axis=true, width=12cm, height=8cm, + legend cell align={left} ] \addplot [ domain= 1:5000, diff --git a/buch/papers/multiplikation/images/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf Binary files differindex 3a4cfd8..521151e 100644 --- a/buch/papers/multiplikation/images/meas_c.pdf +++ b/buch/papers/multiplikation/images/meas_c.pdf diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex index 818a7e6..12d3527 100644 --- a/buch/papers/multiplikation/images/meas_c.tex +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -43,99 +43,106 @@ \begin{tikzpicture} \begin{axis}[ xmode=log, ymode=log, -xmin=60, xmax=5000, -ymin=1e-4, ymax=2e3, +xmin=30, xmax=10000, +ymin=1e-5, ymax=2e4, grid=both, major grid style={black!50}, -xlabel = data Input ($n$), +xlabel = data input ($n$), ylabel = {time ($s$)}, legend pos=north west, very thick, scale only axis=true, width=12cm, height=8cm, - log basis x={10} + log basis x={10}, + legend cell align={left} ] \addlegendentry{Winograd} -\addplot[ color=purple, +\addplot[ color=blue, + error bars/.cd, y dir=both, y explicit, ] coordinates { -% (2, 0.000001) -% (4, 0.000001) -% (8, 0.000002) -% (16, 0.000011) -% (32, 0.000100) -(64, 0.000654) -(128, 0.005229) -(256, 0.057440) -(512, 0.517850) -(1024,4.539413) -(2048,130.627663) +%(2,1e-07) +%(4,5e-07) +%(8,2.0000000000000003e-06) +%(16,1.1999999999999999e-05) +(32,8.329999999999999e-05) +(64,0.0006479) +(128,0.0052873) +(256,0.052674599999999995) +(512,0.5249752000000001) +(1024,4.671161) +(2048,136.6769777) (4096,1179.261048) +(8192,10071.512655) }; \addlegendentry{Strassen} \addplot [ color=black, ]coordinates { - % (2,0.000001 ) - % (4,0.000003 ) - % (8,0.000010 ) - % (16,0.000066 ) - % (32,0.000470 ) - (64,0.003368 ) - (128,0.024232 ) - (256,0.172000 ) - (512,1.209262 ) -(1024,8.457472 ) -(2048,59.267256) +%(2,1e-07) +%(4,2.1e-06) +%(8,1.13e-05) +%(16,7.07e-05) +(32,0.0005041) +(64,0.003596) +(128,0.0254481) +(256,0.1781817) +(512,1.2555) +(1024,8.8302371) +(2048,61.9018691) (4096,414.648901) +(8192,3014.235467) }; \addlegendentry{MM div and conq} \addplot[ color=green, ] coordinates { - % (2,0.000003 ) - % (4,0.000002 ) - % (8,0.000010 ) - % (16,0.000068 ) - % (32,0.000594 ) - (64,0.004264 ) - (128,0.036289 ) - (256,0.324645 ) - (512,2.612010 ) -(1024,19.928951 ) -(2048,159.333884 ) +%(2,3e-07) +%(4,1.1e-06) +%(8,8.6e-06) +%(16,7.819999999999999e-05) +(32,0.0005940000000000001) +(64,0.0044339) +(128,0.0348443) +(256,0.29484730000000003) +(512,2.2228507) +(1024,17.659234500000004) +(2048,141.6103936) (4096,1147.106865) +(8192,9606.402522) }; \addlegendentry{MM} \addplot [ color=red, ]coordinates { - % (2,0.000001 ) - % (4,0.000001 ) - % (8,0.000001 ) - % (16,0.000010 ) - % (32,0.000081 ) - (64,0.000654 ) - (128,0.005556 ) - (256,0.054253 ) - (512,0.487317 ) -(1024,4.162845 ) -(2048,125.909034 ) +%(2,0.0) +%(4,3e-07) +%(8,1.8000000000000001e-06) +%(16,1.1999999999999999e-05) +(32,8.93e-05) +(64,0.0006923) +(128,0.0056842) +(256,0.051771500000000005) +(512,0.5062468000000001) +(1024,4.5048086) +(2048,129.2894619) (4096,1111.312696) +(8192,9376.173434) }; \addlegendentry{BLAS} -\addplot[ color=blue, +\addplot[ color=purple, ] coordinates { - % (2,0.000001 ) - % (4,0.000001 ) - % (8,0.000001 ) - % (16,0.000003 ) - % (32,0.000022 ) - (64,0.000179 ) - (128,0.001278 ) - (256,0.010165 ) - (512,0.074739 ) -(1024,0.704748 ) -(2048,6.845095 ) +%(2,1e-07) +%(4,0.0) +%(8,1e-07) +%(16,3.9e-06) +(32,2.1000000000000002e-05) +(64,0.00018580000000000002) +(128,0.0012649) +(256,0.0096489) +(512,0.0773765) +(1024,0.7643868) +(2048,7.6320993999999995) (4096,55.845038) +(8192,478.429957) }; \end{axis} \end{tikzpicture} diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf Binary files differindex cea2232..fe89773 100644 --- a/buch/papers/multiplikation/images/meas_python.pdf +++ b/buch/papers/multiplikation/images/meas_python.pdf diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex index ee4db43..ad43cf6 100644 --- a/buch/papers/multiplikation/images/meas_python.tex +++ b/buch/papers/multiplikation/images/meas_python.tex @@ -43,8 +43,8 @@ \begin{tikzpicture} \begin{axis}[ xmode=log, ymode=log, -xmin=30, xmax=1050, -ymin=0.01, ymax=900, +xmin=30, xmax=4200, +ymin=0.01, ymax=70000, grid=both, major grid style={black!50}, xlabel = data input ($n$), @@ -53,10 +53,11 @@ legend pos=north west, very thick, scale only axis=true, width=12cm, height=8cm, - log basis x={10} + log basis x={10}, + legend cell align={left} ] \addlegendentry{Winograd} -\addplot[ color=purple, +\addplot[ color=blue, ] coordinates { % (2, 2.7895e-05 ) % (4, 0.000104904) @@ -68,7 +69,8 @@ width=12cm, height=8cm, (256, 8.29899 ) (512, 68.3699 ) (1024,537.374 ) - +(2046,4884.61) +(4096,43597.1) }; \addlegendentry{Strassen} \addplot [ color=black, @@ -79,10 +81,12 @@ width=12cm, height=8cm, % (16,0.00475407 ) (32,0.0485256 ) (64,0.220414 ) - (128,1.44718 2 ) - (256,9.93866 0 ) - (512,63.961 2 ) -(1024,461.494 2 ) + (128,1.44718 ) + (256,9.93866 ) + (512,63.961 ) +(1024,461.494 ) +(2046,3860.57) +(4096,22904.3) }; \addlegendentry{MM div and conq} @@ -98,6 +102,8 @@ width=12cm, height=8cm, (256,13.27 ) (512,105.397 ) (1024,847.321 ) +(2046,7375.93) +(4096,58466) }; \addlegendentry{MM} @@ -113,25 +119,27 @@ width=12cm, height=8cm, (256, 11.0062 ) (512, 85.4768) (1024,750.757 ) +(2046,6154.18) +(4096,46813.3) }; -% \addlegendentry{NumPy} -% \addplot[ color=blue, -% ] coordinates { -% (2,1.83582e-05 ) -% (4,7.86781e-06) -% (8,1.00136e-05) -% (16,5.4121e-05 ) -% (32,4.26769e-05) -% (64,0.000118494) -% (128,0.000244141 ) -% (256,0.000695705 ) -% (512,0.00221705 ) -% (1024,0.0188088 ) -% }; +% \addlegendentry{NumPy} +% \addplot[ color=blue, +% ] coordinates { +% % (2,1.83582e-05 ) +% % (4,7.86781e-06) +% % (8,1.00136e-05) +% % (16,5.4121e-05 ) +% (32,4.26769e-05) +% (64,0.000118494) +% (128,0.000244141 ) +% (256,0.000695705 ) +% (512,0.00221705 ) +% (1024,0.0188088 ) +% (2046,0.215739) +% (4096,1.49159) +% }; + \end{axis} \end{tikzpicture} \end{document} - - - diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf Binary files differindex a30fdaa..d150125 100644 --- a/buch/papers/multiplikation/images/strassen.pdf +++ b/buch/papers/multiplikation/images/strassen.pdf diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex index 5cf39b4..b51a9d5 100644 --- a/buch/papers/multiplikation/images/strassen.tex +++ b/buch/papers/multiplikation/images/strassen.tex @@ -56,7 +56,7 @@ A_{11}B_{11} \& A_{12}B_{12} \& A_{21}B_{12} \& A_{22}B_{12} \\ A_{11}B_{22} \& A_{12}B_{22} \& A_{21}B_{22} \& A_{22}B_{22} \\ };} - + \foreach \j in {1,...,7} { \matrix(M\i\j)[matrix of math nodes,nodes in empty cells, @@ -76,18 +76,18 @@ } \huge{ - \node at (-3,-20) {$C_{22}=$}; - \node at (-3,-15) {$C_{21}=$} ; - \node at (-3,-10) {$C_{12}=$} ; - \node at (-3,-5) {$C_{11}=$} ; - - \node at (5,-2) {P}; - \node at (10,-2) {Q}; - \node at (15,-2) {R}; - \node at (20,-2) {S}; - \node at (25,-2) {T}; - \node at (30,-2) {U}; - \node at (35,-2) {V}; + \node at (-3,-20) {$\mathbf{C}_{22}=$}; + \node at (-3,-15) {$\mathbf{C}_{21}=$} ; + \node at (-3,-10) {$\mathbf{C}_{12}=$} ; + \node at (-3,-5) {$\mathbf{C}_{11}=$} ; + + \node at (5,-2) {$\mathbf{P}$}; + \node at (10,-2) {$\mathbf{Q}$}; + \node at (15,-2) {$\mathbf{R}$}; + \node at (20,-2) {$\mathbf{S}$}; + \node at (25,-2) {$\mathbf{T}$}; + \node at (30,-2) {$\mathbf{U}$}; + \node at (35,-2) {$\mathbf{V}$}; } @@ -100,41 +100,132 @@ \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X4-3-3)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X4-4-4)] {}; +% P \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-4-1)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-1-4)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-4-4)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M11-1-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M14-1-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M14-2-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-2)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-2-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-4-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-2-2)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-4-2)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M23-3-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M23-4-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M21-1-1)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-3)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M34-1-4)] {}; -\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M34-2-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M31-1-1)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-4-1)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-1-4)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-4-4)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M41-1-1)] {}; + +% Q +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M12-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M12-1-3)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M22-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M22-1-3)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M32-1-3)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M42-1-4)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M42-1-3)] {}; + +% R + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M13-3-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M13-4-1)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M23-3-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M23-4-1)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M33-3-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M33-4-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M43-3-1)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M43-4-1)] {}; + +% S + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M14-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M14-2-4)] {}; + + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M24-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M24-2-4)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M34-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M34-2-4)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M44-1-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M44-2-4)] {}; + +%T + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M15-4-2)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M25-4-2)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M35-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M35-4-2)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M45-4-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M45-4-2)] {}; + +% U + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-1-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-1-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-3-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M16-3-1)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-1-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-1-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-3-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M26-3-1)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-1-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-1-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-3-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M36-3-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M46-1-3)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M46-1-1)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M46-3-3)] {}; \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M46-3-1)] {}; + +%V + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-2-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=red, fit=(M17-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-2-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(M17-4-2)] {}; + + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-2-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-2-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M27-4-2)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-2-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-2-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M37-4-2)] {}; + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-2-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-4-4)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-2-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=gray, fit=(M47-4-2)] {}; + + + + + \end{tikzpicture} \end{document} diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index a7612e1..8d0c0a8 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -7,14 +7,13 @@ \section{Algorithmen} \rhead{Algorithmen} -In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Bibliotheken zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt. +In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Bibliotheken zur unkomplizierten Verwendung von vordefinierten Algorithmen gezeigt. -\subsection{Standard Algorithmus} +\subsection{Standardalgorithmus} -Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden. -Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. +Die Standardmethode ist im Algorithmus \ref{multiplikation:alg:smm} implementiert. +Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt umgesetzt. Die \texttt{for i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, die \texttt{for j} Schleife iteriert \"uber alle Spalten der $\mathbf{B}$ Matrix und die \texttt{for k} Schleife iteriert \"uber alle Eintr\"age dieser Zeilen bzw. Spalten. - \begin{algorithm}\footnotesize\caption{Matrizenmultiplikation} \label{multiplikation:alg:smm} \setlength{\lineskip}{7pt} @@ -38,19 +37,18 @@ Die \texttt{for i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, \EndFunction \end{algorithmic} \end{algorithm} - -Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O}\left(n^3\right)$ +Die Laufzeit dieser Struktur mit drei \texttt{for} Schleifen ist $\mathcal{O} (n^3)$. \subsubsection{Divide and Conquer Methode} F\"ur gewisse Algorithmen f\"uhren \textit{Divide and Conquer} Ans\"atze \cite{multiplikation:DAC} zu markant besseren Laufzeiten. Die Grundidee ist, dass ein Problem in mehrere, meist simplere und kleinere Teilprobleme aufgeteilt wird. -Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O}\left(n^2\right)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann. +Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O} (n^2)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann. Die Matrizenmultiplikation kann ebenfalls mit solch einem Ansatz berechnet werden. Zur vereinfachten Veranschaulichung kann die Situation mit $\mathbf{A}$ und $\mathbf{B}$ der Gr\"osse $2^n \times 2^n$ verwendet werden. Die Matrizen $\mathbf{A}$ und $\mathbf{B}$ werden in jeweils vier Blockmatrizen der Gr\"osse $2^{n-1} \times 2^{n-1}$ aufgeteilt. -Das Matrizen Produkt +Das Matrizenprodukt \begin{equation} \mathbf{A}\mathbf{B}= \begin{bmatrix} @@ -65,16 +63,16 @@ Das Matrizen Produkt \begin{bmatrix} \mathbf{C}_{11} & \mathbf{C}_{12}\\ \mathbf{C}_{21} & \mathbf{C}_{22} -\end{bmatrix}, +\end{bmatrix} \end{equation} -\begin{equation} -\mathbf{C}_{ij} = \sum_{k=1}2n \mathbf{A}_{ik} \mathbf{B}_{kj} +mit \begin{equation} +\mathbf{C}_{ij} = \sum_{k=1}^{2n} \mathbf{A}_{ik} \mathbf{B}_{kj}, \label{multiplikation:eq:MM_block} \end{equation} -ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplikation der Untermatrize $\mathbf{A}_{ik}$ und $\mathbf{B}_{kj}$ wird die Matrizenmultiplikation verwendet. +ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplikation der Untermatrizen $\mathbf{A}_{ik}$ und $\mathbf{B}_{kj}$ wird die Matrizenmultiplikation verwendet. Der Algorithmus \ref{multiplikation:alg:devide_mm} zeigt den \textit{Divide and Conquer} Ansatz, -Der Grundstruktur dieser Methode besteht aus dem rekursiven Aufruf der Funktion mit den erzeugten Blockmatrizen. +Die Grundstruktur dieser Methode besteht aus dem rekursiven Aufruf der Funktion mit den erzeugten Blockmatrizen. Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ durchgef\"uhrt. \begin{algorithm}\footnotesize\caption{Divide and Conquer Matrizenmultiplikation} \setlength{\lineskip}{7pt} @@ -107,11 +105,11 @@ Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} \cite{multiplikation:master_theorem} berechnet werden. Das \textit{Master Theorem} bestimmt die Zeitkomplexit\"at von rekursiven Algorithmen. Ohne auf dieses vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe $\mathcal{T} $ der Funktion die Laufzeit. -In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt +In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt zu \begin{equation} \label{multiplikation:eq:laufzeitdac} - \mathcal{T}(n) = 8 \cdot \mathcal{T}\left (\frac{n}{2}\right ) + n^2 = \mathcal{O}(n^{\log_2 8}) = \mathcal{O}\left (n^{3} \right ) + \mathcal{T}(n) = 8 \cdot \mathcal{T} \left(\frac{n}{2}\right ) + n^2 = \mathcal{O}(n^{\log_2 8}) = \mathcal{O} (n^{3} ), \end{equation} -zu einer kubischen Laufzeit. +also einer kubischen Laufzeit. Die Addition zweier Matrizen $\mathbf{A} + \mathbf{B} = \mathbf{C}$ hat eine Laufzeit von $\mathcal{O}(n^{2})$ und kann neben dem dominierendem Anteil von $\mathcal{O}(n^{3})$ ignoriert werden. In diesem Fall hat der \textit{Divide and Conquer} Ansatz zu keiner Verbesserung gef\"uhrt. @@ -131,7 +129,7 @@ Die sieben grundlegenden Terme \text{\textbf{V}} &= \left(\mathbf{A}_{12} - \mathbf{A}_{22}\right ) \cdot \left(\mathbf{B}_{21} + \mathbf{B}_{22}\right ) \end{split} \end{equation} -aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Bl\"ocke +aus $\mathbf{A}$ und $\mathbf{B}$ werden f\"ur die Berechnung der Bl\"ocke \begin{equation} \label{multiplikation:eq:strassen2} \begin{split} \mathbf{C}_{11} &= \text{\textbf{P}} + \text{\textbf{S}} - \text{\textbf{T}} + \text{\textbf{V}} \\ @@ -189,12 +187,13 @@ der Matrix $\mathbf{C}$ gebraucht. Strassens Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt. Jedes Feld steht f\"ur eine Multiplikation zweier Matrizenelementen von $\mathbf{A}$ oder $\mathbf{B}$ . Die gr\"unen Felder auf der linken Seite, zeigen die Addition, welche f\"ur den dazugeh\"origen Term ben\"otigt wird. -Die sieben Spalten beschreiben die Matrizen $\mathbf{P,Q,R, \dotsb, V}$. +Die sieben Spalten beschreiben die Matrizen $\mathbf{P,Q,R, \ldots, V}$. Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. +Graue Felder bedeuten, dass die dazugehörige Spalte nicht für die Berechnung benötigt wird. \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf} - \caption{Strassens Algorithmus} + \caption{Der Algorithmus von Strassen verwendet Multiplikationen zur Berechnung der sieben Blockmatrizen $\mathbf{P}$ bis $\mathbf{V}$ aus $\mathbf{A}$ und $\mathbf{B}$, aus denen sich die Blöcke es Produktes $\mathbf{C}=\mathbf{AB}$ ausschliesslich durch Addition und Subtraktion bilden lassen. Die einzelnen Felder in den Quadraten stellen alle möglichen Produkte von Matrizen $\mathbf{A}_{ik}$ und $\mathbf{B}_{jl}$ dar. In den grossen Quadraten am linken Rand sind diejenigen Produkte grün markiert, welche zusammen die entsprechenden Blöcke $\mathbf{C}_{il}$ von $\mathbf{C}$ ergeben. In den Spalten $\mathbf{P}$ bis $\mathbf{V}$ sind die Produkte farblich hervorgehoben, die in der Definition der entsprechenden Matrix vorkommen. Grün und rot symbolisieren die Vorzeichen, mit denen die Produkte kombiniert werden müssen. Graue Felder werden für die Berechnung von $\mathbf{C}_{il}$ nicht benötigt.} \label{multiplikation:fig:strassen} \end{figure} @@ -202,7 +201,7 @@ Die Funktion wird sieben mal rekursiv aufgerufen. Dies f\"uhrt nach dem \textit{Master Theorem} zu einer Laufzeit von \begin{equation} \label{multiplikation:eq:laufzeitstrassen} \mathcal{T}(n) = -7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 = \mathcal{O}\left(n^{\log_2 7}\right ) = \mathcal{O}\left(n^{2.8074} \right ) +7 \cdot \mathcal{T}\left(\frac{n}{2}\right) + n^2 = \mathcal{O}(n^{\log_2 7} ) = \mathcal{O}(n^{2.8074} ) \end{equation} und ist somit schneller als die Standardmethode. Man beachte, dass die Anzahl von Additionen und Subtraktionen gr\"osser und die Anzahl der Multiplikationen kleiner wurde. @@ -233,41 +232,38 @@ Das Skalarprodukt ist nun geben mit \end{cases} \end{equation} Das Skalarprodukt kann also mit $ \lfloor \frac{n+1}{2} \rfloor$ weiteren Multiplikationen berechnet werden. -Angenommen man hat $N$ Vektoren mit welchen man $T$ Skalarprodukte berechnen m\"ochte. +Angenommen man hat $N$ Vektoren, mit welchen man $T$ Skalarprodukte berechnen m\"ochte. Daf\"ur werden $N\lfloor n/2 \rfloor + T\lfloor (n+1)/2 \rfloor $ Multiplikationen ben\"otigt. Die Summen f\"ur $\xi$ und $\eta$ m\"ussen nur einmal berechnet werden. -Für die Gleichung \eqref{multiplikation:eq:skalar} benötigt man $Tn$ Multiplikationen. -Im Vergleich mit der neuen Methode -\begin{equation} - \begin{split}\label{multiplikation:eq:eff} - N\lfloor n/2 \rfloor + T\lfloor (n+1)/2 \rfloor \leq Tn \\ - \approx \frac{Nn}{2} + \frac{Tn}{2} \leq Tn \\ - \frac{Nn}{2} \leq \frac{Tn}{2} \\ - N \leq T -\end{split} +Für die ursprüngliche Gleichung \eqref{multiplikation:eq:skalar} für das Skalarprodukt benötigt man $Tn$ Multiplikationen. +Damit können wir die Laufzeit der Methode von Winograd mit der Laufzeit der Standardmethode vergleichen. Sie ist kleiner als die Laufzeit für die Standardmethode, wenn gilt +\begin{equation}\label{multiplikation:eq:eff} +\begin{array}{crcl} + & N\lfloor n/2\rfloor + T\lfloor(n+1)/2\rfloor \approx Nn/2 + Tn/2 & \le & Tn \\ +\Leftrightarrow & Nn/2 & \le & Tn/2 \\ +\Leftrightarrow & N & \le & T. +\end{array} \end{equation} -spart man etwas, falls $N\leq T$. Eine Matrizenmultiplikation mit $\mathbf{A}$ einer $m \times n$ und $\mathbf{B}$ einer $n \times p$ Matrix, entspricht $N=m+p$ Vektoren mit welchen man $T=mp$ Skalarprodukte berechnet. Dies f\"uhrt zu \begin{equation} (m+p) \left \lfloor \frac{n}{2} \right \rfloor + mp \left \lfloor \frac{n+1}{2} \right \rfloor = \frac{mn}{2} + \frac{pn}{2} + \frac{mpn}{2} + \frac{mp}{2} \end{equation} Multiplikationen. -Wenn $m,p,n$ gross werden, dominiert der Term $\frac{mpn}{2}$ und es werden $\frac{mpn}{2}$ Multiplikationen ben\"otigt. -Was im Vergleich zu den $mpn$ Multiplikation der Standardmethode nur die H\"alfte ist. -Mit dem gleichen Ansatz wie in der Gleichung \ref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss -\begin{equation} +Wenn $m,p,n$ gross werden, dominiert der Term $\frac{mpn}{2}$ und es werden $\frac{mpn}{2}$ Multiplikationen ben\"otigt, was im Vergleich zu den $mpn$ Multiplikation der Standardmethode nur die H\"alfte ist. +Mit dem gleichen Ansatz wie in der Gleichung \eqref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss +\begin{align} \begin{split} -N=2n, \quad T = n^2 \\ - 2n \leq n^2 \\ - 2 \leq n +N=2n, &\quad T = n^2 \\ + 2n &\leq n^2 \\ + 2 &\leq n \end{split} -\end{equation} +\end{align} sein, damit man etwas einspart. Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen werden. -Falls $m=n=p$ werden $\frac{n^3}/{2}$ Multiplikationen benötigt. +Falls $m=n=p$, werden $\frac{n^3}{2}$ Multiplikationen benötigt. Im Abschnitt \ref{muliplikation:sec:bigo} wurde bereits erläutert: falls $n \rightarrow \infty$ können Konstanten vernachlässigt werden und - somit entsteht für diesen Algorithmus wieder die Ursprüngliche Laufzeit von $\mathcal{O}\left(n^3 \right)$. + somit entsteht für diesen Algorithmus wieder die ursprüngliche Laufzeit von $\mathcal{O}(n^3 )$. \begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation} \setlength{\lineskip}{7pt} \label{multiplikation:alg:winograd} @@ -323,7 +319,7 @@ Im Abschnitt \ref{muliplikation:sec:bigo} wurde bereits erläutert: falls $n \ri \subsection{Basic Linear Algebra Subprograms (BLAS)} Die gebräuchliche Methode f\"ur die Anwendung einer optimierten Matrizenmultiplikation ist die Verwendung einer Subroutine aus den \textit{Basic Linear Algebra Subprograms (BLAS)} \cite{multiplikation:BLAS}. -Die meisten Numerischen Bibliotheken von High-Level Skriptsprachen wie \texttt{Matlab}, \texttt{NumPy (Python)}, \texttt{GNU Octave} oder \texttt{Mathematica} ben\"utzen eine Form von \textit{BLAS}. +Die meisten numerischen Bibliotheken von high-level Skriptsprachen wie \texttt{Matlab}, \texttt{NumPy (Python)}, \texttt{GNU Octave} oder \texttt{Mathematica} ben\"utzen eine Form von \textit{BLAS}. \textit{BLAS} sind dabei in drei unterschiedliche Levels aufgeteilt. @@ -336,33 +332,33 @@ Die meisten Numerischen Bibliotheken von High-Level Skriptsprachen wie \texttt{M \item Level 2 \begin{itemize} \item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{A}\mathbf{x}+\beta \mathbf{y}$ - \item Dieses Level hat $\mathcal{O}\left(n^2\right)$ Charakteristik + \item Dieses Level hat $\mathcal{O}(n^2)$ Charakteristik \end{itemize} \item Level 3 \begin{itemize} \item Operationen der Art: $\mathbf{C} \leftarrow \alpha \mathbf{A}\mathbf{B}+\beta\mathbf{C}$ - \item Dieses Level hat $\mathcal{O}\left(n^3\right)$ Charakteristik + \item Dieses Level hat $\mathcal{O}(n^3)$ Charakteristik \end{itemize} \end{itemize} -Die \textit{BLAS} sind auf die modernen Computer Prozessoren optimiert und k\"onnen dank einer ausgeklügelter Verwendung der Speicherarchitektur zu erheblichen Leistungsoptimierungen f\"uhren. +Die \textit{BLAS} sind auf die modernen Computerprozessoren optimiert und k\"onnen dank einer ausgeklügelter Verwendung der Speicherarchitektur zu erheblichen Leistungsoptimierungen f\"uhren. -\subsubsection{General Matrix Multiplication (GEMM)} - -Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als: - -\textit{DGEMM performs one of the matrix-matrix operations} -$$ - C := \alpha \cdot op( A )\cdot op( B ) + \beta \cdot C, - $$ - \textit{where op( X ) is one of} -$$ -op( X ) = X \quad \text{ or } \quad op( X ) = X^T, -$$ - \textit{alpha and beta are scalars, and A, B and C are matrices, with op( A ) - an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. - } +%\subsubsection{General Matrix Multiplication (GEMM)} +% +%Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als: +% +%\textit{DGEMM performs one of the matrix-matrix operations} +%$$ +% C := \alpha \cdot op( A )\cdot op( B ) + \beta \cdot C, +% $$ +% \textit{where op( X ) is one of} +%$$ +%op( X ) = X \quad \text{ or } \quad op( X ) = X^T, +%$$ +% \textit{alpha and beta are scalars, and A, B and C are matrices, with op( A ) +% an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. +% } %Die Implementation von $\alpha\mathbf{A}\mathbf{B} + \beta \mathbf{C} = \mathbf{C}$, wobei $\alpha = 1.0$ und $\beta = 0.0$ in der \texttt{C}-Version von \textit{BLAS}, ist als %\begin{lstlisting}[style=multiplikationC] @@ -379,7 +375,7 @@ $$ Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementiert. \begin{itemize} \item Standard Matrizenmultiplikation - \item \textit{Devide and Conquer} Matrizenmultiplikation + \item \textit{Divide and Conquer} Matrizenmultiplikation \item Strassens Matrizenmultiplikation \item Winograds Matrizenmultiplikation \item \texttt{BLAS} Matrizenmultiplikation in \texttt{C} @@ -389,31 +385,45 @@ Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementi Der Code kann im zum Buch gehörigem \textit{GitHub} \footnote{\url{https://github.com/AndreasFMueller/SeminarMatrizen.git}} Repository gefunden werden. Anzumerken ist, dass die Matrizenmultiplikation von \texttt{NumPy} als einzige Implementation Multiprocessing und Multithreading verwendet, dies f\"uhrt zu den tiefen Messzeiten. In Abbildung \ref{multiplikation:fig:python} und Abbildung \ref{multiplikation:fig:c_meas_4096} sind de Messresultate grafisch dargestellt. Die selben Messresultate sind tabellarisch in Tabelle \ref{multiplikation:tab:messung_Python} und Tabelle \ref{multiplikation:tab:messung_C} ersichtlich. + +Die gezeigten Algorithmen haben alle eine Laufzeit der Form $\mathcal{O}(n^k) $. +Bei einer doppelt logarithmischen Darstellung unterscheiden sich diese in Geraden mit unterschiedlichen Steigungen. +Bei den grafisch gezeigten Messresultate, können diese Steigungen gut erkannt werden, wobei die tiefere Laufzeit des Strassen Algorithmus eindrücklich zu sehen ist. +Der benötigte Overhead der Algorithmen zeigt sich in unterschiedlichen $y$-Achsenschnittpunkte. + +In der Messung mit der Programmiersprache \texttt{C} kann ein typischer Cache-Effekt beobachtet wer- +den. +Bei den Algorithmen von Winograd und der Standardmethode hat bei einer Matrizengrösse von $n = 2048$ wohl eine Zeile der Matrix nicht an einer Cache Speicherstelle Platz. +Diese beiden Algorithmen sind die Einzigen, welche \texttt{for}-Schleifen über die ganze Breite der Matrizen verwenden. +Dies führt dazu, dass ganze Zeilen zwischengespeichert werden müssen. +Bei den anderen Algorithmen ist dies nicht der Fall. + Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{multiplikation:tab:pc_config} aufgelistet. \begin{table} \begin{center} - \begin{tabular}{l l l l l l} + \begin{tabular}{r l l l l l} \hline \hline \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{BLAS (\textit{s})} \\ \hline \multicolumn{6}{c}{} \\ - \textbf{32} & 0.000081 &0.000594 & 0.00047& 0.00010 & 0.000022 \\ - \textbf{64} & 0.00065 & 0.0042& 0.0033& 0.00065& 0.00017 \\ - \textbf{128} & 0.0055 & 0.036& 0.024& 0.0052 & 0.0012 \\ - \textbf{256} & 0.054 & 0.32 & 0.17 & 0.057& 0.010 \\ - \textbf{512} & 0.48 & 2.61 & 1.20 & 0.51 & 0.074\\ - \textbf{1024} & 4.16 & 19.92& 8.45 & 4.53 & 0.704 \\ - \textbf{2048} & 125.90 & 159.33& 59.26 & 130.62 & 6.84 \\ - \textbf{4096} & 1111.31 & 1147.10& 414.64 & 1179.26 & 55.84\\ + \textbf{32} & \phantom{000}0.000089 & \phantom{000}0.000594 & \phantom{000}0.0005 & \phantom{0000}0.00008 & \phantom{00}0.000021 \\ + \textbf{64} & \phantom{000}0.00069 & \phantom{000}0.0044 & \phantom{000}0.0036 & \phantom{0000}0.00064 & \phantom{00}0.00018 \\ + \textbf{128} & \phantom{000}0.0057 & \phantom{000}0.035 & \phantom{000}0.025 & \phantom{0000}0.0052 & \phantom{00}0.0012 \\ + \textbf{256} & \phantom{000}0.052 & \phantom{000}0.29 & \phantom{000}0.178 & \phantom{0000}0.053 & \phantom{00}0.0096 \\ + \textbf{512} & \phantom{000}0.51 & \phantom{000}2.22 & \phantom{000}1.25 & \phantom{0000}0.55 & \phantom{00}0.077 \\ + \textbf{1024} & \phantom{000}4.50 & \phantom{00}17.65 & \phantom{000}8.83 & \phantom{0000}4.67 & \phantom{00}0.764 \\ + \textbf{2048} & \phantom{0}129.28 & \phantom{0}141.61 & \phantom{00}61.901 & \phantom{00}136.67 & \phantom{00}7.63 \\ + \textbf{4096} & 1111.31 & 1147.10 & \phantom{0}414.64 & \phantom{0}1179.26 & \phantom{0}55.84 \\ + \textbf{8192} & 9376.17 & 9606.40 & 3014.23 & 10071.51 & 478.42 \\ \multicolumn{6}{c}{} \\ \hline \hline \end{tabular} \end{center} - \caption{Messresultate \texttt{C}} + \caption{Laufzeiten der verschieden Algorithmen in der Programmiersprache \texttt{C}} \label{multiplikation:tab:messung_C} \end{table} @@ -421,25 +431,26 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{table} \begin{center} - \begin{tabular}{l l l l l l} + \begin{tabular}{r l l l l l} \hline \hline - \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{\texttt{NumPy}(\textit{s})} \\ + \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{NumPy(\textit{s})} \\ \hline \multicolumn{6}{c}{} \\ - \textbf{32} & 0.0240 &0.0271 & 0.04852& 0.01871 & 4.26e-05 \\ - \textbf{64} & 0.186 & 0.265& 0.2204& 0.1530& 0.000118 \\ - \textbf{128} & 1.563 & 1.777& 1.447& 1.1947 & 0.000244 \\ - \textbf{256} & 11.006 & 13.27 & 9.938 & 8.298& 0.000695 \\ - \textbf{512} & 85.476 & 105.397 & 63.961 & 68.36 & 0.00221\\ - \textbf{1024} & 750.757 & 847.321& 461.494 & 537.374 & 0.0188 \\ - \textbf{4096} & - & - & - & - & 1.633 \\ + \textbf{32} &\phantom{0000}0.0240 & \phantom{0000}0.0271& \phantom{0000}0.04852 & \phantom{0000}0.01871 & 0.0000426 \\ + \textbf{64} &\phantom{0000}0.186 & \phantom{0000}0.265 & \phantom{0000}0.2204 & \phantom{0000}0.1530& 0.000118 \\ + \textbf{128} &\phantom{0000}1.563 & \phantom{0000}1.777 & \phantom{0000}1.447 & \phantom{0000}1.1947 & 0.000244 \\ + \textbf{256} &\phantom{000}11.006 & \phantom{000}13.27 & \phantom{0000}9.938 & \phantom{0000}8.298& 0.000695 \\ + \textbf{512} &\phantom{000}85.476 & \phantom{00}105.397 & \phantom{000}63.961 & \phantom{000}68.360 & 0.00221\\ + \textbf{1024} &\phantom{00}750.757 & \phantom{00}847.321 & \phantom{00}461.494 & \phantom{00}537.374 & 0.0188 \\ + \textbf{2048} &\phantom{0}6154.18 & \phantom{0}7375.93 & \phantom{0}3860.57 & \phantom{0}4884.61 & 0.215 \\ + \textbf{4096} & 46813.30 & 58466.00 & 22904.30 & 43597.10 & 1.49 \\ \multicolumn{6}{c}{} \\ \hline \hline \end{tabular} \end{center} - \caption{Messresultate \texttt{Python}} + \caption{Laufzeiten der verschieden Algorithmen in der Skriptsprache \texttt{Python}} \label{multiplikation:tab:messung_Python} \end{table} @@ -465,7 +476,9 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_c} - \caption{Messresultate mit der Programmiersprache \texttt{C}} + \caption{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in der Programmiersprache \texttt{C}. + Die Steigung der Messreihe mit Strassens Algorithmus ist deutlich kleiner als deren der anderen Algorithmen. + Die Messung von Winograd ist beinahe gleich wie die Messung mit der Standardmethode, deshalb ist sie nicht gut sichtbar.} \label{multiplikation:fig:c_meas_4096} \end{figure} @@ -473,17 +486,21 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_python} - \caption{Messresultate mit der Programmiersprache \texttt{Python}} + \caption{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in der Skriptsprache \texttt{Python}. + Die Steigung der Messreihe mit Strassens Algorithmus ist deutlich kleiner als deren der anderen Algorithmen. +} \label{multiplikation:fig:python} \end{figure} \section{Fazit} \rhead{Fazit} -Wie man im Abschnitt \ref{multiplikation:section:Implementation} sehen kann, sind die gezeigten Algorithmen trotz den theoretisch geringeren Zeitkomplexitäten, den Implementationen der numerischen Bibliotheken klar unterlegen. +Wie man im Abschnitt \ref{multiplikation:section:Implementation} sehen kann, sind die gezeigten Algorithmen trotz der theoretisch geringeren Zeitkomplexitäten den Implementationen der numerischen Bibliotheken klar unterlegen. Ein optimierter Speicherzugriff hat einen weitaus grösseren Einfluss auf die Laufzeit als die Zeitkomplexität des Algorithmus. Doch haben Entdeckungen wie jene von Strassen und Winograd ihre Daseinsberechtigung. Nicht auf jeden Computersystemen können die \textit{BLAS} angewandt werden. Denke man an sehr kleine Mikrocontroller ohne Floatingpoint Recheneinheiten oder auch an \textit{Field Programmable Gate Arrays (FPGA's)}. -Sobald sehr grosse Matrizen multipliziert werden müssen und eine Addition in weniger Taktzyklen als eine Multiplikation durchführt werden kann, können die gezeigten Algorithmen von Vorteil sein. +Der Overhead der gezeigten Algorithmen ist in allen Fällen grösser als bei der Standardmethode (z.B. sieben rekursive Aufrufe gegenüber drei \texttt{for}-Schleifen). +Um diesem entgegenzuwirken muss der Laufzeitunterschied zwischen Addition und Multiplikation gross genug sein. +Wenn dies gegeben ist und dazu noch grosse Matritzen multipliziert werden, kann die Verwendung der Algorithmen von Strassen oder Winograd zu einer Senkung der Laufzeit führen. diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex index fb1908e..4a23109 100755 --- a/buch/papers/multiplikation/main.tex +++ b/buch/papers/multiplikation/main.tex @@ -26,8 +26,8 @@ backgroundcolor=\color{backcolour} } -\chapter{Schnelle Matrizen Multiplikation\label{chapter:multiplikation}} -\lhead{FMM} +\chapter{Schnelle Matrizenmultiplikation\label{chapter:multiplikation}} +\lhead{Schnelle Matrizenmultiplikation} \begin{refsection} \chapterauthor{Michael Schmid} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index e53b0de..879b210 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -3,104 +3,119 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Problemstellung} -\rhead{Problemstellung} -Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. +\section{Laufzeiten von Algorithmen} +\rhead{Laufzeiten von Algorithmen} +Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente Ausführung dieser Operation von grosser Bedeutung. Das Ziel dieses Papers ist, verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. -Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der Standard Algorithmus l\"osen. +Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der Standardalgorithmus l\"osen. -\subsection{Big $\mathcal{O}$ Notation} \label{muliplikation:sec:bigo} -Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhängigkeit zur Inputgrösse \cite{multiplikation:bigo}. -$f(x) \in \mathcal{O}(g(x))$ besagt, dass die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$. -% Es gibt eine Konstante $K$ derart, dass $f(x) \le K g(x)$ für $x\to\infty$ -Als Beispiel: benötigt eine Funktion $g$ $\mathcal{O}\left(n^2 \right)$ Multiplikationen, so wächst $f$ mit $\mathcal{O}\left(n+ n^2 \right)$ nicht wesentlich schneller falls $x\to\infty$. -Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: +Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Relation zur Inputgrösse \cite{multiplikation:bigo}. +$f(x) \in \mathcal{O}(g(x))$ besagt, dass die Funktion $f$ nicht wesentlich schneller w\"achst als $g$, wenn $x \rightarrow \infty$. +Dies ist gegeben, falls es für $f \in \mathcal{O}(n^k)$ eine Konstante $C$ gibt, mit $f(n) \leq Cn^k$. +% Es gibt eine Konstante $K$ derart, dass $f(x) \le K g(x)$ für $x\to\infty$. +Vereinfacht werden f\"ur Algorithmen die folgenden Sprechweisen verwendet: \begin{itemize} \item $f \in \mathcal{O}(1) \rightarrow f$ ist beschr\"ankt \item $f \in \mathcal{O}(n) \rightarrow f$ w\"achst linear - \item $f \in \mathcal{O}\left (n^2 \right ) \rightarrow f$ w\"achst quadratisch + \item $f \in \mathcal{O} (n^2 ) \rightarrow f$ w\"achst quadratisch \item $f \in \mathcal{O}(\log n) \rightarrow f$ w\"achst logarithmisch \item $f \in \mathcal{O}(n \log n) \rightarrow f$ hat super-lineares Wachstum - \item $f \in \mathcal{O}\left (e^n \right ) \rightarrow f$ w\"achst exponentiell + \item $f \in \mathcal{O} (e^n ) \rightarrow f$ w\"achst exponentiell \item usw. \end{itemize} +Konstanten werden nicht beachtet, eine Laufzeit von $4n^2$ führt, für $n \rightarrow \infty$ zu $\mathcal{O}(n^2)$. In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden. -Bei einer logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven dargestellt. -Sch\"on zu erkennen ist, dass Logarithmische Kurven beschr\"ankt sind. - - -\subsubsection{Beispiel Algorithmen} - -Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. - -\begin{minipage}{0.4\textwidth} - \begin{algorithm}[H]\footnotesize\caption{} - \label{multiplikation:alg:b1} - \setlength{\lineskip}{7pt} - \begin{algorithmic} - \Function{B1}{$a, b$} - \State \textbf{return} $a+b$ - \EndFunction - \end{algorithmic} - \end{algorithm} - - \begin{algorithm}[H]\footnotesize\caption{} - \setlength{\lineskip}{7pt} - \begin{algorithmic} - \label{multiplikation:alg:linear} - \Function{L}{$\mathbf{a}, \mathbf{b}$,n} - \State $ sum \gets 0$ - \For{$i = 0,1,2 \dots,n$} - \State $ sum \gets sum + A[i] \cdot B[i] $ - \EndFor - - \State \textbf{return} $sum$ - - \EndFunction - \end{algorithmic} - \end{algorithm} -\end{minipage} -\hspace{2cm} -\begin{minipage}{0.4\textwidth} - - \begin{algorithm}[H]\footnotesize\caption{} - \label{multiplikation:alg:b2} - \setlength{\lineskip}{7pt} - \begin{algorithmic} - \Function{B2}{$a, b$} - \State $ x \gets a+b $ - \State $ y \gets a \cdot b $ - \State \textbf{return} $x+y$ - \EndFunction - \end{algorithmic} - \end{algorithm} - - - \begin{algorithm}[H]\footnotesize\caption{} - \label{multiplikation:alg:q1} - \setlength{\lineskip}{7pt} - \begin{algorithmic} - \Function{Q}{$\mathbf{A}, \mathbf{B}$,n} - \State $ sum \gets 0$ - \For{$i = 0,1,2 \dots,n$} - \For{$j = 0,1,2 \dots,n$} - \State $ sum \gets sum + A[i] \cdot B[j] $ - \EndFor - \EndFor - \State \textbf{return} $sum$ - \EndFunction - \end{algorithmic} - \end{algorithm} - -\end{minipage} +Bei einer doppelt logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven abgebildet. + + + +\subsubsection{Beispielalgorithmen} + +Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. + + +\begin{table}[t] + \begin{tabular}{ll} + \begin{minipage}{0.48\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:b1} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{B1}{$a, b$} + \State \textbf{return} $a+b$ + \EndFunction + \State + \State + \end{algorithmic} + \end{algorithm} + \end{minipage} + & + \begin{minipage}{0.48\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:b2} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{B2}{$a, b$} + \State $ x \gets a+b $ + \State $ y \gets a \cdot b $ + \State \textbf{return} $x+y$ + \EndFunction + \end{algorithmic} + \end{algorithm} + \end{minipage} \\ + \begin{minipage}{0.48\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \label{multiplikation:alg:linear} + \Function{L}{$\mathbf{a}, \mathbf{b}$,n} + \State $ sum \gets 0$ + \For{$i = 0,1,2 \dots,n$} + \State $ sum \gets sum + A[i] \cdot B[i] $ + \EndFor + + \State \textbf{return} $sum$ + + \EndFunction + \State + \State + \end{algorithmic} + \end{algorithm} + \end{minipage} + & + \begin{minipage}{0.48\textwidth} + \begin{algorithm}[H]\footnotesize\caption{} + \label{multiplikation:alg:q1} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{Q}{$\mathbf{A}, \mathbf{B}$,n} + \State $ sum \gets 0$ + \For{$i = 0,1,2 \dots,n$} + \For{$j = 0,1,2 \dots,n$} + \State $ sum \gets sum + A[i] \cdot B[j] $ + \EndFor + \EndFor + \State \textbf{return} $sum$ + \EndFunction + \end{algorithmic} + \end{algorithm} + \end{minipage} + \end{tabular} +\end{table} + +%\begin{table} +% \begin{tabular}[t]{ll} + +% \end{tabular} +%\end{table} \paragraph{Beschr\"ankter Algorithmus} +Algorithmus \ref{multiplikation:alg:b1} ist ein Beispiel mit beschränkter Laufzeit $\mathcal{O}(1)$ +Da $a$ und $b$ Skalare sind, hat keine Gr\"osse $n$ einen Einfluss auf die Laufzeit. -Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmus \ref{multiplikation:alg:b1} entnommen werden. Da $a$ und $b$ Skalare sind, hat keine Gr\"osse $n$ einen Einfluss auf die Laufzeit. - -Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. +Wie erwähnt werden Konstanten nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. \paragraph{Linearer Algorithmus} @@ -111,12 +126,12 @@ Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\math \paragraph{Quadratischer Algorithmus} Der Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. -Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. +Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O} (n^2 )$. \begin{figure} \center \includegraphics[]{papers/multiplikation/images/bigo} - \caption{Verschiedene Laufzeiten} + \caption{Laufzeiten von verschiedensten Zeitkomplexitäten. Bei einer doppelt logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven dargestellt.} \label{multiplikation:fig:bigo} \end{figure} diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 4b93927..0a9d3b6 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -19,7 +19,7 @@ Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punkt Für die Überschaubarkeit haben wir ein simples Motiv eines einzelnen grauen Punktes dargestellt und betrachten dies nur in zwei Dimensionen. Die eingezeichneten Vektoren \(\vec{a}_1\) und \(\vec{a}_2\) sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt. Wird ein beliebiger grauer Gitterpunkt in Abbildung \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von \(\vec{a}_1\) und \(\vec{a}_2\) verschoben, endet er zwangsweise auf einem Gitterpunkt, wenn nicht wieder am selben Ort. -Im dreidimensionalen Raum können alle Gitterpunkte mit derselben Idee und einem zusätzlichen Vektor \(\vec{c}\) also +Im dreidimensionalen Raum können alle Gitterpunkte mit derselben Idee und einem zusätzlichen Vektor \(\vec{a}_3\) also \[ \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i \] diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 7c88c16..9647775 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -4,7 +4,7 @@ \section{Übertragung mit Hilfe der diskrten Fourier-Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} -Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt +Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunktes durch die Codierung auf viele übertragene Werte verteilt werden. Die Decodierung ist in der Lage, den ursprünglichen Datenwert zu rekonstruieren, sogar wenn einzelne wenige übertragene Werte beschädigt worden sind. @@ -12,22 +12,24 @@ sogar wenn einzelne wenige übertragene Werte beschädigt worden sind. Die Fourier-Transformation transformiert einen einzelnen Wert, eine Dirac-Funktion, auf ein Spektrum, welches sich über die ganze Frequenzachse erstreckt. Aus der Filtertheorie ist bekannt, dass der ursprüngliche Impuls mehr oder weniger rekonstruierbar ist, - vorausgestzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren. + vorausgesetzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren. \par Es liegt daher nahe zu versuchen, die Fourier-Transformation für Codierung und Decodierung zu verwenden. \subsection{Beispiel mit Fehlerkorrektur mit Fourier-Transformation \label{reedsolomon:subsection:sendbsp}} +Das folgende Beispiel soll zeigen, wie die Idee der Fehlerkorrektur umgesetzt wurde. +Die Fehlererkennung des Reed-Solomon-Codes funktioniert nach einem sehr Ähnlichen Prinzip. -Das folgende Beispiel soll zeigen, wie Fehlerkorrektur möglich ist. -Dieses auf eine Art, die der Funktionsweise des Reed-Solomon-Codes, -der später erklärt wird, analog ist. +%Das folgende Beispiel soll zeigen, wie Fehlerkorrektur möglich ist. +%Dieses auf eine Art, die der Funktionsweise des Reed-Solomon-Codes, +%der später erklärt wird, analog ist. \par -Der Auftrag ist nun 64 Datenwerte zu übertragen, 32 Fehler zu erkennen und 16 Fehler zu rekonstruieren. +Der Auftrag besteht darin, 64 Datenwerte zu übertragen, 32 Fehler erkennen können und bis zu 16 Fehler zu rekonstruieren. Mit Hilfe der Fourier-Transformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert, zu den \textcolor{darkgreen}{grünen Übertragungspunkten}. -Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden. +Durch eine Rücktransformation können die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden. \begin{figure}%[!ht] \centering @@ -42,8 +44,8 @@ In der Abbildung \ref{fig:sendorder} wird eine Übertragung Schritt für Schritt In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläutert: \begin{enumerate}[(1)] \item Das Signal besteht aus 64 zufälligen, ganzzahligen Datenwerten zwischen 0 und 10. - Für die Rekonstruktion werden zusäzlich Datenwert benötigt, wir fügen deshalb 32 Werte hinzu. - Diese setzen wir willkürlich auf Null und nennen sie Fehlerkorrekturstellen. + Für die Rekonstruktion werden zusätzliche Datenwerte benötigt, wir fügen deshalb 32 Werte hinzu. + Diese setzen wir willkürlich alle auf Null und nennen sie Fehlerkorrekturstellen. Wir erhalten so einen erweiterten Signalvektor der Länge $N =96$. \item Mit der Fourier-Transformation wird der ganze Signalvektor codiert. Dadurch wird jede Informationseinheit auf alle Punkte des Spektrums verteilt. @@ -52,13 +54,13 @@ In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläut \par Im Beispiel sind dies die Werte an den Stellen 6, 20 und 74 (\textcolor{red}{rote Kurve}), die um einen Betrag verändert werden. - Dieser ist bis zu 150-mal kleiner, als die ursprünglichen codierte Werte. - Der Empfänger kennt daher im allgemeinen nicht, ob und wo Übertragungsfehler aufgetreten sind. - \item Ohne Übertragungsfehler kann der Signalvektor durch inverse Fourier-Transformation vollständig + Dieser ist bis zu 150-mal kleiner als die ursprünglich codierten Werte. + Der Empfänger erkennt daher im allgemeinen nicht, ob und wo Übertragungsfehler aufgetreten sind. + \item Ohne Übertragungsfehler kann der Signalvektor durch die inverse Fourier-Transformation vollständig wiederhergestellt werden. Dazu gehören auch die Nullen an den Fehlerkorrekturstellen 64 - 96. \par - Sind Übertragungsfehler aufgetreten, werden an diesen Stellen Werte abweichend von Null auftreten. + Sind Übertragungsfehler aufgetreten, werden an diesen Stellen die Werte von Null abweichen. Somit haben wir bereits Fehler erkannt. \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennen wir das Syndrom. Im Syndrom steckt nur Information über die Fehler, sie werden durch die inverse Fourier-Transformation erzeugt. @@ -69,7 +71,7 @@ In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläut Im Beispiel haben wir mit dem Syndrom nur etwa ein Drittel der Fehlerinformation, es ist daher zu erwarten, dass die Fehlerwerte auch nur ein Drittel so gross sind. \par -Damit können die Fehler korrigiert und die Orginaldaten wiederhergestellt werden. +Damit können die Fehler korrigiert und die Originaldaten wiederhergestellt werden. Der Rekonstruktionsauftrag ist damit erfolgreich ausgeführt. \subsection{Fourier-Transformation und Polynome\label{reedsolomon:subsection:ftandpolynom}} @@ -113,10 +115,10 @@ Die Analogie geht aber noch weiter. \label{reedsolomon:DFT_polynom2} \end{equation} für verschiedene \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots ,N-1\) übermittelt. -Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffizenten) +Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$ (graue Koeffizenten). \par -Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reeleen Zahlen. +Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reellen Zahlen. Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren, -dann müssen wir von den reeleen Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. -Dies wird nun im nächsten Abschnitt genauer erklärt. - +dann brauchen wir andere Varianten. +Um dieser Approximation zu entkommen, verlassen wir die reellen Zahlen und gehen zum endlichen Körpern, oder auch Galois-Körper genannt. +Dieser bietet uns einige Vorteile.
\ No newline at end of file diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index 04f1fe2..f99ad82 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -7,10 +7,10 @@ \label{reedsolomon:section:einleitung}} \rhead{Einleitung} Der Reed-Solomon-Code wurde von den beiden Mathematiker Irving S. Reed und Gustave Solomon im Jahre 1960 entwickelt. -Dabei haben sie das Problem der Fehler bei der Datenübertragung gelöst. -In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge, -Funktion oder Algorithmus des Reed-Solomon-Code erklärt. -Es wird jedoch nicht auf die technische Umsetzung oder Implementierung eingegangen. +Dabei haben sie das Problem der Fehlerhaften Datenübertragung gelöst. +In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge und +Funktionsweise des Reed-Solomon-Code erklärt. +Es wird jedoch nicht auf die technische Umsetzung oder Implementierung eingegangen, jedoch wird im Abschnitt \ref{reedsolomon:section:anwendung} einige Anwendungen des Reed-Solomon-Codes vorgestellt. diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 6ee42ef..daa2913 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -5,67 +5,104 @@ \label{reedsolomon:section:idee}} \rhead{Problemstellung} Um Fehler in einer Datenübertragung zu erkennen, könnte man die Daten jeweils doppelt senden, - also immer zwei gleich Werte miteinander und so jeweils einzelne Fehler erkennen. -Wenn jedoch mehr als nur ein Fehler erkannt werden soll und sogar noch das Orginal rekonstruiert werden soll, -dann werden die Daten drei oder vierfach versendet. -Doch nur schon um Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet. -Das Problem liegt darin Informationen, Zahlen, - zu Übertragen und Fehler zu erkennen und zu korrigieren. -Der Unterschied des Fehler Erkennens und Korrigirens, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht? -Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch die Originalwerte rekonstruiert. -Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals anfordert. -Dies führt wieder zu unerwünschten mehrfachen Übertragung. -In Anwendungen des Reed-Solomon-Codes Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} - ist diese vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich. -Der Reed-Solomon-Code macht dies Übertragung auf eine andere, clevere Weise. +also den gleiche Wert immer zweimal versenden. +Tritt ein Fehler ein wird sich dies in der Differenz der beiden Werten bemerkbar machen. +Aber wie erkennen wir, welcher nun der richtige ist? Die Lösung ist simpel: Wir übertragen den Wert einfach dreimal. +Wenn jetzt ein Fehler auftritt, kann durch die beiden unveränderten Werten den richtigen bestimmt werden. +Doch was machen wir, wenn bei dieser Übertragung zwei Fehler auftreten? +Oder noch schlimmer: Was wenn zweimal derselbe Fehler auftritt? Die beiden Fehlerhaften Werte überstimmen bei der Evaluierung den gesendeten Datenwert, der dann unwiderruflich verloren geht. +Wir könnten dies noch steigern mit vier, fünf oder mehr gleichen Übertragenen Werte. Dies erhöht zwar die Robustheit der gesendeten Daten, führt aber auch dazu, dass wir durch die Mehrfachübertragung nur sehr wenige Nutzdaten versenden können. +Gerade in unserer heutigen Zeit wäre dies ein enorm grosses Problem und aus diesem Grund wurden alternative Ansätze ausgearbeitet um dieses grundlegende Problem zu lösen. +% +% +%Gerade in der heutigen modernen Zeit bei dem hohen bedarf an Daten würden unsere Kommunikationssysteme bei weitem nicht ausreichen um den einen einzigen Datenwert mehrfach zu übertragen +% +% Gerade in der Heutigen modernen Zeit bei diesem enormen mass an daten die wir alle tagtäglich anfordern Währe dies wohl unmöglich, wenn wir die daten auf diese Weise +% +% +% +% +% +%Wenn es uns gelingt, Fehler nach Ihrer Übertragung zu erkennen, dann könnten wir in einem neuen Ansatz den fehlerhaft empfangenen Wert noch einmal anfordern. +%Wir stellen fest, dass für viele alltägliche Anwendungen völlig ausreichend ist. +% +%Was ist, wenn wir aber eine Datenquelle haben, von der wir nur einmalig lesen können? +% +% +% +%Beim Übertragen von drei Werten können wir maximal 2 Fehler erkennen aber nicht mehr korrigieren. +%Wenn wir noch mehr Werte +% +%Wir Übertragen Ziemlich viele Werte für so wenige Nutzdaten. Hinzu kommt, dass wir bei dieser Vorgehensweise gerade mal bestimmen können, dass überhaupt Fehler aufgetreten sind +% +% +%Wir haben also drei Werte die bestimmt einen Fehler korrigieren können, was ziemlich viele Werte um einen Fehler zu korrigieren. +% +% um so jeweils einzelne Fehler zu erkennen. +%Wenn jedoch mehr als nur ein Fehler erkannt werden und sogar noch das Original rekonstruiert werden soll, dann sollen die Daten drei oder vierfach versendet werden. +%Doch nur schon um einen Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach versendet. +%Das Hauptproblem ist, dass Informationen Fehlerfrei Übertragen werden sollen. Um dies zu erreichen muss gleich nach dem Empfangen Fehler erkannt und korrigiert werden. +% +%Das Problem liegt darin, Informationen oder Zahlen beim Übertragen gleichzeitig noch +% +%Das Problem liegt darin, das Informationen oder Zahlen zu Übertragen und gleichzeitig Fehler zu erkennen +% +% +%Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen und zu korrigieren. +%Der Unterschied des Fehler Erkennens und Korrigirens, ist das beim Erkennen nur die Frage beantwortet wird: Ist die Übertragung fehlerhaft oder nicht? +%Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch die Originalwerte rekonstruiert. +%Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals anfordert. +%Dies führt wieder zu unerwünschten mehrfachen Übertragung. +%In Anwendungen des Reed-Solomon-Codes Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} +% ist diese vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich. +%Der Reed-Solomon-Code macht dies Übertragung auf eine andere, clevere Weise. \subsection{Polynom-Ansatz \label{reedsolomon:section:polynomansatz}} \rhead{Polynom-Ansatz} Eine zentrale Idee des Reed-Solomon-Code ist, aus den Daten ein Polynom zu bilden. -Von dieser Polynomfunktion wird dann eine Anzahl Werte übertragen. -\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, - welche übertragen werden sollen. Daraus bilden wir das Polynom +Mit dieser Polynomfunktion wird dann eine Anzahl von Werten übertragen. +\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1} und \textcolor{blue}{5}, welche übertragen werden sollen. Daraus bilden wir das Polynom \begin{equation} p(x) = -\textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} +\textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5}. \label{reedsolomon:equation1} -\end{equation}. +\end{equation} \par -Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. -Bei einer fehlerlosen Übertragung können wir mit 3 übertragene Werte +Ein Polynom zweiten Grades ist durch drei Punkte eindeutig bestimmbar. +Bei einer fehlerlosen Übertragung können wir mit 3 übertragenen Werten das Polynom durch Polynominterpolation volständig rekonstruieren. -Wir brauchen Polynominterpolation als Methode, um aus Punkte wieder Polynom zu berechnen. -Die Koeffizente des rekonstruierten Polynoms sind dann unsere gesendeten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. +Wir brauchen Polynominterpolation als Methode, um aus den Punkten wieder ein Polynom zu bilden. +Die Koeffizente des rekonstruierten Polynoms sind dann unsere gesendeten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1} und \textcolor{blue}{5}. \par Wie können wir nun Fehler erkennen oder sogar korrigieren? -Versuchen wir doch mehr Werte zu übertragen, wir nehmen im Beispiel 7 Werte. +Versuchen wir doch, mehr Werte zu übertragen, wie zum Beispiel 7 Werte. Übertragen werden nun die \textcolor{darkgreen}{grünen Werte} - dieses \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3, \dots , 7. + des \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3, \dots , 7. In Abbildung \ref{fig:polynom} ist das zu den \textcolor{blue}{Datenpunkten} gehörige Polynom blau dargestellt, - die \textcolor{darkgreen}{übertragenen Werte} des Polynoms sind grün. -Die grünen Punkte bestimmen die Parabel. -Damit können die Fehler erkannt werden, weil die empfangenen Punkte nicht auf der Parabel liegen. -Somit können die grauen Punkte auf der Parabel ersetzt werden und sind damit korrigiert. -Bis zu wievielen Fehler können wir nun im Beispiel korrigieren? -Wir erhöhen nun die Fehleranzahl Schritt für Schritt: +die \textcolor{darkgreen}{übertragenen Werte} des Polynoms sind grün, wobei diese Punkte aufgrund von Übertragungsfehler jetzt eine Parabel darstellen. +Die Fehlerhaften Punkte lassen sich sehr einfach bestimmen, weil diese nicht auf der ursprünglichen Funktion liegen. +Somit können die roten Punkte auf der Parabel durch die grauen ersetzt werden und sind damit korrigiert. + +Bisher konnten wir von 7 Zahlen zwei Fehler erkennen und korrigieren. Können wir in diesem Beispiel noch mehr Fehler korrigieren? +Wir erhöhen dazu die Fehleranzahl Schritt für Schritt: \begin{itemize} \item[\textit{1 Fehler}:] Bei einem Fehler können konkurrenzierende, aber falsche Polynome zusammen mit zwei originalen Punkten entstehen. Dabei können aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. - Da 6 > 3 ist haben wir unser original Polynom gefunden. + Da 6 > 3 ist haben wir unser originales Polynom gefunden. \item[\textit{2 Fehler}:] Bei Zwei Fehlern kann ein Fehler mit zwei originalen Punkten ein konkurrenzierendes, aber falsches Polynom bilden. - Da der zweite \textcolor{red}{Fehler} frei wählbar ist, kann dieser auch auf dem \textcolor{gray}{Konkurrenzpolynom} liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, ein \textcolor{blue}{originales Polynom} mit \textcolor{darkgreen}{5} übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + Da der zweite \textcolor{red}{Fehler} frei wählbar ist, kann dieser auch auf dem \textcolor{gray}{Konkurrenzpolynom} liegen, wie in der Abbilbung \ref{fig:polynom} zu sehen ist. + Nun haben wir, ein \textcolor{blue}{originales Polynom} mit \textcolor{darkgreen}{5} übereinstimmenden und ein konkurrenzierendes mit 4 Punkten. Da 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist. - \item[\textit{3 Fehler}:] Bei Drei kann genau wie bei 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen werden. + \item[\textit{3 Fehler}:] Bei Drei kann genau wie bei 1 oder 2 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmt werden. Auch hier sind die anderen Fehler frei wählbar und liegen auf dem Konkurrenzpolynom. Nun ist es so das 5 Punkte auf diesem konkurenzierenden Polynom und 4 Punkte auf dem originalen. Das Originalpolynom kann nicht mehr gefunden werden. - \item[\textit{4 Fehler}:] Bei Vier, kann es noch erkannt werden, dass Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. - Somit haben wir mindestens 2 verschieden Polynome, dass bedeutet Fehler sind entstanden. - \item[\textit{5 Fehler}] Bei Fünf, kann mit den 2 originalen Punkte das Originale Polynom nicht mehr erkannt werden und - somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. + \item[\textit{4 Fehler}:] Bei Vier kann noch erkannt werden, dass Fehler aufgetreten sind, da 3 originale Punkte das ursprüngliche Polynom ergeben. + Somit haben wir mindestens 2 verschieden Polynome, was bedeutet, dass Fehler entstanden sind. + \item[\textit{5 Fehler:}] Bei Fünf kann mit den 2 originalen Punkte das Originale Polynom nicht mehr erkannt werden und + somit kann auch keine Aussage mehr gemacht werden, ob Fehler aufgetreten sind oder nicht. \end{itemize} \begin{figure}%[!ht] @@ -80,12 +117,12 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \section{Anzahl Übertragungswerte bestimmen \label{reedsolomon:section:Fehlerkorrekturstellen}} -Um zu bestimmen, wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, um die Fehler zu korrigieren, - muss man zuerst wissen, wieviel \textcolor{blue}{Datenwerte} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. -Die Anzahl Datenwerte, ergeben die Anzahl Polynomkoeffizente \textcolor{blue}{$k$} und somit den Grad $k-1$. +Um zu bestimmen, wie viele zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind um die Fehler zu korrigieren, + muss man zuerst wissen, wie viele \textcolor{blue}{Datenwerte} gesendet und wie viele \textcolor{red}{Fehler} erkannt werden sollen. +Die Anzahl Datenwerte ergeben die Anzahl Polynomkoeffizenten \textcolor{blue}{$k$} und somit den Grad $k-1$ des Polynoms. Die Bestimmung der Anzahl der Fehler \textcolor{red}{$t$}, welche korrigiert werden können, braucht Redundanz. -Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, - erkennt man almählich ein Muster. +Bilden wir verschieden grosse Polynome und untersuchen diese mit unterschiedlich vielen Fehlern erkennt man allmählich ein Muster. + \begin{table}%[!ht] \centering \begin{tabular}{ c c | c} @@ -105,16 +142,16 @@ Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, \par Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem konkurenzierenden. Somit braucht man für die Übertragung pro \textcolor{red}{Fehler} zwei Übertragungspunkte mehr. -Wie in der Tabelle ergibt sich diese \textcolor{darkgreen}{Übertragungsanzahl} +Wie in der Tabelle \ref{tab:fehlerkorrekturstellen} ersichtlich ist ergeben sich diese Anzahl an \textcolor{darkgreen}{Punkte} für die Übertragung. \begin{equation} \textcolor{darkgreen}{u}= \textcolor{blue}{k}+2\textcolor{red}{t}. \label{reedsolomon:equation2} \end{equation} -Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. -Für die Polynomkoeffizente nach der Übertragung zu rekonstruieren, - haben wir jedes mal die Polynominterpolationmethode angewendet. -Diese Polynoiminterpolation ist leider schwierig und fehleranfällig. -Deshalb finden wir eine alternative im nächsten Abschnitt. +Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, die aber nicht korrigiert werden können. +Um die Polynomkoeffizenten nach der Übertragung zu rekonstruieren, haben wir jedes mal die Polynominterpolationsmethode angewendet. +Diese Polynominterpolation ist leider schwierig zu berechnen und sehr fehleranfällig. +Es wäre daher einfacher, wenn wir eine alternative Vorgehensweise finden könnten. + |