From 5aba69d709332033fe6d90b0c8fdc502d6eb208f Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Mon, 12 Jul 2021 22:23:53 +0200 Subject: Change arrow style in tikz figures --- .../punktgruppen/figures/combine-symmetries.pdf | Bin 14414 -> 14372 bytes buch/papers/punktgruppen/figures/lattice.pdf | Bin 27886 -> 27858 bytes buch/papers/punktgruppen/figures/piezo-atoms.pdf | Bin 35693 -> 35662 bytes buch/papers/punktgruppen/figures/piezo.pdf | Bin 16865 -> 16845 bytes buch/papers/punktgruppen/figures/projections.pdf | Bin 27953 -> 27953 bytes .../punktgruppen/figures/symmetric-shapes.pdf | Bin 12790 -> 15846 bytes .../papers/punktgruppen/tikz/combine-symmetries.tex | 1 + buch/papers/punktgruppen/tikz/lattice.tex | 13 +++++++------ buch/papers/punktgruppen/tikz/piezo-atoms.tex | 1 + buch/papers/punktgruppen/tikz/piezo.tex | 4 +++- buch/papers/punktgruppen/tikz/projections.tex | 1 + buch/papers/punktgruppen/tikz/symmetric-shapes.tex | 1 + 12 files changed, 14 insertions(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/figures/combine-symmetries.pdf b/buch/papers/punktgruppen/figures/combine-symmetries.pdf index 13f7330..31d2a2e 100644 Binary files a/buch/papers/punktgruppen/figures/combine-symmetries.pdf and b/buch/papers/punktgruppen/figures/combine-symmetries.pdf differ diff --git a/buch/papers/punktgruppen/figures/lattice.pdf b/buch/papers/punktgruppen/figures/lattice.pdf index 6565be5..4436cdc 100644 Binary files a/buch/papers/punktgruppen/figures/lattice.pdf and b/buch/papers/punktgruppen/figures/lattice.pdf differ diff --git a/buch/papers/punktgruppen/figures/piezo-atoms.pdf b/buch/papers/punktgruppen/figures/piezo-atoms.pdf index 63da7a9..17fb179 100644 Binary files a/buch/papers/punktgruppen/figures/piezo-atoms.pdf and b/buch/papers/punktgruppen/figures/piezo-atoms.pdf differ diff --git a/buch/papers/punktgruppen/figures/piezo.pdf b/buch/papers/punktgruppen/figures/piezo.pdf index ca6192b..e0d7db4 100644 Binary files a/buch/papers/punktgruppen/figures/piezo.pdf and b/buch/papers/punktgruppen/figures/piezo.pdf differ diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index c9369b2..e7f8f86 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ diff --git a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf index 0b3ba54..e4539a5 100644 Binary files a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf and b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf differ diff --git a/buch/papers/punktgruppen/tikz/combine-symmetries.tex b/buch/papers/punktgruppen/tikz/combine-symmetries.tex index 84e0a76..f4ac52c 100644 --- a/buch/papers/punktgruppen/tikz/combine-symmetries.tex +++ b/buch/papers/punktgruppen/tikz/combine-symmetries.tex @@ -13,6 +13,7 @@ \begin{document} \begin{tikzpicture}[ + >=latex, dot/.style = { draw, circle, thick, black, fill = gray!40!white, minimum size = 2mm, diff --git a/buch/papers/punktgruppen/tikz/lattice.tex b/buch/papers/punktgruppen/tikz/lattice.tex index 9c05af3..391ef20 100644 --- a/buch/papers/punktgruppen/tikz/lattice.tex +++ b/buch/papers/punktgruppen/tikz/lattice.tex @@ -13,12 +13,13 @@ \begin{document} \begin{tikzpicture}[ - dot/.style = { - draw, circle, thick, black, fill = gray!40!white, - minimum size = 2mm, - inner sep = 0pt, - outer sep = 1mm, - }, + >=latex, + dot/.style = { + draw, circle, thick, black, fill = gray!40!white, + minimum size = 2mm, + inner sep = 0pt, + outer sep = 1mm, + }, ] \begin{scope} diff --git a/buch/papers/punktgruppen/tikz/piezo-atoms.tex b/buch/papers/punktgruppen/tikz/piezo-atoms.tex index 82a2710..1811392 100644 --- a/buch/papers/punktgruppen/tikz/piezo-atoms.tex +++ b/buch/papers/punktgruppen/tikz/piezo-atoms.tex @@ -13,6 +13,7 @@ \begin{document} \begin{tikzpicture}[ + >=latex, node distance = 2mm, charge/.style = { circle, draw = black, thick, diff --git a/buch/papers/punktgruppen/tikz/piezo.tex b/buch/papers/punktgruppen/tikz/piezo.tex index 1d16ab7..736dbad 100644 --- a/buch/papers/punktgruppen/tikz/piezo.tex +++ b/buch/papers/punktgruppen/tikz/piezo.tex @@ -12,7 +12,9 @@ \usetikzlibrary{calc} \begin{document} -\begin{tikzpicture} +\begin{tikzpicture}[ + >=latex, + ] \begin{scope}[ node distance = 0cm ] diff --git a/buch/papers/punktgruppen/tikz/projections.tex b/buch/papers/punktgruppen/tikz/projections.tex index a763e77..64ab468 100644 --- a/buch/papers/punktgruppen/tikz/projections.tex +++ b/buch/papers/punktgruppen/tikz/projections.tex @@ -13,6 +13,7 @@ \begin{document} \begin{tikzpicture}[ + >=latex, classcirc/.style = { draw = gray, thick, circle, minimum size = 12mm, diff --git a/buch/papers/punktgruppen/tikz/symmetric-shapes.tex b/buch/papers/punktgruppen/tikz/symmetric-shapes.tex index b2c051f..688fb61 100644 --- a/buch/papers/punktgruppen/tikz/symmetric-shapes.tex +++ b/buch/papers/punktgruppen/tikz/symmetric-shapes.tex @@ -14,6 +14,7 @@ \begin{document} \begin{tikzpicture}[ + >=latex, node distance = 2cm, shapetheme/.style = { very thick, draw = black, fill = magenta!20!white, -- cgit v1.2.1 From bf17b6c5ecf720f5db68889be8bda10130004121 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 14 Jul 2021 22:34:08 +0200 Subject: Adapt figures and fix typos --- buch/papers/punktgruppen/Makefile | 6 ++- buch/papers/punktgruppen/crystals.tex | 4 +- .../punktgruppen/figures/atoms-grid-force.pdf | Bin 0 -> 1496 bytes .../punktgruppen/figures/atoms-grid-still.pdf | Bin 0 -> 1307 bytes .../figures/atoms-piezo-force-horizontal.pdf | Bin 0 -> 15334 bytes .../figures/atoms-piezo-force-vertical.pdf | Bin 0 -> 15377 bytes .../punktgruppen/figures/atoms-piezo-force.pdf | Bin 0 -> 15377 bytes .../punktgruppen/figures/atoms-piezo-still.pdf | Bin 0 -> 1643 bytes .../punktgruppen/figures/combine-symmetries.pdf | Bin 14372 -> 14372 bytes buch/papers/punktgruppen/figures/lattice.pdf | Bin 27858 -> 27849 bytes buch/papers/punktgruppen/figures/piezo-atoms.pdf | Bin 35662 -> 0 bytes buch/papers/punktgruppen/figures/piezo.pdf | Bin 16845 -> 16842 bytes buch/papers/punktgruppen/figures/projections.pdf | Bin 27953 -> 27953 bytes .../punktgruppen/figures/symmetric-shapes.pdf | Bin 15846 -> 15846 bytes buch/papers/punktgruppen/piezo.tex | 29 ++++++------ buch/papers/punktgruppen/tikz/atoms-grid-force.tex | 42 +++++++++++++++++ buch/papers/punktgruppen/tikz/atoms-grid-still.tex | 33 +++++++++++++ .../tikz/atoms-piezo-force-horizontal.tex | 47 +++++++++++++++++++ .../tikz/atoms-piezo-force-vertical.tex | 52 +++++++++++++++++++++ .../papers/punktgruppen/tikz/atoms-piezo-still.tex | 34 ++++++++++++++ .../punktgruppen/tikz/combine-symmetries.tex | 2 +- buch/papers/punktgruppen/tikz/lattice.tex | 4 +- buch/papers/punktgruppen/tikz/piezo.tex | 4 +- 23 files changed, 235 insertions(+), 22 deletions(-) create mode 100644 buch/papers/punktgruppen/figures/atoms-grid-force.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-grid-still.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-still.pdf delete mode 100644 buch/papers/punktgruppen/figures/piezo-atoms.pdf create mode 100644 buch/papers/punktgruppen/tikz/atoms-grid-force.tex create mode 100644 buch/papers/punktgruppen/tikz/atoms-grid-still.tex create mode 100644 buch/papers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex create mode 100644 buch/papers/punktgruppen/tikz/atoms-piezo-force-vertical.tex create mode 100644 buch/papers/punktgruppen/tikz/atoms-piezo-still.tex (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/Makefile b/buch/papers/punktgruppen/Makefile index f92dc95..47affeb 100644 --- a/buch/papers/punktgruppen/Makefile +++ b/buch/papers/punktgruppen/Makefile @@ -11,9 +11,13 @@ SOURCES := \ symmetry.tex TIKZFIGURES := \ + tikz/atoms-grid-still.tex \ + tikz/atoms-grid-force.tex \ + tikz/atoms-piezo-still.tex \ + tikz/atoms-piezo-force-vertical.tex \ + tikz/atoms-piezo-force-horizontal.tex \ tikz/combine-symmetries.tex \ tikz/lattice.tex \ - tikz/piezo-atoms.tex \ tikz/piezo.tex \ tikz/projections.tex \ tikz/symmetric-shapes.tex diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 1aec16f..abd0c27 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -12,7 +12,6 @@ Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. \includegraphics[]{papers/punktgruppen/figures/lattice} \caption{ Zweidimensionales Kristallgitter. - \texttt{TODO: make wider and shorter} \label{fig:punktgruppen:lattice} } \end{figure} @@ -55,7 +54,6 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \includegraphics[]{papers/punktgruppen/figures/combine-symmetries} \caption{ Translations und Rotationssymmetrisches Kristallgitter - \texttt{TODO: make wider and change color (yellow)} } \label{fig:punktgruppen:rot-geometry} \end{figure} @@ -97,7 +95,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangieren soll. Zusätzlich können wir den Sinusterm vereinfachen. \[ - n = 1 - 2\cos\alpha + n = 1 - 2\cos\alpha \qquad \alpha = \cos^{-1}\left(\frac{1-n}{2}\right) \] Dies schränkt die möglichen Rotationssymmetrien auf diff --git a/buch/papers/punktgruppen/figures/atoms-grid-force.pdf b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf new file mode 100644 index 0000000..0b3e084 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-grid-still.pdf b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf new file mode 100644 index 0000000..d707258 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf new file mode 100644 index 0000000..09ed727 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf new file mode 100644 index 0000000..ab2996f Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf new file mode 100644 index 0000000..456eec9 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf new file mode 100644 index 0000000..9a888d7 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/combine-symmetries.pdf b/buch/papers/punktgruppen/figures/combine-symmetries.pdf index 31d2a2e..12a57ba 100644 Binary files a/buch/papers/punktgruppen/figures/combine-symmetries.pdf and b/buch/papers/punktgruppen/figures/combine-symmetries.pdf differ diff --git a/buch/papers/punktgruppen/figures/lattice.pdf b/buch/papers/punktgruppen/figures/lattice.pdf index 4436cdc..803da2b 100644 Binary files a/buch/papers/punktgruppen/figures/lattice.pdf and b/buch/papers/punktgruppen/figures/lattice.pdf differ diff --git a/buch/papers/punktgruppen/figures/piezo-atoms.pdf b/buch/papers/punktgruppen/figures/piezo-atoms.pdf deleted file mode 100644 index 17fb179..0000000 Binary files a/buch/papers/punktgruppen/figures/piezo-atoms.pdf and /dev/null differ diff --git a/buch/papers/punktgruppen/figures/piezo.pdf b/buch/papers/punktgruppen/figures/piezo.pdf index e0d7db4..e0f5450 100644 Binary files a/buch/papers/punktgruppen/figures/piezo.pdf and b/buch/papers/punktgruppen/figures/piezo.pdf differ diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index e7f8f86..828f03c 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ diff --git a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf index e4539a5..c5e42e7 100644 Binary files a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf and b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf differ diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index e6b595a..3c3957b 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -19,10 +19,17 @@ Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für \begin{figure} \centering - \includegraphics[]{papers/punktgruppen/figures/piezo-atoms} + \begin{tabular}{c |c} + \subfigure[][\label{fig:punktgruppen:atoms-piezo}]{\includegraphics{papers/punktgruppen/figures/atoms-piezo-still}} & + \subfigure[][\label{fig:punktgruppen:atoms-grid}]{\includegraphics{papers/punktgruppen/figures/atoms-grid-still}} \\ + \subfigure[][\label{fig:punktgruppen:atoms-piezo-fv}]{\includegraphics{papers/punktgruppen/figures/atoms-piezo-force-vertical}} + \hspace{2mm} + \subfigure[][\label{fig:punktgruppen:atoms-piezo-fh}]{\includegraphics{papers/punktgruppen/figures/atoms-piezo-force-horizontal}} + \hspace{3mm} & \hspace{3mm} + \subfigure[][\label{fig:punktgruppen:atoms-grid-f}]{\includegraphics{papers/punktgruppen/figures/atoms-grid-force}} \\ + \end{tabular} \caption{ Kristallstrukturen mit und ohne piezoelektrischer Eigenschaft. - \texttt{TODO: adapt figure for paper with subfigure markers.} } \label{fig:punktgruppen:atomPiezo} \end{figure} @@ -32,19 +39,15 @@ Die Polarisation resultiert über eine gesamte Oberfläche eines Kristalles, ent Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren. In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise Positive Ionen und blaue negative Ionen repräsentieren. %liste oder anderes format?.. -Struktur$(a)$ zeigt ein piezoelektrisches Material in Ruhe. Struktur $(b)$ ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. +Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil mitlleren Ladungsträger weiter auseinander gerdrückt werden. -Als hilfe zur Vorstellung kann man $(b)$ zwischen zwei leitende Platten setzen, -so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, -während sich die positiven Ionen weiter entfernen. -$(d)$ ist nicht piezoelektrisch. -Dies wird ersichtlich, wenn man $(d)$ unterdruck setzt und sich die Struktur zu $(e)$ verformt. -Setzt man $(e)$ gedanklich auch zwischen zwei leitende Platten scheint es als würden rechts mehr Positive Ionen in die Platte gedrückt werden -und links umgekehrt. +Als hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. +\subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. +Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unterdruck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. +Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten scheint es als würden rechts mehr Positive Ionen in die Platte gedrückt werden und links umgekehrt. Dies ist aber nicht mehr der Fall, wenn der Kristall nach oben und periodisch wiederholt. -Struktur $(c)$ zeigt $(a)$ in unter horizontaler Belastung. -Was in zwischen $(b)$ und $(c)$ zu beobachten ist, ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, -im Gegensatz zu $(b)$. +Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. +Was in zwischen $(b)$ und $(c)$ zu beobachten ist, ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu $(b)$. Daraus kann man schlissen, dass $(a)$ keine Rotationssymmetrie von $90^\circ$ besitzen kann, weil die Eigenschaften ändern bei einer $90^\circ$ Drehung. Das Fehlen dieser Rotationssymmetrie kann mit betrachten von $(a)$ bestätigt werden. diff --git a/buch/papers/punktgruppen/tikz/atoms-grid-force.tex b/buch/papers/punktgruppen/tikz/atoms-grid-force.tex new file mode 100644 index 0000000..05742cf --- /dev/null +++ b/buch/papers/punktgruppen/tikz/atoms-grid-force.tex @@ -0,0 +1,42 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + \begin{tikzpicture}[ + >=latex, + node distance = 2mm, + charge/.style = { + circle, draw = black, thick, + minimum size = 5mm + }, + positive/.style = { fill = red!50 }, + negative/.style = { fill = blue!50 }, + ] + + \matrix[nodes = { charge }, row sep = 5mm, column sep = 1cm] { + \node[positive] (NW) {}; & \node[negative] (N) {}; & \node [positive] (NE) {}; \\ + \node[negative] (W) {}; & \node[positive] {}; & \node [negative] (E) {}; \\ + \node[positive] (SW) {}; & \node[negative] (S) {}; & \node [positive] (SE) {}; \\ + }; + + \foreach \d in {NW, N, NE} { + \draw[orange, very thick, <-] (\d) to ++(0,.7); + } + + \foreach \d in {SW, S, SE} { + \draw[orange, very thick, <-] (\d) to ++(0,-.7); + } + + \draw[gray, dashed] (W) to (N) to (E) to (S) to (W); + \end{tikzpicture} +\end{document} diff --git a/buch/papers/punktgruppen/tikz/atoms-grid-still.tex b/buch/papers/punktgruppen/tikz/atoms-grid-still.tex new file mode 100644 index 0000000..4e43856 --- /dev/null +++ b/buch/papers/punktgruppen/tikz/atoms-grid-still.tex @@ -0,0 +1,33 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + \begin{tikzpicture}[ + >=latex, + node distance = 2mm, + charge/.style = { + circle, draw = black, thick, + minimum size = 5mm + }, + positive/.style = { fill = red!50 }, + negative/.style = { fill = blue!50 }, + ] + + \matrix[nodes = { charge }, row sep = 8mm, column sep = 8mm] { + \node[positive] {}; & \node[negative] (N) {}; & \node [positive] {}; \\ + \node[negative] (W) {}; & \node[positive] {}; & \node [negative] (E) {}; \\ + \node[positive] {}; & \node[negative] (S) {}; & \node [positive] {}; \\ + }; + \draw[gray, dashed] (W) to (N) to (E) to (S) to (W); + \end{tikzpicture} +\end{document} diff --git a/buch/papers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex b/buch/papers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex new file mode 100644 index 0000000..e4c3f93 --- /dev/null +++ b/buch/papers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex @@ -0,0 +1,47 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + \begin{tikzpicture}[ + >=latex, + node distance = 2mm, + charge/.style = { + circle, draw = black, thick, + minimum size = 5mm + }, + positive/.style = { fill = red!50 }, + negative/.style = { fill = blue!50 }, + ] + + \node[charge, positive, yshift= 2.5mm] (C1) at ( 60:1.5cm) {}; + \node[charge, negative, yshift= 2.5mm] (C2) at (120:1.5cm) {}; + \node[charge, positive, xshift= 2.5mm] (C3) at (180:1.5cm) {}; + \node[charge, negative, yshift=-2.5mm] (C4) at (240:1.5cm) {}; + \node[charge, positive, yshift=-2.5mm] (C5) at (300:1.5cm) {}; + \node[charge, negative, xshift=-2.5mm] (C6) at (360:1.5cm) {}; + + \draw[black] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1); + % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2); + + \draw[orange, very thick, <-] (C6) to ++(.7,0); + \draw[orange, very thick, <-] (C3) to ++(-.7,0); + + \node[black] (E) {\(\vec{E}_p\)}; + \begin{scope}[node distance = .5mm] + \node[blue!50, right = of E] {\(-\)}; + \node[red!50, left = of E] {\(+\)}; + \end{scope} + % \draw[gray, thick, dotted] (E) to ++(0,2); + % \draw[gray, thick, dotted] (E) to ++(0,-2); + \end{tikzpicture} +\end{document} diff --git a/buch/papers/punktgruppen/tikz/atoms-piezo-force-vertical.tex b/buch/papers/punktgruppen/tikz/atoms-piezo-force-vertical.tex new file mode 100644 index 0000000..892ab42 --- /dev/null +++ b/buch/papers/punktgruppen/tikz/atoms-piezo-force-vertical.tex @@ -0,0 +1,52 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + \begin{tikzpicture}[ + >=latex, + node distance = 2mm, + charge/.style = { + circle, draw = black, thick, + minimum size = 5mm + }, + positive/.style = { fill = red!50 }, + negative/.style = { fill = blue!50 }, + ] + + \node[charge, positive, yshift=-2.5mm] (C1) at ( 60:1.5cm) {}; + \node[charge, negative, yshift=-2.5mm] (C2) at (120:1.5cm) {}; + \node[charge, positive, xshift=-2.5mm] (C3) at (180:1.5cm) {}; + \node[charge, negative, yshift= 2.5mm] (C4) at (240:1.5cm) {}; + \node[charge, positive, yshift= 2.5mm] (C5) at (300:1.5cm) {}; + \node[charge, negative, xshift= 2.5mm] (C6) at (360:1.5cm) {}; + + \draw[black] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1); + % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2); + + \foreach \d in {C1, C2} { + \draw[orange, very thick, <-] (\d) to ++(0,.7); + } + + \foreach \d in {C4, C5} { + \draw[orange, very thick, <-] (\d) to ++(0,-.7); + } + + \node[black] (E) {\(\vec{E}_p\)}; + \begin{scope}[node distance = .5mm] + \node[red!50, right = of E] {\(+\)}; + \node[blue!50, left = of E] {\(-\)}; + \end{scope} + % \draw[gray, thick, dotted] (E) to ++(0,2); + % \draw[gray, thick, dotted] (E) to ++(0,-2); + \end{tikzpicture} +\end{document} diff --git a/buch/papers/punktgruppen/tikz/atoms-piezo-still.tex b/buch/papers/punktgruppen/tikz/atoms-piezo-still.tex new file mode 100644 index 0000000..2eb78ba --- /dev/null +++ b/buch/papers/punktgruppen/tikz/atoms-piezo-still.tex @@ -0,0 +1,34 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + \begin{tikzpicture}[ + >=latex, + node distance = 2mm, + charge/.style = { + circle, draw = black, thick, + minimum size = 5mm + }, + positive/.style = { fill = red!50 }, + negative/.style = { fill = blue!50 }, + ] + + \foreach \x/\t [count=\i] in {60/positive, 120/negative, 180/positive, 240/negative, 300/positive, 360/negative} { + \node[charge, \t] (C\i) at (\x:1.5cm) {}; + } + + \draw[black] (C1) to (C2) to (C3) to (C4) to (C5) to (C6) to (C1); + \node[circle, draw=gray, fill=gray, outer sep = 0, inner sep = 0, minimum size = 3mm] {}; + % \draw[gray, dashed] (C2) to (C4) to (C6) to (C2); + \end{tikzpicture} +\end{document} diff --git a/buch/papers/punktgruppen/tikz/combine-symmetries.tex b/buch/papers/punktgruppen/tikz/combine-symmetries.tex index f4ac52c..fa669ae 100644 --- a/buch/papers/punktgruppen/tikz/combine-symmetries.tex +++ b/buch/papers/punktgruppen/tikz/combine-symmetries.tex @@ -46,7 +46,7 @@ (A2) ++(-.5,0) arc (180:60:.5); \draw[red!80!black, dashed, thick, ->] (A2) to (B2); - \draw[yellow!50!orange, thick, ->] + \draw[cyan!40!blue, thick, ->] (B1) to node[above, midway] {\(\vec{Q}'\)} (B2); \draw[gray, dashed, thick] (A1) to (A1 |- B1) node (Xl) {}; diff --git a/buch/papers/punktgruppen/tikz/lattice.tex b/buch/papers/punktgruppen/tikz/lattice.tex index 391ef20..a6b1876 100644 --- a/buch/papers/punktgruppen/tikz/lattice.tex +++ b/buch/papers/punktgruppen/tikz/lattice.tex @@ -23,14 +23,14 @@ ] \begin{scope} - \clip (-2,-2) rectangle (3,4); + \clip (-2,-2) rectangle (7,2); \foreach \y in {-7,-6,...,7} { \foreach \x in {-7,-6,...,7} { \node[dot, xshift=3mm*\y] (N\x\y) at (\x, \y) {}; } } \end{scope} - \draw[black, thick] (-2, -2) rectangle (3,4); + \draw[black, thick] (-2, -2) rectangle (7,2); \draw[red!80!black, thick, ->] (N00) to node[midway, below] {\(\vec{a}_1\)} (N10); diff --git a/buch/papers/punktgruppen/tikz/piezo.tex b/buch/papers/punktgruppen/tikz/piezo.tex index 736dbad..56e9463 100644 --- a/buch/papers/punktgruppen/tikz/piezo.tex +++ b/buch/papers/punktgruppen/tikz/piezo.tex @@ -19,7 +19,7 @@ node distance = 0cm ] \node[ - rectangle, fill = gray!60!white, + rectangle, fill = gray!20!white, minimum width = 3cm, minimum height = 2cm, ] (body) {\(\vec{E}_p = \vec{0}\)}; @@ -45,7 +45,7 @@ xshift = 7cm ] \node[ - rectangle, fill = gray!40!white, + rectangle, fill = gray!20!white, minimum width = 3cm, minimum height = 1.5cm, ] (body) {\(\vec{E}_p = \vec{0}\)}; -- cgit v1.2.1 From 97774f0d8edf90f1edff27605207e4af90b338e2 Mon Sep 17 00:00:00 2001 From: Alain Date: Fri, 16 Jul 2021 19:40:11 +0200 Subject: corrections --- buch/papers/ifs/images/FIC.pdf | 2647 ++++++++++++++++++++-------------------- buch/papers/ifs/teil0.tex | 2 +- buch/papers/ifs/teil1.tex | 22 +- buch/papers/ifs/teil2.tex | 33 +- buch/papers/ifs/teil3.tex | 79 +- 5 files changed, 1407 insertions(+), 1376 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/ifs/images/FIC.pdf b/buch/papers/ifs/images/FIC.pdf index 1c76dfe..525a857 100644 --- a/buch/papers/ifs/images/FIC.pdf +++ b/buch/papers/ifs/images/FIC.pdf @@ -1,7 +1,7 @@ %PDF-1.6 % -1 0 obj <>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +1 0 obj <>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - + application/pdf @@ -21,8 +22,8 @@ FIC - 2021-06-20T20:23:48+02:00 - 2021-06-20T20:23:48+02:00 + 2021-07-16T16:31+02:00 + 2021-07-16T16:31+02:00 2021-06-20T20:23:48+02:00 Adobe Illustrator 25.2 (Windows) @@ -31,11 +32,11 @@ 256 128 JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Ah+jaNo8mj2MkljbvI9vE zu0SEklASSSMVRn6C0T/AKt9t/yJj/pil36C0T/q323/ACJj/pirv0Fon/Vvtv8AkTH/AExV36C0 T/q323/ImP8Apirv0Fon/Vvtv+RMf9MVd+gtE/6t9t/yJj/pirv0Fon/AFb7b/kTH/TFXDQ9EH/S vtv+RMf/ADTiqfaJqOkaa6Cfy3omo267GK5020LU70kWNXr8ycUPYvJdj+TfmmErb+U9Ht9QjXlP ZSWFoWA7sjen8a17/eBirKP+VY/lr/1Kejf9w+1/6p4q7/lWP5a/9Sno3/cPtf8Aqnirv+VY/lr/ ANSno3/cPtf+qeKu/wCVY/lr/wBSno3/AHD7X/qniqWWvljy1of5laP+hNJstL+saNq31j6lbxW/ qcLrTeHP0lXlx5GlelcVeV/n5Y2V1+ZSfWreKfho1nw9VFelbq9rTkDStMVeffoLRP8Aq323/ImP +mKVG80TRltJ2WwtgwjYgiGMEEKfbFDrPRNGa0gZrC2LGNSSYYySSo9sVVv0Fon/AFb7b/kTH/TF KEn0bRxqdqgsbcI0cxZfSShIKUqKdq4oRf6C0T/q323/ACJj/pil36C0T/q323/ImP8ApiqD0nRt Ie2dnsbdmFxcqC0SHZbiRVG47AUGKE70xNN09gY9I0yda1ZLmwtLgH2rJGzD6DirM7XWfy21OLTr G/8AKOjadfPqNgpuoLK2WGSM3SCVXqlUBStQSQR1xV7N/wAqx/LX/qU9G/7h9r/1TxV3/Ksfy1/6 lPRv+4fa/wDVPFUh0H8ufy9l8weZYpPLGkvFBd26wRtY2xVFaygchAUooLMTt3xVPv8AlWP5a/8A Up6N/wBw+1/6p4qx78xfy6/L60/L7zPdWvljSbe6t9JvpYJ4rG2SSORLZ2V0ZUBVlIqCMVfPGhf8 cTT/APmGh/5NjFKOxV2KuxV2KuxV2KuxV2KuxVFaVql7pWo2+oWUhiurZw8bjxHUHxBGxHcYq+pP Lmt2+uaHZ6rAKJdRhila8XHwulf8lgRihMcVdirsVY1qH/kytB/7Y2sf9RWl4q8f/PP/AMmUP+2N Zf8AUVe4qwXFKhe/7xXH/GN/+InFXWX+8Vv/AMY0/wCIjFVfFUFcf8daz/4xT/rjxVG4q7FUDo/+ 8kn/ADE3X/UTJiqOxVBar/cwf8xMH/J1cVfQ/wCTPm+XVtIk0m8k53umhfSdj8T252X58D8Pypih 6LirHfLv/KS+av8AmMtv+oCDFWRYqxr8zv8AyWvmz/tjah/1CyYq+V9C/wCOJp//ADDQ/wDJsYpR 2KuxV2KuxV2KuxV2KuxV2KuxV7x+RNzJJ5TuoXJKwXjiOvYNGjUH01P04oej4q7FXYqxrUP/ACZW g/8AbG1j/qK0vFXjH59zTxfmUnpW7T10azrxZFpS6vf5yvXFXn/12+/6t8v/AAcP/NeKVG8vL02k 4NhIAY2qecW3wn/LxQ6zvL0WkAFhIQI1oecW/wAI/wAvFVb67ff9W+X/AIOH/mvFKDnu7z9J2h+o yAiOai84qmpT/K7YoRn12+/6t8v/AAcP/NeKXfXb7/q3y/8ABw/814qg9Ku7xbVwtjIw+sXJqHiG 5uJCRu3bpihGfXb7/q3y/wDBw/8ANeKUHqd3eGKGtjItLiEgl4tyJBts3fFDPvyl17WLLzrbC20m e4a5imheFJbdWZRGZOryKuxjB64q94/xF5l/6lW8/wCkmw/6r4qkOg695hXzD5mZfLN27Pd25dBc WQKEWUAAJM4BqBXbFU+/xF5l/wCpVvP+kmw/6r4qx78xte8wS/l75njl8tXcET6TfLJO1xZMqKbZ wXISdmIUb7CuKvnXQv8Ajiaf/wAw0P8AybGKUdirsVdirsVdirsVdirsVdirsVe9/kZZvD5QmncU +s3cjx+6KiJX/glbFD0TFXYqp3MvpW8kg6opI+YG2KsMs7qSb8xNFSRi7JpGsHkdzRrrTP6Yq8x/ PP8A8mUP+2NZf9RV7irBcUqF7/vFcf8AGN/+InFXWX+8Vv8A8Y0/4iMVV8VQVx/x1rP/AIxT/rjx VG4q7FUDo/8AvJJ/zE3X/UTJiqOxVBar/cwf8xMH/J1cVej/AJLWTXHnmCYdLOCaZvky+j/zNxQ+ hcVY75d/5SXzV/zGW3/UBBirIsVYD+Y1458n+cFLfA+j6lGBXb4bWSn6sVfOGhf8cTT/APmGh/5N jFKOxV2KuxV2KuxV2KuxV2KuxVtEd3VEBZ2ICqNySegGKvqbyhon6E8s6dphFJLeEetQ1HquS8lD /rscUJxirsVQesNx0+TxbiB94xVhum/+TK0n/tjar/1Fabirzj88/wDyZQ/7Y1l/1FXuKsFxSoXv +8Vx/wAY3/4icVdZf7xW/wDxjT/iIxVXxVBXH/HWs/8AjFP+uPFUbirsVQOj/wC8kn/MTdf9RMmK o7FUFqv9zB/zEwf8nVxV7v8AkPoTQ6ff61KlDdMLe2JG/CPdyPZmIH+xxQ9VxVjvl3/lJfNX/MZb f9QEGKsiJAFT0GKvMPzDYnyH5mY9TpV9X6bZ8VeGWU8ps4CSCfTSpKqSfhHUkZi4sEDAEgcnc9pa vLHU5YxkQBkkAL/pFX9eT/J/4Ff6ZZ+Xx/zQ4P5/P/Pl83evJ/k/8Cv9Mfy+P+aF/P5/58vmzr8u vy5u/MxN9eubbR42481RRJMw6iMlSAB3b6PGj+Xx/wA0L+fz/wA+Xzeqj8qvIYiCfotSQKczJLyr 4/bx/L4/5oX8/n/ny+bAJ/yabUra5udHvRFJBdXVultcD4SsM7ov7xRUHiP5fuyOm+kj+kfvZ9oE mYJ5mED/ALEMA13yvr+gzelqtlJb1NElI5Rt3+GRaofvzIcFKsUuxV2KvTfyc8jSX9+nmG+jIsbN 62asP72df2h/kxn/AIb5HFD3LFXYq7FUt140s1HjIP1HFWJ6b/5MrSf+2Nqv/UVpuKvMfz7tvX/M pP3skXHRrP8Au241rdXvXFXn/wCjP+Xu5/5Gf2Yqo3mm0tJz9auDSNjQybfZPtiqZ+UfJmpeYbqz 07T57gzSorOxkokaADk7Gmyr/Z1xV7jpv/OP/lG2tkW6vL+7uKD1JmmCKT34oF2HzJ+eKpB5j/Ij y5J5l0qy0/UL6za6tb2QyNIJgGhaDj8JCmh9Q1+LFWIeZfyY82aGHmL3F9ZJubm1kL0G+7x05rt1 NKDxxVh/6M/5e7n/AJGf2Yqg9K0/laufrM6/6Rcigeg2uJBXp3xVGfoz/l7uf+Rn9mKq9h5SutZ1 Cxsobm5CS3lrHNMW5LEstwkfM7DoW298VfTun/l/aafZQ2Vpq+qRW0ChI41uQAAPknfqcVRH+D/+ 13q3/SV/zbiqQaD5U5+YfMyfpjU19O7txyW5oWrZQNVjx3O9PliqdXPlHhbSt+m9W+FGP+9XgP8A VxV53568t+j5I8wy/pTUJPT0y8f05J+SNxt3NGHHcHvirypLC9tLOy+tQPCJ7eKaEupAeN0DK6k9 QRlWH6I+4Ow7W/xvL/wyf+6LkALqD0JANMOWXDEnuDrMs+GBl3AllHk7yXL5ov8A6vZpNHbR73N4 9PTjHhUDdj2X+GCsnePl+1an3j8fF71p+ma7p9lBZWcthFbW6COKMQTbKo/4zbnxORrL3x+R/Wip 94+X7UR6Xmj/AJabH/kRN/1WxrL3x+R/WtT7x8v2pR5aj8wG1vPQntAv1+8584ZCef1h+ZFJR8PL plGnGSjvH6j0Pf73M1oycUbMfoh0P80eaY3en69eW72122nXFvIKPDLbSOjD3VpSMvrL3x+R/W4d T7x8v2vLNb/KCe90yPV/L/ESyBjNphJC1Vip9B3JPb7Ln6e2TwzMogllCViywB/K/mVLj6u+lXgn /wB9+hJyPyHHfLGbOPJX5Narfzx3fmBGsdPHxfVSaTy+xA/ux41+L274oe4Wttb2ttFbW0axW8Ki OKJRRVVRQAD2xVUxV2KuxVJNfnBkjhB+wCzfM9MVY5pv/kytJ/7Y2q/9RWm4qwD87NPvp/zAnu4I HltrXRtPFzKillj9S6v+PMjoDxO+KvPcUrJbee5glhgjaWZ43CxoCSaKT0GKvov8pfJlv5d8q2kr 0fUr+CKW6l/lBQFYl9lrv4n6MUM3xVjuqf8AKdaB/wAwepf8StcVZFirC/Of5WaD5hWS5gUafqp3 FzEvwOf+LUFAa/zDf59MVeBWnkrzPawTr+jp7iJL7UIRcW8byxs0F9NC9GUfzoetDiqfeXvyv836 zOq/Unsbao9S5u1MQA/yVYB3+gfTir1W58n6V5Y8vaZZ2K85X1fTGubpwPUlYXke5p0A/ZXt86nF WfYq7FWO+Xf+Ul81f8xlt/1AQYqmmsziKyZa/FKeI+XU4q88/ML/AJQHzL/2yr7/AKhnxVlPlHS9 N1L8vPLlvqFrFdw/ouyPpzIrgH6um4qNj75Xh+iPuDsO1v8AG8v/AAyf+6KU+Y/yx8jWmhapfW+m CO6t7WeaFxNPRXSJmU8TJx2I8MjqP7uX9U/c6jU/3Uv6p+5m9lY2VjbJbWUEdtbp9iGJQiiu52FM ub1fFXYqkvlP/eO+/wC2lf8A/US+Y+n5H+tL73O1/wBUf+Fw/wByE6zIcFK/LH/HDtv9n/ycbKNP 9Aa8X0ppl7Y7FXYq7FXYqpzzpBC0rn4VFfn7YqxWeZ5pnlf7TmpxVL9N/wDJlaT/ANsbVf8AqK03 FVW78w6fpH5k6wLyG8lFxo2k8BZ2N5fU4XWpV5/VIZ+H2tudK706HFUu1GL8qdQlMtz5e1MSHqYd D1yCvuRDbIMVbfVfIGj6FqUekaNqdrJLazIZToesciGjOzTSWtePzamKproPn/Qo9D06NrXWCyWs KkromrstRGBsy2hBHuDiqP8A+Vh6B/yy6z/3AtZ/7JMVSHUvPeiN5y0ScW2rcIrTUFYHRtWDku1t TihtebD4dyoNO/UYqn3/ACsPQP8All1n/uBaz/2SYq7/AJWHoH/LLrP/AHAtZ/7JMVY95F89aJb6 JcxyW2rMzatrMgMejatKvGXVrqRQWjtWAYBviXqpqrAMCMVZD/ysPQP+WXWf+4FrP/ZJiqQ+cPPe iT2WnqltqwKapp8h56Nq0Yol1GxAL2qgtQbKNz0G+Kp9/wArD0D/AJZdZ/7gWs/9kmKu/wCVh6B/ yy6z/wBwLWf+yTFUt8ueZdOOteYrv0b5Yrm6gkiDaffLIFWzijPONoRJH8SGgdRUbjYg5Uc0Qa3+ RP6GqWaINb/In7gu1PzTZXVxVY7v0k2j/wBDu/pP913wePH+l/pZfqY/mI90v9LL9TGvOuow3nk3 XrO3huWnudOu4YVa1uEUu8DqoLvGqqKnqxoMTqIgWb/0sv1KdTACzxf6WX6meeQP+UE8t/8AbLsv +odMlh+iPuDt+1v8by/8Mn/uiiPN3/KKa1/zAXP/ACZbI6j+7l/VP3Oo1P8AdS/qn7k2y5vdirsV SXyn/vHff9tK/wD+ol8x9PyP9aX3udr/AKo/8Lh/uQnWZDgpX5Y/44dt/s/+TjZRp/oDXi+lNMvb HYq7FXYqpzzxQRmSVuKj8T4DFWO6hqD3b/yxL9hP4n3xVCYqgtN/8mVpP/bG1X/qK03FU50//wAm Vr3/AGxtH/6itUxVkuKpf5i/5R/U/wDmEn/5NtirvLv/ACj+mf8AMJB/ybXFUwxVjuqf8p1oH/MH qX/ErXFWRYq7FWNfl5/xwLr/ALbOu/8AdZu8VZLirHfO/wDvBpv/AG19M/6jI8VZFirTOqKWYhVG 5J2AxVhMWoGTXdfWE0ilmtyT0JC2yD7sqx/VL3/oDXDmfx0VstbEv8w/8cDU/wDmEn/5NtlOo/u5 f1T9zRqf7qX9U/cyPyB/ygnlv/tl2X/UOmSw/RH3B2/a3+N5f+GT/wB0UR5u/wCUU1r/AJgLn/ky 2R1H93L+qfudRqf7qX9U/cm2XN7sVdiqS+U/9477/tpX/wD1EvmPp+R/rS+9ztf9Uf8AhcP9yE6z IcFK/LH/ABw7b/Z/8nGyjT/QGvF9KaZe2OxV2KuxVjGo3bXNyzV/dqSIx2p4/TiqFxV2KoLTf/Jl aT/2xtV/6itNxVOdP/8AJla9/wBsbR/+orVMVZLiqX+Yv+Uf1P8A5hJ/+TbYq7y7/wAo/pn/ADCQ f8m1xVMMVY7qn/KdaB/zB6l/xK1xVkWKuxVjX5ef8cC6/wC2zrv/AHWbvFWS4qx3zv8A7wab/wBt fTP+oyPFWRYqkmu3TGVbdT8CgM48SemKsV0z/jsax/xkh/5MLlWP6pe/9Aa4cz+OiaZa2Jf5h/44 Gp/8wk//ACbbKdR/dy/qn7mjU/3Uv6p+5Efl/oZvPIXlu7OpX0JuNKspTFFOVjTnbo3FAQSFFaDf IDTf0pfN2+TtGU5GUoQMibJ4eqM8z+XfS8tatL+k7+T07O4b03n5I3GJjRhx3B75XmwVCR4pcj1c TWay8MxwQ+k9PJM/8M/9rbUf+kj/AJtyz8v/AEpfNyfzv9DH/pXf4Z/7W2o/9JH/ADbj+X/pS+a/ nf6GP/Su/wAM/wDa21H/AKSP+bcfy/8ASl81/O/0Mf8ApUdpOlW+mWhtoHkkVpJJnkmbm7PK5dyW 92bLceMQFBx9RnOWXEa5AbeWyMyxpSvyx/xw7b/Z/wDJxso0/wBAa8X0ppl7Y7FXYq5q0NOvbFWH Yq7FXYqgtN/8mVpP/bG1X/qK03FURPa67P8AmVrH6K1CGx46NpPretbG551utS40pLDxpv41xVNP 0X56/wCr/Z/9w1v+yrFUDr2medxoWol9es2QWsxZRpzAkem1RX60aYq7QdM87nQtOKa9ZqhtYSqn TmJA9NaCv1oVxVHfovz1/wBX+z/7hrf9lWKpDqWm+cx5z0NW1y0MxtNQMcg09gFAa25Ar9Z3rt32 xVPv0X56/wCr/Z/9w1v+yrFXfovz1/1f7P8A7hrf9lWKse8iab5ybRLkwa3aRJ+ltZBVtPZyXGrX Qdq/WV2Z6sB2rTfrirIf0X56/wCr/Z/9w1v+yrFUh846b5zWy08y65aSA6ppwULp7LRzdxhW/wB6 WqAd6d8VT79F+ev+r/Z/9w1v+yrFWP6tpnnQX8nPXLQk8dxp7D9kf8vOKpLo0OvSaprMTajEJ7ee JJpVtvhkJt43UhDIeNA/HqfHKTjlZIPPyazE2SDzTf6j5g/6ukf/AEij/qph4Z94+X7VqXf9n7Uq 82DW7HytrN7LfxzxWtjczPAIAhdY4WYpz5tx5UpWhpkZ45yBBI38v2sZ45SiYk8/Jmv5Y/8AktfK f/bG0/8A6hY8vbk28w2k97oGpWduA09zazwxKSAC8kbKoqem5yvNEygQOZBas0TKEgOZBUv0rq3/ AFZZ/wDkbbf9VMh4k/5p+Y/Wnjl/NP2frd+ldW/6ss//ACNtv+qmPiT/AJp+Y/WvHL+afs/W79K6 t/1ZZ/8Akbbf9VMfEn/NPzH6145fzT9n63fpXVv+rLP/AMjbb/qpj4k/5p+Y/WvHL+afs/W79K6t /wBWWf8A5G23/VTHxJ/zT8x+teOX80/Z+tV0C2uLbSLeG4T05lDF0qGoWYtSoqO+SwRIgAeacYIj uj8tZuxV2KuxVi+o2xt7t1p8LHknyOKobFXYqgtN/wDJlaT/ANsbVf8AqK03FU50/wD8mVr3/bG0 f/qK1TFWS4ql/mL/AJR/U/8AmEn/AOTbYq7y7/yj+mf8wkH/ACbXFUwxVjuqf8p1oH/MHqX/ABK1 xVkWKuxVjX5ef8cC6/7bOu/91m7xVkuKsd87/wC8Gm/9tfTP+oyPFWRYqk+v2x+C5UbD4H/gcVYT oX/Hf8yf8xVv/wBQUOKp7iqQfmD/AMoD5l/7ZV9/1DPirK/yx/8AJa+U/wDtjaf/ANQseKslxV2K uxV2KuxV2KuxV2KuxV2KuxVL9atvVtfUA+OLf/Ynr/XFWPYq7FUFpv8A5MrSf+2Nqv8A1FabiqYR 6jp9n+ZWt/XLqK29TRtI4etIqcqXWp1pyIrSuKp9/iLy/wD9XO0/5Hx/81Yql/mDzBoLaDqSrqVq WNrOABPGSSY2/wArFXeX/MGgroOmq2pWoYWsAIM8YIIjX/KxVMP8ReX/APq52n/I+P8A5qxVj+p6 9oR876C41G1KLZ6iGYTR0BLWtKnl3pirIP8AEXl//q52n/I+P/mrFXf4i8v/APVztP8AkfH/AM1Y qxvyBr2hx6FdLJqNqjHWNbYBpoweLavdsp3PQggjFWSf4i8v/wDVztP+R8f/ADViqQec9c0SWx08 RahbOV1TTnYLNGaIl3GzMaHooFScBIHNMYkmgnv+JvLf/V2s/wDpIi/5qyPix7w2eBk/mn5LJ/MP liaF4m1Wz4uKH/SIv+asfFj3hfAyfzT8nnukappUOv8AmIyXtuqPdQmNzKnFwtpEpKmvxDkpG2SE geTCUDHYik4/Tuif9XC2/wCR0f8AXCxSLz7rOjyeRfMccd9bvI+l3qoiyoSSbdwAAD1xVm/5Y/8A ktfKf/bG0/8A6hY8VZLirsVdirsVdirsVdirsVdirsVdiqjeTRQ27tKfhIIp4kjpirFMVdiqC03/ AMmVpP8A2xtV/wCorTcVTCPTtPvPzK1v65axXPp6NpHD1o1fjW61OtOQNK0xVPv8O+X/APq2Wn/I iP8A5pxVL/MHl/QV0HUmXTbUMLWcgiCMEERt/k4q7y/5f0FtB01m021LG1gJJgjJJMa/5OKph/h3 y/8A9Wy0/wCREf8AzTirH9T0HQh530FBp1qEaz1EsohjoSGtaVHHtXFWQf4d8v8A/VstP+REf/NO Ku/w75f/AOrZaf8AIiP/AJpxVjfkDQdDk0K6aTTrV2Gsa2oLQxk8V1e7VRuOgAAGKsk/w75f/wCr Zaf8iI/+acVY/wCc9C0SO10v09Ptk56rYI/GGMVVrhQVNBuD3GUagbD+sPvc3QkiUiP5k/8AclPv 8M+W/wDq02f/AEjxf805Z4Ue4OP4+T+cfm0/lvyyilm0uyVRuSbeID/iOPhR7gvj5P5x+bArbTNE n8y+YOFhb+gk8AhT0U4qPq0deIptU75XiAEpAd4+4ORqpGWPGSb9J/3Ukx/QWif9W+2/5Ex/0y9w ki8+6No8fkXzHJHY26SJpd6yOsSAgi3cgggdcVZv+WP/AJLXyn/2xtP/AOoWPFWS4q7FXYq7FXYq 7FXYq7FXYq7FXE0BPhirFLq6luZTJIf9VewHgMVUcVdiqC03/wAmVpP/AGxtV/6itNxVOdP/APJl a9/2xtH/AOorVMVZLiqX+Yv+Uf1P/mEn/wCTbYq7y7/yj+mf8wkH/JtcVTDFWO6p/wAp1oH/ADB6 l/xK1xVkWKuxVjX5ef8AHAuv+2zrv/dZu8VZLirHfO/+8uk/9tfT/wDqIXKM/If1h97maL6pf1J/ 7ksiy9w0g1u5le6aCtI46UXxJFan78VYno//AB3tf/4zW/8A1DR5Tj+uXvH3By9R/d4/6p/3Uk6y 5xEg/MH/AJQHzL/2yr7/AKhnxVOvKsXnzQ/K+j6K+iWU76XY21k0y6iyhzbxLEWCm1NOXGtMVTT9 Keev+rBZ/wDcSb/slxV36U89f9WCz/7iTf8AZLirv0p56/6sFn/3Em/7JcVd+lPPX/Vgs/8AuJN/ 2S4q79Keev8AqwWf/cSb/slxV36U89f9WCz/AO4k3/ZLirv0p56/6sFn/wBxJv8AslxV36U89f8A Vgs/+4k3/ZLirv0p56/6sFn/ANxJv+yXFXfpTz1/1YLP/uJN/wBkuKu/Snnn/qX7P/uJN/2S4qkr 2nnzm3DRLPjX4R+kW6f9I2Krfqnn/wD6sll/3EW/7JsVd9U8/wD/AFZLL/uIt/2TYqr+X9D80nzh a6vqllbWdpaafeWgENybh3kup7SRdjFFQKtq3fviqOvbPzPZ+cL7WNMsLa+tb7T7G0IlumtnSS0n vJG2EMwYMt2tN+xxVX/Snnr/AKsFn/3Em/7JcVQ+pXPnu8066tBoVkhuYZIg51FjTmpWtPqvauKu 025892enWtodCsnNtDHEXGosK8FC1p9V70xVEfpTz1/1YLP/ALiTf9kuKpbdp58n1/TtUGiWSrYw 3UJi/SLEt9ZMRBr9V24+j+OKpl+lPPX/AFYLP/uJN/2S4q79Keev+rBZ/wDcSb/slxVK/LkXnzR9 PltG0WymMt7f3vMagy0F9ezXYSn1Y/YE/GvelcVTT9Keev8AqwWf/cSb/slxVLtcTzzqcNon6EtI vqt5bXm2oFi31eUPw3t0pyp1yrNEkbdCC5WkyRjI8WwMZDv5ikx/S/nf/qXbf/uIj/qhkePJ/NHz /Yy8LB/Pl/pP+PJdff41upvVGg28ZIAYfXwa07/3Ix48n80fP9i+Fg/ny/0n/Hkps9C8929/qF2N KtG+vSRv6bXxXj6cSx9RA9a8a4cUZWSdr/UjUzgRCMCTwjqK6k95Rv1Lz7/1ZrL/ALiDf9k2XOIl 3mPy75/1fy9qmkppVjC+oWk9qspv3YIZ4mjDEfVhWnKuKv8A/9k= + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Ah+jaNo8mj2MkljbvI9vE zu0SEklASSSMVRn6C0T/AKt9t/yJj/pil36C0T/q323/ACJj/pirv0Fon/Vvtv8AkTH/AExV36C0 T/q323/ImP8Apirv0Fon/Vvtv+RMf9MVd+gtE/6t9t/yJj/pirv0Fon/AFb7b/kTH/TFXDQ9EH/S vtv+RMf/ADTiqfaJqOkaa6Cfy3omo267GK5020LU70kWNXr8ycUPYvJdj+TfmmErb+U9Ht9QjXlP ZSWFoWA7sjen8a17/eBirKP+VY/lr/1Kejf9w+1/6p4q7/lWP5a/9Sno3/cPtf8Aqnirv+VY/lr/ ANSno3/cPtf+qeKu/wCVY/lr/wBSno3/AHD7X/qniqWWvljy1of5laP+hNJstL+saNq31j6lbxW/ qcLrTeHP0lXlx5GlelcVeV/n5Y2V1+ZSfWreKfho1nw9VFelbq9rTkDStMVYS3kyFdPXUW0JRp7G i3htR6JNStBJw4/aFOuKpdeaJoy2k7LYWwYRsQRDGCCFPtiqvo/laz1BLeC00iO7unjVhFFbrJI1 FqTxVSTiq+48taZbTPBcaVBDPGeMkUluiupHYqVBGKUBPo2jjU7VBY24Ro5iy+klCQUpUU7VxQm1 j5Mhv0lex0JbtIADO0FqJAgNaFyqHjXieuKoT9BaJ/1b7b/kTH/TFKD0nRtIe2dnsbdmFxcqC0SH ZbiRVG47AUGKE70xNN09gY9I0yda1ZLmwtLgH2rJGzD6DirM7XWfy21OLTrG/wDKOjadfPqNgpuo LK2WGSM3SCVXqlUBStQSQR1xV7N/yrH8tf8AqU9G/wC4fa/9U8Vd/wAqx/LX/qU9G/7h9r/1TxVI dB/Ln8vZfMHmWKTyxpLxQXdusEbWNsVRWsoHIQFKKCzE7d8VT7/lWP5a/wDUp6N/3D7X/qnirHvz F/Lr8vrT8vvM91a+WNJt7q30m+lgnisbZJI5EtnZXRlQFWUioIxV88aF/wAcTT/+YaH/AJNjFKOx V2KuxV2KuxV2KuxV2KuxVFaVql7pWo2+oWUhiurZw8bjxHUHxBGxHcYq+pPLmt2+uaHZ6rAKJdRh ila8XHwulf8AJYEYoTHFXYq7FWNah/5MrQf+2NrH/UVpeKvH/wA8/wDyZQ/7Y1l/1FXuKoi9ubGb QzpWkukuriy07TWAmR0mjmJuplhUUAaOagdixoK/ZxV59rdjc2KXVrcoEmSIkgMrghk5KVZCysGU ggg0IxVPPIF1pVnp2oXWosWiOnparbxyLHM/1iSNHMZYP9mPkT8J+jFVXznDdXGr3+qq0U2nfWjY 211DIjK628arHQBmY/ulUluhPfFWIXH/AB1rP/jFP+uPFL0jyZqGj2Oj2q3MyLfSX097bEzKiRSW VrW3Nwv2ikkkjKByWvv0xQw7ULG8tmhlugn+mR/WInjeORWVmZa1jLAHkpBU7jwxSlOhRSy27pEj O/1i7PFQSaLcSEmg8AK4qmM1rcwf38LxVJUc1K/EtOQ37ioriqW6r/cwf8xMH/J1cVfQ/wCTPm+X VtIk0m8k53umhfSdj8T252X58D8Pypih6LirHfLv/KS+av8AmMtv+oCDFWRYqxr8zv8AyWvmz/tj ah/1CyYq+V9C/wCOJp//ADDQ/wDJsYpR2KuxV2KuxV2KuxV2KuxV2KuxV7x+RNzJJ5TuoXJKwXji OvYNGjUH01P04oej4q7FXYqxrUP/ACZWg/8AbG1j/qK0vFXjH59zTxfmUnpW7T10azrxZFpS6vf5 yvXFWFaVr+qabfR3kOmNI8YdfTkeMoyyIUYHjIrbqx6EHFUPrmt6pqDXl3cWDrJMrEhWiCqAtFVR zPwqooPbFUNZ3l6LSACwkIEa0POLf4R/l4qj5Nc1R9Ng086c/oW801wjB4uRedYkav7ylAIFpt44 qlU93efpO0P1GQERzUXnFU1Kf5XbFUZ9dvv+rfL/AMHD/wA14pR+s+ZNR1O4ilOji0SGJIIre3dR GqJWlBJNIRUkk77nfqTihKNC1TVbWJ5bW2njkE92BLFLGjASTSK61Dg9GKnx+WKphd6/r97T65Dd XPFmcetOklGkpzb4pDu3EVPfFUr1O7vDFDWxkWlxCQS8W5Eg22bvirPvyl17WLLzrbC20me4a5im heFJbdWZRGZOryKuxjB64q94/wAReZf+pVvP+kmw/wCq+KpDoOveYV8w+ZmXyzduz3duXQXFkChF lAACTOAagV2xVPv8ReZf+pVvP+kmw/6r4qx78xte8wS/l75njl8tXcET6TfLJO1xZMqKbZwXISdm IUb7CuKvnXQv+OJp/wDzDQ/8mxilHYq7FXYq7FXYq7FXYq7FXYq7FXvf5GWbw+UJp3FPrN3I8fui oiV/4JWxQ9ExV2KqdzL6VvJIOqKSPmBtirDLO6km/MTRUkYuyaRrB5Hc0a60z+mKvMfzz/8AJlD/ ALY1l/1FXuKsFxSoXv8AvFcf8Y3/AOInFXWX+8Vv/wAY0/4iMVV8VQVx/wAdaz/4xT/rjxVG4q7F UDo/+8kn/MTdf9RMmKo7FUFqv9zB/wAxMH/J1cVej/ktZNceeYJh0s4Jpm+TL6P/ADNxQ+hcVY75 d/5SXzV/zGW3/UBBirIsVYD+Y1458n+cFLfA+j6lGBXb4bWSn6sVfOGhf8cTT/8AmGh/5NjFKOxV 2KuxV2KuxV2KuxV2KuxVtEd3VEBZ2ICqNySegGKvqbyhon6E8s6dphFJLeEetQ1HquS8lD/rscUJ xirsVQesNx0+TxbiB94xVhum/wDkytJ/7Y2q/wDUVpuKvOPzz/8AJlD/ALY1l/1FXuKsFxSoXv8A vFcf8Y3/AOInFXWX+8Vv/wAY0/4iMVV8VQVx/wAdaz/4xT/rjxVG4q7FUDo/+8kn/MTdf9RMmKo7 FUFqv9zB/wAxMH/J1cVe7/kPoTQ6ff61KlDdMLe2JG/CPdyPZmIH+xxQ9VxVjvl3/lJfNX/MZbf9 QEGKsiJAFT0GKvMPzDYnyH5mY9TpV9X6bZ8VeGWU8ps4CSCfTSpKqSfhHUkZi4sEDAEgcnc9pavL HU5YxkQBkkAL/pFX9eT/ACf+BX+mWfl8f80OD+fz/wA+Xzd68n+T/wACv9Mfy+P+aF/P5/58vmzr 8uvy5u/MxN9eubbR42481RRJMw6iMlSAB3b6PGj+Xx/zQv5/P/Pl83qo/KryGIgn6LUkCnMyS8q+ P28fy+P+aF/P5/58vmwCf8mm1K2ubnR70RSQXV1bpbXA+ErDO6L+8UVB4j+X7sjpvpI/pH72faBJ mCeZhA/7EMA13yvr+gzelqtlJb1NElI5Rt3+GRaofvzIcFKsUuxV2KvTfyc8jSX9+nmG+jIsbN62 asP72df2h/kxn/hvkcUPcsVdirsVS3XjSzUeMg/UcVYnpv8A5MrSf+2Nqv8A1FabirzH8+7b1/zK T97JFx0az/u241rdXvXFXn/6M/5e7n/kZ/ZiqjeabS0nP1q4NI2NDJt9k+2Kpn5R8mal5hurPTtP nuDNKis7GSiRoAOTsabKv9nXFXuOm/8AOP8A5RtrZFury/u7ig9SZpgik9+KBdh8yfniqQeY/wAi PLknmXSrLT9QvrNrq1vZDI0gmAaFoOPwkKaH1DX4sVYh5l/JjzZoYeYvcX1km5ubWQvQb7vHTmu3 U0oPHFWH/oz/AJe7n/kZ/ZiqD0rT+Vq5+szr/pFyKB6Da4kFenfFUZ+jP+Xu5/5Gf2Yqr2HlK61n ULGyhubkJLeWsc0xbksSy3CR8zsOhbb3xV9O6f8Al/aafZQ2Vpq+qRW0ChI41uQAAPknfqcVRH+D /wDtd6t/0lf824qkGg+VOfmHzMn6Y1NfTu7ccluaFq2UDVY8dzvT5YqnVz5R4W0rfpvVvhRj/vV4 D/VxV53568t+j5I8wy/pTUJPT0y8f05J+SNxt3NGHHcHvirypLC9tLOy+tQPCJ7eKaEupAeN0DK6 k9QRlWH6I+4Ow7W/xvL/AMMn/ui5AC6g9CQDTDllwxJ7g6zLPhgZdwJZR5O8ly+aL/6vZpNHbR73 N49PTjHhUDdj2X+GCsnePl+1an3j8fF71p+ma7p9lBZWcthFbW6COKMQTbKo/wCM258Tkay98fkf 1oqfePl+1Eel5o/5abH/AJETf9Vsay98fkf1rU+8fL9qUeWo/MBtbz0J7QL9fvOfOGQnn9YfmRSU fDy6ZRpxko7x+o9D3+9zNaMnFGzH6IdD/NHmmN3p+vXlu9tdtp1xbyCjwy20jow91aUjL6y98fkf 1uHU+8fL9ryzW/ygnvdMj1fy/wARLIGM2mEkLVWKn0Hck9vsufp7ZPDMyiCWUJWLLAH8r+ZUuPq7 6VeCf/ffoScj8hx3yxmzjyV+TWq388d35gRrHTx8X1Umk8vsQP7seNfi9u+KHuFrbW9rbRW1tGsV vCojiiUUVVUUAA9sVVMVdirsVSTX5wZI4QfsAs3zPTFWOab/AOTK0n/tjar/ANRWm4qwD87NPvp/ zAnu4IHltrXRtPFzKillj9S6v+PMjoDxO+KvPcUrJbee5glhgjaWZ43CxoCSaKT0GKvov8pfJlv5 d8q2kr0fUr+CKW6l/lBQFYl9lrv4n6MUM3xVjuqf8p1oH/MHqX/ErXFWRYqwvzn+Vmg+YVkuYFGn 6qdxcxL8Dn/i1BQGv8w3+fTFXgVp5K8z2sE6/o6e4iS+1CEXFvG8sbNBfTQvRlH86HrQ4qn3l78r /N+szqv1J7G2qPUubtTEAP8AJVgHf6B9OKvVbnyfpXljy9plnYrzlfV9Ma5unA9SVheR7mnQD9le 3zqcVZ9irsVY75d/5SXzV/zGW3/UBBiqaazOIrJlr8Up4j5dTirzz8wv+UB8y/8AbKvv+oZ8VZT5 R0vTdS/Lzy5b6haxXcP6Lsj6cyK4B+rpuKjY++V4foj7g7Dtb/G8v/DJ/wC6KU+Y/wAsfI1poWqX 1vpgjure1nmhcTT0V0iZlPEycdiPDI6j+7l/VP3Oo1P91L+qfuZvZWNlY2yW1lBHbW6fYhiUIoru dhTLm9XxV2KpL5T/AN477/tpX/8A1EvmPp+R/rS+9ztf9Uf+Fw/3ITrMhwUr8sf8cO2/2f8AycbK NP8AQGvF9KaZe2OxV2KuxV2Kqc86QQtK5+FRX5+2KsVnmeaZ5X+05qcVS/Tf/JlaT/2xtV/6itNx VVu/MOn6R+ZOsC8hvJRcaNpPAWdjeX1OF1qVef1SGfh9rbnSu9OhxVLtRi/KnUJTLc+XtTEh6mHQ 9cgr7kQ2yDFW31XyBo+halHpGjanayS2syGU6HrHIhozs00lrXj82piqa6D5/wBCj0PTo2tdYLJa wqSuiauy1EYGzLaEEe4OKo//AJWHoH/LLrP/AHAtZ/7JMVSHUvPeiN5y0ScW2rcIrTUFYHRtWDku 1tTihtebD4dyoNO/UYqn3/Kw9A/5ZdZ/7gWs/wDZJirv+Vh6B/yy6z/3AtZ/7JMVY95F89aJb6Jc xyW2rMzatrMgMejatKvGXVrqRQWjtWAYBviXqpqrAMCMVZD/AMrD0D/ll1n/ALgWs/8AZJiqQ+cP PeiT2WnqltqwKapp8h56Nq0Yol1GxAL2qgtQbKNz0G+Kp9/ysPQP+WXWf+4FrP8A2SYq7/lYegf8 sus/9wLWf+yTFUt8ueZdOOteYrv0b5Yrm6gkiDaffLIFWzijPONoRJH8SGgdRUbjYg5Uc0Qa3+RP 6GqWaINb/In7gu1PzTZXVxVY7v0k2j/0O7+k/wB13wePH+l/pZfqY/mI90v9LL9TGvOuow3nk3Xr O3huWnudOu4YVa1uEUu8DqoLvGqqKnqxoMTqIgWb/wBLL9SnUwAs8X+ll+pkXlfzOmneVPLFhHp9 3qE50SzuphaCE+lCIY05OJZYmNTWgQMTQ7ZXDMIxAok8N7PSa7RHJqM0zKMB40ojivc2T0B+2gne vX9pqHkXUr+zkEtpd6ZPNBIKjkkkDMpod+hyeaQliJH80/c8/r8UscckJCpREgfgnuXs3Yq7FUl8 p/7x33/bSv8A/qJfMfT8j/Wl97na/wCqP/C4f7kJ1mQ4KV+WP+OHbf7P/k42Uaf6A14vpTTL2x2K uxV2Kqc88UEZklbio/E+AxVjuoag92/8sS/YT+J98VQmKoLTf/JlaT/2xtV/6itNxVOdP/8AJla9 /wBsbR/+orVMVZLiqX+Yv+Uf1P8A5hJ/+TbYq7y7/wAo/pn/ADCQf8m1xVMMVY7qn/KdaB/zB6l/ xK1xVkWKuxVjX5ef8cC6/wC2zrv/AHWbvFWS4qx3zv8A7wab/wBtfTP+oyPFWRYq0zqilmIVRuSd gMVYTFqBk13X1hNIpZrck9CQtsg+7Ksf1S9/6A1w5n8dFbLWxL/MP/HA1P8A5hJ/+TbZTqP7uX9U /c0an+6l/VP3Ifyho3mz9EaZqGmmySG+8v6VZQ3k0spmtlhgZ2dbdYuEhLT1FZV6DMeGOdWK3iB7 nre0NTp/EnCfHcc+WRAAqVyH8XFY+n+aeadSra2vkbXtFtI2S10Kyl06GVmDGUR2CPz295OJ9wcn KhilEfwgj7Hn+1zKcZZZH1ZYymfKzIV9l/Fl+ZbS7FXYqkflZ0Sx1B3YKi6jflmJoABcuSSTmPpz tL+tL73O1/1R/wCFw/3ITOx1TTdQRnsLuG7RDR2gkSQAnsShOWxyRlyILroZIy+kgoTyx/xw7b/Z /wDJxsr0/wBARi+lNMvbHYq7FXYqxjUbtrm5Zq/u1JEY7U8fpxVC4q7FUFpv/kytJ/7Y2q/9RWm4 qnOn/wDkyte/7Y2j/wDUVqmKslxVL/MX/KP6n/zCT/8AJtsVd5d/5R/TP+YSD/k2uKphirHdU/5T rQP+YPUv+JWuKsixV2Ksa/Lz/jgXX/bZ13/us3eKslxVjvnf/eDTf+2vpn/UZHirIsVSTXbpjKtu p+BQGceJPTFWK6Z/x2NY/wCMkP8AyYXKsf1S9/6A1w5n8dE0y1sS/wAw/wDHA1P/AJhJ/wDk22U6 j+7l/VP3NGp/upf1T9yI/L/QzeeQvLd2dSvoTcaVZSmKKcrGnO3RuKAgkKK0G+QGm/pS+bt8naMp yMpQgZE2Tw9UT5i8rQ2nlvWZYr+9/wB5bmaRDMOMj+kxPMBRy5U3yrLphGEiDLkerja3XGeGQMYf QRy5bdE2/wAM/wDa21H/AKSP+bct/L/0pfNv/O/0Mf8ApXf4Z/7W2o/9JH/NuP5f+lL5r+d/oY/9 K7/DP/a21H/pI/5tx/L/ANKXzX87/Qx/6VDaxpX6M8n6lZWAuLiS4WarfFPMz3bkSPRRyanqFthg yY+DERGzf6XC1+eWWJJG/DWw8q5LbF4ZPMkN8kMlpaG2OnW3rxvC88pPr7RuA4EccLULgdTTBAjx LqhVe/r+hxYkGYlyFV7+v2UmPlj/AI4dt/s/+TjZZp/oDbi+lNMvbHYq7FXNWhp17Yqw7FXYq7FU Fpv/AJMrSf8Atjar/wBRWm4qiJ7XXZ/zK1j9FahDY8dG0n1vWtjc863WpcaUlh4038a4qmn6L89f 9X+z/wC4a3/ZViqB17TPO40LUS+vWbILWYso05gSPTaor9aNMVdoOmedzoWnFNes1Q2sJVTpzEge mtBX60K4qjv0X56/6v8AZ/8AcNb/ALKsVSHUtN85jznoatrloZjaagY5Bp7AKA1tyBX6zvXbvtiq ffovz1/1f7P/ALhrf9lWKu/Rfnr/AKv9n/3DW/7KsVY95E03zk2iXJg1u0iT9LayCraezkuNWug7 V+srsz1YDtWm/XFWQ/ovz1/1f7P/ALhrf9lWKpD5x03zmtlp5l1y0kB1TTgoXT2Wjm7jCt/vS1QD vTviqffovz1/1f7P/uGt/wBlWKsf1bTPOgv5OeuWhJ47jT2H7I/5ecVSXRodek1TWYm1GIT288ST SrbfDITbxupCGQ8aB+PU+OUnHKyQefk1mJskHmm/1HzB/wBXSP8A6RR/1Uw8M+8fL9q1Lv8As/al Xmwa3Y+VtZvZb+OeK1sbmZ4BAELrHCzFOfNuPKlK0NMjPHOQIJG/l+1jPHKUTEnn5M1/LH/yWvlP /tjaf/1Cx5e3Jt5htJ73QNSs7cBp7m1nhiUkAF5I2VRU9NzleaJlAgcyC1ZomUJAcyCpfpXVv+rL P/yNtv8AqpkPEn/NPzH608cv5p+z9bv0rq3/AFZZ/wDkbbf9VMfEn/NPzH6145fzT9n63fpXVv8A qyz/API22/6qY+JP+afmP1rxy/mn7P1u/Surf9WWf/kbbf8AVTHxJ/zT8x+teOX80/Z+tBXc+t3G o2M50aUQWZkloZrfkZGQxLQepTZXbeuQlKZkDwmh5j9bCRkSDw8vcmWgW1xbaRbw3CenMoYulQ1C zFqVFR3y3BEiAB5tmMER3R+Ws3Yq7FXYqxfUbY29260+FjyT5HFUNirsVQWm/wDkytJ/7Y2q/wDU VpuKpzp//kyte/7Y2j/9RWqYqyXFUv8AMX/KP6n/AMwk/wDybbFXeXf+Uf0z/mEg/wCTa4qmGKsd 1T/lOtA/5g9S/wCJWuKsixV2Ksa/Lz/jgXX/AG2dd/7rN3irJcVY753/AN4NN/7a+mf9RkeKsixV J9ftj8Fyo2HwP/A4qwnQv+O/5k/5irf/AKgocVT3FUg/MH/lAfMv/bKvv+oZ8VZX+WP/AJLXyn/2 xtP/AOoWPFWS4q7FXYq7FXYq7FXYq7FXYq7FXYql+tW3q2vqAfHFv/sT1/rirHsVdiqC03/yZWk/ 9sbVf+orTcVTCPUdPs/zK1v65dRW3qaNpHD1pFTlS61OtORFaVxVPv8AEXl//q52n/I+P/mrFUv8 weYNBbQdSVdStSxtZwAJ4ySTG3+VirvL/mDQV0HTVbUrUMLWAEGeMEERr/lYqmH+IvL/AP1c7T/k fH/zVirH9T17Qj530FxqNqUWz1EMwmjoCWtaVPLvTFWQf4i8v/8AVztP+R8f/NWKu/xF5f8A+rna f8j4/wDmrFWN+QNe0OPQrpZNRtUY6xrbANNGDxbV7tlO56EEEYqyT/EXl/8A6udp/wAj4/8AmrFU g8565oktjp4i1C2crqmnOwWaM0RLuNmY0PRQKk4CQOaYxJNBPf8AE3lv/q7Wf/SRF/zVkfFj3hs8 DJ/NPyWT+YfLE0LxNqtnxcUP+kRf81Y+LHvC+Bk/mn5PPdI1TSodf8xGS9t1R7qExuZU4uFtIlJU 1+IclI2yQkDyYSgY7EUnH6d0T/q4W3/I6P8ArhYpF591nR5PIvmOOO+t3kfS71URZUJJNu4AAB64 qzf8sf8AyWvlP/tjaf8A9QseKslxV2KuxV2KuxV2KuxV2KuxV2KuxVRvJoobd2lPwkEU8SR0xVim KuxVBab/AOTK0n/tjar/ANRWm4qmEenafefmVrf1y1iufT0bSOHrRq/Gt1qdacgaVpiqff4d8v8A /VstP+REf/NOKpf5g8v6Cug6ky6bahhazkEQRggiNv8AJxV3l/y/oLaDprNptqWNrASTBGSSY1/y cVTD/Dvl/wD6tlp/yIj/AOacVY/qeg6EPO+goNOtQjWeollEMdCQ1rSo49q4qyD/AA75f/6tlp/y Ij/5pxV3+HfL/wD1bLT/AJER/wDNOKsb8gaDocmhXTSadauw1jW1BaGMniur3aqNx0AAAxVkn+Hf L/8A1bLT/kRH/wA04qx/znoWiR2ul+np9snPVbBH4wxiqtcKCpoNwe4yjUDYf1h97m6EkSkR/Mn/ ALkp9/hny3/1abP/AKR4v+acs8KPcHH8fJ/OPzafy35ZRSzaXZKo3JNvEB/xHHwo9wXx8n84/NgV tpmiT+ZfMHCwt/QSeAQp6KcVH1aOvEU2qd8rxACUgO8fcHI1UjLHjJN+k/7qSY/oLRP+rfbf8iY/ 6Ze4SRefdG0ePyL5jkjsbdJE0u9ZHWJAQRbuQQQOuKs3/LH/AMlr5T/7Y2n/APULHirJcVdirsVd irsVdirsVdirsVdiriaAnwxVil1dS3MpkkP+qvYDwGKqOKuxVBab/wCTK0n/ALY2q/8AUVpuKpzp /wD5MrXv+2No/wD1FapirJcVS/zF/wAo/qf/ADCT/wDJtsVd5d/5R/TP+YSD/k2uKphirHdU/wCU 60D/AJg9S/4la4qyLFXYqxr8vP8AjgXX/bZ13/us3eKslxVjvnf/AHl0n/tr6f8A9RC5Rn5D+sPv czRfVL+pP/clkWXuGkGt3Mr3TQVpHHSi+JIrU/firE9H/wCO9r//ABmt/wDqGjynH9cvePuDl6j+ 7x/1T/upJ1lziJB+YP8AygPmX/tlX3/UM+Kp15Vi8+aH5X0fRX0SynfS7G2smmXUWUObeJYiwU2p py41piqafpTz1/1YLP8A7iTf9kuKu/Snnr/qwWf/AHEm/wCyXFXfpTz1/wBWCz/7iTf9kuKu/Snn r/qwWf8A3Em/7JcVd+lPPX/Vgs/+4k3/AGS4q79Keev+rBZ/9xJv+yXFXfpTz1/1YLP/ALiTf9ku Ku/Snnr/AKsFn/3Em/7JcVd+lPPX/Vgs/wDuJN/2S4q79Keev+rBZ/8AcSb/ALJcVd+lPPP/AFL9 n/3Em/7JcVSV7Tz5zbholnxr8I/SLdP+kbFVv1Tz/wD9WSy/7iLf9k2Ku+qef/8AqyWX/cRb/smx VX8v6H5pPnC11fVLK2s7S00+8tAIbk3DvJdT2ki7GKKgVbVu/fFUde2fmez84X2saZYW19a32n2N oRLdNbOklpPeSNsIZgwZbtab9jiqv+lPPX/Vgs/+4k3/AGS4qh9SufPd5p11aDQrJDcwyRBzqLGn NStafVe1cVdptz57s9OtbQ6FZObaGOIuNRYV4KFrT6r3piqI/Snnr/qwWf8A3Em/7JcVS27Tz5Pr +naoNEslWxhuoTF+kWJb6yYiDX6rtx9H8cVTL9Keev8AqwWf/cSb/slxV36U89f9WCz/AO4k3/ZL iqV+XIvPmj6fLaNotlMZb2/veY1BloL69muwlPqx+wJ+Ne9K4qmn6U89f9WCz/7iTf8AZLiqXa4n nnU4bRP0JaRfVby2vNtQLFvq8ofhvbpTlTrlWaJI26EFytJkjGR4tgYyHfzFJj+l/O//AFLtv/3E R/1QyPHk/mj5/sZeFg/ny/0n/Hkuvv8AGt1N6o0G3jJADD6+DWnf+5GPHk/mj5/sXwsH8+X+k/48 lNnoXnu3v9QuxpVo316SN/Ta+K8fTiWPqIHrXjXDijKyTtf6kamcCIRgSeEdRXUnvKN+peff+rNZ f9xBv+ybLnES7zH5d8/6v5e1TSU0qxhfULSe1WU37sEM8TRhiPqwrTlXFX//2Q== - uuid:e882c6a4-b7dc-4cb1-95f3-adfed3b77c13 + uuid:b9fcd98f-6fe2-4cbb-a19d-4367321d727e xmp.did:ffdebe24-c43c-ae47-828c-2b9d14439d09 uuid:5D20892493BFDB11914A8590D31508C8 proof:pdf @@ -73,6 +74,19 @@ 60.000000 Millimeters + + + + MyriadPro-It + Myriad Pro + Italic + Open Type + Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329 + False + MyriadPro-It.otf + + + Cyan @@ -648,20 +662,22 @@ -endstream endobj 3 0 obj <> endobj 11 0 obj <>/Resources<>/Properties<>>>/Thumb 15 0 R/TrimBox[0.0 0.0 297.638 170.079]/Type/Page>> endobj 12 0 obj <>stream -HWˎT9 ߯T*<j!ԋ00Ҝܢb9]ŭڎslߞTҋ}J^r3HƷoH/i;/kؕ7j/Y[P jꜞM jdw=3vjB)HWÛM֚gMfFU(S uXזt0k%4ûxeo\x8$ia5$wd+03WlYGUQVRHehUm'd!h(!&Y^ڃNh('"8&Y /a*"dVF%B `Xn.Ƅg˄{pa.M{ 02:- ~ ;v?7:~D]FznEe$''`EmGT @yd@2_1Ӛv`/d-Q}\$3 ۡ}V iȩ  zl z:p\<'q= - {s_*L 6pYB<"-l}5kWB3IG}X>Aҍ㢯ega+=oBڲ#jB3`z`tnf&B/"L&_$Ž s4F̗yC -`F]Gy8_Acd\#q}I2ϘPc G%B q 0C"p>p rKxtyOwdB7(4@F~@;w'I/^buqw|}_2ܑo|w?}qr.ȸq s1q*)N딀Oi):ڜx?LC~'yyhW -:fNY- ۊT}(΁7[ -Lg#d,0Ȃ#e0;-} -%*J<ŞG\f+˭zJ -endstream endobj 15 0 obj <>stream -8;XF2_%FR-$j6r9!TZZWr$[(j>QmjWcVM*4CF>9rfZ'><*tdEK_f@d@jPN9F"=9\7 -mE.?=]D[&B,p1C*,`Bo=p2A(oZF)fL1&.2T;DRH4&m'Z]X1,t[/tN:.$JL`sTHr!Z -jqp^HTfFf'!cI8XZ17^;kn'b7c+#G3D^VB>V[f8,`O/I@RsLVXd&^1Q]d_2P:nmfor-W@1 -YPnm#`-VJX.%=9~> -endstream endobj 16 0 obj [/Indexed/DeviceRGB 255 17 0 R] endobj 17 0 obj <>stream +endstream endobj 3 0 obj <> endobj 11 0 obj <>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 46 0 R/TrimBox[0.0 0.0 297.638 170.079]/Type/Page>> endobj 43 0 obj <>stream +HWM[7 _cz,R> rAz!Mf$mEo1|xDR$gDJW٥pu ˇ%i)6kasf9 }Z>Y XiYXZS]~d, +1,l#QfZQ)Q!قbqT8h-[,VihI\r$1NƒGd aW\C|+_*%,&!IZ豶N M h%Z3?6bw%UHK#!H!5h 9^ +X[r .RJE9Xlɨi Fˈc"ؠ-Q2as"bF$ `*9NoOB-`9$y|'07Myuf?c} k'7}me~X{. +$}E7+EC_͑W]w& {cfU`_DN# + r{"v/AnNp> G<x`L̑G~y4%&l"Tb !Jp ºP(4@#'R%o@OXJ򥿸 q_4\DcqZzFSa04z[\ tX$@6ap + p80#! +6h9< L5Xs xb܀[ Y6 -G#mj@LFÛT_ +#%\ D1Ha癑=ndCluHyH)^( Lf'@󞒰eB]&.00 Jal%VxiLօL2=<]tV²} ۛk P/nSxip Vݐo`ʙ4||s'a%y 檐DžAlEY:7p\dё[9O  +>AIi+GtLZ|;(i Y:3yZ ֞uJ/yPhDfA|X|p>stream +8;XEGYn=kr$lk'(P_p4>(k>>JJgJpWPkXrqncBfc,aV.98Pl)3lOa,HZg`SjjGT!I +"D!S;*Bca6V`Q;\MTT,KUc^rej^Smt+58A@"BD%u[dU$>!,M##-A>)&)'>2OH0` +.4bjmUD/P?'L;t&^E>U92,DTa"#,s"2I2#0GnfBccl`Q_qj^ud;,q!c62SKoS#-QA +@1t&W>2ek+*(4R(=%n"fQO1OWD?pc/idP=IBpt]QD0hh +endstream endobj 47 0 obj [/Indexed/DeviceRGB 255 48 0 R] endobj 48 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn @@ -669,25 +685,27 @@ E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 26 0 obj [/View/Design] endobj 27 0 obj <>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 14 0 obj <> endobj 13 0 obj <> endobj 28 0 obj <> endobj 29 0 obj <>stream +endstream endobj 37 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <> endobj 57 0 obj [/View/Design] endobj 58 0 obj <>>> endobj 55 0 obj [/View/Design] endobj 56 0 obj <>>> endobj 53 0 obj [/View/Design] endobj 54 0 obj <>>> endobj 51 0 obj [/View/Design] endobj 52 0 obj <>>> endobj 49 0 obj [/View/Design] endobj 50 0 obj <>>> endobj 36 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <>stream +H|PmlupzsY_#:::LºؽXTH[[vו R˶n ib:`Dtʐ9' H4wݿ/|˓UcRSٖ6o':jegO6!`'# $zX~h \ħ'erIqC} 3TқjJ20g9pAGV׳3l*ḡ3E($cK] pc>w{F&x6P$ȩe/SKQ?ipzЂ8|>X-4ּą~{I_o\Z퓫gw?ǴPplih4͖'҉΁!7ς5s0  t2sӗća~fdоי~ʹD¥׎-t~9Zmy''ã+8kod_  w(Jn)2L49.~?.ݢt}Jhj3BV4 mH=]Vݛ _$C#}1gGOOM_*--I>E@e$9a=sd>vM67qJ gd +endstream endobj 45 0 obj <> endobj 44 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 -%%AI8_CreatorVersion: 25.2.3 +%%AI8_CreatorVersion: 25.3.1 %%For: (Alain) () -%%Title: (FIC.ai) -%%CreationDate: 6/20/2021 8:23 PM +%%Title: (FIC.pdf) +%%CreationDate: 7/16/2021 4:31 PM %%Canvassize: 16383 %%BoundingBox: 8 -156 289 -18 -%%HiResBoundingBox: 8.16666698455811 -155.896331787109 288.781496063013 -18.722782152231 +%%HiResBoundingBox: 8.16666698455811 -155.896331787109 288.781496063013 -18.722782152232 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 -%AI12_BuildNumber: 259 +%AI12_BuildNumber: 390 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Passermarken]) %AI3_Cropmarks: 0 -170.07874015748 297.63779527559 0 %AI3_TemplateBox: 149.5 -85.5 149.5 -85.5 -%AI3_TileBox: -260.125987616111 -370.677156943973 557.793995294045 200.522855263057 +%AI3_TileBox: -260.125987616111 -370.677156943975 557.793995294045 200.522855263056 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 @@ -696,1308 +714,1313 @@ endstream endobj 5 0 obj <> %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 5 -%AI9_OpenToView: -66.666666666667 34.666666666667 6 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0 +%AI17_Begin_Content_if_version_gt:24 4 +%AI10_OpenToVie: -67 35 6 0 0 0 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0 +%AI17_Alternate_Content +%AI9_OpenToView: -67 35 6 2256 1308 18 0 0 46 87 0 0 0 1 1 0 1 1 0 0 +%AI17_End_Versioned_Content %AI5_OpenViewLayers: 77777 +%AI17_Begin_Content_if_version_gt:24 4 +%AI17_Alternate_Content +%AI17_End_Versioned_Content %%PageOrigin:-157 -481 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments -endstream endobj 30 0 obj <>stream -%AI24_ZStandard_Data(/XF6 70OC?g ط Mk` $܍zJ)vD~nyCR -# -DKt8Dν%θ!CLta#دX^By<#Wu:bCgi2;#[}ޖ*"r7D$Ƚ,#yvF3}8Vn;wQ62EăGv7b&.L$tR݆Tܷ_.zA2bHES,+GI=bIJ.UD|4<^!Z7ҟ+v\""xIC.EF -GD`)n}0hl0kB644[K XlM^,ɓ.'@U%eeتYŲp˫Yr1]+#ڬAO2be)D3J]%|i&.-mf)mO;ʒ]0K򌄗uw1!,  AC h@ $@APb <0Pp!Cƒb "1@  `4LHd,(HApHlРAWͫ7%ЪcIblInhVJ -6( t DHT N@LA$ "Q ` <4Lz,2teٔJm#v%?f-椭 y D`,jU, PY -zac!C$" d(Q"ETͬzVX`,`( ˍ"q x, 5xp4DxqlWTNYfˮ GP$^!H, GcH$"AFc@$8C$≈# @$~8xV>Taxl3,ġ:UjeR-|!0!Vl:em ZDMrRk  @:t)FeHf2XudSnq   x781G5,,rŹԠQѐ*VS0F197543!v2JXPJ饮2N7ʉ)Cem̶M@$p0XԢ>b)v4 p  ñ@$"HG$TDV."8"qccV:CK49P\@FHУQRAUh&{/CEfe: zD}&"*CJs3eHe/C?s  ŏ@$kU]hScV -S`0 `<h8CX0<p4BD$L bØ81ӖVWlUtQFuѡ) DbA j4v|FofajQ^ZG [ZMa cX/笠1q{`XhxxT "@6ЁlR:+-/13\$#GtnqE~#yłJ -DeyłP<CPLeybX,cD A$*(рd0 ؋XsYjrĊjW\Up*1)A$*hp %x`A"X  Ё 2h, t)ID7e!:,ve,C*ka"2S2FYe "H0';Db GcX(̎q<geF$lS jPĠ-HA -:L&""146(*YjTj;}cØ,F1Mg@$ld7Ec`4Fp4G8ꨃ䰣09qt#P8`8x8ỵ>A?G=a{(x0Gx8QlN>Ё dxLD<4,41nqz0-La432أ(F-JQ,+*Ukafxa4!B"-j-CP4CP(W0E) Ex_\?~HG6T3Ҳ(RDbF:qsup4 FcP46ajA6`8 ` d0e p, b0"H "QDD bd"Q$4A - XpBC  Cd@&4\@ $Dpp *l` 0h4A"84HЀB$,H0 Lx JpB&L`.8lyhȀ:p -\h  -H$0L !p @(0HR (t CC 4@P@*xɠ.Dh@C.Dh $08D 0 O"g}@X0 - (8d@a -XP B@IJC .04(Tp0X C8@$*T@AbC #b -&!pRD*.0<\ Ă - d4lB\6,hnDW*ԞY7<*4dIs]3Ė]%TzYB%ZPk񋃅Dx"Jw٥^bM]*bk ֨u2*OTӕU2딮͗1 ˌO7Lt*}.KKUL3ٔ?toI:f DIk`V!4.cqfjn*S,6f3+8fETͱ,*W]֞26*%>XeWôqy,Y54onIBeI9sI,f-uWKs` ,-f>$DZ͑,+ e1m}U!~,+_tĖ yVedI7/vhc+nYVʲx +)^H_٣,9;[e$;,CİR*HYA#' ^&K9s..+sJ7"DwYج4M*r綐QI2ENjIZHWȤCSyeV'Rm:&TReI"y-'8eHZqeVA*-+f39^NRNbIbxx%MH9μ#gGN&d#,g')TOInb"Y,wy"DsKX'KܕIn]V]%EuFFG' Zi4Ҳ*BG\ k2;^:JW}.*H5U9IK9VfՔ#r씟4Ns^ ZX ^89Be ;;̖z@xzP,ʔ et;)-*@l,-HjlMQ]5\ڕ^_9{ -TL 8@$4X[U24+7uݎ-!4ٚ2H ,x6mlLZaUq bt]r ia݉]R93Ǵ—"|U%h'XjHxf|,3wJVI~StUD,j)+!gV3E{!Qr,Xg -ZItZzͽ\& 6C̤R,RxY]I,10m;1ѥYEeOZaJ'n3;3L*ZW2WrLߘG/WEiU+Kw,43L9DâՍI/"y*{֩L^<cH3wTJ|"4Rc$Օ_nʦ -Ϯ߱[!{!JeZM+(YxmFj߂MɥSS}9cs.ddل(Tpp&l!bh@ ("bN)_.,CR*imS*H}-=]ΗAs}i:gOm͕!vZ͖ fX̰N `U)\[8@ߔ/WtEL\T*c]/"CFd(#bLQ eүS4xtu+B0>i`SYZ!hKY1\s5G+8G.+6iEY*U,Ǭ^ ┺lB:*EY/.cU4rf$zyZմio=7JeYW).J^^QXb3tל }d/DUvg7T~߉jSZ:xΖ|RӶAlKuŮGUg4yJBW8W~GԖw,[/֏ˇl]T%t&,69oND.'I;MGs;ɢ1d*HֹC)ևάSh;eɰƩd ML{\6=2d0 jT0?hfNY*{;hǼ_oJe6*c^s̎,lkׇeOY7ʊY͔]}JWZ>JՎPwt)>oZ +Kv4DYYi -8uU/:+YB"X5Q=2NDY;Mt? 6E9~o%PR=+S=!|FؾftQE[–[{|5o**vM2T/W:<{钙yScwBd9Q U}lU)=;{mb/K,֎ Z冎~ބiXǡw~Z7szU_ =^ETfu+u"zȔDW&Ÿ/"X',{Oա[u_P"bVZBt[\,$zC7K5:XoDzt-):I4::g6IX{@.B{fOĨks6j>jϑ<%~uoDTkCwe\FI#+䳷|2G/F5̨/gEidE[ZRTTS7aϢ5o&BMLf-zbNI A4@0 -S:v—o -Y>7WS}ӊϹ*TVKʈ4X[;,-CUZ%e> 瑽-l< Qsf9sΫfr/oGDMKBS8gb-1C;gu3/~"Mb42xU6)2Zu6ħ!!NwT[3BIw9 ,}:SqyFs-TD|3[ОIΊbhSU>*6rrlWYuwZo=ď= хz\,&"8C˲3r=ys/S,s.iHmL-G|d*|`tubgJKJ{c͌ ;ɬ/GSh]7MţJk?՗Lx|Y]ljŵqe!QeF -~ly4[&Z9f[7s28Uww"B~83*+_:6dBNxLB -ٜ;sU8VV8Gƺ+DvΛ+'.z-M[ξ2_>;{19>#fm(MSټv6[ՈԼNVt]=T3;]0BjU{S{hXʎm -by>͝9&M䱥<4ki>KU/5";ȫuҋHSi,6gp-cDBeO^nJ'CjЦ9Aw6יܣOoy+d2X+,T.+#N!Vmv9Y6t_!,C;ƥg\gjܚ_nSvspjݜˆXhj1yTzns<%S~WVm޴DkhiN1">fŦIS3~[L|ܗJߣQXsL4JWJQ8/k;:!"11 '1cM^#T:VT|Ekck~eM53j -z愆"qtUXu.bӥ~d\WeV̳"/,vZ%fa4L–B -- Yg]DDϣl/e5dVVTr.e֔2љ|u8vYW4W~a3>%S~5ƚfb"n2UfZUf\ -fUj._Uu6U>]"γ2YYX*"LcI*JU 3f>E̜VL̾ IS4c,THL՚b}4+55{NkNfO% )HBS<[y̞V-t*lƯl>'=SĨ/CL4L[U2uU*sR뎞g)ʺk9T솙U'<\[,5*7EihC_VeR]y -Sy_]fG<˦LsN&*Qg]mg47;s?Ci-d4ِnj9ʠcF%ϧ:ܮS|-*e.yFotJ2+u֌.z6'ˍD8&g'ϹJdVHj7ұej].+%8tמ7xl90Ѫ%6ˉ8wsZƄ}W\v;,}=Lq]b7G}^Vkhf3*X&y3W%[j&*oBew)YUlXx%LZThE?WS4OԸeELefJnd=W.".=[Zww5휾yY|U^n"벝Y˶r6o>XƧ>᙮:enGt~~Aryn3Ws3=эBWCŰ,O.vu/KWʷ]!˻z%llqڐ\RtǃzAA$H hZ~|X4T6"Eq#Y AP<gLjqந k_pO%=8([X]R]mkbOq/Fs5? ݸ .䫔r ÿK,nߗ#Hl ?(k ~"& -Z! - 2=Dͺ1$Y1K>PP@:Ɨ;M~ m.@}BH-?DѲWH^įAWoou@' -6:)yAAW88}Ӿw$-w;QDq^ m(/(I`;nVɟ0W\Bߩ{Zs.e:=(fG_%Zx)m|?{c_R?oҦ:l;Z -@DߧOybيj< p@&Y)$O*CrwHuz}Krn!r%E7b"8$ÖI[ 5VC!\1XV߇'A^Eă,4U;яkgڎmV(G& E} v )RlCBuH5} -6QN/;}=Ycp4ȩ~}*F+ Ex9W͵֘#*j}\t着oцqy8 zCtBʉOoM{"4ZZz:M>Gg..)=׶hͶ$DXgFEdm#yD(qԋiM$~ -&˴|w,5AY ݶG'Y/F@Wq}ZV" -:h^Gstu_ 9.ǷfI r  P7\ % ]sЦ`{ V%*nA*?Y1ep̩\cD)[dkcxRs)VP˒I+ ֯{G5jzk}Ɲ6oN]l܇{6c-Yuh ͽkc:<Zj$*AUP&WaK1.xwZQ  iKwΙ-@A-Ŵ-M+xWW٪-ή$}|cU(|Uk~Mv*^.!Kߒja&\=3׻ou r$)Ed~ /ٲcD4` rL q؃sbkO;p@Z\%5+.3.x%TW< ʉDb}t=m_ǂWU֛ 78qgɎFlIp:q5 ︍~3n֮ - s%' [ungl˨c*NzU{QQ>;V7$CX݁8ᑮbg+mY]۹-mQN+ɼYUKŪ1^NJQTVlt:HİeY|͊~HB262hm8ZJK$b`/UdgD3S: iwIzfsxޡKjXBjރ;\(bFDi-SF,Dڢo 3v^gSnqyI@ Xł\HpKa/lX2@fu^5Dшm۩}eJr%wݺOS孴'J?>8:*S 6-V`#\vJjY't]p^5Hw}>:%U焈I_~B?+ ^kOB'Dw~ -M?Tz&XZV>`i -,`e\2సAХk!:hm^"q(:'7N7Ā@!*(;t٩+5(ں|ƅY@q>X}b -!| !A@[r9jvm*}[:ydP3VO5D'hhv. Eua2`TsȫRX{-6=ڦGUA[6o|*C-zשB/bI`X ->5IKn=PIucL4ҍKVD;/64@}39mX4 %OdC -DŽd&<#D8cpaF<]m:X: 8<] E..铲`fa0q] _#F锉_Ӣ!x=S_*\ʝ˯:/{bk)m,5y`ŲZ;=ges憎\^ -rh&< (< E 偅x*̂\2vOB<1Op^NJ ťV? -34av%>iAٮXJxyT.v,Q2j[< o%X)0؋Okc$Ah۹ >ƃi +ux3=o"IT-SfU[mTlJ)S q@+Y na - 5j(wI$;kΐ$Rzd!WU4:[bIJLⓘQb?vv ؆EbA>2| }`K sV -ǁ,tNipE pjP'yۓsaM '9 )c'I.CD!fܰLVrr.xcU!yAh07}MgRd6hGs7k1x45jH;]L( <#bs ]v5@nH=ZSBj EDs0H=bAB,$.E xlUDg;_V8Q:[p&T1D(DFd))_H%J -"'1*t}0UDb͂"%>k"N hH 'EJj -qt~Ua O1J@]Aׁ -=ɾcHAl boC<>i2 aO(G]P&kUz`QeT<\XxVG;+:e|:6DT$%\g\V6F0[÷HҨx38mkܑ$I+z%sBLqz{;VIx4|%Daf$6q~yKi  KӾvNz7bw4"<1y"tҒ oBiگZSى9v;›vd3!~mM=s\ng'nҺ",Ϗ Qi#RQ -yx)3uN!lB+{9"EiٷXJi{o> :@Bd!45]A M e!eDJ4j4>rjO=#  DZdK9g8,)ԉ)э@5'^"l)V!!1 =hzV}=OCwpR̼d%h -adP L"KO.@]ݱDڅ<*(]џTxakHBt  *fx;~vQL ә W^xqOi[:$NoI\HC!TmI#K[]l p"A1j`rCjwͳcO<|<`ޮVܲJ҇ ΔVYJ3c&nPhNxV܄Y%r<37B9.RB\Ʉ0:$sF!KI4fE a" u r -Ob|= yv R-W"Ѣ7k2 C9est 3dSάV=|WxS> *Jv -XudmǭAK2٠ -QOs>{3]is2Fp! 榹./0* Siw4H}+n_%+)7ӣ -`yg%(ȏם,?HqkiχHAڋ)x -v $P; h%MI}@6PI-TŤKKd@h[C30 5#$6?@UP[#eZ^s HaHC?BT\ıbS -(s&Vz9_k -7-f20u%Ԯ4vc&QP7$I~qt5._ u5鰝7\u(d3l",B~= )#,Id0?&lbg.M LԍP,^:*N$tAm0/ਢ}!~v TB -Mq,U8j -1À:|Cd/xv7)5J}nUQ4=e{Ioj P髭[Uو>X@|[uF#Z`+lAO -_ -t+k̘ -|JQu|r>6|j͆/q&8-\ЍJ=ǾIe0&GjT:]  e|=%_dK^C^v?1?ADhJRlAwT?]c'1 -9(N9ιzQq,ى2JEsDea'vSfۉ^!aDۅkM'!uO=4Jz7͐W̨zP,Nj,@9(Ta'9Ē,rb1g_'^=sO\xu9{dS(ٵ4iX?d=,pM7M}3=iӘ83Xo/Gk@$/5q- -<5!i\)M7.j"+~E;DaT}>O0 -]fMԥ֡gJɆ*kVE=y`A U4ԧa -'j\CQP׿/dòUPEePCh"]gP)~ct~B0qձӔ7YT,K% /~abހ41Oҭqtkt*[N5`zA;a+уWj[V>'8F$7ITNxٌ=B-ғU{¦iLDSLeSԻFdiΓ3φyrwa'OgGBorbEq+mjv59~=I(wMNbxr/SNP#%0k {icd$;嶬v5ݍ|Xcc<e -Iрg_d>#F`SqFp LW%H,S834X0tf?fdLSe( GDf6ډ-imKa˜"t-Ek],/+Wy<tHyTIJlE7X$ܿJa$sx)R/d,T?~OՂlx|_%TZ⸥q^+n&/ -pY`%yK,DCvh=2E>L>d]ïnC;\{BQ}!"?.1|"7qw@Ë>pa o4pB;I,y  -+N < -e?W?ɇ݂W0uHf|/Cʞi9U lwIY y} &.\3IkzO˓[$U3VVmDVkZ+JfK-F~ˎurb5x>xD/ʈP;0`%M@3yFhCA`m7o-c[iܲa { MH~0ۂ, - 'ih56c׏S3C!p%EX<7{:GT<Ă^+;,v nE4t!TA- -^'# 1/[1YצP  k'A݈Q;&ciέЎ4jb3٠K;jE{T]tw7AO g^ҲB*hp&`7t|;{5΅-<5k!q[,,(5:'!e}2s38?Yuމb's#d 'x9(M/C d<[|S)x)Aq1X/aQbXOC푢"]Ѡ^ꧼ -2QʬJLL,{\#H2uI~/ޗՂƃA5$QEVñǀ Db|Ѳӽ#D d/L'ejL&üi'o{Lze'%zes q563JMxK+5n&lMI8Ʒ aʉg;tقdoUԲnXJtrF>GstsCxdsvTT:*s&59U{8Dt"9#v+5NYϦpgP_r9V9Ր1&6&[Yv4FɂFZ! ~B/KTZd+e/SdlZEu(oر7VK )[[>Ug$!+{\~ >vsw'eB>  t/k_Z Sࠒg|")y caq̠N'O= R/ԍ̦#HEq`K.H JJy0*~3"/ݴϐ' Zxvfi5$!@f()d(@YO=#QH;t -?G`oOA5w CY_-.PS[cw=# ga?7$dWm`iUCIU(=yWM~^ 8@M<7e9F"hv\nup"Y~TnuF̽Or~s-bP.& - ! @L n a7&q0KjjU}1,|!IA'5@TƜ~YaXs5]{qTƌ!? L^u7)bT@uU=1) Ur!b#^t݃cIη4ō> 5Q< ?S(~:$Cϫi5?88f~R '\1ly ?:?m83*`.T[3++av65>z,_o3".z2tv-\5)z~(Zt8 =bsOJ9wx^$~Vi% qgA:T:dTU\,56, -qlLkbZn=WȚjR$z(@vRM5{'>с؋ -5BÖ́ANqc9‚Tje@Z4K쏛 '8+Fr01w5vRwUjd;.F#f޸Nqq 7cVY#vįwp\^uarЉy%E41lZUDފN_굦dN#ˤ*u2  Ptu-:1A;MT\p$epv.OT:MJ>P-׮|_qW;(6$Q1q\(k +Ds"PZĐK %;;(#5˲@*e8ݲuP5vką ! DF*FH ɊjSTƨ"J/%Lv&BߢH-ю9#+C AYro& hC&)8[bK1HXyh򗬗HF?XHƃ eHΉr9=Z/Eul)~W*FElߺm]dNt^Qxp -;/LOn5~C* -Ƴ8T#hl~WuH&>yʖP널3[PH?E"JQR;n:/_ATS7ChSꀫ0n -2wiw^F$mFI1 "6vZZꘃ`֭NjmPpݰ(s%h/͑Uͪ ۷r\=*q( -*zpָ*1d}nomfɃf`V[eENʛǏW1 _n늟6Kɷ AAM\UQt@T׉sY(`ߢ8Vf<dt!Hh9m,D(_r.+ Xt5fx -.L|rZld AXj$aވ$mDU6"3EQ$f;|);DoF[ ˦!̤+C舐ioCgDtKd%M -6UXx}}Y an:/ƇC:A0sZ -mVh*i", ->pƌC* ";Nk!A{88)~(1 1F*TV  FDς3?_T:}~G3NƗO|VVmv)*t>od'#ScqGv_<'&y ^vJvqv(OF@[-ؓF nSQ9)<4oYfIccnAP -3~`3 >yЙ> \ 3'Zɺd6=`iN\pepJ[nl#V%Rbc:s5U*1pb'Lŝ9_}<]J\1`[.$GzXiH&ʽ! [}S+$Ǔ $9 )uBm9JX**|D܊ -_^`p|h@eW`Tسy˩)XB( `*Ɩp}/Q8[?3Ͽ *M2((\"<lZ ) q9VX$}hC7`#ޫ ݼ;zu׃b/M,8ꦾ'Sm=·#5Pr=/$PQqtUvUjcJ[wJ؟ͽ:vf381QsA&D}cULѓ*|߄_ au2 &Nt."~OXQ g_AZԐMl'k}Tqw')o16Q>/5InP,wV:[-S+bxBO߂CD>Bܶ@AD䇙͉҂^U3)s"ET#i#I Τ#s Ly2EZRGĨqG2HMÂ3W -x['88rԙ^(Z40ZęUB!YngVCX*'WC@.\XF9AGI0hߪٽ4q.JG jp(CMPtk5v5v#v0nf9C4s2;Kof$_HE{J:_*|!@"Ek -rʑFh2-LJvfZTy`[yx/wpA NfY߬<$h -5b J9Wک_,φxbX[/}ԫֹFZ&(Oh:1n,J]ae,YyK0գc[%JwG7ڿX۩MdS𨖵ɏԌ3h!3\O,xB~ -$b{.ң?t<a[1O'# d Do\$Лعzi ׌IςaK4㖊6ow5Co [:¾o! Y/?ļ -LU[72d+`\> "Ϊ.T㦇D\_/y` -q2H%ieWjVhw!+z}lUG:Y!0&(T$iIf4G6ly8O^éXҡ7xE{t"T>8c#:W`6T\j=enJ -"LjLF[=&iitlVWȋLB<̭sN@0g",$Ge4M_F %=я:a _ʠɔ/f1\> -x8B!-71~2^4 %3 -%C^@߄cr(T:dsU+{ -ȨԡTb25!_^dFmͤmdP")IźGDRXsa!F`!uM9m{ x0հ'\GI|(%)@|)%/BҎ\(i&앢d)[Ed=}}_Myʤ%.q>!,]\Z#U -ѥ pdzü'.-=krp5>{ݕ~g ,Bue 8fC\wM5?Em`5|j,'<:;6ٳ>+m1 5{"/pҬrO %lwCXI,?Q `l&X8aXڐ䗵"*,nLj\.>Ϳi5F r >m9y..3F 6jBI\FԾ$,Fj!x[ >Mu eYxUI҂,d_p ~Q&Fً\5p*Vm ^ؾg8Q7yeM"`Â*!v,уM8yjߔIex0D@X'Yn{dO'iHeId$bDhK2E B`ҝAj)UJ|pGaϠI,Ine]X9"f1ਈonp0V"Pa͖If8-_M PFKejgoYeՂkU6ȯZcJ{ ؋kSʆ= /wGP^Q4u2,nϬ1ev,@B/븶Z*(pN+Uҝr,#`BR196mX=U|6Mq٥]O>?) 2/(&c8=BP@Og͐]f(dAMM<6b E=O$9p{)7 D7uI GҰ ‫P0R9f3 a^ά@i(:v_:H~:Ta7^@+ S:B OZ`ƿ"[<"*}7tR|в,(&.l3ND]i,76Y^8mX<ÇI+[(}h΀2H71UU^ud!}ѻ஬+q22&7TL&&{7 f[Sɸf^txN f}SY􅐟*bctND -*iO|qe^2+Dź s<$,!#DeۛN"V@;4~o{tep\rGk$ e0E]1ݻ CRA>gB@_?5oLB}kTG9Gv)P!Q=vT؀Wns֙k2 NQzMRB~s-l2 "z`4]Tr*֧ %LCW Q񵂡DTM!OQMs(rm+p, Ƹ0N~'H5-ў9,TjKFK=kXg|+#Ry}>UtFvu5*{uTC~Twa\Bjzvu#%jj&զ9 "V $3o,=fGާGh<GAHv+V{'ӥoBj. S>raPh&P+B/>4XiEowY7WO#$k1GȻx 1XH8p^B(#l&sX*}*B\2%:h" Ux,MGA*eJBAI.&I IM GHU{s֒_qqzPa p<# .3W(PU߼HzWzgJkdpP+G(i:Z7Tcu#R}kn</Sp# ЍM,Q7P4u@_, -LBbGjm!(ztpiDi, 1B {/6LcNgSjQ\T{> *>@%)S>0'GQQ0;F -0@c(H(6B:;K<,ۑu.̈́mo<"M'91 )TVF?mLLйSC&=m\(4Oj-tTCۯ@l)G0 D&(8h/{+ -.(ԓ<*p *+q!$`/۵ZCWI\/נ"Nb#]ߥ}r&]Y[?9Wָb2 -<"Z*4;nk^:JSLB PfKZِ>I<ܠ,JM52fJ"ځ y).^9VzXe`t2Xh4A>orgDOy_/J0XT@G01 t3UR=\vmVW۾mKcCwk ըﴤ7d@[q8;D}BO$2JI$ȋ@6]ED`cX[?\+*9rKF ,jgM+UY)mET-vޘIYf f17ͷ"k]l~ؐj;rqQD?w$F(Jx2wrW{ -x_Oíy fqky<ձY@%]skWr̭RWk:Js7;D(0&-pvDN'8; @9t -?`#qD:vmM3 -|D ,[Zq1TUh1۲P%zf)ߥHcg4M4[*5Q;p@Jـ"Q?RoO0yvnGU;\2"4@8܆Ӑ2"y!Esq-j&07v$|%ߌ6a7_"E^Eev,^ћo܉۽w;.}M\.ĺB"j6^AbJ "}SZF&՟Q0h)b ;w'1ޔ]b@8y YbORLӟg ꍆilOb}2 g@ {;AX -N^w2q{l2ԗ(}1>:x}8 -<iBMDknf9d9EY1DGNq$ex* ^Zb5<>_ *闳(\"2"lk,k'8/Ly o2^ xwwOk MǹSyQo~'HJVi2G|+y)pV0h`9hB(NsgmgdF7L3 -MC)siL؜L851-3L+2b{%S㯓-,ZaIev { n,FYɞΑM6dWo1R뒲GuQ-M ^`F[Mx.-QJ*"qM~bLⴣH9D6"R}[=/bRʣLG#D(\uG{$(DKo"w'0?@萃ey#{趹U}Mae=l%]SEK\13??7Ho\ԕk;+J0c3~Xč~Æ['t84ν}f "߮JrWh@d/H6 -G%Zi\eeulMnK[7w I7յ<!0]h%=>C^^7ЧjV̙9b1܌@"b5>9=Kѵ}2 -0-@n rx[<:׫cvU  Y Nni ** 0kxr^yK9a~N?}A7 -,oC#a24Ä w {MwFE.ۺqJĺa%^4'CqHd:D $%+e^Q $,>nRG62 tRF)h%u!FdzfkW$z!%4(P 2:ԓ,zd?'P,>)wg71_ OAo:ˠ`* $gr 71pMuEo<ӟ 8QػƵQ}8ݝk29 DIfkfN9ΖAL'X}p&їXϚ̜uЖV±,qtȁc¶ kiO'!NxcU\ҵ\ro?=FcF6NRQ+7|a?z=I=C~M|6=ȱNB6?QylYZدxMwo%rn3 -p9 >OVHAΰfLuG\R_Q0ߛ QN1Cˁ `&`D @ 6PDB} @#X%0*.( 0F6H.`@(AHD -` TP -Jp@ H -Dp XP8 h0DT `!h@FP @A(A8x0Ab ,̂=*/  ! DUcj'3-X`"X 4Akr@[H,b< NŘg2)áH""S:Y'MЮyԪVSy4j$+ǰS5~EXxCh8E_yS=XIE$,D+eRl1*Xm^ђb`c -CPI"%:qu plHT!m̲\E/suI3J(@D UScArDc) V%_:Ga,5ZGhR_/J5WT8i*ݐ6&T#VF*'~v¡J8cw,cϯ.rdqp4!cٌ=>4A"gtO D+:DqMU)%MTQŷq3y 5(^`*hF\1,J:îZM*Ѹ/2 T2wͣhkH< 0` ;D]y֝D`F1 x}h9$9I7!08 j3փn&"R#댋]MX݁ˬpfp/$CW[=8FQG)NYXȖ8M] D$!98*H# D2ܕSqQ<.V_UK$~ฎբ@#GNᔧksT$b3;"14 #)x$Hdƃ˅ B…%4-!$@GX*)xvI@^v;U?h'Df@#'DBE"_)N0^#eho5!&xv% -~׻$_I𝳄 S&\i)O -~.n*?g"e[IDQcl"UihB?UX^m5**66}cF]cnǖr3dkᰎImGY}^V RDdbb DgϤk^( P*'"dvO*P.f!yeE2!/yǩ[.Uj*X2Ɂ4zQ_ҤB&l&',r{"(HPъKA3Ty$,(̱,2Q(9HCrFCl [}6GAQdeHT5'0eۜLRjj;Fֲl/C'aձi()R&AR~HXSe\9Q)ŸfK;Z" Ut="*_$M+Yi0IMYx#BD:vnjJx^%{P!OnZ4%&lr$U(GZ4CDmj"5Dvt%3(ʸ-u1NiZjOIhsR}Pna4Bv }v9&a!EMd^#Z1o.bO."FxŒUG9xBȐb0*}(;EAEv)У$v*ИBDbq$T%2e%L62"e)1UTE|ժ@b*'ܧjAa=bWb (oAm+.&"J#NbNx9X؋&X# ŽK]pSѨ#C |03JYаhFM?7Qq,ijl8cI żԊhkȊzX|d&^%ǼARӏDĉfV)87c #kFszWu . ]q]QdYQzL*rPĈ=P(:DUԨLZ ZτsPDpA+C:|qM u)y=xȄ"ID؈g$CDL&@q":VH\2"SÁNrkSߗJDc -),2\E큜*G$Ji_"gM+#НP4kQg<|+AR#˃bV/DPM G㎐(LW\:;.^FJh>^G1TLr,Xz|D])mfdBv$=4H ))WCA5>b55A2A$3DSB![FbHV4&:<37>.rld(Ӻbeģl>stream +%AI24_ZStandard_Data(/Xd  ;m4IX#ǀM6Ì-y﫵Iݛχ +  P8@@0!8P$D0<@4LDhpLD, 8P$ +P@@P(H$€ +pdPA&PHbQER!~G?'ͪT<n=v,;kWq\T`P@e"Q$E"E ACDFD7HvHH@  ""@_llmeCUƊ9+=Βs4Fui ʯH("i0^0ɂu,2ы^Ad-T$T$Ċġ=N(!5|C cP$H YU$VP$yE*G9y8U3EIj?NhL0閌%t`,VI)Ճp0j)RR$CdH ⫊Ĭi(3< xVΡHacȺzs-h)騨HhCSmKJr.>[*:k^FCE/=TffcVX(R$cc"1`,"cCDW$\ EbX@,eh0Ԇ"!*D EBVk1[ɂWQ,/I,R!+.DDaBCJ  Dd!A CH0V~inyk*K]3*`@pH,`@pP\K ) @E`,xf(8ƃD{XM<33S$fVQjTŨE-ºr)**~fx^i\.d=A btZRJB:2*2A X:c`8p88 z?Q{G>}cx(Ń`<x< A 1 1Ar $! +QBr! €0 H8 zi!P6 ZI!HG6|njfb^ZV: %2pEDB#!1nq=<;:氆1laR$c8cH2abA p,IcX,_B-lQ /h7^>ulcn."9Ŋɡc>HQ?q<Gp,wC@9Q;i<Fh mdװF5ܠ`8 HH +HI")H`,T8D Pр x`BdBD"4LD0T@A + A&33=4E~PUl  *@08P$.D> !*(  Z&L08 $@ӠA 0  " ( VA""KEBsU$p@ ((e HDÁERhA TdiY3mJd%O[5TyzZw.' +]XwݽݕVv{{&aqb+XyGS̓^]xYQH.gU{3ں7wT$ɶc{EjGw/{>x4W]{zw.J[6-ll~eڸ6VjM}|%] +kS%,[zNh{6m_jgThWe-\IC|) e6Vy;h?YPwWq71&)~x,)uFN]q/Cş7_ESyQצJ[.1$'"*j퓉].Y'W~6xID4*n^s*;z裪-rqm1r}sKI!tK7hfGrceܵ!óE]-sjhӜҗ{4eTtLnjyE,4ɺh!U !ZWSs꼄{5itڌ J]ëӨd#m>zIwH~ +,D<*Mn-Qn9w ƽS_q֣/Ż$ܬ- ]Ot*] tjkMi^{4ltpm{xZT$4Y[G;` Z1C[ЕY;v̒`MmEw[z4ʒ:Tǹ9e(ҷElH=/V%i]K6%ro\cQؕ}EJSVfw=fŊk7kx{CVNY2*CW\{m1inv϶,MwG&)^4UܽQZ׻Uzjڭ֒f+ZlK\VlNtҊ߭}ԕ#}m}[GжiH[#Mˣ=^2O;rݺ5Ǖ%+'|{-,_9bź)/ y𦲘6uY7k8kYSXniWgUg4ҖsXRַ{Ghky[[͹eś;WusFj!MӾT3o mu[xU=d4[m:Uؖ"+[%R\R7EjS/8,Z[Vn*6%Q1og,VJ[76lT_T[Rùk'LUͳڢ۱ʒ:bʴ=2 Jki͢.TS8ԭUbGSZnDu}Nz[b"ݼ$սeӻI-W7YƲ]f1ץweoٖWǙϜk˭g8Y^o[,k-M˚bzQ*kZjKOW%4[LYۤrl4|K7W: LHAɒ0bLX0p +(D@` + +  p`8`ABDBD& PB{j?굜ҜC *vuimP |Q 7CbT;i{%=6X~P2ܴ(fBí' AQA9wAsR胒xck@pH&0aEb Ѓ"V^tqc’Իs)"]N.wR(Uss%g= -\Ԕlu1jiGʞ+o==j{ߕhWvLsR{}^)ͫUct9޳zeU_獢յŝ^QmiK5Ն[r{x+欺XuHgꮪʕ]~<#]Z`e"~yǛv2EYUejO8kZRkҥҝ"WMnWRʅw-ʦ~5.QSGtKoZDy,utQݝǺB[V?IdoeNWϕںT9a#*']%ţYFԱlrT%U"E,j}lLU +u.Ji/qɨf nsd*>q&~xstEgRvݽqU٪2g&& MwI-Wpnx2͐vU1,cAr.M]̭Pkn)Â3,3>ZXPUTlsWDzz)3j[mr\6mݰphnQ\a9=˺-VRsHG6II2{"֬UY#/ " 9.\<ߚO{{hg{RJܼu9.Y*!  ѨhFCgs(V9.vz۟yOϩ/iҰשuIFeӴ46X( 8P$pC Lxh@FUwI2'2mV4m= .ȶQHvW_n05Icij54M)<~M2wzmc ^T5JZ_uH+WˮMO-wIg[}O)坟ūӟ ʌRgW1Ӷc[իGxLZݷRQ25M$9}hoZw=tNehE±YKw+M{Uټ*i1nUE4YeK>2/TuީtjZSM"D%{uoDGYgdwZi7C:ۯnxRck]{_xFIyаtөKW^}~wcT: +Nzuhݻh0ʱ:nʘSWuˬܻt/ +օ7sѼ'L(N;ܬoA[םu5we[վWot=Z! +~]VhZlUG, HL0D48/. _QKzoZe1/M9יjZh~]iWT+[qbs5Ϩk\533.ovD뤼R᪝F!XH5~yẄl~}{YwnJγڽEcQC#L<<M٭3o|c 7 woxHi9?(&oK[""<(fX{ӍtZЖ~FÝ[q*=ʦjzP|Vbjd&V/>UEUN,֫g-U&Hc:SKPZZW&np4lOqVcW,cQzXﯼOfDkg"|Y4\\2;fոɽ[ׯ;!z/ڔ"=;U%S*XbIl: +KtE@-!YytZw+/̎065wu铈TXuzˢ)*V3nƵ^nl3s*7,+pNi}=Rvux6%wЋZew 苈k ghgtZu3hw,hjyIsJ0\|yԱ󧥃bxzv/˥gevΜrm^r]rzөtѯlJ[d⥪f-VQ=ti6d;= [kVdcU騦}YSTEyQg6z:.qnwWݭ;حU +Dk]t/ݚn+sJ.ۻa;{G**YBΩl Jd)<ƭoMJ$n] +uޅYdVܺٵ_Du-)j"yWץ 4&EC|ïک)t6U(w;=~y]!=-V)\6Ogm!u9WNB9h,]W9?[fUjYzn?Sߜ1-;vv:_ +U޺iw&r=IIy< g2ydt<.JL\>^EQZ4w>F<xt*mu['%mٞ͛7'˩x*[EuyB~tml+SbokO-<%ʹ./Cx+&u@S!Nnu_%+eJ5T"4u|o~TZE2햚"wK^2n?;<ٷu;WZ4;4B3ʴ+gVZuZSi:iL/}3T|dO3ҝלּ Ѥy|Fyӝ\JW˧^ɯDMJm|b.sK3 1iD~,1f^4Եҝ^b!ZHT˛j>jefOwR;_Io"dH|-ۚunR_FvF5],;=ԓZnIڏMmk[biJ[5G?OtT!S-uf/$ ʮKvϬUR3 ҪΜuqShG{Vvrv:xJzs39㽶AE6J~~ZFtՠdDTiMkfk,hSG3OhkdCä3T;tVkfW隖t<-tC*ҽjW"44U_5 ~LW_oN.2Y,f.Z3mͦ5wMߺ7򶎵`z^ڨt]]Tڹ]B5Oi[=^5K67꣧futҼq4VsjG{)8(aFV/,UWmmnӮnwvx姃y7Ꞟ{%zROMѕy;߿Kfݭ>=*ë3ܚD][\ޮ$f^^QiԻy<4hȻny*nwnX6^ʣ=%*sgm.깫wUxWY;ޜӮpTuv/Rw]-W%ΝݺR-7G8GGk%ҕ/"]~StM7WN>~ͦcC"Kk4FW.Cujkx] mrW53]f}Ѿsu6㗨<3Y:/ա?fGݽ;KU;7k$]/*~S-|;3:}-mE̢ozTt?D_+~MGd*Wa趖톉Ez]SY7:5L?J6 TKFuIDzR[#D5Uidi{-4}5vhHYY %mи³cHi1#2v!u}m~uҦe.4ъx[5M]úutWWl]u=ͩ%;mR{& bp?BzUԫ+NV?~$*%Ru]evCB<;HfIY2ջC6dQLɶ\G2H7utK+*7Ϛ{RoKR-;iI8h$E,1Sz9AAA# $rh>uV4V8$ Eq"YȌܖ:a/4}HM w_]qIu;K +zg4lDf^[Dyz<1YEq5QuECR{ 2gN/ +xQ "|1hX{y$[$1 koy'GW`uaœlE'o"+b3ͮEV#}ZݹT'` .8|1cyKH.,Ԝߦ1!^E4#lsċvdA,)NUpn隁Rura@L @w R̮$ձH{/]l>F}gAkusy[? < Di)a-bv:l'%{@D %8 5*Դ,G6h&-+]+H>ޢE(U7q%pmFTuG ȩBSг%o}^L iDIbz˭ڔa#iC%MuW:P(w9;ne4Q҈8}j'q[g{R CD ;lu39:#ZotadwBGɁ$7kE4N.'Z'7Qټ'iLIMKIv! =t)On=_y"0 +:LN4+#Zeli^@QV_Eo`]Pe`AGR7qQc9mw>KwrFW&Ϡ_A>S$Gk{Я \4QL6H)SNn;7 QF?wr\/1n4vԐxd AH{`My;TPO2g/ Wem:76S}+d.zhEQpD9%uavAAkn7(4lϷM<7jdK\0*ߎ@XP{R:'(b6p._I g((jQd'䭛sAWiG8~QA hB@/L}F 1ZM5,P; ν04QF5͕O5OwQz4Dp+\_"tӆ̣6$5c&Z<7 +ktG1**XaҊ;$6cyZ]-2{!g-_|n~l/*2g\ }ZAtK Ek!sW3Ec*JCtǕA\w(Oj,%65HA4kh=-sE{v2߄qUV!p3 Tt-ʐ:%T:LزT4a0l|Lx@Pl߽wκ#ƝqSCXVghΌ~,?H_!A0E+ %O Z9ĢK48,*v,PV9VE UraQynŊm{~$5#qTRZQRڀOχn뿸Q4x Gb[cvaraעz{I.ݸ¨FJI#/iϕCkѪv@Hh_!XK5Y4ZͻmH*裕d:xyiDς꛲DT` Tȋ,5 EKMHQk m@E'jJbթKO}w(: tPQd( +wdXUY@QRP_$%e$;x q-CG&/'qܰ9IR14bEz# h[BfmŒ>w@֖~|IGр.VVObmrX#1,#7QX$Zu岵 L[WZzshj :nPFQ}ASu lo6k& v&-0%i ] NtH; AĨDOrH,wXa_~Nb.Q;"p1_K"*VrVTPPq\kH.sN!(*'l|q~Z2%JK,lj/:V°Ie0Qɋ&5$LD =bۘh6vz~Dn5mAzDG/t̒0;nY =k<YSy kqMC(⹀yyˌЬą;v(zU.؝i2NעsL"MUTXu/PqOc>bCf&>Ιj Z-叻6.ȕ! ߲Kj\{e#g]U>t\KsD͆L˘_M˛,+F*ty*f6I;BߦD`ko;8̷gax^F_܇C wa6 >u5̮[as5Tǚ^n%- iLV1?DWmie .u$o5Z}ogj :%f!G^;H-pW9 )&,[W\V,1.ӹ +|W${\LW,gh3D]hM$Y/ӐsbuT6(, gW"#@dz,a1a1+~0Ux\^,>1N1sF&1PA+vWL.ҦpcqMFRRP~Q˸kE8Q%EsԿ1>pP!X^QfKg,s o +U$J? Ta˺?(kXΕbv-r-G(l _kA+]bȌbDu:Uk"v-& ]5GDԔ>k ``aw+ | X' ֜fRtA$-Y"gI&kwkUaJe +?NF',=ᅶ=M(#Op2}}J ¶ 9',*TF06wEI'P_ƆaJݳ3RXpn;/.FS`ů>m\5Fn['&*$K穣0%c}~[hdur-"?7o)n4}mK@2ymy!Pw;bRpgwt-`NPe߫,xPZ({2*DqEBW[۾%u80NQKuiGb-[qY4H q|%~2W)N,q!OoĤz +a8Āwx͡Gʸ1SK3.9[ҌĖ_ףRd F 6g,2" +rb^π4 9ᕗ5VLQB׫]_ntƌRA'ߒٸtn[<;T#2A9dSVFSf1UfVWV+ 2"8_=uNOؠ9˶ACSD~0crtXf%\G :j&\s>9|bʊ,YdUYO+CĖ_*NZqJkɚ؇ieћSe*kVWIy +սxp˅Fkk:{%<^S-Rf`Q0^Sq(CԞ.Z%еyd$S3uUZD8e\$KB>(M6ԏ3/ZF+\ՏYoSDËݜ71/FXpZ!9mHqSp@kˣwNA|'pg*Kx+T>R׌l'OkA i3 uA\ż팤"Rb86 [۞6Hk1iaF(|O&2%)r^ V\׸k[d9 kԯ@T}P˟"eB%m( +j#' ,ܧrpgNy_X& C)}?fO{`J۬2jJ:cز6`JfK #V~!4ϝ`L^@YV`EZfRp=[t"7> >o3ס011z[Kf"S' L}B˛;8ޅ>pm3ڿ]P0;aaX`P`&BaN22uԏ+sIZHotBf]#tsv|pSj+n-?ٵTعО]N<li% 7;%8 AZ"ѭHKƬaumT)m  D{{'mj۪_aDgۗ1{h2B)m`Ѷ8AED ym[?6~9ŷ}QVk6 +Do~IBvi;936xG(rk0ۢ'm=[&s'XQO\ 3/m#.ݶo$7g7d$ dt,0|J; +ݧ gdN;N]b0n,3[#9oZB.ch@j;ku]5X13b,Ч$(M=Wn*aж0x|_ Tsq*eB)c큸hfb9`S~i\RW:>P%!O;ImaputnV9 R5.`lXDݲY]j+KWbgBuя2DJVn5&3E#<n1c*>KҮߝ>FdҡGYDž[KZ6HmE?M,,,=O8kBl0871!V¼j \[21Juq5XPj1O1@* awf\&`kZܗq޼+z|ynP9vtdMS4s vA$ EU N5C4q{iPÌvdq"NzGq.[Uk^"x‡-Fq8s!$J6q.R&CMأa<} QB4 $k 2[ꦱ#H<ܡ/XuXp9ݲ|^dռu.$%MS#^(8ܯ+=-܉Ó"L\ᙛ ضbna\Χ w~sqfYa_ ѝ^loR-E[zYܡ =v(J5 |JJd.HE""sY92 d}x}~ +'oS}ָjU%.[lnήmo:;Թmuu%gC<~,qi@Jt7ѫ+,TiG*X~f_~$sTRi*|D,G68&wqe9225Ѝb7:h24nŜŕ,uvF8˶\q={/g)e85,=KD`mopԨj&Yj :K8I";}'֦TN-{@+W|_iafXX= 2@Sx:YXIWjZZW/ ڑGjжEYFqVS^A!Y +K˲=@)ߪ~+V,F|/D3&:y +~Пe}ٳ-e*;FNs9mo;sXV/s}E + T葯"|4KUkbѾR"n1G(9- Pec~BSdRo2ܕ q1oƌ@h02kjBT^zԡ4x/\ u$2יӑg- Q bR~kܺwePI / Uj,ӉgmN3>Yd抁¨ܟ;7y,0P Cdwe&z="nȹ0y>tMc7BpM[w;/ɬq-I|`G* I+9)_=FT?O31n|0=-+YEl4g%m]0( <ĞHNk8NeN΀(#Ǝ3r05tl2=9ωtZzޢw"C}awCs )U5G 8Bx Q1{{$kܽȮv4SwTU +MhPo4TS-X {RPݮI@tt!ˈcÞ^( [*e:7 Q*vt[ᨡd0Z)6VgYĖVp,]?& qU^UD5< |RQ? &Dd^>۴_yb6 ؼ + M P‰F4WvaHg6h۴ +c_ᨀD)UjD#+'VT;EFYq\p\(5c(=z\F4cI>G*$T}؄L@aw@Cܐ S8!]6Lt^)@Y`?&Bz+Oj\p)̦(y+΁"'Cgx9# + )y܊jh +7;5 6V(d([% r3ILӗa6\ŝ`( J恐Tp +GA]n)'Bc}7(DEv#TOVpe|m[OYOFd\Is|V́P/7o!-'L:_m[dO:3\Er$@xV#dHe-q!FHLPHy~@tfaAW$|ܳ [Lyɺn>`jqXzp@\n˃ِAVMHĢ:02yjalp^O)<_Ӿ.02I:#wU;aj#yEYi.k?2S؟VyI+J JEW5]% )W6C_:ex-=d f84fGD):EyE+>{T1שYTd=avRr? +gnZ$GWt/7mu{ +]U\LMلwaOd2RP +-jLZM[._3󳥨:Sp QF )XBx WW<O8} X{%Q-l&MT9\~UpPǼʠ,7Ϟn.(5M婄]حhEڞDu Vo6E ܶZGt>JCA>VQWN`L2y}GFOsƾ+X;"LK q HI23?I ]C,\.xr)Qh;kSH"\()c\04}Q.ʋ;Aӡ| +U_-Z`63:|۬rul|:$7xܽUCQS +H)yѾ$5OZx1ݿ>W}BHv6ΩOV5;0=V<ξ/{dp4]_E$hjmҫCn%v~"ES>z6ek^/l-pOÉ|#5M,^} ZZ?b;m0jH >?p%5<42s&L[!%}iD wB +g*К.,/(w$kl'#[녭`2%Q(k)^"u1>.>a`xdP lɅyxf + 8/ ح|]N۫֘{ r TH"\# +kŇ~:@ٜsH扪W'gjS%Ћ? +Q";Aֿ=n5Q Y9$hʡaI A[($T3 +{H 43'v:Aft.y2#ggɃz$e!;m~|Vl9+&vx2 hmu nxu%!Ņ[2g,(|-ΪV.P( }WP^ŀ!8%tDyCZ-$s /eĬ*TJ8dn[ZCg,aQ.&I_B8aEO'/m\ꧩ[eLe9EG28흑*:9tmՉfrΪe֬j(3iCI zJOJ iNBd2L,Krd-%h +ˆ(gYoؕm%D*BF:a60G? $"JS>)Mkvsڱ]v ֩ ivmj~4H7rdi05T{F&8v r0.W! +F\h<~q`ؗCo ( r*s]p:Fnne49Z +&]I*\d;d4eR9$˗{"`C.K)O7kiJ́Dߝ  &{Gf B"V yxf|l2`xRXɿu67kF2m'Jwy' | QpItm1T16nDO@L܉(@cTͺBNoF΋VQ$(hWIKx`X\ Nۖ= +|&[ W av@:<^ 6^`]C3{$wY˱39;Dɥpuv˝8|胋df+x5r&_\y*h^rqNl&aל"v֨,8, GH,sQc4+}(nLnDbc _ƻɬ:R2r\AпYg6e709V0 =Lo7ZAY>%c 04@L$1_LL "P%Ȍ %D'4r(-q9%z&O{^v2>e>+0dC-ݞdEVlQ#Rm u5sat#T$&NST\FfBnVŪܿ$E T#"A9L+uQ6Cp5jɫAiFCh08X,A(@v]JB!v0[~"i -|(\BAPUPՆ_Ys;aVJfZf?h)M3ade+8 +h:e%s2* +y.i;}ft]*L&q">$fz[/_) 6ݴRP:U*j"mi@eBr ~~@H#gD aH%dcMen]QGigx06)#m-,pV_n kCp@LD Q\.5Y"r/n/jLj7q}v$ +Q9s{8H+4S{iorT7-pMG(lϦ.VuﵸgfW3z[KT5#gcG5'騼ڵ:'V T"j 1gtg]eI S6$}>$;'t<1i̧+R^L1#o9P;5Qg!^ +vSG.bC]U~R +Z֟R1&f;#vl@Vqsi +A*o +FQ.*5h#'u0\is?ZA*ߥƩvB]ǡm; Ya8}[G)lFW&N.K̀5+dtÊ<n_Yձ7Zj|cso.[ v7`uXl[Ey lU8G .M^0`C@QpVAp'<_nJ4~:I T#f%O(;vk]WA(s&^i}3< S=~Wהojï9(!`q&-D_`oMwfZ !Ƕ [KG.H+KzA+~A yo5:ך{Y^~׃^j0/uw +Sx1|׶HQcQt8dOX>9J[u|83?|dAM/jp- + Et;Q;dcc>{cv?;3x1Mv/4Ĥi32bM6f~2Y_)iZk&S +ԛ#q&>(h)ʓuoqv+{.JdQ2Bq,25My SYF-!SYKnvxs;NUtTq]Vf" [!v@ ?jU&11m3Y!=*{ &BLEt%#1%%T^y;a^ؔQ4'9=UeE[MlS+[h;ت".cnkՉ$AgL;$ͥ/ά^.\9ᔋeBw&=ፄ+ +g˾Io׼FD t7Un) !_I#V eR c٢86B :VfMy-GODK(PRaS=)AݩeR6 %Ycq=q~?/&*:tpOsj[V4έWKݬH +;^U1j8eE5Yծ}y 'zI E[!n" u~bg~\ztI~!7w^QLt\16>qC+pir>X,̫ze -\ѱ;j9]f GpnD@ldT yeatڋ2,(% {f?KPDŽǮ+ X\1TPCrVt9{*b.ɷbV׫:UjJZ&E%e]Ot6=}Sxf. +)os zsT .__Z,'zK2qa#(L/_qBҭ]_ ' gG.z5R| Mhȳ*,:ם:RNژ.O\$>lQZߣz2mH:MIh +aՀ[FqP+m=?֓8 9in[nVh=-\6L>"XU{aJ7^nIO>CINT|퐺k¼^ +}N bJ&\%"&ŨJU!CC/5C$nߦ3Øn7 dJA66PR1=A -K`4T򗍉1iz!I WhJ6EkΟP/!~Z*E]W7ɬBje̐W6[]`٩ql9@3z\|~ 6 -0 I9+m Ɇ~5L{Pz~)CqP> U|&97,PnšOaL#LpTt qSqi0/S>wu̝RF\~R%#R83I{:f׮ + +"@+xBD\;in.en6 !WR&mO&)%%0j@ % E/kv04#\.EN%aWS +&dvh\ׇXSO*R*G# HQ5$EFG0?S^].ȫn$p3ġ\UK: 睞(J>G WrكQکe{4XŌ߈^ k 7$c#X4Dozw ;) 9s0~ʄ: d%8uŽWMKP#9F/KTEnOX8Zw)V8h>ϐ%㢐9E&j%iH`m>Aڼ/(( Iʰ&֘,qI_B򑠲;Rs**{>k;=rzLpMG*$gST=Cco5ZW<%NJ9¡JA0 5A9U_ElT" zȿ!<8{(XYՕ.1ӉyQ^-cG6ԈZ-CPo$:v07%9\jD4H {jK1'*EUL:{=bAV[sJCDTye?= 9)VuBH6MMϫd*p_ MDфtV +TfhM ZN㽄|e[%6&);ZBt"t^K)\ rP-A^HѮO`2dt?,9qD+FEL1E1"OJ(<'ORBQ2b((rP.ezNZePXb\,*\Ɇ]f\,t<ރhZHLD@}J(*#v%aMdQ۶bb 8>$f'Ê堸h%+0`) 7 +V彵4"Bo~tvܕ~J$18nX,"+'K2Q7A3[vH%#;#SUUG׍L{d-HY8գ+${qS+ +MjD*RMj]r3|4`% +Xv?2Z$ +l,CfPs-a5rtuVpfIߙ{I9 [3:q U(pZa܅_/a5M{T1(]Upj4x?"ψ;1g'ITr)2xS^+,R*sNX*qFIg\P3amGPSJ%n΄dz2.:!1gN㠗EE  +.ɾN.#233m]Y`|\J&*lLWw7hg +V.T,/.Ӧq/iỵf?Q̈_V6k9$ Րaup!QZ1bfHnlbzE7"`H)( +~ΰ{U;V GXղ)O|%᪢{P+\vEFЇeOE +m2(pbdX"[bBfZ]4+#͈ا#T Hɦ+0jԦ*C/Njt|U2}UIKD8Du qJBDC$hB&svCD9UiCBB[xO"C(t9u jFK$6*$QKޙ`Ibhb#5 ϐ: jYD3L}$fcRLK-眑d3-Kb`WzoyTM뢉*"efJEa - 3Ob*|C iO$*{|'Hj)*,O k=skjrGM tHޕ<՚X "&k"bJHѶ͍(t 2غ*V(u"},fT;29N}ĆFG>!BD̐ejZ-)̪oC~Iۋ:k`JA5 },}o }hIhp┼Z(r4uVc:({FaFi>AX_7)E:7רK*yZ~J8r -# <|}h_5_2$ЬL&F *Z`{a/G ÉQfpsP#\*-j4qD:bF0`,*J)A`Zqdꯢb5]y;(&B;N %A(#dצF:qTi$gwF(Uġ3,au88HNlӢAgCI8F<(HJ MEBPu>J<^3hJb㝩rgyXӃ&F$3 /t\UD2 R#PEE{,CVшe=K6DT$SD(!#VfD+r8:g0*H*hLT{PmE -.+ST['ج!&e=UQ gv9yV,tn:sS,SKfq)PͩVZ[ Z!2k$~NL;ʑ暡T_q -z]ZtufF"G:g<-ϰIR⢪&,!ҷSM72f=hoԤӴl`iyzZЃHdJ&CT=TibuK1=]B1$?oEEOvtjUstW$~4 jBE#&BDƉ8ϠDYY<̚&*x ]$zL1Ҵg<,EUK(Rxʊ!9h"# nͦE}2.RɎ:Jb#ibCjihFge'%Y%((f㏧H>ʕ*aՒ"~n(#!tƥ2rLWQu89hLAT4!g3%Ҙ:'{&C¬mA|!pٖ/mWBg@'Ld܀XF"ZT+Du;lpʏh}!AhI+a%qLPtP9>ƥ#ċb!wNgU_x>ڸ\6;X)0*v|8!@5]j\S=j4Eҩt2UC2u%t1aljcUicOULԸbEׄpH5H$Q -30SOPJ:q yHH+YY(RBN=)GYY:\9`u0;ܘB#? L?*{(A.pas@^@8fLյJt@N'w4>D<ja>3.UEj,]:ES4N9R*#f I!2N7cȬBߔ*JPyi+{I(4OG^Y&C,Ik S_\xvDhN:CY1 9f$4e}j,~$rH)\aMA[ǹUqa6'd$Mym}*^bzJ$NȤS|TqCTk*N2UEh -ʛ>u~Mu^-jL[@?[F 9t}cyLp0  .`(Jl $Dp XxZ0@ 4 +\` DB}$@ $!J 8!@l@.\ "6 `J @#P%0A@ t hHcD(MeId,Q~)hXHB3UTq,W8o` X 4Akr@-$F1YIOY ' b̳cTZwbP$L,&hW*I\5XAPAbچ,U2GPZD8ڋBp ^J$P_95$gKT8`U_sRu\,E[Tq|EULV醴14R? v+U+Hd3}~uA { f y8{Yh$ZU|(^!GoJ(am84*E>~ gRM983Qfm3̘ Ü Ն-϶p[uV-Z0eU +r*<+ "o(V Cq9(:Us@`)pʑjP1#OgH:Ut +_Cf]V(VrGK$O[܃HBy:2Q\ L8YXB,i#MlRFJ́PO1kOf̗V!zReIZCML*ES'XDsz"/nΊL1$Q/#TSf#ȐCJrkBJ<4K8!Pe'Ghk㡚gb,gLmAD ܏f+B< +Lİ(FARn̊(XD#)I+ OZiT#{P"q"'F&E\ +_SqJ-E6UהWkjQkES75QԢDS+%ctQ%<U6 fsm)Vrcy^ +IT,r/ l)ye?rڵ4|tnM?iFOH.vS:.iUQQIZ}1Q MD.h*B֘ʎ6\7Dejtʺ&JAcSL [D' Elx|@RU1Thaf6G"y&UH=;R'^܃a 1CaPŹ)' :^$/ uT 7MNȡD1.a b&?B`2śM6'BYlV=pY:Փn*bk^t3(; IBE:eNH~: "5CDr"@aϜ^^~EcoqHS<85xY㯰 =g9%$5a.IjNfr8 }N9&U"]ʮ͢RP(I"{˫~*^P4 1*ۋ$:y -zIB Ջtb&fCN #nˈPvaݝE_Pl ndQ D(]N7ݎS\^"KbY3tYeѣ*> q ]!UWd9Z,E1h!씸?]eֈ<4(%rJrVisռ^_Iqdxb;WP_7B,ɤ9L0"BgNIV=;zӬxҾ(wE%O48O3)[ǬU>G!yX~_ydޚwȓ64h(־LɧW1b^}$VAs[4{8Ś|OPY9۸Ƅ">5όbE[ys~r[ wWT3Q=ET }HHOGQIo}TZ6^$YE&¯/¯qR7UƛVnf) ŏtj:Әt0=qeEHDOS7<.#V\h2!JmDQ(Ƌ"?xX>V͹/ -U3_PFy,2E) #j,H $׆`*L4;X?q2xࢊ$J" -ҬWlʼn=l_z*9)E>CoOy Y'e - 7,)or-"8)yKrtn!d\ *ZZH^9YdaJ1HVimd̋lP*ϤWEl)Ҟ0'SDrNC=bAAN6_PcVNmfR鄠UH[ۤ76G!KvWyJ:rӕG΍J[ׯ.R2(郻p喤N #Y\>hGm m`i;>+dƑ$ɠ W:A$&K%w/q.-HI8$%Dw&J&ɜ#ߐqW絼1MYO6Q7)MÐD5A*%JҖƊDYZA9j|P|5u!Z-T.'Ԁ_^ⲔJHSꚒ7 -k}O%ckHz`4&FfbAUuh:SerIĦp8U;UuIETeN .|g?ʧ -Q T+2'd8kr~"0Ur=p<"A>a[ljT0Ra]B&<m@\(SCQ.{S[ s]-H,$-?(pXQo0hæL3PP -CbAlPچ,00SeAX18/>Xf|cu:*x?#c=cd@fp{4(w& p45QjXEώWLX/ J#4X{=\XCO* &ɛ@XjDJKQئ`,&4SbXD:,mXT%B8c8c - lc%I9OJ|VX* ^1x8r RSkFXQޓ^_MaSc\Ð΋VN^pdGA|2G08n!}x`,>$f*)o8:^BcYk*'j hhCW`9[Y1 uz`&H#|0i.WoFeTώv+ :lD˂g=8c,I«ϻ1Vˀ]>oc-)~c묅iUu8T؏$Yg#UC~;ζrb .ڧP$|la-zH>+Rc9# cra-E -İ* #Z1`LcSa +hwPGtjt -ƒSԟ!Ɗ>{k>65@0 X h¿$=f+ ?WYh7"r` Z/I ,a}B@Lvj~>PLrb-gKi^,} Qv`BU!Ahz-4l'JXߕ -E/'J[PPջXŋE)tf۳jpg7Dͬa1yCؚg!c}yx))!jw X-dBjBKA1V0Gb郕 =` EVvCc,3^|3 -wc=`\aF ciJcHzncEE~kL hH҉wښX]eLW$NjJcH!f -bc, - 7rkPv8{p0bX3%#L'X3{Rvgio5X =imطK%Xa-RKݵcmt`]kXH]73wXŧp-X˩^mx5usMcRo1=33vX O9]~lUmx dK+[bYMe8Rc).r?Q$1֠Sk޵/1FcYMczfck>-$ jb,#}{o';X^Ն]_xRB |llg{q5z g<2*rp!|K Y#5AR5^p=]02t(GJȎÞӟ#c]GSXUR;2ֳ^'+&蘥1Ϸ|hb /ĥ *yY\DV ]aꊓhy"=X0oAc%04 C0ɣ*՘J` -x1灺dP^w#ȟ!]jѧ[zGXs8`H&RRcA(GVc S|Y d歶]kj,,#\P \PWƊr6kܢ:cҁ-֋ߖ%[OmƂS= -ВEhFfl,h\Oi-fx2tAUM40LhcKuc X6J¨7Vr*.+De8{)ĉaL,U raBčŸ {qꍕUZ |6ƪ,ݍ:fS#p#~KXns)Kt jj:C6;Vʜ_CqNy}kDX _Sù@gl, -e{vkr¨5VT rKbA]cη,$l",/r8ǟb<#Қ -, CF8cb6֮}:9ЃGmc-̿ un,e)^aI5QrcYٍRl\Tʁn*⻱0ow993l+RJ tW4/X>-7zA? (MmLz)RqEōEi·ɫ+Tާdj+.x7<4΋XnL]H%6XqPwz!ԲƪM0da-wč,aǹn,1eq_77U]xnHuc AnOH! .-B?갻sڹ eqxX_iwH(ǵDaI3˓vr>QoNc<[4]X'+WąvgͿKXޮYa_ƂxJ__qN,+g G -u94EcRNܜ1opK, qiϕܱ,AcW eNi,cj,sG_%wť2SbXagйP)zƺ+/W]U#X $8dHznwێn,.q&7?$c!86p,7 Xci= /R|y.?%I?pxM -YXq/ 0|zuP }EzbD!rn@#~D'~BE@ iI{Ʊ<ҧGo!13J8Y+V?@^3EfU9ȵaØq 66L>khrR쟽5\sw,jxTz༭*$ŢŘy_0=$Ÿ&U"p,5SͤFCɕ@_j C3`qwӴIN8.a蝮B_AsmkA/-rU_ o3K0 ⺝q B`K WS}L= 57QQ/yf,F [DX=<틈EY NaQں'=!N&T+Zz-:ܠA:Ϡi%QO=-ݯ0 &M{ [Ĭidĭ^!${.vx4c jH$J|q$J'/`:׾)~RhBUTG~ZH闩Shr-\Vv2U Љ@SgHHޝGp>Q4m jUQ]I?&Yx0GB(*;yH5~8(]B-LXxȐ[x!Y8c2 s1Zaϭnk<'͔U425"{ʍ; RD4hl.s3/8\.w2_c -6?W 1]-L4Jx=Q`V=@ `x/7`G)ZOjV~<q5ȥx* D,a CgaDJ=h.3frz. Kͤf~&bFˏ,.P m~m6qi:ڧPt_%YÄanuZ ]S)Z:Oح"͒Amhd#M0ġ`'N`sGqu> "[xOVqBIf¹v9-F&-WC05$ `;tޏJ [p7( D%B[ 06ǷV{5a;w6ގ2 -@Wga,)(hW [/~" 홰(ͯx -t5,[iDM?>rRHL1v &ʐ Ղ_qxԙݥu vQiŋe+]Ё8^#,l<>9>`VfpH&vŁ|yΫ&CلčQ NTmi(]4슶w|i"/ޱ_XPb4h}X*2g|de&Ig&=*ga;,TzQDx:ު _v0-Fƌ#[C:}"q* $s@[ys>KւwA;^ "J{67 Ij{m܍q/;="C@֕^\]hR`X}>nږ%;O 9"#U51~f{C_MxӋZnE?&NևF[ˆT黳QIKa@4sVgl[X,_;ŧ"~*` tATM(x/˻R+mK%dg4Z6?br{3 PqM")BH2P6;U^sh Q)-%;-;T(;OBH*ȝK?"U<<4F]@0l@'G1 -!Ό'+nHƠ ';4&C*]efid.~xUB\+g,% .okE* -} ^4֐6|Yਂf1*!jm@%GXwطѣҿjjI3t [S*CˬS'Cy_&ywy b^ q - Q~У%XO,uQ!5块xAV*ɧCCJ7Jgɉlk(\SvݶJҠE~=.5T5d]09I]l"2"/X.lD,ώ_ -@hX F,nlLQ!D\ ȟ){$X%L^M|ZDROvtRFzJIjE嗇S-Q&EE/skB7tId8y,ɵiS䚇8P畠svBPl sD\9}"6.kº=sELѲ9t[JIWSlVł;o HRdHAX-;nWoN!URY{-xݞH$[eN뎕ЮaliscAQ'qYa'1M2BZ)q+jb4bD,A%L[xpjbiɑPF01 zUhb/^›T8'P_ {f]D펅 ?CVUoZ0Gڦ -)JXϑ-:@[V[7 Tۏu9ǢƠ7q;/+XA˃e4ՎZ˻R@>;ը| plG #|f5UFqpD>r÷>Ǥƈyi렲>yȩ #x<#pEH*PgcK:~b %-ЙM4 %^Ĉc~Dߺ̬oB >0&R&cS3\H֗ov9_3HHano#*>DD6&pt g&;Fe -u¨T:"$49O-O " -I5 G;| l6/==OT*^34~m#M1FXDԙ5ZmPE=o  Sv?!S*봖}&悊jb<EC,dI`\F8LgO炆UZ,xvVHHSoT?QI$ѻT9tH?gmV.ߕH=r8I@ԛ!%9L$~<É:jy?/{pIx=3[Cث/N6%( ǚa -͘7 ]ZEDU.!Uឳm1t>H , -Y"UMu<ݬ5LAhy !MsYevI¬ͩk4U}*jjWQPWlH:PmnTБPy—K' =ʉs.r𝽗:od|Eя\kHV?]|b7ёm2p_֊@({+de=9\ Gj/QB&4 jsZ|R}bփP.mBe~V_nNLcmK!H"ALz%]rt3Jm %.ca4 &llqjBaO1SP ɳJqxu8y@RΫ^Ï6ΕYimw?hw&NJ7S6p6eNXZBLt Nu#G=B ;({(6G-3#lUwKBq1ۿ :.e?=L/`oSm-EJ/,='B{>W%/Q~E .2' ے2/:SJSR䋏E+%O;=MEt;::#Y"EnYWu-b0٧7IIv`!3`Ά/~ljFG!ڧ=8N*yf^"ɖ@a&Hp9BO7 ]#)E%T3w%GYVJHb0KM=XE—{ -Z< fnl@ #*2 ܣŃr\ m aY&YA!bVɃwxĵO2]8+ eGb+~d]I"kk&l&nۡKGCK%T?h86-,]d @@+]J^m}z(pI_ٵ|cZ/c62\[ ǛY~ԞUlk6F9>ֵ0i^rZ5ǯӇ[ML^GDu&dX?s.VDeg~"jy&3!d3؟<^ }st7{ XkB2{VF4Wiw׺KL $,Ebѹ1P8d@,ZX>SdQLGQN$DwHU_y0/j*Mytg}>6_GUAws^rVe%r+:G$45h>oF:a )I"Y-.zY ƴzOqF2rıt|ԂXN3 QMܞDN'Ǜ+T@@6_E5#B@R6 2 ַCz^#P63=?=t]Llf]lc _C T⾍2OD}; q& y5kU/54~zbM@ѻł3^qv٧bUalJ?1. x)Wry)}+ w5Ҩ~$ :P8!8A}iYoLi x\;W\F} c\: OGO1sn ΕcL1H&C)N"Ɨ[b7.T%+ Q=vbC_jE*fB:k+:J|ͩ;Q3YBɣy8ĺ?f#cUHGc]7SLDtwϜ ͫ>ԧk2%يV3=%,DQ2f*,C0\$uA>-\RSzB@|Uw_V/v ea ;\fFM=OAEgyiwE7IUM99uDX:K4&ߕ؄bQok (~u52>I̖Wgʼni02V .X 7'ȐcβxE)G' `S0GhZ*7%/g ӦLsj,$l?tlfg GȞyfv̯diURy571vQu45FA['^. =6+ ԄA+c@-3j+ғovnˈ}eՎk^jUl7PQ-e3ݣbR\~0Zmʈ-Y5c@J" uOq}4~$ +*%覽 4f*d]ZfH*P/=կ̆V8H]??Oo,W;1G:!UB>s b721b1 +rHA q -vE&9KR$E[WFk2wBS9FB+w'k ]!<:b2V9.ӱFH->5*%s lKW ;ӢuKb(V:U'& -{ X]J%d \/OlF 7kϏM=ΠPsI I"5; PXnM[Ѷth4 -~wUUX+ T7Ω K[,6NlnGYݜSa>|3((![y -^ rn%dN{q"هI QJC|w'̻ͷGy,0"m}\]G!`(Ec5$EfHK2.$k oZdU9WJ ?D ]W#v2P'xDi-v":D`~ m‡{^'VI;ơ]DzFG"I{D=Ԃqۨڟ*yОٜna&.֎?`.{jw yXŐX%  -p,n@}kAIVm@CU/<L)HDp0V)=ENHK,u?Bdh%9`[''Of5KR;;0*sF[d7Rq*I5|ϬxuX*9C3U}ЖtB! -w(k#-3% :;k|[VT( y_c0jvwTijyA&):n%[6Ab!eug\QU4)?sɨ]x.~|(=ns"EQًK骐 -88͎x}WAZ"Ծ`NqMgQ'D`.h΀GSO`3WDMLlb!=g;ID9a痠 -gwIM,)#Wh |UhhnL@+-| a~PFޒݰ lQpp@@g8vLDr]FGxiFzJa߁)ppbI3zXp)dus{"='])d_A)P f9"(+=jj:"!z9Gy::/">pO:e+uyi:_FH,EV2!{`3նZ\Q1Ԃ?%:loFv[UBm Љ'o"<;qC|lv1`P&A(h}UbOV|0eFQY xyf* -Ʒj- M\\AZTǀCU+o>Iv?)fCpRgʱ4NP혯ʟ -^3$ lϱ/q PV`Uui2LYIEm - ģ<Ϥ{'Ǔs^ʘN7aϖm\Lise4?L9ߌIy(]) 3ޒk A;#|*Fk9)&g~X+ k*Rȋ8-6~˥0zXE0+s)؎o|`:H0b bbn2sM<6o^9n)0muu6Jğsd#IkXq$ }dO4 -J˺1N?#¿NmM_y^`,pdHX`E`">O/ Gx.cF.眊$R<(xbtZ1J>Ng ){p0L626. Hz?Vb(.!rƾ-BH3&0Y)/:4HAPlӰn+$ ezZ[qcT(B9*_mdE5^T=9L -xX@bZ͚9B Wu剳\7J'Du ,ʉYx풁#J>??EtZf-*q"&G,^$rZtނE3\EX{51 'n&dtO]X$WkN w\tSz‚ -^<闰.1Aɀfِ7ZW>{xL9rt—3 {PԢC}9z#S4VG=0m4P,G߫xłๅM -Ȝ<ݷwBlR28 zs(A^֚bF?3[949hA-ۼT`i_x"T_qROXT]XלGu~ 6T wٰsX%.vr;WUO#L'W0 sM<px9%auROQK<  - z% !\ 눲zHF<?x0EI{х҂> -Ϊ{.Q>%=1G٠Ci\y=vJY~ -u ݗTGij`VXg_懝PRcYƵ\:%⺴ -{qZ (A)NzuN+'V -G~ߞJ8ߚb D/Ú@`=PˢbPs h%ME$e -OB!2+'Ɨot6$xQZ$W[fZ!;@WT%i۩ʡ#\p YQ7R}׺wW0S(0`/h54Q1 mU+M0jiñ(x&TvΒp(agOLX -~uc׹G?1q LgY<dr]Nqae$KxHεeް,#jMslɶSRXdT1~n9hOO|$N^g+񀨔8[P  l|3ŚNHUaiVA~ʞ6/اT-޿+%4Ui썗xIROOr?>~P+Q,(Hɠ_Sh,RUKJNb⮰ٍ@k'8]mujs A;RƧ|mD[/nw&O]Ƽ5>77]>Dy1a6Q.x9yZ2RUZ~&+z Bh&kȞ̓,>3NCLfmeDDC:x>1t(ݏ@1Pit&1UGq0)#B 1{Z3AcY 'f I/Ub+nYHtcHVM64MCx >xX E9.P#hqpmk+G\>p8V`\;ԍ1^>txbR-NSkIHu3kc+4 _ -Fқ[ ցzU 'Z%BP46b> -"'3TY:(( .Ϲ O~NNݨcVPHZhs@%J t[4ial/ -n`Zf* (%pOs6JfvQ{)flXDތj{9g.ccTc(>'$@Q_NM3lBk# ¤ҖL4'Z0'TDAdY-zGCa)͒T~v{%Dmh' 0K}Y /#.Ľie o|ٲbWDV@2ؑ =\:i`8'NhU)OŤ զ1;];x7wn;,/ a؋zk^"'\pJv}] V -%K%9x^5roUs(-6D8ldMҫ~8]z3,>౶0 --# Pe(v.K8lɫ%7ڷDoK5D#h9;:y!xĄ"TF2 6,ҩA "HH_Qtr|78) A$K/Q'LV.,qbfEgt$ѣW⧏1F!xSJ:5DLJRv;1p6 - /p#>q J) H@v Qૡmt@Z9"Z e].ᒡ\j';ek)e i`mďe]p|JYir4Z{ɸ$%3_(o^Hh9wzdY I*ҸHJq -[h+*!kH5##%}hh( -r@j|~YX0‚|ƴP`k)NG@eXWcxn'=(ˍy -Vôߟ,3,Guv-v0il' F@/g;B=eZXJ'9`E$f1e5Y7F ~Lv/?D[CdCYrwtCjr t\).$Q4h@I R-9F-:qR\ R4\dV%-28۠y)fĥ(#6`ƵxDP HAӠʗd [Og\{+Vl$4&Vܱ V6 -²S7e,kDqJ#haԘp'̶h"kΕX4F$pBD٫*#5i@ %n7 -,ԟ7/}2`^*ubfCvM9&fn|K3`U,{eFTr 髌*]n2[U!,?@Dtt9ml5CHRT 2 }-d&ƙn~I5!_V6o$ fW+ T׌!ro bb3CjAa9;0k8dW2ӼWw˄`Gʀ=FHM;,YzFbRGYNǘ%']Wh(i [u|9+:.mٲSakv0hvUu;{7J(-HAG]t(B4-],TbOȌY|P c+> -nXr&QBLs;x@S^E@ǁ O.;Aeji'2$aJmǿP;O&rL3Tz Nr8dzvfjuFyߓA`/F?zBp1/j`gtc(_ 6ƴFQ=Ƅ`XPXDc )f ADVXtO! -,>Qƃ_aϩUB^2D 5ruеl -F_a/,+U -ρs)\L\ +ׂ~^?=}u}yaHHgw6k8ar߰%6$z5-99K]؁@'WRbbw7@Ȧ.l"@dN%Fe>ӎ!7c)[Cѡ3'6ބaL/,@[0w(AM`B|8Shxؙͥ=Q*R%fi;"m`}XAd5;],b9gvkplIv" -ل"ˡ9ؾ85] !@UdI8'dJlr A}_1q h.dc΢ե`[CTR2sB1RPT6XaЂSXΫLx#*#Nw,δߑe_=iꔌv⪞b꓃xF@P`B x -+⅃8ahnBg+Ǭ2-TjAWC~@e>I@"*\4A>Q €8h - f -A_'(sA;B^C|,OD+a-D@ %9B is(OS {xlšȂ_$侅bks )F0d {[v6A/o~5T/j;TlR 'I@DEWօ$SVo~?Ts -k2aֿvDSf Ba|7IN@B'l ފ@: ۓ+'8@W{׻#hGO&twߢ͛ /?*Na<vBjTbGy:x{O7 1Tj;fN|p쉔0ӊ'?~ az#sw/;u+ w(aNJX'&yˊkk<-Õ` Sc)JRRep] $"ms`Y a'`qa'n.h]5@ׁl :L;@}0]l 8QEHUM _CnJt;&ι\U_8\F yu|lޑ edpph.<`dJ` ((.+UgSdә×5pv0tCwcz XE\*wE{ `)9 Ǝ0Tn\FoDkUҜp]0TzxԀ\.1[[u}pG߰([nj^KRnMH-dj*hy~(J9ϕgHW(0X"ꋕRNcIxgdDU8] UB:%K\9`* E) -D"YUW/FON*h'_g&"U}ITׯq+MS _bD +=BI})t]/|[qvQx0Wxo)AUd_JރyCqteT~ ^ G"p}Qy*hWwb>( z7{)Rbp&u&*xz'K|PG9T05o]j$Ӗ|(j`?^i!sZO5 -+Ix! ^78k~/7k!1]ĹWf "jOu>ድ{vQ;sٵ7Ԁ߲+0`fQ^ Z$[(M~ 6څ 0vuaue %0tIXӥt!>ȵ&07 -3WJOB\&./Jmͅy37>sF!}c~O i?K`Tz]]GD9=~(ciӸ~Йz>stream -޵s"ݕ3KﶜЪvN5^žy=V'trֿ'Mo--Kw}GD+M棝[b>֤-+ nz[jֿ,>?;##k+韙&˨GgFI\Ȍ/k;c,)ѵo[GbTn$2&tw5 rGl t }-`O^vQz|60Y(繻e1)?ƺ-r1[T7lR/kӶ=֏rqQsqXR jmǕG^ZGXDڬ -Hw4Ǻ֡ -Vj;L5zQֺࠠ!D7bASdNZ6'iiKV)k1~Z5(njbfo`5M, a g'UjQ$5%(He9D/&uEɒl< `ڽeӹB?b#UïPRo@0$IPÃ+yrҫMhe jFpLx垦wT7HTa`g]R'tV׃o$fEjd -RZ&tE0>{A]jȐDepyBF,fQ'{poА4e_;gR0 q* +b@$`ps :9 t?})Buv-L1cвW61VRiS VV0,t# -ׇ -f F4)c|@%M/ڧ5pGi^tkЎ@Gݸ4 :m (g58ŸA%Z}V GOLeIt~c]7?>",ݲ];%¸7aƸK1d$ƸWF*7%7H_UtëAjdqs^=<4CMeDd!Q4Ly,C - `56L&;bt2X]?7(ݞe{fi/]Dz,CbÑ`:˜ŃF4u"sg̭Zv]VL5=:|8mB^@]o}o~2/F<y>΁c!OGp:qo擩Iq[ .̺s0,YFwO'n>s:ώ媻q=Q\>Kq&8"ۍDu>}QN4 niKcgM9I Ī3:T1:|/W8HpZ7+dU16q=0LAnrJs[[2>`4\' -~F -UE2^ZU]p̦ә1}aKgc4* m1ZgApQJyw)~A@"LUg\Ƽhߏ%)~aƸŠqU)`_F8in%uH/v;YsYv-=ڿ 'R"`"KmnaH^"qgM!EYGg.Ǩm)go&! No!{߆yYü}Ki -&rc@_;r3z(%BT: Z]jv].6e`B8L4:QfNhp?RoCD^Ő5"Q -wȂ(E}W_Kf ;`.,Et R4; -NFn]Uﳼ)DPvXW˅V'Pݨ02a˔m k(7ͷ.^F>A`gʚ"+ʤȓb+$=ŗ>ʼnAFA;|Hv{4'`|cxeWRpy;(`z"1Y 'qLӕ9^"O -IPV.nxȄSɱoJx .ƌ;0wYZp5z;,q t&^E]3BZ;#1^ǖ^WK:I,+8 A!wM϶?8 -\U OpQ/2IO]8T"C>L$^.ތ!XGԠk4izaR/>DJK\a!"|uQWȨTQGjG&T,d2 -E\P@/ns%Dw^{d2b9֤`wW0D,\x9/M%/P!FRX-z&TM1Z64R?mE=o 4u, {vV] -B>-,lbBh%&FE_<2 - aq]" -z('k$J{~A(n o$Ѷk69Z?lyq|l@?[y('x\S# =W ̉@ނu7ץAVqE@ -08XBT!bd'0[d~x>}F:wTE1?R7Q؜rޢ&Z1Jۛl} -. N&ED̃W^ߡlQ~"md HesG97صCM\Jj\DG1V& %\..w]D;hRsKݷ4D-^Y+G>3f'C̖d̍Q9 -%wI|0`rR t@+PHyBAߔ0<7 /f qfv02YrXdW,ChM"0ff|$kiɛG{`nDeƎsR$56޲d"% NŴ/-?cK `s=!Ob 60=b9a ;<ȹ0+h#v= -4vp$E:go4[D(/+ YFi|TjG>aГqU-m#Q7[r%堵 L+/(.d̩^`m_hqz./MKS-Oi3-׈tT -B~Ek-x$.vJZ ܍TO\hj[YAA^4)5.eC(CB;4R]?7%Q `~'+N =Mm=e g& Ҁ~{FhF;-@3DT C(`FgZԿ$2ImmmHvNlyyK%S`FPa( 1 x@rU-l}"I8nЈ xHW6ԕgLp DE+ƮٝTotOb; +6Ԡ"n)Jp[jXfgwX_#թsx^4qmtD +Rn3tD9 y#-Dt8Bv6WCWX{YM|x!jM%E"8YXaD/G۹[d:07nu(Dy8m4 $N"ߗV]GpZ!fNN~|Tؠ>^@Kj_X=a1Ҍ| 3p|7)!@.^ M&7G8ݘ>7&VU1h[Owwpyd -TkOJݿq+ފR [p&\4`mPXJտ$vT^=壨NrT_ȡUA6K-B &2dg2Y-fXA]nw&5nayt~02(sZط, ƻu:lv9ME-oXq"T:gN"TUY*I8Ч8Ea K9I`2L4q0%֑b# -x<+7d8țAKq4+oq3ɜnF|Opu<-Q$"}nB1Yʩ4>R|/Ń:4 =NR Uk2ŕp?9+)n,G!~=rkR9]97k -yd(rN$AVMN IE94?JD4?J ؅(Zpb/PHS/DEj.= %޳&m%3!HO/du 9^FY2R2 %LffSM2>s&γSOqӸA~-ԬJyFgL2N=Zٽx=t$^j)VDhi*#RIZqWUPS"{f.(iw启Gă攻HHCSěȟ'eUZV8D'̊:ďb83 `qu_"qT=*\OWEG'e&s<4}_37<|8ڞxTy1P̿0zD^e\lhj9{%xjIH~GՓ٪nj~\IwdQS 1fVWߺ[ѡΦKmtT9 [x<\;"|,%#LSǨU$cO#84bBӠ Yc}x&QQg(>tyD\& /:YU IµF>7w<:?;jFu*cȝ砗"FV,]CǚŒBUSBU˨H䰴CT, X,Mb9Ɗ(5@ -0䉖K;;E"HlL:WHDm҈^m -95U,NT1ǥBLNqWsnr.17t]1$! 4,Iz˖֖.]uj -E,B>?%}LE格D\Z1]%bN*I, )(qa?؉=N T.?H: "B*hj!GS(M֐h4Ct&ZAN8d!L1(O2J2bT*F)ҍ4Jڠ>=h*6q0dJwn!vN8{s%cKk]B#li"q }AK㣖bnB%! Z 6ӈ&FG"Xrcr& nbOWnn]D/j7GE)\/NJFP9BtB7X.r3,+W)^-!+[èENC "B9hrFC9; -̈!e()\mbϸ5[o&՛"T\3[]-fL|`b.]sޢw OȨUkeER -VdHXt-(-e ]d)JUE`8"2ŠlFJ i~B$6IQB3;MI&JgB-d~1Y?:BQ'Eϒ25D iTEu -.gΏC+^L[5UG91nf)( -18h(ZygsR( mh7҈J m(zmCDF;ǭ5k9[+9̵ʍˍ1UID>1♜{T P(,IXJGJ;J^R}-D\>ZN&&,=ZXJ)j=&K.zF.YvaS]^~x\02=R+"cX6O[wDYĨ9:'Ŧk'P,.udMsQ%#Bbtoetz~DŠ^^D\٢+7[czEf79QT&BEjUTgJgUm|V2#"+m2tϹ!7jAHi$iEqua((BF^^d%" 9PGB gT -].W*\iV?"]\. K\VD杮:HG$'fzg".MHF*."O3(O!ݨ[.XJJdDN*V%& 0ACXv$$zdM&I_I9(oJCT)f b7FYɥ05e,"'2S"kD8JիV;S{'1["L(M;J ; j*0(ޛPt{ -[S) D/М%3ԓ9%4mS"]8W֥䈐2呐PeI)B#YH#5[Eh _4"#KN$JV{,LBB!S|1  -ʌU4.LY-6?6CIdL͊ Ejnl(D٩O4}|-R¨uGuKJ}&2qh5Ku>xr4C%=+/PPd AuĠžA~[I0$_ı a+-%lSz!!V;[M4dDMn\H]xe1|QFA'+Ed3U'0U΃\i50{t!'8'\vs! +Bc~'Wo'tn_A&ZiK:!\2 \cℲ85&dM`TMd0&F PϨ ލ4( .6˄ -d'& -tpK!%s [Zz{8+@PW m2S«A)!w-J@.A < o 4 RaBЗ% -P[^vq{~cAQ`%6.}Sr&P0 =Eo>S`jO{ ( pY}K'&: #LmF@ -Id8 &a _)LdK =+Adn⁡$}$Cv$P(N{ `/EC D~_H9HhhG] @P;5O=B|G8^8`ZY!EhY4BIfVoC3DtoɃz +xN -h&D1 -cAp#n x ocv O88}AP`03 7A](Ysb mcƝM81=?c{A#P@f -AFw8Ls#;Xy)AD _3x -A$#n:W-۾O.B-Z?5X",| !f|E I2dB (KAINRAT7f(T)$Y`-Lr98y 0E04Lic'I A(#j3ɕ,Bx ]wJ"EP7X! Db|Ӏ`΁ \֥},Bb"@^؇`cP EȹY$#ZX~@pF17E8!+BI*Cpp)aQCn5/ Cj9p3R(nHTL(8J!xzSIOoO %Bŵ#XGx -J--|vjJ,#C0@CF -`w Hby(" {{y.$QA!g~>0/rAT4fBPC͆t~hZM45g(*6[BeNJ "!Xȃ@П3x>;Bp] > Am €8UsBaq*@W BpF\LR,5jXKA; -XW!J> ->:GA؋, -=$}l=(g0,؃ ۧS -͓N7,wNFV -UuU@DRTONiR+*( -،x -bM!dLA.H].V)(dI}H6$D60,2B -{.MxR@3D#R!H&K0( E -B8!XI{D -NQz2 -5EAq;+@4D(eE| -AC7"?P -VUI\bKLbC9y(O`ć}?DUDAavQ*#5C})t΀ -$C;u(@,C+P7o(Y:%|?8OABשpߣ hM"(@-"(orw -DpUZ@]bW !X* -x(CS)q!pphi -FK|r)/CG a ɞrOJ[)J Ս4%e6  JHIB =NH7 @~b"[$?S{,ݭn~ OFr<>@P -4d?+Zܩ Xry]C`V4=`]`2Fp|u#e|Q$YA2~d; X>ysa*Jk5ׁ֭=TY {sL  ^Am: B7D9`[p\XK덱@ v<_#\C'q@jXߤF 6E8P6x'V+t8P=7&5?E8v~!TlƊX @AfUQzZJm܀ 56ʄIly=l@nBd'c hZڴ^50;}IE .2 @ - m`\Aȋ6s<["V=@8ĮFqD3M5J\@r: PfMJ^| h0yen Dz$ZáW;0~uP .Y -* IAE/LCN-3 覘p8rFmhz T PI~Nꧬ[BO~>>TO0.䜋$- |zP]rjNGx JEy.ou# e\L\~=9|@ - It Wu_t p:KLȲD[Y>RP!<83xFl?whbbL!؁G xj`u - Bq@daBҬI8Uly.fhtlNJXd(*@)/zU]yκ axhE[U>g$ @@-0jpXZ >?,h#6Lb|}-c+}J-&_ nwoZ Mdn VX>MյLOW <@,3d\2*Dy-`?CK D&u0B~-,=TtiEQQ˿nڣ ( ZlcZ+Z|a j@TQf3/)81T쨰6Z4x-0b9HI ܝ/Bʎ?oZf2nY%V s^Y0RJ(D5ֺD7>T!zne@fY8ixX np1C:k6³1G Ii#3`-0\ԫ4u+X-yk9.5# -*I^W a Bi/ ĊG!0Q2R@*^-P-_"Z@vLKKx b#4%uY \آUŬ@B 6"88pDd7VRHn Z KN -XFVGxtu-hZFZ]_iz.{{- --5eIU?>W @255>_ LU$# -Ҳb֯k`7nP;ܐ!ʩG(K* +V81GBYPGQz4DW'{TB%xحaڐ T0^33mu H5Z=7rX@'"@6Nk26hU`ipK[UW @r2m] :ޙ|Xlbe'f9r>GNC&KՖ&}2\ P-! @rĚVY, K6 - @|Ĵ>oK}G&o/cފ,1c) Pv⻊:Щ}10ñř8Ȟ(y#oDhX02CZ&]Hie sIhK!Jouucȣd哘=CA+HuQf #+pay(XP$\a aUȟu5P8ET0uS(tU-S [ONWJOfW@A -d]@μ|T,2ݞ:*/(=AbxS&Oכ裤r@]*'u57U;# l.Tl鈊ߤpXR`GWHAҡZwPSj0*qUC̎Nh|XRI@>JH ˂IwvCZ+ƫ#sM@{2$a#gOG&M#6ӿKGwϗMj0A6EFs!DGK侄*߼@({ҥ\r2/Q`T]\ r'rt`aW@)ab%끤IA0 ;TNsH}Or{-\v7󉯊ոҬk8S(((ޫ  J UGX0Hhy -s-E96Hm4O8@^6t2v 0spSpzh7d<t ;WhTAk_1%Q-5<y2[z`kr]nY 8\3]R4J.%À'|ng(Rju ` 7rW%4. '1PjT)586,ֽ(Q h.bdQ`CzĮSfM>l -_P+ h%+@G΋g6\:<2~q X:z%@&ٵes %ݤzl DՌJw ԁJ@Gw//}؟B1X5gD _}(ݓnݐb@öLV/_aN^`AuۨocqGH-Mj!C@M\>@ ]BT`p.<ޠy@e#;} Mm8/n̨;@n C><~gn:Ym[ktm2(Vۃ`]V-UYHfYJgG.7/ iw`ul Mxg,xvyp|nYA$g}Ϲ5 t/0ڇ3i&̃f< 9ed$VOT=`kiȼ43ch`186 pe`BQTV0D 8)A*<>cz8{: "B… رF),q~߮E5OA VDF+@n }MJ0+νKrsW -Pq W2<+D@Y! -P_&Eb,(5楕g#ਊ ]M`*{>`811@˯Zb0!Ⱥ_ܴSb`$$o"w cDP Z9{ ڣz<*4[cKTBp';L@TߙFQ~ӿ'aZF7a,4(C;[T~lb3pΎe8o~O4Z2Oԕ/Њ7/E.>\Z- -bؑAL ¨$j!Dxtm詶(* %/L*ɒ=-Lh,Q݀$|z& L^" -@}ZR -SP &˙I *"w&124|M!S-ÜV:$_бk%-ME1P0b^'´t m[tYBq(Q@ڈ05T|@@{\Iǰy)x 7W1N4Fjڂp5Ne3A#(xNu"eIs-A,(҄+:N6 -#a G'R(u$B]yPb OqOtBE4{|Tʩ%xp}W'B_ej;~TU` 70?*2E9 ->A*!$ X(ŋ1?I;(е @H] r- Lg4 D˂oR)`ÅG El/eqT0B>:&rA![iُÚ5–kFz[m(Q)cOo#P,ΛQv2I|3ۿQұp_ \iò$IxUTtKn*'6gx5dO(Jɨ#]8l[)FK }V‘_ˆ:'rR.0bHcBxǗLwܶǿȶd[[v؀%gJfa2 یu䖥Lk |aүllMbOSPp -5cBqh%j0F+G9 B]Gn :ᛅiiuCia@?R7&GXg/At(ڮ| =Ki^c@N1? ?LEےc'71ڠwP{&3_fiP"ۍL+lt/'D̕PʞȗGArV`YP -K쾚hU'eŴ u t9 'FQ쾫gC-uQ[n"Mz,1*Bf$>gEBL?p s{B"+a ۿvzʳ_|F0@S m5QkZ%ZKSahN8+!FKbS ?T!|+FTU[+&/QDowlrCu~iĸC`Ͽ~SSw-n}: O#eC$L(~`{,`NCwJ/_i& -gdHSIi U -oncu_./B}{W3svApV+z.Ws%i:LjBbݨ|O (ۆ 6SH})6{|ʹ:B:2 ~Uwn^]c 7u~M%kdpIbsBy|_ݠR1yu$\e-qTqz}}mh!UA٭οrkPz[R^}S7a緪 U[*`Vv6sZl^P) ?ԵfWC!Y~j8WL~(SK w Ym_L@aU"w~k>W3A^gWn dYy/1kQlTCUl切nuaè hɚ#ԥ~4NmEE2XS9>VhQ@ 7|:wt^x'zr ί'־A1һC6JG/Ko BxgaDhӞ 4r昵i; ]䑽Է3BH; ֹ)НEVIK@;}_vpAܩ JboiNSWafw! ` ?Tuv%_b\dwM==|z凒f2o -:p,b%6QFo"Nu(՗.(pޗQDf@re^U@32T{{P]Nu.6s)AJfԽ922.kh?n6T* -R[_bMbH3~o_)+,P/3#r_g7n% yx|wc?`~ݩDhH>'3sVi件Ly罨I0?Z23/RC)8*U'!VM7u9r1D_T0/ŗ3a~'k U U襖BG&2ga`'fu^AYɛS٘r) `Trl)G?Kt2Wa~t0,#_>{.8Ѽ җG{4!./1n˅BLb~fNJ&(v -$[Qz#K~Dz1?0.QaE.3syO1? -|**^~WKܶjb,![*nO5D%t}fFp=F@SB)I7SݘV N/B&~?Io吟뵏Jz/_9֦!^Nv`Ddqא?'KF -Hmsv"jukl(IO?;mYUR&Dl.8]!/_%`$&4xeMq+xGq .H)pǯ7^T7~D -"(X/JY OR0ЏkjM}C;_onK!ucfBNՈv;!wR$}.~OH</+O -zM s+b@o g UJdY[{fQk8Z WtIJ-lb ڶFo(u*'ѽ"k8/wk'4/(A|8_}O~r&?(x|?kq}_q籢t6G!D A!VJ' Ǐd 0=R=qjJ " _Tw6vD@>b* -!\?x 7][G'L{hVYVIK:*U5D/DL/;F8hevSI*1hT%;GTιIk#>o~J?'ZrUL/ -o_S~kdTK=s%~!F*O4@tg8oF#EqO}vI͉Sb'Ӌ ~V|u3HmYYa rgR$" aA b-Bߛ#A~E-V.`6=MbZST)jC_'M/X ^=qO(滹E'@tW&uW;w"=GE,/HΧ -@rWÎmw4)ݿw7wU1j3w^yܥѷjFWamCحe_F p{(dt/ sqzg_.%P-Y8V55rZVE$1`͝r!> ʶ? OCig#/4p=!2ql`xbBr{qMͶ}]gw2q"x :~8^>I};+S^x*fG>@0'UsiߜRnPE5jٛd=8;R ͝=/ B#cQyGj MКXد+GStd;ωq1[&%+!q,@Su8m,~55~l0ĞwԑxF}I0,BM}`#UʼB!O(_/ݔp B,8S߃\麾p>y+r){:~^}@o [i?^p=`JwFkkѦ!`TGQ~Gкu?U(\W1Ew -d׬h}:'g=: fPKFZ_,3ce3Y-ρGI)IB[i]e*u~RWimuIq<9\2iHI0PS;+͏T(v25Z=]OWA04r8vׁ03L[Q"_=qŷ#eg7E7L%Wooآ{BI9>N]_=W߱Z~T>>uuiZW?{퉣g3Fyګ~ScǔnIUp"#S9^2^<Dtsod}s+E \Wd cb޼`-WϳO3 'vf/+;WHiFY4>:_*/l\V3toV=zYa+r.zJJgk泚rE^9FIdc-ɦc+C@ssy0r9Gyso;aəטt ByQ:c42fn -פ}2Y2pWHٕU%I|_,N.Fss$8$Mՙa2瘱{.g]O;>+񵙲Z!s`nTv!ca"M\N圁VQ-,~Ao,1`Q쫤?Q0 mgIus"Ẕ]%ϱN7#*ͳ%e}g,5҆5g~l19ϡCtoÝV+SAեuaEHVs|~=Ĵu-G[L0Ԙ9uCyS:̹0aHI5)ix@JTa$$H*os@XaN`/D)I.\͙:!l v]|#"q;d\hrSR:{sBe&*vr9K 9KcJr$}~ٓyMM'&smFmqWUAA ڧנ6Ȝgǃ \4%ٕ zRszcgPA8Is!,S >nUķm$9d@뻔J\J3/^Qv-G樇?aӶl%=Yz[pm9 F}mJ`?2^@ -ÚUy>2g|A-/*ɫ1q?sH A'`ѩΡ sEyΙRhh`dzrZXÀKJfusz -Sa%^8E&SWeRsVƜcfXs@a)Hg’$'ta’ĠJmM=j Y9;=]DF93w:0DƈcIdtcKN4@%qs{4$}Ѥ<|AMoK:*kXrɒܤB9%˦gsv>"Cb9HAD9ݶ"QeI YUoνߴ9nd˓%W m99uJI qD~.[?=tܗ-6ѓti -i&mtؒ~Hb :hK"wl'bIן6Kꬤƒ9MbD@d KIb)r홎82’zd^ -d t gMsl1ӵ)w?M\,/|ޠ%)`XIpN~Q09 BYIPF+h Kzb1c 85-b`I`"T]$Z֡(=&-"PQ^Ɩdt&At! r&OI{:>(=}}R+oagGEP:gav,EhGzAjVv%ၓ75c-xv}-T: g) ¨9PA<')ոC -<ڂu8VҧIjP!  -N.dk=D8䎭R 6 huzB:!g ǙIg+' ieMr_%P8_vKx#&hLV[y<5:OwL"Trcn GAdoD#b>`|t9)`#x)(|\Td!agf2pR)C]'Ֆ-K_"43S)d~F@7~M?I -S6_cGAoKyzz Tsb2؜yY?tRV= )4e 1n,@&Lg›uXQ2i-`b@|.9O纻qg V2mbZP944rѠM $q8, -4pGl- $ew3ӣ@!ZrM 4LEo%u ֥1tZwۻ@!z(KfZP6ao?$qV#JS&CP֌xE2KBFGaڬY5M<\ Riڿ> oR-#vm&L)P=zC7Pa}{[f^&DH+BƳ8=Ux^9K3h>T#$d -cfT>["Ob >VQ&8\UH^)]:0 \@]6<b~d&je#UU? -t>a@^U e ;["dG #S/A$KW0ŀqcwU~A\L 5Oaۥy.:0 PlSLmǘ7q@YڗajLV)Y9` fCD~/ȋO=>”@cՋL' X W  7g¡͔Hގ-ff2N>Aq ?MnaڦL7ćZH=Illn S@`nR݀]0 w7 `z^(@ZHhRLNIMCJ _4ƒZ2X}b,~!(.i?I~HpHQ9<dC~;5QD1EdG? T*ӣw)Ot;]CYed$*OJH \yk$(ӓPG{2!V‹̻fZª`ӳݜ_;^qAg?q? Yu)ظvLz1əHl^T&Dg (a+˶4&@7g%l2Y<9i?I…#Cf0hV݁Rbnu;Pc5p&@Z(X6;mO/̈́V֨gCGq%݁x7yXefzJ$]D4݁:G&Dh9I((ƦK, -Mms',=vQ Y4.(u$ -" -"&~bh$yDHg - ݒ(48Tu8t88TRk @aq% 1W*zHALtұs}N -ʑ$FM\IӘ苂>-I-@ QMZA&-t 0Q'͈@ST`47h9F40:s)KԲ_HK/ -v$Vu=DAGhтD2Z5-yULMf8U+<>08[a,a(d6ש߻'F FtLx6 g -0L)am0A&\"`O5`% Px&1A`k& LG{&j#1Q˜2&H ž]2e1A(½~иSe4u-iIFK=S#5dY -$ /4<;=:9ntXA&# -FH6L(Kg-3A+  tW 2Av -\ -L34>|0U傸'0Aa&u$}AFIO> MjLLA&4h35zܽgjGvP,;P8–9e2pe@3%GF;h$EwLtX A3fJ$c}.$8! R.fKcuu}gOZ(]ʟ(VP#o {R<}:^A)خSh 9X&I } D> <ڂR+Bw#5W*~ߤ8)©j,*XwROz(3[)"B4VyR4W;O#WUPXW 029cųhAOF7X2o6B~̷!p[*&]zVee/(ُBTAu+Sl-.;_c$u4/Qhr۽5$6œt k@}A$!R4 -&PK{Y 5[TF[-!i D$H5;Htf1BMBtO$ 4G`GdidA%x֧AS~uTAXV9aރ~̷7JG[5}$u:)\v)L/66cb xL/lJ B6 Xz3X C-dz -=f m {8ma5wœ 94)!!T,N#@r- OGP -{**]ƥ~]FN<$Dй^h(&*'#hjİ' -o*)cQtE6iou(k?OxR799Ӱo&4iI%P2 %Nt%o&d0=dOShG|N&hN,mϴ+em*/OexCtam0#Eiԥ̨:)h/otQQiy@Ѩ(:` ^OEGOYM( -\QFJ -)Tٽ~CT$F= (N櫕5IXHbI -IDƦ݆@"Og N+W6p6$uV`ﮨ#(dīCSQ(W;dcH5amz!|. F%uL q5U*.Lr2D5JMuhģ0bcɈeKϒ=N\ Jfݒv%<\j슘k.eWTΝǠMH[.e`].C+V(rɢaj>),5MBttdtѕO?]bњӥ4k(Mt  #7԰R5T)_ӻQs^cbu H%.] EF -1l(5@rk\D??sI$aU {K KGW̥ZONAc-K%J1:EJgƛ(Su e qRƱ.tXmjiRJ|ec)SZ{kaU[BtZRR-}I-+-rT)чۈF,C-]"Kʼ扩]pҳRNe3yb- v$)1!P[ %-n;pKG (f|!#0qֵԌHS;nsb+;eZA*+aɼ]<%c$J|-lDkW݌쵤&?H@-qԛ%@`M| yi%1cBKvިUGQCIgI*TRDA揪_h/9(K\wx)KzΞpwqY"u "5n1 -+dj> )ItK&3 8;3+R ӅnG{vYTR=όR&-ɺJXڒHdHA]0<0+|jn)HZc-츦 U9'-UXK֥81k*HÕQ"!pHGåO -!\q*\2oQ{zdp~P atE' +gvL7g1Jl!tQa8Ҁu%Arj)`K 3 c]S?R:NF^kIy%|Z PdϘo;"e"mxk֜tj/@9£Q -c cj׶rL3UqV]NBtP W2SRl;[2STnFRgpT]6 7iS?M=lWL{H= -&AVM):6B8-nj$SSm6+~8$XG3lm{[jEIiM6[ٷy$_n0h*z$(Mnzd0ƽڔoFyZph -cK([8Xe|e RݱdAS5>MmtӀ@JҐu od~i}cI41܈yլJo:$wY^Sd# -u ̛rqu5eR1%
    ԽM5;ONXk` v?}V}ob|s'nc.h)$-ByܔtpvpIBx upbHƃt}}c=*hEMN˄TqD ->k&gD}0B -F Yb} DN>tg΂L#*ul儊g. 1Pz])HEj$ru(Nӗ/;|HX׫qJSPJW'e _S_Fډ Lzj NenXVUO#T@S=Nꇝ-grIA?hÌyZEd4f iDw+%rSbsvNW$0Jd@S%ON#ISj%heCU@HņIPIYGLcUPL mX}OeP>ѧ1'P2`?MsEDIU[Ƥzr,x4 AI@2N%RD[tdYiVNkY7+22, -Z I xMӁ\3k P6 *b,|>g88jRObf}1g2SؿXPBRcW[u{"@140y-S8e*LZ`}UPr`kY1U2 s)+JokJCU;_7,Scpm -4I3JeHV5Q;&,PɝvBXJtOH p\ui8mXB\b RjcZ~ R?3,S fKgw,r@/ץ>XAy,6;MMu0;pp|EX񧾛7X-p% u?EhM \$z.( H s3ZJiouJo5,m7k(c1wLܮt)Yj%BcU͔&cz>!_t0 Jw*Ha4Ǣ7S،{>VΗ@H*¦CN>H>HWЋCcUQbY$.VWc6*ml+XS5r\~cQ䉴",ܦ9]`OeK ܬR޽Ɂ}T,v!X&{B1A5~3YvKSaCvBQSqLgR=hmXWVPjB$ -$H fDG&Ue ikʨO_b_%(ƽ su&-XO48{~t-]?V$Mۭ{KK,\<$> b%QRơ_'+;++P!dǢޔߏo~oz gk[Gtqc6C)B.I'Ib~!1\|2E|,xA'&k~SsF-WX'w`j"?w >,zN*UPcǠ~gSJ5 c Nc hz+0_2LXX¦gr Y { c$C[ჺch2c}&Ӣ N"c*d5:A>xj磨Q~ÒZo(F .* <X67я_9g?G~cEJ[x6y~,6Iۼ $9-?V˨9M(&Z c_lPr.@V7- r kG]e= Eوx^$ -^;XWq2 cN8D\R¬Ę+N|Zcm8b^9.eLd19 k`:b_omv4rǚ)>Z?VPa?VbDt[pIJcՍ8}*X9Џ}: W -{xUX2K^mv:F?mCc9RNXc1 "jV^)c_\d;&(!^TOy݄|,a=V~U=jF[=U3[CRtd˄GȅlQơa@>Uz6=֚BiG{,.Ч8T{~jX.;H %?X/GK!^u9՗ 8'yIZ>:uvbeB]xKdhtIX\[$p!¸R秾p`=Vm(=zk fP4t]{4qQ< *U(v,r!X@cg u,ձֵť$E!5Xwgg3J k+gJYlA\9cyD0Xn5%O];V}f!t b}z9PctJtK2A|rxzA#nJzh>uxd5P;_5hc ˗Jowrlt\ږ=$z)"shA?^ϱrĊsnoz2c"NT𿦹*u9ncA ir}zK̝̀m;| #e[7b j)DЋL1,*VĭH5/49xo>l-Z0KA;E9IF7Zɿ7V50oB:I}rJ -VK z+Hjm #X{'vo,xRi^%WHIX h҅cIT:/}cIKH- A@R@\ 8~rm:קX1e FE);zc55EuoYV`+Unk}|y pD\x~n,l~D-kʻSX 43IAXIƢI~xo,n%84 -78I\mXat2j7[8+wצA ۉ̄x1GpjfoM0ؗ@\$@Ed8E h=o[ 7&o]Rv`ocI4xﱩ:UNrE͕p,Ǵ+ XxcU]68kBc*3F){يp,±0vL"+*,*|'`M8}xHQ$z+HK8Av8_±B㭋*^ A} -nhc!58i!(sgX˸p7Ӹ[zGu~j c'~qOEFPZUFQ\Xd-_."?TZo<3|bn#Z"z!k[^,r`hwX@`c3jciSџcr;.ee x݄*$܁V>)k3vH_C+TW݅X2v' EO/ DIKHyJeQ0P.`,*uށ̝w4 hZ)ZilH0ǴW*71SR)"#d'އdS%T$X: -R \Xfa@z!1Цcxd%WɈf:[ͪ1:Ǫ M&sDebBp@ZU~ݮwE'XZ>]FU7 -Jk1V=O܅1'Ҋ Y^- IfsVnXg"X4|u],0C,*M? Xԙ0ja,/Z:O QRX_l&Xl|r&jkǎ;U a׀#{evYG ,ZG y=AQa@0ֶ QEi畬7`,A; QI{ub1.&1ˊWO/V)fAiOwc*j{ K'BqKX}A]ڽwörl/7ɮ+fudn1D U0M<'Yr˝( jx( - I!/[T!p"MW#+N):xra0\0OЕP s#/T(:uk7ӊM3գ0f, - t&)aHRظذkY.;vq?wFFcBy]dF|I!H#EGZk8>&-eo&(D$tP*޸bݢi360QNk$ On3 )XhTDE b3#D3nEaOeeAx >{g<9)"?n} ,Mx9Kw\+% U0g#daC?#X{bs@0hо@dX]NL<$I(0M d}^hͬ\/,kd.\~nprXv ywdIHq1!N)Kg.EM! "a*#RЇ˰,[I H I֑M f W!}Ɓį:ae++#ʜؼٝͲh6 6֘m9߹Hcv#<΋hx>]Lt34Ӟa皞R%%*QRD"@JsU4'{k.hT^c02CPBNuy꾜$D>/YAZr0̸0 !aD^?±9|G7$FGp %"0X_eWX4b&)ƙ6-Dٛzf)wp)8a!$D¶P/\ĈMXѭ3ZW&D.AAZ*!:}} ^џ:2gἿF7i 9?%#|L -GMg1T?;t|a31p>/Ql ` $5/d$ؠ2K"@B -q&&C3 B;jSRVjf*a+%JrL=?С)>U">UtXh5/`<|_L1C~F_Oz"lixr9vBP/4&A_٩ @Q|j"pL(Bwp -+j#HOVDBdW6x#M I7R%KT^HD̵fBc1$42 -wz]Da$1!a~Й>;MqoმxrBHl~pEKaI&bXE_4NdCaFƐK& =#f~_= "ea.?"S2="h֘T&EQj%K@ND,݊ňt'7v|zpx -V\fS|6 t_ys2\Fe(WPf/ s1^R" 7q2Y T}9OqoXQ$ w@["a6L1G!*HnC"Byĉgm.Q0Ee-ޞO ᥉x̃t 2O?D)M| & ')haAQ(f6:/TxxOb6]8z4yW3pp@h v.Z - -F^02lBdO]oN`3A_|vׂ _=f婏((NҢV_ʦ9Za3ٗ>^ϵԀ̀f1 -Ȍo2iV"3QEf <S2V`CSCq<1{ z0U5>f,Xe?!N[Jis!h_u3.njy!d&5`)-ݐt-U!a8׆I3 2"Efs |*+h w2C+ W.:.rlzyAV`-c -$*r(H AFШ bF-$-f,hT֠+wg0*fS ֍"h_{7"vEd *fN|$f$3AY)UPD}~DrCpeh/3h1!h3ܗR bF!jZ0[1#?7MD bƊGį+f 2²%X+F?dBvY O4·e'#Xخ3fP8Ђdƌqm̰nj)-(yX3I+ccFD0J54t0>8fP"}&s3ZQy̐A:f2 6fs!>o!ȺW8J!3Dw;~Zk8[("( =e>fhdƞyDq} 3nj`6fhfnj_ -1CVWJ3^ I},A[dp'X3h"4Wqmc_8֒0W5m'FY\FctFgI)L?9pm4L@PgՍ]K(-.+PR阡P}5 ẁ|硅0DZ : -Ev_5X Qnj״)3OF0@*$N]lT*$!l̨=pc>"rqBktB{%:7f6(-5yaMtc IIl L;fVdnjaNLTcR DeaC#&aæ␫&Ňw:f;1nT$P!A^fcF ᆤfYl`2eĖjNWk38\ρӵ.;D. fߝooG*MQcFd SRGm48]6OCabq{89_;uS>anjKA> I`1;0W*h.cFz=fv̨0njD@wt$1T"mN<–H22):f}NץB棰[(qғ By8U'3RgX?9T=֡ܜv̹졂4 3҄)p;dF - \n1`K1;u -43FS!3z -q9jJqEf䦴#zlEfؠ Hʀ kEK2ǵ4Ʌnd]4dssV`!3FQܢ \y'Nks8`eЕ* -F/3p.NZ&-R+Xnҧ-1ku2 tH8pNJmgNp @ =](ݔIML_yf3eKW&O^xP̨=U2#9J̳ xLB Sf9I Qf`Eg,dOPm]Of0~2uY 9PX>)6Tu'3xHZ{2nP3Їg˾5)@4kPuU_'3>6esGeh]0C~^h}3ouKƸ!Q7kWǃ_>JE \{NfT)/3s2 +Ú-V`g7@_ЫYMZAYNt)30/|33~(3؉%}Ci8Q%WJlC>D:^\hCdo&Rf7rG vkLrZHNʌ_XjpSeFrGI.\I*3cw -~1:|p%`Siv/Xyp~ . 7" GD̹[eFr -QsR_~zJ9SXIeF׻v(Qe|Z"֓"AqVG{Ϋ2 Td(HYeFf$p[J "JJL3JȬq(xIΔf!4rhTʌ:! ʌj a2A5¸Љn>1]eF V:h]EVI zEHzkA*3^CU'o,ϒ0T24OFƪ$ ReFk],A+3x>,3G2#M/2ätoq>k@T0yQՙSU0eax EXf0Er^ -PM8ca"_YcGհ :"n=x8ۜF\fp[} a_Gh8gsҵ 3zacM̽[K` Q.@-:5- Dh8K -XhWfL3+XO0,zR'De2:`{K@,3)l4+2.Q64;2ǀ ѯe0pH 3bLV-3̨E~V88 @!e` *z(vs0*2p0Q@Pl )/|Q\N YZ78Ha`}ˌ\0HYa48]w]kqh]v0Aw}ռ.3|ë.3 -9ֹj΁0C $EҙŁ1xaBcND΢C\;ˌ;Yfq $fOa=7 44#= 5.?ߥe,=,L0݈;?X6mT=Чޮ%X 6J2bn#לX:+[ʡXT{VXˌ{-3lY>Dw|1y^f7DeƲJO!q -'I0\P>o-vJIedÌ78M )|7r04ҫX2j*/àu,<ˌ у=(m -f(ÈQ٭,F濄3h[f )l!1XjjecG8Yjw6Xf^Y0%Sa`MW/U",vHY *(Oh-6v74J %јõoTfewdᵗ}Sʋ~¯HQ1 u:#"6fi8xwV:-OiWfkk6h<#x֏V@&f? -M*W+3 idE4Yaca.mI/Vvj'BUP2S -KpJk4.7Tjzy%fxe q_$s{re˾]he! LD)+W:7'*SA\al?P#:eP#1VWf0/ _qd+€pE -9%CASڰ*3ZK |Wm# Eb5-cw*3ʏ/mMhQ/X0 l6,$ZeFn+%/:*32ؾB\TkB̺%Nv bIVfDg%(2!)YfQ3֫ż`0ˌr À\jB)g<še{,3hDXN0=Yt=D se`1kT,EDԵfe."@=ps0 alZ֕$CU2Ra`e -nPgOCt*f9嵵4|VfSRҧ7 -XUf(4@ej2c"2c,n¤> kdH, Rf;2qD.ACzUfOs7UfXiP)܅*3P&MYؐl68Ӱ_>)g2cP`VXиP|2cC'uaRO~G™f"ʌа(:$$L. w>QN! +3?ʌKz3iHSVȸ2C! l`XH5>Ȑe?Ń̘R{Ufd .̀u@we2;|4\Pޥ*3 *˨̐NO/L*3tg 2CN(KYf_>/BKD[y|_O,'NC,%kF&2~鳠zj̐k7;\?m`p3;qwf`d"ʾjL9ݎq48$aL9er6)8( P $dMӍ8.zma!H)ѠJo`w v>*) *ē~U7*CnimI'%3 pr"Hyg`Î:KD7PIDyYʇ D o$3NxE›1gɌx˧8XuKIf*qK/gPrw_ k#dƈAlw`$_x D8t0M:Lf%d@zd5et?y&3~򆡙d'4R51fFp Afd"6'F73Q-C#mX7e@c2xUŬM=0|=m2FtpɌ{p5"2.iW?t F)4 -T̘%8 dिDUL7ɰJc@1ѫh!328ثBS!?vTfD|q)-j܄;*31 ze[AeQ{E+Qc+Ld :mM Ufi@2ײQfXZYD *ߕMI oYLtd&?[jYOf028!j7g?mɠt0WNfai;S F}C EVB]k23*E*eY ][N* 9>NI-\-JΘ㤺 2h -|MĜ#4]O`ݎ7:s ͥ8ױ<14MrQ ]pi Oni2< ߉ FwqsNJi$i u>DaH\7Q&3X3R$oos#(љD4 vU lM*%AU7 U-yFdF7~:~2&jo=*ʌU<ʌA@/D2"aq-F Oz91,) D ,Pfњ<'BA\MΚԀG3'3ɑ9Ofry"Of$Ѿi `<[ Pf@X+7y@ /WM' Ld6iB$/aS3NbHou;cJe{љ+̣@ ˺7adH?'AA}T:bΓO -j2Hw%3ȨwN"]F4m!OSp{G %paqi{]4FuP8Cu~d>q)O66 0#0`P}ZF1ˎ s_d%Xꌉot2Sl|7dLc~!3޲{qiN8\O? -tX͞sS2c- SƋ̀WMKfh 0I&6& d+]^V Oog )|dH~CrZew_=2gFWۢvyC"cl/R\ a`, x4xG=@ !#E@zW ,^z ᜟ:k{ -c nxldFrs` UҖɌg[؎]W0p@o<` :K)ݧN`x@2DLfYHL` >AK `pۿzb#DbyWV උ9!o&3N˅Gc<49PzV1jaO 솒;.c1%3ZxAq0V\!dĸdBڽ%3pһfgdF8 -]f?oLx݉=rpkڈvdF큱t3Df>Yӿad%2~Ts%s&2c.R1RNd|~e}I":WE,\^c#<#CM<_%N t -'{^!3B J3 pDi"5o QnP;t?y0"?n2#B3)y r+ˢ - m~HF*{X#33<v s 0%BB3I/cK`|Aj 8$2d -x**RG"32gBs, =dV{~={ -]ֆjOYDȽ> O @:lO&F2ê&؊Hcb:{LAjƕ/hbqDg؁ܤLfy -/ -6()#E.yfwZ[M[NR`Ɍ]Ob3?> īAfgvCDȌT5d}˩ 1/=mO=2;'sd8`0_"Zv0C/5NdȌCaӌ@rS8fz# .-̘(г|r - #3̡@աmwqE҃T->/x&7e{Ǧ%\JͽV`; .@f~␇1Bˌy  xNEf\q|VTa*;1bed<z3*X: C ,/Ū_U1c4bTm4૙cHaU {*cg>fLeHufc@I)QkF`!X46Yσux]SizmOMr]nj&5+''=f&xs;PYGs|AqxyTяzh}Ȯ;|N{j>$аuw2c F6_jѹl0B(> -=.Hj*ִg^ҭ2h+0^_(uZnr/x g!%n9Ӟ ԛjʶ?󎙏nos{zHH{j+_cOÆpWrYVD2@jP|ɇ/!c{ʎjz8mm~q\Bf3% -MCglsEs!H WG)Ef@OQ樇1<-u0cZgk2A9d -}1`{V y$4dSilU޽~(kA[r޴НZ UZ _-Ⴟ>Pɀ*J}ؾ.OktT `7_?"2E51c`[Mc+źz;XYZT%i-=Y(cA46fjfp3ffڀZfN~.fݿ$2:r1# -ԄT|l}R1cp$3q 4$T1ci( "xbT|E{XhTHljr ͪ$1`Rޗ~Y7&bF̍5.Ajd-6J RM@/ä9ĸZA e^o%P>,_"ujO)f(QȇTʙ{p[UZ9js+Ȏ!?\ roӧbWHUL >FnT*1/X znČ]M&V J@q["fi!C̐W JǘJTR3h-H -Pzm <1Uyh/-⇢GJC &ft.d~'fGg7yckOnV-8+&BѱՅ{ 1 El/aey|׬JuW ׅonb?x.mw Wn ʈyTBLX;eRNakO}1:U!Č23yqLPF{?q3)AvD=C}3.8B3z^T̰xӚPLknTB4wSbF>+[qw. -~qosǐqQeΚWn87uߒ~(4mP*'Z1 ;z"ZΑV3 ;؟.Ō:ĔGO3 { ڲ -wPܱeH31e -qcfw@xZqʤ^g 皹5Ot09+0-<19̞AWQ^CϢRpg ;!/zR -QL"9.L%k⤠)R GZ'5P#69fzL9VRd!)]4QGśj s̨}qv((,fM3n7 -Mi @ѥ> (kAwKy >jpc=T7fؑL2[K4ӊLD ;]Jا]$jX(,RX3 {6flΞ5fƠp6KCɛ3C&F lK[?ɋQ& 3|%R;1':J>+y{A]7͋Bޑ^NjB}Ro9Լ(ܐu j5h-'3ˋ+1c>Q0"DQȭIu,|H#X_꣙( \@6hPf3)ߴ317{=f4'(nAMPDAyCi1C4 1=| L*ha0,0>Q=fD!UcJdXSsikU}ؒcH(ο3)R@P>yHVvbt Kq6('!(Џ=Tؘ..MWK -bei_blXƌXU㘑s48ڸD!0-|f&?Ck4DAr{OtrLNWq'vB$SyO kw^ah0Oy̨pnj`҇#*Q@ v1c $kO3Dg5 X;f Feh+X$qTړQ% - ?63`{BcCן0pC>m̨^T] {3J9@2$#a\_1ct"9DnP*b3HIL!LzLLeq *fd&0/+֫d0`1S:$PGF=l.=+&Y_OW, dchDci=Fx }ULcCӘV)ƨYcDQ312!rI6!Gf l cc0R#L5VgѫX ׊!Vb#:I1(vw0xg#"LNFX$ -k|-b?jY{E@)AR -~;q0T~a.00Š(xQ EDƇL @0>!nb ^`bk00`nx6Y*$ J/ΪZBߋͽ@g1Q{a +^d}F/=/$h^"Q/|/pbB ] 6Ng(7.bB|څ徒|PAKH`1[مB^Pvu/b[+]rbv -Tn I-IbFR nbX/, c{rj+Rƺol‘cNtl%Xiٞ=}@]+A;k$I9Kf -CLk(O|Cj'l(vgʄjaik2L}y[Yoe.`0ee[cr.a/WHyĬ՘42+e6sŃc.uQOLFu3톺43myX5O޴牺XVMc o#dXQiXw5e9֛մ\$jfi0 apҞ^*ᖺP*^qٟ6]HL]S /4{1C0-W@F"EL;.@pi -tANp06sѠE mJsB!%'.4H`.Mi ߂@d Zw 4-8MxlnPl uQ[,R-l;Ԍb-kт:`DQuLkFZľԢCf-)eYPa0ZG?E f/`Z,,dᝅKSsԖh9 BYX -K, -%HeAhʂޕ&d!dҴDY 47w,.cAKXpae @,Tid0‚ ! JXs43ú{[ H}V`[|W{_lB҄´^q'f\į,WO+`$PFîH릕06/ -qEj \ibb0>X+TVxrZqpъ" -wڍ*+rxe!+8,?gpMM^65M[M 8o+ؙ7 -#Kmũa7 -jj@T{ڟKcfsJfJ* R)8*x~5 -pX'*,d !kB*i -њbAcRZWm+?(oSHu\_Aǵ)g{pNQ| o;9>YQϦoUS篡3`kSðIELa -*6KhlZ -ǦR0X)ʓ?lQ -Pxjl0 -OgWR,TR0C@H -`(e\)D) QGAbZGڂ8 -^5e(ʳM6ߋ (06* -:oEQ~2p3@`#p Q$W>{dB(v ˜[CAtn~ -Xׄ?܈$NuȻninv`nR -[΁( -zfV@ b -J\DM'D'Rn'dHV''o{L;; o ˴}с7_<1y;A~q'c2ډ~iuӚNpfp> '%V8$%Y g* Ξ Au[F%X.nYtKM\rwvŜwߡQ%lns7olSDmJ R9¢Dgtlx>E >C %xq-œI-^On2'AmI@;lNgw<Y[GCك>}6-{%<1% KI ģ$&& $DߑHHշ *, ! #Ð@ww]A!SHȰSVSMkЏ0y r#G@0$yG`{)ͳnZ7􌎠k9qDiG8,!W'>QܓFPhfDe6_2f^D^-6Fh&1B5a[!EQ<ѕpqءE"y bQM`4Dr D\PEGRR,{D2ء;Q pz,B Tmy>!@'Ee88y_WBB -aS+B, `$4!WB$c$D!Y==uQ$,d jA}7 lGPz7. 2=Q -JyAlAH=,@DAsV Wz΢k awcUF=}a= -O`?ث?)߲e= F ۳ &hfo#Ù-g~ = Cg&`@}Gl'>}IYhꯆ^>L%_O3o>7َ !(N !AOJ9y%ǡEҗ5X6{跌8}Mp//MO_0r>zWf,}%Dl{z=gG[DY|y:v%C/T2SKGa,f>*>='o':=>}Η;k,=TA~ⷖlT_O`}u~҃aGazaGoe`9Z#/=ƿ=Ὺ7{߰43yIWKđ4 0Sz d&=0nʨpA"8yZ -ټx'aO*ao!e`ZP F@z ,=}qpW&BOz` hk _|xTz=&fk!R4 Zh GI:\ECè04p`7jEJKnaCYѠ㮬+:"֕Ⱥ@tEC"C0E6hП',EBk,Aۄ&nACe OhТ! rL3 3GyLrg0!r ѡi$Fi8 :a(f̀"x@"o؁{|?2$DÓ)N!RJ 5dhIz БAGy"hWȐW@0a ?J3b,T6J[ \1D)"'b`)bb ; G@6 Ɂ +EE -CʄAF f !A$$ _-/Ё9~A/~ x ‡=Z/I/m^ -@P/xw&\' YvAe)0 q""҅tszpoqA  \oa--굅-8hHl ٦!(UzoP c?\CApi3]Z浑ix#靿ӂ]qK ) 8S][ZXB [-|Z cA5g3ς: rܢ`lKls @P,`YQeAz~dA@yd kX(\ l`!9AL+Pu` G_Gdf#v 8 `A.S3`a` -Gouw Z4^ -+8Bgt땃B cWzSnST_~@&dePA?~ɑ DI}K7(ݠt~ߧef\*.r| -\@ y$ZGeѣ9P^G0lp !$^jj-1c%f2b#U]=]D!hl4B`:vCK"!0uCJH0 KH"86:8 `,!>`Fcb#2__}ivGjt.\ǭ[k$}[?~i:ۺ㶆Gb? r]kO3>]Wnkiו[viV???~)4pcvwᙦḅ_irgXؿr_p m_ne޷__oLǟ]xvam]mg~_i_=\}a˲ #4n ׯ}Ұ[îu {xk{_p˭i?1c/#1?؅]>stream -n۾K{m_ӭӭ[.6m n4z9Op3} ˵w_][޿оrg} n\ӯw=<˟n:~[oggzawr{W[ߥ[rL q]߾nڻeBݺ~*u=v_ϭʭ/a_V?]3 muߺV˴뾲춳_ٕi~ճ,2ӱۘvEVoeڵ~s;ϲ,皎}v ov_k_5+m}]!o~=e[k8nLm s[s[qLӱ|O1,/4 "q~#[~:neXzkyZdz9nv[ynkyvenٷ\mv~kߺpݙܺ޷. {׻֥k]Ǵ Ls[ӳ֥XiX~oӮog[O ~[u[m _4=-MLgY;rzڅ+ܾ4 ׵ۗ~_/u=> uo[4=ۺ[2=WױXt4M4,߾ߗvו~㶖߶gmYvim-ߕznZ?~nvߦ[ycwnZVv]wwc:pK_ݷk~ݖڷم+4,?uz.Mank׷.䷎gWdvᶆes6m6]B LZm<"]W~ >aV]_~gZZp[?p7oΰ ##}k 9L Rt?\2m7]8BF ]BdW`` !M r,!a4dU2~?"˝=zE6pzEDk˜qV7q-"CVES,( -:56$nc[333S45$n"nHI\HA,xN0밈k^ NH?4$^CjC9f`E嗙jHAH*r2*ySf 2'!'t(z̍ jl4hI[9^"V9MGtvmAgHAgh )8A/Q3 TT EBL 9f &6 )#j*?b=s3~@ qe8pSzPmn9ٍ2-pXBWPܐmhĆ"*LS T$,i|B;4zP2LbhzR05c.c3(1McCZQ $2N=!Q48bΧ`Ǚؘ Li2V7r+2#^U`G[[α5o`4B%16-:pyǩlLkNp8WnՔ^),$l=+LG\(Zq-o:è"V/9ĊVUxIleV']9.CS(uus2u[ʦF4R@?gvL}uk]-em:% ?c;&t@}/\t5mt8]!:27[4q 9zc[+1.Te|")\xt8q!`ʀS^mfIZn)ԒyN(qT#S8E8gԎl8!1wJDeAue:#XʫLG ,K:B 73r`'!䘀9,BBS$F~D*,S㍉C6DR nXbZݜR75@\fF?bjGk6DS9hڶQە2Eؚ{ -it}L(8B C7CS՜^} B *30X44С$ Ia5a5ÜY}M 94є;$.$jqAz"3rHC1d +!9ԄvΌp̍ 8GVnQ?# tJ̎J,pw 3DR 4!I'R]3k2r*AB;J=&p(vIʶp]@4.śD+tΝs^i$^/ijEECG8N^ƨY{R(.!H)]]N"CƦ̖UyVnvOo¡T%u=02.rcWbSba:>s3&"憼GZC̹nIY-R/2 u4Ź)yGIʅ{6]u[ -hEؘ8P0zAvI Lijv̔jg];B+VQ`HnS -R=0chs#$BO(q8N숖2B;butIl ̎6m̘mk<եFܒxˬH*z fi)2zP9|M,TMh5Sq_Y%@P7BZ PsN -= *[dAL=}p M=JdBN+ -CC$U -jHh%MvN[xzGK4BC)dN…/ /2&1<<ƝC+>(hĎXAPf8؀* Q1PrE :(KN 9/p|̻KZHUX'y("눙 (@g ,! /#c^w?eU5IGRR3+ 0*!S;58-a;ڵ_ -zη]fEY*)AaLjlFuJ iA-V(5o|vj-16u%[4#DYjC>`jGN tM rjmfP, s'a⭜#d&E$,eunN{?Js32#R]fHRܱz`buQ7"-c$ Z T˼̹А -QbZ>4G+3c:殂yE\²&K赤UaEÅ{6s&@@}ǗtN|Cڮ^VWhvitΫ/x,Zbus[fBVw%M")bNtxɬ͈ԐVw ixnY 𙵱! yA㞁&Jv175ln*LW@-pҢ聖&N Vd0u!5yu +7zKp84@. &C[t6ltH\؊VVy-rbO\Gfa *=;58gQb;&CYM0L &D @$!z9E*8 ~TaɃ+wz`hŎySo%.3XA?VlӋH?2pG 8Yfi?΁BQBvt8`hbcS沝5:r-l׼~h M)p bds`MqXyxɛ;36aU5@bS>ÂT h䎪xi$0F Z#" i</#@%&7Ikme;*ynb~QU2;A-cv!HAe4pQ؁SR5AN&amܜR)."B5My~K\50I" psgüab林eB#>؆N,]1*|"4"dsJИ hSBɅK+R)WNMx"ZDiLi)o2W95UCq#jSc*ϱ5sΩ*aw;^B؊T ђVU.iO^H +"/y|F *>Z;m-8^SJ'rf@QCO$($h7drFVvF;G7 - ʸOpS77bhesh$FR#S#]EĆә^ٚ9n`9ՁET@u!GJF1x2x!U]㞓;g|Xb;R.H6Vխx̫"Y7 ŎPK87dU(T(N -`FQ($(xQ_c#l^}vWx^b1(`Ia!'2#\:8'nvY  $!mOiؔU*CKq1]Ҟ閹upH7A!!N̨@]@lLY{&΢i♯lF ,P`{P`(Ι̐T۱jX/aGI;DUr̜`k?kfCjjJ -MbHSYНk_SWA%)a/N vJ`o k"tzerHМ9wmhJ}")s*EbP9p/^2G!ZD*mv=&ȖMrНvSp82}AuWιnif$|^wf-?3g-oVٞך.թEpR JȡAԤCRIӕ*%m<Ď58R֎ 5 ]bFەcbP)wy1sB:HfW7]E@;MO4ǑA3LQI+tHؼЎM ,1SOI*kbU78irXϨxˬhxN)M&?HBX12|ЊG\CP#\FkYR7y 9BN5pII`GRِ2+!V} W!GBxǨ'1"W7V;`fJ 4(( %E[f}0'J `҃\@J:hV K&37 1oc>pM/7yYKГw1V2dP"cG+A<~xP)LĈ H:e4} `Y LRDؑ Z"VK̎7ĽU)~bCh唦VXL,7C 97>V`%T5ՈMmA#)Z64 HX(ڑAs]ihxU`DPq 45lJq̢uUxU1w]/56:<^T_1)ewl[9f[)1s[)y풰@%/̅'b]9e5vI:=Ix{?YڸԕӮ=Z.v~:8Aeă0#[Z댬;:DJИn$%EytQȗ#KG?:)J; (nlőZh.-~W/3C 疔|O;kFBq|`)on4G}CfulIR/\4 6sc'T'vWXIѓ]3fU5T Ʊ5oWiYZO$7-w@DĄ ybYEҖxPl$'gYէhzDLi];UXƦ,X&pp4U Ӟ`3Ӂ2Ș㍡dF"yhaIPq;cuĤ:=$iOz>Rcꦋ^kjKƖ܎Ԟϩ Y>Q)Ė#HujIjNywCz&OZ=:c[&.cuLk ˪ SƅtB -T9 --~t?μ{^u\-ޱJA>S Bs`QZMhP7 *VhS8E!Lʖx@ ˙&H 9}6WnpJ !B45b6rBVFsY*ĐxL/Njb]$a}BLHC3q$DŽ%:R_pQAY.郟&g@UxKٝGM;;JX SOر>Vٚx,K9]9s̍(B xQ,y=&)%0'[3J9x̌Op\w|KYYe9MmtkOXNYg)_-e;Iʪ0aa#{#$L:#s?_Rvt'8Q0Ͷ̊#,Ԭ/xm0Va$F? "05hc(k0 ٜWIlΥ@b /̠4$Z͛zZB )Ȯ@!om! 4Ms''OnJi{.)m'֚G׷ 7]͟5V`"r;,/Ei\Ts81l({2?5;(=a ׏BA+]EGmQN40c?^8d]t/ -Sb PeHuя!@T<# x]Sۓ2C"2~C{4v"0l+qr,v h|4.STGOa(8T|*Ct]==@G^q_!nx" -TeglHQ)&ָ7!]vWL3I"A6{$/q -~p?.zB4vLWzvewVwGWyp ]$%^M~z(4%kC/Ih:!6P?KSt~_nz΍Cp,(.,U>)91~7HVIbr%XoIX]M:o-61H_-. X"QNL1z>K+לg.:Óܟ-Kui0uaﮕ;-;ŏc $sK,8Aa} -2jFvV7BY5.l5YK) _'a?Rªש)inDSegG:̒b0]GRxlcӯuϙ 7-eSJΦkf +F{YXFhH_C9e*>ʉt+G!*tTB7PĐ>JρNḁ8JuFzF[p7Hzwb.ˠӢ;},4ݞ.u -@8L_V; b[~RfuRm$Ez5ccɜ _>1 cB~Kx+vW͋:XNhg& m.n.1rEN;q*PƼ +?t7z:w!3W#NU[+ݬT=K -5ȝĤVD%2&7[M 񯫏??Ps A sx -Vˤ^HH)˞uW:z\'?a:hZ 3ZunS'-f M"Õ픴d9Rt%"|t>Nl}"qA.b)q)(YẂnb&|IwMZ=*#Ҷ-`w: -:kI=78]I鯄vx(wz&SC߿80V-]̚P J4vU0P$0sT(Y41;QﵚF"{)WgP4lU= -ݪ1K"aBG}K?ECd+E![;lPt:tOaY=NG{P -6>e -_ ݐ/Wѽ:6|m+-)3\'?N -iJiQO\tdk۬FbYA+iCt7 bp{J8U/]+y 0zjP0.LU.fUBt𤣠=c9::5'\{*(6ѫ~5Q;'wZt{&o+hP v|c]pg/t9 ErЛbY% _ ,Bv=BBA'R F9n־A?ר[D Zn?DB )P&sՕ(qh_zJ Hfѭ̦cnؙp,_LC]şU }^F8fu=J th **m0/fSueL I6.*@rVU@GDՍչV=2an~"n0Ϸghun[L0!;yf~:=s(c|.lD M<&}N-/ #c(k3%apڋjxzxH;:[v{x|CIKQȜ؛)M*FfOj=s9Dƭ OeͲBeoAosQ,֊# -yKW}.:ҹj،Qd&@ԣʭwx~7 -PNv:N$'^|b?]Ey bוVD.^F?79F:z] 'aΐ0+oaole+@o\ L ` Vu#}f[{Ȗ%;cW*ybUwNlHp -( 38MFql@8?# -&TB"3z:1\L*_rWVgYXJz.׻ZI'V~Vx?v:X#] ^ܘ=ۧ]H4pMA:"Pv4pnQ!LqEK^ i).i1ZI r/*V-ҶQӛ -n%baI -?x: [7C2&'">\~cTI"H%񠩠eH.Ϛ%pF $'Y|-*=WzA\I;?9hncH? ?TUTDs(Ղ)rؘ-D,@m -tWAtv:88R^X`'/2N6xūՈ׷C-BkMtzM (8|̉AB-G+X_8nq hQ9tN@d|.g_q$5uLGUdo2[x-dd]bIOWBFa蟣iO}sr1 [D_܀H\_ȯC:fQsM(גzn -0Cs£Z! cѵr_lEvh(}7!}=X 2GK 4)I`EЂ>=0T/@󠘓Eb'Ŭ -hn kK/(*uKnH97َB˚pn{&#fe q^ドL%Rj|O#Z5l\>BUD:&@ų 1:mT\ <n0>0}h -Lmqz0BhXbjr-#qlgL{ 0JHոiDC89DC o!2ْ{蟸Gf%AuT\@i{v -UbyKKbypbM^ D'k⧕4:$ IE -O`]nPYQ=4 M8-K>(.'A~tlD:Tbm0Qvf-o]ʤM{I0(xVāAK)P=uZnL\9.9˽)[sl~霺ãKt4vJHkws^SFzWpء{X =Bs|eɟCV:niP`iצ"IRt -%crEϬ|K؟l骄/3-DqzE;43 5>m*W^JR^ZKܾeA26v"i7|K*G9pPj -l\A(D|Yomͷj9 #F5YE_B(H =iFM׈~Li?AJ eZu-"i$Z -@|7&ŠH^=T;Vg[dIHGLwJʙ_q>__KʒEC{`eF1< + "U >x ̇VNE dsLc(΄_VHEt~ẇvN\F3Yj3T`m}xIxx"o_ -gf{_s͊qB*Bq~T ލBX2i*2wq4Ņrv;괏Xըu4 vX;hDJ. *U%b) =,wܦ?ZYԊXmCdl*Q|we*Do󏳹ě(u i|1-n3KR-W$29h\~*|'[lXslTVsks[e 2 i7Ѓ:gzkjT+ڪ𹢕x4ܦ%=u F9TI]2:o5A5@'tYNvYV{x>/٦?h[uS'@ -@*K$E\/E$Pb "/ -XY]V1tQf]۱n(L3$z`\wgܒl=* -4I(K*\ zT@:Qp7e;/]׿ZNj3݃ou2$l^@oUSA%CI -KE]w_HU)L9pZͮt]:Ga_&i*ђ4&̲w -O C"ɵ -btoQ6G<-cBԑ@=Fa?:e^#H}8vkǣ ZA'7cfzFmኋ aڔYm1-^GU!aVμ]lnekJ*cX|5 J[gkpolOא60r~!s$8<&[dzmP{[~Moi?wf|u~ȑLEPqOKk?hb (=cq=o0oӖ#18Tv79lmknB.o>ojgz)eSWW(#27sMPʤS`t10<;,S/yz \YURKEdʻ|n@͢pBgQVVLI^ !$Zx/kj0RVQi*D3Y֢[ -cqA; v0Ap8@ ,S~u4ĩ)kM2x{ 5JVC Oe׀z &H?aiVkG=Ap[Az5,:DQss kWwyم,1}-F1te; -'ob 2q1ʟd{ gϐf(X \H#DX/$f;?aM?LOq`Sb0<'@:>gܶq[è:jP?RR8Oߝ!DD<^O -υŽPMYDyW@>oAWXq?$\GNs,qeA2(=eɍdNW``fI3OsݥĘ6T4K`*̫&z+wRG WWvy.kd4PC%AJ ~]slƗغ`X`Mm]Quc湉]CTQ L?+Аl[?EnBgTcJ -RڔtѥmoM\6T -^kvwYZڲ TߙVK -pFbyBd *15VJ5Ɲ.guHBVQzg>4kowe)7K>U.ѿYZ"W$gD]Լܔo*Hj5|mc6?S:]:VGYڜI]X<+~ Txk{$}^/Sգ<-nR:}y#7WA( ZD~a01bhZc :ﳾAKp4ϮHTRm0 u7Tbgtwtob-?ճ1:-ףCxE!PUb҈="U꺅䀡h.fBe̖x-5ˏqI.ѺK7GL+ΙȐ{C+)"y V{w}9R#8}6}B'"- 8M] sKB,A1PHIڅi:۳ez8N(I0?\0ZQf}N_ۆOLCmtt(/']F6ʼ؃)oxP?2@Ż6t?.ۏߌ+/:%D!9=}mneb=Ȳu -:`(ᘩfܹAU(`Oŷ~Rz}+{dsc,8D1eJ"7jvG}?ѻX/?zϭH1׿q1YtuԨ ^ʧz$-~%pQ PR/|0( m ჋J:m8*R4ϰuMyYCt=HO(_i2xcc oT9ˆjA];LQlm}P$bWIi>9Uq*7D`L,t8ϫ7 SenI^#qvRwYpcVޢW_q[k[ׄf( 7.otԇƦdMKkcZ)`9J둯,q{?Z aQ$nElq? .knc"&nu}Pi)q6g$QQ[c|;%A -eDDx9 -#Ws -iEmcMt)DN쩋N.3 (1l(8'P޳fOߞZ$VN7祓h/-(!5M.ֵ{Jł&>ϲ)9ᤦdd]A"p̳FMRMD7Ýt1+C6R0@oG,ñ *Pa*&zG?  ټwhƏpS2ND,Җ kDAt:BYة$%,9v}G)~)veJV3I D9KW@ae -c)qFAV^ϊzlgh t42xRЎTM羿m]Dq8k|Vf!jDZev^/n2(8Q H.ҽ%nHE*w:hy6Z]D$DI(?tՙ vH%Щ^S#LpUsĭQ6E[H5Fn!us\unUd ;E dž ;D^Uhl7nG=MYG}*8|DCED'v$tx>oN&?{JpF7kp5kZD2K^/A/GR ?r./cȴHL>0W}t2 1 0HLW]5 f\P9fMJ|nqV0`Jͨ+NF lnэ gA?l$Pf+p%-x-\0B s]sNdD l\GE_Kft -X9.-3Wҳo82 1 ˊaPFD o'g$/-X$!kOdH^ZUq,"Ƞe'p>w#7sfصB$JyrܱUf#"> &IjG&J J:1wX{R" -ƖӉcu),k7gq`''C^rD -X Gtyy4JL_(y;ö - yiV#I(-U?V3)g,(q<WZ#;;?Б|<;eG1Ο1 L%c7O:77'+s1_)Iv-^ rYEa],qQ5-~/<|F0zucZv(\ M&qW΀ۿ |l%dTt=҉  w1℄h wW[6$Uf (68<`g-ZU:~.Ң>%nPV| Ph~~Jl=%` -OJT XSTY -CL\F}ڮ͖quC{3S-5<l1jkWq*}2衯Q >~7~KX,F0;RUFO*蒎n1I"֭y0ci#'ŦXn+G]/I.6.d:GU -qBK߷T9 /{ؑ ~(s9ڟ(&[r"SgzU2P>H7٫< -js4D/d/]6ϝ 䜐;paP5w_OmsjCqd:.6{:_˙3%DҤT?Bܗ~l\Hl$K7TG\4z{dc;^r'G3B䙜6K:gOO0s1i Hh_9ьvQ]D@//G1H,ϥ~alA 1vPySb] ?b -ʐK& >0f*`0`:71i{1j; )9XVby -7=^kyQȅkXZ&mb?N{_oSP죰yizRbEsK-+Bbea `ӌ(|?/iӌ5Uri1Xb$>2[\/vJj :#c8hԌcd66TbC5C0rj{A26-G16Q#%ƞ:w* -iab,ɘ -ndXb,3c3i21ÅRl.ݞCcyq[**DJإf{'ؘܘ,S:|:&6c4o}BI#!Y`9)<<@mp0fTuPXbɳR敧L᧲paeGQW6a \)[6Us R!W3 -R?wcezE#L5cx%)l#B -3[fٷV3 kV3f ,Z5i` 1Pzf HQL}ʙ휉>˄óP֌?CH - fpΕxY]E# 6~58ڏy4iOHk%- 4 6|)KR0- kee\i 锆A,3)7͇t4M vyfca5i5业1?BH6bNV3X,Dj/P5CQ[`5rGjBVj?Ռd(7xRj.RfESV2/lE˾O!dj~:wj`%PdC=jMfT Q a5WT T5Z#c5#fP(uzzB§jFjj(ϪfUExC\5CQ֗[ݍfZ5cZ :ߩV! }7S˦fy7^N͚کR3^f|-+0&Sw;jR!jԾ9"w@n˷ ?Fm~ef(nhX5]՜YՂ%֘UZts] -g?ެZtvhhO3iV-jӌIڲt5 -Lk[&5ӌߟ* ZK+ZuLZH\˹JiZ5CǛE=D 5B|M~͠lTzAĆ069 -j^fDI/3`F 6{ X6(8cŽRy8qjFry@H-p0I͘gF=?α "(\ݕ 87''ܙSj\:iN\^n&jIۡfФ1a鉚QjaĘS\ ʜ 5m2>͐5%&Cp$/Y'D.5jFYDZPj5CY\(5ӸJf6:I`s)Wcmt%7x~R ,0ENI`t(v;z3fA՞ -ƕi ,.4 DSxA ֘fL[:f"&f]RRHעtåf`Wӌ4ì_if4d:FH+5cw͇tQ̨ if0]6md] R'S/=# Y'\Zwۺ4 Jkn^?_WC~3‚NM3|4CK3f1ͨ#{⠬.]d_툀톗fdUO;`6{qv1~qx;'wi,irPidl~v0pw$B. iR̔G 3{)XNl*wY9]rWIt;7}$ @J3jN;Y;^Ҍ] +)A!:El;uYĀv͠ -A-_L?~Bh i2JQfhO3 pw/'KѠt8wR<P1bO3 x˸4t"RgӀWRޱC CiF? -/ xxBƥ/xNxI3&ݘ,Y;Y_\zA`,.o4üyʫyǤ7o9/GyfF瑿4t iFj,eH8jҌalsޘ_8 -` -yky357c!=+>\as}>o4|9#Gn8,dy/G+&L3,xhAkhh zOvЌa=8fL̐)MU3c2B}fһoXyό|IO36R蕨!KG̨hs YcǗkό3{fT>3J*^gl%b谞'Jz[zD FWѷό)PO9M=#Ќ0:`}$>'h_0eO.KwŴg_{I,:ܓ!͐{c 4y?/hN{vgnhohuk4$[|5A5(Z>=||NH3OAn-4#E9W3Q!D@جʔrz}G3h(W6(€%婒"P!{_lV0} -?G>M4~nE~ _HPF'Cf$>DJ3mcYg4~G3p*fV4#_z_? y1!_-:QYtd 1`Ne_f -A!,'0fD_S@R. j BRR`n -w@ -ŀ$o@E -^ ܏ Tp4F1 3T?فY=?PahF-,͐ޒ=1GFP<;ߑUGP&c -G1HXmPN>7@/1[|i=f\2hnjah1zʣP||<>Hp{g*1ˎg%xcͨ&`|"cF$h/Ll4![VY;EL*٨uK,tqt4x1#3`C'\E8LR0Yp4Y,^ڌ%R4ɌfGQEe*3:9eF^ f,CH0i5BˊeA>w$xyeƌbBR T]ԘAsCdzVE\S 0:OpT "oDV``Suk #y5Cyx?;#_ʻeF 'TOT+_flV5E2jt2Oᗟ#h̘CZA<!2)pQK xY?#]f`E~g5eZ2S@Ae&n'~ˌAnЖAJ)4.3 -aQϟbL/3}3Dp XftoˌFkN'y]fb -UPZAU\{2²p+3dDA` ˕xSyec$1eFtAPڪǯۄ(3T2#q:=ǟzO1 -0 -h=GM_6S+3 N_AE)"-6Mo88:KgR"`Ư2Apŕg'[/W08AнkAeAl[Jgs+3LR㠻pb/=\`e=-3BA2?Dzd+3v2` s|;ޖqyeF5+3Azkʌ۰@ЏtxZ9I:AjE6,NcA3pA2CFDꟁ[xy2#ٗ&3&H+oOmRH &1 2  -WAPT$z4m<`\$qӸwh 8̠<:2Pd!oAma1N. @\ ̗̐ v$q$bFdS%3hy-8dw+ hbO\26.q|x-Wh}@2[?=!n#Qf9eF\e@oWf p&m~)3._`2~0e{*S!d]2C`@0/8/8JpP&Γ28+eʌPPl":>qSf 'FQrOfH7XT ~Ɍ@PnAaAp1 -Of0l'@!Kfw:7Wu@pzҹ\!3z$ji eY@ͅTTTmL32|@p'׽"8hPZ|ۏ-iXA$*5#34jɌ&O%3|^VPD@ˢɌ{ῸɌ7tHf+&_@" :`՟+= Ne"3*Ȍ -BAA2A~dƫ&%nEfHnv!X닑ez8S} jM@"%{adFH]D-aluA;`wZ>'3YrF!i8 "Ϝ!iZR2X74EvJ2 ȌևJEK -!3ȌȌ!~9D)Fs.'%"3b*2wsh,;ϓਗ਼ir|Uu|tTCd2ϱcGIlHGtvWSE8"K v%P{μ4&编<~G`k n2{ %o9rO"#̺Z5[T1r}q Bq?x[y!N.6HfېVY2Q**s2j2\ -"lMteݸ\ ToQDt9S} Hiᔄr[Hrm/rf=~C-ׇ@bp.)Yŷma$`n>ViHtLUn~Q\Ԯ:Rt:ڮaM io:elI"Η^"՚chTPg4t(DK7g7ߵ$y;Zk&1'5Dܒ6>h/VE l- #s+i~8΀qۏkD~#"Rs6Hͷ<.l]pZĢUHn:q(^]aB:}ҘE`k!/3Rw)lDU&R;jDAi=vH슥%f緬ᖐ|wi~Ҷ?ʖa!$;v>.fؙ+UF#%!h"ћ.-vjܳ~=߉c6p8%XlyIr+G;B3;J 12n:)|*Pz: 8Kl;D:e>CX[%3 irZDrf"GAј+7פֿ}sUE] -&r`evT"Xbj'פXĐi\ 3{mUK*pPH8"7>Vq0=ǻe3ª`&٩G' J ӗMS ֋,vK$Ȣ[v.C(U&S ceonm:D> "a Yv\3FKg iOH|tFDQ*A{ 5 4Jc*oܺm%22ޙu$fxd$QJx(}Eޫ-wdU2cR9jW;N3::۽p^we+:T+nr(ԫ51)Ε2 *GP"|9"|݂1r' NoV(mm؎*QR%.5mTVZ )աJdbTM#2Q8-kD^[Z2}n|261XOc(Q,J'qdb\~ڱ $["7 $z$&G.+ -H:V x"F,x"0/ff@ͥ LRg5 Ihl .6Z~mpP|/Ila$hhpQÀZJr}ԣҡ./yyx boDSmԌo"kl5Ka>@q!Alb# - B"44=ίJQ֯hK%B}W-wԒ=m>:?OtFօPK8T *6H a -.lؠ"*-$}!X -7,r@J͒#nGfB|)G;0:Nl@lؘ#@8&Aǩ!jԎ A}M)Ib!eI]s'YUf:EZj%Te*,3%J 38' ~(? M2)H$X*aNeqX\Xe%,(&DN 15 LM -EVQXq\ @|AZ8dQʧY(Uȗ+UkD%ŖPF9$E 0lDaB8aب@a &%Db -LT -].\FTnӤ^6\yNXj 2#gB&` 4``6(haC *l4@ -"BDlh")NMTu!"sw)Mf{Uiv`D#gÂ*A `lXF#6H -4x@Ć-*P#FqDh!hDVy |Sg lW*>j -Ad#&l@0ظ 0a<AB$L6NXX¥zŸ -Kԅ$6  BDaf0pb8S݂(qb&.! 6$8аl,@BlAÊ$<p`Rq-JVuaf2(z2lj\v EF$, Pؠ *ذ -ؘ h QBc= l@)ԡ/{e22I;X1`ƆHX6(@† Z0&N6* F PqaÊ  blD`b#B/:d -0A`b4 IP9[uS4eu}\03Vߙ*Pu$A 3-DlTa6`XP/r @򀞎cApʤA %#A[ .7@`@@ -66(paB  @7j ⤂dr`36F!BːSBQ  ,lL A`"l\б!a bD`$XHYK!:ㅜz-L#5%4Ս&\6$` F 8ظDPac .ll Q ;]QQK#d* @0aؘ Xa# (lL`!#%<*S'u Ɇe}P5˃I^Uَ-`=0:PEN0L =Ps !{Q31k*L2 - 5ہ~|iNBi}jFg3󻏞.#`lDÆ8H 6h8(af WO%ʁb -;$ZE?atrXD=Wg:گ5O,P5Rp A9* DL0EQ+Z(9yⅯ,vhj bH'x#~Q)ܺY^&Cjv6VcKCA4|lHÆ .  #9_ -4LC,XWhean$N.ů5$xM)fIk:)H9-D -8y."h'p  - -pDQ{fqCi DB06c*ך!Ի'-ۍS~IYuxCj@j@ !L`a `#O=G -$k^BJ 9[@O*xV߯+TY4D@وd D -0&-L -t r-@BDxq.`t`RYRm֚GSl9e滆TFe-E 5B%4|8b1NtH8"CCT(Q| PTBQP^,aJ"1O%1 -eFzWcxU-]ƉMNVg (@ P *q!Ë$d -p2:K(Պ%[E:k^s( U=I$[*rQ%2XWk)hNPc 7O 6GhWZZ/ch5aݲHgxA[\(& ( OX 7}jacMm֢ӣ͟v 7Ǎa' r\n;׭##s>F)dzԜD_L/b=`4)MAʀ8^ ȕl -4"[b_kOqv,7Q8[g+NuHU,( tSаC3@)f&zζM:$-2Y^v%'=܎9Q(CJBh5gzF_|(.m7>'f)= OD9%5C;AFJfx!Fi9^f܄ֵϔ7Ajqb`nF.΄Kj[,,o*M0{>M*ŏ nB -faz'E,Ju=.>]yDPKN6|apǬ:O(E17=2/;?< @xl=MnҼCÛ)X.U1 -:^Պl$~sJeY4r@* !nb;B$4rJLzGٮ܊Qb{0S c8^%= 4Nc'xJ`qψ˟(Hz)Ь1On”BrHz]o7- - -)Ϗd eYr8x*Ԟ>k8cb! <] f ^jtBkd*^ٟHYzEk:˲ Y5Vbsr`ᶼ~}7] oytA]z%x(z :Qd&SfmiaRp!Du~R؅滚~q^K>mˎ[I(q/2~D&T71BYzވ섩U'!Rcy[r:DKxo{=Y)r; -D@k^sVbY=Q-fq|/FNJ Ŏ^ԖήYcHEMpHl?Qp"3uFӻ0ם%Ն"Tv5jۉKCS jf -烊T -0Bg8_I0' +$Mքײ~kw"rI`jYse_~OW`o>l8_ fV(n !r 61^5X腱L!M糚Z]p)ȫ)Xp%ϧ)Q\T`H`l0S5lPz/܊Y{ -kA.L}ء*CAs꺝85ϥ(&HcRhp$%ei> >&7 S F*w X@m)zSpr e\d9ګ/M LJ-Qo 1t}qJ̈́qZcnTގ\ toADhyq*S̺]@xfg!Z;j㉪nb^K -dRiLaw䖝焂vLDp;<^m'۟%KwtM[ry-ˍ1_PZjlPObp1W,IJ[`1"3~P F 7Re.7[ -Mr$J~9̪6 F^Xb'Rg%~Nc5[WH-'B;z4Faq*Zj,]jt|` `^J{N2~EMr34905tD: {Nydu& c 9VjE=_rDF`|?@UGDw`e5HeB8UցgibxƈAhTTBՏ?`ۦaܲ=i0l?cv/EGyL#!F"ܲeI˭fԚܱ\+ne0dڴ_Kj6Y8ݠ@qDϓZ":M:kEYG͂V̂.AL7MZ0M$Us (4B^.awDϩ{ֽTwM+-m >lj'I"7BxĚ7S1>gZ$Hd@c| .b@NrWBrO)ȩRcr#q#"')Q:vͩV, %pɞ- K\lz9ѯ7v}ǡ? /Rk/|`ߑ7͑/[6@ƨ6/\!],Bj8[tOރηQ\HgYDI$*K1_D vyH@u_;Yo"z\]p7p^PaĚPz 4Iq -1Ir=Wj!@1L܏yvʼn7~*.5"J(>MhïeriPI~ % -Xc 8H2Cq%i1<6@ LZ)qU[+a`\/H]aw.\4:ǙЉJВ4eMH2y*F  @#h]`\PXLnfT!ՙ !uil* *Jdj܂)x2 Qa{&#yCe{~%6"(.q:)eA鬂LAb} BzC)>KfhZb&Ъ3й噅_ъM JgQdԪI\p+ʥ9 0 3@6,:P[ď -2_#f}fX>1 -7Get%ɯ Xx Lg ߕۄ:!yJܟC,/A.V>IqE6 ;QkEɯ -mwŖEPl'zq2c@˃*78Y.),<0aԠD.4# T 5Co =DG& tʑ  -sIKV,)p"@vaq2pTqjтMo4T7B˰4i˭k [VQTDԠ.A.^z ZLY 88'RX?*kQŵjRf-3  ߠJ -W8ƂXǩ̃q -emXd3Rd,I6JR}g$?]eV[ $BHeF~ U/W|Js+,7A((4e*˦&ڳ#|QhqԂ E{p46Њ dfz3uV@`TJ-Cy5a],rj`MC3\!F+\7E=4BpqQto{J-0Fb| X8$e`x(. "'كɬ'xZ1Z -c0+` V -dY<2e< -ZXltF>[m=-[U,?r:!y(6 -6Nj&z6Mv]%qj,F0 DYZ ߔ -I'^vJn:F]Y*{ d! kyC 6[!31ʼnbb{%A -eAk.yN9BpbA^ 7Cr VF_T#-aG"DajJv r-KR,аX߃&C6 -@N>\:+уeCVjKV%հ6Fq1Bn =.ĎF\N_-_w 1I1Do0_.V144yI.bjũ@IN\!Ƚ4T/!JXf`>q<.xb?Xjky2sV֢cfzAl"S^s] 1JtEjM/W82=#9,aaJᳲ0~yb J 䎑2+?ҫ -<‡ X -A ( --L 5[&p,Vr P{M<.3 ˗٪ R`n@LA݀J4HM8Et &'H+P1?p9RA5񼚣MFjA˒;.7 Pª2mQ4 -Rؘ)R8s%z( /4:`>5>SHl;/f!*z1f? 1=GAl=$ -m`'L0H 7Ep[PZ桔Kᷞ,ww Gʬ X/\ϓZ_J3,.*0TBAQO EK=GAZ'D+7E7A =Kf$~Ui$08*ZN8)d % ?D]zY 0 )e+&%H=hhu6rry'Z ?h)GY#ZkAr@z<UԚWn|FTkBT:-@/Dt>*4iV=G܆tXR04iz4(uƱZW[ 131Y$Qhjl)Yn-Vk1TpN5*|Lh,(@7 M0eA{$X((Pj ؄ 'w=Yo128:Lq@:[oAtfJxCiֿ~ >jM1;p=HV>4||y3j::Vm TnL|K|řqexh=(IR9cQ:C`EΰDƑbSQRYy"5O -zmd_NR(3.{=gb v*Vjrh!z@b,e8~t 3'{(˱^iWj7ɒ!eMX-- /CϔZ V#!S3*7uDq?@ZovzRgr\^Vahyd gU::8qQ*Db*hm9گlF NZDr.(WIv Rr(u8My^ r=B$sn]wZ;1R|*C!JSi01)H{fyK<)1oȁ2`wAk+A+xޯVneOQnPi=+5@]jܶ:4^L)GR0NdlU]3%eg?ǰmP-(0C|RMuUun/h=IaO=KS)UƢf$ԶP[ c ->f>Tl#Si#Th(Zn$Hr?kyv#z(K1+_w,[8oqj:W\uʳkͤ;"Syfc`Ȳ+ЊMp# ?QZ I.L'3AB?<0)"4U|> 8TϹ1g%ef9&YEq ˯,u/3O4Me4_.Y(g!yTzE*};uK܏q)KbֲTcz3mm:Yo5yZ =ײL8vIjN#H}Is=5۶j3:6 37gʕAxN -0IPMFUPڌ2 DžDsU-Υ(91< t>dfC皂zv d2ڱ<%Z -V1jSv8qBi\NzYi3۴N?j4jT՘Z]ZMKNj43d=L5008Fd$ydP A;lQw#Ipd)vB*O{màVk68t0:#yfTf3pu;g%Ѵ`ѐIĭ=u֬krץ% 뀼u;1;wTnZ3M+YvVFMѷw?s+6KӞӳٌu^5#Չ)阄愾?1UNFhVhFC,GjrKAcxA?YCNhya4`Cl5g3\E2RlY5Qaծ 9Me yjeml]5;FCMt& jlЏgSH:5G" ƨ3u!lFR|)tt<'5 {'}UsOCWFQBd4\9bft.zTodw͚uexI+z%K"BA& hΪãff5|;3-׳ 5Pi`RjOA']ƈ=Wadw\˭ik3XZAm@8j!>:Ŗ Vo?Lr.G$SJ쨂jDzoCՀ*+Ci۲$ 2:.#2ͧnkf \U/Ԗ9k>ҚﳆBфϴ 58e4ԹPJiXZCi4t*}N]a`$[1.JEr 9O^Y}UN~Q:ϓGas\ 穖Yvw(rE@WH@?:j[18aխbZ i2ZtbD*t\to0*r(v8O8IQw)e ve -n6\ufg+7ԪLOUˇUWz{ȱKZV-JK`GM ,˾O7ӱ[Rl0qF?u& KSrs6^E֠c䮠[vC&$"8DE)Ajn(r0qIQj.$skcnqJ{Ir|jx̩1i"@kO/) r<z q*BZmFi0-8 RYz[OvsVEcw_.ZcdpT~Yϼ0Њ^+ |Km$ǨL<HCE7 }8RɧY?(e],W[jG5˫ZQ @VqalέU]P`>Vhj4b!8TaBksJu;qJCN#;P|\rPZY1_EW 2 [R ΑǛvrٔ5ߘ=Sad8(ZKRm*/| %983DatZL\Qb:)W&arHB$H~Qj&n*/|D:Kc8@yrU@]K,~Y1{8,p>SlvfC*A9i7MGnE1NE --&RN@!D%6R00Y*`"@&E V`Kq^'t`g)4ךZmEI8)v̎[F'y(SqY93CZ鮄JcvTF6wcKQH`oXpBfI2MED波1x HQ6Bf"B3eUզrәB+67h~'B$Y2 v댼g3S\nZbmhڟ!&̀8GAم!F_tGK e4L ŋ`D?b[aª[%BŊejv -j=9.Pu$?d - [1'@ej؍Xdvo˓Hg* r;8I^yKSe"J*4#t|2anq:={ѶږJtGj\y}t6;"Lm1N5}D 'r}+&h,Z`6i1;DŽDZz8Z.D5l3,f@ -L.DЩ.Sbܰl:#Zu,0̑g)`Iօ"wqWU*I*XCSe IK-5y/Bl?iFlj({.G`t㷮:*.,63 ibeX2&Ħ?f3jlBNL&(A櫆5BXZ?If!Ψ3y-d -rQ句dpr2?r;Gt_) 4Nt;Ncn.zhb$:IQj-E @ +Mw Jv `pCX\缗i BSr;I 0;ҵHn[NwCi\N?;s##Չ#vkV:F7vd.F3QRT,َ;gZik46GOI8GAbHazĦcsvL!pn hv~'.Z߻A7-o|-t-g!f LJi,H 0Fo=Zl0H4W|R` D9`Pfk ޗjf. %߰,=WsD fG!B!d21L{(ȖY9At0v,w= !%2>Th;1vbB)3EqZ3?HPBsGO -EDZeAu+ 3Eس^0JTLDNAADWqJc*]r>N%3)=F L!.ٍM]7?iq~+ϟ~uFzzEpZadDL\f>0[Pڎv^%+byjZ:G K~ 3-q m"|4(QHa⸜X&S<ΏH}B* /@m Db.|XlZ-]Fy"8b m܏~sb_TRyݓ*bu#̯4U4wܖ'+ 1R-0T-WsՌXu [`Dz<瞈u@@l.WBUhqZ3RwA )p:֚X5cQPDhBH]d!(Ѽ 2+LL:>Vq{~"j+inT}Gj6խ|[BˍxzK"K -hƬƋJDFA˖\j -@:W)ãv әU[ -ˎs _{P0]3Q7u:?XeߥZ:]u;)Վt/2ݒie6mv!/Y) -Z8B`-G+Kb/[+N|穞J:_$ XxP8P݅vPVLm&-%SB1fHJYr,q+B,H ng[+fzoUCew!TZ"j7δZKRu'.))p9+zʬbs*3$auACVE˙44U[TIMjiɱ9:ޓP=CA݆ӷ^@`X[.47`hDAhRkֳo/JNUEUe# & :np` -0Yb~"8xQKdeбDŽnoyBS)G,7R[EߴC8ȌYH(>^Mu?I73n]hm~}fֽ~-Z*MƎ|(ӪĞ4QM|gy|gpjΐXeeeGD -mi; -ˉ)崊$|0XP`4btN4fsZOT fi"/l%](?' -F\&JmH(}Dtj,Cr~Eo -eHA8xS?6gTN]9fau 4 jxt~w2GxцR ^wYʨd[ !y1rбS/i܆:U6 ;Jp2ۖ[bs&ErW#(kd2ˠY%vtpaSZB]jO*DJ09JCh]&j DUcO.狾4^%u ^Q,ة+vω)`,@QF0J>HRHt$=# -J ﹁IifI㌈7912SZyJRp g$7gAK -Cf'9Nd|0{Tq.P8dvMAj[As$00/,q چ_/}&1zCz۰lעuuKdzrwl ߳\]s3 UDt/7UwlSbij)B3>x!XQlz@]X6,Kc~L%nNم&2E/ ГTWi~뼎쾐_o`q&|Rc'GI&#j5@xw%* Kғƀ -(W%\%jq18]J2!% {6)QJpI{CUfJ$ bm)Ƭ3D*e[NWԞߪߔ.jq{~rjfnۡKJM ^[[j B)3Ҋ*_zX%ymJD~- BY⬢kA2㙢B@q>ܟeT -"jZxhu盄sTCdwG5h_R)ry$HV'TŠj˷˃̗fojۈ`Re&G]j+ۇly?}N:?Bj Cyi,\x6Fu5[tl9#nDcyF״hRye;7n7e$knf'R|9,m𹡔Ir7`ٖ5h_ *b s99an=Q4+2j9GD6TKQ.|FLCXh)̰)2Z --= :Ab$U2 [4'$=OJȘK+]sl牺[oE4FE*lIoEЫͤqVg NJ'zCaWB܂V> DN 4,.j+Lq!~iP-\H(N'eo/v31-w @TW/ͨkPRU]ˁ. ǭ$S* 4RE -&Gm)$n 8d"jr#Db(7QoQI|)xFBp:!\[m\0JBw9Pޣ%\b`=T9!\s1 4Iu@2)fjRr)܏G:K!8ZT0:*v$$)Vɕg4``I@-aކW\h. ) Kk >fp8,;dmBbu﹨]W,EL:f:fFK@qj 2`JWn1^p)VjE+>Ug*Hru-ˆ/:C[SEs)=R BمuԚNXV~+M 6OԊشem`$;sQq'Wh&/7)w-7eǛ2Yn:c]dHvٖutn(~Uu-8=^]6 &3 FN%̬1b*VVnNΒZt^Mtjvg8b9CEi~I|iVNg\Kq~$nn R^F <č _["8T݆C -`#tEvALb $/&GN 76̊q$6U[)b;.[&>jd8Ps,ou= p`O$+Y$Gqs|0xTm<(Gr{Oxvc @EN$*V Epj%:PgVZEU ?NvϠ4`f`NrG?e3~v+zcq~nw7S_ysA[ЌVf Ic  b G$ K bԮj,M}gJ[:nHr k~IpYl1Kdf N]XZ_k") Sܣ9uiFSN(^7U4{RC,2͟*Q5D6IHnĺL{պH[m} WQ-\l%˰4OQrUI"3˲kj0dfot>iD)#-yr@MgMcg+Rv+lt6G-[1:OT\vO5-W-O_>C^~ -PT הAiE뀄vXbryi4qiT+ aԺs_ -7P)U bM`RLqЭD(E PӜ (Xr2dn^3}u:G0|GrSb+b1y]z$u m%gEÕ V|Aڅ0j Xevʴf.k ,Kn@LN^o(O.C( sI1NeuwA*á~~wKCeV0Ȱܯ8Θ%[^l,Yh?_8oj j,!/:Z!xH.C 2=,ʳݡe;`٢! =_oD]Ħ1AOo{1R9 [d[n~3_n{kͦFˑ Fp -[`y)6&]x=ϝZuةjY~b=ˮsruݯk]ٷ\UO^s^ n .WϳJ0DCLS]B'5aݖh3Ɂ%-.ä[W Ft l(E1 WBaPO 3l~Iu$l") 2*wbTu/nzjUZx -6;[n\Lh٣5 dVYIەik eX V+s+%\D@GBJ^q,, N'z:h^,3>u%r<`%ߴ:wל $9@ʲK#^o9U:.d(3 ՚ Sl#=4'Kp1JZK9#l:zG=~wխR9vzw7ϰ| 7P(6*L`"$& ^k:yJqV-Gܒ(R3vܶDax8RfLc 6Of\\%-~AGE`۳rY.4g-k<4Ki/K}i ?&lj.(5025;p2M_ 34uBrQ?lQ)Ljm݉[!&A5WiCA% Š\PZSk#phj7ձ./1T1G_q=Spz!e~3Qj8^@f1o:+".-A+Stfr~,r}y4UgZDE4`3p$z+aCcYHsilr{#gC & -#TYCB:d8)Qc'Qu`@",Y<ӱԾrvAYΦ -oS̟@"SC&,fρym:w=85f:bbLp1Q T|7-f 5Fq Vb[<4I!8%=7bl6$9c$)pܴ{'?}~zg^YI2lW^rY.D+FBs~ۉNݶ+Xe'G7eYscNgZo΃*+ћ:sy8V18,:.h 'ׂxњh<ۮ3fk7NܲE@r~K~>uj8V4Vao)p܈r-dYe܂V9 4PldXZe9(Z'uDs_4zuWo[Ny}/cNtnR۹~>"7 X|Pxh =! +MiBe(9"DZ~!zGLÖk"bݵ>XeZyp$4=PG|r"=:>0\ RVw \ X~/{)Bϸc[#бW$-Nh$.; $ڋUZJtmugy~u 2$ʯ]'4ӥ<(A=?`Mw2T TUMz(YRr3EQs -}@(:AЂ@l!G NB8yvj[qb#l'U-#9 K˭==G5?lw=B"rZ^zPEq +JBCU8q,~Xn vPT8Uv?&2 -R~!rLbLa 3be K_w>4gW\ Fis!AAj=,- Fe$; -} |7a18(#8iR#C@RCXgE-y?VnsV/QC;QNbDyu1 x;2ރUYp23Zy^k6"̲ 3:ZjM^Ë:Fp DC5 sC1~c;Ch59+j2 ?ƈ.&MLV0,PqTR-AK^h2εYM1c!$Ԗ=_m'Md(MZ &sr(>+xڅ'Yf)繚jX>v;˖2Bq4& T.s#QjT2<-̮\8u q6CSIQFrNAgxNBdv_wHoIV9S4[&9s3wZj} cevG_;g9EѪ&*rܲa:kQrp3Goyxam2Яg[u/ zT1{LTlwaV~)hNvDWäC#Kl-%5UvfJƣ4jb&8A zF=p -rxLAc42( -f F9#9zt8NXUu}KU(V*{밈d(xv47A69Ss;Yd x`xbqiW-\FOF3iX~DمD,J$TήWuMzmT6{A,vEfD?uMq -nT -][:ޖKvCM5qZz~#W 4n_?Qߵ ~ zz%5^"Bkr_B f݇Sv^*!45@mЁ@UF&*ԮZn.[&C.+~fM0cԎa[gr[i!R0P^l'Vt.4M (1/ $4g^>Rsb35VKVQY a,,藽Jֿ b4y -咆vRF:jRK-f -nSbcrہ4] XH9!s0V/M^8+)VgN?u;+3"H#$݅9{i6ѳ]O9΃ Uwc񋭃s~7e ABj|koPP{n*fY_d9k).ڵEwOVˍSZ#&9Zp0?e((W{&V S U3<-]!܏ *(.պﺟP`m+NGzփ,Ȝ5g.75DVS&754&=5@wbZ, di50b}bq&׋,P5h7NtJ~ -jQ*aӸuzl:s[{a2ۊqa< ,AKU (r0Ju_hU]6vs$cmYSZ1bv;`li:/NIfs1ʲ݄(v8 lω9X5ﺔD[OV=g阈vZƹNgO"ǫC-&+jw!?H>gb44T0|r(I3iq=X.Ax)YlTzO6M[ZdpLUk`P!Ns;7iЪf'dR[I'B;I~} ᔼj2\2#'phHy9P]I2ObS1R3a#M.;L -endstream endobj 33 0 obj <>stream -- yVcK2,ӷ '|Od$Pc=T~K'[|p$j$f$p=:O̗|8FA/{.d6"h#anF(3.T!鬂"%#yF; ƏhJL|]-Sm>Z"!K`^Q8DHZfD)39A7J 8Lg A!ap+Fqְ} hbΈP N|/1|X~ p@у M$rJN=W -)3$wM7cĦBn`tZ)|)|f"@f5H~bk9 ǥ8F$p(zMsA+6C'"6*R-*֯=301td#Fq~Ʃ^QGҋ!x/h L Th1Xhُ!^aFQh4J /4"y #wNme @4ϩ 8v-x`?0  -(̐L{cۃ |x,ÛFI5—e@ěHn EN~ ՛ԛ#K^@L'x -̓(52Hhxߡ> ď1 5XApQW9V}p9h^F:WJ.g$BhmZ2rIn)x$R`snUxzYQj8zőEM ƨ.7B8eHQJːD@Hހ(NnBQJ -_ns V -5W/(ډ 9eΫ2JnǬ3,N;RKDaTu_a%I#6ִ\ -v+O:Kx (1{riq}[  .$pDQR*4ix)YHY:AT&bǩgz$ -D~tPx~UED;2)p2H -ݠ{[ bC$q(d@A1O/5&^"0\<@" 創 ( .y\8Xm)nND9@+|YEϩ,ː;ŌZ+%;Ke-zB4my2a<0BLC ;P\k0B@Fe9Z {pu4@da ŰҜRcQZsaqhXojmC‹Q<W\ a$T65Sav9:ko1VhHD}h䊀$k.ѓ7b MT)X$f2viRťb`$b' -U EF TkˑJbXuV!f!fUE >DQ+zjQ9I\*| |$X H+{.+v%z !/a~] C#·uo0VK+7e83tinaS5_-[CZ FXkpa4@Vc Na@кB U ̏ahh3Mi:%#pGiCفz7KFCz}MraRGdtJnBW}(TV7{ӴpaWEww_"w%|:Du*1+AJp")B6C+7=Yv -Jt=Yg3Lti׃7NXN֛ )>6h繦CF1'0 NL<.0qBcHt؟݈4nIZʪ`d$=dtN='DzYNDoMbVH p0i> {6 q6@M`xDMK V|`KNۍϠc$A%y6 Yy{ck1bHG]] -%z2:Yn"^.0Cd0D. Rî6A -Xxn=rs!zNZ+^WqY;+u1bt]8U1:7pFjU(P :Ok t0 Z*W4,"d@ S.R+$ڇ4+0|VUZ 8/a&; Kc Atřu@Q_©i؞5߅9Ui )01oB0vq!|tJeZ$/ZNiҬjc n02eW#Q-reyWq*KY0GkfwK+{R}DTZrmӔ$}@sI@&Dr.Sl9Yw#=j73Ir$ɵvH瘝3(H<ӽ0oRJc#5!FD= M?"V4' EX&XvAʰR$z1jl `b"'I=slۍٺOXqBcbDio.iizwh1B/bG ?"'IQ - '9g]+ -_U}'ʞqJd=HJK̲ t~*B7Sh X|Hxt.PUi* AN ]opfDXyrȪn @D**J4?R, JL h1QPK2 Ĩ{{Y$tpQEK Heb3 4f$ӝQA`#ɢ#!z_RAfQj FSf"Ql CL\B ->D1hNCҘ![qMDAZQfy*GSG5/Cu Z!pb;鞑Q2R3uƑ/ 'Z|tNhd9N/ٵFBDu^d WYŪLuvi&mpMFSҏ>(1Ԯé3 -7G0J>aq9Xh2Ny*sb3\q\kƳ4o4M1ycQTM!D2Mc==7@0-"e7I?`w Z1kFPs4]H7H탸u}b -HR%luM:Z|<A[Ŧ8 -4I -D 4HqA*dEybz®7xOVjzDdb)G x!"{ZBڶ&[+*?-)h/Sc;HMwaB)Vi&0N6IK6*-eD'?rb롂QoĞ&Iq~)54[o8M7޶ q"&k>!3-7&Zysi]X]n˭8#`+UcIZ3,_ܺP^^HG0Ԭg~TوNɮiS6ݳ -c^Vm%!泤$RmF5Yv}e7m"듓ZF>zTh];Ւ Ny=DNڅ5Xi60Qw -Ȟ:FS@iv|څ: .699 mNhK&aT 1Mq6Ru?,3 7s:0$IԒYsTvA֐cDd6r { -2feaiwVh,{@ .H쓢o5Hp[GQ̭G !:;YjPژ8˥qIчVr4v'?/0I%W먌wlLsg1֋ߌ]ub$mLb9h%w8fיlfUyb](+'9.)q<n7܎+P04硦:5DI1jt+s)DFi7v|CM l?wq)ȳHuH:in4Vbp!0;^Z>վsGLa< &{Fp:(3 a t^lM-f{Œ6|' f e—GKꒂY]e[S߮/W1ɋ}IaxLl*e4% ^d&VJnm'_ ݱYk"4?]玨5n*]`F]xC-yb(p9*l_ 9O(l=s1]BSZh) V݂TKLx_n=U NHf=Rf-75w<+fY{TRW(*X9>(oɖ*"rLI1UsJ"4֠T^)ܸRܮ=C[ -ĪqEVy TI -VOS7*pEgYܡ+"&,"*1b8\UIZK?1 a"iH$- %ob*Q%ԡ)4}>qY#WZbk)Jw "-g4ٯz -fWKhz[SOC/+)(*%-VQWUk s yꌺk2ٳ(7w&ŧNL֕SK YIX%!#.#ҌR뚒Ze r7iqЖйUP.ζHPՇ tUc-uua })nccvխXbl;)&5zbxh[q*4DLDD>",`u -(a-6"k&TSe"d5bD003ט|dZ)D¦7HdriWyrF#b(Y}K$ +QEbߗsd +a\L\8GQL1K6%Nr)n<1ko%5j񚾘N\Rr)4|JϓO)(c)R]Ihq5r%q E}UkƋ+γ|qV)&f6=z@.'~.x)i j!5VB232 }(Hxׄ:TE9}|ޢ4UkDX1\g%#X ~j{t6cfDh#e#z˷>j1߼z_m|c"j:"5&}^mI_ZM_m5__m5n7 Ru11Ra".zvˢR};nx]Fdz)C +"?PE~4>񦱶}Ms_3 +f&XdRFTYH T0NyiwHEű~M"d0]EIDEY؊{*Ur&R|rԟ*ND&rZ oXR<4ZD8qR 4ByOǹTdUys:^É,Ôcl:%Ӝ!Ȝ٠TLI'I9٠S=aOd{tEc=ѽ="݃mh'ٿƬo"?6|ͤ A_s.I?nl\Ct*5FU+y8y_E]dQw-I<.A8G =}(>ANv +ҽ}4W4:'Ȁ{#I>AAtIr!MJNcE-( /_(-\ZΑʗpHJ M\8M9G!4kyc-AxXXd8eԥ#!NexEdxHM$&Ib~PllI06, "g:`g4{vlcncZ4Ğ8 +&C#_څ:l/?񥑿d1=X;@)79#f\>Hs~XU5ZLrTΉ\])D{Z^8Y84'5&ipH3HDUX>K 16(Go4TS('lMmURF!KȄ!V 4Uk<ej(7e/b*`S}kaXcP<M0ֵ@Mc% 2sIe+3to}t6C\_c6"b$#2M @%P*6)ƚvX&EàFU1qN0 caa;z٦6v {),kŧ`Vޠ+̶`؏oVB0I`PCP3gc]e W)M Ђ]K?\V453KrLf#ߪ=q#`Ǖ92V)r[wA#9dZNdXJ)!BDŐg J&4:Ga%pbg"~k/PX;swokxSPa3NXD]+)0$o_e1Xbf Y[C>Qcg6sϛqՕwkJc,=8=o޳kc,ʬR''1VYu@ 0QF[8cu1 /Mf;1OGiGdH4c,+f:oʋ"޶a] ȵ5wX,쬠92 x$w`kIMt+A)]1EWтnc ?OUcݍzO:Ƃb+c]=3='c-.חfTزTs8 !OY5& !z4CWu7`ily/Vi,Ʋу(lDQJj5Vaxa_c5GxrPHkEl,nrOHHs΋(q6@GRIX!=1/ &!ƒc_c6+VUNXۉqm.:J𒡗g℃.a?nF6H6V>n-n qCƲ^AƲLj +H?Abr*!n,ɇRU"zQhKscex:,}e3,܍u# WaOG񔰴{K=ZQ@S)nŒBҭ, 1hn0X\XqgT$M~93lccڪ ؍u&oÍjHMdmQucy0(>`5lX9sPrscSԴX 8eM4&$5)BԜHk;e}&Gy+R^c=Musi`LޱM+Zc5/ YYbcaȁO>BX1޳Z\iR!n ^ԗ0( +Ɗ_sՍ^z_1QTJp~C$=߲JmWP vmN_幢"@lԤY=:( e!ѰMI2HpʬZ8 SKIƺ,h"2+r5fXG3Y7 $Ĩ tS˨61˛n kj-nF<Σvc */KVՍu{3Yqt;+G7!l9MX;Pیm7V&ݑ/D 8=nccPbn, Kv.0ÍU>6VecͼhhX5 +ʫzlzc6'u8 +S&S,keݬkylXϢGt1@XbB2 Ǜ~DC*ZˌJ^DE|9 .6 {DkX[(q4Agi +kX!/:bj,z2HupќƂk Ɨ[X,YT.J~⊑k'k-wíeXkզ& )z_[TsX' +O֕N,o X:;I@cٺ͒qĤN+2n +(5xJƲƆ벳9;rh ,?%fϸ2;O9L,7XgQcA5:*k(C"N3"4e7V1FL鉓k/݂,SXC\7V%w17*_6nqOE(|Y3(:X&B]X"[nǷqg(=L!|q`c!o%0ȓ}p%ԉk)tЦ+ w,c" ՠ5mA$AC? ^%pazßÚ]cqɶ*/l^cRĽ0xTDBX8Tlk]vAP| wRDK Zca?L 囊EXNQA]ߤ RKE<<;`c+X)ztQ\'~',K7-q4JƂ3\A+Yߧ՟ ӆ&,m!GtRK+n,Teޜ!L8aֈQ!m(j $&1現ꮛ9mmt&{X j Մ oKL]'9-] |ʄ0nEkIٹu3_Ko,KmwXjqu&~A*\7r=g7 8kz-“am8&=x_@ q, ,a'4}=)]m|kb)B8P`44ۣuX+bA7V䚙rc &&< +X!B?Xc-0u'1`;`Xi]߰2肮9&o,Nc̦Xtn,m jcU#xCTs} ]qzV˻?\Iw."oby5QUioOf+F{8q>q*&!CU5n,g^)Qc&Uh^Zm,OP?T#ducIئ#7Ly(*KGfXJV0_)/zYqpjuAЍURQSXZ!oq<\B.ZD{XNj=xrҙf()xcɪqRAnE^jzegšyp}\WXm{9lM'pߧ/t09qԿM)dGX'Z>HxU0E>&N^J>< ޗHҰq,|-GVU&u̸50Uu(Fv)NK"Š8(.Zsf X`Xk4OTgp8lved('Y@1rb+et"<.rUo޳oX)nd> 0N= yIVz;ηr]:I=%j4Xf,S(RY&e )^'Gc"@Fʀ{._qId\u78`lXHϏ8-qlߡstz*UfUhbb${F%*ͧQV5s'0(b t[TN}2^0\ + +!nȿ&GFe}^uEK-"(FSD/81:74~ceϫ7¢J\ ~5dX#]s%(Ig,U\@5" gL +8lCJ\~8&~iC +mm\>d5x-s +!:n KkiOPqHӶNQ:xB_F̦8C9VtD3kse(A01EU5[+1Z@00$b}>#JYn_Ε <;ɧlK-6&bKRo@P:L5 13׿eXpOi*۠$kUrvaSDlDdXz՝`*4ad@O ,O^Cp-0jOpcfܑ< >u:рRc;{niyo꟎`7.7 aѹeCnψ(\1mt4"T5މdČZdN4iw,tɿ/Eء$vM:,(OzOz+aUg _'0OF} lKT~7pUw n ϗi +*YO'{w2+ajFxtN+β}z{y)@bJf6‌ސM}܍zZ1&аf.Ɗen,3OMm&Vz`mW_M3'ǵU'}LNc>yià>gG6ʖ(a8,f3x#4^.#\7ZX\Nj2 oṟ39+>$YlM HtK&e2xKRҡ0J:ŵ#)gQM"]owsg1AcZyKi0"xݘCA,, +\ ABhlJ +E.daGO4=P=|t.% *(\=D* t)huRc:(d c7M{7ן@?Hn>,$2nK(PO̵zׇErk@wYb)|*lN3FYf3 :n,x~چ}kUSl'9}CYx5 x_|;\]^RҒgiՕw$eUc;H7lng"?RLP#c-B 39;eWӕj[+jCz]^lrl<[F VUSp8'm+rE~_x}ro]wΙWV5F`bPW@X8*T_@]E ŲGG(h^n_r`9A/0 :T$\}eLs,œ-HcֆF +cSGK-p;%텲A~Sr?ߞ](}_kȦ/, 2߶,tI .ugǥ.c$L8a#pJ,1keDZyU@,(}"NI$QBU&_A11"v%lf߃ BK ֝(>*eȖhYGXcpq$3dM+A䤓Oc4Ąq0 )vs nX߲ ʴ#I_:=W̑bѵ;8<~6QN62=tdv3fsMcILpMѴF~'$`J*1OX}bJ330.aGEEEB +G"R[䩱tiGc!$О{B7UG u>#Kb>9SHPNPvdz^j鎢XC 0+*?2OǤsN/@_DdKZ&ًM<()MbbϲS dص\`_q|fQ*xYG˫ A?1̕k׷EFw^NOf4{ۆ;0q9aEi'< Q#- ~tڐǙ(Sʩ2JHC82.ƢB_9`-RMy`ۻ\NU(D; ÐᚋOe_( g}MoR׭n'4O4(ݔo3ݲ d*iyK\97ͼ(}mZqt_8XJ֋!p"my&_ /490FL"]H`YTEZ62 gk҉w:B./I+8M5"l>|FYvIѽ\$-ZS2)R& ;)&edQ3w&78Iq(E2ey|ʁ &ҳ?$b'@J!͒۱6ƒ,9nH^]bWHL2iף`B!djZ>p27K^ с(0~"?R^$>JXO\~~PT7x^J*dps5?b) +d X"3 :Du䔨= Y)oWٹmi15𧳄q@{wԛ/.,s},3N-Tz A>"BO૓t `*&tQDMu|}Nq)(( ?6;SFDt |z?@ q!0,ۦR5N"$*x}ݲ.@5C̴rz|HPgMcӧd !Q!Ziıl=17|UnN#& Aٹ^4Wa9& +jRqő{VPY)pgDfN;X״:<3轲зH ?OpJˆFq(8ԸQȰYC<,le8 iYxF>)喘Ջ,GU"c∬0fh^_ K(-M2K|S9X֝D4-!Ò}ڶT of#>A޼4Ol;&ʛZ3]J ʁZ U7?@U LlEDy/D%{%[NF3J 9ڐ:/,"P"$mQ6@}>^i<>6@h'TorI>{TD1`mt%$w 7 {&ȷ:Fe;rP)Y8ƞ1jJX~M\I展ZP:Srq0ys,߹dZ xgL6oѤСM@\R٢7uc E;^Ht7gNoy[B}󫠶: z|=7zQ#u}j[QEiz ;ejyENzXT'How6lvK6;6 [ +siNBہ $8 3dx?q!S2ȯ$ +aymPP&L%W9IӧZS!dD|3:!/ j%389Has]a9!fN(3ͮ4:ʄҰE*#$@615<\q@˛N3?sYeK3g5T.VD)x9&$JTQXR y6h$tN~sp>.Pwf$ꎸ㵤mVv|Rdԋp62`t0Gj}QGvߙZP- Eqd%{ lBe,XV7'W *c;džjƼ7(<.Y㝐h%jv u7nJC{t +]߶Qt?*ey9a{m$ddjp#3bZebA ͨLd c/8ޫ@@#XtS7ɓ]e84_ T(&ױ57DV ɱ8l?0O6uBF4n'VSp +!#9KHBUg~7υ8n9}EvaR_ !mF'D$r*jn6?,;)4I LRBP]BQ/] ONQްPbĚnvpf;^ + &ΑiD_z[O⑐쒨lo?;4 X4cPzhid 2L7v(pxZNP1HfcDr [`$8L씪Q4/:_Qb4קӬ Fa#~U gq0N'H+bf^ 4Ѹ)4Rp+,Lð +7'? zij?E9i4#Hдm-5Kse$D6E"v[)l-EeG_pᅙ^pE~HMwjZNn|2Nר:dc~!#Hȑ@*lK`^(PA3f*O+ڑC#L hZۂ40-IDW#ja6¡Wf{?~9U7ҖfAt\̾y5%Vu7D-g}EAx&H$^<^,!G?}nzJEy"6rZf_Ǝ)җv/3$+22SZImݝR׹h7- "niUke#6B m`|f|ڠ':`t{ѵc^ךVJWH;E3p[]%|8W2&&r A0L˺Ǟ4mI3#?Ʒȉ8% Wl37N _6VK&.%g_-;enBP {9zhе67MR&;2&Q&˪a3ӥFF$$%Ml]lEG :F =l'd}QE"m#!lz&X.IyDyօfZ!ܖXZ*":?jsJUJT5.(yb5D Oרn!ˇZ"Mԧ/A-۱CΕ4S(>c*5޺)ygQu@&@SEȦʉ_C) J Xvd@ )\,Lru5]zK{h!XǻRQ+ = +d& X,@c|2v 5tZiH廬ڡokM-|ó61|Z&u%D9PzƵaf8v9<l3~IQ߆PX mmDeM1jxxuB*7Y[Md"'?)#-l0|w-腧-w/`Q#>ݸ;4~x)lys- cР,$ՔldH Fj^KUoB̉i,rB4LL<ڦ ̸GLZɢ P(8GskY,ԳEx&w%V0d1GjeJ1$/d8g0Y +AoV4-\Vdn$+"WÚ 1QT+ќ׉M^PONZ*p00/:4mMV^}2FF (DgrVLvF&+5) 1Qێ uЩZIE'w0YcXu~qv̛)Fc';%[H*p0zr,p!xP? ]$y 6{3+9 +?̝,[{FJ p! |oxx*TGY1^'I//R  j }\Mw̩W)VV 0a?w39a%} >@}í`8HY/ll!)xZy4c(\o(4fb%h!;\3 +o^/v|cx@3Fһ6{0<~-nQoiQ}sbbPҚP-gi1i2'?/c]Sre~[Z+uq7w=3=Q ?Q?P4dWfNm@Y vb&[0 -H +*Ѻf,C%)D : D)WwDX.⚲ 0Acfn&X%ڌy,< e;۝ZOPӊG9z fElPIZna:SR(VɄWJNl6x +#v8<Ϭ&"N.GnZ{ bNM蘌 vUdGғgufn +aA?y*^u79CH&6$_#yS3NXf3Q5=hz𑭅x8@{X~v1*ԺF՟mur >Pq`bWf3puE#Yi>^6di|1/JV"ji]YvSk>;Fry\S +:.o#쮜Xj_rH|(@T+ UqvY>/zI~ +CɗbafP_IAŜO޸`CMG`*1/y7dFkw> ]9RLg7Z8$ @?[ż;{>y07zQG&Q~u Vm Ɠߒr BV/3!AVr 878e_3]0ZfpvSXsB^m,%DD71$O6L?cA7wR>!WveV 1xgVaiJNetO̜?b1)PYueJ+&8)B v&fV, VsJew#ӣ1<D=#|l5\7.7 `ILQ?hWsB]F-pzڍ +7OO6Ph>FS+FZ-C8AvahFs"^ssh:D{ ѝJwKo; 2PGf,P.sTHк 5HwepR,0kqI>t}Ҁ>z +trQXsM pHyK A%p#1&ScwL.H #9+ݝ=D)FXo2JU{)Op̮8y ,lk +pt@Р#LXUMQB,;F[M:ɏ߭aӐXh@L=]o]8!Z.OxHyԭl\[&w#AIX5'Wy⢍=+>MMt#{9DuLm pLYU~fF* 9Jccb o&޶[P)&մQ55 lQc +>6b07EµT _ KjʡZSPtdwePz^U Qe,Wn($MOt8H'5W5\ C^4# FִSr?3q 5y-h1laBbh(~DQ+ :6"ڍjԝڽ,Oiׁ)pptrX5rsr *gePK{Vz#fd3O:?uѬ+_,ӋeΖ/!Il %bWD\t#x‰n+*%%PəGBJEl:sA4ώۛ8Z)1FO6(qAx#i⭹:śRu>KF,ʤKİBf9܂t5f\٤1'[-W/%" $ 3u7b]m\bu +p kDQ2V" $j(}7վ<~D=vl,bp_F6߇0qKǐ˓z7;\~ZZ(^T<#z洯57[)UK}aµh: Rn<"6Γ^uMVw|Q\=>Yke iT7DHHlʉZ[~PiJ7$ͧ!"5gR<)FTpK3׭t¡ qS vVxOg#j =`ߊ +md!>+ETI ^>L@"fGc;:+jTfkgV^j<'tzϫCtu*.4 ,WY*.EۛB|H'~W0ղ]R#U@XYrJdRC,;0'9KE hQ q]DkCal*|KH2x(y9;g{BZ"Ws F~f^)aoqrwPnllLX<;{?fvKG'JhYC_ aH-Ja @ j^ځ oB-L칋q;CSƾA&⚷C($ 'Ԋ2C:Z#f:\L| 2*b+!1--.(g(pHe?BC&pLmi=ߴߧl79+$!H-F$w;'G( >Eb**MD0!(Eio *H⇭&Ôh3Go;F/8wQ6HT k߭C[*'"ŧ{:'LTfK)O)Y +f dᰄtfM ~ l6Ծψ)ڷ z^z}&g݈~m%W]E, Y螳檂Y?0-a>G ʏ>Z{0AZhJ9'i-y:i KWz.M Հ. T7atE /ڲ ܳKܳީSg%U4sd M U|FUA)ʇ +*HӰrx̰|6DXssasݰY2WYdsXe<4v֗|Uf=;3,9@ ~"RӠ\]&N )\L!nITlY:(:DoΣ{쵅_#;`uia/ o^kuzu2ύSĨa\ + her #TISw_]0[k-h9qYhj`L o 4tI6um%t*HC %!YT3#QwLC6`9f'I̹eiNRc&4H5FI7&#a*1!h8 Ǯ!0gq2`bayu0HF9.Z ?u^˿V8h~T2L +Em4;pPNA*IOܐ T'H&j:\JvO Ψki@_slD0t$c&? C!Q +CKH vj^(\=ن$Bixq +m{-QMgbb +:̅.&񃠛 63hpv5v[pV+MJfZL[S5Go:ؐچ Ppt c,E{ :h IxFW 트:-yOIj{ȚAit3]Z@sP]:_ڰ݁^Z +ڀ$pCktUg oNki}YoGD tΞ&(p ; ,O'VFٟr4H?Wj?r! + D8BvoȆGNmUK!'0yzqYSDJL vG)fkNRDPHLGO c +AMV$B 20>JO`<A?0؟} +hJ;LFβNR`**NG +}jR1<5(Oyr:ziMǔuP@â騱 +}\t34r3Y toD$#ٸeOL ornn:l /1XMgu;FshdyW89]Z"-eCWP(iF ?0\. c0GC TCB21K+ g#b>@5ѷ+fЧ-ec&H+`E}0wg@?̡"e:8f__COЄR;܂'/6cn;Kmve^0%ø3c2{h5xl_j崇TT Ɏkȣ@mm1bD_hЅrw tݜN4_AM׉NUQ30r &xυ@ tbrBY97d-CÈvPԟ t-Gh@ĵ1rAըr* 8 +nc\ t` ؈zAULv́)=l:-08S ө Nyh=HqWjH` +fNKW_K']Ѕ +΅XaDla?kOyا-ݧ)~~G-]FNT/r׬t<%Fc[R:=&pt e||Sn-w.~u-x.g]L$o>hہD&}K0HsQu@>|'~<+pɉ>M )p[GRWA& + u̜ +F׋!BZmB`=Xѯ!C~.)҅@l'k#j(ȣ6$8q)b*KBM,7:O=9LrBiC9NX"?:&'t3X~/mZUXK[P9RQF%تSgfgꝹX*)fHD8Ȝ7a{2[FQdftTo2R ޏWZ>p%r)\IQ:F")7~H9 Wh +kDpމYrJ@ZB?a9Fny2G܃k e* Ffk\{Mć @r#OyW%d4rNս{jq'3qHkfq̷.LzCY[/3Z\*Ju|@bTAjBĹę qZ>dqM>31y8/.DʪX6c.< ٧ѐ <WnT0l)RyQGԟ +\ i4Xa \*J}pRh%|+'j +)+*ѭ_&oJO4!c/0 3+LjFw O>by1D=MYDf3/$qd[Vҕ =/HPQ]9ЪG`HP`Mt-␑#feNlfd.+$z.V[ G*4USKry5ɬd&.OZUƚ"C2c~ PD/++bv?{zj%Ɍߥqi4Rx 9s N iw|pd,S%bgZ2va"Ҍ&^]⥋#gi2ؿ*B89a1!4-MZZ9WOS dGvՃ41ۗqFfRP^AoePqN1pDΧ|%x-39uϙb&g`5[w +;.Zm.@pr3r^|1z} nu/m3&8//nN\u&u67?c3fsZvw]\4?jΜ3 oSgl"W$tl,PYm$wԐRo &̈́C?7p%5F_E~S?k ]%CVH_D?щwuP} lx##$a~Bz. +W4|&f_<6H {Nf >ڏB!$]apϴ-0 } #d8/ѭ7. TpwDQ?@SU +@`k0n'qcSl*gV'O CL|E  +}(B_r}( +}cyX>B?7w5l9mx0MMR 6æ]p;8zX[)4JJ>ŝ*zSôyՀ`^ξе%Uhm\1K@iyIƑ\ z K/Na1_S )4ӧuwAHIb{v1,pG) +Z-*Z";@'ምuTS'Dے,=ϋE\"%[t+#.[h]ĈHZVE| +̠26aj*G H {*tmIYieB{ ѕ&/ 2QNRf1tҺȫ=.i#19t. =.=f1%⡠t +OɁҽ`DuƥSFy gx ]/ƒKn ү ac?TtIYs@ E,ob1MD 5,\EW̧=yq3gg4d-|K@a`bIyћѽaW!,}SMm[ºQN!4waAWwj"< =jJ [*N` p88F3a-BXh=Q ~V+@B-+3}``jf-td}5vva(BYpPde뿘ܿ|mUuR/v/^PV0°Ђ̰G-07fԃv ά; mh- +S Iij +#Wˢ_@)纲;rz;6}7gr5ELSBo5P#0X3*d`b>t˷ܽh˴$na+>eP sAQMٯ,A(wx3s LnwN2zWʹm j6<'tyG3qo?e;SK{ڳ>vsK"- mcڢ?~vvf×Ue6[겙6=dCۛٱ2s˙b@F DIA$ 9H q$1 #q)"/j@"Bƾ@-;t P}2F6u$眲i %N+x{Ɣtu5:_-|Fo5R3G:2ҾֿLR*N %8F57-АSBN|D͙.ݛ.8y5aOfhEˆeC/5aVt>+1>K= 5ӠRJ +]"Oi} (j}!WDlAVHzRejx'VRn8@#xw0G^}jGT\붱W B}U:8lĵA/϶lGAè(Ĕy9&:Y"$.[Դ@K= `W«,ټ>S\2>\<7=ܱ<e.%0fʜTY='\Ea!<폍q- +endstream endobj 64 0 obj <>stream +*4'۞Kt+Yq;}#QuQE: J$Y<־nZ̨ENX1Š\b;hZo\2:kW~*DeIUq/DKCu.)y0E?<7 +M /]L hRb`3YqW鱪 +{BeDt3Bos$A]ē|[s\& 2(4Y.44_jo z Tirncvb0-O +yo{kǹ0r  +ԡ3)s$1Jax\ɫKHΛ|܆?\! Gbx);vWZen~x\wVV%AsF$o5s:a<~0ɹIp6x-yg< w\<O_Uߏv #'ui'3GŽd6(:& ,٩j!=Z7 l Bzr[/jnZE'R手t o쏄W0DUi#xk 2֓Vmh[~ᡣ35X8 hrN&w-Vm9~+,^ l4,) +M)d0V/R+NiD%}g0%ꡀ!ό2pYc>^ GpŶ(*=SQʨl2; RY),$t2!WsRn)'@TiT<N{lFFM<.zbaP#` +]g+ 9`(ڸ #,ه:gU""8) wT؀x y<d`zo각xx+2}6<^rˉvԽĂF 0R7` jO9},4ųȃ[m*ȲQޝz9tGF=z6;d9&~=K#agI(8j|Lh-$tI+O2*6t Ɖ0@vLkã?˻PZLpD!E@g1#b*ѿE8YP: Da^37qkg<ӳM6i6VįDHRĨ7L!8=e[B M\ƓCi ..o 9ʋgi7l_|c*r#VN'E@RdˏN$9ahw/嫝 42 (R'f,h 1+Nb",yytxPDUdj0}ȁK1-|74 f#qĝd6` ;8O3rA}T4hBwޓR |$?Z L@x Fq4c,>˵(M7䔦ChJ*YtXD, yvKZi2N v +) &-:Y)YT{o(E >z$F)1*p:}f1 6>Nf`- SsiY1d!pA`2#?xEֺM/ NӢa*hRtW'm +_Haȁ$qBS;f28}EV!`-X+A-d6˨HrbOW3e^dO e:3q\ '>U-K+8̙+\څ}FӺ!n^Fw)83€U'W=ȂqP[%FU~^d w8#D[sg0&;[߭OͨFjc*9Ȓ{z#WMH1Ŭ.=XLp F;Ę͑[2U52^b|`*ր Ex=aOb Vrd, 9@ޫn=ҁ=1ܻJ:mc?ff?2.wvؑ.(޽c G~y c?ϧ'/}Cc?,WD/IܘGMDv/9GESj9u;VJZ}8Y}?R 9'ʤzU?eGY0D$>@2y1x0HR tމ #hl_2 ㌢Xy&LC`Ÿ$raD֒[^;H+pƛ߄Vե| I[_R[K}>Q7%- d`L'08L|Jϥ,yE˷cY kgukaܥ-<0Foc`SW` +Ny%+YeSBDWZ6Z)_?̲;j$ ' S%2_R[)N!,&"Megs4@d11(Dh~-+Jk<)OjF%{_X0Ǎ]'j:GYYm3]66<۰?n̓5=\wJ$)LC o"?,K8.F$FFy:߮ ")`w"-)t8p"$ԼWPeay4YY` +Ze Goضq :-/6Z?3c$#,"SUZ GnEEg1<$qKTsTB^flٗId}raջ=ަ2b|;KL)ŷ!W1: '6[ӟ> 3ue`'x" +Gk1 ?ݴ'9pRg ^qŷw22sP$IdΛeʽ+"INLi=v{3y P`8NT04qp0>k8 e l\CH.C]L\ %<ap1W2dsP>2^m=d!oMa<;}Orhv4fnmm՛k8pA: ߇1fa?6 +?']yk:-x#g8"x 2dE[~0 espva}L\. kUZ +0(,ٛ+݁4@s_+ŘQ'`!gO^IREږ$\I!P\ R3=c{?0$"|N8S7\l7Co:5+ۿLrH `M#t>ir i;y4<5L~J5 |:V=P5qJ_ 4!3+;Bkq! +$ >mgTҌM8K4n5 ~!llRt}&N\&Zs/NDU"#}Q&EaDq_#Q$!MjmD)F$0ь-mxƥbVP`JQ4H0G +3npt~>1Yΐ,g0"p`W;H(* 9+tbEjW?!d0G)DKC| + LP=T0 sښbr-t\"ejjN/ +i )")w()PQX Bpx#G`"x G%]F. +諗+b +>b7k!Qv_ZE&a)Υä :c5ׁ~Fa!m4?We'43cY$q"яQ&(4աξXp0QI"DZ-"WĪI.p d׈L(YGa!F $d#{|DxS[ !L<Eq0A M]1DzߜH!.B;E4wT؉ sɿN37q6Bv#p򡈸"^am1^["'B=#ٴ?N"DEQQ"j6~]dIRL +QmPTSU(Rj@ 8~r 0sqZZS^6BrG=+9qbl5 ONH&]z1&z.[6Ep + Q!d>N$OkCNәT)Ρ)مre|8wF3ShYYG2?ps:sL߈uyh),4¬*V?-l"@*ݺUfF,p lMD3p7|ǓV&D!7ω|E<$aBM1g +B̺3rCZM!;afY@ 1Gg!o zhJL\a@O !ϬRF+rGaQSV"iS 83&"cy BC8ေ,Фp>|ݳNÙ 8$B-DFrG|khk%;Π ;TFP^H(* [ȎH#/ a~@u*})j,2= fj&q (JD$O8,Eplp;BeZ/19'( "b*Vrg0_a$~><Λ!Ixb-8/O^p頵n!z&[89VՆ%wpS6VjffO[ +m𿋡aJ" S:H7D$.`+L?JH-uxD-㡕"“o f\Ѻ>HD&q>6T#V0yad< {茰a2::wHDr5Ȕ5aU 1f.`8 +CtBtYL M8tRM&ppBa$FfϹ B6nCPvŌ5 oeT&+wڰ*rAC@:u)P5+@0uK;1{"J @)ml1/lmA a0]e>X ;1e!.4bh"tChþIbG)"1cA&b(Ȃ풸bA#HF582}B5Ɛl8A61+lSD6 wXwyC3K|0#@7Fv63"['. f8&8b@3VfTB +MJ"9eݰ4b/aߩAe dS` g8V,!a颏ib/zylh m-n=a mt/AJxaBY5Kn[蜜 Lt$|D5pg#u 9uL0zsaRNtl֕ŪM&jW"BA&&b,&4^^geia20uk(F";1r͍DN.M1&))dhMZ 2DCLXP0w62R̈́4 r",u_m4 #Rz+gmBHj"a" "hpD7gDC(qx΅ぜ ))MA6Ø ‡Ø} +zaAP1D/KZџ)";[^ E Q [S|LSƴ֜H] ;"{CypF(ȳ߇AC6p-UW|ˣ_'TBW6#'Ti!cTVG?XtO +!"R6P"f!HR5?"H~")>(ҴBTs>C.$Ը7@9v|@U5=@]Q{  AO&C_uƉ+C0޿D< =D|9:#>DA&߁w8{Ķ"wP|v zF;k#;(_ S;A$S]BP5 \k:8őL*Yϱ$ A!$oh{t~&Ed#r@q48P<N`A:S>7XP37Pj**Vn677; hT&i\wa y.]LsbԉwժN( \2,;Ů<{t t a VM0$heg8EvH5NyDS @!5`CYE4% ^^dC%]!%FӸ zG}8 J ; NH*)mp*(EO}Q \M^RPbFZIp0*I/8U*|~_*! 6Nj'Ռo2 +:JZ{F0Zi} ov,[38J-h R=q9ILRRFeèki32JEBTd;;&'ULR#A|55ʐBG@܆N^̡ I9L1+"x >V@ PE[D.9PHTQP72hFO wS<Xr)ǭVVB %EuWu $,  $W4=A{f 7O(A` ))<ƁF0*&'Yۂ +ý$N0G[TaS* \B~>> :В$|`iiʝZU@'YNaPO4t @Jy?|3!<s\JB*C sDD$ @4>\#}}w=@9o[5"n: )uCFi:"^y9Ft@+ @FU)n5^T$1rJ}ˁLn9Pe'pfq` jpVI#Me"@T v ś̪E8 +P78Hnk7@G> Z݃7P6-ٝ;5 ?g $zxWـB1xᾁ[P +c mI( ~k?~c)j*`g)*jsӉ)Sd< m ?X}nimƕ/X<Y\kC_q?D%gQNe+U@r2u=Tbh{-@0|ne(ԈNkDB; :ZqEw祶,b=>),} :L @( QavJеݠ= s- "Ka.g[ m It90ooHڎ/k>yNᾊ.{!.;[ n \Ww=@Ci\V Xw] 15-c8lW W[,{-sVx- Ux2\wqMI,qk `XZj%{ٲ\y@ϰN1 x-P-?`\(+(vABޫh~I,Gǩz*e"q]K,p٭>XԴS) ܸƒ;" .446|xFJuBcQg,=;b(-TYpWE k /K r:b&? +\n~Q0ѻ $; !(X`A3z<ڒu0`8," H)@FeYU)ζ<,ޗ~x=̴}:,s $z"E{i6&-"pS_OBد~37?UH>UxfTQZwz ;1QSC0w k*)rϥ(.˲%u~@9Y}XR2Q5z8[P =b J @k/# 0{fplI^*3@m; '\/q`ZwlaAI9KD%[HPL _.>@F\UZ.*|J PF8|Ps%1 ƹhx_>,!N4dH|cYbݸG?1{XxJd= #UA Bi'*,P%hpV(+s eWRBe07A`Μ\8^X< N -+OT`κ zǵOm:r.wpkzlx#YK+MF0<`@/ l'tG} Bj\yLHϥ2E`ԥ}ShU [y97 &1_y +J>4[OPuu6`Nk"5]`0j@-b4c<}υ,mĢ#J7gkf@R̞ s5 vYU,?k ʓao\``-3}Vx)t@X$9,A9" "?23/!kh )͖.~Vɕ"=U07ջfۇOdLȱ+4RŐhtɋY*Ɋn~iK8]#mAP^Æ&_AI@u +nYuۈǶP雙cqtHTme+pi]5,e&+wrBP{c|?Sbx Zv;:S=CHt@_'ό;@wA/)1B|X.=i.t9Y[}tod2kq@H `LGUXqHHYʖioP=&hw&(֩G.y4DJ|\4$>\\MG'g-bx@  /PÙ4σXHH8epz'R\P4|#488bfaЦ(3@bnVm +8A2rK= XKM\8qJ#K%KcEU\ãVxDA+ΐ׾F+q%̦Z+G!e^Qt
    =i*g RX!KoXWPv\R2X0]=^fи +s1୭K%Fn=S!A2٪4?u)@J#_ zM
    yqd)Q nqt '$ aDNڝ cu~  b$t`x ^M?u"̠Ĺ,;EA LMϊ l 8@jyY_o!3ίQC9LKಃm#Txf$E`40TUUiXɿO +Faˈ9c:K[?xIsG!#oNNt&^Ti&>gmoGt^:2ϲ 40uQ%ӽ6^_(w+9_ֲ[:w"#ͩȲ{+tmWxB,l:dW4iŲFqm/Ⱥ?/֢;^@IFq|JKֽq/4|QT'&z-G̊ob`hX_ITnNICQ 'Nn%״+;>ƖeFops?{ 3P3 oLd*LP C@bj/CϺ-ק +Rs7ӂ(``^M>AcS6e +?&<%Ki``ň[p? ?j&umIMGm/ IJ9m,hr Lg$ RK?FnJRe,'PnTs)ȟKQHjt[$ͮ3,L*NyrsW54M5f~WHYiV:պh(Gzֲy +.o*jS8or^q0hOnOOoLx6, IAϟkdgzogk>F8^`9}Y7yt{IPEu;}*SuMaz6fD{o8mӡ~"ȽE' 󀠛K.Wd_ۓ4x-, -o1aͿ.Ky.sGɩ3WPsl-L?x> Z?kv=(ȱ";x=f'=|;\v/m^0$/~ TB:Rx9B e[FDO!zۯ_d<.4- +p}rc 0a~ !H_Oy̠(.Bp. }y34`H +=0?pęw]@X’٢Y"H:4;˭ +tP n9 E/r,ȸ;%C:ܷUFq(-C`=ʏ:ۮ7vha3b: 6ᷟ] dZ0hc=@d~ZVDJ fZZ"ևZi߄/͎. lBoRZDuf_1Hd vmEH֯dM密h.V?&w#CG|hI/s#I}@"`"1nw]<ʩyo}K.Br +\oVI 7W|_Neʀ1(מ['Y&/ySY&0{FؗcDV?`9 CaοEz)ҠդC7M х%+v~c=^:ڝ6< 2[Gvst3PBI}#.ǖuُBt'@ZGC[+zA޷D+f!s%vBk- E7OA k qu=pN7S8::Ϡ^q۠{};]ίP_!+9ʘEQƁm*S#is92C[ 7dAdyd^- x+̝ b,Tg^^ Þj!z-UTv r_Z|WӎigCn_iWA_o-IuT|/1KTG9Qw^(xհz'w\ uۼ>C_)r㙒Ϥ2omž.Xgd~^*/qtN^p/Z/[274 75)%+lL/'dU{y\yUE"Ѐ>@yt}j۬%##i),ͨsqpT,"Z>(M\ǦhDoW0Oum[%S ["%Yq]dD>:`bĶU!77+WpD +ߜ[ܐ.z©_PKM堨ήQC?w^A~Y#`-e42I")y/}hїT"/%ȁ* 15 ߼2K!}x!mhkhr'*0ED* }塟eyqsNq[ ~D O}x~ (?[[*6Fߙe+Ρhe t/Tu2 [vD`c97ײT + f|C)kc"a1.- }O:%]|MBA|uYwJ3C,\6_1bhQyV>tPE+ Qq"oH'CaZoxND|'(|ґ>삸6Qޤ7BeMbÄTH(%\R f IMc8I^/>Cõ!ڔSj!#/1r t6jIgZI_žhrִZ j7ù2 +|H s$|oYZn,d; lc@ B&Z'xFJ)n^ t(% 4-D[Z| "@4/kkLUY`ѽ4O#χܗɫłt{i)Ddjܣ)˩5Y*5)-p1JưOi4g,РKCnoI_nǡZrm #δDxVdI#$O_taBKsS i*ʳo)1}iTS72nͣ+s֫{dI~gߨBTP(֠$[b_n[L!S~wƅƑJU2/U?8mK`t &2W4F.-J0״? ڤE}` U Y%GSM,|^x`N?w` {۔Z\SGm)WaK>ov߂~#ۍZ?Vx=*'VnMAHr"exPQ֣#r ~ڷ8p +֫ +dQKh") +i=+ȞNn+o2ǧAv^pڀ.s`LdqIR@640|:Xl$]pEPdCoj(" ? d׌nV0oDEpU~K|:~he#p Z$X_)]K6C'@DԵ'!z*F'ݕdt9E4EAԯ{;̘t7 1m3;i:%POغe1~STj@z%F]ݫgLߑ8՛ߡB-@[0-sDOb1f'&w]׋lWNzo}HXi*S̩}板_}(wOhoV\YuaQaB M;: j+@j?ŇwWyBo]pN$վD6^Ԋ B+W +k~u!1-asK.4 rƔ{>qQ ' rf#a -K/bZ +mD^s.YՇ}r-"o,y>ŤzZFW_iv :™Tf쫯$RcQ䫗 +"VY|sV=xYA9 bUF Ltrd͋M9贯$NG1g I<[(Nkp$':+awNO*3Y|^R=jzЩ]՝ptʇŌ7x@[qMBnqs@zצšqc*_09X[{!{sxf$PwxbgD YYsXi -W6ڶJmuj@9q*;o6s1 +R=r~2G( K jXT U:1|w*eM6f(QݝfUf=&8O: sv/$y(?TZ5gX{/B%ws\^9۵QJ?~h"s΋X KZR:F%Aݨ+JslSLKQܶ;-e)t;KZ `n,f`Cɦْ hQjdI(n%98 +s*> +][9]既_{G0K  +B_9L6ōsbU-9D88@VD:s\$L󊿬toοkJ_l9?%Yv3蜚9|RrY(D -҇:ʖG"zycK]*IMObIŦ1@K8ڬ$Zf ^e%Q>[7$9pchcI8,iOkAHg%% yi Ŷ+i(gJ |BsF,ia!{`%]¹q|s6(\d%-u|Uu c^k[D![HM0@;*jߙ\Z }й*Y>&y-\:b@p(fe:ihx:-Q緐}9i tLIDuʕ秣$bt7NŠ>)A X# ךfAvndQLuysXr _w1[qaN0R zgBN1N{Wts)QlRQJ4Aӎ {eHU<$TXR"F{E_%X:_P$OKê8*hL[y&'u +scJncn#O8mN:xXbV=tZ7>D"4)Nsgl=7'>ʥB +f#B=FI{>t\֐oKSAK8^[xq* :eR.菏G|2=H 1d|4^ϑqS>JpgAI>)_2O8"I1?+Þj p f?v O03?z+a:.=O1';:Cilsu,uP{hhLBY@^X=&VvG:  زG佡&SnSR :Isxݍq+&:ū!+h؟ uD 6ib z/*Lr5̴,(A1G1G,] 2Ñ>wR&6}#!4EeQdn29i]<#Gn D8dCJ L{Wp2d1}f ~A\$*Y}iQz#By~͑r6~DCab < +l/, D2MjꇕhJEGUi D^=ބ)vL) +JP}"h3^-H8Z$LY 8]lu|ժDI3 2j +G~&3j"KQ[@(pMMtQaO*Sr2YhuVЏɻ|`! kmLX/1cA+tྍ7 ۠$D uȻ- կK+*E J) +ԽP ۖ#(&(E\rá=dcBќ?=- xHie-b -`׎a90O2"Rx@g!@!*9Kٍ;tJ\| d% RebD+,60?ϳZi<2}(WSlؤXb?2b&@hurF* l`WTz.';naL,PNG~/@ mI+ b@qc@_@*hoMBГ#)(_]b^O P~Tz#U:ҷ 8vF^RUh +}yBxl7%JASXSCl, q8@eF>9{Wە@ z^J ,BTXz$ސE'1I3NL.\GKSW`)^:4I jn)z Nc+@J;A@ +]>ewl#X,3@ث:>x$ + P-TաI^qH_`X=42 @{i\)jU@.6sϯEo:XКP@g8*# U_%SYt PΝ0% 46+dY2Yìs .`ɴ 8%R䳼g !b'&R +D +~eLO@ihoUh?I#'p_ #v3l*!~AؐT@~m]a1 -t?:==.8 |xzj68畛:8 sv 2+$.hWҀQNf6z + ۚmC .'UOtDL=Gī\ ւ0Q7v +E/m"݁}Y(nƅ;2Y܁ܓHA  +)fMs~L PI@vQ%"cϑ'!cZ\fƾ+Iw UcLʾVS܁r<x FC9 ,K@> Djrr_2gILYxc#dL]"g?=% B"JlDw+urz ^* 0 PL]S1;_m?PG< nߛ'CYA")䷯c- D05ADVX́QώlTrmip4D gK{3ڎM\pyTU)L PS[D&qm o௔4Aĭ[W%j6q{1Ui :F%ICk/. +iTJ{.v'L"UR"& +*J7J&VVnN0; +qret@T{#M5{c!뙍}4]_a \kR\6E, + +{űN>lC$J3 ) +Ee# V)ӃQ ~j(/ Rv 6hZ +sfTO`ܹRi$1gzl6RlfoEI +!Ad:QDZM"m h\wDAbW_X/ + a5U ݇((*WJUQ9 +U%LQ lQ*!Pd^wJ;Z_ ˆZe&4!p6![Z. 1 O &(%ĔQ =0&ƒc]^ $*yMbr7xY Pk&UL9ٞL2oG"J );l&(eWW8^ $0 L֒D Z63 3,DݙB[u9.ugsOm)Cd(ELvLD Ayv(߂ncH L6ЂWBBgm9~X -&(C?PL/{$RØ $=iLdur-a[uI jFWX=2إ J#s&hJ- es123P23$#tm|gڣtpޜS0VVDP4sޙX@t 1׃Ӏg*/ ARKT"b1rVP ޙhհ 25i̒o10M0 +!) EuBSQhއHDf +WL4K1-2A1ɚRm5AN1e>TP&X&s TyB$~WWUС(i2㧄|iAKF (M^Ù96TtW m.vߟI +aU ɖX|oh~D2$= l~AtۘEHIhZ_tнUi-<bUIU$OR4k5XImB SO Y' __ +&i\fM4C=" ~2OGF hiPvbxiNOu7=Ij K7c?VKEH˕k='x&l":M~l2*GS_G(C@jS{-P4nj\[8DMhMJ +1Or/C/Q?SMHAˆ@*0rV=2JC8{=;KU)0C:m44aNm;:wM +qMX6 95CF5Þ`UPt$Wԉm9P+}v4:ʉT#=F~;-6Z7N6Pv)rܢ'GI_jgsE<5IY4+SEsrN26"/KOœR=-/# J*HjXI,SOR|NtNDjFqK1ΧfI H4|ށ6?Q.Oc^@'VknSnK{}z2:fVی]M:bkH٨lQWrUK6]P̑䋧K~N9yek1 N(0R]$XS#%$ˊ%$IKs Thņ;RʌG%HēP'}Fa,טK+!)Rћc.}? +;_cgK;_)^LcK-rC%T9\N[՜^M)R:zȬ@dpլlQR>j#%-}<2_d[2O|j!UjK:{%*-mKKhͷ4g ek6P +"Ra/VG:hei@r=ѹ+u5Ng QC_4% 6m7K_wR`ۏ . c؏z#p7Xk *9@f8$r,}Z +lJ%$tÑH&N=f8B~T|P-e*;YtW[Zp -=mbeS-jHͶ)4\T:s0z!0ݒhw. F)]-kͭ$vI$2l @z^ b Y/0t~&LR3;4 +{Z&pqQuK<.[Pk9g,FIdxHw$GH[h!c;8i8pi +8\n7?u(%lm)-E^tb-t%>l`S3c5U* +Ġy|'֕!Vpy$R/.-A(t!9S62`$jqiL^+֒:VNޘ"!F`<>'EtڏO*׉JU(5 cݶL"Uj.'T$Ĕ)T27!^Ӗ2sp4t͵/Ai)L>M+*=yS):}MHl뾛m}}bNm:61q_ +]kXž]bKhlam2]VdAk"VwM5Of3M6]ms(զkA0@SCV#t*;OP_cLf9USP mJ7 P$d]Y.N1;2ߩQ \Mx7-RZ%9қ55kpRGNJ/W+伦.~#-pҔ0x xMMѦ{Mw&U \?4Q~'d.(Ξk%JVo:mLRwX9A>g ]HcA~y(n8bi&4vxF=g))37%7E}] 2)t_)A +)Z{h7WG9~pZ`j~p'7&?2YNi)˩mDE*R$( PnjD)PCpB}E,z!*Avf[oj@,'"NT7;U[V,Tv +tSW1A@>';R7_i@T_/_AW!9gk0N8SdډJ&pzjcJePOh +VO{F c(]NC ׾ScLRD\NGuV 5 < ])vV,fB$ovWY%;K/nkx;S-}35Zԩl\ Sx kGTF*ZQkŔW"Ikȶd~EbnQXwNz㕈'DD³UftsDTJ7A6gN,&J1PEDǭYT%//]?S$6WOv.*BUSQJ'h:lԫʀz +W/zSew#tRO*!<\AJ00)WP='U#ORL]U7*\!Xΐ~i2-J( #񫠂Tڻg 1Q=>Ս4aŢŻyAP@ZO87V`N&Y!lIspY[ߧˬ֌Qi 4Y] MWh@xX5@ƕ`"i +uݻd UX j7CLaDVf#̵I+1P>I$w Qhlqe/+ъc:TSeSi ء$UL%ihՒ"IUa@HHP;po@膅jVUD\?*G_X,Tr/z_AbH{!} (^o @+S(|hB/ +J4iwO;+z|;ɲ꧿fm" +❕HBq]]k;Cu4CQ+0yN >2F%qVVI8-*𑋖ToU*&rmm5W*Xw<7H*h2&"Vѧ(˫&si I¤*XP ^leWJ*lX 8LU5#ɿ'W]7\; +ʽ+}U-]͖NUgL(vP.ޯdUե] lyfd %c[}D VYj-XEŮ +',,Bz}UDxk,NUyzb~Zd_E d1U_9^n!DH.KXfTtڔoکRX鰑F~=>+2<4csm#qXm'Ӌ%CD>ZRXU/ ĹSXlDq,ЕgJ[5Qwʻsb0D`&:[t6u{EYB̔{o!f__x},{=k{cM~ yiN-;c:>TSk]B4pZ#FsǢ pqŌ݊a7c= +3B6*s[зX=Em5VI$qCؗ?Xyz/@Hq3z,)#$;doYՎ!둹})3BoYC=쇥[I.0r'5%.w\% +)'?lL2Q#(k?_VQXɾQX4$s$wcq7bӝ8H~8Ie?*@cQĶ­ǚVX"ZxHB`e6% +`MN`:1n1C͇ {S 0/gz K^>V:쮁_oXCUKYU_h>Ti Ξ,QvT‚6'X% o|U̫F%ǿWHX/g>>5݉v0k&+|g hY|,WX ^ rz,F Y[јypj<eB&XX len eI5h|*={^q+ALN |q(D?id"yc]7@DǢbdtxJ12@3?&[fLc!v~,DjuTcd2ǘS~ADtdZcXto0%X N*X(L#j =n}}+ CcM6rӡd ,TgǕt@ֈKr@Zn)Ȳ dazdͨ{ۏcJyhXA']"bXXeK+qOcف?2<\Tt^;/S#gqm,G5Pg?¬d"cvI +[c!IFk^`/XAX;SXӊehsy]KV#ʬ%+c1jHmh8-XiCX`K9#b5܀ *i5›Eҿ;:'=: J1? >s~+h;öcVq-=V]y4+ ԼG52E(?O,y6 hU@|!1cj4pZ[g.=) o2YB u]eXO 1'%pWcћ/x4= JnhgXTDZ`X D#˜c$ n9Jo, {JJWE: 7T[.!*eb$#4j9,˜̣C̮O1X1_7@~cmij$uݲ.:XdٷrV[xc>dkֆ +A /~\?yApvc`7VZ4#$'dJe#.֘vn`V[%- +DK!+VbW[ƪX_,uU\}i⢊z;+ƚ0~#.|%$፵2o%,WS7W/PFRZYZɼVXlm%^{r|"JG}1~Z*\b)(VnXS2o,KhŦVAabMvSt~+yN[}|59< A# H7qbn`]S[$~2CƊ1LcVxo,D{Dq%/^X–abozձx,c?yu±rEW8{Z:Ap,bOv]i5c&6k"I63tJ&'+'cW;c >5%!9ԌGaHJ'輤cY :_͜nLc ;M΄` .|bu1Dxq2I7\;|4^Ɨ~*nɱМ(ھ9HUc^8W{oy"2 4?5*0k\[]m8rr, jdX%Mȱ01ʱYkВP n宩nv /W+ܡJ +nv,H&-|њ;B,SgR tiH:זM咂p==XqF\j< e=CmT 5;v*TZk@60c3[  L AcիSC?61>^#rob,HDPX6",7ǕA.rKFAx@ o }| 81h2! `C,ۈiIVu+ް4ℱ|}=G⨛jN*8Ƃ`gK; M_K46G z ]kk=2>>n cͳX!]LSufZ}[#X6Rt95a`y7]=Y&wV'V$L*#Q#~FXU,J#PX[N*'˃qvMD QR{|, Ȩ4JJq3Gbcݳ2XdWcI͹cPR&`gvq+MGi94=SpԸ>|ŷZt@-Ʋ(6X(Mr^o0f{qiU +cVL4U6um# >mRco#"Ƣ\& @E X@Yw(:@kԻu1VLUڭΖxmT\ +X  h0V-zǔEIj[0>XzԿef7#5?9* m] f0V|Xhhbڽ^a>Z* 0JgWK#HEvDpo2c%&4^/EL`i[|q2[LE,:#|W0V,z;X*Y0 ^0o:ɔl#cgdTA/<_$Bb,67sӷ"P'?ɪ0@aƋf@حq4LޕnO/aѷZH!EC" @/nβ=st^Xk#BVƽin^~'H`,"qiyXϚfb[-L^C0e cOAScEsBd.# ƊÙw!M7l ͇V=~^|\(p_e+c=(}Eqc,\%Xat0o;'E1V nuїb,d0W,Lg#oMb7Hx cmN0E \F:LLva6W5\djc~H4! BU>{5rXn@l7c d֖0 ]ѼR@fWƐˁ6Smjh;fY jmK@J0W$yL! + :F+."i%21bAJ B IymOPe=e, [Xh 0 8&cՇ7XQwj7~*_ ba,.Kt1<;Vc1mzMS1z ƺ(<6`,L{c!y&c4\b*^,/ߋ6ʋ<8XXd yLZ=\ +jL^\ES~&sB<&2`_,#)J&b 7XpJL1}`j_Qq7sP!5I^,^]@9vf/V ʛ iDX ^i +bALϊ#4*h źp^,GJďobf1KGașBzʱJ(L^, A(  w-XsaK?i +`&)qgN RBKcK`, <"Xv !+r^òx#Q?1--چ 9)|Pk-(?>1A[D`9 V-))ZA,’w ;90_Ib)@Pcsu40P^U}Mk]p0VsLSr氄-gYCXX̎xGa̷mjX*/ +`\_3|nl[3\ie2j/V0ybz2J|lÅb2^Nvޘ"dyS_D@mğXm=@S~]+k=5Jϰ_|o/V_,c?5ŰPbM 6Ӄ)~M7"ݹ E:*󗟐bŹ؉ ㋅c닅awXqe{b'A `\BFgr=&Kb⛰d[PJXFMxۆSX +pgװ'!5vuW0L0YGkPXcYSXtQ{ˉNHsW2G0F _.c9_cqŤ[xf#-L5 +EXJ7ĈVI  w ]BPGQcx:B(Co\n4y +(Fj}'ܵ]|'ovw|`_4B*"QѢj\JD "'L2EBjyy_{=3jVqNl} &| %;*T|30uڎCJ,q\=c 4h_ v +|2. AA& Zpm A&pEA 2Ǿ/ffp C52O.qyN7~8 ,gmEü;e$JW踘_ԌQN\LJuR̃a~3&ʐ0at +Eߎӑ?)eX᭤IcI$ H|&pGmaWS2tpIeNVAlNfYJ4_ԆNk挶~ʜ\1CґxEJC<.D&:_ϙ_iϰsMO|yHBD)"~PC %9*ۊOFSX=5g4UEU1$!/K;Vr+"D%ZG*(Cߧ mG[՗hm/)?(}044,UUF!(!:X~D<}u_ _S"Za~\, FqDf\Py0"Z/ ^ؿ>Rܣ##d_d,/2P +Kؚ6S$38Ӧ({^,EԽ U VUPN= ',VC  +4u W +dUH?q%9HyB%D3@8 1SG@?&9!5'1d)Y葲,rߒ!lfo23ER"9dﰿ4  5^t)bC"YA1ndC(_vJJ[zL%l$CINɳ:!ŧJUħ*⠐N G?`)f( I^0 R.>B |<#( 'qٶmTo +QA^DﭺSTB.Y,<]4bxϘXVkI?5!|,-&% LL@J:Fs8 ";(*xST-)ENaEMx驣ÊH +WFoD i`a4UdjTR hlTh,&FFSNK(:&;,oC8:g)64 BQ>9|pONivM;bI2l6ID &[I,WcH>wЄz9\ ?]GTd^GM1ʤ-R((_ +r"b5V,F;ԽĴ\׃Sش2AXgr40.C.2{!g؟s񲆿ԕn1ENJ- 4~{Ê"ia dz9QADp#NR-C51c"HAc"byr"Nn G> EeArtcF~f☁Y"xP%!3)@ީnjk3~>1d"4#s \ch K"02Ǵ1KEka) Uu_ F1陸f$LQBS9GW %p [-8~4hhv΃KPD% +4aR򎨴pwhqL`#23~EF5dy6fЪ"~y`X <\T\HBؘqnSÝpDEUy㄀hõK4,0$o.ք36:H3(4l ZvpEdߕ+ Z=?onH$a<`BME(.Z=6Nv rv̘t)4mG.mM1ʰ Cf40 +{cN}G]pгܘ̔! 3ёq *\aQOP Slގ(K{'6uNŲW*ZQ-Γv"t@TUt'3/?K0*slV4Ð(0\nF@ŊԎr䚦cFf3$,xQ焅P Gi,X[1;fC~196vW qϭ3鯯'"k3iy<*GRXʌ3 54ʌ{fN&? *mdP(B@ȁ0Qk2ڙfu'3U{@8!P4}k:NSvRJ3V@k.[ u n-O SnX^Jxi55<^ǵdF]R2 m| \iX>X)!88-mis22 "ᛡs̰bg/qPf$UHMMR)E8:ikk'16ᚊ2)Z.eF̉RE,aza#V嘟.Q]&BUfa(bF J|w9X{i(_qU1X8QF*3eZ߃@5.o vM9RQ+IC-i%*BFJ|SڕtMkcO*3⬨ʌ9VRg }sI^nM*3)1BYK&S +3 jK#l*3d%BQ.dUf$;6De2:TvC)lO4+2(Q6S@$A|Ve LQfXQVp`VfЬqD,(H[(ޏQhcODA[!JWsYti-30=bnSakpr9KҀؾ:b2Sʡa̝JOv̸^,6&O9.j#paH0Â$}ODNc]7ˌt.SfqJWs5Cyn"\#G"k|êY_Z#rtCpױ63![ڴZf$ZOA](\KX6JZ^*NeWsbq(*8)ˬj-3 5̀Zla,̠!ݥ `˂*R?Iu0CmLu84DNтUvYr^@&A^2[fĉ'LI+3rjUS. +2C4U!VFرY@yufKQ1+Q!iw;[YxX1!xRj2"9eH՘;ĎqJ8p.4kl 8gJ\&YК,"G"P򽡟|bAjd1NF۳F)v:БYf3J9_gq fji 4L$gqpM8JB/墈C#^8 +sR}96 + eFPBMU*Lg:8DEmFsBoU.bfQ.I7ˌZ|Isc)Iƶ h NEP3 Ѿ\eRnPP-, ܦ,q\"i}ʌ6j9eFʌhr 0g#Z߫=eО2c쐁ynU]Iĥ PdFBd Y@F-L@cݶcPlZWhR1#Pf0n֏ +888H+tlYʃNd%EIJhg@vqz_ $GI$Xq^e)%y +ILz+E+׳3CR~ '3HVzPWdhAAvO,b B+E'qV$0t1S^S884ieF +zZFU)3jJSfpj~2'0 ?hM^(8>ݿ HW^bdUfپKkҩuZ*30 Wf ]G~e(T2cz!a9̐Љ?֫ 0el 9m s㠔?>ġeu,3`Z#]t! +=e$`ՐVq[6&%Sy uYUf< %XR3VP=|N+y]؊$z BG(4ʌmbWze\ x+~fA! $cq3-G ȕQZ +(~)|;VEZ,38oX6>6:-CZbyKhc {rryo!' 1b^qCRmЗP 9l*0ˌc')Ԁ/& +)QaYfp2#q e4b̳HfZNOF΀=6#f)G hbuYfPVˌ"d`U2cݏOXe w+z̘FUO-ձ +e))fe\c boG48+2XLRѻ :kR1/ >eUi)¿8SJ;(BoLCiD9Ӱ}=ʌ%̇Åk:Й\|4؊+3'Gu4p? +䘌xv ۥ^GB˻p=x`!-Y5QYud2P`cC +|qGfx!L#3 {*w d|v4 opsΑO +&72C-#F)@HfT:;rTx:~m2.BYAjαB JFAd]$3a؉P4 XmUGR41 $p%d Vֻ-]D5=QwY #1 憟5 S# oӪ`$4bR,qs-!]v2qʆf,6&3^MV+ 4̢?Yfs!dB"DUph5$O &3aȆ5ACI:膟&3PH[;r-|O3m2#Ձ̈́kS`6wH̀>#k2cVfWeXI$"h2qFU֘ +ēR6< +Sot;~cL(3"l&Qj- WKVh5*3Fw[e>$P@` 2#U U(ge@[~`(O"^`H1T# Mpծ gȑDVgʹlBQnIpeFx-I !hb4Ыda#Ø"9'2-8yd ^}X@3ZNdՍh(3B(”2 xmiyXTJu5r$l`28c8. .sW`z8cH`.-b cɌ)n +&3"WaY19yG>d|'&3s߆J)%3v2{&3ga^o 0MfּJAQkZ#W1\̲U 6 )UȺ0b.2u$$Pe}/(ξw+'fQA(3~^!2"3F G?v9?) (^Pf<'AX]:ΚDdG'3@ȴg93?'3f-(40\e18Eqfmsڬ~8gZ7\meƞq<t_y&C&3|@gY&ԼP AUU:00Prp"g8hdE0;g b&,ab)S;}b2M'cx[o],2[ƿBO8 ^0VQ o09 >ŭ8 = ɒ\&5y<W2cf}ҫT2õ!]X{hC!p i =? na8 3չDH2~dFN + +`oVM=r8$3'*( ZCx$3O3o_"zW$(Rm8 ;P_,K\SB)M}.񀅥+uJf( 2pa {o_!wÀ G87ԒtXUFT3OVdY;0qDʮ3@T 0\aH&ven:f j4ȉ1Cep@G1W!ui#czAY =-k=Pg>Nk?fR"RUXO07o!31uUpWc!3&!2-N`j}0kxQ;ɧG E(o:7'!3BD4LwU@ 2cjwE)򛶙5@2At7&J-,2cqyՌM'EfXz;;,#ìh#zmȌv;`+d 0,_H%$և%xEgt8;P U6Hf IB E8tYɃxoHd?3C~Eu0H12X.g.UtaH[ $3vBq\M%) 2R ax'c:4dF2 fA6w#3m@ 6@h@4bBρFtAcڧ2qaLf8ޟcH7t_hD'_H el k "-u2㞏QATw#Ռ_P^:q6/SY̐;r2>cl(Ǣ^דuCT6N#8/j5͇[AZE}4UOaSDԙ&.ڟ.{ z@oiQ B]0 v\-oBx^}&!Sa,p{6&AO- +5dxOEj" ZiPreƨ/Za1 /l jq[^/D]EqI$g%L 3XT[.%&2c\=eddbne:8#3Ba>DNz5k֑Jø0NPrS +DG,@[Qk|!r "CFfĹ f@Jg_Օ./p}UWf8 lޭVIi 0 |qT= Hy/l vNoy/p yN?ཐ)]W VUqu{{$*nӵ{x/Kp^x/nEs2c<Lj7!3&BfR3a_3 ]wۅjF@f4gH6ǩ:WO1FKh:_\x + WDpߙ["Q KLK;qv网(#LT܆x7|-赂w!AXej%Y2,Cf 9ecR P6%O{ Bl^%gja >w%TJnNWQdnj>njh3.(8(f.Q>p+Nea-3b1W3;|r̘ѐm1f:4_9Ôt~1mר$BȔBR-f&e6Sv:d@Ō+"qAǫ]xfŌ)3~@c/R\3<ߛbF¾)o37F@Ol,`otnD] l(2`(ZhFZ +)fDFa=U"e^+K~A@ ~" gsB< ++r>uNcǣXQ("(goz67s+zȎM!e0&NkSx2T<fF3ZfIa 2WsM!!bFM.+5 :T*dx%10}V!GC]5 >UzA,.{bXEl )4H)_Oh45681#BN +=8:["8T +VD3bd8.%f͝|/ +A?:I1PMBsoU$*M~Č~SbxWuP7쐓wQp$6W(liPvQF?d8fxmܦ.Z֘A*Nn=2w2wBg~gصpC`Kt>ƷBUM(7ft{1Þ^ +!M]xQ?y{TÆQˋBI}&,'xQHk "N o*9Wc=IHG4*\ `g$e1f;:fȠFM;f$ +cF7Pj3JnAm[DeXA8LThX`(Q=fD!lEdDok?f 1b lv3*)#HǮތH[4mQDaK:9v'!L l H ܘQ.ND $MXB!1v ֢!1#Z^8faOv;.QxLKx ?ڔZ`E(6e <5 t +y\ЃqJĪF1ڞXFp($?<P3(t;1C(Xi}ሥJD~`]ew̨s?Yb/i}e*Q 8߱|IR:1҈SQ)iPqD=ڶ…V,O_;sG ~Ćs  +HguOH"CTd8fz-A=w-3*/GZƌ*PLu'1.q?5W ĊySE =bmc>1}O?16 3 +ךg3 T]Ɗe][F,M8;2 /welOUʘ2N1TʈBVbRF+8ɐb)g2zbJƫ0&rC2udhh]BFx@@11pXT(;F/t LI6bN1#` 2k w597#"d&dƀ2F0F/cu1qN]cbXyo1n%6Q1.9oNb}M Z8҈|Dbɕ=ćKcaX!vDM@DO)0*+ʣ! wi1-l,6)lrAG1ɹ!00`p%7x+-9m#nGג3 _X$"CKnk_ h=|֭a,3/_T+/bXL ,V7+3İ~/v:ذ++{bS{U؋X/+>}VF/z^0h^x'/6O/bc‹ ]_r3rbB:n}*b0vs!lV{>Qv1Kv \X*bp+.^HU Wb2b@*7 +$fzX/K c<nd*gQt7;c*:6v,^1+AKq 3,#('CNȼ"+p -dg4$=Ҍ eO #PZ]j̝o%2\8.DAu𛱢J cCB< Q/6 uvgnp~ϼlG3gMEY91>M/8 +GZ=4ʨ Uu?ԅD,Z[gy͔FuH%ݠ4"PjQvFwxPdWB]awiEubZUi¸.igêi !TE jXyP^U+֤ѣ.ɓ9 FsriR8D]0TӾALHQ#RE] ˛jإ.K;SKDkA.&E:}(K9͂b!LJ(]^.1<֛f.tu@rLi˗\\ +pもquv<\|{. PX婴Ǭ-,[Xڟx u_uXfnaҪE&-w mƶZn:j x +"  i-rve)[@[+b_\b^U]47iaHU ZjѳZe> .LI \ZhQh`iBXZEς<Ŀui7g1r~%gxET=@Bqi_R,mZY|IYT +,NI--Nd + FpǢ<;\Ƃ L-XHLbb<0-Ȃic\X$REĥ-,.:m@ IBj +TH(6:&23Di>e~[^Q˴GsW vvrМv;W+]ap{]V4r+q]؊j|biEq<+fViNCVi cE8v'ـ(Z" B't{ZcB,bEyCn֍:bP^Ep +P +8ytF*FMjn_^ŔFCWήݨU ʎptUAV7i*Q`FڭEjE_+vg R2j[ +tREŠ*zUtTG;TxpSBEpD-TxD-OB T +IAB#jR j8Q{*RxS4U6u?]BM0GBV5kRNq5qծG5$x\kh൉ 9-FNQkmCO6![\qmBc>l "I*8 (ڄi )A.l$rd<.6&\B& +6bMjs+_ٹmB&>}*е㠳 ]bl%Ef]6Q!SPUMyM5QzR5N +5Dϣ :hә(Keċb&Y&B&] e"&ıDŽoZL@`a2Dh0A +Fׅ:0F]`LTw$İFċu0:&؇N&0n-Ot\`7ϔRڥ8UI%+ +_ZYumWǵw *Ti!X`~u\ctp?Kh.ZޮKWVCȖ /H-J5oDYBKZbݵ"XqJ %* |1\gw ,a _E/wmCuktoוnӮf =(SN_u%+Vsw\ rjwzO Y% +uQ%ҵЗ:S&{lJ ^ ޢij;JlxE IR-ItM$oǓ ''$ kI!HM@m:}QDcuO@;/-ϽP5%qR$( 0& He"~I(Hp%( *JHH!7`HDW;&记G!7OSH[ +JsW w GԠEԶyk,EvypBDy2M{}&"i+$"lD$] y!hh%D(clU~^YŊ<id^w +B),3!lN8Đ ѱrPC`L!d!s / ̅`B ϣZw $+iBWB9U!z*v=t!Y TA8ެW:ug>x|~>Hy͇3L>,x> -|"0dILI{(w$}koI_?>Uڔ.:}gyzIOý҇ Os`>׃<$;jF~x= ΃&9аW@\J5P_Z8Ta$z>0=88Q\^zIйOY_z{}`S≟dN9~jiC`J"P^o±KfJgz_M =TӃ "@^zlρk꿝OWnUACHvA)!|)=PIb"t7`_@9.Ptm,1IP2?VSv(=`f. [V+=hjfp +v[ҭy2+L_䨇7FP!JFP<աoNJ{Gz CNvCp<MԖ\[CJx0+(!,b 0%;0ּʨ;YçT"\g-'x?{ ;uV렔a:DMm?*4a#ZH8`!!~{RХa\*#a!6rΘyz9h90r/!Cr@ rPo$~]ᇞb8cʩ^WF?Ijs!YM ! 5йх[Se俁/eI.U o62uCt _pD#PupCކ@!#Bl ӆ6Tu6V#Fw;e.G o a "@C^B55 YC^aWCfjFjhA`44ZoeLqKח+9B ByRTJiP7EibLJ42 V4JL 2Kd dbqћH'3X9?t3& 4hA" [eEVl}MkFP|*F@I`@ ƮLղIEP4tcEU~%ẽGhʏ)K4PϝFj4Eã%ZT4d1E #AAA+NEWv"8HˊS4WAM54BG("(nno[" Q8-A 'y~!PhK悻5SAT4Ho1ۅEXoo~2 \+@>y =V.bS,nEC"x!\_۶h@EEih !&:CCU Ohحa qlm33Fwysg(6r = Q %iaUi8 d2C*fh@"~ V"o4c^}fD/[^LaR` ٜ a2$GБ!#C; #T@SN Îd(!U* +e[ \1@k) '1LbaP; `@6 Ɇ AJ -hPq@ ޑf`({*A -ږC]{mLZ8ŕ5 -Ñ]2%W 3(PhlaFÄ,B!X>5aň@r9a %m -nV6ǎ7K- : rYR I*7d "QQ@I 6/Da#V0ń<0D.HCsTK՚)$,0 { J|] -!2aHOxt\"6f4\ђa6#/ĂbdرE1$;V" -m2mn -WX3Q)+d5jE`YrђF1k 6R4X`D # -XUF <`!Nz@_Ǝ=$j{>tDU`FTHL"4Â#BS' ]@W aѥJ=(FԕSE9]য.tPkQD~QG -jB4؞xp!Fذ0QE 68.xP T l y.0ҙ EB3$/Ĵ*X-ګ6QRMՑ(VBQȀXND  -蒴(@b'Ć1^*&+ !@U˜)T!J͢XY?P^i<椴>kl > -``= xqy`# 0` أb~efPNO8R$%OUI'J:L+9R+  )̇ !D($QÀE'm 3UBl -jMLT7%b))Zz`qKݦ;bmAHe,W6qI38WliQ-(dX 3C -TVВna|]0 !ve-HKlrݗsPVRU} 0!uY*B)Qb聠AQ .&datp"xah偘U¬!sH.81δv -FKb"#..lS O59$T=":/|% -^i1hGZ%ꈉ53[YѝK\. ߦJ, paɢU70|W^($L xPUT>"Q^QPJR Ӫ1+ -fzlsLّɁ!FR8`E\-(4Me$"\X*ZX"|;BUY†,)YZ,B j%8eVK)~|9 LK)H L55 -{.;b揹u9PDr? -SCXgڅF7а4J~ߎiE$5QS7i<%C+2Bߗ[MԼYoo 'Q*x uԒَ[Mߛ]+Bcֆ]uK.Ԏ|T4gUYs +fOoӑԮ)'*фڶL`pP,5"J\a2fBPl\EyʠD5+:y}R oS (D&VQջ7UuҰ?m=[y#>Zې+`Frt.ܪ7M֋n :1rybkuFJJeb8$as|gځLT(UWZɉ0ZRnωrSHn90t6?+z-F*6KniPEpTѼOg5f~%vĦߴ1pzb6Uf5 ZpIjF{vn*6ကy+IL ڒP9Vy!3h,(×6{qK:[kyz)6ї QaɏB`eȢ/<ϴ@[vz!ԦyoP%)5+mm!"6 -FPhC ih5ծ3i -nf k} -W;Uq܋`WZ9N$ւ6ۙ[4^8btgU[69)$FTNjBum 141u=7tXv^hX ug=S8'Rq$Z  n2sc͒V@bkLA@a؎d5p;&v>GnpF@uZr~KzkUNus_j)(wQޢ(DAP9N5۱CnTbl#ϭzKkMUj8ݯ*WC*N[8Npkb4`vIx,TIUOFE\ni ݆ŔG!㄄whc!S Xo)uggrۻH5"7&P*E$x\c [F$.;CMEV ZAXf*Lbu c:-B_h:?Y+9TB"2;qRٝVQY/@#Ӫwۇv;Nx9jiFC$=7̆ruvEPk  -.!G ݰ7\sVjdMm^C2*r9h.E,~3 céCX<*b5_cCJ峮 3ñ~d^Ze<[04sh8T݄NT6JlmX5q8YVmN빒\ඛ'c /M^sR^ ufoHx?V_l#Psj:3ug< oAU\Ί iEqFL㳧#7ޟs/xrX'|Q|j|{(]p)H06>We$~Qc$xzDjB ƣJkHjm:ȬP;HB߅]1PKNZv#V܊9x6,,O*-tMĮTb6W[sƃ%g7f&܎ۖ\g-:Ii:UԘ&Df=(y FyrjOU,Y,r]fäw*\J[t, ZpO Hhd6jdRm-B %o|Px^jů+n[ -Ϛ@ai=p0kfcj L]8(XGX qN߱Rf8(9_nޓP"c2{4@!7Ti ND~s -2"UlAlymHJۅ\1 -JCx縘'n k9VI颏Z40dp[ov=jDZO#Ie8h `6.S 3 =colּJFnTLTe:Z0&؛PİHMAcdHҫ*ֶsaoد;r㑌w7q޹]c ` fvjے7 5X%O"caJ]m/Vf{g4p=зH)rnr+̕jDV8bl'ΑLFMSfqmԲ$z@bt]?lD)%MPijkVX>Z Ke&3Xp^nNKF7CFg-~D^k b߯]]{W1 ÒDJqޏiu n3jWaU307|im-N윬X}ofճyEٮ_4 ]#'2WaDj J00䉲B2% āf*-U* X_#" +t4W\eH8,Qb;RbvMAfwOAd2^x( ACE#UV/F=H:В^q]YXDQasT/ċ bp,b|U\k^xp:0Be!tBR(.+6LIoPq5D!T*@ VK%7x AR@BfM( :%qh#(= -ܦ3X ZX^O7]Ml>OcQ fù8%I NZ -x^^a Z;ajm nCọR1L")@ry8\2ث1K25jLb`5 :5L H݇v|*9Vb4*cvKan8N {δ7s&!finIa X#+L1JVaǫ~tHj] 7?b. <ߛX\W>GeO!Xt-̂oZO&/ ZW̟q\Sib*XVIYGQo9QZl>]/Vȼ߹j\)Km - lP7=}jyy:3mFӏ;F~cxB2A[z^Wjs6PrRGWnݞ9PZ`Einۅӷ Zk-FQK 'ޓ$:SjF@5*Z@3F^o.[웏D5"Y^da"d@,Jb(So8A[):(l=IRJMDU ́ȲjT*j,SW eazyAC0y^1JC5*T,*#R:[lTT "R& Լn|PR^iY۹:r͉}+v!lOR#%Er9< u_i%H}Qyqex+ߡ22Ԯ)XYJlj`B&3rCfyQZ}}c5 A cVjVq!E5"oMɰYu61O[l)USk텊Jį]h|n88hPogQ*C)(\( 8` %ZbDnq"YThXKla $TZ,hUOq©M,'=L@*}iEӴETe6B+P"iu!<\^x>$; !R4 @|?T8ʆ6hBarM3Q"xq5ˆ -:۪ ;ER8!|`T/bSukr]E̓El*{!4T H1_~ @FIM;_!E'T$.J`q%Ŋ/X\X/L"R$!@*ZXA I@tqE|x`%*66) -!L +RN!ic+TP"x )`HBPE ).RXQ|IaX2lpOt[7(_hΒU:Y?(e{)Jܷ qh 03z=qO٦-i^\˽33ls&@/ -k Yn:7:]v=bhLNߵds608 -V`1ZeP@i5Z_8Y \ эUD6 $v_lb0΂ӷJSGl# Ez|Zm7Nȅ̶CA]"(=mFS~;{^w_ٌV-.*0JSߩ'L'Rwݎ0Zv>o}U[Qk@{&{EӁzjYNFJޟ4p\l"x@xq9l,.ڮMV[1=Grg͓-g8Nf8uVb9>{,eLx@sQXT8^(_+Nx?@oSu$0hF_0Rj*hM@%I0*-w\Q}rc-2y~ 5KJer+jV-wIJF<AMT8 r@~ݕyjQ:!DaUcˣe@(ɈVfXd3 4MӮzu8U-]ō$t7P0:&B(䶐Vbx*9֏Bsa.E;hCaqH4yߙ4NȾa_25v'Gvh $ZZ' /Sj,IjÉZ繚y'N#Y9jdx8~lhoE-Z߲L}xo -eis86xZ| 78_n&xr9k]̲n ՘^2x瀊%+sz +=L\a -FTHbq9PVu7R4D9jF‡\ r5p.O9rpUT gI1]WU8Hi5PO]gFj i l&~Qq«z2ڷ iOX s9k:zUhh&.6Z?b,}2cK~0B$i:8oCq=WmVc-Deq5Jx*{BVAд8I?'Sǭ}!/=I~hk? WiHrĪOĖԼc,D0-H4LsW/Fu2^i9@Nx&^sQ7P>h]9y}f@g3P [ u)ʬ5~cy ]X?݉ - eSewދ 0IwKr=E[n(xH8iL+r{'xpֳ 7_k#s逼cxj ՚W3 5$؏u`kXp0{+:7?S4tG\5{j͓='rMJpS-K]m׋9^VV{:A&>~7TqkKk0Iv] mb0xB^:~a^-GLY܀Mx]٦aPi?-N.\n`8`0}-Z1bxC)- ˈY,1l oUxmlٌ-]w]iuiwD^: aסF~CgmfT :4?HKfSW4d{Ej4~d 2KaT=xA_r$)I(Yܢ-O1Od4f<?t% 72LGsr[̳2<ω;JwN3.#瑲~Uu{"p[6ָD|5軑k(?#z/f<kÎ T.]29N*i8n*[d$ArƨaDxu< tmG jV1l?ZyUm^ci8A(M3. 5YV/ -Rff8r(|_mD1,IWhVf<7m睆~eUهʬE ~s Q6 mn`8[ $XKCS1?91<#U^g~d@eyA]3_n=Oyޛ{aYLm潐ʞk2` sڱTkY=\Iь'Iߎ׶ߋh zqfk-4^d:&zazCr+JrQZEPj棚x ĹvNa -%efTϹ$|e3e~k/] 8Zr2N^f{#0wOmu}trwLBu^-dᄩ#]1m;>'jn+1d(Y N_ R)/~a|!xq`ZXo: 4 %Qe%db/>YS-)璄4Ҹ]gg)|]q3kV-F-:O9R#%:1=5V3wM{Q7]RMB,c{%K^wP..Yq,>RLHuM7#]gN=gUS8ڮyzM,wĺ~]L_Y60Zj&.9$bAkIu=QvQY`k>-g. =B& -%[5 -~N.CI-e Iw5εJ$oᣥƢ#rߔ/V|(M3!0Tg!L| -pH4<8 dߜ岊rmY}쾊Pg#fZr"v^4رB]H?dy^EfxC.$s&[iacx\mY^1̾ ۽^ܔ8y$r\Ob{ߖ繖;!v9x"0Z0x0(Heq"0DvJqjy(Wbߓ5H&Q|r#!Hz~[ -Se(I˔Y1q_~~#3 #I-WBJCHԪtf V H8t/p>E_K<?ˍMZ GWp?Dk65K̺\by -1Jq`؛y/2vȜTc7eIr'|>Dq=YNն:el;3%b$Gl|*׽=%k ׫RsLF ]"#4%U]T] _)# !6=gֳ Q&tx8eM'aвUK?iNbSx##x@t6ѴG -Ru9G`VR\4x7Mʶ;B˔ -%Y9XR2=w$=^kVT dB͒Ì|XSdx] ,OH6ci1J<S$ %(2Pf)ŰhmE NꂸfwM@d7k9N9Z.F͎r|7zv6O0EV[H0=\:}ƙw,z F~ZsDkoDWh42j:q~ӵMLT}Yޗ|@&|(Se,ܮDorcUĞ;OsIPiu_Ѻp&|\jM*6R`iu0nm~}cg14*}r*|:Tkf`յ]ajkiz r?Q,[l0βE*v_jrŪ.Y4v3K]2=wRbm0]g5ұk}_v8!b҆-3XTlZ'^rba.L3]3 9GC7 U6#%} `eݢhņ帣6O~oDIe-tn:`X 3CU <)FJPyd,yg3R2Գ j;$Y e}L~'kBLT#@7\Sڶ3j(Vv3s_9j4[wc,}ey_s;(m7UXj&N UY -z;jnpy$q#|澩raT"tnr ̿yPdIqm#@lFO5/IEe͚͸i)|]l-`m07]k>ܖۀXCME ޢ&|Bk~m3׫ ˌ=ۏض>ɖ+eai>B[[!cyj@>sa7c3.F[Q(zߋB{-3US㸏`9.DX Nt<>QiW׳$9?@B#arT@t@2mإ {3-o"oA%*˔Z-{+ Cj<~}W,\hjYXJ{1zֿ^D%GjwbjmŐ+"HIGVv;Q5_I#I͓I|T p8ϴO=7Vh;`p$]=޹]ʏ$I~K\ֿ(tg<'mTuC&8!z· +,K9Zv -.Cj0I頴ݯq%xXg -SJu.DqDeCA 8Q=Xve,5~ĺs_zqMĪt@2Izw#Jw(t~$z=UseĻvEFz3ft'A(37CiϊzB4Bn q@Z&!H~z0q.tFD(z(ܖHGh>+MeԺ;P -;2:^v<]mvxe}[޳@h 2V ՃM=IrdX0k\ZNLHZm6/ ZS1~]|őzыJ0ZPl`noZsȞ(jMU#"uah}cI#-wRD95-oAJ9ϕ2 eߥ$z<]wXd1c~yCC~n9U>gET&#;v5L5ޥKcv,ڌ}7s~ (}$^wI|.YeyJj56Vm'5iNɡpƉ"y40~F Q RBڲ;P]TO1b+|ЀSm?[d.Ϯ?ն^a;OtUY uTn|ږ3Nv>:$Dsi8r/obpWoG%)!lU qiO,.GE@{ XЌ'cD$s@*z JAah-tV;bd 4;L 6K 7Pu'.# AuAZH_q%z^q!n\pY?Rq(nAmv z ʫూ0v_`|(X2"ά՘TAƩ ֚2-#UHr(zv%ή7:RgRq궃Vj,%WrQ+Cu53ՙx1= _)ַf(Z%e~:C@.XZ{r婅ցRi8Wy-*~Q;Xm"N Պ΂ִ˱\W@E 4FR+zmBJd5!%כ jMR} <i[.kѺKb㰒4Uo{7Q SqLu6Pu `XϡFkmOMor݇ߴY/ZR:ÆTl,Z^mvcwC߇f=Oq4ukhڌ.W^VJtkFkEv2nLoêOf52'=D)sqr; j7lf].Qu ;B*׬SceA -4CRh&:4̞Dv[~f罉ޗۇ2 2JsB,5+P1y\by"Xۍs([1R $Z -6W" Qd0/6oezBƁ&Er_yXY  *y8>EpD#gۂSQ%z]m.XDnSus7=ԸR-牮NJ-n7]+1I8v>+4 %_2&[q*3?0;OwT_k2Ѱ}Gz(rð`E EY4 y \dB)zI -xV—e,8r2B0I"WI]:Er FS4$94Y]lJ-#'aGLO --E)~kqn4~ٰ'z>XnZa~1 ѳ:;12K]*ǛqnB@ i?ޔ!QH Eb\;0[ ΐCtVf($Sg,_9Wj| Z,6_vN-Nƛq@Zof*PMy"D_rc[a8\t EøuY_n2S-56ݲcbBF\Oڋ" aY#}저fBDiUYZ=xJwi#)Ee2v n(G]I՞a`<|\a =BkƦJLUkua%ꔴhI,}ce05,j:^E0l9gƋ_W/ˮ$+E X'+R#E"զ,{d0 cZ+A\z8^:Dz4n -6aj|*vs/z((s:e a.NZ $7ѩ‡nQZ5l9#-^ۏT\US -qYbav9Ph'zY.=~{PYUAX8XNugY)Un-[gվb$J]ly)zgJL rMlQ8YoT&R&1m~Ms'JlPJ':7Pj jDg~9ϻnxخgI4OMY\T4&(?@8y^PJ;k H.pvb$ƌլ1*̈́(7>wT+YjV Բ8Rӡ=R3R8Uf 0r4nf9D[n+0LweW!Բ<"J* PO+.D֛bכoAy-K?h]ۍ(8O 事zb/2 cNtWbu#Nd(,6(Xa%kVʁ+ >Rg7հD6(r5O~e!(>슃a亓$xd4̡FI1£(uaj#|*cqm' 0QdXxW\ h֫8Tu/R\>D3P?~h-C(KF,+ F|-|)E 7*H -F~ >ag7˖AL0킑*P;1pbNԊB )  A'(mj#Nx>eh;!R_qd^>&6KR-v+j<|Hbr2p -_$ƬA*3 7Is+Ep ,Oe(tCZ k@ -u 0*f9ᦩ-!fhaEh!FL0Rr@C qP 9I L ,F푣xOTg -nX(U!$rVHi89"D, -LU\PL%z/Xn+l:`yjq8zCZM|%DE'_vf^v@׍qD -N`x(J,ɉ]wL˥r$o(J6 5\,Y!yv9&MV\⬢78e<'uʤ:812Q6|mV}r{5N&l-u -л?:?(*/P!?HDX !,#8P6B<#x !8Ep!,Bx#0C(pG&aXGa!$CHp>BfCX>$P >L<H |!l=[cf263a53-5a54-4d0e-9cc1-eed59a5eb84d823a4f3d-b075-4d2c-936a-a7da92fc7102-7994610807262l0602371ll +Ó# 85,88!G$*4\'_piӴ//ADJ@n/Y PZ/I/o^ + @p/^wwۅ[J " *Pve)` [__e" Q|RBc zŹp:^.$s\̢| M@p.lѷ P5[X!?0iW#+t*ka7Ž& xpIiAuN!𦭱̴`7P̰rˆiAKK d,-zz'҂z- - AA ?|m: -ErҁAV s@p,<,T-B~jɂ0 Hpvd!*~[(\[$\(aA!Br_ XW `v +I Qf!B@PO@FЀ ,*9V ]`M2@+ 8- -X\+xsEU8Im X_e !#@P\+x| +\1Fƾ^?`<F`b!"y6@pخW +oABk/V@0Bdvo[XU*ѳ +G}U 6MYU\ 4U*X*dTU‡)d@*2P!^C +ۧP!O0DSqM!3uQRLKfd)R`Ž#RXQEZQXQQ.B\xXKނEDh-3P@TaP0jw:PB?!V >A2ʞ7P y%@;!N@(ĀB넛& 87'<@ВUb&nBY7&<6քf&54 e33.L@ :`̒//x s %U-"e 5a ,Õ\U‡6`7E A I(m h&RPTu$ܵt#4/ t$Pr-T{3$K8AaK 1``c 3a Cŗe`" t 0 \@DACa5AD&KB#r Kˆ`g%vJCiWOcMDoGzDSe$A0Ap 6.$jj$ # GE=B%<-vqξF;Y#dG#]4Blό_o`nj#q<@,BJ;cA戋c  ~A1ב-B`3F"%]x@ILicCd#&rt;DEf`hb9F^+Oh#(g c #|CFAtMc܁`P!UeE.B l +duIQ@P.dnRmm'} a>4eCA>N~[8C)ːPv-R2TzEE? {B}wA[4[NsUWn{_xUsu#dw1UW]n23+|*= AjrTw-G!;fخwɼ'(;|euQ]LL`29Ey;3L=_g.b„aaJ=.;UF#-{丟O"\﷙G?[]2tTS~cC܄nk wÔ}Uű; 9Ɨc~썏ٝ?O{[e#v1~y=W7Uc׌5Tu魩Х>?ot鹯N=Bm7tw.Fn;w[+s;FaPߩgکFֻݺ]ʝ._uq3]ٿ߅}!Tv컞 >pEλ.Ə>]t壃1>̌ϜϟdعΙ߫a:|ucyc^ndݷT^u.bl Uk/:O~vq970Qv+]l\йus_'Ggo+~vg8=}c^u׽r{*)pu{N:۵k5f~?/0;ٮ>^[Eitq]'(/'()]߻Ƚ.-i5*瘳]'(vX>AʝDqXHrss8<}KeԆm +gfK?lwa°)>OнgBמ~28~~74;s).7> U.tͰ]?fO2sv^Vv~uyo/mBUӽؿuk%֎ޮ4SvA.:}ϕ>߿wcB} #lvֆ]Beu2:Tͭ A4APM?g`gvcׯ~v=u9察Twt9a|\_wV5{~~;dɝv}{ן._g޿{ KV~&ٮ}3~svfzgC1:R293y,l0>M_KtPE拎;;3>W?~|PyŎs풕a~j^tﲝT)꺅1s2*\t%cnuϗ_=>آ̟N%Ww^^'G +>euOzvUƆH!$+=F6ZK^@ +endstream endobj 65 0 obj <>stream + h&$,=FU?ELW/bFS&j(!C0% 1XA;F F ٌ EZcT,RQΎ +@ OSF:x T)^H0FW'`M:P4(ZLk$.=Նl-,#bt c%1MbdW-9OCD =6p 5% U7?NX:?Q7 WE'&ӄĄe)@:p )͏EK(ɌOTQVѐ&(jA 4PDD8>P9 #G*HBIa8e4aؑՂfxRf3tJHAZM%etA 3I42Jb\dբ$ &T{=ax4P&??Bl$^FJ^bIU.=H P4>nab{^@GY%jt\u`1,-T`F6P1<00cGA J8A X‘miS=5|^$&hUV0 Kou`xh<[--^NPFhX!!ťENPDXpa1:h]z-_;oꏮwߔ˜?Jkkza"L}n?f1=Xt ÏvzJS >N{:JOG-4Qs𣮷^tڊhͨA| J +^ c&xUP_ooǸn)*\+TTzVĶA (tXiA%Xq&8X踁iBۍBl9@LWDEMV,;H3\|V,e8aĢn9;0(&7@NXBENX5l/;TVj БQ(UY4-YOn@e}&3;B~~@`H/=J\X*3HS0;Aj,܀jBML\v>F$! Y=P@Lj(jXbYLOm(A $%x!:uSyy4#ea `LT("rE8P4/^(NAȋً*(* df#fbMf(xrʂ4e|\xd5 34J5 :>Nl+ln+ll,rl'nzLJqtT@ۍBn6?NɖBѐ~l6AKL& E Q F@D C*'AK@f ȅ/=hH !DE 7)q5HX٠D 4t0#T +# +S,tnf1P&ZahZ܃^HudwוO<.V0(O3(LR?|{ľJM+l-L|2eTo`o@D<"{]q'UU=J$(H&v [xIv7?d9K 芋BXVsG\gp + O/"5=EL.!NNa&|f- p a +]3XErB$Ȇ~T,y)#R<{ D@H+Z`uiT )f,Wl5狀]ŰN[h E~i3Cw;`ؖ{UN~r{%Yx} 3B V4 +5_ sAht`Y~[ kjXS湩Y8"@"ux& ;F:?%5dFygL8) l-Ӏ 2]m_1~l0Kisz/ZbW.[A("@jOg"0z(e:ď9l8)G!xF#Fx8H$N,KӨ#;GS,w^}@Z.yNZ\&^t K +h4趥៴1(_31T aL0Y?0KF=@]]B㊧`72.# + IG܄L2ukӮ[Y<Q^ +aA.5̻y:mB7C+T=S5HȚ S6)29l9q?:Ѡd +buх#kOQ(к8LF{A -DZb#}Iu;U Q_w}DkSgK3FFksvb")%safB\&?`2,ỌB[ެ +3Qʋe+.n *ZГ|IC&ftcEF)/Lij@2qIl.v.)11RtPnԣV,_p5)JQi!vNm F $Va>㖩&rIJL~E`o6LV$\9ARO(Ɯ+ +9S,.@>8 h^akp ۪@TKSp?J9Q}*;+ЩLB?`7v*_׬1)pfN[J@Sg-df'"5I@(6ņRXZ b(Kb9%dTTC Gs>hUlB_]WV݂6 PF'>nHA6@FGf}mgd"$]A5s˒eu몎; +Ji(2.E)ax30!g[ |K#sr(9|jT$!In03U7t5j!D8Fm,9&ԣ2{Dkhm7_J#L >a`ؑXĤ +[(9qv00dxZTbVaףQ) MNN1<9M$W nWghՅ"s3#SkC6.# 0B6x˓clxE1^jg$癐hȞcDlMO!%}>;J@0%2eJ38beP#o{[MR +E|TBѠ?0zVK{a*\Xl&_esT|5 +[wʌ:;g.Q%#n MM0|-[)e#4hpࢷ=@|@\r$8^@ .Ţ٭BcqUi*' p޺gqe\ح2\ΞC'?Ʀjn"In&r>%s̽"`y<_(SyF'䅙D섄٦ij 0nDQƉy-& f!Ώpp7)RI0UࣶwQdnkBza*&uce3$>kG#֧6T/F3$7qb-$@'MPu^CR9޸Ds>_yn `0VY9[;D,K9<,I] +fෝ/5ïlHS@3 tlHl*9d3 VLxK/qx[X^(a 1E!X߷URv1k6. ? ng|QWchbS MQQ㌶ T(3V-^tLd-9FbLewNajBfh7S6xq/57%D;IFU~aM 8/, ?r%ː]@SbT:1Y?'>ZC2H"J(wCÐxnk!@l\fi/IjzIs 6&a)5AaDWqOq8`];0E0q %-Mq d*_-1OK[_HD` ȄڭLԅhC_\A=5-(V]QS%nBlV1K{ zsAܒ"bz7L;P'RN!Е/w[ʄZÄ#du{v%nL@ק÷ E4ŘiS=Wgrb ޣd;aK\_]5!.HMKܴ6D\.} 8ЇEbǴ ?@ ճM+8Lj |"M*D:ZgkҲK0JU,Hn(椈IM^‚Qn p<[7l*˚ta +3 V)YDLcy|"SI!fEy(gR 6Z_`2^N:xYb Vc@rR=Y=pX0)RP6ЭOwє.vh+K ~@rEv`E ^P6#DpƄf70$zf G#NxX%7Lv=v9ZEN񟬁)vYf@=)' 7awoVX]cfR%ةqj6.fx#)b *}S@ti_u< ڊm}t!栾5[E ߩO/](TMN}At3YakލJ`njԕZ'dhqU]#yP {|K) 'tMr[;b*x7`99nZ"Iޭ 99RM;:^_PN*Fr&jf}]MYk솭r549d bBD_ZmAJm3}s^6TTc4qRL6U3x*7rX u q8O"}Y4N1"W0mux|wRčw|+ @pylm;ouyh XFVq 9lVa^&gylj?up 5\4uyD@MKm8ŠbVn#bcj2׌7'r,h) «W;|l,ęE[9g <8$la&]" ƻ$-M h1HFbҪL+lΎ`Ox! d+h6sȼ;]F5ӠAZGlg9Z'K9Z,!,Z!:ٚ,/qEgh4z¥6t ,^_xU~RZ0v]鑀&gђ0niJ+3}2Bk9HT=g0+kPY*/@rKD]5>_#E7)x.hr<狷mS2y3RQ-\aaI&6%/v mAq~+gއgq52 '"1L k kx] +5x_ +!m }[خRZgv]2d |˟9%푯_p|t5ggjUv$/ dmr&x=ѻ0qN\6h냶\ 5 %,C: (yHT,Ў@.D2a:{3] Nn;-/]:r Wh[iU1<@½*(181&˕]7@:CU7*XȳSf6`ѳ}r+N/sc+ +r$b&:t-bt/=;f/6޹ Ed n ^٭ 311qlcdX;j$[ A{G4@O1Q= Ad׮ # WDT{Ytju2RސnIUC&GƘp^Er?(il< ~>1u X6:(]D]Y@Ha1x$f%y^+K(boPj/Fyk,"ctcKZz`ぷHcT>Bz[*|>b >@0+j)*f12366VͭaDi&NHؽ) U)=A{Hj ןu}NY$&||*揯}™S$!`Y5vP, e,Dz_!V`+BD +V,I invx\( LUAOL1<W/;ܿ{idb4PCS 6&?]6-Dy%eԍ^±ˇ2>YQJC)s6KʥA5͎XB^Ӡ W/Њ ${[CdeL#o89\dMf-Zy(B*@}¶}l\ma6b!׮찷GE7Y#5滘Eq)LQGVuܛ/R"rXL +&vim'˲Q̹]8\8[& ʅI)TY'TޘC׍rI?Ѥx/yvwe4o' +x=Gg,6ٹ}heSㄓG㤶E.dE©bmHR|;Ӥs7ŖGemȑ_Z1Rt)X/aWYC2_%a4@ 7 tmaH@A>4Lπ(`ahO5#nj}/:G%0o-JPFP/$hg>nX@BCAH2"#4⟊{jv)jNFw 姜K,Q;&YcP4m $^Qd(?+"Fiչ^Vx7* ID!" +fHNڨ::NLһ[/|ReD=x5-KR:y%=B=Ί>ycQ)~C/Q`/bb×YVL|,;Z/*O(z(5J<wTɍVkm1ksoPЬVHJ yJ_*ov:6(M|/:ڠSIb +9}lQ-hpm9ܹU] ݢN^DžU@sE~6R4AVŎwj[aw鄎.{ Ad(:ݑrhY9 +P6zy~lLdOfŨ"M3Dt v:t5uоčt&#Ng6t>Z,CI" Z3#bU74Ōmz On<7Dmm<`6m"eG g FGaRq_Du /`3v)bVӚCUZsHf`)k^xNP`WYȠh;$`:7`Q4LMN5%EeϨ:.4*BEi} -8ѭYĢy|, L=h}WDi闘zqkkIQ?͓&5b/.-cܤڱk E +XYQ׫^&>$E[!4Y_}r [,,ęAcQ⺌gs_N@ɈNQ+)0dO_&~Wqu#s9AYqi|鄕("9iߞsFn] 3;)/-gQ*I Ai*G.u[\ Υzmg,"_Ee@j>'5k.KHdܱh;: q^@m[5xSkDl40g QH>q7[ gvKjr"dQU+]ꊞ3p*o&k j0)Fk T!Iq^j?Me_+k1Pi5Zmomk\>)=@$,5Oc^D:1,;M(t.뚕./{q?:pC>/dF2!q)z2Σеoa<6Xt@nW(A_q Tq2Im!9E_zU[edV )Ꙥaj5ln D1A]MR\3i)@ŔnK4WCeľ洖`-aT d%.&(]s+qorIL~䩛H[d LEw '/V=)E70;WGlPLqdS<)4\"d߇R[ /P>$ZLEk&ճ~iwI)9eIA&bO%whҟi]oZ&P7(cfqF3hhl!!}^%#Y@1TΉ\/_"U1*M'{aliƳb' Yb)9]l#b/y01 lԁ1`1(Urob< G3xXpS tؠk,>lK,}%/VeXKbq1_3OD',AZ-n-@Zoga1mih[ j1j,ZXWY?bgؘfbo!M_ +14hTb+T .+ZbC{fl=2R31S/%XԌe2bl3%c +긎F1d2FsfB,ˑBVsJb̂1ۈ>d Gpb,B +J i,K1CscH)r"3u xV"z$1؏Q& l'1#@G&C2di,5@dBdثf1(s[̀(!yOSO2ZTW6uXvR WʒٷeJ!\F3%j#l C ]Y3Ԃ=\̾2+,X;JN4ShjJ5c|ͼ66U3yC 1^4bXQ2!9{tt7,ufÏg rV=={k{sMqЬ*d$848a ch֡%oU*/jp\y fJ=42x-K˄`5㮕i4 &) uӃZ7 r5w|Ofp=etf@gA柶LB 9xSt(Q뮳 j +P]pO |TQݿjP{8lQAiJtq}id; u8l J iVL#5%Nj-7}fj6MԷjQT6%z'b}(U3̟jF!Ԝ:xiu/ɒHvjiamp٦NFAgQx+Z2iiŢ-N+qi\4 TEhv9r"NaGz N4|! ǑV(l?zi~jbCf3ji5Cb)RaJՌڣ bUgiBՌةV3Ԓ Rfy35AEs.b*щeW3Z©RfQ@uZwE;T#&zC$/DB}e5#,z5j8{f9&^V`Sm3!jՌ&xjU3h6 +!` ʴZ:ة]KTSPּK=gSkwj V4/[ZܩiFfjRij9S+Ev*#njl?՚Vɲjӌ m$V !W5V5i,h-=UU XM+OnmaI^fwsf3 ]S9z)YSM1ڵZHI"QcΖ5K%V^lMBaO\hsmIiw5#J +C1Q35=V\& 66g}Ԍ:#`yfUa6Mn% *TH3O閸tۤV1+*=Sۦ 勷MWdSaqyK߿=4w`4C>P7q C7A6ttiUN3&,`:tiӌ605nSa:ڬ!XO3HEE`;K,4v{΄?pqiq4c*ٹ3? OQK3aA^=pR}1F`[ ˝rW9+wE ZY6ݵiݏf̗nU2Y'Cw&f R;]QwJ3|0H3CJə-1uGLe,ݳ Н7)4b`RH3R|t`A`et>,练>D5>@f ] xʪ4cq xs,x gSmf|2⁷eA yk<Fofi+$04J9C|<Յ<ϑR<PMD9&=f>cx89,/R +:H3QoCAf,p9oߋs ɩ yzW<C0G+tVBgf|^;'̲/42|<%=5LfA/7W̠?fhRf0 ͘hKf,m +\2A$4㳂flAof8 `AO@3꽲A3p6 -z#)gDШgkH=dңD< wUT3OL<3|h/3C]e^%w.sIgr1>3!P}f sbHEқhJz\-=j,gҳW17~3fL GJtzDS4fUs +bzpdum9z=BbQBv23Q:nN{*{:@3t/1=ЌC3/1$b84fԼ]ьD^ I|hQCfH|jH39[f!hƿ΃ +}9Ҍ꙾~Q _k=IG3طl4cp)W@ϲs 2_~d:]oQo/$hF3d4/7듄n}"t4#`L`ĕ}Il ;R_vGH3X +Opό_]_("?V~~QAٓf +x +PBx~`Ҍ9 =˝y~Qu#fhi+`hFE36:Ә+$?U MO.] + @6v^5ҌC8դ5p iG;L.?f&2J] %xD1@@IKͲ y{V@%_"LG%ҌKm\@hdꁓF3^nzabciF-2hRm\5c +1Q]y9fP1 F@X=ȫɟ0`c 8f.xnjA(ˠ +\$I\B QDN=ҟ3- A|y8-$$`:9 ,, +!3ݙuF} F72c=8(h~:8q3 C$3ni ' CA|V/ J@kmzZH0!O y 4.$$Q# +V@W>Wܪ7kOΥW!;^C-uGP:K5Gsf=#X#'Zf< >%FoL_8|qp]Ӥt>:eAR_B#dQmCaQx2c̨+8$8Ae /31#`^e\f&Q˕98Cz>c=GUM\@;IqE(ec~sA ˌ>[fX2C"VѤk¹.NQyzZRUAc ŵ2C# ׻ЎʌqeFD0CDpwW-"`aebapfrtf%L~Uf noF嗋p/;_.z. e4@P#u~(Z@FW`pмX~H{c`UUa#H +tB&b Ȁ 8R5L5A" +=@0̨"}Xfl#Fw9n=eZ( `AzA)ze,3&^Y n[f,|[fTnO,2o0; /LFA΁m4/d!Y 8x ZfL#,3H [? ne؁2Cu>L- n܄^0Yf z9\:|hˌ ++3 ,3 k  S mZXg e,(_E HLP%'3곇>ʌTdƜf&3h H+ #>( hG{N*Pc~܈@\_-LfgRS3{S%, *|GѠ̘I Ce I'*h?OA!+3Ze8#P )$QfTO8V܈2c2 t2CPflFpѲ+.dF]8!:ڀ2ùZņ","ᯊ#eT (2l7>AV b.{+Ɍ@П  dKfD,BiVm!gRrIfhG ^΂b2c|ǝ̘@>uH )zKυoB@f8d+ 3LAA /S͑?L dƌ ^mi\y/k,If r2I2栤S|d[E>J]A]# >BZ5&3! qAFfcj xp ZJk APYxXdPY!XX^WGfܷf 2c8b +Z9&-):4(זc' hAЭU2# $\ue.F8<`7idF4k`KyS;ZjLf!wyz4 PA,< % A(e@ڵ~f2b&JKsD0,@#@SUo_y&×Afl.;#D~u1K*7QQ>*]oI3՘ᦝտ}Qre\XK >BS!x\hY3Y3bFKNj?+)#bƂ 3R$f0*D_b8"X%@*4 Ao [c}*1@1C܉ I1!9\ s:Hd+f`|ŌB}xb#SŌ[*)E@[P>*f(勐bFvD0gybvŌqd"c*JB͖3tƌ1:S~m96S ,nj3VXTW$Oa{nj ׂNK`Dpf3Rc"]l̨Av ^;NO@1}w}8WJ)T]33 Y&nR8b%f))MNN!.+f[2KH@?-4Y_C&Z}ϩb{mk9M#6^^4Wi~a{8Ud .IVm%M+ < 2NìE4jl$U!b 6$~i}fX!2kcfgUUi^FۀgA v+ΒUDi(=j&h Z_/| XH"1Hz_Qr= =(+X@/ rMX2 c=!UưʬƲ[F7uȱN !E +vA&nOWm'|Wkރ U/EiԘ164v ق-]q +<=ye5^plxSBP:+/P+ ْ=IZlbX-O+5)^bdVBDO!\8Ъݳ]/J7k|MWB{F?$E1FbgHA|H1Qmh^d -1"uK-EYe~A橬U 2ë4dVҊ CNH^4psFJ #P#6ALH9LpbKmEY V9d,6q- @be{ɅFUu܊ ՚,> +1D6Z \ ΆsZn&, .Uf5ɳy%=`c]a~f$pdk搳T /kk`EV C +mBLAJwlXazI|18Z*z]l-rg9w+:OhtL[/F-2 2_5|zh{q ċCM8kLG4:Ug-Ot6?i JW*xM VhP@8u)bn0(n\Wh"r.P jsy2B4W~y ۇ`jUb%9%@s %] +S'O|HXl K3 9Bhj$.ۂي7Xo3Ri"qI!wpC$AeQ lzavTܧg03zN6@ZYJL+9$ +p$g1ZSZ k"{q2nق +1 Itm|@ЫBֲށm:UЪ4ObZ< JaspD4!gm&hҼbnHc b~xPc-WfFm[ +H܂ְH'82C 5AoZ(Nu_Bb} \IKV:r 2ŠSF!BЊ-53ufafH$f;(0Т$0ƪ*MǺ6b[qR$JуO-;EWGֲY< +r ++!JDn0&FH0? 9@DvH + )Q+XJD0̪ D _ABz)`}RĎ\DîQ RD]БUK"~ “vCkFar/0`>FuQk9r >LvZlNa\'s b o8Uh,̭6F4?(:(~S Nm1rNVy1640 0(A&A D+Hb 2H:Sg#zRg0Vi!Ǭ#M) +W +,Obd5 D1S1%tD+4 1W22R%;>c(AJԫLP;[Tmd:b;",.<`p Lt,$Xz[\op 6?av 0~`q"=1l|(XRpP*QLk- 7x-Co>1XoJ Oz$*Εkf +Vr&'SPtAR+"稽E 2|UqYw=yJ;CbT;h!j|!~Mt +6Gs-Dt Xt\ /@]:?dE.[DPZ(:AO%Z*MR,smNR|&U- N^ƫ7C<4-l"J 7A1װ![iBۄIuA'5lTCs%MQ{)j(jU)zo9zRMp%B@4JT:;ؑ~S^i bzr* yؑRc1zz"M2Et c]nE +J:PkZ $"THXji%  6@+iX+/A%x [6&گ6X,(Hyz1`rp$R)@b&(@ `xd! ;D(r)l9FAB FUsC%bDWa9Of)$A*Ks՜O^_Xf8D[_X$9hA/*&!A5!^"I.>_d-έ^~np^{ Tf7Nt 1D +\n:D(hk4[,1yԴF Tf +4J)C6īkcHaG^"(Bh&'v!EQjӑOk{ND$AO: +{MΔ  + Z`ۋVۊ~,JOy 3A 8LbK,UXR@T]u(Al ^ zQf)WiEW' +W^@3B-hhpt>T}ЙJàDpB !\l)@yW5jAםBMQELY3Okn&Nb-Sf+.*o*f F +Di  : v_UZKmFuwqzM AEH{A-BdV!g(nAH"48EA $V,%j? ӷ,?5cQ>M3ZsX-;7?]j,o)0UÕBa!j "c\l9/iNE (3E,;$1\~)zVg GoZs(~\oD02|AsϪ+/~ +bTTY'1+A-fA݃1bHuFb;Y~9]o#rFKׁL;jAq+-9hy/vl9XA :SMŦA΁5Vށ4~݈Y0aay! 3Ya-8[oh8`{aTm7f*!4+DoMMUZ56Xn)|^7O^< a'M8q.Ym*Ui(Vh!ǰ;/}+){HnA\vC,6+5rg~qM3 3,Dնaj3$c`VHHVk,?3+FѫsH1n_o)L07ob筗&[xIUfmYHY_3O?I}Yc NsH:Pza/YcJ-:2bD=Hil=, +8=鏦ԙ d b1 -%9,SGjmT.HK6`zLf< ߁IN(us0p/J%y$b94Y{Һ 7oG﹝($P8Hqw!r@~D}ס~80} 3?QU^&H_%)8=YMsw1zCra a=YD γ,zdkMp+ YGaE>ݦͬ39Χ$|$?Ly Epϫ.iڦsV2bj$[|0p,Huy;\m!tXD]n8F +ؿC=]o)H1H9dcZ G>`o/?x{O)v{yIr%I/{xM鵫 yoQTTQObÀ$6wA ï$~$؝DP + ]P_cWM9ޯ$|enW*C^Q kRh!gʌ {yA,b(z%>2WT\y}Px܇0uv§v֢4THeU:1yQW,+Fpic:`=YzK'-6[W9(qA4f %J04hٍ8Mmj=tZ6#T+|xtg_t r9xJVǽXJsP+,e|g>*FGԥusB]9^vG(NDsv$n f+>uCLzrZN(e(s/L3']1q;땬18'Unsj8'n`A-Fw\gi!^猺tɨN-|`K^Nf@p:j-Ģ\_:_o3L4Q`|/GtL(}RCCaf:nKNu[\k鵳(x/|6H]z.D#4=ao+EޏzbB6Rsy1zG1.b UJ1~/M~GZCl8'VZzgx߃hi4R3 g\ϭsf8Xeqwaޫ,{)4U0~GᐺduH A2K5\ Y*ɱUqf^g(p,r ,o/t? `hKF-x5X& |Z *-cfY<|$·Q*+fdۋҌgI,4\H1NR3a~0T݇Y }8#U=ĦVXU8uIc3PwL͟i¨[(}IsU.eQz;Y{R4 )-4\/>LsIz*Jq~:%咺evYAds;sD[1:)N7o8^Sn됸cuN],IMtm +͎ y`|xq?ݷg ;&vggt9^xfu>ز"؜O/n3x"cB䂴btʩoĥy`F>O}ztm|Nu}du@X3 lY];QO<[QM)mf qdtbsF[2]H[&c) pglRiVBZ2;$T.Ì1bsH]`!JMmg=r +Rdd|bsO<H;Mm9lKkL-74a!szx}bnHJuz+J&^M@n88W/wЫEPe9>Q78Pw/N>'KZ{8gU^ff8eL[gyյ\tlWq~8|t*6zYp:vYzN\q,fIޛC Y2Z+6G%bG.GչN!9`m+s~fq>! [o)q=rB^ٌ>WYFݹLF\.kf-:m㔀{hZvJli*BQۯi۬xYuag;M/BrD1/!93 6K U)Ie2W3(dv̨ ct糕ۡUОV\Zz梀qR?tn[.(Ek~W ft1~ $l$07ǜ5o9a=eq2Xa6'ۍeiP;?G84Dk /Bh4h_X:]5q5w2J&CF<~)=5vQ|VtZN?h$tK*nucv>tDJ&tn7R:l7JsK@2J7-3`sWFrY켎8MMZ3iHrr&2&,p;OYuIl9. )SuqiTR*^u.ǃ-[K +bAp9 WU nnĕpv2s^IuUN8]S}zuuV:V6;3N&UW#SA!k<.jhv:N6 m)Uljflɨׄ1t{ qUwպ,igtV=h2xꆸcuV>hv!1juRMjѽ1ǧ9mI{ 2.GcupDݷ*gs~%$citf4笊ާvqKDdL:|d3Q3,d>%oYEe2b8!;rLۣWxڞbuB\ f~ImyO7aN L4~#-m=C mxt<ݴ\bymw,v4mVrk~e3SrB 'TZsPˑar>EcB +NWl_8uݟf5JpO+\NFi?.#m7U wQ{ze˭y#tjmfhcvժ] +;Nq=Y2]|w\ +F)6N'idd:5.Z9\^NЄߪU11;%6;c!!bk)='+46W3fW qZ?/\H1q47S?Z -W`NrIi倰fv^?i9#Ht83\HKAbr2x?Vf`f+.\NI}n8$z‹gsYBt)!xvj*fԌǁ׬ (^$ĖJyDOb<4$J&lVn)|1;9ct.'X +[wݮC)[Ŏ̀Rf0p77\MrBqjOͲoN>TԸݒK1~I^4KVEYvZW}p,ʰWwcA%A&)KFf|L:Mqs¨or$kfɆ^uC(.6Da-Yg9={S2#Jr3HΗBI}c'YzDkx"h5&,htnC!NjuuV,\n;etWkLF;!6ʷ)hs@\::Vq(|. lԏ !.].ʇ.,F8?ctYvl}T(gkYb ȜRTZ6CZ%zfht;%|Z,];f#VG#Vg簄s?h.Ǔ5cp@_(f{d;m?O>gKRr'<g3Ԫg;G;#+ܿ(a-Lq=ǬR\6^""l(3pt'6='|edc2ctFyWlϫ;Nfi4shHu1I{[ wݏA<>OVq:X]ǵ(h?w rև|Tvu7V9T8||؎ˑj?Ml ǣhtΆ @F)Ҋ=Sƙg:^sl˭+Xz'w'4e=W<ÉK0ٲwp >Z$~dg0~6\mfB2F=hmy5k͸ b=7M}S3i<~4UkP<| t3Iz8eLz&X[3Jrlvu]4G;&)!BlLܴJfx:1N)}98.7(MSI1ƽUr9!>i\9ed崈ͦN>r%;?8QwGG̎eIfjvyeXxPWW#3tqϫE[8ѻ?%FrݦpTN׬yoRJZu-]c(;_S,/ĝ=lWVr(F0>C:vEn~,hh8/b;I5v\ Bޏ!B>l}TXAjKY~Z;SCnۿ=y=K4ە4ъyolRqm{8#t*~טյg !Tjo "vJxυO]uܒ +C>2L(+VNͪH+xr+pF|Xn ٿbT]c>rru.zu8MÝi-tR:fZO^zrP@r ܟK=s85N\i +Qݾ[En~Z)yÉk9HQ[mMr:%-~csR?brN?+VNV^g0/UwRuX\g;^qB=~PW7S7@+{JݾZBbrR?V(rg ^af%jsK=sŨ;fwm;M !݌RGCSy]2.g$sTLVLw>̪LAV۟%D2CZ1ZsKuR\e$`&zH"/2Yݐ?i}zSJs re>:zRrFъLy-۱qT,~.9Ret׉w_}sKCLS/1M@jvnve-דiW#h~-Th 2Xm+xb0jv+[Nǹ,.E 7 5Y 3HedxD;^}fGb!kPV;qɪo@+MiOLFlJ-ߋUuqt٬|z0~XO\ÍpCqv<\/Dzadv,Y.ĥ%uꀸq*fjn +[Ns7ys=x0͓8UX1wDi(F4"՜y1~j1njd@ĥ e(h9Z[bKSJpJmp[FmլQwivr 7z4y,ugU\ 3p%04a]HZߙ9ϲ9mLi*&E較\ۍ4\ W0M4S @ a(DYOU:U|HƲ%a3vELEk71-I3IU 85N,)8Em\Q\f2TXnH^(v!G07,4&@z`r!0L cKII: xf,0wa)Ei:-ɒL`i.䳆KV~Agd78{t~IeTw2+J͢kߤsWdVaӴ>JsM|5buQ| wk 1C#X*ZxcuP?t+ 2:%1:n\U|?F8,ݔZ&G;〺o9盂M,(}99^tBq|N)fq*;Dۛ+6wtdQ:r}|8-Y~j)!ĝI[;8SіL)_#|+0og򪦋fvW[Œb{Gl} 3,& wm-iULJ&%MbkVr#0Η wZtX\P| nAL,x7Qh$dXgPy@}6 1Rf1Kr>iwUv,ǙB2jl:ax,W޽ߓIM/ '%6U{Zs.[n뾇kЂTAl:]7Ͳ54LZr{f^m8=״S7\ꞛfs7Sݹ%yzhY/žP+Y}]gO %k,jҹΕ9/rzs:%#-WvwN%4{ qu4K5Rj;Xjtbp\;Nh+yvNKf''4ev{ +z=j99ava:O;Zy+6958vusR*Fs=:6CZ{%JZ4,juxqkb} SNqϬ..'Ŋ-n9TN͊ʆCRp[ΈK691j񸜥<9luSmNiUQp9#O qsG<.#wS{94-wLcg=vrUMy@Vu0_wym4Qt9\\pZ;u0;N}M]GŲ^Jp!o:=ׂ4M؄bd?ޙ=Ho` +W>2 ,Zl!C2_HMT܉-ޔzl6PB mf8)ĚvoJY 2nBG+mZ1߁Y,1 /i,5eө-8d<מt1 ̮W;fqɪUC<)*R6\6NVruڇۆxs\Bb2xvlȩjlچZt]KVǣuu<YeX̎Ǥbt]l(1;:P\z˽(z5Wԥ8b=wl n--KNp1|c{\jq:tE4~$jrF=8oQs9̸s>Ì s:Q|YU_f6t}Q'F':slL _<:^U9ˆnt)\Ft"Y*fG$s%뒺bvE1^Ml~ 4D͙Rlxԏzn>*GjR71B(3CV®3㹮V1`c(JqyM!5Zg.vm.HsEkYdNsQ&IoݚUwc=}& 3FvK{(]@|dTApcZ P jpHU8^4?VrEߢ'ޟIxa*84s(xVjMd8q,q܈ rA^n-Lq^g_g# +ډYN:ln:#7d49\j)x6Z[^PwcuCx鍒$l=r +q#E=(Ɨ wh/描rUEj>J8neOc _NqI[3:ܒO۝u߳Jp.K~ [Js+}g;br,\ mdpf2y:VmztGݱ:LFZr]-}.um9`>Lv4OAp}y'8%rԍa:)L5G4dvIif#->H;6 g|Q܊qKWk^'FgNԅ!̳9!z"Gw9TN$UhzOvLƒ +Ft%Ĵx+9v]Ħ~3\MZ2zϱ_D]p/ $5'ϼP +2ݿi\h "fULiN|&d",7lb{Y{}[i:~4 1Xj"rXM3=seȱZnIKTu \z!('X c5 ՞B0e跤u I؀I،d4߷8\hǩ;Du#A~٨ֹ[y֙MEί$zhƈxFNq.z^ L&dm{Tsm8fӆKFfX}Y4 n\Ʊ;Ke͇Q/J_f7n9T {K90J6f3q9U>mu?Z: n<.G>V-VZ3>S2;알]'UNגLkjچ{Q2J%(|=Wdg?[Rr#B>D0sݫ lU3Hi<ʇ'^s6Mu8uebuZXJZsP*N{%A{-lF +RWA$Fr7?N@܎Ǥӽp&4(s:L6m|qV^{0eւGΟ~|8Ԍnjϥp.Hw\2a D8mVAp?{׌4s ?ay_[ZPQZ!m`%$S :$s{5-;)T +yR/R,_k w#_pg:]qʆCNr;vR'FqL]JfGĥy~s?<9f-GU:JfbŎɠbsgm\RJ9:Tgk>Uێ y!xk6N׬P̲-!4S$n7 LVjxPY~yn69ݯ)f  =qۆ*R4p56\ #>tA.<fY߃Qܮ(}ϩ$MdHƻr+6S-Wݪe QvnMx2%ʬ̔ /̞<)*u#(/;rteqg|FЫͦ9fy>Xf1#ֻA[o9!>d܊`35&lD Xo b? `D@OarQj;A"2ňln='I`bj8y?B3-(4%{k AeJҬMyN%sVv.\ !!*TzsUAq\+C9¯7^m(l#[nIYq:TL*6è'N: v$xa^rla?Q9ubsL4|$N-Ǭ\6\[,U^l}:.Im)9^4wQr,y2*fnjRmgb$Ѷ6+T1jLJ&I0| uumTy\(}fOڏDa>J&uLϪ\ oB+-(UǙ~ *_6I0^rl8uE*]4`kU9VbsOkyl&z_r_v 1\jT6z ed=ŶLs@i.AYs+ZQ~UHdߖM  ֓$,o}*4N =r>$b3ո6G^pI+{i}8q1Jv\ r,qo8kMÓ9bй0~%bv?;8^8N(^YQfE|%N%I8`@6zٶMW|W^p3N0;.Cm<׬GC:F!jخ9G4cєM2Za|Z_)2I_`7'vAy%&`_h>hzo$+@N&zD.E :1Dr8!J,ֳ``hD*~j^#]u[vÉvY:*nZcI]ӱ$wXוFb=j8 ׋r`Nu cjB O^Ucub(E'9bqЉbi+j@2b tC!c\9j)A# O˴k H%Im>"jM淵+'AIp(U~vwz#EAgIN +6L01 C*8v0:i% 5THXj3.6j +SfہߒT8'==~}ΜiWIv۱n@C+9 i%a뷟<XT^(Deo|Gz8fJqTg1hW!l~*H0XFQ4ڋ %:u4QjDw!+5ׄ-xlH1, U۟VioR`:qHj3a;wMf#c3Qzu$$9.df^Xh`F07$Ag!]2/C@Gi ž؇( 0Orrr>[ mge@|f[d}.:Xf"C=x0)Bi΁ +J0 "SKxa Dz@jT<Ѣ OxnazMG.׭%)E_yRATp,wih(f$VR:w:Mk~Ԃ%L75Vgr6v.Ve"H- \h<ذAN.xx |X +"UZSkxgO .Ya̦ +&Fܒ绐uƟRFzeYc7S/#8?ȇ9೚(8x51rMkQ||旚_NJ{jWZ|to]Бr1^1Bw IR +BJ)'|3Mz k 2J:6#̢@]w>iM߯SL!l~fsY݆z{0*hacXTAe47iޯY5Ni]X(Y"0!M1)v h:^)Q4``NGE%4 +Rl #!^ѫtǝRre9~aD9tݭMVq]% VdQ!b=ql)fu1UiGǁ .l,A$2#_j5R,l'G4GVaX~čV}nvUA*! R\aeV\Ny]̲"[cSAoVqjA;Bf9KSO+ %}+A~VN bpF% 9Bkr;nC +Rw` +?`ً!Du#SBo4aj.NdK[ilL] $T,' QRA +.)'A[l.O7h}6;of3b3IGjxdBiևlی6&*^ˑהt=Eם|nNbz(΀N(0Ctn;QzzӰ}ȉf渍y]YuH%}Tozup^KfV&ע=L Gviq2^I==W$Np%]cڌU뭃Ee\/i!G7ArIAlVѻphE7W-(ߞܰ6;@ +TM''7r F{uȱ)Љ>y^$>p".p&@IF *\9/nZO#q BvDIR kAk;. _&r {Y[J˭h5_N-Ucd)[Ѐ\-/I,bT~\Ā]^kܚݢw4[Z5+h<[p~ly)KۉslEiu2\ 0 L2ilSeG8Mד||9ܐ֬Ǎ >2B*Ħ`d@AIkCR}rpx .f0xc(BQf,,Y-e3^UM5mgPO:ߓv}OWUfZz0ܞ]i~Xz@=O -Die8*Azn%/a^Ebh? FL (_hV/@8x_j-v^c{NBlrz9ڿa`i%+y t +[^^b +R]D g"|Eۇ)%u/f^j1Qn$MBF+$q+[n)-J{MOo(NCҚ dUZNӫ@ p80Mt;ƛ(*yo[BM,"vzutB]?He^gnZպP|8qSYjcazM e 6)yJ +bx.`~YAzcq{Ҩݲ~65ס~xPw u5\i/z^l8Ku_{I ⓚy=GUjt8`JeIRO!4bTBaV[$Ȯ :BfVK3EC(5f(Ev"Xe(z1nWp8%YOGeb'LuuJDu jzoNKd5M' ׉t:U^烢ϫ;Ή]a>L)p+XOe_U`4FBH%EĆm_n,Rd5O7yiq"JmT˲_f~)yE[jCT\a*KPGrE~'KZg^$O^r=ڹ 5My;Kb,~Cir' E A N|$tranMls#a×d9%pH5, Ӽ]}RݥeCVlFb'+YaV.վ@SI+o\88FbRYV^ Xc8`h#(6-Tp-հ7۰]&5Qj0B6Wi'/Ʋ T30n wӖ8VqB>aåaiUs庑ot:,v,+a+|Zd:Mt~%XW`IG`QG`Y*kk94|UԶ4E39}1E%֛ءIͩ;nIl@.T׳<~1Jbx<>H) `K--۫׵_ RDX9>QX51fѷZ5R,U]n(vcH4=lRTjP!ecg7,0jE W w(,KXg./ 8Lb^b,{2>^Ԟsb,bd~ U |{D<MRإÓ#$+"!r4!(Nj˩f3l`V]f 4IB(ޒZz3n@Hki-AZi"tjnS*;Fr(oAlX}i%~ѰZucaƉAA}v)Rr[k~ъ5cLkCi}i +ҫ 6~~_\1YdIazyMUrݤU3 [Sbw4jA~mqU A䊕=BA @a*YXt$xMc<8ZUym?h>"' Wۆ e]긠܋ MF2ZQ <$ +Hg:PcŲZt0a =)5 ; %c'kM3XbhTb͢QnVZ&?m Bz`~z|dt,(N8P""C!>})o-g #JzSAT#Z2X1)P"WVp!G4ĩ2*Uݗi7M8%F+olD{xrF}{B ˂QEZ!Knݪ:|IBFɣos* /] )RX&Lsxcjð#.l5`Ѵ—vڹ=hgM^O06VdA.5&Xۖgf S񸥴 7 L +s f!pR^3v+2^4;:~rj}&\iհޒ&O֜dB$qI@ @TCص{'U!(^^l8#x$5@=tŎWVshl@YnPRh;Yl*zZm)|\ D<^tB- C14RCQ*[a"#q^4N[n.Tgp-4߲ I\nf\pd>\\2s9gki9[ij,SZN (խ Zxh ~Od,Si"K*4%6X)NsJP3Ԧ@SS8Ҕ[q!h3v۰[3,je+mי +&G: ;E,n(xTil$~Mg&Oh-Qj"xHr'1 H4O9'}M47fv!lGy.S6hUBC9ۘT>g7'IjaĢokL3\79Gfz`uf,.8K"Kl/>r?&0cZodR6_%HE1~H@,R,|DfQS0H\ePBP/(0$YZvcZӬ2,&E6JEtPZN6[o&ȱ>Qb1cߘU_ GզH>?<Φ ~Pp5^m)cl:Vg*5# UM4A<Uޗ#xM\jdT-"3K]mE8dV]o#)X'`5ٞEQi)I L\?&vZz Eَ@_5aBA-z@F$~IhVY![q#]p&;Kd9T/Z;f|iWŦ#mbs{HJ_lRڥioiif4eTwB JeXch%v1asJ=bqJ>?GiQ^i'xOmY(5_595cَ\+aV2N0Z$¦ 2?k6FkWM e:b#6' +$ni~w `PpR0m['Rjᷠ(``v bך`w#X5CQYq67me+V#Vn}D9Ã[9j%(QP^j)OO[$s{)M#J,5e  a߶IJ=* v~Ք.5dz FEC_l@iϴܵm3-S`{C+6>*-ibInS2 *9Zg"I/ slwQ:ϰ>I$x UUt3a<(16VcA}hyd-߫XםUEKMKCՆ= kM2Q!T?fרr)g,~~2DUx g=P5h:f=fp:td7eU}'BpۭZ/5mds<[Sf;kEP+ClOj F =eX߁ B | %':T0\f|}z)>`\ȭwMYU6S+!tJRl?b)Qd=GRlu6(6AI[2 &z܎Ź櫂͐|$n!0n4p9]|ꮂv NU'-i}EEc/YhU X==_jD/ޔۆ~w*6#'\۳vͭ3^Ew n o QV<ۇ~z% 8EϠ(HNI~Ta{SlVx! t^H2qal-Ygĭ3A/=h@ǧ&զWZӃD<]e(̯mMpUFjQz?{ +vry,ä"~\$8ءJIn@^$i3=M3CeQ"rR7]i,F^8NXfM-@cB48`q$}b|njRCm|߃'IJR֒ k+K o9+r7-s?%Z4h5.O.27Ox_聩:Auo!|8wg^gqfbQզ¬3e`8l UFv)@_Wtl/N6tʫ9v[R}". vrtDZό@^t.i +ǠcPId2%X- H}nkK-ͧC1lB7g fߪx07' +VÆ0X`i ʭ1XE +۸Bak@@e{R+vS2uzP|ԲXۣ}o/(mXzDvYd .3={U=2yR;Se"Mg[lxӌZ026۠#"G (xOyT}CsydVLK,Eւx5y iHJRtxbVl^l@>TߖEWb,=<`D$ p|@R'C]-gTx;uU12](IJQ}fHLhH }V/6)cBl~$:eY'-zTּ76=Lf!fsa6LL߳"Vv +߰>ڑUݢ@`lO#kS0iI^aA*D:HJ!yt*fvt>^oFkOzц]6[UY@eh@ (Xq +!01CG%D|$#s`ژ*y?` r;ny߶X89/zO%ק v NHN̔C$4&X@L\ QDXv@'٥okNZ "cZeWey Ut!tT8Å/Vh(!V!/10:8Y +Ki*`RVqQ[sm5ϕ$db@ dЀ` 4*x :P… .T@yAJ(FF<JLbfւY05,WL& jNLP>(_ "40 4b%Jl0Ar-)]@4ԣp{5sR6Ko@ +,0a /4>T0@X@A(qrQZAP.r:] d+PvmUb+\BN.D͊#N42 ,14>p@q 2&e#ȇ'hka)nP,r/RٔGց* ლ,-Tb)4d/-JfDp&"(g" ACOi t+K>{k>@跞ے{F-*{2AQ@ޑ!*;)f& ǥ &HG(KjuSdvljcpH,   T` hA4@4$pAcD +a!%CfvZ"k4Fkxɞsqlq"F2JP81Ǎlа Dh<@ ,t!4X +"QaB xt3=^0'v +vu`*B!)I`lhLA# $hp @*и +@@h0@ xE l7v ++ar[lp(): T(03j$P8AcР.Р! (@A40tBÆBXhPYԢZ4> HY(%N+W#(LlQ"`A#(Рpᄆ144 BC 4Vh) dX@%ϊlЕLSדrы t\71dXv(D$Ç 0hXP@c.(D@ M'7Cm>(RG 9 '(@2hPh<@C HC8NP +!c ji^tnσ%3F{1 4A +7-\|5,xA#и H A h 4(Ppa0蠱G0>XQJ쉰c$LČ۰.G {5v")TEADl@40`HИ@ +.thHB +4hX`#^ 8"Rh$"I$PRY6`j|Smy @"B4 B"h4` &1A4&F>h`0E ^HJ*9:vR "LrdWZ +MCAO`h< T`A# Hh\ @hHcF4!8(}NSh6 q cS7!<޲B1!4X-f4FXa4 dA%h4Hx.jG,@D&i0<"p`E-z~gD Jh8$04pHhp@!x@ +*8Q"EŋTR P9h:VX@K Er:֯ 4 C +8Am(ƈݬ7nwCJԚ# BHmYȱ2bCV}eՌn{goQ|& vf~'e텔͞.B(VHԒ,߳^^3w%IWlbq 5LҌ>X&}$b +VL/ɬ! w Q[k#v nN%S YGHJWoMm^pj9>6qL*Z Fh.DGQhhr6o_)MzS1BZl6 G0.{롲d6AСe͒mLn*H+FfC" +c($Dvl u+a-CKIrf8e@eϹD2h"[,&R*:oea{TJP ~2}J1)rEPtAiðai5oPZN/j1MB{eZ1MM5ۭXfu9~J[j(~Re3oZRWw`IfѱZ6gZyhXڔ+Nٖ|#s8%ar>,G(_X,XRh(Ъ5^իDZkj&ъXru-W]kn[5[wqj p? :l*X$37SP9/E6>) beæy,'`sqqk'Y"f}Ahf}wuVbbv4ڵ6G2b{4[$F+;PXA2K*AJM{h=h"85JfԐjNA:P$k$Zk hp9E>ũ>K˞H‰V[ +: b6/6h-׃r}DjbgKo[h9 `U}LJwX`<*AN]"f[VJɱD޵vREWG,-7`^]G4G3hB` &l .R HZ[ΌNS‹R| Hˍ5 \u#NOBY?vBNcv|#O(z5kMFzVҜj[\"ˠ-?@bLrf0` V߷i*L6S7_իOѓrf7 6lWib,X$R$4)5&QpJcqR@t; ?iXf'ҫ)4w"yLÌ܄moL fae]j(~Vf#vn  cݲ{%|1H%/Cn&D͔ڄ *{R J^%fN6@);A=0qP(D - َ]V<B,M<e譛`E+HCu QJȩRbfS%1fA Rè骫Z1tvb +0V#Cʬj"U"X(ٲr(hhԼ'쁎*. :9Uk9Ms@ W"N*@QcuZCCʂIPjcuOJ2VRMQمbDiŠpQ&r8eӹIRg@4p.|߼4UkIH8w_YvI`2:q5K\*6 2NctJBRe5Ѱ| +%>2OcN~l<"ٚ7LQx24(>Yk%4yH*׋j} dfrd+`|brODIHgE=qOnǁ~Պұ]ILRlOVuj]T?cuE<*^!jdWo0U8O_o,<.ޯ F 9s&é1T +Vf`h"Т$6 +-C +ƿ~Pv]0ͯ ՙ T!ԲފVr^EYg*Xc>8\-;_o*vW4K>9eG`B^d1R(~mh;JnKK-km7QjkYz߄4M[e)nk9ja|2gy-- Yna< + FQkE1{/\?!q+bmn^)Y$qk*\k1pxxb d5v%J@dWe8zjggכȨ +Ra zPc G0|ѫ1b+{"If,jXgeH+*;scIkbD@enWb AAYeh'zNoʬO ^'E"j9O(ECYe.Wd,zXidJh gβ { jDԜ[rWC N4\(qXn5|@ H|(rV=ROQrU'̬4$[/nTN/Td˩2fW$yݲgPyjM8DHYoj„jg27B}tORy ++nbEE'"t3݁̂DiWG+筄 U&#fUNp1 +(Q0Td1ï6!m +u;RE5 ӚiEaFKRpkV2Mqe <{Γ.J0~$9E_VW%Q*1!VY"K3 +vPf0\Yɥ3 +8Naan4zs&J>stream +M6,Í Eq^C:S\y(\FTa38Iةٲ?L3QQ9Ԛ45L=c.լ=1O +ze"Z]0RњLJ?ɑȁ +lr #|p,rI칏 mڔŎVIyqHH*iv"PL4mųSPp$DE*B~OR^Fo5G`3Lia6[A@g~Ml^*I}Q@L. +B熩ėuAV]`NX]&/hWaUݦM^c,)qԇR !$LO%IL|`%1D1=!UZ[/=PL&rslE ki;P3Qz:Zr.%H! F|%#|3&!G謀}RORX[6]TŒзD ܒݜeQ]Xiҗ̙Rb[ QDU+(ϵ;>"bjbfUQ qeyai@`c(-G( hP$<4p.lBA@t a +h +1lGsfꡖE_nϙ͆ECS?fT`d+J ;PlрH0/_(hᘠ&l` I'׵A +LQrJJb +!r^IXg}eŌHYfR*O7^1'0#jL0$(WpHقQ4!#̰Af>K5Q()G)Kx83LLU*N04pDp,LPtH.+|r$>f DACħ*,ך bh14Y(` +4)2htƉ0 |N6p a  Ja+ dL.DdړU"c{AF`-bс, +8aF46ЈPF +4(Иp JfKwD}$yZ!QR1yŶG_"ThMM'64AXƒKhX@#G +AtqA,6 3'jN~ST^8hTE* "@ACXC + %*X@!x 5x@J;{A6UCלh1+kxj@QVq"I2 `Eb@ bЈ` (2hB/:ap'+ B5.aG*C'&JHH)t*rBeD IyrV#t Ѱh4EXйAڏ<_pj`b!i@je% r@|H@b7+T2UUI|ŕbIU^٩W<Ǝ +r8FHhL?1+|`z9&ԤO=f+ss,7-=Þ"G'8I hR\K'PS% .)pd& ˔07"g +Շ$'YMS: +j#fi ˦*YߖY0"pY\U%4y`&F ! H+.D&VO,-vB\AaX(ƪ(H +1{r$ M&<02 +L88ЈQr PD!%jf"Xqa 0|zLA&mJXOliP[]lZ/QiFJ +4"0(" E13txK +[F-SP!Lq-*xB:_Qi}RR`ۄ(r@F( HFEdV0 d1(TG,] hŠ(-OИ,jȝ"S /7 C*tśRrQ]:jVIeM?GdTR:͛v:ۻxGOg5#ZR8$tE3" Ae&deC3Tfaآ*t9,YO  USu++'ʫ\S<ƮpU(nEr0zJCΖ\PqXUP=Qq@f&Bl\U{R]oOQi +5.pMZ򜨸Lc61 +DuQT,}8Wr $O` ?H( KZ(<[nT@9+[>C!HQ ؟CSp=41qi-m!Hpϕ3QdZTZRQי5J~`J,Z9*B$٩>?M_p(ЗDK3r +s5^bZm籠(#t[[%(&jH>AXqzNN^GV]k(9(dń)zġ]Bi"vm鷘$B#No\M9'N @D-8$qi * F®@%.ϲ3AKP_m*52BU5BRhgtiIl"0[hXE#_ Wi4$Y yy_?_XU(VU뎂*rEI ~*) kyB(YLG%: S$FUiJA}ZUZ!s(.+= +J]h'vMNYVi]meVyb3%(%A(=Au1!qۨH]Ӱٶ&Hf&鵅 ĥe^1Y\fĖў4[fYeFlS&[vg"01cSC8)jKn-}avJPc#%o JGdUrO^f< .nu~F! & m}n/Ъ9ҩMeb(|oZg1)rJ_4"2Ls$ЄB}Xl`AEd/QAے݋h'%k}gK/K X}\KPkЗqK4Nj_e Kx ֋D֑2 +DEunp1%ՏӊĕHq&z!ꃖHilRY0&'Z0]>08jQ-۠n$|*01\?'Mb.+UU1"pV(*z ;*Bz%5ǥP9im߃P=g}۵=55V%G:O*48կm7i׭uߴK,BjY *<8jQ g4~K"J!`2׼|%N"H?7%)f3ۈAmX<;5(J^cml4v'#VCzn+ZgF=o^e?!bMnϮh)܁3%4uuZ"a9ǎ!]?NxkzŬ[5[UE4/ۨmϞ26YmXO&n.|'km}Bs-Hať0P^u\`gy5u~WJR+5iB"q5NK(-vi޳V9L k%ҷH]&ЗY +M$RO:=T'OXeF#2#9ry!"L5@Qj*Eܴ۫}=וwN.?UZDTNF_Zi Imo3L L`"dDEd赦RYԘYr=cƟ,|Zz=+x U~e6ߋ?,_g./tVMf,O/݈1ߞy.9aU|ݒudF׮x+ ofm9SpZ^ѣrJzmƫ-cjiKM +6ͮxx*_7D:jD4SرZVپS?tm*(ԳnF|{n{rl۞Z0PZc(BWUy}Dy1h r3ybW3q Njы]!v}C^[n̎[Y˔Ԣϰ=hs/5FLTȌU0,h{ը]qMcVnnMmޛ~V,TuR\^$v~F\d1WmzU0OL&Jih%WluTUˮiܦ5V)ySqO*h<~Q*K1|DBQ3ӪjfQS<_j3^i]s5 R>crGy͸ I嶣5n\B,x +!K )uEjZ߼ݎڰZ' ق[3řgnkRn`m0QybT^|P(F_ ßjV~{2CDe+8I, J?SIc4*$ZQ' WmD _e6S 6ߐjZ/`묣.q4*{0l ;3IA1a&H aS{X%V:nEn՛+9B<<?${pVAsgYͤFc@:q~3q㙄uL&^*Z5 ݀/3N&D̤=㴕d:͕U6%\+ZMU!Khofo?6~ Ƚrwa5Mu6#`dBO\&7З݊ŴB^:QEng[d*U k'H2=ai?*xEFl*9 ( Q JCf!Y5,E& {~t} ;vfJ?o{ +fKQtz8ja;z_W-ËS6Ktl噤@D !9BBal:R0f cPzEMPUiQyj1[ꅶsR[yf<ΒWtw͚T+WTLőB.V`ʄ\!׋St\~Yz~ d2Í}uSZB`F <\_n!C QfqK>8Ja)BE`FWk R#3_lԶ~YHtyznb7Z E@6u6clUq`64/S< +n+if}07U/,5F%C,L "B<*R,(ԼU[3!A2èCzUZoyoDBhkM۵[_H5oNk2i|-y~Z]gخ̖1ѯ3Ĩv^$mIf(JџX5_ƫ(m9M^}9=׭~9vBʪ]Z ؙ͟!`< +v[blūF(Й 0CF\rPQsȥ/eS*Sn@i:Sq6 p?ͮ)x@a8,FծĪCkézT8B`0I.9R$?^j&|S9Vל[t[K^k^yY/K~;^xIȧ1?!CjO6X-m2,Du"EyLHd "qZ[*3YvmxѲhAt2y6P1, 5ۯ*W؄P"J]l;W/Z +ҙƪٔtKo$Dm^WS;u•g7 {z@0RyMkP}ˆtf1drC(IFA T&\Dj[fAH`k7[1F +g K[&̒(R7װv 91JʖAzFzF5q}E]r:Nvg d7#9%_ngT!-@ǐj-_њc9_vvnr<{U>Fag,w%KZe]b̫NȪ;T^ĎNxB#37 bҀe!fM4bfnC-ө: fk%Kz.%Iֿ0cZ ѪʳÈ1ap")JZ_?j2ErBkB=yvZ6#f4 !D XY8opl XpIC/ Y)4 3Qg.|^v_<@`FiĚ;@`st)z^{ +'zs+T`xq[*`5,~MHxĨ1['Zx(ӭ(葀f}A,[Z bvcPj+DTP)E pAH6 !U>T/@c㊄z3*$^pV Ŭ61p4&P*Aj[Α#0|J l,X2w0%J 1I[b7Q07?>x6 ՜5E`6K:r},!|E DV +PRNU1?IZ]b?jɡ#a|jU>4yLPT c}VyXךG\rk3Ӯ2t-gan0Ud!IFI yc8U +w @o"t"'$_ d]j! JOyŰi҄*+1T`-0*OTtj.Xkrljm'"5CvHB;U%ۃTq=ĸJ ^xXLDz \L @FjdjwP3tRC!ɍzMgjq0Ҥ*[!)ذ{ ":H ٴ6eZl3S/7c֚ing 2DR -Us+1WZ̄0"31[p$BXxW0!">Ib^%Vӊ g +f1z8mOA>ՐCe{1+v]j,-]Gr!ůZʱkDP,NӘ ،5 Cabp|F 9I9=(ƤTJDqD +irz)KpISK  +@~*=}m}6+`R +3J EWg.OtL%J5"{xZj5Z*3䏖3,p,iI 'V1MH $Q]iЫ;nǹn&7K&z_@a !>A W+؆J-WFYOPc8SAѣ*q~WR 7v,A)x &ԌKMD͑{/ 4Of,M&ņD(YFHMj̢{a:C/X 59/>h d +;<¡v]A!mSBùrHư]=][v;Klm JSj_`{V?b3$0_n~w8؊Y2"h5'!X7% 4-i z?i>J!IDYU!f+MyevVL+[_M{Ğ9P=%酶 [{Rm=>2[~~v:U+EjNȒ*BTDq=2}ʤEZg9׮4\1yQ=jc95Bqr8΀W ElOv0J[vkj5iP൒߷MfM ؆3k֋#iA +$/bvfPˬŎًY\1r#b:\h$BZK!r'Y_ߩ]5]`h}6H Pa#@ X\_j~0.Ƨf.Ϯ|=l X`$,Pz%%MI' DԙK OR0F F(pPr`:$#hj8NMXDdtUFs!6'y ܂"F 6x#uF d"a^2a]j۶lgqjLƎZ1[g_rj^d).3eWZ 1Ohb0>Q\l(~ShzH ;Ck 4-)DOnz,P @5-뷂lxŽϸqsւSjAGj͂=5HKbbG<6h" +ٞzt Fmfd7.oB@۪Y6?Iaz!;J[;qjA@I"B(vY]b$nFtf'"tr{ӡ%bcUOF~e9/rQ$B,ZEG%vDA_;'̬b I^ V͝لKE6CJ;qbLp_k9q}]pN`# ~inMOɢ'ɬ1kFzFKm;G >MHa.Pb%zgyxl,Z +"Tjm}s^OJlzUFC\\HK-E1 +>#:[bgٮBH5AzБSv"6 8i,ŎYmځĪ7@<  %ţtل5,۱ЮZh03VT\^gG?$ʯ6ۋ!Z ؽO Vzˀ$oZ1~25]GE(."gJm<8W^ѼŒOz mHk*!s4æ U_ "y e˂9ϚIeƳ=:JlKkDbjSm܆DE.3_j;@V6$W"p`ĸU#~Mp"Mz\kxL0 CLPgE3c @rl@E 5A牮ihVJն./\U0#6ޡebtLhaCG*=+R$78l#x̪=x!N-GgWYv,!=gufϝ(R]`Bfxz|&W KF" +;⃷ +}ӓ~ b`$GCMʇג"p#[j8z&z|({_?*!\R @XZf/M06#[*ǽR3y&8jSrvE2iA;H鉠#i!=sJ 2g0c*aVq4xI;@咠D§ofanܥu NW[ 1D0~cW6=o$[``q"@slEjlhuv_u +A +RL8؂19XْLzY :+\:~FqڇK-& +6)p]ז|gy0Qg\~tr\ , i^V &&&Բ(L?'\H 1UāL6AGӫ4DiʀKa~4B|Rn_S\Q17&{ߤl#q].Gjnm憶b.ՂѐS6uød>\2a^g7oQ:5! P[$My 1GR*~0XZj)ͯ/=f┘u<;Wg"o}ms{~Q~V!p4H=~SgE5%Q +sPa>pR,uD/B@,58?ͦwϖnWb$ە '^3Jn'p:S‰5 ++X4vslkQsQӵ:)~ 8Z0!d#Ux%V|jTQ٦}"lx6 !bh<>=zn= 1;,R.6 '=#;%g\iPmy̞`,01`rA~՛ZsS7Ė",6 5I B_7^k;г~C6 +1, V1j5O0Rj O<$@~J v`? u̴ +vߙRyӳ[#Z_\CĄ?`ePR[X1{ JVjlPyZAef kF>W@hx0NcX]!xAh2;Ηacqe'uZ0J9]DVh2k}VBS~@UcCY4kFpKXoQ~π4o5'>Ө 4] /p<0~G RA 27ɱ*#TX@Aq *?B f AWfMsDj$J2UR}[~8am;s + 4tLFro6HF=!Td&!Hef:R]E'nA=Z+~Ѳf9v3)z;̯6AQ@ A![gQ~'J7W]YŖAhZ+!r)Ao rX~y`__wb!TL(NXH?$CbLW|Ziuǝ$`B@hΛ{0)g*=&NT# +)d^'zD TZVY .DPI &aGeR|sc fOo}z&t&)egqz${O=Xf,Rw-k7!JW&Fœ0\_l/Noȱ uݘ)M|!A r/=R`9Mbns;ӓC~sm[ߘ6ZEjVD‹[R<[ET}0ÃS:b@*V$A cDRJrڀ[07gW|w͠IrLDao[O !R uڮ[gf߇;V6J"Fź{o kA~X_n!G(+7 OhE&-t1R`,hB]pN9X*{"aE:5n֬gjv*XYs;^{izX`6渞Lii~Ϲ!VLJ*KX,YX)1S'raࡄ*Ew%r4ەxuy]ߕ^ˍ6~ƬޣG.5??$`őI9 CHQ | A'MHBjfm٥c6Ա:v%Ưx;U%O;Nz@3t@s(b,p5rvq!E4 ъ̀1>q6H*M"N' VfU+# _,E Voa4O2_U9Hhp] )A:Ooey=>gY(Zlh`84'yF]@BP%(@u`Ul, iE8RA)7&Nd yT^giDπ$GFߢ48uyO6^mHpzņ!9tR0J_l)0H^JA`2BaVL(9n!#PIֆ_[ieZr_j&9FbaVVJq\GF~4 *B@1ĉ+PP@(@zD&b= =&R8BA S1D@Jbbzȴ%N(2F'#N@ao %JQ  ,JTXqBBB=h  +*wx<x<x<x<x<x<x<xw;wǻxw;wǻxw;wǻxw;wǻxw;wǻxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww#b4R#@QYzNt\rFٵdP`Muf~<#Kny2leb^u!=-5?A,i&z]k jT՝Rf^s1ή6 +L\1Vs&2=G$p&bF 㬂tU0ǤsHKUGhr[\tGσ-j}Aa1h +׭˖TctEݱVrygRpܬ[6q:%lNכҋ"I06-MWNh9b[0VhnN_xSMǁ;N6\m34/bt\+1d:| e $CSY W{zd3R(]tNZ.F{BuakUxtD>o:uiQNyM۱, .WjV@aw%>g Qf@ 2| e 98^f$j:l~48|L}rr+k'VoZFWY0L3\UEӁX(rvXI6iexhZ֙ wsq$ 3=d*37Jz=':o '\;=4Ý u;Rsb +G'62U1(uF3 (90iGVE1옝 xcδI<#u_Q/`K JF|9ϳP3APkF{l;[kj:`Ji8Ot TcM;RlNժJ@6يUʪܴs;(&q^ːR +PgF`u+gW186Xgn8ha-8k.a! +Hk9X/e ;#j|${NYL4Eq˩\=AvOF|9L|K|η +q|~`>Qw^X_ +.5~Dm깖^rbÁG[D2w &MbR8YeSJJa{6Gn8:ao/tW<]d<.5/+j;>0N{Eg-g4vB0E'8YW_I +C׌,t3J Q̯R~Do3R/ #XWGtEϩ'S v1rI轌Ҭ'ն* ?7 DRPV*#=z{u6Xk+|\:(nn9(>#tϵ {fnE+VL$xUsfS:Rt+.مv?# +.,Yj+Fs__>y'uP )~tROs^rN,.IƓ uۈ.oGQz=o5S7N]2<}c0qӅTm-gR)E0b{Tvb{0܌SGA00ˮ3Jt;K +Q>" ׂw8&(Hr}ɖAtMj|F!g!U-ǓcN +7@B(|wQ.AH T\ɐ`[RlI_]9!249^'t9Oza޷NdY@. EI^9[g;k&uÕu2^v2Pg0VgL+z2#nmYRwʦV%7h@EH86>(GZҙkd3ѳ q(ED+iC? ^ ^WZr'.se|b3*[7$ 6?8]qj +1|&.؜  XBřņ]Hpnș:SѓA2Rn7Vr,˰>ޕ18_;I̷y~Btөr`t@ ~uS/2crHZan1`n*px$7xYi BC0} !Qo#r\doZ4xԯۑf{Oo쀭JqF,Zi=eal.P1.zﳝA+n0$+@s)n)b -efZ{Y1x_n>07yMR_9ƃol6TءBCQz~S3_]]od[ {:8mka=wd}~Wo7AƉ͖ۊWbq?=g?~ι]I6;_<%^o +^D򪞻y$tT2I\KၹR:yCpۆ(0@m9^c4mGUdv.8ηs0ǵ\Q/5:`k*to&݌QNWֿyLxy[. g/D~Bu7>(MxfȡnDƟ>K ;~[n<T[{2%4&+Bq!@Creoj/ofϤA9]S*F72,C ޗ !ɱl'ƴm\.@# wBTc9_vE˳~Q;Nu?m˝jsE,‰'={~!Vq+G02lρP n1r>(eϹ'lX/Xnp/PZL4mh5[> $8$8T8r*KpE˶bLSfJ#q5!=ifuJyX-z_`ؽ̖Ğ@=>6G0@=8A y2 )zG^{ےLm/]j^'jnm9`V[9P)${#ObY`ъ7i=Wt9#jo.t8uQb3TAEXR+qţ <{Ow:&zQeh0Do`[D|& +>47]5Jt+Ƴ$ q0t% ^a(|\i=od5tHbcq$7BqP'|)Οo0It^|16β>YlPmXUt?ߕtʆھ~ҳ\Ӊ5N2*uq-ȭ5.眖 usD=8u>]{.FYCP!bc2@Ũ CȕNQ6bRu.ƶ ܂b8%V4۳ve v/昖QbϓۮԆ=p%pT:X x^4Ns1`u2c8[. FaC.Ԇ`2HCz\j7rdӥpRh9q׭,L:̰ܷI^|qX -Zv %n"f|G/˲^fy o +KFr1ʱoԪ[Rb$9jL^߷8ʹ?We+05d 4Uv4i.M1>)J+au(^wg$iiKRs=oDq?kY~ϛ'Px\*&zBv'D՛( 6Td/5-'eHo;]'R4Gh~=Ų?gYBNJ ZIZt6ڋ [ǑNrcIһEו~zȨqrZK3`@F}W[ Z"[0ʖ+V2TyͶeP0OQw>הz9n.WC >R$c/z'eUqt>'ٞ >_kD*Zdפ3pUTߢ7Yk$p҄Y-I -hxcYk"˫=+ 2YjH8~/ciuvba)0 ׁ<I5-q=HEi}7̧ixorq8tX1~f=/O1F=ñ0`=w-Yj{R}緞kh~LBq;MIZQW.DF~%Yb,}~9]x\: v$Զ6-YW!"B{+5y/2{JKA"EB~)N,4¤vf0`V!D/4A>u֗(Ҕ5l2@[K{1zTl7rvZ!>DT&1x-ka Y4ae90XbV-W?Pa*sZyZ_զ/ίYS6ִ? Vňݢ׵̢ܠq] v [ߴ7hEy~&9 SnXv3m62 R  F<؄XkPm8Ұ63a`j?o DR|vIhObzSY~hc< [H1Ci;9tD|@̀s@Az%E/6%MD&0r9K݊0>q}8z4M4V"4e8epŰa}>dT>c2`Vt#ů 0Gm .Jm -*ibtͩ\JF)?]@%wI HaiC DeN:]dpI2ߤhddޣmmԬ7zD`)P 4Mbxih86_{ `?َ&t5Pf\XzRG:b(pfG&rQV` y5 ($E`m2ΰI 0K Un}liLYh5KrX {UȀ+ m fv3a7g u $ 3Mbh!Jꗨ7ֆ3 Ya 1M +DBfNFFw I}P6w@4C_l+JF*0 +KFf p5F]Nb\m2〥 祖{;PuX拠R0cVR jʖBt"p#Xw>pyܜγ)w$øuA[aR)]lFJТնA{_2 twչ\-K.N/Fq7S TV(Ͻ94Zk.öV^Qzm{Q'5U #A+2 H .Od:J1׶QPzI~9 ,Vh^DO CNk6.J7Rء!JsY >ЫG)9M08ZcԚXS_o hAB [9޺2\_o*Lju(E(v8˹δwb|OR$Q_='.Lq$BPCUv ش#yJ:^n`8Hio9dGY^(u$D o +3&T,nGJVG#ɭ27=qcK$]kby-g9DQ:Zj2ϱY}";IzT`{ᖚԘfTެ>c;<Ts܈m$};Q!= +zuSr8$Qg;CXVs*} x .Ug8I:W05l!p +sB@nuۭ[LQ˪Φ+z-2k`/H^I^T4(Xo$_}rsq`,39|=c)}"9or$CS`mK- wV8O u#WO G!-5) "NNfi(6j`3$QU Ht:_} i+Yb.O/3+4A0o㥖KHeC]eG~3CV~ X [-5 +Uc7r=H5[tlwi~B] +(VjLaPYC*/_aⷵv!&HX]?yM__n2үw"v%`M4̭'Ek= 4Ϋߖ[2s`Δ/^x^OFJJmAn$T[i50iXTkOHOQn*Iq^|C@6M#0G>yF-Y=q_ +񻦵E~|JfGJ|SzN6\0' C3kJR\_A.JsF9~P4D)zא<.kn ,4ϴ<\OUbTFyfW*Rz?l;= T:9FkJrn U +3%Y[o-KQå2O}s_Zs1ϰ;M[^|!B ^kW'18Xg7r>mlj$daZ;䷯bg.*NbXN Ro'K/[tguAs+t-zaz;_rLǵ}z3ntg ~N\hC<;O܏R1Ln}4~gYA{ 1yϵ?Eo˭(3]H+1we8+4?1Fy2]xar|yz%N-u T +8k WҌ_A%|Ylǭ5Z ՋeցR~ oԬ̪-DJUBs1*уY(rLnkٮĢ?,EE\i2/^Ulob;$Bʌㆩ]8UWMJ[ʶ@Kڈ#x8VgϨ|n{6%WKtK˓p{n6W;[/~`"/Ŧ=\t=fSQ|)=ߓV}e"XϏ؍3nAyBmgٖSNrΫF)^N*'h(擎zSroJ~R|敽/^m*|I \z;3N 5K!Gn7Zj%ű]rVQ)\.Ǚs:~]l1M1W<݅EF 8x3/>2>l}=Ūzčǵ5\l8Sb̏RvfNF)֧>4waU%81 + dǫֲe2yUxuYN Ә 6&Z +!ռH܏b~&OREdy0}0%m}ˡ/x\k)vn"pv~:kj=Dp|S:!tZѬ CxyݘU7],O@-ע =^A9 `e)?m:4mgV-rbQZуˑ.70Qd/xUh7P|Nܧi/|{79[n p^Z^ #֚[oYiJޫ+z\7f^J56XNcZ^iXG%yQs/FuX>g3gupRX9Sgp2U/ K ne3:'Qt2k涏^|mA|o¢g;ˑvmY^gM]X+NFyΗ:KB[I8PsLj@,Zp"7v4$I SeYcJ u +͢b5bmQ!h\j)F0 +&!VLV؄UIW3N.)V Gg5H1Pv2;://"\/Jg?r ÛFZ |16_f3L^yj9†cv̊حO cR$i!U>ɖ=p:ұi!ǻ#9` <|F /  -%uԚխ/jkS-Agiau[+ *nB,78rRfsTp^m7PC\. Z'M4& VJRl7IG %dp/$Q\j,/68Xd~#Nv|wIP;VM\:OհW1h5/:خbg + |TZl8vwxO6q|!~mbr.{b6;y)0'锸ev;L/,AVpn|`X GRԱh=(2 +`\$+8N5 G:^essvy͵\W 9rJa Ӽ7Bp5fjg߁uk%XtEC #Sf|C87ɒɀNr#CoUASs8IA+z q!=)/< 4گ,ܲ#6L3Bp&)z/H_xA~[Sg!^||D>{tK z3\n:R)x[n"ǯPJ|r}sq(NC\i-~We$0 '>s-~_mB+~u+̯ z#OcVL޷! rR^?VXovƩC]oB7O4K`'ײHsˬi^C3@*kW[Б?;)MH_P뭋QjWP) +`õ`DxF͏Zp[qCǜGU[ ֛q+- 妴f@Q [ jH( .Lp-6۳KK=b:v9ʹ~ gYmJVS/3~tPEoJ^mBbIcُl1&o|`L7HE8gYg4D"LQuj44.4;Wb>?a{Mr\Rp;M]t;bT)8BGUFS~p.(5maIқ7asFehmBZqzf&H ǬV; 5:Vj5}Otf9ƇB;":`m|)Ao=䗥F#2gc5"8mcj)#ld5GVy6C JS-O`lPUAK*$El:` G+C# ?Zjtll0\$xUkC/c{)<¦jm 7t +_˭-W]m|@fKMEMN1lYA"l'gYd,z45[lR j@dey*~Rqn뿆3 T$ PB)jw~pʕ(E6G&Bg Q{XuBnʆ@Yc8,ᖚ-79SkpZ VWi1U4LF"7zVkؖ@a2dz=b;zދy]Nj8,E%C wЙ(v-g8]M XPЋ K{1;I?o8si/4Uv&Y~KOh a s78n "7:;F}>V"Tkrw(LGm|YD#vOA.ɲ>J z`xo8uNg\i<ץvBjMW~x%OafŻܴzEU]o%lGyd%f4d0鿎.#,D,5 Za&Xu,8P)bW`AB ~6ʳY}9Zfp';ϋ-ZG/FjL8޳^t|0]c(F+>r,0)26H 1G 2L𔥗Zk--X"3 aUGp-[49XkZ 6f} + wơU7q#buWYr3Aб2yJc^ZD+dRͳܯy$rlx ˬ55Nb]؆)۹ z$ZLEЊJ-0x/RbD%l(vTT^{_ +X5!o8Xp d"%GɏgOVc.Xe+EpJ| ^$]"Z +9%&zTB-+W B-hz=@Qs)?WeQXMTk-'efb~Bgdbsa9OGK1%|NgLX)z\l/`vcrhLWc2;ӵ&ەY3^EW^kWkwOdTj߳uL{\ql p;' ۫ݰ:ɒE9fR:*1:m/Ft W2{Jɉ?Yt]J( 71-'r4βf~9~׀Ҳ)=^)EyQ^ >,͆ˌp?&z.ZHxy@sIz4Ԋxp#I.N+Fǜ6z 4N-Fn?"5AKxZ)߶T-wS`!|i;1%6aFR ]UDLUϋ-鬒D +Ҍ^s(r6@%2z~Ca#]gzc F/hEh|C$JF`q]!r*X 2Xr$K )W-_=WP={+RU߁(,7,M6HEС%ChA\n Cmu 0 +B^ 2Pt<.؍8Z_j6Oq(޷~I`A@R?01ysZ~8_A6 bs1B SeƂfAIN"M7Hc<`cۇ' +BTft'ʬwz`D; K`$4"Fr,>Oq +_:TiP4Xmo(HP4·Lu@M!ҮԬa=[ gQz'ʯIkyzߊ~|-'ჂҞTw4{ߴIx-< ++[-|9~c&j@`wWB{_1lw IٺW$#CJ*jF~Ɇ^v&I06(5{Nr&/L(1X=^{ dU^#'1,;B`SͦFS>43 8=[_HO9;n=y"EjNLߍW2/RCJkj9~߸ܷJҋ Y a GI&J0DPEvbȖ;Pr,(ϋ#EoJDpI^e@0oAv@HA)p(pE'%F)5jކ~/h-KUf*5'1-4Sep]v_{˶5rˇ!Z$EfIAg̒ĮJ,2a-Wl+Ns+jU~8*@E8B@lK/K5ۉ? +1 4Jo%/zQ4EOJ +9LRC|j)Fcc4>>rV R_E &N)zj^"*EĩdD'R !8 +6\*q&|Yh+z_j0D3dۭeQTbtj~,CLqq]igZ^EXd+zTfh*Zc#J04^(z0_u"='C']XTT`c=Qul7 NڊՙI|gID;L1@z4O(}G\qj2Ī4ބ,DND|2QJ eLZ[ŶW[w(W^w֮[5\Gkl 4?,6(2NR R ef{nyT 6 T'zUe~JNBc/^o2/4棍V6D30Q2cJq5ɯ3äb|'5&cy +r,~Ӭ7)Xbe2$ڇE:UĹ9RkPoi}SVyS. ;)t$3E"0 .5tk=BCJѳk:hJqyIbU&JqvIPCAf:.}[-P;HcY Sd{Q۷< -H=,b1A'+,IXN˭&Q P,X^z$8n:ˏ;wyp!r 7<8? +-1RcX4\,8?PItzB)Jr{.M-5=)16ha8Os D\8>9jd8mW'$K@ߵ#ZlxkX Y@%ۃdVrnG-/A; V+Y;$gr>:Wi62iL Ʃ1}[FnjR QEʌ +M魯( /B 0EcVʼnu(Fy*P#֠E;Cơ'iH!*XiUQB߁3*6C*qXb551zTr7Km+A >iPjck!SY**na-MۇB !8*6[z[k? +[`sAgY_\w&Bp 1Pj'F/uk-kpIzO$qj#c"kуK E֛>9H}N89 J151\PqcWfG)rY1s*=k^Q%ƒpʃٺ4r\aPX1րgp"HҐDBΒ$ef +:BW5y%1 TX$İDA ЉSI5Cv6<=igr4-Ae d9a:93- -`DŽ "7j;bcIzw$0$FdƫZL.WkEkwgTz{GQtE5<&1:Bl>nX eyő=3R@RQ!Rg1JR^8:DP\lTb_  (X@NIr5 6|:B!xO]fêoܪA]_@>PE>l8:Nhb/\j-O +aՙ$aHSwu>0(ID_v(xo50^$Ŧ%WkOZ&YoD,We;NZψQ.z\i>gI.|_m"r8e Sי~!޵V ޕX96cDvn:Iם@ b$p, ~@E"T.ƨC1FbƉ"(aE+EK"3Vn2[\eЙb+#ŦEhbU$->y>!3<`8In>3@%z +s"ɧ JV'Kk?[[AzWц7=޺˲MQH6\֙#?Vd+(aKxz(R8 +4Do .>j>237Pْ1%=iZi&H@]+v0K/2OqS ?A$I%$8AOxJ$xu· w%x/! +/ԕ#T|N[r1"DHd/@u0#48>]z`|GAz5KhY*Th 9%ˁ~;B .ae}u!rq:ͮ7 Vz"iIJm V`(xq ++xBj!G+)P PR0Wb%p^ $xA4B̐򋔫ng(@ ք#t ^S/?q XvVd/Udh+8bSB @"F1t*rՑ2W UI56‡$'r +BQJfC>0J3;,cL;1.$788xߔ/1SnDq0p@o}}_hdP\Ov_IW"6 -Re,IoD|NkLH=hM0IRPVQAD2J@A!P !H+ +Amܦ(8Q.NMA)@YlF(e>{oF>b;isnl{ZzHw%"IܗJ^q/q+yOD䝄wEj%Iܗ|'q/q+Ľ:w"Kn%I|'q/VQ4Pu/L'mscf263a53-5a54-4d0e-9cc1-eed59a5eb84d823a4f3d-b075-4d2c-936a-a7da92fc7102-7994610807262l090085602371ll h -WQ48gQHX6G0 cQ iiy$57 za;U\ 9pqRneAƅCFAՊjp=D<f258128e-5ad4-400c-bbdc-44fa700(8da527d8-d31e-4545-a3ed-30d438535577392563! ф)%0>kFCRSp>wT G Ǯe`!0 */Ɛ: aHbZ sBڃ֫۩A?8 XON^\t{.6}\ 5feaecb2-fbd3-40a1-a238-5090d8dc0789aadf8c64-6f5c-4d44-8409-82b7e3b05.382679035305023549664382977284b857958f-ef1d-4d09-a096-5b8552afbbceeafcfe2a-9107-472b-ac76-37e020b2e782324188ml10SVGFil/ : -/XMLNode1 /Int (xmlnode-nodet2;attribute(-28 1D>Fq"1w-tBAO -yB4 ƭG-`փZF5 <K Q)® U¢IG>49Ԍ`ؽfF-;BQ?8uXWKF1;}bԃQ]XCÛ[Ӣ2I&L!zmϮL:6@g6 景3A7h{#/ %f2GÉ` `@Sf"y8C > @xMEɏ@"':$'^4 ȓڀ"-P3'a&,!N(8Hx d8F&*ɓ piiT(P, Cĵ!pecP"xx" -XaNt !aa<4KJD%jq&1Ha B -diM DҤG0.x 8P|R!@Hh82Q@"Z>y$'s՚}ާ͉Usrߜ4sl]cղm.M~IYVqMbcji+0vXDVn'nw4^TWzv+?+n.Ίi[֮{ʖqkXԭ[XuNvNvv74]uoW[5uWM~۔is&;|v7[_vƖ{;i빬ں'dm~I9lȻ[bR:k|-~3[l1Xb91ZkJ5[kWMuuo]kkkY )_c{nٷ9+{*՝-U+X/]]ٮi.eK左_1wNs=۟xU6ޒ%ƛ9~giUR, SiXU/rj)\[-ľ^S-ZꖓJ_v?-KfN'?MOܶۤ+c=+*}*v]uӷV,`k򭿶dfNzlljڦ:'֪%[ڥnoۨTJDE -  c0$&#aV$ -&Ā@A0 t C_~z]Vp>4>˜ -gC7L^kKm8`#YeUdm6|CL\r;(Tp5Rޭӛ0*"4!$!XC1J%Z7BrI_rY f&H>s"-e eoG G)MYb+Z=+$%[C%pB_Dz?PTKωzRMGNHvwWu/$))"1(d7\[}LwKP)O9cȪl2pY|] RUХ1uRET Q؍e4w6h!E{k:=i9MJIrΟ\XMrԦ9h~P-K{'LjfSux3%[8?\BrGffH+J=HHIDB J) :J(]/0>]v6O -vn7,6UY}xV(:m?'T1PL4 g $ddA $Gy骺'Ǽkbg -~ oi'7 , --qΧReI >cr5>`sU@`P!C:D;̒gIɡ%@ O^Vǵ\}t^o!CS@S(^!1(;9vA>MNn2" Ѻ2 ͽ0eJV,cy7UL<'8g)mav#цT^3ݝƭԳ7뭃c'PHx+fꆣ"HFGw)YX|HQ Cu{A h+~#8Y s\I%JQhI4\/ 47%otu3ER" rS+YS`",gZD4`ϧ8gR-sIlԋG?+fdUZ=6 @"c߈sZ2!пtNFz="+W"K#i_?G!0"p{*ֶ8LnQ]P<18_i/phR3 rH9ZN:Qo`izkXONq͙bN4?D5 -cR74Dac$yF,x`. e uc ?=#XNa5s$wc庑8Υr"g:5%U9mR>1+ :#&R &`F"$ -RUlh(u -ضPUp ZZCoYr>Ci"r8t=4L3*^Zޔ ^wz* 9lE߾CQ.|ď"qŮ)k=pz/p:~ĿplV뺘x*<ӑoVHe(8v; -me +^_ a"彛tX9^UbDϝnyyDStN\gl9cy Kt=F/a0Y\G *EM*OVw̶k-CL!]69E=[vQI."1J}Ng@~L\;@r-,kܫ%),}BN6 M]%(Ҁ: TxQ1-nN LbO*%ql*n -KYkDRFFNIo/ZKx!Ŗ0ov4u9>q'wEOxRQiPUu+1X}8}TCJB5Xbo)++`HPO8cY;z?s=`!|jJk*l,bhÑ#%|݁,z^3~8˟\;$zCb$M6:GH{(u/H2ڟ[s(Z6{ltjoQk$-$ʜcTWGNV8.v ?D4tLtQU$A2û }&^p}BK+ߞT5 7N%H6ldVbEca P3/ K9`j${P<ȫrd)F -8E<EŔhYx}F?^dQӧ+jU»'T_".K4JUdmj>+y ÆpAt<(Ʌ#-Fv]KM[o,lSY +-ݍ9/,#D\et/k9) xqUxWZa'f"w?\euݠ8G9g}Uه}9_g8)xyr0EͤLbWGvF[;dž$~}ftYh߅xb^p3 .ʸIyWA clap}Ǣ*t8NN!  ΠgOka&-65A cC:]V(S,h,?oD- KrӀqZS~YNhbVSLJ_=H1!s ',*HzUan%vnQ\"V1QNZE` -Z"[qqX[UIwBnU1sw5gQAHL_X!^9+zqG6 7[,v9O&I(Ȧc$)7M4?':MO bRϨX=0Jַx Rxj1dJN+1JaZ4r 0͠+U-˯Qg1wa_7;:-= &4Im0qϹh}!'un0#8"ڕ٢4EC~Ώ|a1%VO[4Xp*(VA7T;?_&N?1_.Rڥ%3K)۫D C -{LB9c?^R$ǟğ.S3c_Sߦ0tF6Ăpr.<уPK"}l|7pd(*\g C;P/o ٟY1O*_̷B,|KTӟꉾks3ME0):=(9/E4\.ELYy\rp05b5BhL颴ԛqDH#᥅ śE%%aPEܐeh4cwì~L83Bwn -[G#Z/4ш;)1Fkdo4WqQNJsFmiڬE]kwMC4yǣ)@@=/ؠPduO?M$nI~09jl"i,8~&6֫ӳaCȩQy9P˕f^t8p~#B"<A`aDx5 -dQ uĖUE&nӦcJvI'q_Z9}ZJkc%K&UL]*}H JS8EVgR?.LC$1-Ljh} mid' ~0[y4Vuେh!%4%Ll6,6d}*̙ hn^DsiYf iTuG+ҿH)OfyQ -t*o$ -4{Їs07/v+J-/cn1~6!.lw#)bm( {LwD$GU)UXtvaEQn1챮Ut+Zg^PsUtJLL5*O,+7b!cF3m(GMPWF5oh"a'Q,o1(/' E/֤ 8;'UVE 0˔VmHX*rB:|ǽG3Eg"n3BXb}Vk\,Mh@a6x?qVJ72in-G6xNJ)ys bECÏab%ǖ2f~#lе@*臺t-%cBvy˖UAbT6Ä" I z]T\ňFu љKnСFA5Ω7tAEH&}=zco{! l -}7skϢ/ٓbdE2Z7nc[F "ٱel=jKY:Ȳ=$7 26[[BwZ冝S*oJkY&Jw^!;\=oRֲlS*~lNl(b~׏Rzs(neOCn7F˴G\?lp7>E6)ua7+pwe{ Fp -_:lP6DzU{CՖ+ٷg +;^X!vL3PL!qbXt~C46kϗ{ѵdƥ`?,2ga$[>(3gO6g~y=0 9F\֭cp/R*9Je1lNca-vzٙ>\H|d.Fj? *)k-asdon]sU+tK\nioͅtl̺9ǔ5cord_P#l#䧚jfT6K)|?M_ø_~wkJssua|0BJF^1~!mG76l+U.7 J| #|=}B_)_>Fno;vt 9rgȐ2B(#1l5)]s_mmb˶~˕g{Z| >ݷokr9?`7+dȱ];ccl9J~י{23쐛A{{1lIwo+Ydݎ=zte毻+۶͘wor)l )7e+#Kbno_R?gg -fgJes.{csCaCJ5:t >itSve>ϲ|]Pv>Vwu0v?PB^٤3ػח?O>{RHϤsCw9l{KcvR*g -R컏l]Gaǰw{);篿4J~R3L|_|ŗo{-)r{T.P9n-\~zdw;!s>ee82Ǝ;k,at{ e*?(c1x"l/. /pu6%UQ DUI"K(;L #d~~ݻ _޿^:hϽskOBw^Z}cbȾ ^suJO9疁4?[s̹[c'AfҾ+JB~G5nsNjC2Gn[q:kKs۽ۯ5|zw}~_{ﹿ}y>cK^x~zߓ߾w3??33s3;3333;3333?;~~gg톚6K~ cvwG^R,a^>R_Y|$_r{7谛f9:!L߷\wݛ㋱cZGݱW"?9J,Y:2G'a'_LJvw͛;COK=ݼ ֐×$|0:^f#|a3uBaknȐt/Cݬ=6{d0]7;J:~f<2l7'PEUp( 9 -h +"8L :Oiʃ:ݰ@cQЦEM$=󮑉)UHMdi59G%UաL j2RFHiJɡròe] ҫù:*7,m&H4᨜"ᘩtU|X{sL@),u!C9F߾#HaAPGq:IaA[ -h\*pq -PeP*E}@:#1kJf8$z4s\p옯Dƭ -rIV3Qr=%2ݣV5CT5po*L%AVÁ* 'iP&գyJ Ǵ:QUY8J mwhs:@2D2$ -x`;DִL'FĽJ 'U皨v?)X՜*.e t󚚩SMhrTLsa;rB9]{p"asiJȅph`T"̦3iXDCú^Je ʤ#śch\lȈr" >8,"2TUea,, 8)ha8@1ƒ*y *$(VC -.01l@lx*ሐL 1@@.DA\Lz٤6\eCUTBMLQG \O ˞Le蚦fcn&c6XDE*c_t=Da\t@:z8>&ȢK?HUJ؏Eĥ|Bkjbw)1Ox6 A/82xB&'VJ*Mu~܈(_yetc+4(Ue"o *3ܚT.jVl147 -D2zQx%_2?A<glw40_:aPK-[UapUD`ͭf!M\D-EoT>qQA \X{嶔b\!y65㔿S^nya(,p])Z ~9Фz5 8Ip%3n D4_lfP62sTɝ4AaYCo^D2Ȗ'ZʑWpN3[YBbl g] ](1pU8EP׫<'3*b ϑԙ|* plMwn@*Q媤QM>miJ+Psl6윌Z_2=`G)$%rp <1Ӊ?di ^ WEn4Ό/Ce@d @#6W&rE6r8RSL2Q3w>!*M7 Qd"%EyF -@,7 gs˞Eˢ$lJQZWݬlhH1*-B9 śld^h&h%$9ݧTU1=Ah= ӧ|r)ͱlo.&ArMDPX׆dBXK->0Z]I`z5k[?MJ&(Иa"~ e8|/ϗyN8ZW:.FKT,GqyS`$wWq!l+a -jq aop>vmpfEM>GhJIO6h?J ͊ښ0.J}Z D n6 t Dmŗ؜'SPkx=$X}-+a L?ej]PABdlzo-$PFT5co%Z9jERu#%PDyIsZ8 _ۢϓm"X9KTUz"{Oao(ntΆ!y1x)}Ϸc 0tƮ -ݞQxYtz>S0|--r0?n?H+ -eBF+zj -*dIqpAEFJ\5NϘRAh - (=TTܩ xxGZ7GYF_u&AߣM Hs+&=hiÉ Q.<ҐVZt:P`me UeGWR ʂb`7lQq:,N0W/>t6 Ax'h~1Bg,ؽ.xIʥG5ϘE̦nP_ggU,ӋəP[-C=瀅b/D Հ[GNWkB)Xu C/.ƙV 5ccչ%NRu&*iٺ#?RГ`*:c6XD-pEΔ}:Gk%L7 -tS9Ybc|髯;LU˫$NFަ;:Rg%}C@~0Wxgk~;Yx<ˏ&%Aa/ !צ0f0{h+#v0|tyD#X(Πl i1NyL*]Y}<0dmȨb@jp%D }}b7sygmIT%m4*SjeM}ѼHj9_sBo!sPHn'gIhYhcV{$TOrZ=F/]Xt]FT>޹&cE?Kxؐ= ]Y,.5ݹlR0H Dl8NC;g/l3`ʫ3iek6RMj`*G6 &c%\$GX`~ F`T>* LyMrsç]ԓGkRC%%6K1٫%>Tް3JtVy _^O$]q;l[IAW g$^H-+Y|S d`eQY!AX@Ww { D.@PeFV7~:LLQaoxvR$wg Ѐ.]-8M_:o>4ʯxC1 .ixifY j xi/ۯ)O\Ո_rHgfD=  dDU:TT_@4m>d$'i$XR,`?0aޱTKT !Y0n$#Z >T*]vL(YnV[jTNrؘ+h,UY[|d6Ӻ3ȥR7vzhM*2 -S+E 9oҲ'5!尽3e.Ubp"P6;*IG3w9?wQ^<6atabCbzd{)sN` f0A9buǸRSI"k^=gm"pz9!o8Mm$K倀. p='ۃ@qMNydb.DЋ4I"  ra.]eZ6sw&OҲpΗGQP&5f1Kn%>MpPF)H|2W˨ؒ/Ld#F+r&˘&jq"jMŻ.a|f jLѓzP YD8 -gz&'4fCR75DZ_ -n׷^btKQHE)ߛvU>Ea3R#k/ܥ^5eĖB\ptپ HX~ٞǪ! Isa0Pp{OoVY*${3K{71Ϛ1/{H!)6CV2h7I-4AFHo'K^ j}4tB(7ȴ?(O')cʆzT@- -gǞS,/wڇAi? X1MZeiUWצ:]E],ҊIVzE \_ LVR'tj~ Q@yI'ײ?+f`2E#V]EA<αt+ڴrNev@\|@ԹS,D@1JPo)tag1E9㖋a밧_S~ hC8y^ݗbv3AayW}WdR7s+$U88I#QgI)cO^NYlC4c}|⇟IW['}R2IɋFI`1᠀% SI*pW!0F-p Z#~"/jۀ^=g5R cS .^آU<ɫR} /@%?UFhPh{pb~+(|+csPFw5™?H"j4T`ho`5`CZ!jߒ5MTsg!2y 6?*0 -@D`5䵊inrtZ:2 u(*"r 4gWU-@VƑtL] m,z0]xYHp ty;! $]"7(.C#ᥑHb[M.nZuBq\㒃!!.{;ŐΪb1#?x=jaMn]A- 6l^mz9 u+e^AUm}G%FtA D)9oXM4m덀nJAH:^>IԨSaz^%FLC8S8 Xe -R#E4x8p͂RB|B3 -^ nb -Y8z"g`ppז|ItOxig$"i *yVdC`dcơ  L h'3Y"k:25n^BCRWUB ()B6ףƎcT'x* ׫=o,fJ#BwOUdPjE9U4\ p|^lXD[vƈwxm -E/  )ۍIF1;lQ)"`0.ĺXqg?{Mh+pԛ%V& GqtnDИ6zqnfd#`#r$E9W W4ӻr)pABo~,M Os8kI tߜʣ.ıli:X^=F@ AŠ9,C&Y"q i? m8_4 <1 *OgVn1@v( -׭O!™"i3ЯL6:%qBC51qQkub-\ <] Hh}5 p@Dx=Ktg_,IDZ4=EY 03#\C879$ޅ^ЈxHȃ!Bfv~a^fBFVlv@$t6(RF T;J+熢Ԉւ 0q.ee~h'IR憅.IP5|isHAspfiA)8ņ#O.EA76渘1q鼦QlZi,$㘲&q\AVrj}?;$Pek ?n7 .1[7RfgIf9 LǻoJo59FmצZ<Ęr4zg!$)qDg)*;;V! v21] s297p` *u ZMXF[P0~-s}xđQs>\}jM^+(_iq$jq6٬.95nk [ox|BW_2IYX. CV#)u sxQ|#n6RdOl@huJ/(W*8@S] F|͏ fIu`:6Z{?t k+WUP`=<ڌ*jP5}Y2#n5@ʽ=<};{3<1 -XF{d7\wE#_jwn &pbح_o))37(>[B@L*z%;M'K0L`}}bڝZ sLIVQFԯ7rk"k$'Mݴ`Eva" -"\ldy6kt+9JLY!S8H[x6V\ZgSahhladF x{m'KbP -VH]ĦDe+Qe߄cKXAҎ`YܟXVQw9cfЏb=  '*(YT '╃-\$%)*R\\km? DgCV@m&pC䥰m!3*y,d᫭;f(&Y7'OA֚By*7 b@jX-&>F1f*AߎWo=P;X9CWǵaCJwqJvxq$݈ c͖b!,cBuzwM% 'yIVf]DWsy˚;: LZ?UzH Lׅ4ԤК=^?M[E>Fntu\T -!vgͭZ.B)d>X߅l1 [n_xCPCVl*T<{G羘 -PIkӼȺVOg}F!54, !t=S)|ӝ7RYfB1۴xP_(d0Fen =tj&UOF]71-k^OFGR_a\z0{AB -`x4s>Co.kql-Dd mJ!k@2`J -vX*A/q $dX7"B.^a@Yn9 t\tӴL\ZgBE`j%C]z>AGsy2]iUwkQrt%ŝc~K<2'ӹKaЉAx5tf hU@[=U=lιjNG צ[k9 1ڂ -l"bx*KbS3k-AsZEzXCA _>o/^"~;\Dۆ[_pBkhr)_-&@?8JED  -^^*bl u붋JnAZ;=^@5 qCKvAk,ǜ/ugY}5S56}As?#wyazP:e%s ܶ7CNQ ǽ?Z/ \_@WEcB[ݪ*Ӥ_1Ts%$lp$8ڈtFy)R1%-f~xIg; o}w#Aq! ۂFvN#*5jD@v,º8$mJZf?-Cxr}(a.o@cP״׵0McOqBkdi)֎s&FЅP3N}-`27$ݳ:߸HNKx1GB&Ԃ6gćVROKv3r; }z˜WI)wRφ -3ݩv$#aCԜM9SW-d_~7H#ؐ[$RZla(xw Gtnd$¸x't2 l7$Z$Q4š-cmO *Zb6Ʊ JjߌH¿/U^q A%zw1+<>PX=6]C16-gjpDZ}BpDۊF)>.Jڶ^wF [8 䞅 ~vV=۷_xC "N|2Xz pkߖQY|s{){H `ySgJgO!XPt۫zetMD&Ok}U.aCyH- x0Iq\xd -grf)nxqщZ:akiUǜ2FΑ38c6dvp&dZ;(|-g$-fX!;~б5\mYDA-MU4x. կY/j0_eMGdZ":-IeWLEax\ȍ[k^F2kNϑ\yyJ%t>lmDOfɜY b~bɲ:rzRg샃jG۵hb?KD?lDI\|Ɠ<˘vU/ 1'X?i"z?>Ȗ`ijΣaef!yh}!9X!-S(p^u}k:X^jvqt~ Yk&K yBЗmڅy j 5|xN%*xv6uVdk.\4?`L]p^(9(OXSbK'@y^X(yvV]ăз@m[qYc_A^Vx奸h[O{$K7UIrCyD" N^!0+g -@hr|ªvqHZyƆM֐VfX -S(L~IjhL4qVc@D>7G/2rr4T"I%;1qmSP ܾ?ԑ@BSd!{HQ 31:j`U6[D'j,KZkifF6=718pU\,5k&!cPX33+x'Z](>\.*8H AGTXAH%KH3mR]6X"&rY4{'yuR1fi);,i~OPUC52Ȩal[M<b?/}T[ΝmY̘R_kv<-DD}﵃AUɇj|K߄*c*d'JcVϖ;DN^Xo& m}x!z=j,S+(YyCc4,,)5rLØPBM~0r:j%0$A^iTcXx*K%ݯ=LC"GPS鴟Y]x -`U -:;Js(׮Iaޜz ;'bAӫnLuGI)joƨm@H:1@ĝF,JOu\`Gޫ7:ж{ E%#2xc _gͥ@*c(#uM$D0iQw$OK~nwxPC1Yg"]Z  ٠d$LT~\]ovo'e"rFN0,AFVYʊwgDߦCiZGf-+m mư/R\[Uɕ? n&˪65@}'=un"R|mB`D\FScK ZFൂ4v/XG$MA@/JZUi@}XVc[jL贤Ӵ(HjIRKAifKrUe;fpm0+5bKv ~yt.'k$@ї1\@s2aٷ9tՈtVrV -GWt/c|3$GP$S9P(C.@d*RC:q/n5k@"cE ?Di[|.;S?S;0J(䋯65(P !g{0fonC2H٣nSɟp[g[$dO%.|%eR-M*2L@'-gNeZ&Ap*v}Y/ X]=#詴b7 f/(QɾgR1NC/=GW۰\g4`kq@dB}͸-" -endstream endobj 34 0 obj <>stream -jLW#by`:Z6yM9 -:SW\KJC(w\ln^)GG 1eǶe"y6np Xa2`Ҳs&1BL6*Qt9ە~Kj̅g<-bioZtrKGsԭGLv*m>p\Z3h^OJQ$l(6`7HD'Os!O/ y{)HsB^ PW-l+f a ˊB 5FH%>Lk;<|4T (d>a,рIM0R\d|t`ת_-gGn쮬{X>=x_v]ӗkneOJ+?f8=Y*r8nhѦ#c燌eonZvxZ`$;mYv[, ԰SQoyܖ!̶eo@KpJ7dڭ -K"cCnܸ(unFKZ.uE O<0,C1TK@Rǁ -en%_ #^hX|g,gWsG=6x`0M;D!twG׶:( 6 -^ xpzͼq ֍iF *!2\8K^RaEmeA Df%:'`ʜus FU` --ڥt}I ra`@r80\Eh]I%%uf Đ*wijJ\ΦN QoMVr*JjV.[i_8Ž(5mlVJ轢HBGcNqxhl )a~Bԕ # 3߂]an.df=#%ДĎ݌p #G!BH8:$r򜹓2 LGiW݁_28y#G0ON7,NG C3<S~1n9d)qd9,̮ؐ!)+ rOqV$Oŏ9E&l -+ssq2N9[BEEb8UmRK..>Ag3TjgZ:5vcՕHY>38us -оˇDW [i'"E!2TvGq+lm;J.S_"4c3懜ex%a0; ;/C=S!uš+{d4ֈcL  m9ᔀBdkDna)Ńp ڥ 'A Nֈccrk%(΄^886ʘ(:[JMlU9g#^ҹ.Z/_^$ iUߪVPSmy,POX8_B6@| -6q*n㛵̓*lB;Rj盲lw WtRmb;>0T'LYZw-*n@&UZZ͖"fF[~7ײWx"?h q,| ;WD//3mg}.`^lF ?SP C QoY*GEjdl@f 4MiؽqMAJ;_TnnZ ER!>r3ىv:HDP{2.Gu~8{ډ܈Vcܼe$tӊFol˭?zJQhfãD ïU$6#C:PyQ[Qe{Z`=]M'iu5>-FA"ޫ/7x @/㷸(dZdùrϕp~v v|Q%pĨ-y? H#Hr_`Ӷjz6XsfW%UQ8TQOwNS|-5D޸wa eLf)Z tK` y؆p>}/^bC Q S,Xy;5 K&ik< -9%ʙ& *MlTޣpv,g2ܔpdC6HAntic -.)IN hexuXf쳞7sudo.]trz3] \;*FjUč%InC֏ELynX1/ѐfBFFZ%|k5Lm8-#ВL~eOœ2k٠^TiO]gS1vɜi&1Zln6Y3J'a(!7@-BH2vrmƢKEZ,avx"[J8ʸ#<,AaIlszt) غ1TZ,*qœ:I-x\ i񫃤RW`Ks1n&QY7+HwԪz!}G9{- ~B*q2;ZCq<.>4 -33`!SIΎ]?C'lp)mpohѼldՀi! mn4KMav@+(hi0vKvD^a2ګ'n6 -?y׶2uSTܴSz֒*n!g; bhn^rW˪v#߬*Aj HiH)aԪQcN?&jƯA%W)XZڧf{5U _;э3L0 ZK<[S YGvX VAS'3ԑ4fhN <"0 -l 8u0b]Q;SNgzAi>S -UzBdE/Ǔ{Flh3O#E!SD+QIZ1*`C[h1,~yu؄jz?Ui2,S"Z:!ՎImx Ms[RjMN;-Håaq K4k۝ !)%6Pã)y0.C<5pjBb:<}1yPpGER' }qԥ -!258p>%0> 9=EZˍ0pHNK{ -qG0SHoJU<;B6ʼ,`xi|fez2bkdBL+ɭ{<k&H1Nm|j -@'na:'X,7vswwD9.]:5\d*jJd\4Vp -|ڏ>,nlA;-GpT/M Gv,7ԆӝJ9-?JhI6爸"Oޝ^e$'wNۯkפ\Z/N^|Hx@λgg:Z.o45lL!%}5FeHJ\.(& taÆ#ht$ԞeZqB%P>(0"X8?S={ JODQﶚȴ@WXX\=fpU%;fMR7&DV=%$QHbz4CF5""8-ze9bsu7c87wG ^sPx Y% -z' ׮YA$g}lPhWRÍ~%-nP0);UoxxI\Fr [,UK) oA)qժ -.̿>S sɮg7ezP & 9asY.ICGGՒ`!]Mm -P$b`J>.mzsNpvM:,VF }-0{"TIc@bip!Ҙ\N{2)Zs5gE?H X$^O%- z ;p] D^Ւi9ЋuD(s5n q~.MZbin/2ZNE#ؤd^8*^`H$WY:(ɆYҠT%〄RϜ7t@j\2n\U^kr\6I9붗z20q~&ͻ/}xW&L4CvAcn=ccm&EFƌnY6'ss#+(p<)%h!-"]@p`yA/EʥmK| hi -M ) -B o/."ݙ\WHgStb]5֍zDԳmuK|Uk'Ñ&Ovi+ -PrI00x3#c$q(%NK@l&VGb R53]gȸBF84ĔB  jx e-+U7-Uq(y;&8_muo[U]$hȈH(PZ_I'i Hg RCdȀ?վAPUN494TcPAjǿڿ" a/wSvfoiRhor4X#,^.J zV Ge :Aٟ>â [:A!QǠ6^T,_>qNU @k~oՊ8'٪kׇ0QЌ;…'1pQ$vⲹ" UJ@ނÁǧ0~wƬŘ 3 Du*pAŚ^]Jya v [" H L÷8\xB\-@f/EmI>R,5 -LUl_h(]=E͉~PJjk+@Kh CB?iD6:)2}W$H -YIkzR\|6uDRgBMc:# eT-wldp]%2]D<> ד [2y$+b눪~eS)O ۚyd g 7p%|*X&"fnމБҋܖ #Ҭ-܅%t\,% GG? rհ,2 EWEb)p#PMvywb\rwDU>5F-? Mdֱ R=!R@Pn<׽\uîaRPax0h 2sUㄪ6H /Kف8R8O -ZEI0ڴ@c8>B%Hn:Ԙ%Ir8sόNX&qFysEjݲo2~oX6#>yyYw6&z؅v(+RclNyjN 5 4 =gzĂ~%:9'=qcLVhQ Mљ((r|p +ȑ8NtXItKMS.G3{C:^$Nd &MVoyyT0cdPZ FHhb4 1qGRϟL߈{^gc2߮l +sY/W,'4Khoȥ]!NYk(X4jSF9b -ěn&c*m T8;U7\Ș]U^8e2GxPX#< }sA]f/zv!elۻ8{ T̿ C -Ȯh1Ў O\ *)$^Iʊ@w8|'B@r@ā3U/ lHҐp@}w1 M^ npcK!!AY2UQ8&V"tw|aAUAz^) b&wnK[h{YU)t2mFhw`ԥ`zn)B8k`JP)>PJ2C|x |rhKcZlF#)%:ꩠ\3%ꛝPBDk NF+q܁Ncl&b %L8Y#1TỦD 0S(Q/ yt3 itH?a8$B\UjQ4f3f+o4cPRy -L{ ,{P$K;'ykoi Iau\WGbl^K -IFVdV\*=hk~{+UɃqӒqq6`s``Y#f&*P0mTP1I{aiCh@ˣr34k_Cʸ8JoKn]ȫR q G'1!xHݥ]JSRb̈>E3PB -!C2\G[aTx=Fm[zQ>&+TlGA8: eY Х6xO,D;@ňL+q5(k5DDbV# -0) F=zx,Mթ4M0h2:V awڰ912S_>`IƦL/}{h.aWuCJy) ! ˔O6E(Gqvpi@(7S4o8BP7S:O:8ȗtG[Xz=xbE#*\ۥ ƳŦ~ol;}\cэG++[)ceצW?AkNKBh6}i+ Q.­D=y8XLJAu*aP[ƴ}֝!T"2&qUvr2_kve]x/$1WүG[-E²bшI!MuyM>E5hls(m {eo?V,4\;a*x+JnXex t  -͖>G:ɅyyvƲ95vBE7Ls*Jva5iSghG4>:AJ*/bU:OE/A98BqƊfzwpeWĶIs8 6b`_(a0o9:dY]! P}13%)8`` Z$<|7$'_Ff9L\Q?Qv7h;;㵬$ -EћNXhȲWP3r$S9Md&64=C`̈́w*S`/2X:DMv|fLfbww2hrˬw:6skwl)8D Rք4 :E/82U96pPq!* =CYo؜K8z6ͺus1;u׳Ԏ /LJ2uR dlVsٝ$y;6gKgd]*$\C&/%"0:t*zI.n87S%jVD{%[86nq -TI~^#xK'Y>uυ3R݅NFgF9.JW=?iJxKN?RUs={Vd"x5럒 -QNLq0d&H{@"DɧQrdh -ͣARtn(|Ef~ -:uo~ߒԓ(]cv}Kڽ~el*ևɰYlhYRK!#&f~a%wR( -Y*S%0uɣ_HO"W{uquLNiCrPfا\a@0 pr|th -aFŏY=/ b!B$clF:qV^6es$.fuf.E䑟0S9: - I_!'+'ɒ C+tj㝪) ,>LJ4(Uy346 JP3Gr8F[ٟ:9NcLyL Cb E#.{fIʤi\ ޯ=)6l|jGЙT- WJCbk U.(07)XS)h."2vԎW 5*8r?JOW )χ.ܠcܨԀ$oQv,WԞ~$} *̙H+ ITIR| RǟeUjA2aׅ5J:G!t*~(3N-N$.yl9FhuhTN u%gonɁEg쉌xԲb|z_ H m -J£[tl &0P:T wR&;^|`Ҕu7lܹp-g(Xd:e71lr/^qȼ ) {^"o߯ٯi~ʀqPvcgX<жPlvUzuC6y#fKKe!GtNɥZscn42 {EOeS;@3I\SMz{o:§aC5wE%-%GB>|?H[)B5\ DrS4tѶ~důeaBV}&wp8t29NfhĠHD-jU܌;?<8;[FF|XUfSb95*M"K%d"F=+!:qcVׂKtG+-k }%]ŜBŵjC;:xty"]镲1; "nܲ!B+,E wr*=1L^gMr=~$&Ct@3Ž,>7w/+'A2ْ -dO>SŠRK $)^|[0?/Y^%xplCt'ns!#,𱀤 YeǏ> e\ -—"qƿj_;{GxTѱxKhC"- EQ=vՂaREnbݞ t/{ o4HC|pɰGW@!!՟W=!C艒\:P~n+Ebt!Ѫоxya p͵Q>"!f`:f* r2:@a틢'333e[[QZQ@L"A"Fd̫ $\{ LL - N@<$L@)m;DB BS&QrXhjr*itK)|ZӔGwBivKؽѡD.vX v ۋPځ e7i0.,&MnyHGq\C⡐rCT$%H;Z^yhyy-/q؀ (ʬ ȫu0-߫H5}/҂(Po62i#62E##*biV< Y(^J媲Y:Tp;܍lm}q7 K6)2Bwynd0MCi4KCBG%ff ¹pN6edSZ{$boVLWK@J"`iT-tn(WE,Yw@xg-g-]7*"Jd+!(V գ [Ŀl%[,HQ*ar{پW -:R5 -*h#ڈ6݇\"Rڈ62Kpfp5U] p5jB}L4@qY-$uY- J媲2d}̒=I "I^KW,͵ŽK!fр,FM7q}J%&9IMÖl%4R(|z4$+OZq@w@ЊTʐphe! W\ Xks!h4|VX BfJLGeNx4ToHqW̄+!3` svL6=bmiTZHb8RĿ*`$F2K yke8RD".3Y̩z"r(M 1~\[H<FaE: F35aK]1r5crzY?"YVqdAh 1a <US%f/?I yj܍E꬗DVf,|LPr1:ƥ lȊcȩ2Kx^S D&ŸP0|\UR  -QIMc-Yg/kKgRr -@Sml4@ BEn7 A@^BL*H2+DĢ*PTaHi6%+k@ @ *m7DsFzRܢRsKr),[&P*ZJ4 ՛"%YM]ZZ!I# $d 8 L6-j&4q5ĕwP q)hS rR<)BmBbLQ%#;S0L<,R!LkNڲk_m#]ÑucS0Wt.Ӂ"]¸YAq2n)M.MλŠp.Cy,*!KZ! p(':€8%6:Rʡj'DŽ\$r^(cO -9+ - XˈKp"Z9⦬AV.7ZM!RD@ < \!3`+_8x1 fHd}Vۥ!A\\V/c|J r f`<$184PꀘHr;%Y# cEʳќL /9 -TլjB@PMFm1pG%ھ%p54P*W%F8Y_1#mK\X{,&s:*C'U <~qq-Rr7u:8mFV%; ,vX v;L08 o9Vi){Q-.vBY_,W˸ C>[E2n%"0m,յ(r #Ua,h^6w-m =![$)nKU6 }*@,JGuJ%%*bgCѴN FhR.5m1C41:QIyLu~]d@9HpA y-ʃTm}L"JM* AKoDIoHp9N:58S -L TXljj}Z5jE20cTVB*TvrYO)S'F#'H V @v ڣT=:hLC `6;Dm$'9Q|HLj cqd,5R2dΈ; - -fZW ȫyU] -P6 I< 'ʉJ>_#H5R 0oOpwf` fAn:E*WE\)kNNV21戈$SspI:D6/m^q^r7 %XjӐ80 ,5Y͸JMĝAX=w)liv>&8YKc|J1.}Eq)i ˔t!D"ᓛ -D]-882TZ&0  )Io]4SL%[( xXjAYXXcŲ9'er$\H iK2^rJFv2x'3Lc1gojHx( ǢЊ*]7]ʂWBJ|_iBFQc4%[j$F2-x=#PA}/5{HmO$"8I:H85tHrqdm}F  nX_\Xjq.Ӓ!IpŸ^uP -sBR bNq1'LA SHKPH( Bybܭ$\VNԀm@}ܛKNk5àrP.l 5b:t%:3`x2ŝ-烐Lo)`HOhPq|36̠;E1Ie< qJ#3e 8VU86&o~=BqZl]VluU#YqVdYM/iEŠM+ -V*R8%xādLA|)C*%^C!†VȂYo M1_EGCVC\'d5&(:j̓$1O_PHMi':5[ء-TB%J(X%hs+ -7[1kZje}]) -EByJiF*cLaEHh"bh V4l@K8̀T",2R!u4"Y<\DQҧs0Ӥ@Tm%; N6:,ս)<I#alzkj3KX0a e ,Aw2NES0a(Q ÒHnB=2'\td bcBDr >e `$lpd^8r2U0oK@<9(`d:,`x Zz IOW^ 3"@.19L3h ?b6,Њ]dR+lKOpwGؕ@3+08ϥ@MLF"x\@rMQsੱMp)O*xgJl" HLj1̪R%%cn,qoWek'lexHtX'Un)S{!l&9-. -ŶI8떡f}~%%(r%;#cdċA.Af!Nrr :8I!ZJK"zՁ}%;XEHqbk@^ og"7>HEi)`c2Z67TFJgx 2K0r **ʡ`T209H%)KTwGqSH<~TJ*: l-@*"&\gF$bd*vE, Ջ<̈́GQLTΚV$ըMal8JJYrCbr@q6)bDD\T -2fy9N.~y$PH.!RYS4ٱ!kN|2qlUOKf'G`4D{A.b[jnw3eGpRz)M +5BςL0LOI.,5YѦ"k:QV3Ww@4l&[d*d阪E f$hRp$ hY/ïV'˛ IkF̳ޡ2d:. -n$ۨ $FT2Ѫ7̓b.7n7Zv̼VQN<IY 1vÅ0Y ,VDYX\6r8 '%X -Dyw@T`iFåBkAUsT.҅ -T^3ޑ͵/mͻc3v{1wvݒ.lwj-轻v]oދ;b@uLuS}0wMp3wko-U@ŀci2 ƢTUA( -3M>\Z3 Ё@T*@T w@XuȬ}w۵Νx˰Ɨfb+ދׯ_-X9{]k_۹v~d}1V>}s-m[96s-\mzwƘ[kumk{ڟk n~ޕxԗg^{Z\9o{y:~~jk}}ߊUU׷:zys-ƙc8gsj7-ǖfw=㜭`uo[\ۺxܹ:k>.oǛg3wΚ[?{߽!m}םoTgoyX[nyyo5_cl1_Ι︻[[ָsn;׿{{=Zw\k7~oVXzkc/jG@X~_? ,sW{7ǛΗu{ڍ`8? dys^k5~@p-k#ck|y֏w\{?:g}w7]V[ֻx/|}+~-޸qΫ83W׻Ƽg{um1-m^ڷ]cn}9ۊuε[{߮^~ƿWkϯw{֎smGŀwvzy>~;}@Xxz|??]g1 c{yc}`k_/׻[{ן3yn{@l[|ww@:(ʽnT p`T$u<(8pkZ:T\V:Ff lO* kB$@@H$4 IC0$ r(FaAACW Yzf^%bHVW&)L\.0~"{:RSJH<Ld}f%Opؙ*Nucif#\dUeAoa(ڑs C>t"on_Gs jW"(5M~ЅktTKWtRNjâY`M] (i)*,:eԑT @ -윚X -w^Wc 6QPi"4YC": +B1ec!M^ި}f-jFBr >n@x¤baM?XJ{H)ƾH3W43_%Z?>|nm57gqr7 V4]W0rbnNdkai,r{TA-ޘmA%F2En{$q<'վ=!NW,ӳU E4h@9+&T5g5 O7Aw?;,A-DB7a -VK} -f>TrjjZg iM:&җM;闭m'1R-qӃaLFAHƄ9.jsq C -f=$IC]P͚ACa %;HʦVEO> -򩤕&BxհmǭNq X+Q={8=Y^r*Ny38A1 r[XA῿]*d~v QbIvo -P$7~/eF n6@%2krJjK1s? c-M|; aKBXi%s]+dUΠ vAMj]̕%뻴Qvaq)|b5el7؋CWϫmN.8>=}j3REK4BlNw֖M%ҋ` + jg5>*YGTy*K#(ŌaZ(bhW}>]!ZP` .[/t X5ӞSx -Z5E`Qtp?]鶣8m&{IKm&$·ݖ+9:>h6e_AS\PsSɄ?]>O{[J8dw /Z(zԙ< Z o%8bior;4=3k\kΊLMGOWpv{ J `ʲ5S4`2 ?aEڢ]'FuʊuJ"j.DïB TAImiNj^ti`:j9J6OޞmZ:BPIG}Tr-`Ac*@WX 2.7,]ޙS?%Z~m.^lzMFP{c5|yaUzM}#"eea#C8mjarAu>y4̦jt̲}Sf%ϰĶach5 rq*8]"WǰS݊c\E^Sft|6_*l'G |%]xa9IY uո^FiA+-P·COTC|&.A W:%T.{YgQN#4x*hIk lЦ(D+hRmȠfOs.6Q{|)c%놝B[igFu`|ҋ9l#U CROS[)0q?/5xg%[ T3\WAZ97#OkȀ4_. DrN2zR ,u'-B9dVgLp\K̨z mieG_'K^nΖ -瑜7/]̲P|L C3v0#~;Q ',|zWUS^ =B@Ȯ<ʵ46sڟ!*"S2OSɾ(Xa%_ڰly.>GבW!ijߗ֯:[фb" Ly6+Gױ> R@gxܙ'j,sÉnas*x,c:~-JIN8BL@w>Ц)ec"e#bgY ֪ȮQ ͜3:,MduK`鄊SNMv]5v1_$+ \*ڹVs_>3=ּy3Wlt ?q29 -Q!Z"&ܘzF>7}k_~r%{{c刁X u14^TAmAAg*ƼH~7@V!uɈɢֵlB3Mt9=Ldu,V2@-* Os&ˎũw晷(s"nfF-Ԣ$sYY;/~ qoPﲜfZ~ \k,jRIGOLp]3` ]fnc585}9,ǣ0|P)Ӭ(}DJ"=ڟu`'3-X7K`¬z-ϬCшhx,q</3Q*tyIVƞPňd><1^ `}mҾ?g6|cFqs}raH;Io\)[8o }kz+/]iDeHp}/? p }EtA 1';pfjk{!32mp6}>n:]^eSžG,tX,/$ 88N~EyU;Q5]N]ndU?`φvdT"t@nuyyf ]9lU+-p->ڡXi12 bw߬ dm]˽p0_؏-"!`aģ!sg랙 %7}Ft7>:~3P<#oo7&<|,>U&_2_`'7Y)bڹ~T|QC D&le?@_ -#&Z ܇ߐ2@!ڀBANP:1B|݈K8jcD| nSU.cPPs]}kW/!O?GnM4h:( -HYW8ao?{B0",駧yr8>PpI6y՟f5d&pW"^@q8 3c Τ<_GyJj+i -̥-8xZs> G w rz -? -AY胄?nDpYe']Ԫ(KS$]{N=E'u-K^2Q ዄw'#ZEoVA?.V'CeK~x""I}U"tS2)" k7&B79r-`c@D)Fkx6vB)bqLT*CNCHY['h~;' ->ޢ(Ok'c_I8_ϯTb"f9A_|T,!p0EOk-ۺ@H>mlv۷~S;۔)J (/-yIb]߫٨_s$CڷU*ʳg{ AV?<0b>&EפtŪpWrQ*5pݕ#l}1JXIw{fNjQbn)/vDy1ҎcALc&x$6LY!̾1E}0}*vPj:ƤDrO o,x- s7!'ͤvོH* XPYtׅ?%EsK2*$dT~U]ς >|%p&{Zh}>Ao+bI]̢]"%.' XFlk >x,v)|x~0; z!F G|r0dSiA8ݣd#^LVB|ʽR5FI:|Ƞ{kʓ߸3.vz;)9Y\(28.Е}[vӐ{TLvi=WN/ɓ2GR߷+Su׏d'c8cf[2  F zǖdV,{QT`. R\Pb汗yԋq@x j ':CoN:U&,-%-R* `z4>+i\d+η ͵~@j9hA*?oR:+?@l жX^p hBJCH#ˑⳒ^ =nks.tB% - j uҶWn3GG;EDQtڠ -w97ɑ3?&3? >jPiBc#$klSőO8fƅUY;89 b1àTUtcb{P׿;VkE}amU\LdxC~>|%FY%BC,cTd~I&zUyNՇ?TaE8A;Nʌֶx הՆlr#8m{Tg'#>v :=X+pq`JHby\#.Uaɥ*BCg_|w-O9_9ȑQ՚hGpW x] X6o{#T[&O\1 h+]A& z:AvB(pMT[=a+dɋ&%"!k{^tl-YLbRT/4ݖoV2/8qm%NLMq2MJdg;0&Յ?U?&EhUz6} 7^`1)Sf[1)Ф$D5 7Œnq:e U6i[fb՞ -Jzx@e+`α97 7޸2! -=' zjZb)S%4g:/gMpUwUXkpNTsV+5r%-Z9Bvuׅd ZdJs"TsI@5s\mjG"?E}>/u[Z{R/XOkdt1$HξfW(0cE(p^-pFo7+`Zۤzt87&;ΡƼaVEՒ>] -Rn* =MX ĺ> -9B*~قzx`8p_}kCf6Ƨ6_BjZ.&y |^-yuK`&_KݦF'=} !N8W88 /MoN=?5!^Dva˓o(kӡID9~fRyi.b7ʺt[U,.|kH6;SAЯR}IL@t(k;5F 3W -'øLU,]^XzVaq8_6A[2qTkTIn6E^ -R3:R}Zvo?gP%_laPRܳ v@x1n֚Er+/?e<=#GMHmI>Ã?c8zL|J5+0""iqt>bi.Ќ[Sy037a)=4V9ȣ/xjp2hmMt8rǽlNM hC_5S(Eו05g*r,y#f{ -PS`;Br"g]ֹD,g)bbH.L@&I0AZ~܃CB mWuJ^'exFAkC#@J!DBu}vmpzNMFMlBtʊ(|Zd?_c)Q29$ɰFRJw6yX55ױbTA׆u1lʚS)df# -Eܱo/\#e/7Ap -I$HHXWK7Aop9ATk")*W{ۄ ^8 w`XL%$lpK}[!JcsePsj,Kg)BoH]Z@Ě.%!lGvJr{;X=@x&qJrum¦3=sHeݫ=y3#Ȁ ŗjg8j6K*(L8(~TІ 16/y?Q}PҢJiU~2IG,NT/."8FҬl#W8缐Q~N: -38[rv] fEd3 YťZfA"OʿF8ng]Gj &RSwT{()!ڞdT#`PoZT˰?.[Q|E3R x,RIz;np|eS] ʊ/{Jۣ1ėۭHTM+lhƱe,#%k̂`?&1 b>~_|;0 -6 uԣ&M0IE6 /i% os:() HGD>/<6]'Uvh+>e;ʶgSƚ3 R|)/mqgӫnsr˚[S_M?lIb/R3PDMuٺ/N\4X@Xښ#&f`r{7mhƕ+<4ɀqP^|[JJ[\(K<V1y%\'oCY},p( ˾Zu#/Z<,/ oX6sY_ 0;Ъ>hD$9#8/ U+'tJ6hI3^:Fh1> 'nd_yNէ6%.T]3uuF N<,t Tq/4Q>ADZ! rSqiTի^G[:$]w/aGEUgbNؚXmCꢑ(?+*PkݫTؕh|EW@}.e Ǥ]^I|^+W77yITǕB,qMΣFw?Spy)om̈́B%fs;]ip/!$(C6e<+qqOfqNة&_] 3#5rƭN{Gd"(;бnGI<~)/I.i8w 6 wUإDϦ%\ҔU>2dHlOJڶVi+Uxrv#[A7.B\iąs*)M32 #@p ެgA5?s_kX[ˡ^ʹ;xpeͥM-{h P!$PT&s39atDuxfd b&a({m%oF>y"!.m =bh3)Qy}AξI/WO#iF*͹5oԷ/\u$rgG~VNO !MԃS_],7 НEE;W>,װ=~L;{<)dU_S*>8jx7n?VkѯY3xQ.4Fٛ1r`ﳵXyT`R 4_L Kʅ". .J̗cDA.cƦ.P4eV%j?YIIj!敢aX  Q*<Զ%Z՛U>Q&:MYÑ[ߚ *ԭ |[F(3TTg˙ ^QyjM'o@OvlT 8 D;yW٭X`Yv -G ^ N;= N#i& lύzօwzNkL(l:}㉺1;hK@ci'g.uŁk5*"!wƌ(w~r';˅gcPJ78#^PV{ `-5 >cQu[XCs({̧[˞DDẹ,jב*n% +EMydӃy -CL|qYstڥss3Kh(8m G4X G4)4|'0L>y3H6*7P)kכgLp -)ϥְ%ae -YkhlkDӌ bL(V::IԒt0rD̤X.̐^>(MbJ07(5$0 `B aFf;@"WC KXbR;Y`L ?~D )$*՗tB;B6|vN6ףּÂ}$N<@d?SKMߟCƏz VTrrrT - -Kp^= [&S>)'z %I C4T4h:ڼTlȈB.䫝*~JA{=j#%54(t;S-װ#u- ~Tpe|x,͘7Ve%ry8PSӻfn$:5aiӼ&^md\d =>-uC<3*ʖpB ^Ke=J:~]Ӡ-9]>Gk1gI^ѵt`vR^/0Q{z|CxQ9XA ӎR' ߦ`5H9S+Q3S xg#e+@CNw}\*sq'pE}'rnMPXM ]:z(AFЀNbS@r :5_ ʄ`9 -endstream endobj 10 0 obj [9 0 R 8 0 R 7 0 R 6 0 R 5 0 R] endobj 35 0 obj <> endobj xref -0 36 -0000000000 65535 f +WQ48ÄQHX6G0 cQ iiy$57 zaU\ƀ I9kmT9 +jbc!9d T+iG@99<f258128e-5ad4-400c-bbdc-44fa700(8da527d8-d31e-4545-a3ed-30d438535577392563! ф)%0>CRSp>wT G Ǯe`!0 */Ɛ: aHbZ sBڃ֫۩A?8 XO^\t{\}tT5feaecb2-fbd3-40a1-a238-5090d8dc0789aadf8c64-6f5c-4d44-8409-82b7e3b05.382679035305023549664382977284| Fp0ODh[v:/8QH⯖XAV \w̎}آ:ECionE-*AhFA +w:܉'̗* >•D._>(2 : ,"=$>LO RU #J~BtEtv"{R; #^Ŕ T; BR:vJ:6Q_ \%=p4\*AK%2I%.UPRhD0@ +"E$+H(a +%FUBůWB *F`W"( {J@‡D +#z X$! @BfH"hsE`$2`qGT RكzN$/K%CA3(A+ɨrD?e0 :EϞODF}(̈$="邂0"pBb =ȉG$L=hy<8Eh0Ib s\2ˏZu J@%KPHZ$N[8Y>+ hPdRC6@=SxE(qXDq_0ʥ2~%Ee &HPqiQdP?^ +TL=$Y)1 / *N (7;!Dv0#?eTB .?eT$($tEA! 3>=' TT "= + +j9$1b2JD4YRH` 3*A>K`@"ĈUhc.)8zHpD +K,H`й$,@AD|VD'W 83+(F*ȠY:2!F@,B{+R0AD #F Dt 9.A h,J],E"E\(A +%Qˆ.JPTHɠ.F#F0bD (HPQ +$HP)"OeQ* ^t"EYPP~$~ߊH<)AAs0NaQ.(ɥStJ"Ed{!IdH  P sY5iB(  @ !AP@ +`@@hDB>fRsJ`Ԙ ,Iw(į+@6G:qcQeԍ8:ooU7Dž۠ G~._xDa Hh$4LCXh)4xtt mXF# ^yОd@ Op{,SUvZUG*D[ DE0I|'=_Vᣊw2Z,2?r.IXWo"ddԉ9DvعwfZL3[yHƩCߘNlr[3'Q$b;@Nl9 b3ՊX]ڔd +th^sZ `sK穌?$T |wzS% yFS 4Oguc/\d&- uaT3YC {=^_CR''W16*vD:J]8Ł!f/шi˷U<r5\X/tNQM'g2rͪ. ;%OZuoF{P G==L/K9`]`AX] r*hϵHLV~[TwlC ’ך(%bXZ^LXT7@*+1E7-xK-9̍H4, 58;䀲mVl +f9k7gp8±kkS˲+\r9F>mtVNQēktk>a磾E" l*KA$/7{hv@4 ,$ &MB;RZS LI߱ w16n@'jg/i GMǹ y1f(e* RvңdOЏlU} v oP"W0.|iѺ.dƺ! ?\υďShDRj΁%jq%AЬrՃdbkr)1ibz%zik)gmd?Q^&FY[K}a0"#DhK2̀i +#-^e| g`̊z:gPP3hOA=1sTɀ&Bޜ*H픔3_;ۦlu.hA6 m3Ng]tVQd|)J3AT4Wf ߝv,a['݌&`q"U_: ^:z(kexQ*쿝M}6:('wI3e0jJsR>55J~w#1;S>'jt"0QYQw7G qX"0Q0V`CY881튙 +U5D-X-"$uwЙ&mw$l3Q ^4[2RqaV́y=`^?q> $ ƽr`aADXA՗zY;9ѷ7 ,wM<$wAZv`܊?@!/@"_wL:%p-p\5*a`}+ܹkǃ,Xj)̘ɟ*}jR?OD(xq,/8|+Fo63H:/Lx=$K?)AF񬗃y5Zd⨵-7FwuPI2#Q4X{@)]r4.-Jx ;f}I܂C[ PS/ʧ;QpG+Ȑ: BD%4ŠVx@~,9>Л +!theUnθ`jՠZ=|a=GJV l=WyZJDrG7ڿZP F2E07 pHI{`_an I))Vm +j +NSXĐU DIy 2ߒJ&2V(9XnTEڟtb@@.+pDP{۪Kn Fv \@Է\&p4SEn7#B)1C=R!al]e(D)u& +V5)s pZiL2Q&dEBV[4+9=jȘB؀P/c7ISy[Gߨ{ +L;{ b@5z][L&#`;xMinZӈByW]Ho]{EViZ'وwL*%l^cҙ (I2_թ Sٵq~ȑmTR ug|8eHs "a 27SN+xWrtT/' JDPVoFnݠ +h)bscFLLj.i)+uBˤ[zd,M7:yYI7!J('D(=6>P#2zE֋;ObȵQG=Bw[t4a'[TN9A1Djμb4-IK+~T@d{v47EM *JEQ}l^nWh<8ٕ&;ҽԕϮRm%]2R;T;T(o"Eը" ?DxnHrq$.N +q?ʹQ/&jfm >'j6(2c^?zJ3w:M۔-sQ5&GO^H13u["Fٗ>5if'|Բ]dhi>3*GC+}g7Z;Bz?V~?,rKrLvٟ '~jh4zQ}Dֈt~7U5rěe5&گDKg]YYɷo<):ZBh4 1k33?!G坨aDƎo۷19v%h4gmj=!#>v;,ƼUOgvM2ڢ9"Tȳf_:;FcU\Yikζΰt4y7hSCmLҼD=)*oDC~-%2D[kdƨ2zLFqKNh4gh +Ӑјp57^KG ?"\cT]yսKQb#vcz#.t6EŘFSIϼmqWrTĻ6ɋm$OnWNfKLޫꚙq]}z:t|'zh짶oY_Us4Q)szƿ)_S͝@!B%6&>̄؈vFu@PAF@Ѐd$#"1H `v`4{HEȸ1qJ{V<<=k=dnLj^̯n芜5>L؋k8ƹ`0NKĢ瑀P.sX.0R8P"` ++c<mG;@ xՍ/%"[:Lx={"[S'{)qQݾ1t|iW jQ%BxHuNP'Bq2`\ßmz,&TE~Wzd'&d},zZbZC|P‰chCi"!EkX-Tw+B+˴ tSᝨ-R^Nud祏7WNлϮ|i\5Mc[M4p)*6ͧ9oF֦iߔDMhFQjYXeq)2#3k:.w ׯj=[h8QAL.p4Fh8R#&Fc2¼lR)[*I& +(K)QԵTOHj*6VlwQTaD)JF}cmɞ:zRۭF:W&Lزi.#ZGZՈ~ܳ47Mͫj~H7/*e扷<]js8BMB%Fo4ܦHմo13nh4xƪhQԊp7E 5bh\8!6EͶ6NTѸx8RBT&E.#3irKTt}vk~=FBy~>V.Xc4((ٶn!zGGujDFɖߴϘxhZؽd1W>mFьFM XYZ +/qq!Ѡ@DD( |. y2!CuaoP`!SL$A500(S` EP(eB5<'4(TSQqK ājx* EeC54`-T204X&BqP,$TC)8 8 +AU`,.( +'>^cT`*Bk>~iS27&1JYƔx sڒp<#W.ZEEne4tiSr/g4ynG-Dry*WUN=l[}gmjGVU[VFqշ]5'[w_fkuoO)aڙ[nwe]]ˋ)a7!W{~UOmNOLDRB6<4D^Q1*CM01R%7nϾsU?Kێ\3|=]R7KI)3dʏ6QbfTqv u]X[ ^Ri  GRT錆)*KLh8FxyQuW.^.FF)nb4˨'Fh[ իflϩѮ51ިS73Nƾntݤv?;dS{#|0S4Ք3UU5O?3efFn.9{ļ]\D>TEmSoUlE]]EfnEݻɌ8;ύSwbwjk+v'fUE^FdŔY9aBLNLLĜəə)5S]i  H2dlbP$τIDcP0D@rIq0\.f8Jc \, Y.Td*6i(KH24L "0D XrBXD.A(a,bFA.HۉC* 4T ՙy X,4X<P&e(a,P*J1bT| cs_`<&0/P ' Ƣd 2`@Drq\$ MYs\D`(`< 8#\  $8H )"ACD0(h "<"]Bc@8O5WSJER@q&,2 ȥsﺻ^Py<[s\LfUe\@qr.P|x *ォ.xP8x.mbcC_P.-xPBŸhX(C; G. 42 Dd208$@<D.`@Zd(LT|"y&LD@"Td  +3=wDa.b@"h $O"#GBhs4\*ʅDY*w +S@ !Y͝ @4!ay(P8  D ,8p@i !I@RD + + +ʅHQ*2@,8 + eA+e, A P0d,8 B(((\ERq %sq(Ce"Tű0PNƉP,.E\`@ lW y +?ME( !40AX4@X +@@2D(H +8 +2L8 +DHp2LRL +EerH&4sq$#iP +,1(\*T +ѨxxxI4H,"#sDh(Fc4 C1@MDh@xұPd  `d  FB @5Ep00 +TŢdg9d D"G AyBqLLF8 ϳ* Xܨ.UԨt4$-C4"sX$#2P@Fl4Ǔ$H2DD0z0b'&UQ7 AP {qzXjs ԑḸ]{; >ckWk=Syv=Cnaz;GbOso,Ft KX,,;2-Uo\M&fy <}fFS ũ ?"Z# @+ƔWgui0F)c>S&T1eE||#f OFhRkސ}-J3o<o2=y;wWXH8Olc˭&ڸ`S5Y! {U9-Aۓ[!To4man/Gq>.((V ȭ΃?_6tc7nUs o*9\E+/D$|޸r0,wj i&t|H9k ӶJSnvuP w]"yj(6#xEByAJ,=ÇC^S呍gEx&E Xta>wYp3(-'mc-[ظpg=?C:v!U:g0͒tY(pMKހ\=8(\ wR@34vcS󦕲-N,.Nv~?zmÆ:YC<qd/AOeGH&3'DzBj9K8ED|7nrVfEKw|,o-<JPcИ j/62+`=HC=Ö2촒NBѩMrTAVqQ߇^Gᅽ*pHlH~A#7y #las&w.Zff7 +'Ğץ@>h=;[zP"z /-¾iD +J=TI[YWIpAfkߗny'};I]]Y9)@^w-pEQMO+0w0*P[bAA=րmOl-tяf&%rpW}9zTܱ=*xBMW쥔7W4;cFEi$}]81e+_z,Ȫ3Oa¡s7%Aum(B)cr[ ر29~a8l'b+[,1X$1b1Pg!ٵlgw1p3+5'C2#o8;ؾ =Ӟ'yGPr'z?[v=W;<Բ/[R}Vރ2vnCtVtC7o6LD+ t Vɮ6_+\'ULOjVtohl@vLJf꩏a-=tċbithG f潸cI+.:^GL/wzezU[%_c~ +ϷAPz|3&'| !)Y; +;`EJBz>o'mXǻ-am"cL;YFTNcIhmэ)=6-(9i/n]qI2WÃF*շA̚|3CGvm"؂F+&4 ^WNt1l#p`EQ?P3R +Wסli-8u;@i{*5}e >S]# +.PzBH>/D߽֞)SzHKA [*눧xºKG/媮rj=j؋¢I*UƝhb%XЂݦq+ ^1MY3,gwYbE@u^w8)|bq + #zDܧ\Vdq n+ܗh\tW(RzJ +T\^RzRO~x"/L=g#&@zؖ6#bt=_1`ο"WM~\/m/܈9R= b8B<c:zfW鳷$rAIH/IĜvc2¿/`UXh$ȸՠqlZOmj/~p.%+HS[F4\j8-,w ?^_,>[GA{ ]cM1ß'8SyKa^oLX[}cp;ZWV67-͜4/՝ZF(V ^@1gw-|Njc-A|^-ʜbRrK/ҋFg{M/9Χ>w"GxW핕D%d.i@"1^>@~dTDX +$lfCgspp/o:"iUk~+0~ujsC7a[f @~^FVM + k',,T2 IAٽx%%MtA TKu2xt(Úmf%V4[t8gZ =6ǴZr2-TV88iS:mb1L2Oci/E<w0kx-uc!1$~ȓ.%l)-H5Ʉ[V ]BNbԫy~+wi FO6t8)cbaazOs~,Յoy)R#TߪÍlm4Rٻ)MOoi3c: j,w X!ƭTq `qi{Yv܇h'$E+hI`n@u"#-)E*2P0ൄbM]W0BpZO?;a폖iZi3ZUUZe.hVaEV +Sٮjd:i^)ۮKh+f]>Ȅr Z)=bޏ0;) CLdtHK:M]N D~ZH(第7`٤ qpx (P棼rfk"&1X%Iv lp&{GBW ULI`MEo:`}t]Pv$A_ I߿hQfScgһ 60(= pb`T.Sj(Yl J=}yET]/V@=Kh81Pxr -5q:/#/LorQ"0*y9#濁mf5Q@ic%H@;QAz*ixxֈV9C+vec;\A*hAA) 8ሬXHn|NG&z'Q(~*u>FiX PvV]E!ZU~ #"r 4H2,֋@Vwd-9/%~PB0VFs$D2wk@k#R7#"A"5f) "| + mRl#7F>܌NϹら!!._{P2gb OPB$hZkʈ"g+:a{z h!n I sꕫu KA[~K_xV*qeT6IZNAmEg zoj,MsF@ ty`"j;;k]J +F8V2U@)P\!=3@C{Q^'1yhJ8.<@3 $@O6-í&D ֙"Uh u+SrI"PcP h'֙,zL ЁWT+_LE"zzvllY0ꄣ̺[xrPW;=@(T p-x6 +RR{sxm ; hxBp]v BAd?fڋ6fU KֈT*ZzZ"t &e1Xv]zyos~M#H7/h$ +1/ +d-Ǘ+vՃ.>[Q3W^&\ +>0P +潾"8В8J RS|No%(mf4ikXE +eLYj"|c^ӻD4&J#)ڴI^yLLö)@ .O-MFAAzRPo P77aˬ8fXǨPP÷`hy? q I=x_bA +,r}$2) ܚx4>3wLspai<ó|-vR5-ztjjN:ws' +X_o~ S6%Cԇ6z:_7]1Fa\nyP{(N&;h-h"~ϵ)IHA4E,A9&^>! 5DsYh|FP9Dώ9X,0wCα!##Cu_hFhO0!o~RS T~K_Ez6KCS-~2=YQHIIhJTc"؜v. ]U3 +bʳCS.sc ġA;fV#C#gNW}|bVU]%k:s"BSy_рNPݤ&mYfB& ZLV,Lګ$kjyI$o^ducm.Sg-YRFBy}sQ륶f0ԸxcW&'=uvR +Mu!+ܺXm~܁b'<&& '8PW$`Lx3*j@-2nMٜT6*鋱'Ca1bZ5l)v xmkw喭80Э!˷B|lOtfҌk* +(%d%,xXw51Y0R}^bK "7x.JQ{ALL G+D FHU˭pѪyg6T-_ĉbRTڏ[fg^诖:_ȅ +Es4zhQixq;5+?u^[:g q 6yWG[e߄ٲHLXO.&9*z:E<h>6(& +e/0Z,,Qi'J-̓)E*"`pjz[0Mpd|_.+nH?)Y0M\Z +p% 6qN$sCs/'],LK@u /(zgObcm@6@sm0}Pvtҝ!d9XoDu0RzBi KN['kȠМZ$Aj8bgab2(݆^r!jBT|Ak(ѬQ֛P9#<N3?- }\ "WA5@"o`Ϭ/$FU!C3rb A] mdˌP); +,TF/^0@4Tdd'>hxB6,?k1pz2ڶي䕅x=B1^gAJoCfG{tPsE@أKdjɈڼr8ȶxI錯Ru=‚DT!ܰ!v&>9o@h1oY':ғb(fF @=mK%։tW.{R4\|\kK,"P&_|TjD*x}T朇\JKepo»ת"XAzy~7m'[Z$61HvEwBG]]M)Dkp&$%HT8p;2nM㓃u.I k id;{%أQ :5hÓa'6`m?F꺍@:d֘#6IdRBز'1"xEZL-an QE_ uXasSVcvY:ʶ/@m,A$"0:J O=vomJqP2O\"g 6G{9s`S9wX@緾ahp).!BG|p + ~[E1l PuCDiH֘ˉ$s:C6&ꂴ-w?D=K"hׯEbr"/?NDƜu~ "w 3x_XUSsۡDtF\p|_Ѿ4u"?3 HO\ G@/# ⢺~)"JΨ9}Pj` f[SM1{xfL<A +SWD\BSn⼆&ŏRFBۯKTb~{5hv,?-j󖂒,J }!.\5\̲KxMGAD.k"P[0M;1uE]@d?&ScLLpۃ|A%b'qNg27γo\NHNvZ8BJCРjtamxR2U¶xt%KzI=D4S Zs 9)O<@!{VO0v{سdR 8Bw[E"c#IUU[{<`r +.ý N $CzicdO6BFD2K82?-UWs(d[čAILG%WIUy8Ֆ'@K%e3' -V!n*h<<֠i9[ pDCeD<~ +Yފ@ ps}&-ꮔ³$Yw)kF ׭[ɪB ~ _\>.F#ބ -1\¼L +Pt[Ie C^Le@S܌c+ht;76I0\x`)D5gK +j %1dnƧpV6g +~f&lTw̦C#08rg ILVZJB}@2 sHUA5p"H@&r<`uݺ`l_d3MG@Tɟ/WtE$%|OL(aoGrF޼>Ԙ5 +nB,u~l#B:oZL%O&48xM&f?o=e10U7D"*~E({յǟ:> +~XQI؉M ( :Ay(D'1F6LB/ٽP1IEy1ə?E_3uyΐ,vEZ-5ɷZRL2]q  5ppN֖}8Q*Jp6Y"imXDD)nи64a}N2 =k]! +q_ݿ +%Iߜ )W~L 7J m%J>FW׼+0nOmz,̛ѼӦt(pX#?$ >k=I2`By .%GX0ؙ7T +IU!YC|!iI$6+U?."5IiE^sj$4֐e5LB]QFǎccaD?!@48PB&Δc<6ۺPxCi}cGnCCЙ稑aJX^O; +耘ÛUPlp۫KZR3.k۸HHfXk1RGCeAo`0 B²&2<"E:ѶZ%A, 7V*U99]w* V F%eT3aQze]H.şgmh^kU} ޟw`b`MM/S P$ k2j F]j'iX@+w@^ wI^j>ϾˎF$1'S۪;Y,~jSD_Va줔v6l1"4xRƧ$V1ma[Q ydfj(9˱[󺭎X7Z`i +n@Q}8Zۦ<\F(<07,9sЭJFҵ'ڭB-Rcc-S-?ao⦆<[Kwbh)8 B>ƾWBM \Sgtd.Ư⽞zhJ]Gp1ju]#Zp2Ӄ^ +آ85Q_']W1%ſ3?d=^NhuydXZB]rFX,gvSξ+J l@x6kj˴'cdܝ8.gg3l=R4% U! LXwݔoC> LNcvA2x0HbDr—olmu"K{eW]o?,}NV-t spVPP{*:t '0 +5Fkz&0ȉe;/{-*,T;~pGZf8"bK753 z~e@5~bt^p,@"#B"bڒf W)6jz467pap4JG&noK =dq 1Y%DW?HjVLzr_MЮv͡SH4:.)w9%s,\FX9G _8Hm1ڦP7#I9G>OK-Qx va´]dhe m?dPZvAToM!^P \,>gKa2a&k3=(8މhT f>وã.MWI#,\#?#]@W%<^#/m44 O) ljgHl~%eU[b(at׀^޸y#0E%.Zp>m^3) U\v (ńp :h;ֈ@3XyXM0ؚ/4D'TL|VG@4?w0EzǽIiqmXI7FI;"M3+vZ +Ue8 d\纉t؂-ȁܲ"֐c;GjgSmtk1o_hHC╥aS?ݼYF`&)G6J!2Qa@Kåc Z"\҅՞GOx­mbiUg456'蟥)X~L\=螾G]WT* JVĞp4YmcWX$ɧvWY +b*S*{DW Вk*A.4@!*i}A"jHa$H bܣH:ݩ1tD~Ð b |\L?p"Z>9a Uw#Zof*(EMpDʃ2ɐDvTP&9U2X)츭>ilT+Xu}B_ю-c<_sya[^QBSE#XI)=.q'!<ԡC(𛚍Ƅ@qcP9@jtXWF#9Ţ;d<77 ~JQͩtL~/"[ߔSʢi(r:;{yV>RJZEzK i!wґo^ ދØlA*K34 +pdi_q6t7l(5 l nPZ|2!-As#ܷ }X5[c&t1 zv[^0m-ud6 p{2f@rb߯ɸXCFd$nbL*Y|!,~53_t۹`KV +VV5 xSN!,ݞ%IJ)FтDaE-JN{^>8AѸɖZHq/6 ѵi%+RwN6bb 槣B9Vv:,n+$K$·ΰ]254/pK:_a$}ؿmK9Y&<ݺ3%$Uoi-~M`8# 6{Qi sNi$@XoM!GPW&-g/&.{(h/{Q 7FFEo[ʖ]u,^HbqdߵqfUg&hكO vZv-:-{pTDP&\Tose0]z(.DqZ!+2;2?wY3{EE +er[esQ +q/(oᓸ`e {!&D:g`UzH]գYԕ+WB pdyw<хgI! M28){5{10W뙮%v#cFrs>ܺ8DGJY^(M `wR *.IO닆`)$S25U:g`s0h԰pbd[7?$0Kft"dtD.ջE40:?1zb>K[v9cl_[%wՍڥ` ->7xBJCDr:½޴ +Dk.tI7;Wa2pC5-_X%OW2QvK C-f;$8n2!G;;NhL0Q$UƧWN6 ʣF0< Ŷhfcvn)s\Vʉ - ЈslҖqP*Rט1  +rv35w6I:d1=^ Q# +^~2eWqmu~ +݆^ҹY_#h@Lx3^[7Vdw@A `րf_Gpl!U}D-9Oԯ~qBWN,J˧TTGH+n}f 8"*Jש f;8= 9`# ͖l t<,l04P$MP~ ЦٚPcxQ6hdzAP/@<8 O7[2kmfL5gz6[Aw{4oK(d[Xf@T#!j闐m ꀂ3~RHAPO+6=適D]<8K{.=Iy^F)8t8d85!-+'dg᫡\B'/k|B_@hC0pA/@V#CioBD ˽8p\[c~ly:dRCr)"fI\(\} /sFj Mc~LtV +m#%X[u1] [B'Wv!A'x4muhz@DhXj%}S+ +Y%̵%S2yĮ`b ސ垾Y\A!36,R@f;؇ґWq(_(PN՝tϮ:#zNV;kn6QT=]XP"7y+YQW1 AќzƌtG`~㾮{ 0/6 ʖbYJYߋ˖)s`!"lzd<Y"P AdL2T #I-HqˊfNZ +]p# Xάg5ۗ7 gKegUӟbԷ'0EZ"bmiM+gش?Kw٦aʒx\vCao;|=,<6qa$ٕ1 +&كgEֳy\SBb!+]뽆")K/ +dk$gqp muLLrꯪP)|Ju' AW">i8kaVQBy>?nl7˦6,w+|_,fYK0-A6gVO1\ 'QM\`{5](0~&(3~D+pS6S:oV_)?00A=Y-U<q*OfRY"M{>zVIF;L@TW{ +C O +%Xr޶68Gi$|]E,\)Z. 7aOBO :M-pxOTi~:%&HTnL1?K%Q bUbQoDH:/{|dUM֢?gu/eg3g[څ]Wo yrzk~=RUWXYplrkgIRJu1zUvZaVh12Af"\5qߗcd-^P@غhipcrD걸 o`{5$MR`F8Tfba|[̰8“J(\Z7CJl^u +tgr7Pl]@srS;U _ W88`HSb.DT:$asO㬨u*v2m+76ZonXƖ+Lֈ,7D /̦0ԏ`>_X*G*d kƋկVKve%(ɧ}c6%3o!(0TJ{Y<鯯'G_Npc40a csYN ۄLcVeI#hZv2D՝FPEg.[F׆g++; n\'RfDxk5VQۊZVL4pb0? Ľ zfx`OYd9KfQ$jN'Vdk\ \D;rO:GEBϨ@ŷHToSn9}0GFP^ݫDdd:!3J> JѾ^lkl=gp؋&HbҊD|fT3S C)a䋞)gŖkv#!~7[z̷Ǚ7gW@q?W]3MݨV{2"#[heFe݇ |<۸C8a>kRq1 >߲R+n8h; ;h8l0$folHs!+X,b)vak4/(}+ 7h1DtQů1gt@|lZ"12a ht m|Zb\+qzH:_Њ,0jDo7(cZ93ĬjʹfR%9Sӄ_ jI"d/ȎVN1d},dqɝ7TAH +eaHm#Jx~,/o#Ruq-(/VSMJd)KӅ3 ӂqRV26OLyQu8cۓS^;xԪCImN1"L俸[:QÓyia,RrUJ3wku9]]T;g`aJ" *paEUz+$ FS#%*Ƙٍ h䶠VHe[l|Wy] Xeo!zjs.W.r t +_&hvI^1},c5.LKȕ2\UqvfD} $^),)ZUoLI(׏%qo;JOw7c +-3O\Xo*话F9os؆1> +endstream endobj 67 0 obj <>stream +:̖" ʹ-׾XwLMH6_!ŌCDVמ{a`nVS2 q`K'ѯē!\š3 wUu.z sʃT&`N%mR٨S$&##=_ǧ + <"z}&ut9Yk[Bցp!uYgp40hb|բWFn[TUᢾnlA]N<ՑeG5PʜnLĒP>e ZY~E-_O}g + ,׻qnxFʒSwt$eFx-f0l*>)X*uu8. xo~2ymmߕSDy1E摵"YƓez^kt>9[Rb7x_:8g~d X ÁOYpfbPbiAu6#oQ pzΏ6,G/Buĩ@Y4]Ŏp @=z}\\Q*KyĤP}Fk~Ć5*K4/ EYLژX*jhm8_wCkH mF>oqZK^NG,R!ErFM~4yt"=Y:Rr`U//B Zcd0=NꚌS^1#:454PBm~_rl/DFo\gtzef%3 8 "}`O*#v$Y\ݝv]_P>٦oՔF uFXK[ڬQ\azZ,aQ 1:3Aq [ә^+G%VD]AV]T pщFy'WQԆ4AWfn#ok\;=̣Mė]*N6pr6j<`+Dñp$}WŠ{vKq6FT4'웈R +381Þz?eSZ& +5;H2v*GD&WY2.tDM;CRI"h +P?%үfʕD1ۆ4I{STwQ 80'Mд %"3Q$OFƒ@\gA<)# m #4yxjߩ8UD+$Bt[g匛2GA4~LiZ齁ZȨ1#^=zN: _,\CB5u E3%֠:b/GSoLz(< ez%+y3>quV{~HPjp[y`{%嚮2GɁAf חoz$$eHm31=$feLz+Kh~R11*!%#]iNiȉsn~D2R0?$/GPi>lB'Gg4N2fk`ςIMlPa RB.+NtbguzȎ9H?^p:fXژtfIGmB#Ȑ$H0F+YaYm)Ԓq( 8IQ'^l"VW 5Sp73Z+2} qZm(;(栉چF*UtpWU*pJ1&vp8H>SևY:^`"܉&C]{@7WYӒ=EX|AK| VL6 C:(9F +l”"dډci~lv|ȍԏ(>I.oe⏉LB-Z $n +*{z%.T18 E/N bI!S)amne;Q\x(.D-A W풎Emv Z7;/uALՂz0/RH;wr?RpSFwھbZph _<4i!4v^t7Iv%kiƟf6J拏c*̢:uk7}RDFD 5sGDջBKpz2]D/9=|H&d*E'7)`[.*MXmɭmkJ%yӶ,CԷ]]pZ.yl{wjIW(Fq7r#Av>g{P{`i$VQ{z(#K!Dlݨey`IV2.Ñ截@S)\<{ TR\IMhĈIh`2f +wIc!NyoF\(ԂldLbW买P4Va m (8?S1l8r8i3J+G"6-8=_ u} .WLXX fe{)ipUtL-nph]}+1dCq\$?3: ^¼`Q{@#-y +nq #P:5+(BR]c@fuJfqm 6@ >8HtkCqlC,e\w0M:MfR\\^kj*%aٌV @%6@ +5a/b`RuLM3V1WG8>.bX"uo ])A $DFYƙ #xsE*[ZhY4rT_5=pkƺOAkG Ԓpqq!\BL;>ۘA5FvjiX=\sNHX=E!/kSFb'(dۓ[9 ohȀKAA˪¾KUlR2CXH i "TC)1q<ݟ;:3"Xx~TԹ#CN(>ipQziBsA-[ZRNqsW0jg1QHM!A'㷜xoa!VKO˖AbZqTsҷI& 9C(YrȜ=qJx} B)]5SgL;/Ћ7/'?IA&Hwx񥭅΁pS1)_p1øg(ȯ?Kf$EKyL "uUƮ804Ln/sDyRкk e8 CPwC-Q1%UuTʪ g8|ͼ-S9`^MW2:?PE%uqb\zR8C ^3Th2Q+"oq4?\pc L͈Ţf^@)`f:L곓A erMg`cf$kVy(kܦ]БKZ59 2fIXH; AI NX'>יj8.UMQҩW>h2ѕsBol L1)qz߼!eҎdNI3uoN;dܧ~𢨛>A-KWx %=Fwϊ+WIG-kl*Yh\},5Qe, iZ1y3 +Ha" a|ߧcw}^3ĈL+)&hߏDͣJޭ&j`duH~EI9&?vߍhT:{:j=)75.07Y.0RL3JH,9pŸKFO_^7e'QCĚBA){+5̷l~IoW8]NtC"2 ؈̱aK683N 8D䬞 _|T a #'^=z/'ݴ%X&+ciu@S!sKwWnNO LY.uCI$PO #Aυ2EPeS%qTd4E$Ih:>7 JMkQ ~/JO#7CoqnuK'nŦC~߶{qt='44?놛=l~cMW?5ٸ%ax hEhKV]p6vBTO/WDTs05b>A5gT/2JY UU.׺gexIxދh P׬E]mQԢ*Hi"[,)xyok4jy/A`/p6Ѧot)2}pTóhc~2wD<-G5M&,%}3o!̃6cY L@N8HTy_ %Q#VU| j΢"ikwW/Dz([yn,/OR_b`e0*bHlXmm`1+TD,V/Ԩ 0ȡF($`(kjBu9}6snqr{6f(䏒˧7%¤zf*zD׶D%\AN癑)LRj2"u]uOaO6Y\} + f^kBnZVDdM{N -JWe"iߎ'$|^Ÿ6) {K4"`5d%FD(KC$%Mo@v'BYa. I`!t>QGѡu,֏@ _`_76'T4U$;A~A)6-x,}}cׇɰ7ڐahYgIaGDie&܂B7ްc.?PR;UeTaJ"$$89LXh4|:Ŷ}Z~3G}1%;+-a1$)cT x”MIVk.{*U+Ht(mސk3$ 5*]%l;_B2{&UHڹa5jX#V3 >睻1:3w]h1of |<1A%+4a ]j\-"oec#Uu+Nȇpڣ(:0)+/^9I B'iX +_=Hauf(WW4/ijUqH_s{8|V]cdM`(mvP+&&m5x]heU҉&jǷg$gdpjI#Tгģw9]x +pшrrLPEJn0KJQsՋ~r$^X%LgB, EęSM"lz]XG>@0\DPQ#sB {6 Ié9 Jy&.TcOU?@!~dLx:VMM*`R@\ո}VW&:-E@ԒUTqu'FjXQᛳ&œ2%#bq/Ka?8yk~S*>D%Z@q(RrslY̗PmS]{vtd eԣDV%bX- w`D?Þl c=&~O &ʰຟA~ƛtG`݊/+$(n[RrS%ik-30Y[J5h!jNIFm1{+r7v J&n@!0fmZTQnA)OC:@ ʥ՟;JQe9#SER>UYV{ +)2SPچI}D(g'O/2,6I,}t# $VS>Q|yNNLm ˑт9BOgN]%;.|V ECcnkmb?7I o̪ +1$aa:@N +ҕXZFڂE=3 +jRS]i4CvKlԻ܀G!^A6Z04c>SøK0Ѷc21 dRY eJs0|!5RI54JNC. +䩼5\6C&Kow81Pr4]1$ J(Mig*[@9\@ +bk g?oAdeaM$o%:{~hBR'RFX~w ԿljMT(<)K GzMH+%jJCcwM冋&TQ|X6d=txwɠg)ڣIKI.w14\:vJ Q+~GJuQ 6*8bB#$[֜= .\\V@_U0?"AQ4{N>#%GJA۩#r  *oUx4Խ@}]! VIE, (9!>[mIG¸ d&r>gӼATGáb|hf +yqpThbl!an_x\S=MY+]pz=#z,i#M1؅9QH (7#$%+֊7(vJeo`()(79HwI `%-{}x"I4dwlrPO_yIIA:>FDt{!ؕдRˬY\٭^OWl*]KW)F`dUoy_!vjbEwm0Ib\6j\@Be =YOiZ@BF3^`$*}ztFvX0cj.xǑȽ.}y`~/ݾd"s@d~ +_\ D֜3tG b)y`HRc"1L(LB6, KHUSKYx#E3:JNٽgQJI6YơzB%4; JF frP}cCed',x>w D5U h{ٖ ADd ވI'ni띻"V -Rb"H5o,vtWLipB$IbN #QTkg'dӭQt;B*K?⭩FlLl +0d#QGfzoL5 +ThJa);6-#DV0:)%]eZAGR>Kmb1~2 +Ġ(ê@$®S6jdڥJNidLz=$E4rZx&& 0۽6郴a%F$i}Li@֔="j% P),WFHN,Œ;X)q}Ǡ;9v(FgBcD1K277iR|S<2RX6`hR6}iJAApGxZQdUV_򣉮sjN&{c6* VD[ + CcHzlNQ~UP,'FSFҰ"5䤖W'1HlMMSZ N `P* +GO Qͻb4aN=RcO||3Qs1`u|'kK依,7g-ۋ0^qhuxd;iTqt{|/ZW X&'i7Sd)")u.?p#=ȇ60dHR /2^ñ;Vg5@ѽY986ks14TF "hNaB;޲O?l;dWlGū#'-ZB]euظgLT͏_RrE`|RGE[ rKvஇ!ȃq5ލ+YS xJEZ|@DD: ΏN~~.S%yqԋٔ 2N{ͧ>H&=;aL?VuLAx|mGه+F_Fѐ棑R`Qj}hPpV/M>'c *wqi:CyDR܄UO"ZȔ<''jInpi:֓zKI. E.I-sϢ)4T*@X<#'x,2< #uc?=5dbtל܍:ZBIr޼mEH]vƛt-ϲ!KPcjDt<JK2 9'@<#Jm[m_F-znZ#\)JfT a!~r*A~n+?S^^1꽇j95ylxFzCqpYNsT%eQ&Dw{p vUV +^6EDNp8y0S.ƚU^Ro{RҶU" + + +"g  +9 aH4`lLt7敺TK9EvTD>,=,pQEӅ( +ADP#,SS1Xz.h$?KûW}1wbxaHԒڔ dDhKj"PH +BRd,%XW&Úvi4IB@]a: b+؊J' )c;^1݀(WZieVi;Ňr* Չ Hm>mqTjWGp*}}0 PD7v@m +Rl(_< G D30Sd$~6RddgsL( p.ɀLn&8 hTp9)ᖊ-E%9@ AS)rբi7 Ȧҙ`-ESa6*d +ƕ%/A´x*V _xi$xv0j[Ng#>Wi{-dXGLLӦE-F (7v)2"OjEQ +Fd"ڈia&jSP`. & H Ȏ]$dUy .aISpsiRd-n+Co\hФ + ƋOytpq| 5H VS&D?IPOABBU5BV8"ᑬ|tǛA!(8,G0<T;Q.j&z]n902 OR+cj-HWpߨq:t0- g(S)oAxgf.zN lR3l [a:T820:ԇaجAm ր빧R2L3Тy\M^׉,IbL4fɞ>Ci`  +zܡXuo.loD݀ {P0n@(J`5,1 DGa|-+ UHF.q L/;cnx49[J[H&x2RNJG҃3sA"#NɩhFV1&Ih)J)^ r7 ̆2Pjn@h <$[jnSӚ%@>Ũbr(':L92bEus݀] p9(6Bb3sS$?@w{+ر.SaIo RIG2 xL#5OBw(Ve׀{E/c% !4Z +uL0r`\,Nָgp硶fă:N<^~,u*,mp.EY,d836_@R Hj2r&``Q0 ={OԮ˳wµ$pV(h>^%TޘuoԚ@::KXG`Y~%;Kn.<1EO8RTrͯԘ g86Y%ë1E^kk;hU6fVi&7☝u+a1#dPx=(rO\OP2JcUkn~LKSddn{E/Z$D'-K22q1u!#݀4i NI +6K>YKpF) qٜVHS36\ ք;P"QWnvYl/fvCd +芇oW% $R׻aIjJޏ 1ʊL ؙRRSQI}MZZR8(iIM{"۴p_P-*0?]%3C ^%)5m’V(DW*`|X1(L61{a~RJc譴 *(w+NRF@fA"F*JqHi JiV6KFm4& /{(x?lI.'9`Ɍ=BF4}Z'LEuKF +_6]"UBI6޷.|~ +~ԥ:X)e + #]'#5j"}2qHF?Du,e ~ +6OAE)$OArݰ\$)2,n=LGmOAY"/ĭQwa(Un@tkTX KQ1< +\ P> R67?ωCOUr SPOl-6?;pR{sZR%8\ B'k+E%%4*Vb"xg4TT~ +|>%& +D@PQ(8S04l0'(WˤS,"IB!=օ,h" &SnjZvUN!>!JxȕgS% pMRZpk&cf+nA-3TLoxڅT"j7lC18a`{ Id 9 ˢJF,8rBF!TcZBz@7I!:#*mLZ#nOfjєq]+k\A_Ǐ +B!1X:$H6A(exڝ ^ B,)&jn@ښMAX0Ya  x58*N/ uBGQ^eVӦ蝫Լ}c|}p8zĔ":EF*AF#*AJ\ p%>ኙdnSu[Q|8s[ %y `I q< z.6&i Pl,nqi$8K>U0'=GM["Pj*= +cLk15I D%D\Z7uC +/*XF:&q@5 Bt%5<v(%uXO[p/FQpZKѲxHv! y݀@ѬLs"l!E6Srji(4Ƨd#\4lV'8w6RKj D"E`%X:k||@Pdٍs-,=p +A+'k Ai^ic%].. 7Kl] E%E"&Q1E))-X-`l$Pd;3$[V{G,=8.q"1#2?8q(,1 -) +d[f:QH He7 #{7xuÆeTc+<\!'B)݀A)"gEL;mf"ג[ci$'Ő7U; `ԇ8culi%ʴpr\Y上B_UO17S#Ҥa4h,]Dm +2HshK@ @mYouWY.a:}i;mO/e66 aCF Ee;(vPdCe;n5ev(~ خͥ/9\)9霂nAcN'Lq[r:&ֶN;k$8vEq)v'+P"y%pm +Jz-bȮAELPT[IY(ҋi7O49dV7)O &SHܡ(2*:"@:1(H t㻪%#I-P-@W7#SɸFGLǰ6Sñ}t!UjuA&)@{hI$  Sd D!|'PES a2 7B_]l%xi$ΐzv(W{_sԎ>*K??R).( LT|?`V~gRkӬ +IZY +,P:u꜉ +2Z)RM)E]"bbImJ'fRp)jzģ֙ݨ^G(Բ[ֹ@CY"rhH~uɌpٟƋ\H4>-]ZJwk 槠fڍM-5X]8>#n@(TaDKJ:.AxrkoLӤ 4D LJSSO2_tdna/2M eCqP`G1I_;a6uGøg:@<;#~@<*f7 % +RDqaN 'N-^*ǹ>`HєCf*w݀Ze70cqfT@T8mCv:J],n]Hӷ=NZRيo^^71_<˖Cr.SjO>W'8|t'^e䓾HPjx 2>~DPprZ7 +B2)мȉV;QT oD8WJs%BEIm!HYL}v%?w#$ RXr. A$Sa?ꍫ0zeN\6~ +FZ @rqbrR]Y-41*gW‘E\tL [E*Îݘ+ܠր٫0ݧ.4(SuR[+:m(5*83)DZ4u~DS#Ȧd#qt 7|LOjΊM>&SݍM +'ɨ`]lOeѡuF +ޅWKl5l L( Dn@VدufG]O9fDIHSݸ"3<՞eF-;.M&vHK0Un)|=\Z-TkAqqw,Шs݀jq6 ^nTI{#`m9;C!Gk \+uN!s6 q,APx )ڑI1dsT;⋈i%"η RB|R"SGJrwWp(h(d`] n^jfX3,ٵ}^`@j_?.1X:B P{!RW Mn>n怓E/SD}L,} + I}>^ g D3,_,SV)Ѣo=v ++06aY(JA#QaEw[BZїZE"+\d7pHA)X 4/< nAx7ej-1QԵ?۴) vHI]0r㾉Q>"PpEp݀}j Zbbp@>{m AD袎R0d'(7-Zdj4Ի6uRS,hGʎj7~5  E[x65f~q \+{0|3 ^}`U0xE9/FK"|dhY~)'_neԽ{=#k_>Gmj%n(som);:77G{gGBGOorw' {~KOyɵ֦YjtֽL^e7MS|~,X@9&_~j]y/7GG7sv=r}%|=7/;D7OOgg /M*Sg,.6?K/Gޣsom\&Y_c^s?GDQ~rO5Q{@9wy5oOO{~ͭ,r{s.wMGQb~{oYzDя~Mwi&764Ks{oss<4hR^{_h>9/Fb|oG7{@XFue{9zzy7hby~4uY]g,;?rs^w{?9~{t@Pyt{җ,GO9?QQ=Ͳe797=9קޅ.Mmv5/]wk4DO4>ܥh-'y/ |w?܏Tij|soF~hOk_<6͎޹ߦ5}v?z}5󏢿s><=%ϳ|ktf??/Y{6KG̣Ay;7Y('omj*羛h/<ɷǿ=˲%ܛ_w|]kD?QQ5/uQA?,~{^绛D{Oݵ?Kͻ剞i.Qw,QͲ|4]>};ڷڟ]_n~n}f7EsR9,}%:קKnzz4a߅}%urO\fp#hS(ZƆN*NȨ۷FSnd)-\ 0`H6Hm=.XJ=A݀vk3nai nFC3Az-(n S]ND<3My׿MCGXl̕ޚGU]l`Hȷ`&OuwkxE ûCٜkI'RpQkӵGDrHňPp!N%97qW :ƟF>ZՖ䢣 +Hȥ3yi*r(");=f}vCb"Ԟvo,+%F JxDù0bfFd  $lP* +h>*NDL*2DHƁ aA!RdU YwJ\I.]j+%+N( *Ex.OfAe`ҒY68}Q؆Rq_m>O02N%cZ1Tm-`Y (v4 +_z!iu2+Tg? l;e86k4xcO +ߤFZc7D:*uik~j s7`FhH\4r&R;U6j(Ӻ2-.$f3tKD56 <O]J(ׯH~`ڐE%Ԅ,άwŋ}Ҷ8y瑖ٌ"rjS iM9)'Iz̼KE?LVSRx_ɷt5b%W cusjȧeP3gVHkD?GRd^Ю=I?6Uvw p30ơea4yiAMԤJ]wτCa– IQL`c6Ab| 4iV r󇬔%q'H* +pOm?8 hv㑧cZQûyFЊЅ06Own +;/E/x&60Ռ)E{UmR~4ڍL gb~Z&3\q_L>=CFU_IP-˞[ˠq{SF"8D \( q\x1ޭg$@<"ѺU`_ɩ`~ڠAH%%>lۥ{9m'yF1{MQ9LTL7 v1jhz*m1U̧tGԈK B;'Ud{r8+]̴X;QeaNLcj-盟"b7*l0]U)ȸ!opǰB_js5c#sXS8Nص|{Fx#3*sYiAXUek!.$l4,+j$ZѪ52[݉VeSLZ]]c(3N'LEyVQI̚ TӸCGw'yQYG7^Hk̀"veB"s'%g2dwNZ-ԏ[ :(imx/mI~C5=Uz5nx.3/X"<D`}1o~JI;Ozq8;8˜g|26B9G6TPcfz\^6њS'qߝ'+Ҙsi9yښ# E:/uy3=ivqAb/ʦfGp4 mT,%h]/}V s4ut2Zڶ["'ExpɸÓ 6}a>Ŝ͕C/Rt"Kټߞ4ڵZ!k1kUCG[jHX͔e=]- 94sGEiY.yw|QW`юD>(DGk%m`.Q2a:=#2]|| bny +]BCˊ22lG=@a89h4T[8>5CAi#sbDk4-qѨC+Za4ĶS/O\8nǷJ[k2(i&JWa@H!65Ce,h7-â?r yȗUmaŹ]wo${mw:`s",fԤ4ܩ.v$=wZ\oW+s݌`Djh䝮ceC{8t ֪'O+֮k"/Ea}֗?  -꡿n@0XID.qB:dU,goZoe۴\lT]*n^~ 04:_ْȬ/ɢ{*,vnB*j H<p )t >ժ,ДGW#|p̬6Եe.pȞzoMcy?zt?yn.8#=Tv`3#A~Vn]LAL? +ɚ/. vݎ"0τ|`` ]rY=dse *tWzNRHWt(38ڄB27( *61KMvkL䚷c)@i kA2OVČKx9!:!,4pB |st"u0taz0)ZÔm-g0'y ^ډ`XL V9=vD$Ʃ6G`X~UU[c9H&N>w~pjƂ!+b$6t"NjTuBD(x[m g7Ҧf0D[6,;!@9 +!Z^C~z_cuLgx3jF?<%Խ=x2<@ΡY hQl2)R1S?G` ЂP`KT&sC|\QhB[D:9b:`qK"k +FoDjw/g%!UvKw\YMN9+T\`$+YT@﫟yI!3g#OpxP%>Kؑ.J!NAobYC\T>E3`9~$x଑6Hu8:8ob-x18ѧtu4]S٪1\o4d֦>f /PИrRJ&%5lU*Ldgi03HA.Abq)}5겕"Te(.eK) <$qwHG6){&npyXp(uCd[ mQg, sU Fs0:@y7E _qFG34ވj?0*LƨTG cdԪ\TAgԹ/^(Q  n$ ph!߿CfԥI> +"FmĕV+Ĩ69Q!RlQa!DŽUyIvĨr9FVU؀0jjtY3jQ\*9IQ:)ضĨKdq3fERDrmj[}u49\+~*t&hJ8#!d.ޤA|ArSuebda>B.{~a.hkdiH՚AM6V\iȕm5vdt+7ڗ+wVLޘ4aie@eNJSF,OyFhݼ0Јr M$*.$gW;%{pfAn8_2ljƯG]%rp| 8r ȖoY|Gz͝J,qYd[dN-csڴZ ~hWHz:T^R8'j%S+?|Vp$O!e &ft59[^a@J!bnׁšz;zrOB0=zK;12i4"9 hq{T̡ۖ0/`Abay; QFi ObH;w#&48$[& w*_fNr4SaD)+'&/lMlas&e8{PI_cݥ ʏ9 Pu1g\s~o9Ltz4/K̍J;;Lv%UjҴ G`99c0kM0wަS_$PPZ-ԃO}ߠQqS 1/7dA[V BGėgCJ΍2+Ƣ!= ^E tJr^; q;u~K)@xm] ow]uмS;֜sLqi1?8@_e&f+%+W$ ̇I8Ydi FKV~uA}5bV4xmd7&.'I@"J}0OA{R.q{ KnM&T5%n4!32}0B_7z~f1av|EHIj"&KrYǂ $i bx2|u*hiscobYjPD$ͱ##|TlBi 2D#X'D{_h1}ALY 31,"z(ƾȚRa;YU8ƚ_eHˁo%ܗ6ZxmNZe'w[bb3FĴ;%εgv'8LfƜOܴ˜|gubG'DzGh"@s~mg"+~Ӱ!򁐈0L@j'Ac_XG +BcR 7D\!zr% ^lF;IX$Gi-S e\a؟΄_icefs +mARЃ+)%u/|O >( >/c^߅H5V)<}0') &>gqp_|zpVWs Ӌ_/wެVƝ/G =X ?&Le%mѡ*@Oا$8rԍ 1P'^ICM˩&OC{C 1z/DM? i<pԗLn5]m-Xpo!#bߋ^40Ygxӳ̇@oN/!I-f_F%un}0K2 +a+E&hz lj.vR=?^4 +qZ09LNLc䥣]MۢҠgv#|)ylo)_G3 3 a|o9]9o| Io<ڦ>kۙoey, YQVn }n]|n|hJ̸V-МBj+}h%]bF],^2L"{ >_O(` EYRQG,V@䅼$>8p)b("hԈqn-jX*y1/o ajwom!$6b]"#jSD6?Oh[EKKOv@4f0DzilX?Lt+Q.sn*]Tr`iK'7_n+[YiktJ0HfFU)l)u|.qZ ~߾VQ(ʑ`ES͎D4'j#~)4?p +P5+7dWj$P&\;10œ.m?=WV+S1 z}yvNg2[b M9 ŤgɣUa|]7N7JH@b&1)u]VKLQVa%m1 %&EgtgE CI qwFs1 +*0z*;HM+ߤmQUĩ93V&cJL9T@lD=2.O@ 3tdžnM-c1pb=nVeԆbD6honm}ўk=@IXi7T~ s(xڻj#~ޓ/*?8 sG!s P6Lh'%k|iQZw-2^;sL^32̏K l F> rOD\KhذQ/u);( : FNj[""i^(OJI zdDB0 *:ķ|Cz}qцGdžbm_0@( L(v+\U*[P"Z1=* kNpH.ނCOid{3^˒]T 1DvBB1dG bdq2&G +5U'xaVx]՘ճUd+7Jɸ Z2V[ԭiNQV֝M/:>BT30Ǧݧ ATTH٥Ί|4àYUloۄ*.AKY5΅w=?rK;,wtW2zVȡF@%K:t5)a%P[ 4H]a@Jxo XZiVHO(p;$ +-y D /[u$G[97D YbQӫ V_Tk$@2yVUL*آ%8рT Nh?c8+݈A w:/07^3`g:qKF1R`;y$ĪYL~9)~#ӕ&2>4 xy" Vdv8/\*-=FzCfT+Bm`P5ӀY6fs}jYzt&j`-ى Nڧɪ޵+UKtPPj\K#rEڋRufimdAl~?N*Z$cPgh\%;)aSܡJiI.T:X`"zR-B+v4#8^r1Y 8`ƴ<r67^O`}w80)15=s7>H]_۲H.$_09yy*@!HX RhS7u<Tlda v6[ Ij^ +OK0w5l02ɵ]^(cc;-o$ȡ5 6l4Tij~aP%\]պLI5,hVb;uWؚ_,WԵhҕ (9n%k+<SAӦD ZBuP;x^q6=mՑHV񛨷&x][?*ϟ%OI]gWaKpbSrtmC>w+b9 +o + c9d;u@Z^A8T!\⑬SrFE, Y9:|pu8o1*kN1*4Ґ1B!!YFi3q+9">d*I +`.UH-L.>8V$!huQcp4Bn"@n6x*gSbqX @`QI)| l Lq݉ W\ґ5? ZsMS10|rl!$jHypq ǰ܆cądJػ97ZTG1,;{@kMY;.=Mb?v|z']8)M0rGݣ`titB*(csȬd8hEݪhh5i"2[!\7+B2F2d)P7Wvy=E[G+ 6ϧRi97/`o!嘺v f4'=|+hs=3zKNz_)$藒#!G6P4q/4J*T?du +ф"؋~ɽIԅ7r`W2zӼi؁=q5o +%=k%)[u&~uDOqEN9eIQ`RTI +oge!$sY駈ݞX'iD{B/O0BSmQn{Q47_pDtX#\B`&lf:%]nkR8(x.alg:hq]>a; gumA`Ђ+qfDA`RuYVt.+%荺TE'r72]KہϿ1Ģ& N @Dɣ]y2) +GWewƣFR Bbt(/S&+|APP24܂J_{ۨoA}]H_ʡ6!..3\C@㉣/DOg(F)rցU|d#opˮO0x%Ad2f<>9XHTi|u\/iq Ot2_1I jDJ8$9ʚdvD"8_#SX\|lc&Bd +QD[a3 .. +-TT:E2X0cif ,pX +cѵCVaw$rCgGbz O>gD{L(ܙIZ"R| Lڕ= _+1!-%s,  +` 45jF]ڍ0HHQY'P $F{} "X1B\uOİ>\s쨴g!<6f>E!碖I{m g9ׅ6ϔN17DKdF: ohN!G^$>Us>7-@rCNVIfm&:}V`֡D{ uP*xkNJ3@=u?tNaf>`P,eٽsv)C +g;"j#0\i{!o7$Ȥrh +DhffP͝ΔO; +Uh!z2Dszu~!sVpLY~8퍜-^tA/>\Q`GO Xհ, +E_=ˋ+Xm^iaP$pJM3 X9ԩ'em{5 DTZE@5apP~jI1©ț04H[ʪ H5n-vV)C`jָ(jRN +PP) + +ǟ^wJԑ(-d;'?di/+ >aa1y{`XRi5@"%YlBB E"<}2{@k@3D}zIO=u`0̵M7BcMx^PŨwpҠ' SP)mOP3mk"4y@Az 3B= +z$YO`Dh'pb:cI@Nٵsá&/)ItvX$$s<7ڇ7wd 8ZAO9=S4% *Y9O33.ݜo@M4Zpɉꥴ䌦ꨐ4쮃GCMnRT^dz + ӂ1<Bxg0M?FWt w`&(D6xYY,JzQ_*!'''?Oe5\kVwkARI*A&iD\ܞ! M>*,cM8Я4ҭ (TrPBР\H$K)71TIޙ> gGkπLشT{Q+x7qi7+(4@`;[/>?D`I @g^RP( (qB +E 5_& 7ݪwP*?O67A$$`&uVD)&|>4A9܇8G I@ ^{7* uS@na\cDQP̲dMTN;-=RDj]s_5/-1MF C>R\[KȄƕCT^`={ȼ>Q,j)do?e7o;HO +z_%Wx`6O8hچ@; 숻&$i ._xߦ+Ejv#\qPx=_Т47F7!{&10+m5?f8\1'Hw6,C-hNF+\rH-j &;xs"N6ϣ8kX ٫P-0Erƽ'O +f< [0 +d)ΙB*{Ρr*tێ8K2iYz&[@쫁C?6F_8`Yk.`b<] ]Kf}\F1yi~;07ļѕ pM[˩!)-PlSa {E<İ vM"'Ѵ ͻo>r%f!.vm2MZd~NjY3A{^AZ!Bƣ g2`⚥-26 +w8 +endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 26 0 obj [/View/Design] endobj 27 0 obj <>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <>>> endobj 22 0 obj [/View/Design] endobj 23 0 obj <>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 42 0 obj [41 0 R 40 0 R 39 0 R 38 0 R 37 0 R] endobj 68 0 obj <> endobj xref +0 69 +0000000004 65535 f 0000000016 00000 n -0000000193 00000 n -0000050662 00000 n +0000000263 00000 n +0000052288 00000 n +0000000000 00000 f +0000360264 00000 n +0000360334 00000 n +0000360404 00000 n +0000360474 00000 n +0000360544 00000 n 0000000000 00000 f -0000053324 00000 n -0000053394 00000 n -0000053464 00000 n -0000053534 00000 n -0000053604 00000 n -0000351801 00000 n -0000050714 00000 n -0000051136 00000 n -0000054367 00000 n -0000054254 00000 n 0000052340 00000 n -0000052762 00000 n -0000052810 00000 n -0000054138 00000 n -0000054169 00000 n -0000054022 00000 n -0000054053 00000 n -0000053906 00000 n -0000053937 00000 n -0000053790 00000 n -0000053821 00000 n -0000053674 00000 n -0000053705 00000 n -0000054441 00000 n -0000054696 00000 n -0000055971 00000 n -0000121560 00000 n -0000187149 00000 n -0000252738 00000 n -0000318327 00000 n -0000351849 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000361078 00000 n +0000361109 00000 n +0000360962 00000 n +0000360993 00000 n +0000360846 00000 n +0000360877 00000 n +0000360730 00000 n +0000360761 00000 n +0000360614 00000 n +0000360645 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000056114 00000 n +0000055179 00000 n +0000055250 00000 n +0000055321 00000 n +0000055392 00000 n +0000055463 00000 n +0000361194 00000 n +0000052807 00000 n +0000057828 00000 n +0000057715 00000 n +0000054187 00000 n +0000054617 00000 n +0000054665 00000 n +0000055998 00000 n +0000056029 00000 n +0000055882 00000 n +0000055913 00000 n +0000055766 00000 n +0000055797 00000 n +0000055650 00000 n +0000055681 00000 n +0000055534 00000 n +0000055565 00000 n +0000056407 00000 n +0000056702 00000 n +0000057902 00000 n +0000058157 00000 n +0000059671 00000 n +0000125260 00000 n +0000190849 00000 n +0000256438 00000 n +0000322027 00000 n +0000361247 00000 n trailer -<]>> +<<196BBE183DA3F8489DF09FFAFB9C2A6A>]>> startxref -352030 +361428 %%EOF diff --git a/buch/papers/ifs/teil0.tex b/buch/papers/ifs/teil0.tex index 833748c..af2105e 100644 --- a/buch/papers/ifs/teil0.tex +++ b/buch/papers/ifs/teil0.tex @@ -5,7 +5,7 @@ % \section{Einleitung \label{ifs:section:teil0}} \rhead{Was ist ein Iteriertes Funktionsschema} -Mit der Hilfe von Iterierten Funktionsschemata (IFS) kann mit nur wenigen affinen Funktionen, komplexe Bilder beschreiben werden. +Mit der Hilfe von Iterierten Funktionsschemata (IFS) können mit nur wenigen affinen Funktionen komplexe Bilder beschrieben werden. In der Regel sind diese Bilder Fraktale. Wie es dazu kommt, und wie man mit IFS auch Bilder komprimieren kann, wollen wir in diesem Kapitel untersuchen. diff --git a/buch/papers/ifs/teil1.tex b/buch/papers/ifs/teil1.tex index a75b529..7ce546a 100644 --- a/buch/papers/ifs/teil1.tex +++ b/buch/papers/ifs/teil1.tex @@ -7,29 +7,27 @@ \label{ifs:section:teil1}} \rhead{Problemstellung} Bevor wir die IFS ansehen, schauen wir uns Fraktale genauer an. - - Über die genaue Definition von Fraktalen sind sich die Mathematiker nicht einig. -In diesem Kapitel orientieren wir uns an den Eigenschaften welche Kenneth Falconer in seinem Buch Fractal Geometry \cite{ifs:fractal-geometry} beschreibt. +In diesem Kapitel orientieren wir uns an den Eigenschaften, welche Kenneth Falconer in seinem Buch {\em Fractal Geometry} \cite{ifs:fractal-geometry} beschreibt. Von einem Fraktal $F$ können wir folgende Eigenschaften erwarten: \begin{enumerate} \item $F$ hat eine unendlich feine Struktur \item $F$ kann nicht mit der klassischen Geometrie beschrieben werden. \item Oftmals hat $F$ eine Form von Selbstähnlichkeit. - \item Die 'fraktale Dimension' ist grösser als die topologische Dimension + Man spricht von einer selbstähnlichen Menge, wenn sich diese Menge überdecken lässt mit echten Teilmengen, die zur ganzen Menge ähnlich sind. + \item Die `fraktale Dimension´ ist grösser als die topologische Dimension \item Viele Fraktale lassen sich auf eine simple Art definieren. Es genügen zum Beispiel nur wenige Funktionen, welche rekursiv ausgeführt werden, um ein Fraktal zu definieren. \end{enumerate} \subsection{Koch Kurve \label{ifs:subsection:lilkoch}} Diese Eigenschaften möchten wir nun am Beispiel der Koch Kurve näher anschauen. -In Abbildung \ref{ifs:kochkurve8} sehen wir die Koch Kurve. Sie besteht aus lauter kleineren Kopien von sich selber. -Den Konstruktionsvorgang ist in Abbildung \ref{ifs:kochconst} dargestellt. +In Abbildung \ref{ifs:kochkurve8} sehen wir die Koch Kurve. Sie besteht aus lauter kleineren Kopien von sich selbst. +Der Konstruktionsvorgang ist in Abbildung \ref{ifs:kochconst} dargestellt. Gestartet wird mit einer einzelnen Strecke der Länge $a$. Diese wird in ersten Schritt durch vier gleich langen Streckenabschnitte der Länge $\frac{a}{3}$ ersetzt. In \ref{ifs:kochconstb} ist die Anordnung dieser vier Streckenabschnitte ersichtlich. Dieser Schritt wird nun für jeden der resultierten Streckenabschnitten wiederholt. Die Kurve besteht also aus vier kleineren Kopien der ganzen Kurve, was auch unter Selbstähnlichkeit bekannt ist. -Man spricht von einer selbstähnlichen Menge, wenn sich diese Menge überdecken lässt mit echten Teilmengen, die zur ganzen Menge ähnlich sind. \begin{figure} @@ -66,7 +64,7 @@ berechnen. In jedem Schritt wird die Länge um den Faktor $\frac{4}{3}$ verlängert. Daraus resultiert, dass die Länge gegen $\infty$ divergiert. -Die Fläche unter der Kurve lässt sich folgendermassen berechnen +Die Fläche der Kurve lässt sich folgendermassen berechnen \begin{align*} A_0 &= 0 \\ A_1 &= \left( \frac{a}{3}\right)^2 \frac{\sqrt{3}}{4} = a^2 \frac{\sqrt{3}}{36}\\ @@ -88,14 +86,14 @@ Wie wir sehen ist die Koch-Kurve ein Objekt mit endlicher Fläche, aber unendlic Zu guter Letzt bestimmen wir die Dimension der Kurve. Es gibt viele verschiedene Methoden die Dimension zu definieren. Diese können dann auch unterschiedliche Resultate liefern. Vor allem im Zusammenhang mit Fraktalen findet man in der Literatur unterschiedliche Arten. -In diesem Beispiel werden wir die Ähnlichkeits-Dimension \cite{ifs:fractal-geometry}. +Da die Kochsche Kurve selbstähnlich ist, ist die Ähnlichkeits-Dimension \cite{ifs:fractal-geometry} die angemessene Messzahl für die Dimension. Die Ähnlichkeits-Dimension $D$ ist das Verhältnis der Logarithmen der Anzahl Kopien $N$ des Originales und deren Skalierungsfaktor $\epsilon$ \begin{align*} D = - \frac{\log N}{\log \epsilon }. \end{align*} -Mit ihr kann man einfach die Dimension selbstähnlicher Mengen bestimmen. -Als Beispiel nehmen wir ein gleichseitiges Dreieck. Dieses besteht aus $N = 4$ Kopien mit halber ($\epsilon = 1/2$) Kantenlänge $l$, Abbildung \ref{ifs:trinagle}. +Die Ähnlichkeits-Dimension stimmt für viele gewöhnliche Geometrische Objekte mit der intuitiven Vorstellung von Dimension überein. +Zum Beispiel besteht ein Dreieck aus $N = 4$ Kopien mit halber ($\epsilon = 1/2$) Kantenlänge $l$, Abbildung \ref{ifs:trinagle}. Somit hat das Dreieck die Dimension $D = 2$. Die Koch Kurve besteht aus $N = 4$ Kopien mit Kantenlänge $\epsilon =l \cdot 1/3$. Ihre Ähnlichkeits-Dimension ist somit @@ -103,7 +101,7 @@ Ihre Ähnlichkeits-Dimension ist somit D = - \frac{\log N }{\log \epsilon } = - \frac{\log 4 }{\log 1/3 } \approx 1.2619. \end{align*} Wie wir nun sehen besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen. -Dies muss jedoch nicht bei allen Fraktalen der Fall. Sonst wäre die Frage nach einer 'richtigen' Definition einfach zu beantworten. +Dies muss jedoch nicht bei allen Fraktalen der Fall sein. Sonst wäre die Frage nach einer 'richtigen' Definition einfach zu beantworten. \begin{figure} \centering \begin{tikzpicture} diff --git a/buch/papers/ifs/teil2.tex b/buch/papers/ifs/teil2.tex index fd10634..49c1cf3 100644 --- a/buch/papers/ifs/teil2.tex +++ b/buch/papers/ifs/teil2.tex @@ -6,8 +6,9 @@ \section{Fraktale mit IFS \label{ifs:section:teil2}} \rhead{Teil 2} -Wollen wir nun eine bestimmte Art anschauen, wie man Fraktale machen kann. -Zur Veranschaulichung dieser Methode nehmen wir das Sierpinski Dreieck. +Wollen wir nun eine bestimmte Art anschauen, wie man Fraktale erzeugen kann. +Im Beispiel auf Seite \pageref{ifs:trinagle} haben wir ein Dreieck aus 4 skalierten Kopien zusammengefügt. +Lässt man die Kopie im Zentrum des Dreiecks weg, entsteht die Grundlage des sogenannten Sierpinski-Dreieck, Abbildung \ref{ifs:sierpinski10}. \begin{figure} \centering \includegraphics[width=0.5\textwidth]{papers/ifs/images/sierpinski} @@ -92,20 +93,21 @@ Man kann sogar noch einen Schritt weiter gehen, und sagen: Wenn wir die Funktion \label{ifs:sierpconst} \end{figure} Im Beispiel der Abbildung \ref{ifs:sierpconst} sehen wir, wie das Bild nach jeder Iteration dem Sierpinski-Dreieck ähnlicher wird. -Der Abstand zum Original wird immer kleiner, und konvergiert gegen null. +Der `Abstand´ zum Original wird immer kleiner, und konvergiert gegen null. \subsection{Iterierte Funktionensysteme \label{ifs:subsection:IteratedFunktionensysteme}} In diesem Abschnitt wollen wir die Erkenntnis, wie wir aus einer beliebigen Menge ein Sierpinski-Dreieck generieren können, verallgemeinern. -$S_1,\dots,S_n$ sind Kontraktionen auf die Menge $D \subset \mathbb{R}^n$. Es gilt +$S_1,\dots,S_n$ sind Kontraktionen auf der Menge $D \subset \mathbb{R}^n$. Es gilt \begin{align} |S_i(x) - S_i(y)| \leq c_i|x - y| \end{align} für jedes i mit einem $c_i < 1$. -Der Banachsche Fixpunktsatz besagt, dass für solche Kontraktionen ein Eindeutiges $A$ existiert, für das $S(A) = A$ gilt. +Der Banachsche Fixpunktsatz besagt, dass für solche Kontraktionen ein Eindeutiges $A$ existiert, für das $S_i(A) = A$ gilt. Den Beweis kann man in \cite{ifs:Rousseau2012} nachlesen. + Hat man nicht nur eine sondern mehrere Kontraktionen, dann existiert eine eindeutige kompakte Menge $F$ für die gilt \begin{equation} F = \bigcup\limits_{i = 1}^{m} S_i(F). @@ -125,7 +127,7 @@ Diese Menge ist auch als Attraktor eines IFS bekannt. Der Beweis für die Existenz eines eindeutigen Attraktors ist in \cite{ifs:fractal-geometry} beschrieben. \subsection{Beispiel: Barnsley-Farn} -Der Barnsley-Farn, Abbildung \ref{ifs:farn}, ist ein Beispiel eines Fraktal, welches mit einem IFS generiert werden kann. +Der Barnsley-Farn, Abbildung \ref{ifs:farn}, ist ein Beispiel eines Fraktals, welches mit einem IFS generiert werden kann. Wie man schnell erkennen kann, besteht der Farn aus Blättern, welche eine grosse Ähnlichkeit zum ganzen Farn haben. Die vier affinen Transformationen \begin{align} @@ -183,22 +185,22 @@ Die vier affinen Transformationen \begin{pmatrix} 0 \\ 0.44 - \end{pmatrix}\\ + \end{pmatrix},\\ \label{ifs:farnFormel} \end{align} -, welche für die konstruktion des Farns benötigt werden sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt. +, welche für die Konstruktion des Farns benötigt werden sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt. Das gesamte Farnblatt ist in der schwarzen Box. -Auf diese werden die Transformationen angewendet +Auf diese werden die Transformationen angewendet. $S_1$ erstellt den Stiel des Farnblattes (rot). -Die Transformation bildet das Gesamte Blatt auf die Y-Achse ab. +Die Transformation bildet das gesamte Blatt auf die $y$-Achse ab. $S_2$ (grün) erstellt den Hauptteil des Farnes. Sie verkleinert und dreht das gesamte Bild und stellt es auf das Ende des Stiels aus $S_1$. -$S_3$ bildet das gesamte Blatt auf das blaue Teilblatt unten Links ab. +$S_3$ bildet das gesamte Blatt auf das blaue Teilblatt unten links ab. $S_4$ spiegelt das Blatt und bildet es auf das magentafarbene Teilblatt ab. \subsection{Erzeugung eines Bildes zu einem IFS} Es gibt zwei verschiedene Methoden um das Bild zu einem IFS zu erzeugen. Die erste Methode ist wahrscheinlich die intuitivste. -Wir beginnen mit einm Startbild, zum Beispiel ein Schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab. +Wir beginnen mit einem Startbild, zum Beispiel ein Schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab. Das neue Bild, dass entsteht, ist die nächste Iterierte. Dieses wird wieder mit den Transformationen abgebildet. Wir wiederholen den letzten schritt, bis wir zufrieden mit der neusten Iterierten sind. @@ -213,10 +215,11 @@ Bis jetzt wurde immer davon gesprochen, die Transformationen auf die gesamte Men Bei komplizierteren IFS welche viele Iterationen brauchen, bis man den Attraktor erkennen kann, ist die erste Methode ziemlich rechenintensiv. Beim Chaosspiel werden die Transformationen nicht auf die Menge angewendet, sondern nur auf einen einzelnen Punkt. Der Startpunkt kann dabei ein beliebiger Punkt in $E$ sein. -Es wird bei jedem Iterationsschritt nur eine Transformation, welche zufällig gewählt wurde, angewendet. +Es wird bei jedem Iterationsschritt nur eine Transformation $S_i$, welche zufällig gewählt wurde, angewendet. + Da, wie wir beim Barnsley-Farn gut sehen, nicht jede Transformation gleich viel des Bildes ausmacht, werden diese beim Chaosspiel gewichtet. -Je mehr eine Transformation kontrahiert, desto weniger Punkte braucht es um die resultierende Teilabbildung darzustellen. -Im Fall des Barnsley-Fern wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3 \& S_4$ in $7\%$ der Iterationen ausgeführt. +Je mehr eine Transformation kontrahiert, desto weniger Punkte braucht es, um die resultierende Teilabbildung darzustellen. +Im Fall des Barnsley-Fern wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3$ und $S_4$ in $7\%$ der Iterationen ausgeführt. Wir sehen auch in Abbildung \ref{ifs:farncolor} gut, dass der rote Stiel, $S_1$, einiges weniger Punkte braucht als der grüne Hauptteil des Blattes, $S_2$. In Abbildung \ref{ifs:farnNoWeight} wurden die vier gleich stark gewichtet. diff --git a/buch/papers/ifs/teil3.tex b/buch/papers/ifs/teil3.tex index 78fb935..1d39c6f 100644 --- a/buch/papers/ifs/teil3.tex +++ b/buch/papers/ifs/teil3.tex @@ -6,32 +6,30 @@ \section{Fraktale Bildkomprimierung \label{ifs:section:teil3}} \rhead{Fraktale Bildkomprimierung} -Mit dem Prinzip dieser IFS ist es auch möglich Bilder zu Komprimieren. -Diese Idee hatte der Mathematiker Michael Barnsley, welcher mit seinem Buch Fractals Everywhere einen wichtigen Beitrag zum Verständnis von Fraktalen geliefert hat. +Mit dem Prinzip dieser IFS ist es auch möglich, Bilder zu komprimieren. +Diese Idee hatte der Mathematiker Michael Barnsley, welcher mit seinem Buch {\em Fractals Everywhere} einen wichtigen Beitrag zum Verständnis von Fraktalen geliefert hat. Das Ziel ist es ein IFS zu finden, welches das Bild als Attraktor hat. In diesem Unterkapitel wollen wir eine Methode dafür anschauen, wie sie in \cite{ifs:Rousseau2012} beschrieben ist. Es ist wohl nicht falsch zu sagen, dass Ähnlichkeiten zur gesamten Menge, wie wir sie zum Beispiel beim Barnsley Farn gesehen haben, bei Bilder aus dem Alltag eher selten anzutreffen sind. Ein IFS, wie wir es in \ref{ifs:subsection:IteratedFunktionensysteme} definiert haben, wird uns also nicht weiter helfen. -Die Lösung dazu sind Partitionierte IFS (PIFS) \cite{ifs:pifs}. +Anders sieht es mit Partitionierten IFS (PIFS) \cite{ifs:pifs} aus. In \ref{ifs:transformation} wurde definiert, dass die Kontraktionen $S_i$ bei IFS auf die gesamte Menge $E$ angewendet werden. Bei einem PIFS wird der Attraktor in disjunkte Teilmengen aufgeteilt. Für jede dieser Teilmengen $R_i$ braucht es dann eine grössere Teilmenge, welche mit einer affinen Transformation eine zu $R_i$ ähnliche Menge bildet. -Wir müssen nicht mehr Ähnlichkeiten zum ganzen Bild finden, sondern zwischen Teilen des Bildes. +Wir müssen nicht mehr Ähnlichkeiten zum ganzen Bild finden, sondern nur zwischen Teilen des Bildes. Doch wie finden wir das PIFS, welches das Bild als Attraktor hat? -\subsection{das Kompressionsverfahren +\subsection{Das Kompressionsverfahren \label{ifs:subsection:malorum}} Wir beschränken das Verfahren für Graustufenbilder. Wie das Verfahren für Farbbilder verwendet werden kann, wird später erläutert. -Ein Graustufenbild kann man als Pixelraster mit einer x und y Achse verstehen. +Ein Graustufenbild kann man als Pixelraster mit einer $x$ und $y$ Achse verstehen. Jedem dieser Pixel wird ein Grauwert zugeordnet. -Ein Bild ist also eine Funktion, die jedem Pixel einen Grauwert $z$ zuweist -\begin{align*} - z = f(x,y). -\end{align*} +Ein Bild ist also eine Funktion, die jedem Pixel einen Grauwert \(z = f(x,y)\) zuweist. + +Wir suchen ein PIFS, welches das zu komprimierende Bild als Attraktor hat. +In einem ersten Schritt teilen wir das Bild in disjunkte benachbarte $b \times b$ Pixel-Quadrate auf. Diese Blöcke nennen wir Range-Blöcke der Menge $R=\{R_0,R_1,...R_m\}$. Diese sind als Raster im rechten Bild der Abbildung \ref{ifs:FIC} dargestellt. -Wir suchen ein PIFS welches das zu komprimierende Bild als Attraktor hat. -In einem ersten Schritt teilen wir das Bild in disjunkte benachbarte $b \times b$ Pixel-Quadrate auf. Diese Blöcke nennen wir Range-Blöcke der Menge $R=\{R_0,R_1,...R_m\}$ Im nächsten Schritt teilen wir das Bild in alle möglichen $2b \times 2b$ Pixel-Quadrate auf. Diese sind die Domain-Blöcke der Menge $D = \{D_0,D_1,...D_n\}$. Im dritten und letzten Schritt wird für jeden Range-Block $R_i$ ein Domain-Block $D_j$ gesucht, welcher ihm am ähnlichsten ist. Zwei Beispiele wie solche Domain-, und Range-Block Paare aussehen können, sehen wir in Abbildung \ref{ifs:FIC} @@ -57,8 +55,10 @@ Zuerst brauchen wir die Transformation g_i \end{pmatrix} \end{align*} -um ein Element aus $D$ auf ein Element von $R$ Abzubilden. -Wenn wir die Grauwerte ausser acht lassen, haben wir die affine Abbildung +um ein Element aus $D$ auf ein Element von $R$ Abzubilden. +Das bestimmen der besten Transformation kann man in drei Schritte aufteilen. + +\textbf{Schritt 1: }Wenn wir die Grauwerte ausser acht lassen, haben wir die affine Abbildung \begin{align} t_i(x,y) = \begin{pmatrix} @@ -84,38 +84,46 @@ Wir sind auf folgende acht Abbildungen beschränkt: \item Spiegelung an der vertikalen, horizontalen und den Diagonalachsen. \end{itemize} Da wir ein $2b \times 2b$ Feld auf ein $b \times b$ Feld abbilden möchten, müssen wir zuerst $G_j$ um $1/2$ skalieren. -Dies erreichen wir, indem wir alle disjunkten $2 \times 2$ px Blöcke mit einem Pixel des Grautones deren Mittelwertes ersetzen. +Dies erreichen wir, indem wir alle disjunkten $2 \times 2$ Pixel Blöcke mit einem Pixel des Grautones deren Mittelwertes ersetzen. - -Die Parameter $s_i$ und $g_i$ beschreiben die Änderung des Grautones. $s$ verändert den Kontrast und $g$ verschiebt die Grautöne auf die richtige Helligkeit, sie bilden die lineare Funktion +\textbf{Schritt 2: }Es muss nicht nur eine geometrische Abbildung, sondern auch eine Abbildung für die Grautöne gewählt werden. Letztere lässt sich mit den Parametern $s_i$ und $g_i$ beschrieben. +Wir suchen einen linearen Zusammenhang zwischen den Grautönen des Domain-, und Range-Block. $s_i$ verändert den Kontrast und $g_i$ verschiebt die Grautöne auf die richtige Helligkeit, sie bilden die lineare Funktion \begin{align*} z' = s_i z + g_i. \end{align*} Für die Bestimmung dieser Parameter führen wir zuerst die Bildfunktionen $f_{R_i}$ und $\tilde{f_{R_i}}$ ein. -$f_{R_i}$ ist die Bildfunktion des Range-Blockes $R_i$ und $\tilde{f_{R_i}}$ ist die Bildfunktion des zuerst Skalierten und dann mit \ref{ifs:affTrans} transformierten Domain-Blocks $D_j$. +$f_{R_i}$ ist die Bildfunktion des Range-Blockes $R_i$ und $\tilde{f_{R_i}}$ ist die Bildfunktion des zuerst skalierten und dann mit \eqref{ifs:affTrans} transformierten Domain-Blocks $D_j$. -Wir suchen $s_i$ und $g_i$ so das +Wir suchen $s_i$ und $g_i$ so das der quadratische Abstand zwischen \begin{align*} - f_{R_i} = s_i \tilde{f_{R_i}} + g_i = \bar{f_{R_i}}. + \bar{f_{R_i}} = s_i \tilde{f_{R_i}} + g_i \end{align*} -Die Parameter lassen sich mit +und $f_{R_i}$ am kleinsten ist. +Dies ist ein klassisches Problem der linearen Regression. Die Parameter lassen sich mit \begin{align*} - s = \frac{\operatorname{cov}(f_{R_i}), f(\tilde{f_{R_i}}))}{\operatorname{var}(\tilde{f_{R_i}})} \\ - g = E(f_{R_i}) - s E(f(\tilde{f_{R_i}})) + s_i = \frac{\operatorname{cov}(f_{R_i}, \tilde{f_{R_i}})}{\operatorname{var}(\tilde{f_{R_i}})} \\ + g_i = E(f_{R_i}) - s E(\tilde{f_{R_i}}) \end{align*} berechnen. +Die Varianz und Kovarianz erstrecken sich über die Grauwerte der Pixel der Blöcke. Mit diesen Parametern haben wir nun die Transformation vollständig bestimmt. -Um zu beurteilen wie ähnlich der Domain-Block $D_j$ mit der gefundenen Transformation $T$ dem Range-Block ist, berechnet man den quadratischen Abstand + +Um zu beurteilen wie ähnlich der Domain-Block $D_j$ mit der gefundenen Transformation $T$ dem Range-Block ist, berechnet man den quadratischen Fehler \begin{align*} e = d(f_{R_i}, \bar{f_{R_i}}). \end{align*} -Dieser Abstand sollte so klein wie möglich sein. +$e$ sollte so klein wie möglich sein. + +\textbf{Schritt 3: } +Somit haben wir die zwei Schritte um eine Transformation $T_i$ zu finden. +Wir führen den zweiten Schritt für jede der acht möglichen affinen Abbildungen vom ersten Schritt aus, und bestimmen den jeweilig resultierenden Fehler $e$. +Es resultieren acht $T_j$ mit ihren jeweiligen Fehlern. -Wir bestimmen die Parameter $s$ und $g$ für jede der acht möglichen affinen Abbildungen und das mit jedem Domain-Block. -Die Kombination von $D_j$ und $T_i$, welche den kleinsten Abstand $e$ hat, ist die beste. +Um den besten Domain-Block zu finden, führen wir die drei Schritte für jeden Domain-Block aus. +Der Domain-Block $D_j$, welcher die Transformation $T_j$ mit dem kleinsten Fehler $e$ hat, ist der ähnlichste. -Diese Schritte führen wir für jeden Range-Block $R_i$ aus. -Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain-Block und Transformation gefunden. +Wir suchen nun für jeden Range-Block $R_i$ den ähnlichsten Domain-Block. +Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain-Block und die dazugehörige Transformation gefunden. \begin{figure} \centering @@ -140,19 +148,18 @@ Teilt man ein Bild in die drei Farbkanäle auf, das heisst, es wird nur noch ein Nun wendet man auf jeden dieser Farbkanalbilder den Algorithmus an, und fügt nach der Rekonstruktion die Kanäle wieder zusammen. \subsubsection{Performance des Verfahren} -Dieser Grundalgorithmus der fraktalen Bildkompression ist recht langsam und skaliert auch schlecht für grössere Bilder. -Dies resultiert aus eigenen Experimenten. +Experimentelle Beobachtungen haben gezeigt, dass dieser Grundalgorithmus der fraktalen Bildkompression recht langsam ist und auch schlecht für grössere Bilder skaliert. Man kann die Laufzeit zwar verbessern indem man die Domain-Blöcke auch disjunkt macht, und für weniger detailreiche Bilder ein grösseres $b$ wählt, jedoch wird er auch so nicht so schnell wie zum Beispiel das JPEG-Verfahren. Es wurden bessere Algorithmen der fraktalen Bildkompression entwickelt, doch auch diese können, vor allem in der Laufzeit, noch nicht mit herkömmlichen Komprimierungsverfahren mithalten. \subsection{Beispiel} -Wir Verwenden dafür den oben beschriebenen Algorithmus, welcher uns für jeden Range-Block die benötigten Parameter liefert. +Wir verwenden dafür den oben beschriebenen Algorithmus, welcher uns für jeden Range-Block die benötigten Parameter liefert. Mit diesen lässt sich das Bild im Anschluss wieder Rekonstruieren. -Die Range-Blöcke wurden $4\times4$ gewählt und die Dommain dementsprechend $8\times8$. +Die Range-Blöcke wurden $4\times4$ gewählt und die Domain dementsprechend $8\times8$. Um etwas Zeit bei der Komprimierung zu ersparen, wurden nur disjunkte Domain-Blöcke gebraucht. -Als erstes Beispiel wählen wir das 360x360px Bild von Rapperswil in Abbildung \ref{ifs:original}. -Das Startbild ist ein mittelgraues 360x360px Bild, Abbildung \ref{ifs:bild0}. -Es kann jedoch ein beliebiges Startbild +Als erstes Beispiel wählen wir das 360$\times$360px Bild von Rapperswil in Abbildung \ref{ifs:original}. +Das Startbild ist ein mittelgraues 360$\times$360px Bild, Abbildung \ref{ifs:bild0}. +Es kann jedoch ein beliebiges Startbild sein. Nun lassen wir das PIFS laufen. Wie wir in Abbildung \ref{ifs:rappirecoa} sehen, ist schon nach der ersten Iteration das Bild schon erkennbar. Nach der fünften Iteration , Abbildung \ref{ifs:rappirecoc} gibt es fast keinen Unterschied mehr zur letzten Iteration, wir können die Rekonstruktion beenden. -- cgit v1.2.1 From 4f7ee11ffe36d2414a71698fbaee603342977186 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sat, 17 Jul 2021 18:03:18 +0200 Subject: Fix typos in intro --- buch/papers/punktgruppen/intro.tex | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index 24212e7..2e15442 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -1,14 +1,13 @@ \section{Einleitung} Es gibt viele Möglichkeiten sich in Kristallen zu verlieren. -Auch wen man nur die mathematischen Betrachtunngsweisen berüksichtigt, hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. -In diesem Kapitel ist daher der Fokus ``nur'' auf die Symmetrie gelegt. -Zu beginn werden wir zeigen was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. -Die vorgestellten Symmetrien sind äusserst gut geeignet um die Grundeigenschaften eines Kristalles zu Beschreiben. -Mit etwas kiffligen geometrischen Überlegungen kann man zeigen wass in der Welt der Kristallographie alles möglich ist oder nicht. -Die Einschränkungen sind durchaus wilkommen, dank ihnen halten sich die möglichen Kristallgitter in Grenzen und Lassen sich Kategorisieren. -Kategorien sind nicht nur für einen besseren Überblich nützlich, sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen, als spannendes Beispiel: Die Piezoelektrizität. -Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, sie versteckt sich aber in diversen Altagsgegenständen zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. -Ein Funken Interesse ist hoffentlich geweckt um sich mit dem scheinbar trivialen thema der Symmetrie auseinander zu setzten. - - +Auch wen man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen, sich mit Kristallen zu beschäftigen. +In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. +Zu Beginn werden wir zeigen was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. +Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalls zu beschreiben. +Mit etwas kniffligen geometrischen Überlegungen kann man zeigen was in der Welt der Kristallographie alles möglich ist oder nicht. +Die Einschränkungen sind durchaus willkommen, dank ihnen halten sich die möglichen Kristallgitter in Grenzen und lassen sich kategorisieren. +Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern man kann aus ihnen auch auf physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. +Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, sie versteckt sich aber in diversen Alltagsgegenständen zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. +Ein Funken Interesse ist hoffentlich geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. +%% vim:linebreak breakindent showbreak=.. spell spelllang=de: -- cgit v1.2.1 From a9b9236ce6ed9905b21e02ce6cf5c1b5bf19927f Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 18 Jul 2021 10:59:30 +0200 Subject: Fix typos and suggested changes in crystals section --- buch/papers/punktgruppen/crystals.tex | 107 ++++++++++++++++------------------ 1 file changed, 51 insertions(+), 56 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index abd0c27..8c655e2 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -1,6 +1,6 @@ \section{Kristalle} %einleitung sollte noch an das ende von der Symmetrie angepasst werden -Unter dem Begriff Kristall sollte sich jeder ein Bild machen können. +Unter dem Begriff Kristall sollte sich jeder ein Bild machen können. Wir werden uns aber nicht auf sein Äusseres fokussieren, sondern was ihn im Inneren ausmacht. Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. \begin{definition}[Kristall] @@ -17,37 +17,33 @@ Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. \end{figure} \subsection{Kristallgitter} Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punktgruppen:lattice}. -Für die Überschaubarkeit haben wir ein simples Motiv eines einzelnen grauen Punktes gewählt und betrachten dies nur in Zwei Dimensionen. -Die eingezeichneten Vektoren $\vec{a}$ und $\vec{b}$ sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt. -Wird ein beliebiger grauer Gitterpunkt in \ref{fig:punktgruppen:lattice} gewählt -und um eine ganzzahlige Linearkombination von $\vec{a}$ und $\vec{b}$ 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 +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}\) und \(\vec{b}\) sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt. +Wird ein beliebiger grauer Gitterpunkt in \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von \(\vec{a}\) und \(\vec{b}\) 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 \[ - \vec{r} = n_1 \vec{a} + n_2 \vec{b} + n_3 \vec{c} + \vec{r} = n_1 \vec{a} + n_2 \vec{b} + n_3 \vec{c} \] -erreicht werden sofern $\{n_1,n_2,n_3\} \in \mathbb{Z}$ sind. -Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben , -ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. +erreicht werden sofern \(\{n_1,n_2,n_3\} \in \mathbb{Z}\) sind. +Sind die Vektoren \(\vec{a}\), \(\vec{b}\), \(\vec{c}\) gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. -Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, -da die Umgebungen aller Punkte Identisch sind. -Mit anderen worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation +Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, da die Umgebungen aller Punkte Identisch sind. +Mit anderen Worten: Jedes Kristallgitter \( G \) ist \emph{Translationssymmetrisch} in der Translation \[ - Q_i(G) = G + \vec{a_i} -\] wobei der Vektor $a_i$ ein Grundvektor sein muss. -Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, -können wir auch sagen, dass alle Verschiebungen um eine Linearkombination -der Vektoren $\vec{a}$ , $\vec{b}$ und $\vec{c}$ erlaubt sind oder kurz, um $\vec{r}$. -Verschiebungen um $\vec{r}$ bewirken demnach keine Veränderungen, -solange wir ein unendlich grosses Kristallgitter verschieben. + \vec{Q}_i(G) = G + \vec{a}_i, +\] +wobei der Vektor \(\vec{a}_i\) ein Grundvektor sein muss. +Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination der Vektoren \(\vec{a}\), \(\vec{b}\) und \(\vec{c}\) erlaubt sind oder kurz, um \(\vec{r}\). +Verschiebungen um \(\vec{r}\) bewirken demnach keine Veränderungen, solange wir ein unendlich grosses Kristallgitter verschieben. \subsection{Limitierte Kristallsymmetrien} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. - Was nicht direkt ersichtlich ist, ist das auch wenn die Grundvektoren frei gewählt werden können, - können nur Rotationssymmetrische Kristalle bestimmter Rotationswinkel erzeugt werden. + Was nicht direkt ersichtlich ist, ist das auch wenn die Grundvektoren frei gewählt werden können, können nur Rotationssymmetrische Kristalle bestimmter Rotationswinkel erzeugt werden. + + % Suggestion from Muller: + % dass nur ganz bestimmt Drehwinkel \"uberhaupt m\"oglich sind. \begin{figure} \centering @@ -58,50 +54,49 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \label{fig:punktgruppen:rot-geometry} \end{figure} - \subsubsection{Translationssymmetrie $Q$ in Kombination mit Rotationssymmetrie $C_\alpha$} % Müssen uns auf eine schreibweise für Symmetrie Operationen einigen oder sicher am Ende überprüfen + \subsubsection{Translationssymmetrie \(\vec{Q}\) in Kombination mit Rotationssymmetrie \(C_\alpha\)} % Müssen uns auf eine schreibweise für Symmetrie Operationen einigen oder sicher am Ende überprüfen In Abbildung \ref{fig:punktgruppen:rot-geometry} Sehen wir Gitterpunkte und deren Zusammenhänge. \begin{itemize} - \item $A$ ist unser erster Gitterpunkt. + \item \(A\) ist unser erster Gitterpunkt. - \item $A'$ ist gegeben, weil wir $A$ mit der Translation $Q$ um einen Grundvektor verschieben und wir wissen, - dass nach einer Translation wieder ein Gitterpunkt an der Verschobenen Stelle sein muss. - \item $B$ entsteht, weil wir die Rotationssymmetrie $C_\alpha$ auf den Punkt $A$ anwenden. - Dadurch dreht sich das ganze Gitter um den Winkel $\alpha$. - Für uns bedeutet dies lediglich, dass unser zweiter Punkt $A'$ abgedreht wird. - An der neuen Position von $A'$ muss also auch ein Punkt sein, um die Rotationssymmetrie zu erfüllen. - \item $B$ ist unser Name für diesen neuen Punkt. - Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir $C_\alpha$ auch auf $A'$ anwenden. - Also wenden wir $C_\alpha$ invertiert - \footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. - Genauere Überlegungen hierzu werden dem Leser überlassen, da sich die Autoren nicht explizit mit dieser Frage Auseinander gesetzt haben.} - auch auf $A'$ an. - Dies dreht $A$ auf einen neuen Punkt. - \item $B'$ ist kein zufälliger Name für diesen neuen Punkt, denn wir wissen, dass zwischen allen Punkten eine Translationssymmetrie bestehen muss. - Die Translationssymmetrie zwischen $B$ und $B'$ ist hier als $Q'$ bezeichnet. + \item \(A'\) ist gegeben, weil wir \(A\) mit der Translation \(\vec{Q}\) um einen Grundvektor verschieben und wir wissen, dass nach einer Translation wieder ein Gitterpunkt an der verschobenen Stelle sein muss. + \item \(B\) entsteht, weil wir die Rotationssymmetrie \(C_\alpha\) auf den Punkt \(A\) anwenden. + Dadurch dreht sich das ganze Gitter um den Winkel \(\alpha\). + Für uns bedeutet dies lediglich, dass unser zweiter Punkt \(A'\) abgedreht wird. + An der neuen Position \(B\) von \(A'\) muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. + \item \(B\) ist unser Name für diesen neuen Punkt. + Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir \(C_\alpha\) auch auf \(A'\) anwenden. + Also wenden wir \(C_\alpha\) invertiert + \footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. + Genauere Überlegungen hierzu werden dem Leser überlassen, da sich die Autoren nicht explizit mit dieser Frage Auseinander gesetzt haben.} + auch auf \(A'\) an. + Dies dreht \(A\) auf einen neuen Punkt. + \item \(B'\) ist kein zufälliger Name für diesen neuen Punkt, denn wir wissen, dass zwischen allen Punkten eine Translationssymmetrie bestehen muss. + Die Translationssymmetrie zwischen \(B\) und \(B'\) ist hier als \(\vec{Q}'\) bezeichnet. \end{itemize} Mit den gegebenen Punkten lassen sich geometrische Folgerungen ziehen. - Wir beginnen, indem wir die Länge der Translation $Q$ mit jener von $Q'$ vergleichen. - Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass $|Q| = |Q'|+ 2x$. - Ist $Q$ ein Grundvektor so muss $|Q'|$ ein ganzes vielfaches von $|Q|$ sein. Also + Wir beginnen, indem wir die Länge \(Q\) der Translation \(\vec{Q}\) mit jener von \(\vec{Q}'\) vergleichen. + Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q = Q' + 2x\). + Ist \(\vec{Q}\) ein Grundvektor so muss \(Q'\) ein ganzes vielfaches von \(Q\) sein. + Also \[ - |Q'| = n|Q| = |Q| + 2x + Q' = nQ = Q + 2x \] - Die Strecke $x$ lässt sich auch mit hilfe der Trigonometrie und dem angenommenen Rotationswinkel $\alpha$ ausdrücken: + Die Strecke \(x\) lässt sich auch mit hilfe der Trigonometrie und dem angenommenen Rotationswinkel \(\alpha\) ausdrücken: \[ - n|Q| = |Q| + 2|Q|\sin(\alpha - \pi/2) + nQ = Q + 2Q\sin(\alpha - \pi/2) \] - Wir können mit $|Q|$ dividieren um unabhängig von der Läge des Grundvektors zu werden, - was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangieren soll. + Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. Zusätzlich können wir den Sinusterm vereinfachen. \[ - n = 1 - 2\cos\alpha \qquad + n = 1 - 2\cos\alpha \quad\iff\quad \alpha = \cos^{-1}\left(\frac{1-n}{2}\right) \] Dies schränkt die möglichen Rotationssymmetrien auf - \[ + \( \alpha \in \left\{ 0^\circ, 60^\circ, 90^\circ, 120^\circ, 180^\circ\right\} - \] + \) ein. \begin{figure} @@ -114,13 +109,13 @@ ein. \subsection{Kristallklassen} Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. Mit weiteren ähnlichen überlegungen gezeigt werden kann, dass Kristalle im dreidimensionalen Raum -\footnote{Alle $17$ möglichen zweidimensionalen Symmetrien sind als Wandmustergruppen bekannt} -nur auf genau $32$ Arten punktsymmetrisch sein können. -Diese $32$ möglichen Punktsymmetrien scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. +\footnote{Alle \(17\) möglichen zweidimensionalen Symmetrien sind als Wandmustergruppen bekannt} +nur auf genau \(32\) Arten punktsymmetrisch sein können. +Diese \(32\) möglichen Punktsymmetrien scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. Eine mögliche Art, die Klassen zu benennen ist nacht dem Mathematiker Arthur Moritz Schönflies, welcher sich mit der Klasifizierung dieser Symmetrien auseinandergesetzt hat. Auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} sind die möglichen Punktsymmetrien mit deren Schönfliesnotation aufgelistet. -Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei $5$ Klassen aus Gründen der Überschaubarkeit nicht gezeichnet wurden. - +Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei \(5\) Klassen aus Gründen der Überschaubarkeit nicht gezeichnet wurden. +%% vim:spell spelllang=de showbreak=.. breakindent linebreak: -- cgit v1.2.1 From 4dd42de2dd28bbbdf7e08693719e9c43f9294348 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 18 Jul 2021 11:00:07 +0200 Subject: Fix standalone makefile target --- buch/papers/punktgruppen/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/Makefile b/buch/papers/punktgruppen/Makefile index 47affeb..98e7149 100644 --- a/buch/papers/punktgruppen/Makefile +++ b/buch/papers/punktgruppen/Makefile @@ -32,7 +32,7 @@ figures/%.pdf: tikz/%.tex pdflatex --output-directory=figures $< .PHONY: standalone -standalone: standalone.tex $(SOURCES) +standalone: standalone.tex $(SOURCES) $(FIGURES) mkdir -p standalone cd ../..; \ pdflatex \ -- cgit v1.2.1 From 32d6788d0f7b0b9120f4dc71d55b8bcaccf33fe5 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 18 Jul 2021 11:09:14 +0200 Subject: Review crystal classes subsection and fix typos --- buch/papers/punktgruppen/crystals.tex | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 8c655e2..922afd9 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -32,9 +32,9 @@ Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigens Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, da die Umgebungen aller Punkte Identisch sind. Mit anderen Worten: Jedes Kristallgitter \( G \) ist \emph{Translationssymmetrisch} in der Translation \[ - \vec{Q}_i(G) = G + \vec{a}_i, + \vec{Q}(G) = G + \vec{a}, \] -wobei der Vektor \(\vec{a}_i\) ein Grundvektor sein muss. +wobei der Vektor \(\vec{a}\) ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination der Vektoren \(\vec{a}\), \(\vec{b}\) und \(\vec{c}\) erlaubt sind oder kurz, um \(\vec{r}\). Verschiebungen um \(\vec{r}\) bewirken demnach keine Veränderungen, solange wir ein unendlich grosses Kristallgitter verschieben. @@ -77,7 +77,7 @@ Verschiebungen um \(\vec{r}\) bewirken demnach keine Veränderungen, solange wir \end{itemize} Mit den gegebenen Punkten lassen sich geometrische Folgerungen ziehen. Wir beginnen, indem wir die Länge \(Q\) der Translation \(\vec{Q}\) mit jener von \(\vec{Q}'\) vergleichen. - Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q = Q' + 2x\). + Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\). Ist \(\vec{Q}\) ein Grundvektor so muss \(Q'\) ein ganzes vielfaches von \(Q\) sein. Also \[ @@ -107,15 +107,12 @@ ein. \end{figure} \subsection{Kristallklassen} -Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. -Mit weiteren ähnlichen überlegungen gezeigt werden kann, dass Kristalle im dreidimensionalen Raum -\footnote{Alle \(17\) möglichen zweidimensionalen Symmetrien sind als Wandmustergruppen bekannt} -nur auf genau \(32\) Arten punktsymmetrisch sein können. -Diese \(32\) möglichen Punktsymmetrien scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. -Eine mögliche Art, die Klassen zu benennen ist nacht dem Mathematiker Arthur Moritz Schönflies, -welcher sich mit der Klasifizierung dieser Symmetrien auseinandergesetzt hat. +Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind\footnote{Alle 17 möglichen zweidimensionalen Symmetrien sind als Wandmustergruppen bekannt}. +Mit weiteren ähnlichen \"Uberlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum nur auf genau 32 Arten punktsymmetrisch sein können. +Diese 32 möglichen Punktsymmetrien scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. +Eine mögliche Art, die Klassen zu benennen ist nach dem Mathematiker Arthur Moritz Schönflies, welcher sich mit der Klassifizierung dieser Symmetrien auseinandergesetzt hat. Auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} sind die möglichen Punktsymmetrien mit deren Schönfliesnotation aufgelistet. -Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei \(5\) Klassen aus Gründen der Überschaubarkeit nicht gezeichnet wurden. +Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei die gestrichelte Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. %% vim:spell spelllang=de showbreak=.. breakindent linebreak: -- cgit v1.2.1 From c6f44d256b3bf705b2bb13352cb01eda6a1bd961 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 18 Jul 2021 11:20:54 +0200 Subject: Recompile figures --- .../punktgruppen/figures/atoms-grid-force.pdf | Bin 1496 -> 1496 bytes .../punktgruppen/figures/atoms-grid-still.pdf | Bin 1307 -> 1307 bytes .../figures/atoms-piezo-force-horizontal.pdf | Bin 15334 -> 12453 bytes .../figures/atoms-piezo-force-vertical.pdf | Bin 15377 -> 12490 bytes .../punktgruppen/figures/atoms-piezo-force.pdf | Bin 15377 -> 0 bytes .../punktgruppen/figures/atoms-piezo-still.pdf | Bin 1643 -> 1643 bytes .../punktgruppen/figures/combine-symmetries.pdf | Bin 14372 -> 12054 bytes buch/papers/punktgruppen/figures/lattice.pdf | Bin 27849 -> 25646 bytes buch/papers/punktgruppen/figures/piezo.pdf | Bin 16842 -> 14077 bytes buch/papers/punktgruppen/figures/projections.pdf | Bin 27953 -> 26440 bytes .../punktgruppen/figures/symmetric-shapes.pdf | Bin 15846 -> 12772 bytes 11 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force.pdf (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/figures/atoms-grid-force.pdf b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf index 0b3e084..f56be04 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-grid-force.pdf and b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-grid-still.pdf b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf index d707258..02aa67c 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-grid-still.pdf and b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf index 09ed727..0514fb6 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf and b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf index ab2996f..486eab4 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf and b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf deleted file mode 100644 index 456eec9..0000000 Binary files a/buch/papers/punktgruppen/figures/atoms-piezo-force.pdf and /dev/null differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf index 9a888d7..c306143 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf and b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/combine-symmetries.pdf b/buch/papers/punktgruppen/figures/combine-symmetries.pdf index 12a57ba..002c0f8 100644 Binary files a/buch/papers/punktgruppen/figures/combine-symmetries.pdf and b/buch/papers/punktgruppen/figures/combine-symmetries.pdf differ diff --git a/buch/papers/punktgruppen/figures/lattice.pdf b/buch/papers/punktgruppen/figures/lattice.pdf index 803da2b..37a8ccf 100644 Binary files a/buch/papers/punktgruppen/figures/lattice.pdf and b/buch/papers/punktgruppen/figures/lattice.pdf differ diff --git a/buch/papers/punktgruppen/figures/piezo.pdf b/buch/papers/punktgruppen/figures/piezo.pdf index e0f5450..19142ad 100644 Binary files a/buch/papers/punktgruppen/figures/piezo.pdf and b/buch/papers/punktgruppen/figures/piezo.pdf differ diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index 828f03c..03fb004 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ diff --git a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf index c5e42e7..4684af7 100644 Binary files a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf and b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf differ -- cgit v1.2.1 From 47d7b23be51d7a8f362c65881be4a8dd0e100d06 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Sun, 18 Jul 2021 14:57:21 +0200 Subject: file updated --- buch/papers/reedsolomon/anwendungen.tex | 60 ++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/anwendungen.tex b/buch/papers/reedsolomon/anwendungen.tex index 83e0f94..4b30ec9 100644 --- a/buch/papers/reedsolomon/anwendungen.tex +++ b/buch/papers/reedsolomon/anwendungen.tex @@ -6,14 +6,40 @@ \section{Anwendungen des Reed-Solomon-Codes \label{reedsolomon:section:anwendung}} \rhead{Anwendungen} -\textcolor{red}{Platzierung der Bilder? Quellenangabe der Bilder?} In den vorherigen Abschnitten haben wir betrachtet, wie Reed-Solomon-Codes in der Theorie Funktionieren. In diesem Abschnitt werden wir einige Anwendungen vorstellen, bei denen ein Reed-Solomon-Code zum Einsatz kommt. + +Dabei teilen all diese Anwendungen das gleiche Problem: Die Daten können nur durch einen (höchst Wahrscheinlichen) fehlerbehafteten Kanal empfangen werden. Es gibt keine andere Methode an diese Daten zu kommen als über diesen Kanal. + + +In der Netzwerktechnik zum Beispiel ist es üblich, dass bei Paketverluste oder beschädigt empfangene Datenpakete diese einfach noch einmal inert wenigen Millisekunden angefordert werden können. +In der Raumfahrt ist dies nicht möglich, da aufgrund der beschränkten Speichermöglichkeit die gesammelten Daten so rasch wie möglich zur Erde gesendet werden. +Diese Daten wiederum brauchen aufgrund der grossen Distanz Stunden bis die Daten beim Empfänger ankommen. +Fehlerhafte Daten kann also auf Grund der Zeitverzögerung nicht mehr angefordert werden. + +Bei CDs oder DVDs gibt es zwar kein Zeitliches Problem, jedoch erschweren Kratzer, Verschmutzungen oder Produktionsfehler das Lesen einer solchen Disk. +Da vor allem Produktionsfehler und Kratzer irreversibel sind und die Disk nicht nach jedem Kratzer ersetzt werden muss, so wird die korrekte Ausgabe der gespeicherten Information durch die Fehlerkorrektur sichergestellt. + +Ein ähnlicher Ansatz verfolgen QR-Codes, wobei die Information auch dann noch gelesen werden kann wenn der Code nicht mehr vollständig vorhanden ist. + +%Wie man sieht, eignen sich Reed-Solomon-Codes vor allem für Anwendungen, bei der die Informationen nicht auf einen Anderen Weg beschafft werden kann. +% +% +%, bei denen die Wahrscheinlichkeit hoch ist, dass während der Übertragung +% +%Es ist deshalb umso wichtiger die Daten Codiert zu lesen um so gleich die Lesefehler zu korrigieren. +% +% da aufgrund der grossen Distanz Stunden vergehen können bis gesendete Daten auf der Erde empfangen werden kann. +% + + Obwohl alle diese Codes nach dem gleichen Prinzip arbeiten gibt es starke Unterschiede in deren Funktionsweise. Dies kommt vor allem daher, da die Codes nur Ressourcen zur Verfügung haben, die von der Hardware bereitstellt wird, auf denen die Codes implementiert wurden. Diese Codes bedienen sich daher verschiedener Tricks und Optimierungen um möglichst effizient zu arbeiten. -% + +Um die Fähigkeit eines verwendeten Reed-Solomon-Codes zu beschreiben verwendet man die Notation ($n$,$k$), wobei $n$ die Grösse des Nachrichtenblocks angibt und $k$ die Anzahl der Stellen, die für Nutzdaten gebraucht werden können. + %Dies kommt vor allem daher, da diese Codes an ihre Hardware gebunden sind, auf denen sie implementiert worden sind. %Deshalb wurden diese Codes stark optimiert damit sie möglichst Effizient arbeiten können. % @@ -45,8 +71,17 @@ Diese Codes bedienen sich daher verschiedener Tricks und Optimierungen um mögli %In den letzten abschnitten haben wir uns ausführlich die Funktionsweise des Reed-Solomon-Codes angeschaut. In diesem Abschnitt möchten wir dem Leser ein paar bekannte beispiele vorstellen, in denen Reed-Solomon-Codes zum einsatz kommen. Es sei jedoch angemerkt, dass diese Anwendungen in der Umsetzung oft ein wenig anderst funktionieren als hier vorgestellt. Dies wurde vor allem wegen technischen optimierungen realisiert. (technische tricks und finessen), von der logik jedoch sehr stark an unserem Beispiel orientieren \subsection{Raumfahrt} -Obwohl Reed-Solomon-Codes bereits in den 1960er entwickelt wurden fanden sie erstmals Anwendung in der Voyager Raumsonde der NASA. Die Daten der zwei im Jahre 1977 gestarteten Sonden werden mit einem RS(255,233)-Code \textcolor{red}{benötigt das weitere erklärungen, wie z.b. 255: grösse nachrichtenblock, 233: anzahl der nutzbaren daten ?} zusammen mit einem konventionellen Faltungscode übertragen. - +Obwohl Reed-Solomon-Codes bereits in den 1960er entwickelt wurden fanden sie erstmals Anwendung in der Voyager Raumsonde der NASA. Die Daten der zwei im Jahre 1977 gestarteten Sonden (siehe Abbildung \ref{fig:voyager}) werden mit einem ($255$,$233$)-Code +Codiert. +Der Nachrichtenblock hat somit eine Länge von $255$ Zahlen, wovon $233$ als Nutzlast zur Verfügung stehen. +Damit ist es möglich bis zu $11$ Fehler im Nachrichtenblock zu korrigieren. +Der Codierte Nachrichtenblock wird in kleinere Blöcke aufgeteilt, mit einem Faltungscode erneut Codiert und anschliessend gesendet. Ein Faltungscode ist wie ein Reed-Solomon-Code in der Lage Fehler zu korrigieren, Funktioniert aber nach einem ganz anderen Prinzip. +Durch diese doppelte Codierung wird eine äusserst hohe Übertragungssicherheit garantiert. +% +%Dabei steht die Zahl 255 für grösse des Nachrichtenblocks, der die Anzahl 233 +% +% +% \textcolor{red}{benötigt das weitere Erklärungen, wie z.b. 255: grösse Nachrichtenblock, 233: anzahl der nutzbaren daten ?} zusammen mit einem konventionellen Faltungscode übertragen. Eine von der Sonde gesendete Nachricht hat eine Blockgrösse von 255 Zeichen, wovon 233 für die Nutzdaten gebraucht werden können. Dieser Code ist somit in der Lage 11 Fehler in einem Nachrichtenblock zu korrigieren. % % Die zwei im Jahre 1977 gestarteten Sonden senden Daten mit der Hilfe eines RS(255,233)-Code für die digitalen Bilder sowie einem konventionellen Faltungscode. % @@ -56,14 +91,14 @@ Obwohl Reed-Solomon-Codes bereits in den 1960er entwickelt wurden fanden sie ers \begin{figure} \centering \includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/Voyager_Sonde} - \caption{Voyager Raumsonde} + \caption{Mit einer Entfernung von über 22.8 Milliarden Kilometer ist die Voyager 1 Raumsonde das am weitesten entfernte, von Menschen erschaffene Objekt. Obwohl ihre Schwestersonde Voyager 2 zuerst ins All gestartet wurde befindet Sie sich ``nur'' 19 Milliarden Kilometer weit weg von der Erde. Aufgrund abnehmender Batterieleistung werden die beiden Sonden ihre wissenschaftlichen Aktivitäten etwa 2025 einstellen, bleiben aber bis in die 2030er mit uns in Kontakt.} \label{fig:voyager} \end{figure} \subsection{CD/DVD} Compact discs verwenden sogar zwei ineinander verschachtelte Reed-Solomon-Codes, einen (32,28)-Code und einen (28,24)-Code. -Beide Codes sind in der Lage, Fehler aus dem jeweils anderen gelesenen Block zu korrigieren. Dieses spezielle zusammenspielen dieser beiden Codes werden auch Cross-interleaved Reed-Solomon-Codes (CIRC) genannt. -Diese Vorgehensweise erzielt eine hohe Robustheit gegenüber Produktionsfehler oder Verschmutzung auf der Disc. Bei CD's sind diese in der Lage bis zu 4000 fehlerhafte Bits am Stück (ca. $2.5mm$) zu erkennen und zu korrigieren. +Beide Codes sind in der Lage, Fehler aus dem jeweils anderen gelesenen Block zu korrigieren. Dieses spezielle Zusammenspielen dieser beiden Codes werden auch Cross-interleaved Reed-Solomon-Codes (CIRC) genannt. +Diese Vorgehensweise erzielt eine hohe Robustheit gegenüber Produktionsfehlern oder Verschmutzung auf der Disc. Bei CDs sind diese in der Lage, bis zu 4000 fehlerhafte Bits am Stück (ca. $2.5mm$) zu erkennen und zu korrigieren. Die Digital Video Disc funktioniert nach dem selben Konzept mit grösseren Codeblöcken. Die DVD verwendet einen (208,192)-Code und einen (182,172)-Code. @@ -73,12 +108,19 @@ Die Digital Video Disc funktioniert nach dem selben Konzept mit grösseren Codeb \begin{figure} \centering \includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/Compact_Disc} - \caption{Compact Disc} + \caption{CDs kamen 1982 auf den Markt. Sie funktioniert durch das ``einbrennen'' von Punkten und Strichen, die die Daten repräsentieren. Gelesen werden diese wiederum durch die Reflektion eines Lasers an diesen Punkten und Strichen.} \label{fig:cd} \end{figure} \subsection{QR-Codes} -Quick Response Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel, nur dass QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Je nach grösse der Codierung ist der QR-Code im Endeffekt robuster gegen Beschädigungen. Bei Low Level Codes können 7\% der Daten Wiederhergestellt werden, beim High Level Code sind das sogar 30\%. +Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel der Abschnitte \ref{reedsolomon:section:codebsp} - \ref{reedsolomon:section:rekonstruktion} nur das QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Die Physische Grösse eines Codes ist stark abhängig von der Grösse der Codierung sowie dem Fehlerkorrektur-Level. Es ist so auf dem ersten Blick nicht ersichtlich, wie viel Nutzinformationen ein Qr-Code enthält. Die QR-Codes in Abbildung \ref{fig:qr} zeigen jeweils die Gleiche Information mit unterschiedlichem Fehlerkorrektur-Level. Codes mit einem höheren Korrektur-Level können auch für Desingner-Codes Zweckentfremdet werden. Dabei wird z.B. das Firmenlogo oder einen Schriftzug über den Qr-Code gelegt, ohne das die Funktion des Codes beeinträchtigt wird. Ein Beispiel dazu ist ebenfalls unter Abbildung \ref{fig:qr} \textcolor{red}{(noch nicht erstellt + beschreibung anpassen)} zu finden. + +% + +%So kann auf den ersten Blick nicht +% +% +% funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel, nur dass QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Je nach grösse der Codierung ist der QR-Code im Endeffekt robuster gegen Beschädigungen. Bei Low Level Codes können 7\% der Daten Wiederhergestellt werden, beim High Level Code sind das sogar 30\%. \begin{figure} \centering -- cgit v1.2.1 From 353a32e07fdf128409c8894f723ff4c49bb9322a Mon Sep 17 00:00:00 2001 From: tim30b Date: Sun, 18 Jul 2021 21:38:59 +0200 Subject: =?UTF-8?q?apply=20m=C3=BCller=20correction=20in=20punktgruppen=20?= =?UTF-8?q?und=20Intro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/punktgruppen/crystals.tex | 48 ++++++++++++++++++++--------------- buch/papers/punktgruppen/intro.tex | 29 ++++++++++++++------- 2 files changed, 48 insertions(+), 29 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 1aec16f..76b3f72 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -17,28 +17,28 @@ Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. } \end{figure} \subsection{Kristallgitter} -Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punktgruppen:lattice}. -Für die Überschaubarkeit haben wir ein simples Motiv eines einzelnen grauen Punktes gewählt und betrachten dies nur in Zwei Dimensionen. +Ein zweidimensionales Beispiel eines solchen Muster ist in Abbildung \ref{fig:punktgruppen:lattice} dargestellt. +Für die Überschaubarkeit haben wir ein simples Motiv eines einzelnen grauen Punktes gewählt und betrachten dies nur in zwei Dimensionen. Die eingezeichneten Vektoren $\vec{a}$ und $\vec{b}$ sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt. Wird ein beliebiger grauer Gitterpunkt in \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von $\vec{a}$ und $\vec{b}$ 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{c}$ also \[ \vec{r} = n_1 \vec{a} + n_2 \vec{b} + n_3 \vec{c} \] erreicht werden sofern $\{n_1,n_2,n_3\} \in \mathbb{Z}$ sind. -Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben , +Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, -da die Umgebungen aller Punkte Identisch sind. -Mit anderen worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation +da die Umgebungen aller Punkte identisch sind. +Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation \[ - Q_i(G) = G + \vec{a_i} -\] wobei der Vektor $a_i$ ein Grundvektor sein muss. + Q_i(G) = G + \vec{a}_i +\] wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination der Vektoren $\vec{a}$ , $\vec{b}$ und $\vec{c}$ erlaubt sind oder kurz, um $\vec{r}$. @@ -47,8 +47,8 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \subsection{Limitierte Kristallsymmetrien} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. - Was nicht direkt ersichtlich ist, ist das auch wenn die Grundvektoren frei gewählt werden können, - können nur Rotationssymmetrische Kristalle bestimmter Rotationswinkel erzeugt werden. + Was nicht direkt ersichtlich ist, ist dass auch wenn die Grundvektoren frei gewählt werden können, + sind nur rotationssymmetrische Kristalle ganz bestimmter Rotationswinkel möglich. \begin{figure} \centering @@ -61,17 +61,17 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \end{figure} \subsubsection{Translationssymmetrie $Q$ in Kombination mit Rotationssymmetrie $C_\alpha$} % Müssen uns auf eine schreibweise für Symmetrie Operationen einigen oder sicher am Ende überprüfen - In Abbildung \ref{fig:punktgruppen:rot-geometry} Sehen wir Gitterpunkte und deren Zusammenhänge. + In Abbildung \ref{fig:punktgruppen:rot-geometry} sehen wir Gitterpunkte und deren Zusammenhänge. \begin{itemize} \item $A$ ist unser erster Gitterpunkt. \item $A'$ ist gegeben, weil wir $A$ mit der Translation $Q$ um einen Grundvektor verschieben und wir wissen, - dass nach einer Translation wieder ein Gitterpunkt an der Verschobenen Stelle sein muss. + dass nach einer Translation wieder ein Gitterpunkt an der verschobenen Stelle sein muss. \item $B$ entsteht, weil wir die Rotationssymmetrie $C_\alpha$ auf den Punkt $A$ anwenden. Dadurch dreht sich das ganze Gitter um den Winkel $\alpha$. Für uns bedeutet dies lediglich, dass unser zweiter Punkt $A'$ abgedreht wird. - An der neuen Position von $A'$ muss also auch ein Punkt sein, um die Rotationssymmetrie zu erfüllen. + An der neuen Position $B$ von $A'$ muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. \item $B$ ist unser Name für diesen neuen Punkt. Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir $C_\alpha$ auch auf $A'$ anwenden. Also wenden wir $C_\alpha$ invertiert @@ -93,11 +93,14 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \[ n|Q| = |Q| + 2|Q|\sin(\alpha - \pi/2) \] - Wir können mit $|Q|$ dividieren um unabhängig von der Läge des Grundvektors zu werden, - was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangieren soll. + Wir können durch $|Q|$ dividieren um unabhängig von der Läge des Grundvektors zu werden, + was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. Zusätzlich können wir den Sinusterm vereinfachen. \[ n = 1 - 2\cos\alpha + + \] + \[ \alpha = \cos^{-1}\left(\frac{1-n}{2}\right) \] Dies schränkt die möglichen Rotationssymmetrien auf @@ -115,14 +118,19 @@ ein. \subsection{Kristallklassen} Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. -Mit weiteren ähnlichen überlegungen gezeigt werden kann, dass Kristalle im dreidimensionalen Raum -\footnote{Alle $17$ möglichen zweidimensionalen Symmetrien sind als Wandmustergruppen bekannt} -nur auf genau $32$ Arten punktsymmetrisch sein können. -Diese $32$ möglichen Punktsymmetrien scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. +Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum +nur auf genau $32$ Arten rein punktsymmetrische +\footnote{Werden translationssymmetrien auch mit gezählt beschreibt man die 230 Raumgruppen} +Symmetriegruppen bilden können. +Diese $32$ möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. Eine mögliche Art, die Klassen zu benennen ist nacht dem Mathematiker Arthur Moritz Schönflies, welcher sich mit der Klasifizierung dieser Symmetrien auseinandergesetzt hat. Auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} sind die möglichen Punktsymmetrien mit deren Schönfliesnotation aufgelistet. -Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei $5$ Klassen aus Gründen der Überschaubarkeit nicht gezeichnet wurden. +Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei die gestrichelten $5$ Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. + + +\subsubsection{Schönflies Notation} +TODO diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index 24212e7..7b4e732 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -1,14 +1,25 @@ \section{Einleitung} Es gibt viele Möglichkeiten sich in Kristallen zu verlieren. -Auch wen man nur die mathematischen Betrachtunngsweisen berüksichtigt, hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. -In diesem Kapitel ist daher der Fokus ``nur'' auf die Symmetrie gelegt. -Zu beginn werden wir zeigen was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. -Die vorgestellten Symmetrien sind äusserst gut geeignet um die Grundeigenschaften eines Kristalles zu Beschreiben. -Mit etwas kiffligen geometrischen Überlegungen kann man zeigen wass in der Welt der Kristallographie alles möglich ist oder nicht. -Die Einschränkungen sind durchaus wilkommen, dank ihnen halten sich die möglichen Kristallgitter in Grenzen und Lassen sich Kategorisieren. -Kategorien sind nicht nur für einen besseren Überblich nützlich, sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen, als spannendes Beispiel: Die Piezoelektrizität. -Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, sie versteckt sich aber in diversen Altagsgegenständen zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. -Ein Funken Interesse ist hoffentlich geweckt um sich mit dem scheinbar trivialen thema der Symmetrie auseinander zu setzten. +Auch wen man nur die mathematischen Betrachtunngsweisen berücksichtigt, +hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. +In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. +Zu Beginn werden wir zeigen was eine Symmetrie ausmacht und +dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. +Die vorgestellten Symmetrien sind äusserst gut geeignet, +um die Grundeigenschaften eines Kristalles zu beschreiben. +Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, +was in der Welt der Kristallographie alles möglich ist oder nicht. +Die Einschränkungen sind durchaus willkommen, +dank ihnen halten sich die möglichen Kristallgitter in Grenzen +und lassen sich kategorisieren.%umformulieren +Kategorien sind nicht nur für einen besseren Überblick nützlich, +sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen. +Als spannendes Beispiel: Die Piezoelektrizität. +Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, +sie versteckt sich aber in diversen Altagsgegenständen +zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. +Ein Funken Interesse ist hoffentlich geweckt +um sich mit dem scheinbar trivialen thema der Symmetrie auseinander zu setzten. -- cgit v1.2.1 From 88de7e8d421d3d7395840fdf916bbd015254d43c Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 19 Jul 2021 16:30:45 +0200 Subject: update --- buch/papers/reedsolomon/dtf.tex | 14 ++++---- buch/papers/reedsolomon/einleitung.tex | 10 +++--- buch/papers/reedsolomon/idee.tex | 60 +++++++++++++++++++++------------- 3 files changed, 50 insertions(+), 34 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 025be3a..d276760 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -3,13 +3,17 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Diskrete Fourien Transformation +\section{Diskrete Fourier Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourientransformation. Dies wird weder eine erklärung der Forientransorfmation noch ein genauer gebrauch für den Reed-Solomon-Code. Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. -wobei sie dann bei späteren Berchnungen ganz nütlich ist. +wobei sie dann bei späteren Berchnungen ganz nützlich ist. + +\subsection{Diskrete Fourientransformation Zusamenhang +\label{reedsolomon:subsection:dtfzusamenhang}} +Die Diskrete Fourientransformation ist definiert als \subsection{Übertragungsabfolge \label{reedsolomon:subsection:Übertragungsabfolge}} @@ -22,9 +26,7 @@ Kommen nuun drei Fehler... hinzu zu diesem codierten Signal sind diese nicht zu Nach dem Empfangen... und decodieren ... erkennt man die fehlerhafte information in den Punkten 64 bis 100. Filtert man nur diese Punkte heraus und Transformiert sie mit Fourier erhält man die stellen an denen die Fehler sich eingeschlichen haben. -\subsection{Diskrete Fourientransformation Zusamenhang -\label{reedsolomon:subsection:dtfzusamenhang}} -Die Diskrete Fourientransformation ist definiert als -.... + + diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index 3d40db1..2b1d878 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -6,13 +6,13 @@ \section{Einleitung \label{reedsolomon:section:einleitung}} \rhead{Einleitung} -Der Reed-Solomon-Code ist entstaden im ... vom .. um, -das Problem der Daten Übertragung zu lösen. -In deiesem Abschnitt wird möglichst verständlich die mathematische Abfolge, Funktion oder Algorithmus erklärt. +Der Reed-Solomon-Code ist entstanden um, +das Problem der Fehler, bei der Datenübertragung, zu lösen. +In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge, Funktion oder Algorithmus erklärt. Es wird jedoch nicht auf die technische Umsetzung oder Implementierung eingegangen. -Um beim Daten Übertragen fehler zu erkennen könnte man die Daten jeweils doppelt senden, +Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden, und so jeweilige Fehler zu erkennen. -Doch dies braucht schnell unmengen an Daten, wenn man nach vielen Fehler absichern möchte. +Doch nur schon um weinige Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet. Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 4a7716a..b0a772e 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -8,51 +8,65 @@ \rhead{Problemstellung} Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen. -Beim Reed-Solomon-Code kann man nicht nur Fehler erkenen, +Beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, man kann sogar einige Fehler korrigieren. \rhead{Polynom-Ansatz} -Eine Idee ist die Daten, -ein Polynom zu bilden und dieses dann mit bestimmten Punkten überträgt. +Eine Idee ist aus den Daten +ein Polynom zu bilden. +Diese Polynomfunktion bei bestimmten Werten, ausrechnet und diese Punkte dann überträgt. Nehmen wir als beisbiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, welche uns dann das Polynom \begin{equation} p(x) = -2x^2 + 1x + 5 +\textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} \label{reedsolomon:equation1} \end{equation} ergeben. -Übertragen werden nun die stellen 1, 2, 3\dots 7 dieses Polynomes. -Grafisch sieht man dies dann im Abbild //TODO -Wenn ein Fehler sich in die Übertragung eingeschlichen hatt, muss der Leser/Empfänger erkennen, welches das Richtige Polynom ist. -Der Leser/Empfänger weiss, mit welchem Grad das Polynom entwickelt wurde. +Übertragen werden nun die Werte an den stellen 1, 2, 3\dots 7 dieses Polynomes. +Grafisch sieht man dies dann in Abbildung % TODO +Wenn ein Fehler sich in die Übertragung eingeschlichen hatt, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. +Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. \subsection{Beispiel} -Für das Beispeil aus der Gleichung \ref{reedsolomon:equation1}, +Für das Beispeil aus der Gleichung \eqref{reedsolomon:equation1}, ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. Hat es Fehler in der Übertragunge gegeben, kann man diese erkennen, da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, gegenüber dem mit 5 Punkten falsch liegt. -Werden es mehr Fehler kann nur erkennt werden das das Polynom nicht stimmt. -Das Orginale Polynom kann aber nicht mehr gefunden werden. -Dabei sollten mehr Übertragungspunkte gegeben werden. +Werden es mehr Fehler kann nur erkennt werden, dass das Polynom nicht stimmt. +Das orginale Polynom kann aber nicht mehr gefunden werden. +Dafür sind mehr übertragene Werte nötig. \section{Fehlerbestimmung \label{reedsolomon:section:Fehlerbestimmmung}} So wird ein Muster indentifiziert, welches genau vorherbestimmen kann, wie gross das Polynom sein muss und wie viele Übertragungspunkte gegeben werden müssen. -Durch ein klein wenig Überlegung ist klar das die anzahl Zahlen (Daten, ab hier verwenden wir das Wort Nutzlast), -die dan Entschlüsselt werden sollen den Grad des Polynoms minus 1 ergeben. +Um zu bestimmen wie viel Fehler erkennt und korriegiert werden können. +Die Anzahl Zahlen (Daten, ab hier verwenden wir das Wort Nutzlast), +die Entschlüsselt werden sollen, brauchen die gleiche Anzahl an Polynomgraden, beginnend bei Grad 0. ( \( k-1 \) ) Für die Anzahl an Übertragungspunkte, muss bestimmt werden wieviel Fehler erkennt und korrigiert werden sollen. -Mit Hilfe der Tabelle.... sieht man das es bei $$t$$ Fehlern und $$k$$ Nutzlast, -für das Übertragen $$k+2t$$ Punkte gegben werden müssen. - -Ein toller Nebeneffekt ist das dadurch auch $$2t$$ Fehler erkannt werden. -um zurück auf unser Beispiel zu kommen, -können von den 7 Übertragungspunkten bis zu $$2t = 2*2 = 4 $$ Punkten falsch liegen -und es wird kein eindeutiges Polynom 2ten Grades erkannt, und somit die Nutzlast Daten als fehlerhaft deklariert. - -Ein Polynom durch Punkt mit Polynom Interpolation zu rekonstruieren ist schwierig und Fehleranfällig. +Mit Hilfe der Tabelle, sieht man das es bei $t$ Fehlern und $k$ Nutzlast Zahlen, +$k+2t$ Punkte übertragen werden müssen. +\begin{center} + \begin{tabular}{ c c c } + \hline + Nutzlas & Fehler & Übertragen \\ + \hline + 3 & 2 & 7 Werte eines Polynoms vom Grad 2 \\ + 4 & 2 & 8 Werte eines Polynoms vom Grad 3 \\ + 3 & 3 & 9 Werte eines Polynoms vom Grad 2 \\ + \hline + $k$ & $t$ & $k+2t$ Werte eines Polynoms vom Grad $k-1$ \\ + \hline + \end{tabular} +\end{center} +Ein toller Nebeneffekt ist das dadurch auch $2t$ Fehler erkannt werden. +Um zurück auf unser Beispiel zu kommen, +können von den 7 Übertragungspunkten bis zu $2t = 2\cdot2 = 4 $ Punkten falsch liegen +und es wird kein eindeutiges Polynom zweiten Grades erkannt, und somit die Nutzlast Daten als fehlerhaft deklariert. +Um aus den Übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden, +doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und Fehleranfällig. -- cgit v1.2.1 From 997e5ae44bcb81c81fbbf0c4fa29269ffe93fc24 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 19 Jul 2021 16:55:45 +0200 Subject: try to add picture --- buch/papers/reedsolomon/idee.tex | 10 +++++- buch/papers/reedsolomon/images/polynom2.tex | 51 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 buch/papers/reedsolomon/images/polynom2.tex (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index b0a772e..28b65bd 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -25,9 +25,17 @@ p(x) \end{equation} ergeben. Übertragen werden nun die Werte an den stellen 1, 2, 3\dots 7 dieses Polynomes. -Grafisch sieht man dies dann in Abbildung % TODO +Grafisch sieht man dies dann in Abbildung Wenn ein Fehler sich in die Übertragung eingeschlichen hatt, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. + +\begin{figure} + \centering + \includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2.pdf} + \caption{Polynom \eqref{reedsolomon:equation1}} + \label{fig:polynom} +\end{figure} + \subsection{Beispiel} Für das Beispeil aus der Gleichung \eqref{reedsolomon:equation1}, ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. diff --git a/buch/papers/reedsolomon/images/polynom2.tex b/buch/papers/reedsolomon/images/polynom2.tex new file mode 100644 index 0000000..be9a65e --- /dev/null +++ b/buch/papers/reedsolomon/images/polynom2.tex @@ -0,0 +1,51 @@ +% polynome2 +%------------------- +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\newcommand{\teiler}{40} +\begin{document} +% Übertragen von den Zahlen +% \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5} +% als $ p(x) = \textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} $.\newline +% Versende $ (p(1),p(2),...,p(7)) = (\textcolor{green}{8}, +% \textcolor{green}{15}, \textcolor{green}{26}, +% \textcolor{green}{ 41}, \textcolor{green}{60}, +% \textcolor{green}{83}, \textcolor{green}{110})$ + + + \begin{tikzpicture}[>=latex,thick] + \draw[color=blue, line width=1.4pt] + plot[domain=0:8, samples=100] + ({\x},{(2*\x^2+1*\x+5)/\teiler}); + \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; + \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; + \def\punkt#1{ + \fill[color=green] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + \punkt{(1,8/\teiler)} + %\punkt{(2,15/\teiler)} + %\punkt{(3,26/\teiler)} + \punkt{(4,41/\teiler)} + \punkt{(5,60/\teiler)} + \punkt{(6,83/\teiler)} + \punkt{(7,110/\teiler)} + \draw[color=gray,line width=1pt,dashed] + plot[domain=0.5:7, samples=100] + ({\x},{(0.1958*\x^2-1.2875*\x+3.0417)}); + \def\erpunkt#1{ + \fill[color=red] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + \erpunkt{(2,50/\teiler)} + \erpunkt{(3,0.9414)} + + \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; + \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; + \end{tikzpicture} +\end{document} -- cgit v1.2.1 From faf8fab3819a2b1eeb5529866716d545b52f6285 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 19 Jul 2021 17:36:11 +0200 Subject: another try --- buch/papers/reedsolomon/experiments/codiert.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/decodiert.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/empfangen.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/f.m | 22 ++++-- buch/papers/reedsolomon/experiments/fehler.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/locator.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/signal.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/experiments/syndrom.txt | 96 +++++++++++++++++++++++ buch/papers/reedsolomon/idee.tex | 7 +- buch/papers/reedsolomon/images/polynom2.tex | 32 ++++---- buch/papers/reedsolomon/packages.tex | 2 + 11 files changed, 712 insertions(+), 23 deletions(-) create mode 100644 buch/papers/reedsolomon/experiments/codiert.txt create mode 100644 buch/papers/reedsolomon/experiments/decodiert.txt create mode 100644 buch/papers/reedsolomon/experiments/empfangen.txt create mode 100644 buch/papers/reedsolomon/experiments/fehler.txt create mode 100644 buch/papers/reedsolomon/experiments/locator.txt create mode 100644 buch/papers/reedsolomon/experiments/signal.txt create mode 100644 buch/papers/reedsolomon/experiments/syndrom.txt (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/experiments/codiert.txt b/buch/papers/reedsolomon/experiments/codiert.txt new file mode 100644 index 0000000..a57fb3e --- /dev/null +++ b/buch/papers/reedsolomon/experiments/codiert.txt @@ -0,0 +1,96 @@ +305 +114.502535214877 +86.2532974498148 +10.2450106137816 +68.1373455525487 +12.2281691909479 +3.18633753309102 +20.0196562371296 +12.2767246322969 +11.7216140392957 +24.8752690882777 +16.2978466490127 +23.2518118214845 +16.5845482358975 +15.6140674930647 +33.396205039034 +20.7846096908265 +19.3528753492232 +16.3850575123207 +20.9502842499826 +17.064465004608 +11.7252100463969 +31.1005540675575 +29.4336965143315 +26.6270539113887 +18.0164813754079 +24.7444243500799 +7.51007272621331 +4.06984153366859 +27.215173252412 +17.2339815787965 +23.5539874432174 +22.2710574513201 +14.7961619823174 +25.5530773949688 +33.4185813747547 +11.5478676394508 +21.0691619228239 +28.7948800016184 +12.3795084046074 +17.0082930449459 +19.7473571196866 +18.4490385219626 +12.2195365467659 +7.58568158110485 +6.02300839250873 +14.565530706253 +3.78959213976527 +21 +3.78959213976527 +14.565530706253 +6.02300839250873 +7.58568158110485 +12.2195365467659 +18.4490385219626 +19.7473571196866 +17.0082930449459 +12.3795084046074 +28.7948800016184 +21.0691619228239 +11.5478676394508 +33.4185813747547 +25.5530773949688 +14.7961619823174 +22.2710574513201 +23.5539874432174 +17.2339815787965 +27.215173252412 +4.06984153366859 +7.51007272621331 +24.7444243500799 +18.0164813754079 +26.6270539113887 +29.4336965143315 +31.1005540675575 +11.7252100463969 +17.064465004608 +20.9502842499826 +16.3850575123207 +19.3528753492232 +20.7846096908265 +33.396205039034 +15.6140674930647 +16.5845482358975 +23.2518118214845 +16.2978466490127 +24.8752690882777 +11.7216140392957 +12.2767246322969 +20.0196562371296 +3.18633753309102 +12.2281691909479 +68.1373455525487 +10.2450106137816 +86.2532974498148 +114.502535214877 diff --git a/buch/papers/reedsolomon/experiments/decodiert.txt b/buch/papers/reedsolomon/experiments/decodiert.txt new file mode 100644 index 0000000..5295e2a --- /dev/null +++ b/buch/papers/reedsolomon/experiments/decodiert.txt @@ -0,0 +1,96 @@ +5.05208333333333 +4.02603841132848 +3.9866906905523 +2.98928833660435 +5.01944413899123 +5.01851886476838 +7.97795274966527 +7.9523893732277 +5.97396514457618 +4.00519657776884 +8.0006276895628 +4.97630831658918 +3.97918030102376 +9.01298821331865 +9.03553822210758 +6.02435577439403 +6.005269315244 +6.00739475784899 +2.02214193521707 +3.02175993431401 +5.00158984940366 +1.98176205240977 +7.97728830439693 +1.98491220960989 +1.98958333333333 +1.98491220960989 +1.97728880273589 +3.98152108172961 +3.00171929847136 +9.02175649397959 +4.02211963444795 +2.00740795901169 +9.00524899981178 +10.0243555198185 +4.03562322003676 +1.01362103081199 +2.97918487756672 +3.97630844288113 +6.00063199465927 +3.00522617023784 +5.97396514457618 +6.95239288504068 +1.97810392013073 +1.01862378300238 +3.0194483612015 +2.98928833660435 +3.9866906905523 +5.02603060999077 +1.05208333333333 +3.02605136876764 +7.9866590265379 +0.0177592928994289 +9.01944131204563 +7.01851125156932 +4.97798278395618 +5.95239757681758 +1.97397894668217 +5.00517880987882 +10.0006251063956 +4.97630831658918 +4.97917756274958 +2.01326692505463 +5.0355927170407 +6.02435577439403 +0.0275599094902566 +0.0115837187254189 +0.0258777610142382 +0.0224618032819705 +0.0441059468994403 +0.0474504002669344 +0.0227694695500614 +0.0271436638090525 +0.0104166666666661 +0.027143663809052 +0.0227694695500605 +0.0474504002669342 +0.04410594689944 +0.0224618032819704 +0.0258777610142386 +0.0115837187254188 +0.027559909490256 +0.0245124379481791 +0.0499782237195213 +0.0401432022864264 +0.023292374765623 +0.0237974288564093 +0.0143895905726623 +0.0271745729691686 +0.0275599094902561 +0.051550167218498 +0.0358255004834538 +0.0247005083663728 +0.0210194725405181 +0.0177592928994299 +0.0261327016093146 +0.0314909067039408 diff --git a/buch/papers/reedsolomon/experiments/empfangen.txt b/buch/papers/reedsolomon/experiments/empfangen.txt new file mode 100644 index 0000000..326dd83 --- /dev/null +++ b/buch/papers/reedsolomon/experiments/empfangen.txt @@ -0,0 +1,96 @@ +305 +114.502535214877 +86.2532974498148 +10.2450106137816 +68.1373455525487 +12.2281691909479 +4.75208293424194 +20.0196562371296 +12.2767246322969 +11.7216140392957 +24.8752690882777 +16.2978466490127 +23.2518118214845 +16.5845482358975 +15.6140674930647 +33.396205039034 +20.7846096908265 +19.3528753492232 +16.3850575123207 +20.9502842499826 +19.0535931901409 +11.7252100463969 +31.1005540675575 +29.4336965143315 +26.6270539113887 +18.0164813754079 +24.7444243500799 +7.51007272621331 +4.06984153366859 +27.215173252412 +17.2339815787965 +23.5539874432174 +22.2710574513201 +14.7961619823174 +25.5530773949688 +33.4185813747547 +11.5478676394508 +21.0691619228239 +28.7948800016184 +12.3795084046074 +17.0082930449459 +19.7473571196866 +18.4490385219626 +12.2195365467659 +7.58568158110485 +6.02300839250873 +14.565530706253 +3.78959213976527 +21 +3.78959213976527 +14.565530706253 +6.02300839250873 +7.58568158110485 +12.2195365467659 +18.4490385219626 +19.7473571196866 +17.0082930449459 +12.3795084046074 +28.7948800016184 +21.0691619228239 +11.5478676394508 +33.4185813747547 +25.5530773949688 +14.7961619823174 +22.2710574513201 +23.5539874432174 +17.2339815787965 +27.215173252412 +4.06984153366859 +7.51007272621331 +24.7444243500799 +18.0164813754079 +26.6270539113887 +29.4336965143315 +30.3915028428898 +11.7252100463969 +17.064465004608 +20.9502842499826 +16.3850575123207 +19.3528753492232 +20.7846096908265 +33.396205039034 +15.6140674930647 +16.5845482358975 +23.2518118214845 +16.2978466490127 +24.8752690882777 +11.7216140392957 +12.2767246322969 +20.0196562371296 +3.18633753309102 +12.2281691909479 +68.1373455525487 +10.2450106137816 +86.2532974498148 +114.502535214877 diff --git a/buch/papers/reedsolomon/experiments/f.m b/buch/papers/reedsolomon/experiments/f.m index 6bdc741..5e4da85 100644 --- a/buch/papers/reedsolomon/experiments/f.m +++ b/buch/papers/reedsolomon/experiments/f.m @@ -1,8 +1,8 @@ -# -# f.m -- Reed-Solomon-Visualisierung mit FFT -# -# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule -# +% +% f.m -- Reed-Solomon-Visualisierung mit FFT +% +% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule + N = 64; b = 32; l = N + b; @@ -59,3 +59,15 @@ plot(locator); xlim([1, l]); title("Locator"); pause() + +writematrix(abs(signal), 'signal.txt') +writematrix(abs(codiert), 'codiert.txt') +writematrix(fehler, 'fehler.txt') +writematrix(abs(empfangen), 'empfangen.txt') +writematrix(abs(decodiert), 'decodiert.txt') +writematrix(abs(syndrom), 'syndrom.txt') +writematrix(locator, 'locator.txt') + + + + diff --git a/buch/papers/reedsolomon/experiments/fehler.txt b/buch/papers/reedsolomon/experiments/fehler.txt new file mode 100644 index 0000000..b8f9afb --- /dev/null +++ b/buch/papers/reedsolomon/experiments/fehler.txt @@ -0,0 +1,96 @@ +0 +0 +0 +0 +0 +0 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +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 +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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/buch/papers/reedsolomon/experiments/locator.txt b/buch/papers/reedsolomon/experiments/locator.txt new file mode 100644 index 0000000..421d36e --- /dev/null +++ b/buch/papers/reedsolomon/experiments/locator.txt @@ -0,0 +1,96 @@ +0.0301224340566959 +0.141653026854878 +0.138226631799375 +0.0339903276086926 +0.310585462557496 +0.551427312631386 +0.628514858396816 +0.511023862515591 +0.275861355940448 +0.0502396354182231 +0.0901855025475772 +0.110759344849757 +0.0684618905062958 +0.0362855426992255 +0.0697096919781522 +0.109288539370249 +0.0923187999496619 +0.0512198536768151 +0.274192386987786 +0.513496149536541 +0.633154426602464 +0.553283743533939 +0.307840573214511 +0.0341664350328389 +0.140270857956999 +0.138527177682829 +0.0296375477361526 +0.0816962563186064 +0.0944383203811072 +0.0263932110686224 +0.058588134840207 +0.0737117341600011 +0.0239973937701886 +0.0464215468420024 +0.0616218854220982 +0.0221963086695035 +0.0390764778127614 +0.0537637218396927 +0.0208333333333355 +0.0343107696069015 +0.0483441215964522 +0.0198077862118787 +0.0311207395968709 +0.0444955089373439 +0.0190533549944134 +0.0290049795038704 +0.0417536642697542 +0.0185261550443044 +0.0277059929762204 +0.0398606084144781 +0.0181978813094801 +0.0271098219177536 +0.0386836665079658 +0.018051861104682 +0.0272138992557153 +0.0381891287148298 +0.0180809085252426 +0.0281418959420076 +0.0384596362516644 +0.0182864418432244 +0.0302250788423177 +0.0397874837986374 +0.0186786556701704 +0.0342489348284176 +0.0429932815348636 +0.0192777878591794 +0.0422808966932026 +0.0506815964680558 +0.0201167847752232 +0.0615048274405276 +0.074495389450843 +0.0212460545964937 +0.142602265816219 +0.273502052865438 +0.325309673287598 +0.272705389655347 +0.149074257381343 +0.0247199397628717 +0.0680137859566989 +0.0753882708734869 +0.0273637831604916 +0.0407867704453288 +0.0632964886441987 +0.0309749128751131 +0.0315202035072016 +0.0627625211892194 +0.0360843918243526 +0.0279492055149482 +0.0677921493367224 +0.0437167157553051 +0.0270640150996341 +0.0783380025231665 +0.0561293738314322 +0.0278742033265804 +0.0981443889498686 +0.0794543457386637 diff --git a/buch/papers/reedsolomon/experiments/signal.txt b/buch/papers/reedsolomon/experiments/signal.txt new file mode 100644 index 0000000..202dd02 --- /dev/null +++ b/buch/papers/reedsolomon/experiments/signal.txt @@ -0,0 +1,96 @@ +5 +4 +4 +3 +5 +5 +8 +8 +6 +4 +8 +5 +4 +9 +9 +6 +6 +6 +2 +3 +5 +2 +8 +2 +2 +2 +2 +4 +3 +9 +4 +2 +9 +10 +4 +1 +3 +4 +6 +3 +6 +7 +2 +1 +3 +3 +4 +5 +1 +3 +8 +0 +9 +7 +5 +6 +2 +5 +10 +5 +5 +2 +5 +6 +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 +0 +0 +0 +0 +0 diff --git a/buch/papers/reedsolomon/experiments/syndrom.txt b/buch/papers/reedsolomon/experiments/syndrom.txt new file mode 100644 index 0000000..59b9dc4 --- /dev/null +++ b/buch/papers/reedsolomon/experiments/syndrom.txt @@ -0,0 +1,96 @@ +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 +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 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0.0275599094902566 +0.0115837187254189 +0.0258777610142382 +0.0224618032819705 +0.0441059468994403 +0.0474504002669344 +0.0227694695500614 +0.0271436638090525 +0.0104166666666661 +0.027143663809052 +0.0227694695500605 +0.0474504002669342 +0.04410594689944 +0.0224618032819704 +0.0258777610142386 +0.0115837187254188 +0.027559909490256 +0.0245124379481791 +0.0499782237195213 +0.0401432022864264 +0.023292374765623 +0.0237974288564093 +0.0143895905726623 +0.0271745729691686 +0.0275599094902561 +0.051550167218498 +0.0358255004834538 +0.0247005083663728 +0.0210194725405181 +0.0177592928994299 +0.0261327016093146 +0.0314909067039408 diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 28b65bd..5e91559 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -31,7 +31,8 @@ Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt \begin{figure} \centering - \includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2.pdf} + %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2} + %\input{papers/reedsolomon/images/polynom2.tex} \caption{Polynom \eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} @@ -43,7 +44,7 @@ Hat es Fehler in der Übertragunge gegeben, kann man diese erkennen, da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, -gegenüber dem mit 5 Punkten falsch liegt. +gegenüber dem mit 5 Punkten falsch liegt.\ref{fig:polynom} Werden es mehr Fehler kann nur erkennt werden, dass das Polynom nicht stimmt. Das orginale Polynom kann aber nicht mehr gefunden werden. Dafür sind mehr übertragene Werte nötig. @@ -58,6 +59,7 @@ die Entschlüsselt werden sollen, brauchen die gleiche Anzahl an Polynomgraden, Für die Anzahl an Übertragungspunkte, muss bestimmt werden wieviel Fehler erkennt und korrigiert werden sollen. Mit Hilfe der Tabelle, sieht man das es bei $t$ Fehlern und $k$ Nutzlast Zahlen, $k+2t$ Punkte übertragen werden müssen. + \begin{center} \begin{tabular}{ c c c } \hline @@ -71,6 +73,7 @@ $k+2t$ Punkte übertragen werden müssen. \hline \end{tabular} \end{center} + Ein toller Nebeneffekt ist das dadurch auch $2t$ Fehler erkannt werden. Um zurück auf unser Beispiel zu kommen, können von den 7 Übertragungspunkten bis zu $2t = 2\cdot2 = 4 $ Punkten falsch liegen diff --git a/buch/papers/reedsolomon/images/polynom2.tex b/buch/papers/reedsolomon/images/polynom2.tex index be9a65e..4fdfc81 100644 --- a/buch/papers/reedsolomon/images/polynom2.tex +++ b/buch/papers/reedsolomon/images/polynom2.tex @@ -1,21 +1,21 @@ % polynome2 %------------------- -\documentclass[tikz]{standalone} -\usepackage{amsmath} -\usepackage{times} -\usepackage{txfonts} -\usepackage{pgfplots} -\usepackage{csvsimple} -\usetikzlibrary{arrows,intersections,math} +%\documentclass[tikz]{standalone} +%\usepackage{amsmath} +%\usepackage{times} +%\usepackage{txfonts} +%\usepackage{pgfplots} +%\usepackage{csvsimple} +%\usetikzlibrary{arrows,intersections,math} \newcommand{\teiler}{40} -\begin{document} -% Übertragen von den Zahlen -% \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5} -% als $ p(x) = \textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} $.\newline -% Versende $ (p(1),p(2),...,p(7)) = (\textcolor{green}{8}, -% \textcolor{green}{15}, \textcolor{green}{26}, -% \textcolor{green}{ 41}, \textcolor{green}{60}, -% \textcolor{green}{83}, \textcolor{green}{110})$ +%\begin{document} + Übertragen von den Zahlen + \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5} + als $ p(x) = \textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} $.\newline + Versende $ (p(1),p(2),...,p(7)) = (\textcolor{green}{8}, + \textcolor{green}{15}, \textcolor{green}{26}, + \textcolor{green}{ 41}, \textcolor{green}{60}, + \textcolor{green}{83}, \textcolor{green}{110})$ \begin{tikzpicture}[>=latex,thick] @@ -48,4 +48,4 @@ \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; \end{tikzpicture} -\end{document} +%\end{document} diff --git a/buch/papers/reedsolomon/packages.tex b/buch/papers/reedsolomon/packages.tex index 3643731..4b1ee68 100644 --- a/buch/papers/reedsolomon/packages.tex +++ b/buch/papers/reedsolomon/packages.tex @@ -8,3 +8,5 @@ % following example %\usepackage{packagename} +\usepackage{pgfplots} + -- cgit v1.2.1 From 1a539e1764591e3daf7a254a038f956209e7f942 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 19 Jul 2021 17:46:05 +0200 Subject: minor changes --- buch/papers/reedsolomon/idee.tex | 2 +- buch/papers/reedsolomon/main.tex | 2 +- buch/papers/reedsolomon/teil2.tex | 40 --------------------------------------- 3 files changed, 2 insertions(+), 42 deletions(-) delete mode 100644 buch/papers/reedsolomon/teil2.tex (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 5e91559..08864cf 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -33,7 +33,7 @@ Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt \centering %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2} %\input{papers/reedsolomon/images/polynom2.tex} - \caption{Polynom \eqref{reedsolomon:equation1}} + \caption{Polynom } \label{fig:polynom} \end{figure} diff --git a/buch/papers/reedsolomon/main.tex b/buch/papers/reedsolomon/main.tex index 6bd04f2..18994dc 100644 --- a/buch/papers/reedsolomon/main.tex +++ b/buch/papers/reedsolomon/main.tex @@ -30,7 +30,7 @@ Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren % Joshua \input{papers/reedsolomon/einleitung.tex} \input{papers/reedsolomon/idee.tex} -\input{papers/reedsolomon/teil2.tex} +%\input{papers/reedsolomon/teil2.tex} \input{papers/reedsolomon/dtf.tex} % Michael diff --git a/buch/papers/reedsolomon/teil2.tex b/buch/papers/reedsolomon/teil2.tex deleted file mode 100644 index b2adc9f..0000000 --- a/buch/papers/reedsolomon/teil2.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil2.tex -- Beispiel-File für teil2 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 2 -\label{reedsolomon:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{reedsolomon:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - -- cgit v1.2.1 From bb1a2ba9187459d0304e2fa073306c333ae5f236 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Mon, 19 Jul 2021 20:47:33 +0200 Subject: final pictures added, sources updated --- buch/papers/reedsolomon/anwendungen.tex | 28 ++++++++++- buch/papers/reedsolomon/images/designer_qrcode.png | Bin 0 -> 163253 bytes .../images/designer_qrcode_ohnelogo.png | Bin 0 -> 133792 bytes buch/papers/reedsolomon/main.tex | 6 +++ buch/papers/reedsolomon/references.bib | 53 +++++++++++++++++++++ 5 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 buch/papers/reedsolomon/images/designer_qrcode.png create mode 100644 buch/papers/reedsolomon/images/designer_qrcode_ohnelogo.png (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/anwendungen.tex b/buch/papers/reedsolomon/anwendungen.tex index 4b30ec9..c03b1a4 100644 --- a/buch/papers/reedsolomon/anwendungen.tex +++ b/buch/papers/reedsolomon/anwendungen.tex @@ -113,7 +113,7 @@ Die Digital Video Disc funktioniert nach dem selben Konzept mit grösseren Codeb \end{figure} \subsection{QR-Codes} -Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel der Abschnitte \ref{reedsolomon:section:codebsp} - \ref{reedsolomon:section:rekonstruktion} nur das QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Die Physische Grösse eines Codes ist stark abhängig von der Grösse der Codierung sowie dem Fehlerkorrektur-Level. Es ist so auf dem ersten Blick nicht ersichtlich, wie viel Nutzinformationen ein Qr-Code enthält. Die QR-Codes in Abbildung \ref{fig:qr} zeigen jeweils die Gleiche Information mit unterschiedlichem Fehlerkorrektur-Level. Codes mit einem höheren Korrektur-Level können auch für Desingner-Codes Zweckentfremdet werden. Dabei wird z.B. das Firmenlogo oder einen Schriftzug über den Qr-Code gelegt, ohne das die Funktion des Codes beeinträchtigt wird. Ein Beispiel dazu ist ebenfalls unter Abbildung \ref{fig:qr} \textcolor{red}{(noch nicht erstellt + beschreibung anpassen)} zu finden. +Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel der Abschnitte \ref{reedsolomon:section:codebsp} - \ref{reedsolomon:section:rekonstruktion} nur das QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Die Physische Grösse eines Codes ist stark abhängig von der Grösse der Codierung sowie dem Fehlerkorrektur-Level. Es ist so auf dem ersten Blick nicht ersichtlich, wie viel Nutzinformationen ein Qr-Code enthält. Die QR-Codes in Abbildung \ref{fig:qr} zeigen jeweils die Gleiche Information mit unterschiedlichem Fehlerkorrektur-Level. Codes mit einem höheren Korrektur-Level können auch für Designer-Codes Zweckentfremdet werden. Dabei wird z.B. das Firmenlogo oder einen Schriftzug über den Qr-Code gelegt, ohne das die Funktion des Codes beeinträchtigt wird. Ein Beispiel dazu ist unter Abbildung \ref{fig:designqr} zu finden. % @@ -130,6 +130,30 @@ Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen \subfigure[]{ \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/qrcode_l} } - \caption{(a) High Level Code, (b) Low Level Code} +% \subfigure[]{ +% \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/designer_qrcode_ohnelogo} +% } +% \subfigure[]{ +% \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/designer_qrcode} +% } + \caption{Anhand der grösse würde man darauf schliessen, dass bei (a) mehr Informationen Codiert sind als bei (b). Tatsächlich aber beinhalten beide Codes die gleiche Information. Das liegt daran, da die Fehlerkorrekturfähigkeit von QR-Codes sich in insgesamt vier Levels aufteilen lassen. Der höchste Fehlerkorrektur-Level, der bei (a) angewendet wurde, ist in der Lage, bis zu 30\% der Daten wiederherzustellen. Der kleinste Level schafft etwa 7\%, der in (b) veranschaulicht wird. Da die Grösse also nichts über die Menge an Daten aussagt, könnte es sich bei (a) auch um einen Code mit viel Nutzdaten und kleinem Fehlerkorrektur-Level handeln. Der Unterschied ist von Auge nicht sichtbar.} \label{fig:qr} \end{figure} + +\begin{figure} + \centering +% \subfigure[]{ +% \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/qrcode_h} +% } +% \subfigure[]{ +% \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/qrcode_l} +% } + \subfigure[]{ + \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/designer_qrcode_ohnelogo} + } + \subfigure[]{ + \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/designer_qrcode} + } + \caption{Während (a) noch ein unveränderter QR-Code repräsentiert, handelt es sich bei (b) nun um einen Designer-QR-Code. Beide Codes verfügen über einen mittleren Fehlerkorrektur-Level von theoretisch 15\%. Da bei (b) jetzt einen Teil des Codes durch ein Logo verdeckt wird, schränkt sich dadurch die Fehlerkorrekturfähigkeit je nach grösse des verdeckten Teils mehr oder weniger stark ein. Unser Designer-Code in (b) ist nur noch in der Lage etwa 9\% des Codes zu rekonstruieren.} + \label{fig:designqr} +\end{figure} \ No newline at end of file diff --git a/buch/papers/reedsolomon/images/designer_qrcode.png b/buch/papers/reedsolomon/images/designer_qrcode.png new file mode 100644 index 0000000..a9e0505 Binary files /dev/null and b/buch/papers/reedsolomon/images/designer_qrcode.png differ diff --git a/buch/papers/reedsolomon/images/designer_qrcode_ohnelogo.png b/buch/papers/reedsolomon/images/designer_qrcode_ohnelogo.png new file mode 100644 index 0000000..fe4251d Binary files /dev/null and b/buch/papers/reedsolomon/images/designer_qrcode_ohnelogo.png differ diff --git a/buch/papers/reedsolomon/main.tex b/buch/papers/reedsolomon/main.tex index 6bd04f2..a400508 100644 --- a/buch/papers/reedsolomon/main.tex +++ b/buch/papers/reedsolomon/main.tex @@ -45,6 +45,12 @@ Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren \nocite{reedsolomon:weitz} \nocite{reedsolomon:informationkommunikation} +\nocite{reedsolomon:voyager_programm} +\nocite{reedsolomon:voyager} +\nocite{reedsolomon:cd_wiki} +\nocite{reedsolomon:cd} +\nocite{reedsolomon:qr_wiki} +\nocite{reedsolomon:qr} %\nocite{reedsolomon:mendezmueller} \printbibliography[heading=subbibliography] diff --git a/buch/papers/reedsolomon/references.bib b/buch/papers/reedsolomon/references.bib index 731bd35..e0a75a8 100644 --- a/buch/papers/reedsolomon/references.bib +++ b/buch/papers/reedsolomon/references.bib @@ -23,3 +23,56 @@ volume = {1} } +@online{reedsolomon:voyager_programm, + title = {Information über das Voyager Programm}, + url = {https://de.wikipedia.org/wiki/Voyager-Programm}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} + +@online{reedsolomon:voyager, + title = {Bild der Voyager Raumsonde}, + url = {https://en.wikipedia.org/wiki/Voyager_1}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} + +@online{reedsolomon:cd_wiki, + title = {Alles über die CD}, + url = {https://de.wikipedia.org/wiki/Compact_Disc}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} + +@online{reedsolomon:cd, + title = {Funktionsweise des QR-Codes}, + url = {https://www.stickpng.com/img/electronics/compact-discs/stack-compact-disc}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} + +@online{reedsolomon:qr_wiki, + title = {Funktionsweise des QR-Codes}, + url = {https://de.wikipedia.org/wiki/QR-Code}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} + +@online{reedsolomon:qr, + title = {Tool zum erstellen von QR-Codes}, + url = {https://www.qrcode-generator.ch}, + date = {2021-07-19}, + year = {2021}, + month = {7}, + day = {19} +} \ No newline at end of file -- cgit v1.2.1 From a1284996aea194e255d8bd292874080bf2f3cc44 Mon Sep 17 00:00:00 2001 From: tim30b Date: Mon, 19 Jul 2021 23:27:52 +0200 Subject: Write schoenflies und minor fixes --- buch/papers/punktgruppen/crystals.tex | 28 ++++++++++++++++++++-------- buch/papers/punktgruppen/piezo.tex | 31 +++++++++++++++++++------------ 2 files changed, 39 insertions(+), 20 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index a124442..e8dfa76 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -28,6 +28,8 @@ erreicht werden sofern $\{n_1,n_2,n_3\} \in \mathbb{Z}$ sind. Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. +%TODOO fix Q define without vector symb. -> ask naoki + \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, @@ -104,7 +106,7 @@ ein. \begin{figure} \centering \includegraphics[]{papers/punktgruppen/figures/projections} - \caption{Kristallklassen mit zugehöriger Schönfliesnotation} + \caption{Kristallklassen mit zugehörigem Schönflies-Symbol} \label{fig:punktgruppen:Kristallkassen} \end{figure} @@ -112,17 +114,27 @@ ein. Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum nur auf genau 32 Arten rein punktsymmetrische -\footnote{Werden translationssymmetrien auch mit gezählt beschreibt man die 230 Raumgruppen} Symmetriegruppen bilden können. Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. -Eine mögliche Art, die Klassen zu benennen ist nach dem Mathematiker Arthur Moritz Schönflies, -welcher sich mit der Klasifizierung dieser Symmetrien auseinandergesetzt hat. -Auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} sind die möglichen Punktsymmetrien mit deren Schönfliesnotation aufgelistet. -Als Darstellungsmethode wurde die stereographische Projektion gewählt, wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. +Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. +Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion +\footnote{Die Markierten Kreise/Kreuze repräsentieren Punkte auf einer Kugel. +Die Orte der Symbole stehen für einen Schattenwurf eines Punktes auf dem Boden, auf welcher sich die Kugel befindet. +Wobei die Lichtquelle am Nord/Südpol liegt.} +ermöglicht, +wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. + + +\subsubsection{Schönflies-Symbilok} +Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem Schöönflies-Symbol bezeichnet. +Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, +welcher sich unter anderem mit der Klasifizierung der Kristallklassen auseinandergesetzt hat. +Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. +Anschaulich ist als Beispiel die Drehgruppe \[C\]. +Die Elemente einer Untergruppe werden erst mit ihren Zusätzen eindeutig wie \[C_{3i}\], +was für eine dreifache Rotationssymmetrie mit einem Inversionszentrum steht. -\subsubsection{Schönflies Notation} -TODO diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index 3c3957b..feac9e5 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -39,22 +39,30 @@ Die Polarisation resultiert über eine gesamte Oberfläche eines Kristalles, ent Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren. In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise Positive Ionen und blaue negative Ionen repräsentieren. %liste oder anderes format?.. -Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. +Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. +Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil mitlleren Ladungsträger weiter auseinander gerdrückt werden. -Als hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. +Als hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, +dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. \subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unterdruck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. -Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten scheint es als würden rechts mehr Positive Ionen in die Platte gedrückt werden und links umgekehrt. -Dies ist aber nicht mehr der Fall, wenn der Kristall nach oben und periodisch wiederholt. +Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, +scheint es als würden rechts mehr Positive Ionen in die Platte gedrückt werden und links umgekehrt. +Dies ist aber nicht mehr der Fall, wenn die Struktur sich nach oben und unten periodisch wiederholt. Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. -Was in zwischen $(b)$ und $(c)$ zu beobachten ist, ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu $(b)$. -Daraus kann man schlissen, dass $(a)$ keine Rotationssymmetrie von $90^\circ$ besitzen kann, weil die Eigenschaften ändern bei einer $90^\circ$ Drehung. -Das Fehlen dieser Rotationssymmetrie kann mit betrachten von $(a)$ bestätigt werden. +Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, +ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, +im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}. +Daraus kann man schlissen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von $90^\circ$ besitzen kann, +weil die Eigenschaften ändern bei einer $90^\circ$ Drehung. +Das Fehlen dieser Rotationssymmetrie kann mit betrachten von \subref{fig:punktgruppen:atoms-piezo} bestätigt werden. -\subsection{Punktsymmetrie}\footnote{In der Literatur wird ein Punktsymmetrisches Kristallgitter oft als Kristallgitter mit Inversionszentrum bezeichnet.} -Piezoelektrische Kristalle können nicht Punktsymmetrisch sein. +\subsection{Punktsymmetrie} +Piezoelektrische Kristalle können nicht Punktsymmetrisch +\footnote{In der Literatur wird ein Punktsymmetrisches Kristallgitter oft als Kristallgitter mit Inversionszentrum bezeichnet.} sein. Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden. -Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst $(a)$ ein nicht Punktsymmetrischer Kristall mit einem Punktsymmetrischen $(d)$ verglichen worden. +Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht Punktsymmetrischer Kristall +mit einem Punktsymmetrischen \subref{fig:punktgruppen:atoms-grid}verglichen worden. Als vereinfachte Erklärung kann mann sich wieder das Bild vor augen führen, eines Kristalles, welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt. Spiegelt man nun den Kristall um den Gitterpunkt in der mitte des Kristalles, so würden die negativen Ionen auf den Positiven auf der anderen seite landen, @@ -73,5 +81,4 @@ Sollten Sie also eines Tages in die Situation geraten, in welcher Sie zwei versc und ein piezoelektrisches Feuerzeug bauen müssen, wobei Sie aber wissen, dass einer eine Punktsymmetrie aufweist, versuche sie es mit dem anderen. -Ich muss aber anmerken, dass aus den $21$ möglichen Kristallsymmetrien ohne Punktsymmetrie einer nicht piezoelektrisch ist. -ein wenig glück brauchen Sie also immer noch. + -- cgit v1.2.1 From 294c88d822acddaf1edd63fb111fec169c43123e Mon Sep 17 00:00:00 2001 From: tschwall <55748566+tschwall@users.noreply.github.com> Date: Tue, 20 Jul 2021 09:46:38 +0200 Subject: =?UTF-8?q?=C3=9Cberarbeitung=20Kapitel=2018.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Kapitel 18.1 Vektoroperationen wurde überarbeitet --- buch/papers/clifford/0_ElevatorPitch.tex | 8 +- buch/papers/clifford/1_Vektordarstellung.tex | 14 +- buch/papers/clifford/2_QuadratVektoren.tex | 108 +++++++------ buch/papers/clifford/3_MultiplikationVektoren.tex | 184 +++++++++++----------- buch/papers/clifford/4_GeometrischesProdukt.tex | 18 +-- buch/papers/clifford/references.bib | 35 +--- 6 files changed, 180 insertions(+), 187 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/clifford/0_ElevatorPitch.tex b/buch/papers/clifford/0_ElevatorPitch.tex index 0db5617..ad9bcc2 100644 --- a/buch/papers/clifford/0_ElevatorPitch.tex +++ b/buch/papers/clifford/0_ElevatorPitch.tex @@ -1,2 +1,6 @@ -TODO... -GA [Geometric Algebra i.a.W. Clifford Algebra] provides a unified language for the whole of physics and for much of mathematics and its applications that is conceptually and computationally superior to alternative mathematical systems in many application domains. \ No newline at end of file + +Der Nutzen, welche die Clifford Algebra hat, lässt sich am besten mit den Worten des modernen Begründers dieser erläutern. + +"GA [Geometric Algebra i.a.W. Clifford Algebra] provides a unified language for the whole of physics and for much of mathematics and its applications that is conceptually and computationally superior to alternative mathematical systems in many application domains." \cite{clifford:hestenes_GA} + +Im folgenden hoffen wir den Leser von der Nützlichkeit und der geometrischen Schönheit der Clifford Algebra zu überzeugen. \ No newline at end of file diff --git a/buch/papers/clifford/1_Vektordarstellung.tex b/buch/papers/clifford/1_Vektordarstellung.tex index 88a5789..ac00a33 100644 --- a/buch/papers/clifford/1_Vektordarstellung.tex +++ b/buch/papers/clifford/1_Vektordarstellung.tex @@ -1,7 +1,7 @@ \section{Vektoroperationen\label{clifford:section:Vektoroperationen}} \rhead{Vektoroperationen} \subsection{Vektordarstellung\label{clifford:section:Vektordarstellung}} -Vektoren können neben der üblichen Darstellung, auch als Linearkombination aus Basisvektoren dargestellt werden +Vektoren können neben der üblichen Spaltendarstellung, auch als Linearkombination aus Basisvektoren \begin{equation} \begin{split} \textbf{a} @@ -31,12 +31,14 @@ Vektoren können neben der üblichen Darstellung, auch als Linearkombination aus \sum_{i=1}^{n} a_i \textbf{e}_i \qquad a_i \in \mathbb{R} - , \textbf{e}_i \in \mathbb{R}^n. + , \textbf{e}_i \in \mathbb{R}^n \end{split} \end{equation} -Diese Basisvektoren sollen orthonormal sein und um die Darstellung zu vereinfachen werden sie durch $\textbf{e}_1 , \textbf{e}_2, ...$ ersetzt. +dargestellt werden. +Diese Basisvektoren werden so gewählt, dass sie orthonormal sind. +Um die Darstellung zu vereinfachen werden sie durch $\textbf{e}_1 , \textbf{e}_2, \dots$ ersetzt. \begin{beispiel} -Linearkombination von Basisvektoren in $\mathbb{R}^4$ +Eine Linearkombination von Basisvektoren in $\mathbb{R}^4$ könnte wie folgt aussehen \begin{equation} \begin{pmatrix} 42 \\ 2 \\ 1291 \\ 4 @@ -65,7 +67,7 @@ Linearkombination von Basisvektoren in $\mathbb{R}^4$ + 1291\textbf{e}_3 + - 4\textbf{e}_4 + 4\textbf{e}_4. \end{equation} +Dieses Beispiel ist für einen vier dimensionalen Vektor, dies kann selbstverständlich für beliebig viele Dimensionen nach demselben Schema erweitert werden. \end{beispiel} -Wobei Beispiel für einen vier dimensionalen Vektor ist, dies kann selbstverständlich für beliebig viele Dimensionen nach demselben Schema erweitert werden. \ No newline at end of file diff --git a/buch/papers/clifford/2_QuadratVektoren.tex b/buch/papers/clifford/2_QuadratVektoren.tex index cfb05d6..6c6fb7d 100644 --- a/buch/papers/clifford/2_QuadratVektoren.tex +++ b/buch/papers/clifford/2_QuadratVektoren.tex @@ -1,54 +1,71 @@ \subsection{Quadrat von Vektoren} -Was eine Addition von Vektoren bedeutet ist sehr intuitiv und auch leicht geometrisch darzustellen, was allerdings das Produkt von Vektoren ergibt mag anfänglich unintuitiv wirken. +\subsubsection{Ziel der Multiplikation} +Was eine Addition von Vektoren bedeutet ist sehr intuitiv und auch leicht geometrisch darzustellen wie in Abbildung \ref{figure:addition}, was allerdings das Produkt von Vektoren ergibt mag anfänglich unintuitiv wirken. +\begin{figure}[htb] + \centering + \begin{tikzpicture} + \draw[thin,gray!40] (0,0) grid (4,4); + \draw[blue,thick,->] (0,0)--(3.5,2) node[midway,above,sloped] {$\textbf{a}$}; + \draw[red,thick,->] (3.5,2)--(1.5,3.8) node[midway,above,sloped] {$\textbf{b}$}; + \draw[black,thick,->] (0,0)--(1.5,3.8)node[midway,above,sloped] {$\textbf{a} +\textbf{b} = \textbf{c} $}; + \end{tikzpicture} + \caption{Addition von zwei Vektoren\label{figure:addition}} +\end{figure} Was soll es schon heissen zwei Vektoren miteinander zu multiplizieren? -\newline Im Folgenden werden wir versuchen diese Operation ähnlich intuitiv darzustellen. -\newline -Um sinnvoll eine neue Operation zwischen zwei Elementen einer Algebra, in diesem Fall Vektoren, zu definieren, muss man überlegen, was das Ziel dieser Operation ist. -Als grundsätzliches Ziel wird definiert, dass das Quadrat eines Vektor dessen Länge im Quadrat ergibt, da dies auch in vielen anderen Bereichen der Mathematik,zum Beispiel bei komplexen Zahlen, auch so definiert ist. -\newline -Zusätzlich wollen wir auch das Assoziativgesetz und das Kommutativgesetz für Skalare beibehalten. Wobei das Kommutativgesetz leider, oder wie man sehen wird zum Glück, in der geometrischen Algebra im generellen nicht mehr gilt. Das heisst wir dürfen ausklammern \ref{eq:assoziativ} und die Position von Skalaren im Produkt ändern \ref{eq:kommSkalar}, allerdings nicht die Position der Vektoren \ref{eq:kommVector}. + +Um sinnvoll eine neue Operation zwischen zwei Elementen einer Algebra, in diesem Fall sind diese Elemente Vektoren, zu definieren, muss man überlegen, was das Ziel dieser Operation sein soll. + +Als grundsätzliches Ziel wird definiert, dass das Quadrat eines Vektor dessen Länge im Quadrat ergibt, da dies auch in vielen anderen Bereichen der Mathematik,zum Beispiel bei komplexen Zahlen,so definiert ist. + +Zusätzlich soll auch das Assoziativgesetz für die Multiplikation von Vektoren gelten, dass heisst wir dürfen ausklammern \begin{equation} \label{eq:assoziativ} \textbf{e}_i(\textbf{e}_j + \textbf{e}_k) = - \textbf{e}_i\textbf{e}_j + \textbf{e}_i\textbf{e}_k + \textbf{e}_i\textbf{e}_j + \textbf{e}_i\textbf{e}_k. \end{equation} +Allerdings gilt das Kommutativgesetz leider, oder wie man sehen wird zum Glück, nur für skalare Elemente \begin{equation} \label{eq:kommSkalar} a\textbf{e}_ib\textbf{e}_j = - ab\textbf{e}_i\textbf{e}_j + ab\textbf{e}_i\textbf{e}_j \qquad a,b \in \mathbb{R} \end{equation} +und nicht für Vektoren \begin{equation} \label{eq:kommVector} \textbf{e}_i\textbf{e}_j \neq - \textbf{e}_j\textbf{e}_i + \textbf{e}_j\textbf{e}_i. +\end{equation} +\subsubsection{Quadrieren eines Vektors} +Betrachten wir nun mit diesen Regeln das Quadrat eines Vektors. Zuerst werden die Vektoren als Linearkombinationen geschrieben +\begin{equation} + \textbf{a}^2 = + \left ( + \sum_{i=1}^{n} a_i \textbf{e}_i + \right ) + \left ( + \sum_{i=1}^{n} a_i \textbf{e}_i + \right ) + \label{eq:quad_a_1}. +\end{equation} +Das Quadrat kann nun in zwei Summen aufgeteilt werden +\begin{equation} + \textbf{a}^2 = + \textcolor{red}{\sum_{i=1}^{n} a_i^2\textbf{e}_i^2} + + + \textcolor{blue}{\sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j } + \label{eq:quad_a_2}, +\end{equation} +wobei die roten Summe die quadrierten Terme und die blaue Summe die Mischterme beinhaltet. Da $\textbf{e}_i^2 = 1$ gilt, weil das zuvor definierte Ziel des Quadrates eines Vektors dessen Länge ergibt und die Basisvektoren Länge 1 haben, wird dies nun eingesetzt +\begin{equation} + \textbf{a}^2 = \textcolor{cyan}{\sum_{i=1}^{n} a_i^2} + \textcolor{orange}{\sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j}. + \label{eq:quad_a_3} \end{equation} -Betrachten wir nun mit diesen Regeln das Quadrat eines Vektors. -\begin{align} - \textbf{a}^2 &= - \left ( - \sum_{i=1}^{n} a_i \textbf{e}_i - \right ) - \left ( - \sum_{i=1}^{n} a_i \textbf{e}_i - \right ) - \label{eq:quad_a_1} - \\ - &= - \textcolor{red}{\sum_{i=1}^{n} a_i^2\textbf{e}_i^2} - + - \textcolor{blue}{\sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j } - \label{eq:quad_a_2} - \\ - &= \textcolor{cyan}{\sum_{i=1}^{n} a_i^2} + \textcolor{orange}{\sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j}. - \label{eq:quad_a_3} -\end{align} - \begin{beispiel} -Quadrat eines Vektors in $\mathbb{R}^2$ +Das Quadrat des Vektor $a$ in $\mathbb{R}^2$ ist \begin{equation} \begin{split} \textbf{a}^2 @@ -56,22 +73,17 @@ Quadrat eines Vektors in $\mathbb{R}^2$ &= \textcolor{red}{a_1^2\textbf{e}_1^2 + a_2^2\textbf{e}_2^2} + \textcolor{blue}{a_1\textbf{e}_1a_2\textbf{e}_2 + a_2\textbf{e}_2a_1\textbf{e}_2} \\\ & = \textcolor{cyan}{a_1^2 + a_2^2} + \textcolor{orange}{a_1b\textbf{e}_1a_2\textbf{e}_2 + a_2\textbf{e}_2a_1\textbf{e}_2} - \end{split} + \end{split}. \end{equation} - \end{beispiel} -Der Vektor wird in \ref{eq:quad_a_1} als Linearkombination geschrieben. -Das Quadrat kann, wie in \ref{eq:quad_a_2} gezeigt, in zwei Summen aufteilen werden , wobei die roten Summe die quadrierten Terme und die blaue Summe die Mischterme beinhaltet. -\newline -Da $\textbf{e}_i^2 = 1$ gilt, da zuvor vorausgesetzt wurde, dass man mit orthonormalen Einheitsvektoren arbeitet, wird dies nun eingesetzt ergibt sich \ref{eq:quad_a_3} -\newline -Die hellblaue Teil ist nun bereits Länge im Quadrat eines Vektors, also das Ziel der Multiplikation. -Daher muss der restliche Teil dieser Gleichung null ergeben. -Aus dieser Erkenntnis leiten wir in \ref{eq:Mischterme_Null} weitere Eigenschaften für die Multiplikation her. + +Die hellblaue Teil ist nun bereits die Länge im Quadrat, also das zuvor definierte Ziel der Multiplikation. +Daraus lässt sich schliessen, dass der restliche Teil dieser Gleichung null ergeben muss \begin{equation} \label{eq:Mischterme_Null} - \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j = \textcolor{blue}{a_1a_2(\textbf{e}_1\textbf{e}_2 + \textbf{e}_2\textbf{e}_1)} + a_1a_3(\textbf{e}_1\textbf{e}_3 + \textbf{e}_3\textbf{e}_1) + \dots = 0 + \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n a_ia_j\textbf{e}_i\textbf{e}_j = \textcolor{blue}{a_1a_2(\textbf{e}_1\textbf{e}_2 + \textbf{e}_2\textbf{e}_1)} + a_1a_3(\textbf{e}_1\textbf{e}_3 + \textbf{e}_3\textbf{e}_1) + \dots = 0. \end{equation} +Aus dieser Erkenntnis können weitere Eigenschaften für die Multiplikation hergeleitet werden. Da dies für beliebige $a_i$ gelten muss werden alle Terme bis auf $a_1$ und $a_2$ gleich null gesetzt. Somit fallen alle Terme bis auf den blauen weg. Wird dies weiter vereinfacht ergibt sich \begin{equation} \begin{split} @@ -81,15 +93,13 @@ Da dies für beliebige $a_i$ gelten muss werden alle Terme bis auf $a_1$ und $a_ \end{split} \end{equation} \begin{satz} - Die Multiplikation von Vektoren ist antikommutativ, wenn die multiplizierten Vektoren orthogonal sind. + Die Multiplikation von Vektoren ist antikommutativ, wenn die multiplizierten Vektoren orthogonal sind, es gilt also \begin{equation} - \textbf{e}_i\textbf{e}_j = -\textbf{e}_j\textbf{e}_i \qquad \textbf{e}_i \perp \textbf{e}_j + \textbf{e}_i\textbf{e}_j = -\textbf{e}_j\textbf{e}_i \quad \textrm{für} \quad \textbf{e}_i \perp \textbf{e}_j. \end{equation} \end{satz} -Dieses Wissen reicht nun bereits um alle Produkte der Basisvektoren zu berechnen, was in \ref{tab:multip_vec} gemacht wurde. +Dieses Wissen reicht nun bereits um alle Produkte der Basisvektoren zu berechnen, was in Tabelle \ref{tab:multip_vec} gemacht wurde. \begin{table} -\caption{Multiplikationstabelle für Vektoren} -\label{tab:multip_vec} \begin{center} \begin{tabular}{ |c|c|c|c|c|c| } \hline @@ -107,4 +117,6 @@ Dieses Wissen reicht nun bereits um alle Produkte der Basisvektoren zu berechnen \hline \end{tabular} \end{center} +\caption{Multiplikationstabelle für Vektoren} +\label{tab:multip_vec} \end{table} \ No newline at end of file diff --git a/buch/papers/clifford/3_MultiplikationVektoren.tex b/buch/papers/clifford/3_MultiplikationVektoren.tex index 841dde4..0969b89 100644 --- a/buch/papers/clifford/3_MultiplikationVektoren.tex +++ b/buch/papers/clifford/3_MultiplikationVektoren.tex @@ -1,11 +1,14 @@ \subsection{Multiplikation von Vektoren} -Was geschieht nun wenn zwei beliebige Vektoren,$u$ und $v$, miteinander multipliziert werden? +Was geschieht nun wenn zwei beliebige Vektoren, $u$ und $v$ \begin{equation} \textbf{u} = \sum_{i=1}^{n} u_i \textbf{e}_i \qquad \textbf{v} = \sum_{i=1}^{n} v_i \textbf{e}_i \end{equation} + miteinander multipliziert werden? + + Wieder werden die Vektoren zuerst als Linearkombinationen darstellen und danach in zwei Summen aufgeteilt, eine Summe mit quadrierten Termen und eine Summe mit Mischtermen \begin{equation} \begin{split} \textbf{u}\textbf{v} @@ -18,12 +21,12 @@ Was geschieht nun wenn zwei beliebige Vektoren,$u$ und $v$, miteinander multipli \right) = \sum_{i=1}^n u_iv_i\underbrace{\textbf{e}_i^2}_{1} - + \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j + + \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j, \end{split} \end{equation} +wobei die Summe der quadrierten Termen bereits bekannt vorkommen könnte, es ist nämlich das Skalarprodukt von $u$ und $v$. Die Summe der Mischterme bilden etwas neues, dass wir das äussere Produkt von $u$ und $v$ nennen. \begin{beispiel} Multiplikation von Vektoren in $\mathbb{R}^2$ -\end{beispiel} \begin{equation} \begin{split} \textbf{u}\textbf{v} @@ -44,7 +47,7 @@ Was geschieht nun wenn zwei beliebige Vektoren,$u$ und $v$, miteinander multipli \underbrace{(u_1v_2 - u_2v_1)\textbf{e}_1\textbf{e}_2}_{\text{Äusseres Produkt}} \end{split} \end{equation} -Der linke Teil dieser Multiplikation ergibt das Skalarprodukt der zwei Vektoren, der rechte Term ergibt etwas neues das sich das äussere Produkt der zwei Vektoren nennt. +\end{beispiel} \subsubsection{Äusseres Produkt} Das äussere Produkt von zwei Vektoren wird mit einem $\wedge$ dargestellt \begin{equation} @@ -53,123 +56,118 @@ Das äussere Produkt von zwei Vektoren wird mit einem $\wedge$ dargestellt \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j \end{equation} \begin{beispiel} -Äusseres Produkt von zwei Vektoren in $\mathbb{R}^3$ -\end{beispiel} +Das äusseres Produkt von zwei Vektoren in $\mathbb{R}^3$ ist \begin{equation} - \begin{split} - u \wedge v - &= - u_1v_2\textbf{e}_1\textbf{e}_2 - + - u_1v_3\textbf{e}_1\textbf{e}_3 - + - u_2v_2\textbf{e}_2\textbf{e}_3 - + - u_2v_1\textbf{e}_2\textbf{e}_1 - + - u_3v_1\textbf{e}_3\textbf{e}_1 - + - u_3v_2\textbf{e}_3\textbf{e}_2 \\\ - &= - (u_1v_2 - u_2v_1)\textbf{e}_1\textbf{e}_2 - + - (u_1v_3 - v_3u_1)\textbf{e}_1\textbf{e}_3 - + - (u_2v_3 - u_3v_2)\textbf{e}_2\textbf{e}_3 - \end{split} + \begin{split} + u \wedge v + &= + u_1v_2\textbf{e}_1\textbf{e}_2 + + + u_1v_3\textbf{e}_1\textbf{e}_3 + + + u_2v_2\textbf{e}_2\textbf{e}_3 + + + u_2v_1\textbf{e}_2\textbf{e}_1 + + + u_3v_1\textbf{e}_3\textbf{e}_1 + + + u_3v_2\textbf{e}_3\textbf{e}_2 \\\ + &= + (u_1v_2 - u_2v_1)\textbf{e}_1\textbf{e}_2 + + + (u_1v_3 - v_3u_1)\textbf{e}_1\textbf{e}_3 + + + (u_2v_3 - u_3v_2)\textbf{e}_2\textbf{e}_3. + \end{split} \end{equation} -Im letzten Schritt des Beispiels wurden nun, mit Hilfe der antikommutativität des Produkts, die Vektorprodukte, welche die gleichen Einheitsvektoren beinhalten, zusammengefasst. Dieses Vorgehen kann man auch allgemein anwenden, wie in den Gleichungen \ref{eq:u_wedge_v}-\ref{eq:u_wedge_v_5} hergeleitet. +\end{beispiel} + +Im letzten Schritt des Beispiels wurden nun, mit Hilfe der antikommutativität des Produkts, die Vektorprodukte, welche die gleichen Einheitsvektoren beinhalten, zusammengefasst. Dieses Vorgehen kann man auch allgemein anwenden, wie in den Gleichungen \eqref{eq:u_wedge_v}-\eqref{eq:u_wedge_v_5} hergeleitet. Die Summe, \begin{align} \textbf{u}\wedge \textbf{v} &= \sum_{\begin{subarray}{l}i,j=1\\i \neq j\end{subarray}}^n - u_iv_j\textbf{e}_i\textbf{e}_j + u_iv_j\textbf{e}_i\textbf{e}_j, \label{eq:u_wedge_v} - \\ + \intertext{wird in zwei verschiedene Summen aufgeteilt. + Wobei die linke Summe jeweils den Basisvektor mit dem höheren Index an erster Stelle und die rechte Summe diesen jeweils an zweiter Stelle hat} \label{eq:u_wedge_v_1} &= \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j + - \sum_{\begin{subarray}{l}i,j=1\\j < i\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j - \\ + \sum_{\begin{subarray}{l}i,j=1\\j < i\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j. + \intertext{Nun werden die Indexe der zweiten Summe vertauscht} \label{eq:u_wedge_v_2} &= \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j + - \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_jv_i\textbf{e}_j\textbf{e}_i - \\ - \label{eq:u_wedge_v_3} + \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_jv_i\textbf{e}_j\textbf{e}_i, + \intertext{und diese wird nun mit Hilfe der Antikommutativität umgeformt zu} &= \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_iv_j\textbf{e}_i\textbf{e}_j - - \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_jv_i\textbf{e}_i\textbf{e}_j - \\ + \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n u_jv_i\textbf{e}_i\textbf{e}_j. + \intertext{Nun können die zwei Summen wieder zusammengefasst werden} \label{eq:u_wedge_v_4} &= - \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n (u_iv_j -u_jv_i)\textbf{e}_i\textbf{e}_j - \\ - \label{eq:u_wedge_v_5} + \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n (u_iv_j -u_jv_i)\textbf{e}_i\textbf{e}_j. + \intertext{Der Term in der Summe könnte einem bereits bekannt vorkommen, es ist nämlich die Determinante einer Matrix mit $u$ und $v$ als ihre Spalten} &= + \label{eq:u_wedge_v_5} \sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n \begin{vmatrix} u_i & v_i \\ u_j & v_j - \end{vmatrix}\textbf{e}_i\textbf{e}_j + \end{vmatrix}\textbf{e}_i\textbf{e}_j. \end{align} -Die Summe aus \ref{eq:u_wedge_v_1} wird in \ref{eq:u_wedge_v} in zwei verschiedene Summen aufgeteilt. -Wobei die linke Summe jeweils den Basisvektor mit dem höheren Index an erster Stelle und die rechte Summe diesen jeweils an zweiter Stelle hat. -\newline -Bei \ref{eq:u_wedge_v_2} werden die Indexe der zweiten Summe vertauscht, damit man nun bei beiden Teilen die gleiche Summe hat. -Danach werden in \ref{eq:u_wedge_v_3}, mit Hilfe der Antikommutativität, die Einheitsvektoren der zweiten Summe vertauscht. -\newline -Nun können die Summen, wie in \ref{eq:u_wedge_v_4} wieder in eine Summe zusammengefasst werden. -\newline -Der Term in der Klammer in \ref{eq:u_wedge_v_4} kann auch als Determinante einer 2x2 Matrix dargestellt werden, was in \ref{eq:u_wedge_v_5} gemacht wird. -\newline -Die Determinante einer Matrix beschreibt welche von den Spaltenvektoren aufgespannt wird, wie in Abbildung \ref{figure:det} dargestellt. -\begin{figure} -\centering -\begin{tikzpicture} - \draw[thin,gray!40] (0,0) grid (4,4); - \draw[<->] (0,0)--(4,0) ; - \draw[<->] (0,0)--(0,4) ; - \draw[line width=0,fill=gray!40] (0,0)--(3,1)--(4,3)--(1,2); - \draw[line width=2pt,blue,-stealth](0,0)--(3,1) node[anchor=north - west]{$\boldsymbol{u}$}; - \draw[line width=2pt,red,-stealth](0,0)--(1,2) node[anchor=south east]{$\boldsymbol{v}$}; - \draw[black] (2,1.5)--(-0.5,2.5) node[anchor = east]{$\begin{vmatrix} - u_i & v_i \\ - u_j & v_j - \end{vmatrix} = u_iv_j - v_iu_j$}; -\end{tikzpicture} -\caption{Geometrische Interpretation der Determinante einer 2x2 Matrix\label{figure:det}} +Die Determinante einer Matrix beschreibt die Fläche, welche von den Spaltenvektoren aufgespannt wird, wie in Abbildung \ref{figure:det} dargestellt. +\begin{figure}[htb] + \centering + \begin{minipage}[t]{.45\linewidth} + \centering + \begin{tikzpicture} + \draw[thin,gray!40] (0,0) grid (4,4); + \draw[<->] (0,0)--(4,0) ; + \draw[<->] (0,0)--(0,4) ; + \draw[line width=0,fill=gray!40] (0,0)--(3,1)--(4,3)--(1,2); + \draw[line width=2pt,blue,-stealth](0,0)--(3,1) node[anchor=north + west]{$\boldsymbol{u}$}; + \draw[line width=2pt,red,-stealth](0,0)--(1,2) node[anchor=south east]{$\boldsymbol{v}$}; + \draw[black] (2,1.5)--(1.8,3.2) node[anchor = south]{$\begin{vmatrix} + u_i & v_i \\ + u_j & v_j + \end{vmatrix} = u_iv_j - v_iu_j$}; + \end{tikzpicture} + \caption{Geometrische Interpretation der Determinante einer $2 \times 2$ Matrix\label{figure:det}} + \end{minipage}% + \hfill% + \begin{minipage}[t]{.45\linewidth} + \centering + \begin{tikzpicture} + \draw[thin,gray!40] (0,0) grid (4,4); + \draw[<->] (0,0)--(4,0) node[right]{$x$}; + \draw[<->] (0,0)--(0,4) node[above]{$y$}; + \draw[line width=0,fill=gray!40] (0,0)--(3,1)--(4,3)--(1,2); + \draw[line width=2pt,blue,-stealth](0,0)--(3,1) node[anchor=north + west]{$\boldsymbol{u}$}; + \draw[line width=2pt,red,-stealth](0,0)--(1,2) node[anchor=south east]{$\boldsymbol{v}$}; + \draw[->] (2.15,1.5) arc (0:310:0.3); + \draw[black] (2,1.5)--(2.5,3.2) node[anchor = south]{$u\wedge v = \begin{vmatrix} + u_i & v_i \\ + u_j & v_j + \end{vmatrix} e_1e_2 = (u_iv_j - v_iu_j)\textbf{e}_1\textbf{e}_2$}; + \end{tikzpicture} + \caption{Geometrische Interpretation des äusseren Produktes \label{figure:wedge}} + \end{minipage} \end{figure} -\newline Das äussere Produkt besteht nun also aus der Summe - $\sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n$ + \(\sum_{\begin{subarray}{l}i,j=1\\i < j\end{subarray}}^n\) von Flächen - $\begin{vmatrix} - u_i & v_i \\ - u_j & v_j - \end{vmatrix}$, welche in $\textbf{e}_i\textbf{e}_j$ aufgespannt sind, wie man in \ref{eq:u_wedge_v_5} sieht. + \(\begin{vmatrix} + u_i & v_i \\ + u_j & v_j + \end{vmatrix}\) +, welche in $\textbf{e}_i\textbf{e}_j$ aufgespannt sind, wie man in \ref{eq:u_wedge_v_5} sieht. Dieses Produkt $\textbf{e}_i\textbf{e}_j$ der Basisvektoren interpretiert man als Umlaufrichtung. Wobei die gebildete Fläche in Richtung des ersten Vektors umschritten wird. -Dies ist in \ref{figure:wedge} dargestellt, wobei bei diesem Beispiel die Umlaufrichtung im Gegenuhrzeigersinn ist, da die Fläche in Richtung u umschritten wird. +Dies ist in Abbildung \ref{figure:wedge} dargestellt, wobei bei diesem Beispiel die Umlaufrichtung im Gegenuhrzeigersinn ist, da die Fläche in Richtung u umschritten wird. Diese Fläche mit einer Richtung nennt man in der geometrischen Algebra einen Bivektor, da er eine Art zwei dimensionaler Vektor ist. -\begin{figure} -\centering -\begin{tikzpicture} - \draw[thin,gray!40] (0,0) grid (4,4); - \draw[<->] (0,0)--(4,0) node[right]{$x$}; - \draw[<->] (0,0)--(0,4) node[above]{$y$}; - \draw[line width=0,fill=gray!40] (0,0)--(3,1)--(4,3)--(1,2); - \draw[line width=2pt,blue,-stealth](0,0)--(3,1) node[anchor=north - west]{$\boldsymbol{u}$}; - \draw[line width=2pt,red,-stealth](0,0)--(1,2) node[anchor=south east]{$\boldsymbol{v}$}; - \draw[->] (2.15,1.5) arc (0:310:0.3); - \draw[black] (2,1.5)--(-0.5,2.5) node[anchor = east]{$u\wedge v = \begin{vmatrix} - u_i & v_i \\ - u_j & v_j - \end{vmatrix} e_1e_2 = (u_iv_j - v_iu_j)\textbf{e}_1\textbf{e}_2$}; -\end{tikzpicture} -\caption{Geometrische Interpretation des äusseren Produkt in $\mathbb{R}^2$\label{figure:wedge}} -\end{figure} \ No newline at end of file diff --git a/buch/papers/clifford/4_GeometrischesProdukt.tex b/buch/papers/clifford/4_GeometrischesProdukt.tex index a19e983..f18b90d 100644 --- a/buch/papers/clifford/4_GeometrischesProdukt.tex +++ b/buch/papers/clifford/4_GeometrischesProdukt.tex @@ -12,9 +12,9 @@ Ein Multivektor besteht aus den verschiedenen Bauteilen, wie zum Beispiel Vektor M = \sum \left ( \prod a_i\textbf{e}_j \right) \end{equation} \end{definition} -Besteht eine Clifford Algebra aus n Basisvektoren so hat sie n Dimensionen, dies wird nicht wie in der linearen Algebra mit $\mathbb{R}^n$ sondern mit $\mathbb{G}^n$ beschrieben. +Besteht eine Clifford Algebra aus n Basisvektoren so hat sie n Dimensionen, dies wird nicht wie in der linearen Algebra mit $\mathbb{R}^n$ sondern mit $G_n(\mathbb{R})$ beschrieben. Dies wird so geschrieben da man eine neue Algebrastruktur um die Vektoren einführt. \begin{beispiel} -Allgemeiner Multivektor in $\mathbb{G}^3$ +Allgemeiner Multivektor in $G_3(\mathbb{R})$ \begin{equation} M = a + @@ -26,34 +26,30 @@ Allgemeiner Multivektor in $\mathbb{G}^3$ \end{equation} \end{beispiel} \begin{definition} -Um das Produkt von Basisvektoren in Zukunft darzustellen wird folgende Notation definiert +Für das Produkt von Basisvektoren wird folgende Notation definiert \begin{equation} - e_ie_j = e_{ij} + e_ie_j = e_{ij}. \end{equation} \end{definition} -Nun da das geometrische Produkt vollständig definiert wurde können Multiplikationstabellen für verschiedene Dimensionen $\mathbb{G}^n$ erstellt werden. In \ref{tab:multip} ist dies für $\mathbb{G}^3$ gemacht. +Nun da das geometrische Produkt vollständig definiert wurde können Multiplikationstabellen für verschiedene Dimensionen $G_n(\mathbb{R})$ erstellt werden. In Tabelle \ref{tab:multip} ist dies für $G_3(\mathbb{R})$ gemacht. \begin{table} - \caption{Multiplikationstabelle für $\mathbb{G^3}$} \label{tab:multip} \begin{center} - \begin{tabular}{ |c|c|c|c|c|c|c|c| } + \begin{tabular}{ |c|ccc|ccc|c| } \hline 1 & $\textbf{e}_1$ & $\textbf{e}_2$ &$\textbf{e}_3$ & $\textbf{e}_{12}$ & $\textbf{e}_{13}$ & $\textbf{e}_{23}$ & $\textbf{e}_{123}$\\ \hline $\textbf{e}_1$ & 1 & $\textbf{e}_{12}$ & $\textbf{e}_{12}$ & $\textbf{e}_2$ & $\textbf{e}_3$ & $\textbf{e}_{123}$ & $\textbf{e}_{23}$\\ - \hline $\textbf{e}_2$ & $-\textbf{e}_{12}$ & 1 & $\textbf{e}_{23}$ & $-\textbf{e}_1$ & $-\textbf{e}_{123}$ & $\textbf{e}_3$ & $-\textbf{e}_{13}$\\ - \hline $\textbf{e}_3$ & $-\textbf{e}_{13}$ & $-\textbf{e}_{23}$ & 1 & $\textbf{e}_{123}$ & $-\textbf{e}_1$ & $-\textbf{e}_2$ & $\textbf{e}_{12}$\\ \hline $\textbf{e}_{12}$ & -$\textbf{e}_2$ & $\textbf{e}_1$& $\textbf{e}_{123}$ & -1 & $-\textbf{e}_{23}$ & $\textbf{e}_{13}$ & $-\textbf{e}_{3}$\\ - \hline $\textbf{e}_{13}$ & $-\textbf{e}_{3}$ & $-\textbf{e}_{123}$ & $\textbf{e}_{1}$ & $\textbf{e}_{23}$ & -1 & $-\textbf{e}_{12}$ & $\textbf{e}_{2}$\\ - \hline $\textbf{e}_{23}$ & $\textbf{e}_{123}$ & $-\textbf{e}_{3}$ & $\textbf{e}_{2}$ & $-\textbf{e}_{13}$ & $\textbf{e}_{12}$ & -1 & $-\textbf{e}_{1}$ \\ \hline $\textbf{e}_{123}$ & $\textbf{e}_{23}$ & $-\textbf{e}_{13}$ & $\textbf{e}_{12}$ & $-\textbf{e}_{3}$& $\textbf{e}_{2}$ & $-\textbf{e}_{1}$ & -1 \\ \hline \end{tabular} \end{center} + \caption{Multiplikationstabelle für $G_3(\mathbb{R})$} \end{table} diff --git a/buch/papers/clifford/references.bib b/buch/papers/clifford/references.bib index ff829d6..9090005 100644 --- a/buch/papers/clifford/references.bib +++ b/buch/papers/clifford/references.bib @@ -4,32 +4,13 @@ % (c) 2020 Autor, Hochschule Rapperswil % -@online{clifford:bibtex, - title = {BibTeX}, - url = {https://de.wikipedia.org/wiki/BibTeX}, - date = {2020-02-06}, - year = {2020}, - month = {2}, - day = {6} -} - -@book{clifford:numerical-analysis, - title = {Numerical Analysis}, - author = {David Kincaid and Ward Cheney}, - publisher = {American Mathematical Society}, - year = {2002}, - isbn = {978-8-8218-4788-6}, - inseries = {Pure and applied undegraduate texts}, - volume = {2} -} - -@article{clifford:mendezmueller, - author = { Tabea Méndez and Andreas Müller }, - title = { Noncommutative harmonic analysis and image registration }, - journal = { Appl. Comput. Harmon. Anal.}, - year = 2019, - volume = 47, - pages = {607--627}, - url = {https://doi.org/10.1016/j.acha.2017.11.004} +@article{clifford:hestenes_GA, + author = { David Hestenes, Garret Eugene Sobczyk and James S. Marsh }, + title = { Clifford Algebra to Geometric Calculus. A Unified Language for Mathematics and Physics }, + journal = { American Journal of Physics }, + year = 1985, + volume = 53, + pages = {24}, + url = {https://www.researchgate.net/publication/258944244_Clifford_Algebra_to_Geometric_Calculus_A_Unified_Language_for_Mathematics_and_Physics} } -- cgit v1.2.1 From d35889ab0e806e4df7871b5a100fe4bb6c52282b Mon Sep 17 00:00:00 2001 From: tim30b Date: Tue, 20 Jul 2021 14:29:38 +0200 Subject: =?UTF-8?q?rewrite=20Sch=C3=B6nflies=20notation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/punktgruppen/crystals.tex | 38 +++++++++++++++++++++++++---------- buch/papers/punktgruppen/piezo.tex | 3 +-- 2 files changed, 28 insertions(+), 13 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index e8dfa76..c110787 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -30,7 +30,7 @@ ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektore %TODOO fix Q define without vector symb. -> ask naoki -\subsection{Translationssymmetrie} +\subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, da die Umgebungen aller Punkte identisch sind. @@ -44,11 +44,11 @@ der Vektoren $\vec{a}$ , $\vec{b}$ und $\vec{c}$ erlaubt sind oder kurz, um $\ve Verschiebungen um $\vec{r}$ bewirken demnach keine Veränderungen, solange wir ein unendlich grosses Kristallgitter verschieben. -\subsection{Limitierte Kristallsymmetrien} +\subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen: Translationssymmetrie} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. - Was nicht direkt ersichtlich ist, ist dass auch wenn die Grundvektoren frei gewählt werden können, - sind nur rotationssymmetrische Kristalle ganz bestimmter Rotationswinkel möglich. - + Was nicht direkt ersichtlich ist, dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können. + Die geforderte Translationssymmetrie eines Kristalles schränkt weitere Symmetrien deutlich ein. + \begin{figure} \centering \includegraphics[]{papers/punktgruppen/figures/combine-symmetries} @@ -126,14 +126,30 @@ wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Deta \subsubsection{Schönflies-Symbilok} -Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem Schöönflies-Symbol bezeichnet. +Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schöönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, -welcher sich unter anderem mit der Klasifizierung der Kristallklassen auseinandergesetzt hat. +welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. -Anschaulich ist als Beispiel die Drehgruppe \[C\]. -Die Elemente einer Untergruppe werden erst mit ihren Zusätzen eindeutig wie \[C_{3i}\], -was für eine dreifache Rotationssymmetrie mit einem Inversionszentrum steht. - +Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. +Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\) Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). +Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. +Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. +Dank Abschintt \ref{txt:punktgruppen: Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen. +Da das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. +Inzwischen wissen wir auch, dass \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da +\[ + 360^\circ/5 = 72^\circ +\] +was nach Abschnitt \ref{txt:punktgruppen: Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. +Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. +Wie zum Beispiel ein Inversionszentrum +\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} +\(i\) oder eine horizontale +\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} +Spiegelachse \(h\). +Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. +\(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer +sechsfachen Drehspiegelsymmetrie entspricht. diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index feac9e5..6defcdc 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -58,8 +58,7 @@ weil die Eigenschaften ändern bei einer $90^\circ$ Drehung. Das Fehlen dieser Rotationssymmetrie kann mit betrachten von \subref{fig:punktgruppen:atoms-piezo} bestätigt werden. \subsection{Punktsymmetrie} -Piezoelektrische Kristalle können nicht Punktsymmetrisch -\footnote{In der Literatur wird ein Punktsymmetrisches Kristallgitter oft als Kristallgitter mit Inversionszentrum bezeichnet.} sein. +Piezoelektrische Kristalle können nicht Punktsymmetrisch sein. Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden. Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht Punktsymmetrischer Kristall mit einem Punktsymmetrischen \subref{fig:punktgruppen:atoms-grid}verglichen worden. -- cgit v1.2.1 From ac695f41dd1961103af26522203ffb9b550cc105 Mon Sep 17 00:00:00 2001 From: tim30b Date: Tue, 20 Jul 2021 16:24:39 +0200 Subject: fix Q notation --- buch/papers/punktgruppen/crystals.tex | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index c110787..f8be01b 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -36,7 +36,7 @@ Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmög da die Umgebungen aller Punkte identisch sind. Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation \[ - Q_i(G) = G + \vec{a}_i + \vec{Q}_i(G) = G + \vec{a}_i \] wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination @@ -64,7 +64,8 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \begin{itemize} \item \(A\) ist unser erster Gitterpunkt. - \item \(A'\) ist gegeben, weil wir \(A\) mit der Translation \(\vec{Q}\) um einen Grundvektor verschieben und wir wissen, dass nach einer Translation wieder ein Gitterpunkt an der verschobenen Stelle sein muss. + \item \(A'\) ist gegeben, weil wir \(A\) mit der Translation \(\vec{Q}\) um einen Grundvektor verschieben und wir wissen, + dass nach einer Translation wieder ein Gitterpunkt an der verschobenen Stelle sein muss. \item \(B\) entsteht, weil wir die Rotationssymmetrie \(C_\alpha\) auf den Punkt \(A\) anwenden. Dadurch dreht sich das ganze Gitter um den Winkel \(\alpha\). Für uns bedeutet dies lediglich, dass unser zweiter Punkt \(A'\) abgedreht wird. @@ -77,13 +78,13 @@ solange wir ein unendlich grosses Kristallgitter verschieben. auch auf \(A'\) an. Dies dreht \(A\) auf einen neuen Punkt. \item \(B'\) ist kein zufälliger Name für diesen neuen Punkt, denn wir wissen, dass zwischen allen Punkten eine Translationssymmetrie bestehen muss. - Die Translationssymmetrie zwischen \(B\) und \(B'\) ist hier als \(\vec{Q}'\) bezeichnet. + Die Translationssymmetrie zwischen \(B\) und \(B'\) ist hier als \(\vec{Q}'\) bezeichnet. \end{itemize} Mit den gegebenen Punkten lassen sich geometrische Folgerungen ziehen. - Wir beginnen, indem wir die Länge \(Q\) der Translation \(\vec{Q}\) mit jener von \(\vec{Q}'\) vergleichen. + Wir beginnen, indem wir die Länge der Verschiebung \(|\vec{Q}| = Q\) setzen und \(|\vec{Q}'| = Q'\). Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\). - Ist \(\vec{Q}\) ein Grundvektor so muss \(Q'\) ein ganzes vielfaches von \(Q\) sein. - Also + Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes vielfaches von \(\vec{Q}\) sein. + Demnach auch die Längen \[ Q' = nQ = Q + 2x \] @@ -91,7 +92,8 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \[ nQ = Q + 2Q\sin(\alpha - \pi/2) \] - Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. + Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, + da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. Zusätzlich können wir den Sinusterm vereinfachen. \[ n = 1 - 2\cos\alpha \quad\iff\quad -- cgit v1.2.1 From c8ac17e1f78eca79d8a2a62d0567f5ee02f4575c Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 21 Jul 2021 15:17:21 +0200 Subject: update --- .../RS presentation/images/polynom1 - Kopie.tex | 33 ++++ buch/papers/reedsolomon/dtf.tex | 10 +- buch/papers/reedsolomon/experiments/codiert.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/decodiert.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/empfangen.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/f.m | 17 +- buch/papers/reedsolomon/experiments/fehler.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/locator.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/plot.tex | 91 ++++++++++ buch/papers/reedsolomon/experiments/signal.txt | 192 ++++++++++----------- buch/papers/reedsolomon/experiments/syndrom.txt | 192 ++++++++++----------- buch/papers/reedsolomon/idee.tex | 27 +-- buch/papers/reedsolomon/images/plotfft.tex | 77 +++++++++ buch/papers/reedsolomon/images/polynom2.tex | 88 +++++----- 14 files changed, 946 insertions(+), 741 deletions(-) create mode 100644 buch/papers/reedsolomon/RS presentation/images/polynom1 - Kopie.tex create mode 100644 buch/papers/reedsolomon/experiments/plot.tex create mode 100644 buch/papers/reedsolomon/images/plotfft.tex (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/RS presentation/images/polynom1 - Kopie.tex b/buch/papers/reedsolomon/RS presentation/images/polynom1 - Kopie.tex new file mode 100644 index 0000000..038e93e --- /dev/null +++ b/buch/papers/reedsolomon/RS presentation/images/polynom1 - Kopie.tex @@ -0,0 +1,33 @@ +% polynome1 +%------------------- +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usetikzlibrary{arrows,intersections,math} +\newcommand{\teiler}{40} +\begin{document} + + +\begin{tikzpicture}[>=latex,thick] + + \begin{axis}[ + axis lines = left, + xlabel = \(x\), + ylabel = {\(f(x)\)}, + ] + %Below the red parabola is defined + \addplot[ + color=blue, + ] + coordinates { + (0,23.1)(10,27.5)(20,32)(30,37.8)(40,44.6)(60,61.8)(80,83.8)(100,114) + }; + %Here the blue parabola is defined + + \end{axis} +\end{tikzpicture} +\end{document} + diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index d276760..f011ac3 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -26,7 +26,9 @@ Kommen nuun drei Fehler... hinzu zu diesem codierten Signal sind diese nicht zu Nach dem Empfangen... und decodieren ... erkennt man die fehlerhafte information in den Punkten 64 bis 100. Filtert man nur diese Punkte heraus und Transformiert sie mit Fourier erhält man die stellen an denen die Fehler sich eingeschlichen haben. - - - - +\begin{figure} + \centering + \input{papers/reedsolomon/images/plotfft.tex} + \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} + \label{fig:sendorder} +\end{figure} \ No newline at end of file diff --git a/buch/papers/reedsolomon/experiments/codiert.txt b/buch/papers/reedsolomon/experiments/codiert.txt index a57fb3e..4a481d8 100644 --- a/buch/papers/reedsolomon/experiments/codiert.txt +++ b/buch/papers/reedsolomon/experiments/codiert.txt @@ -1,96 +1,96 @@ -305 -114.502535214877 -86.2532974498148 -10.2450106137816 -68.1373455525487 -12.2281691909479 -3.18633753309102 -20.0196562371296 -12.2767246322969 -11.7216140392957 -24.8752690882777 -16.2978466490127 -23.2518118214845 -16.5845482358975 -15.6140674930647 -33.396205039034 -20.7846096908265 -19.3528753492232 -16.3850575123207 -20.9502842499826 -17.064465004608 -11.7252100463969 -31.1005540675575 -29.4336965143315 -26.6270539113887 -18.0164813754079 -24.7444243500799 -7.51007272621331 -4.06984153366859 -27.215173252412 -17.2339815787965 -23.5539874432174 -22.2710574513201 -14.7961619823174 -25.5530773949688 -33.4185813747547 -11.5478676394508 -21.0691619228239 -28.7948800016184 -12.3795084046074 -17.0082930449459 -19.7473571196866 -18.4490385219626 -12.2195365467659 -7.58568158110485 -6.02300839250873 -14.565530706253 -3.78959213976527 -21 -3.78959213976527 -14.565530706253 -6.02300839250873 -7.58568158110485 -12.2195365467659 -18.4490385219626 -19.7473571196866 -17.0082930449459 -12.3795084046074 -28.7948800016184 -21.0691619228239 -11.5478676394508 -33.4185813747547 -25.5530773949688 -14.7961619823174 -22.2710574513201 -23.5539874432174 -17.2339815787965 -27.215173252412 -4.06984153366859 -7.51007272621331 -24.7444243500799 -18.0164813754079 -26.6270539113887 -29.4336965143315 -31.1005540675575 -11.7252100463969 -17.064465004608 -20.9502842499826 -16.3850575123207 -19.3528753492232 -20.7846096908265 -33.396205039034 -15.6140674930647 -16.5845482358975 -23.2518118214845 -16.2978466490127 -24.8752690882777 -11.7216140392957 -12.2767246322969 -20.0196562371296 -3.18633753309102 -12.2281691909479 -68.1373455525487 -10.2450106137816 -86.2532974498148 -114.502535214877 +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,24.0186013379153 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,4.84567134895776 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,43.6179140616243 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/experiments/decodiert.txt b/buch/papers/reedsolomon/experiments/decodiert.txt index 5295e2a..f6221e6 100644 --- a/buch/papers/reedsolomon/experiments/decodiert.txt +++ b/buch/papers/reedsolomon/experiments/decodiert.txt @@ -1,96 +1,96 @@ -5.05208333333333 -4.02603841132848 -3.9866906905523 -2.98928833660435 -5.01944413899123 -5.01851886476838 -7.97795274966527 -7.9523893732277 -5.97396514457618 -4.00519657776884 -8.0006276895628 -4.97630831658918 -3.97918030102376 -9.01298821331865 -9.03553822210758 -6.02435577439403 -6.005269315244 -6.00739475784899 -2.02214193521707 -3.02175993431401 -5.00158984940366 -1.98176205240977 -7.97728830439693 -1.98491220960989 -1.98958333333333 -1.98491220960989 -1.97728880273589 -3.98152108172961 -3.00171929847136 -9.02175649397959 -4.02211963444795 -2.00740795901169 -9.00524899981178 -10.0243555198185 -4.03562322003676 -1.01362103081199 -2.97918487756672 -3.97630844288113 -6.00063199465927 -3.00522617023784 -5.97396514457618 -6.95239288504068 -1.97810392013073 -1.01862378300238 -3.0194483612015 -2.98928833660435 -3.9866906905523 -5.02603060999077 -1.05208333333333 -3.02605136876764 -7.9866590265379 -0.0177592928994289 -9.01944131204563 -7.01851125156932 -4.97798278395618 -5.95239757681758 -1.97397894668217 -5.00517880987882 -10.0006251063956 -4.97630831658918 -4.97917756274958 -2.01326692505463 -5.0355927170407 -6.02435577439403 -0.0275599094902566 -0.0115837187254189 -0.0258777610142382 -0.0224618032819705 -0.0441059468994403 -0.0474504002669344 -0.0227694695500614 -0.0271436638090525 -0.0104166666666661 -0.027143663809052 -0.0227694695500605 -0.0474504002669342 -0.04410594689944 -0.0224618032819704 -0.0258777610142386 -0.0115837187254188 -0.027559909490256 -0.0245124379481791 -0.0499782237195213 -0.0401432022864264 -0.023292374765623 -0.0237974288564093 -0.0143895905726623 -0.0271745729691686 -0.0275599094902561 -0.051550167218498 -0.0358255004834538 -0.0247005083663728 -0.0210194725405181 -0.0177592928994299 -0.0261327016093146 -0.0314909067039408 +0,6.05208333333333 +1,6.02602539785853 +2,0.0261327016093151 +3,5.98927158561317 +4,4.019445724874 +5,0.0247005083663722 +6,4.97798278395618 +7,1.95246440445439 +8,0.974000110512201 +9,2.00528527696027 +10,1.00071804528155 +11,1.97630907888264 +12,0.0232923747656228 +13,6.01302820392331 +14,3.03567381915226 +15,5.02435590137329 +16,7.00526061008995 +17,5.00739608089369 +18,5.02211514480064 +19,4.02175864806658 +20,1.00236543833726 +21,4.98147315261261 +22,8.97728828610336 +23,8.98481304394618 +24,2.98958333333333 +25,1.98491220960989 +26,5.97728835934715 +27,5.98144124907561 +28,4.00163839998525 +29,2.02176249296313 +30,9.02210713874162 +31,1.00742763919872 +32,1.00557258081044 +33,1.02435888848794 +34,2.03577412756745 +35,6.01302820392331 +36,5.97917574041123 +37,0.976310374034338 +38,9.00062625447998 +39,7.00515849238528 +40,6.97396416790894 +41,0.95256880864368 +42,8.97794719866783 +43,9.01850701506487 +44,10.0194409579917 +45,8.98926601525997 +46,7.9866590265379 +47,5.02603060999077 +48,2.05208333333333 +49,4.02603841132848 +50,0.986882897867895 +51,0.0177592928994285 +52,9.01944131204563 +53,3.0185365665612 +54,2.97803642439316 +55,2.95243072164649 +56,4.97396651395488 +57,6.00516695947321 +58,0.0143895905726619 +59,7.97630812771393 +60,5.97917574041123 +61,9.01298821331865 +62,3.03567381915226 +63,4.02435609145793 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/experiments/empfangen.txt b/buch/papers/reedsolomon/experiments/empfangen.txt index 326dd83..38c13b0 100644 --- a/buch/papers/reedsolomon/experiments/empfangen.txt +++ b/buch/papers/reedsolomon/experiments/empfangen.txt @@ -1,96 +1,96 @@ -305 -114.502535214877 -86.2532974498148 -10.2450106137816 -68.1373455525487 -12.2281691909479 -4.75208293424194 -20.0196562371296 -12.2767246322969 -11.7216140392957 -24.8752690882777 -16.2978466490127 -23.2518118214845 -16.5845482358975 -15.6140674930647 -33.396205039034 -20.7846096908265 -19.3528753492232 -16.3850575123207 -20.9502842499826 -19.0535931901409 -11.7252100463969 -31.1005540675575 -29.4336965143315 -26.6270539113887 -18.0164813754079 -24.7444243500799 -7.51007272621331 -4.06984153366859 -27.215173252412 -17.2339815787965 -23.5539874432174 -22.2710574513201 -14.7961619823174 -25.5530773949688 -33.4185813747547 -11.5478676394508 -21.0691619228239 -28.7948800016184 -12.3795084046074 -17.0082930449459 -19.7473571196866 -18.4490385219626 -12.2195365467659 -7.58568158110485 -6.02300839250873 -14.565530706253 -3.78959213976527 -21 -3.78959213976527 -14.565530706253 -6.02300839250873 -7.58568158110485 -12.2195365467659 -18.4490385219626 -19.7473571196866 -17.0082930449459 -12.3795084046074 -28.7948800016184 -21.0691619228239 -11.5478676394508 -33.4185813747547 -25.5530773949688 -14.7961619823174 -22.2710574513201 -23.5539874432174 -17.2339815787965 -27.215173252412 -4.06984153366859 -7.51007272621331 -24.7444243500799 -18.0164813754079 -26.6270539113887 -29.4336965143315 -30.3915028428898 -11.7252100463969 -17.064465004608 -20.9502842499826 -16.3850575123207 -19.3528753492232 -20.7846096908265 -33.396205039034 -15.6140674930647 -16.5845482358975 -23.2518118214845 -16.2978466490127 -24.8752690882777 -11.7216140392957 -12.2767246322969 -20.0196562371296 -3.18633753309102 -12.2281691909479 -68.1373455525487 -10.2450106137816 -86.2532974498148 -114.502535214877 +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,23.6290258699579 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,5.55320238736303 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,44.6135417384784 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/experiments/f.m b/buch/papers/reedsolomon/experiments/f.m index 5e4da85..bf2587c 100644 --- a/buch/papers/reedsolomon/experiments/f.m +++ b/buch/papers/reedsolomon/experiments/f.m @@ -51,6 +51,7 @@ syndrom(1:N,1) = zeros(N,1) plot(abs(syndrom)); xlim([1, l]); title("Syndrom"); + pause() locator = abs(fft(syndrom)) @@ -60,14 +61,12 @@ xlim([1, l]); title("Locator"); pause() -writematrix(abs(signal), 'signal.txt') -writematrix(abs(codiert), 'codiert.txt') -writematrix(fehler, 'fehler.txt') -writematrix(abs(empfangen), 'empfangen.txt') -writematrix(abs(decodiert), 'decodiert.txt') -writematrix(abs(syndrom), 'syndrom.txt') -writematrix(locator, 'locator.txt') - - +writematrix([transpose(counter), abs(signal)], 'signal.txt') +writematrix([transpose(counter), abs(codiert)], 'codiert.txt') +writematrix([transpose(counter), fehler], 'fehler.txt') +writematrix([transpose(counter), abs(empfangen)], 'empfangen.txt') +writematrix([transpose(counter), abs(decodiert)], 'decodiert.txt') +writematrix([transpose(counter), abs(syndrom)], 'syndrom.txt') +writematrix([transpose(counter), locator], 'locator.txt') diff --git a/buch/papers/reedsolomon/experiments/fehler.txt b/buch/papers/reedsolomon/experiments/fehler.txt index b8f9afb..23f1a83 100644 --- a/buch/papers/reedsolomon/experiments/fehler.txt +++ b/buch/papers/reedsolomon/experiments/fehler.txt @@ -1,96 +1,96 @@ -0 -0 -0 -0 -0 -0 -2 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -2 -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 -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 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,2 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,2 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,1 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/experiments/locator.txt b/buch/papers/reedsolomon/experiments/locator.txt index 421d36e..b28988c 100644 --- a/buch/papers/reedsolomon/experiments/locator.txt +++ b/buch/papers/reedsolomon/experiments/locator.txt @@ -1,96 +1,96 @@ -0.0301224340566959 -0.141653026854878 -0.138226631799375 -0.0339903276086926 -0.310585462557496 -0.551427312631386 -0.628514858396816 -0.511023862515591 -0.275861355940448 -0.0502396354182231 -0.0901855025475772 -0.110759344849757 -0.0684618905062958 -0.0362855426992255 -0.0697096919781522 -0.109288539370249 -0.0923187999496619 -0.0512198536768151 -0.274192386987786 -0.513496149536541 -0.633154426602464 -0.553283743533939 -0.307840573214511 -0.0341664350328389 -0.140270857956999 -0.138527177682829 -0.0296375477361526 -0.0816962563186064 -0.0944383203811072 -0.0263932110686224 -0.058588134840207 -0.0737117341600011 -0.0239973937701886 -0.0464215468420024 -0.0616218854220982 -0.0221963086695035 -0.0390764778127614 -0.0537637218396927 -0.0208333333333355 -0.0343107696069015 -0.0483441215964522 -0.0198077862118787 -0.0311207395968709 -0.0444955089373439 -0.0190533549944134 -0.0290049795038704 -0.0417536642697542 -0.0185261550443044 -0.0277059929762204 -0.0398606084144781 -0.0181978813094801 -0.0271098219177536 -0.0386836665079658 -0.018051861104682 -0.0272138992557153 -0.0381891287148298 -0.0180809085252426 -0.0281418959420076 -0.0384596362516644 -0.0182864418432244 -0.0302250788423177 -0.0397874837986374 -0.0186786556701704 -0.0342489348284176 -0.0429932815348636 -0.0192777878591794 -0.0422808966932026 -0.0506815964680558 -0.0201167847752232 -0.0615048274405276 -0.074495389450843 -0.0212460545964937 -0.142602265816219 -0.273502052865438 -0.325309673287598 -0.272705389655347 -0.149074257381343 -0.0247199397628717 -0.0680137859566989 -0.0753882708734869 -0.0273637831604916 -0.0407867704453288 -0.0632964886441987 -0.0309749128751131 -0.0315202035072016 -0.0627625211892194 -0.0360843918243526 -0.0279492055149482 -0.0677921493367224 -0.0437167157553051 -0.0270640150996341 -0.0783380025231665 -0.0561293738314322 -0.0278742033265804 -0.0981443889498686 -0.0794543457386637 +0,0.0301224340567056 +1,0.141653026854885 +2,0.138226631799377 +3,0.0339903276086929 +4,0.310585462557496 +5,0.551427312631385 +6,0.628514858396814 +7,0.51102386251559 +8,0.275861355940449 +9,0.0502396354182268 +10,0.090185502547573 +11,0.110759344849756 +12,0.0684618905063001 +13,0.0362855426992259 +14,0.0697096919781468 +15,0.109288539370248 +16,0.0923187999496653 +17,0.0512198536768088 +18,0.274192386987782 +19,0.51349614953654 +20,0.633154426602466 +21,0.553283743533942 +22,0.307840573214514 +23,0.0341664350328392 +24,0.140270857957 +25,0.138527177682831 +26,0.029637547736156 +27,0.0816962563186052 +28,0.0944383203811073 +29,0.0263932110686261 +30,0.0585881348402056 +31,0.0737117341599984 +32,0.0239973937701886 +33,0.0464215468420038 +34,0.0616218854220964 +35,0.0221963086695009 +36,0.0390764778127646 +37,0.0537637218396934 +38,0.0208333333333332 +39,0.0343107696069045 +40,0.0483441215964552 +41,0.0198077862118806 +42,0.0311207395968725 +43,0.0444955089373458 +44,0.0190533549944159 +45,0.0290049795038723 +46,0.0417536642697558 +47,0.0185261550443084 +48,0.0277059929762261 +49,0.0398606084144816 +50,0.0181978813094817 +51,0.0271098219177584 +52,0.0386836665079729 +53,0.0180518611046889 +54,0.0272138992557141 +55,0.0381891287148314 +56,0.0180809085252469 +57,0.0281418959420061 +58,0.0384596362516637 +59,0.0182864418432272 +60,0.0302250788423173 +61,0.0397874837986351 +62,0.0186786556701694 +63,0.0342489348284216 +64,0.0429932815348666 +65,0.0192777878591759 +66,0.0422808966931999 +67,0.0506815964680563 +68,0.0201167847752226 +69,0.0615048274405271 +70,0.0744953894508454 +71,0.021246054596492 +72,0.142602265816215 +73,0.273502052865436 +74,0.325309673287599 +75,0.272705389655349 +76,0.149074257381345 +77,0.0247199397628712 +78,0.0680137859566976 +79,0.075388270873485 +80,0.0273637831604903 +81,0.0407867704453274 +82,0.0632964886441949 +83,0.0309749128751093 +84,0.0315202035072035 +85,0.0627625211892184 +86,0.0360843918243497 +87,0.02794920551495 +88,0.0677921493367236 +89,0.0437167157553067 +90,0.0270640150996317 +91,0.0783380025231622 +92,0.0561293738314281 +93,0.0278742033265809 +94,0.0981443889498639 +95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/experiments/plot.tex b/buch/papers/reedsolomon/experiments/plot.tex new file mode 100644 index 0000000..bf9aadc --- /dev/null +++ b/buch/papers/reedsolomon/experiments/plot.tex @@ -0,0 +1,91 @@ +% polynome1 +%------------------- +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{pgfplots} +\usepackage{csvsimple} +\usepackage{pgfplotstable} +\usepackage{filecontents} +\usetikzlibrary{arrows,intersections,math} +\newcommand{\x}{10} +\newcommand{\y}{-8} +\begin{document} + +\tikzset{ + node/.style={rectangle, draw=black!100, thick, on grid}, % on grid added + dangling node/.style={node, fill=black!30} +} +\begin{tikzpicture}[] + +\filldraw[red] (0,0) circle (5mm); + %Knote +\matrix[draw = none, column sep=20mm, row sep=20mm]{ + \node(signal) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Signal}}] + \addplot[] table[col sep=comma] {signal.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(codiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Codiert}}] + \addplot[] table[col sep=comma] {codiert.txt}; + \end{axis} + \end{tikzpicture}}; \\ + + &\node(fehler) [] { + \begin{tikzpicture} + \begin{axis}[scale=0.6, title = {\Large {Fehler}}] + \addplot[] table[col sep=comma] {fehler.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(decodiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Decodiert}}] + \addplot[] table[col sep=comma] {decodiert.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(empfangen) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Empfangen}}] + \addplot[] table[col sep=comma] {empfangen.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(syndrom) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Syndrom}}] + \addplot[] table[col sep=comma] {syndrom.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(locator) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Locator}}] + \addplot[] table[col sep=comma] {locator.txt}; + \end{axis} + \end{tikzpicture}};\\ +}; + %FFT & IFFT deskription + + \draw[thin,gray,dashed] (0,15) to (0,-15); + \node(FFT) [ scale=0.7] at (0,15.3) {FFT IFFT}; + + %Arrows + \draw[ultra thick, ->] (signal.east) to (codiert.west); + \draw[ultra thick, ->] (codiert.south) to (fehler.north); + \draw[ultra thick, ->] (fehler.south) to (empfangen.north); + \draw[ultra thick, ->] (empfangen.west) to (decodiert.east); + \draw[ultra thick, ->] (syndrom.east) to (locator.west); + \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; + \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + + + \end{tikzpicture} +\end{document} + diff --git a/buch/papers/reedsolomon/experiments/signal.txt b/buch/papers/reedsolomon/experiments/signal.txt index 202dd02..c4fa5f8 100644 --- a/buch/papers/reedsolomon/experiments/signal.txt +++ b/buch/papers/reedsolomon/experiments/signal.txt @@ -1,96 +1,96 @@ -5 -4 -4 -3 -5 -5 -8 -8 -6 -4 -8 -5 -4 -9 -9 -6 -6 -6 -2 -3 -5 -2 -8 -2 -2 -2 -2 -4 -3 -9 -4 -2 -9 -10 -4 -1 -3 -4 -6 -3 -6 -7 -2 -1 -3 -3 -4 -5 -1 -3 -8 -0 -9 -7 -5 -6 -2 -5 -10 -5 -5 -2 -5 -6 -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 -0 -0 -0 -0 -0 +0,6 +1,6 +2,0 +3,6 +4,4 +5,0 +6,5 +7,2 +8,1 +9,2 +10,1 +11,2 +12,0 +13,6 +14,3 +15,5 +16,7 +17,5 +18,5 +19,4 +20,1 +21,5 +22,9 +23,9 +24,3 +25,2 +26,6 +27,6 +28,4 +29,2 +30,9 +31,1 +32,1 +33,1 +34,2 +35,6 +36,6 +37,1 +38,9 +39,7 +40,7 +41,1 +42,9 +43,9 +44,10 +45,9 +46,8 +47,5 +48,2 +49,4 +50,1 +51,0 +52,9 +53,3 +54,3 +55,3 +56,5 +57,6 +58,0 +59,8 +60,6 +61,9 +62,3 +63,4 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/experiments/syndrom.txt b/buch/papers/reedsolomon/experiments/syndrom.txt index 59b9dc4..8ca9eed 100644 --- a/buch/papers/reedsolomon/experiments/syndrom.txt +++ b/buch/papers/reedsolomon/experiments/syndrom.txt @@ -1,96 +1,96 @@ -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 -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 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0.0275599094902566 -0.0115837187254189 -0.0258777610142382 -0.0224618032819705 -0.0441059468994403 -0.0474504002669344 -0.0227694695500614 -0.0271436638090525 -0.0104166666666661 -0.027143663809052 -0.0227694695500605 -0.0474504002669342 -0.04410594689944 -0.0224618032819704 -0.0258777610142386 -0.0115837187254188 -0.027559909490256 -0.0245124379481791 -0.0499782237195213 -0.0401432022864264 -0.023292374765623 -0.0237974288564093 -0.0143895905726623 -0.0271745729691686 -0.0275599094902561 -0.051550167218498 -0.0358255004834538 -0.0247005083663728 -0.0210194725405181 -0.0177592928994299 -0.0261327016093146 -0.0314909067039408 +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 08864cf..39adbbf 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -25,23 +25,20 @@ p(x) \end{equation} ergeben. Übertragen werden nun die Werte an den stellen 1, 2, 3\dots 7 dieses Polynomes. -Grafisch sieht man dies dann in Abbildung +Grafisch sieht man dies dann in Abbildung \ref{fig:polynom}, +mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{green}{8}, +\textcolor{green}{15}, \textcolor{green}{26}, +\textcolor{green}{41}, \textcolor{green}{60}, +\textcolor{green}{83}, \textcolor{green}{110})$ Wenn ein Fehler sich in die Übertragung eingeschlichen hatt, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. -\begin{figure} - \centering - %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2} - %\input{papers/reedsolomon/images/polynom2.tex} - \caption{Polynom } - \label{fig:polynom} -\end{figure} - \subsection{Beispiel} Für das Beispeil aus der Gleichung \eqref{reedsolomon:equation1}, ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. -Hat es Fehler in der Übertragunge gegeben, kann man diese erkennen, -da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. +Hat es Fehler in der Übertragunge gegeben,(Bei Abbildung \ref{fig:polynom}\textcolor{red}{roten Punkte}) kann man diese erkennen, +da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. +(Bei Abbildung \ref{fig:polynom}\textcolor{green}{grünen Punkte}) Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, gegenüber dem mit 5 Punkten falsch liegt.\ref{fig:polynom} @@ -49,6 +46,14 @@ Werden es mehr Fehler kann nur erkennt werden, dass das Polynom nicht stimmt. Das orginale Polynom kann aber nicht mehr gefunden werden. Dafür sind mehr übertragene Werte nötig. +\begin{figure} + \centering + %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2} + \input{papers/reedsolomon/images/polynom2.tex} + \caption{Polynom $p(x)$ \eqref{reedsolomon:equation1}} + \label{fig:polynom} +\end{figure} + \section{Fehlerbestimmung \label{reedsolomon:section:Fehlerbestimmmung}} So wird ein Muster indentifiziert, welches genau vorherbestimmen kann, diff --git a/buch/papers/reedsolomon/images/plotfft.tex b/buch/papers/reedsolomon/images/plotfft.tex new file mode 100644 index 0000000..e6d3b47 --- /dev/null +++ b/buch/papers/reedsolomon/images/plotfft.tex @@ -0,0 +1,77 @@ +% +% Plot der èbertrangungsabfolge ins FFT und zurück mit IFFT +% +\tikzset{ + node/.style={rectangle, draw=black!100, thick, on grid}, % on grid added + dangling node/.style={node, fill=black!30} +} +\begin{tikzpicture}[] + +%--------------------------------------------------------------- + %Knote +\matrix[draw = none, column sep=20mm, row sep=20mm]{ + \node(signal) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Signal}}] + \addplot[] table[col sep=comma] {signal.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(codiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Codiert}}] + \addplot[] table[col sep=comma] {codiert.txt}; + \end{axis} + \end{tikzpicture}}; \\ + + &\node(fehler) [] { + \begin{tikzpicture} + \begin{axis}[scale=0.6, title = {\Large {Fehler}}] + \addplot[] table[col sep=comma] {fehler.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(decodiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Decodiert}}] + \addplot[] table[col sep=comma] {decodiert.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(empfangen) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Empfangen}}] + \addplot[] table[col sep=comma] {empfangen.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(syndrom) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Syndrom}}] + \addplot[] table[col sep=comma] {syndrom.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(locator) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Locator}}] + \addplot[] table[col sep=comma] {locator.txt}; + \end{axis} + \end{tikzpicture}};\\ +}; +%------------------------------------------------------------- + %FFT & IFFT deskription + + \draw[thin,gray,dashed] (0,15) to (0,-15); + \node(FFT) [ scale=0.7] at (0,15.3) {FFT IFFT}; + + %Arrows + \draw[ultra thick, ->] (signal.east) to (codiert.west); + \draw[ultra thick, ->] (codiert.south) to (fehler.north); + \draw[ultra thick, ->] (fehler.south) to (empfangen.north); + \draw[ultra thick, ->] (empfangen.west) to (decodiert.east); + \draw[ultra thick, ->] (syndrom.east) to (locator.west); + \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; + \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + + \end{tikzpicture} \ No newline at end of file diff --git a/buch/papers/reedsolomon/images/polynom2.tex b/buch/papers/reedsolomon/images/polynom2.tex index 4fdfc81..288b51c 100644 --- a/buch/papers/reedsolomon/images/polynom2.tex +++ b/buch/papers/reedsolomon/images/polynom2.tex @@ -1,51 +1,49 @@ -% polynome2 +% polynome %------------------- -%\documentclass[tikz]{standalone} -%\usepackage{amsmath} -%\usepackage{times} -%\usepackage{txfonts} -%\usepackage{pgfplots} -%\usepackage{csvsimple} -%\usetikzlibrary{arrows,intersections,math} +% Teiler für das Skalieren der Grafik /40 \newcommand{\teiler}{40} -%\begin{document} - Übertragen von den Zahlen - \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5} - als $ p(x) = \textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} $.\newline - Versende $ (p(1),p(2),...,p(7)) = (\textcolor{green}{8}, - \textcolor{green}{15}, \textcolor{green}{26}, - \textcolor{green}{ 41}, \textcolor{green}{60}, - \textcolor{green}{83}, \textcolor{green}{110})$ + + +%////////////////////////////////////// + +\begin{tikzpicture}[>=latex,thick] + \draw[color=blue, line width=1.4pt] + plot[domain=0:8, samples=100] + ({\x},{(2*\x^2+1*\x+5)/\teiler}); + + \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; + \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; + + \def\punkt#1{ + \fill[color=green] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + + \def\hellpunkt#1{ + \fill[color=lightgray] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + + \punkt{(1,8/\teiler)} + \hellpunkt{(2,15/\teiler)} + \hellpunkt{(3,26/\teiler)} + \punkt{(4,41/\teiler)} + \punkt{(5,60/\teiler)} + \punkt{(6,83/\teiler)} + \punkt{(7,110/\teiler)} + \draw[color=gray,line width=1pt,dashed] + plot[domain=0.5:7, samples=100] + ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); - \begin{tikzpicture}[>=latex,thick] - \draw[color=blue, line width=1.4pt] - plot[domain=0:8, samples=100] - ({\x},{(2*\x^2+1*\x+5)/\teiler}); - \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; - \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; - \def\punkt#1{ - \fill[color=green] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; - } - \punkt{(1,8/\teiler)} - %\punkt{(2,15/\teiler)} - %\punkt{(3,26/\teiler)} - \punkt{(4,41/\teiler)} - \punkt{(5,60/\teiler)} - \punkt{(6,83/\teiler)} - \punkt{(7,110/\teiler)} - \draw[color=gray,line width=1pt,dashed] - plot[domain=0.5:7, samples=100] - ({\x},{(0.1958*\x^2-1.2875*\x+3.0417)}); - \def\erpunkt#1{ - \fill[color=red] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; - } - \erpunkt{(2,50/\teiler)} - \erpunkt{(3,0.9414)} + \def\erpunkt#1{ + \fill[color=red] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + \erpunkt{(2,50/\teiler)} + \erpunkt{(3,37.66/\teiler)} - \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; - \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; - \end{tikzpicture} + \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; + \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; +\end{tikzpicture} %\end{document} -- cgit v1.2.1 From 3e112e15ffe65ede9c2a13077e358e9efe565d03 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 21 Jul 2021 15:26:35 +0200 Subject: txt files to images ordner --- buch/papers/reedsolomon/images/codiert.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/decodiert.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/empfangen.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/fehler.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/locator.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/signal.txt | 96 ++++++++++++++++++++++++++++ buch/papers/reedsolomon/images/syndrom.txt | 96 ++++++++++++++++++++++++++++ 7 files changed, 672 insertions(+) create mode 100644 buch/papers/reedsolomon/images/codiert.txt create mode 100644 buch/papers/reedsolomon/images/decodiert.txt create mode 100644 buch/papers/reedsolomon/images/empfangen.txt create mode 100644 buch/papers/reedsolomon/images/fehler.txt create mode 100644 buch/papers/reedsolomon/images/locator.txt create mode 100644 buch/papers/reedsolomon/images/signal.txt create mode 100644 buch/papers/reedsolomon/images/syndrom.txt (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/images/codiert.txt b/buch/papers/reedsolomon/images/codiert.txt new file mode 100644 index 0000000..4a481d8 --- /dev/null +++ b/buch/papers/reedsolomon/images/codiert.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,24.0186013379153 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,4.84567134895776 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,43.6179140616243 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/images/decodiert.txt b/buch/papers/reedsolomon/images/decodiert.txt new file mode 100644 index 0000000..f6221e6 --- /dev/null +++ b/buch/papers/reedsolomon/images/decodiert.txt @@ -0,0 +1,96 @@ +0,6.05208333333333 +1,6.02602539785853 +2,0.0261327016093151 +3,5.98927158561317 +4,4.019445724874 +5,0.0247005083663722 +6,4.97798278395618 +7,1.95246440445439 +8,0.974000110512201 +9,2.00528527696027 +10,1.00071804528155 +11,1.97630907888264 +12,0.0232923747656228 +13,6.01302820392331 +14,3.03567381915226 +15,5.02435590137329 +16,7.00526061008995 +17,5.00739608089369 +18,5.02211514480064 +19,4.02175864806658 +20,1.00236543833726 +21,4.98147315261261 +22,8.97728828610336 +23,8.98481304394618 +24,2.98958333333333 +25,1.98491220960989 +26,5.97728835934715 +27,5.98144124907561 +28,4.00163839998525 +29,2.02176249296313 +30,9.02210713874162 +31,1.00742763919872 +32,1.00557258081044 +33,1.02435888848794 +34,2.03577412756745 +35,6.01302820392331 +36,5.97917574041123 +37,0.976310374034338 +38,9.00062625447998 +39,7.00515849238528 +40,6.97396416790894 +41,0.95256880864368 +42,8.97794719866783 +43,9.01850701506487 +44,10.0194409579917 +45,8.98926601525997 +46,7.9866590265379 +47,5.02603060999077 +48,2.05208333333333 +49,4.02603841132848 +50,0.986882897867895 +51,0.0177592928994285 +52,9.01944131204563 +53,3.0185365665612 +54,2.97803642439316 +55,2.95243072164649 +56,4.97396651395488 +57,6.00516695947321 +58,0.0143895905726619 +59,7.97630812771393 +60,5.97917574041123 +61,9.01298821331865 +62,3.03567381915226 +63,4.02435609145793 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/images/empfangen.txt b/buch/papers/reedsolomon/images/empfangen.txt new file mode 100644 index 0000000..38c13b0 --- /dev/null +++ b/buch/papers/reedsolomon/images/empfangen.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,23.6290258699579 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,5.55320238736303 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,44.6135417384784 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/images/fehler.txt b/buch/papers/reedsolomon/images/fehler.txt new file mode 100644 index 0000000..23f1a83 --- /dev/null +++ b/buch/papers/reedsolomon/images/fehler.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,2 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,2 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,1 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/images/locator.txt b/buch/papers/reedsolomon/images/locator.txt new file mode 100644 index 0000000..b28988c --- /dev/null +++ b/buch/papers/reedsolomon/images/locator.txt @@ -0,0 +1,96 @@ +0,0.0301224340567056 +1,0.141653026854885 +2,0.138226631799377 +3,0.0339903276086929 +4,0.310585462557496 +5,0.551427312631385 +6,0.628514858396814 +7,0.51102386251559 +8,0.275861355940449 +9,0.0502396354182268 +10,0.090185502547573 +11,0.110759344849756 +12,0.0684618905063001 +13,0.0362855426992259 +14,0.0697096919781468 +15,0.109288539370248 +16,0.0923187999496653 +17,0.0512198536768088 +18,0.274192386987782 +19,0.51349614953654 +20,0.633154426602466 +21,0.553283743533942 +22,0.307840573214514 +23,0.0341664350328392 +24,0.140270857957 +25,0.138527177682831 +26,0.029637547736156 +27,0.0816962563186052 +28,0.0944383203811073 +29,0.0263932110686261 +30,0.0585881348402056 +31,0.0737117341599984 +32,0.0239973937701886 +33,0.0464215468420038 +34,0.0616218854220964 +35,0.0221963086695009 +36,0.0390764778127646 +37,0.0537637218396934 +38,0.0208333333333332 +39,0.0343107696069045 +40,0.0483441215964552 +41,0.0198077862118806 +42,0.0311207395968725 +43,0.0444955089373458 +44,0.0190533549944159 +45,0.0290049795038723 +46,0.0417536642697558 +47,0.0185261550443084 +48,0.0277059929762261 +49,0.0398606084144816 +50,0.0181978813094817 +51,0.0271098219177584 +52,0.0386836665079729 +53,0.0180518611046889 +54,0.0272138992557141 +55,0.0381891287148314 +56,0.0180809085252469 +57,0.0281418959420061 +58,0.0384596362516637 +59,0.0182864418432272 +60,0.0302250788423173 +61,0.0397874837986351 +62,0.0186786556701694 +63,0.0342489348284216 +64,0.0429932815348666 +65,0.0192777878591759 +66,0.0422808966931999 +67,0.0506815964680563 +68,0.0201167847752226 +69,0.0615048274405271 +70,0.0744953894508454 +71,0.021246054596492 +72,0.142602265816215 +73,0.273502052865436 +74,0.325309673287599 +75,0.272705389655349 +76,0.149074257381345 +77,0.0247199397628712 +78,0.0680137859566976 +79,0.075388270873485 +80,0.0273637831604903 +81,0.0407867704453274 +82,0.0632964886441949 +83,0.0309749128751093 +84,0.0315202035072035 +85,0.0627625211892184 +86,0.0360843918243497 +87,0.02794920551495 +88,0.0677921493367236 +89,0.0437167157553067 +90,0.0270640150996317 +91,0.0783380025231622 +92,0.0561293738314281 +93,0.0278742033265809 +94,0.0981443889498639 +95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/images/signal.txt b/buch/papers/reedsolomon/images/signal.txt new file mode 100644 index 0000000..c4fa5f8 --- /dev/null +++ b/buch/papers/reedsolomon/images/signal.txt @@ -0,0 +1,96 @@ +0,6 +1,6 +2,0 +3,6 +4,4 +5,0 +6,5 +7,2 +8,1 +9,2 +10,1 +11,2 +12,0 +13,6 +14,3 +15,5 +16,7 +17,5 +18,5 +19,4 +20,1 +21,5 +22,9 +23,9 +24,3 +25,2 +26,6 +27,6 +28,4 +29,2 +30,9 +31,1 +32,1 +33,1 +34,2 +35,6 +36,6 +37,1 +38,9 +39,7 +40,7 +41,1 +42,9 +43,9 +44,10 +45,9 +46,8 +47,5 +48,2 +49,4 +50,1 +51,0 +52,9 +53,3 +54,3 +55,3 +56,5 +57,6 +58,0 +59,8 +60,6 +61,9 +62,3 +63,4 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/images/syndrom.txt b/buch/papers/reedsolomon/images/syndrom.txt new file mode 100644 index 0000000..8ca9eed --- /dev/null +++ b/buch/papers/reedsolomon/images/syndrom.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 -- cgit v1.2.1 From 93db2b408895beda3ec4d06ff3f81180ca3c7377 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 21 Jul 2021 15:47:40 +0200 Subject: to fix --- buch/papers/reedsolomon/dtf.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index f011ac3..27c6150 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -28,7 +28,7 @@ Filtert man nur diese Punkte heraus und Transformiert sie mit Fourier erhält ma \begin{figure} \centering - \input{papers/reedsolomon/images/plotfft.tex} + %\input{papers/reedsolomon/images/plotfft.tex} \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} \end{figure} \ No newline at end of file -- cgit v1.2.1 From 5397a77e20a23338279ffe4faa59453104be5b95 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 21 Jul 2021 21:18:31 +0200 Subject: update --- buch/papers/reedsolomon/dtf.tex | 41 ++++++--- buch/papers/reedsolomon/experiments/plot.tex | 130 +++++++++++++++------------ buch/papers/reedsolomon/images/plotfft.tex | 68 ++++++++------ buch/papers/reedsolomon/packages.tex | 2 +- 4 files changed, 143 insertions(+), 98 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 27c6150..a111527 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -14,21 +14,42 @@ wobei sie dann bei späteren Berchnungen ganz nützlich ist. \subsection{Diskrete Fourientransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} Die Diskrete Fourientransformation ist definiert als - + \[ + \label{ft_discrete} + \hat{c}_{k} + = \frac{1}{N} \sum_{n=0}^{N-1} + {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} + \] +, wenn man nun + \[ + w = e^{-\frac{2\pi j}{N} k} + \] +ersetzte, und $N$ konstantbleibt, erhält man + \[ + \hat{c}_{k}=\frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) + \] +was überaust ähnlich zu unserem Polynomidee ist. \subsection{Übertragungsabfolge \label{reedsolomon:subsection:Übertragungsabfolge}} -Das Signal.... sind die Daten, Zahlen welche übertragen werden sollen. -Das speziell ist das wir 100 Punkte übertragen und von 64 bis 100, -werden nur Null Punkte übertragen, dies weiss auch unser Empfänger. -Nun wird das Signal in Abbildung... codiert... -Somit wird die Information jedes Punktes auf das ganze spektrum von 0 bis 100 übertragen. -Kommen nuun drei Fehler... hinzu zu diesem codierten Signal sind diese nicht zu erkennen. -Nach dem Empfangen... und decodieren ... erkennt man die fehlerhafte information in den Punkten 64 bis 100. -Filtert man nur diese Punkte heraus und Transformiert sie mit Fourier erhält man die stellen an denen die Fehler sich eingeschlichen haben. + +\begin{enumerate}[1)] +\item Das Signal hat 64 die Daten, Zahlen welche übertragen werden sollen. +Dabei zusätzlich nach 16 Fehler abgesichert, macht insgesamt 96 Übertragungszahlen. +\item Nun wurde mittels der schnellen diskreten Fourientransformation diese 96 codiert. +Das heisst alle information ist in alle Zahlenvorhanden. +\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. +\item Dieses wird nun Empfangen und mittels inversen diskreten Fourientransormation, wieder rücktransformiert. +\item Nun sieht man den Fehler im Decodieren in den Übertragungsstellen 64 bis 96. +\item Nimmt man nun nur diese Stellen 64 bis 96, auch Syndrom genannt, und Transformiert diese. +\item Bekommt man die Fehlerstellen im Locator wieder, zwar nichtso genau, dennoch erkkent man wo die Fehler stattgefunden haben. +\end{enumerate} \begin{figure} \centering - %\input{papers/reedsolomon/images/plotfft.tex} + \resizebox{0.9\textwidth}{!}{ + %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/plot.pdf} + \input{papers/reedsolomon/images/plotfft.tex} + } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} \end{figure} \ No newline at end of file diff --git a/buch/papers/reedsolomon/experiments/plot.tex b/buch/papers/reedsolomon/experiments/plot.tex index bf9aadc..2196c82 100644 --- a/buch/papers/reedsolomon/experiments/plot.tex +++ b/buch/papers/reedsolomon/experiments/plot.tex @@ -13,69 +13,73 @@ \newcommand{\y}{-8} \begin{document} -\tikzset{ - node/.style={rectangle, draw=black!100, thick, on grid}, % on grid added - dangling node/.style={node, fill=black!30} -} \begin{tikzpicture}[] - -\filldraw[red] (0,0) circle (5mm); - %Knote -\matrix[draw = none, column sep=20mm, row sep=20mm]{ - \node(signal) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Signal}}] - \addplot[] table[col sep=comma] {signal.txt}; - \end{axis} - \end{tikzpicture}}; & - \node(codiert) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Codiert}}] - \addplot[] table[col sep=comma] {codiert.txt}; - \end{axis} - \end{tikzpicture}}; \\ + %--------------------------------------------------------------- + %Knote + \matrix[draw = none, column sep=20mm, row sep=4mm]{ + \node(signal) [] { + \begin{tikzpicture} + \begin{axis}[ + title = {\Large {Signal}}, + xlabel={Anzahl Übertragene Zahlen}, + xtick={0,20,40,64,80,98},] + \addplot[blue] table[col sep=comma] {signal.txt}; + \end{axis} + \end{tikzpicture}}; & - &\node(fehler) [] { - \begin{tikzpicture} - \begin{axis}[scale=0.6, title = {\Large {Fehler}}] - \addplot[] table[col sep=comma] {fehler.txt}; - \end{axis} - \end{tikzpicture}};\\ - - \node(decodiert) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Decodiert}}] - \addplot[] table[col sep=comma] {decodiert.txt}; - \end{axis} - \end{tikzpicture}}; & - - \node(empfangen) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Empfangen}}] - \addplot[] table[col sep=comma] {empfangen.txt}; - \end{axis} - \end{tikzpicture}};\\ - - \node(syndrom) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Syndrom}}] - \addplot[] table[col sep=comma] {syndrom.txt}; - \end{axis} - \end{tikzpicture}}; & - - \node(locator) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Locator}}] - \addplot[] table[col sep=comma] {locator.txt}; - \end{axis} - \end{tikzpicture}};\\ -}; + \node(codiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Codiert}}] + \addplot[] table[col sep=comma] {codiert.txt}; + \end{axis} + \end{tikzpicture}}; \\ + + &\node(fehler) [] { + \begin{tikzpicture} + \begin{axis}[scale=0.6, title = {\Large {Fehler}}] + \addplot[red] table[col sep=comma] {fehler.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(decodiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Decodiert}}] + \addplot[blue] table[col sep=comma] {decodiert.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(empfangen) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Empfangen}}] + \addplot[] table[col sep=comma] {empfangen.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(syndrom) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Syndrom}}] + \addplot[blue] table[col sep=comma] {syndrom.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(locator) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Locator}}] + \addplot[] table[col sep=comma] {locator.txt}; + \end{axis} + \end{tikzpicture}};\\ + }; + %------------------------------------------------------------- %FFT & IFFT deskription - - \draw[thin,gray,dashed] (0,15) to (0,-15); - \node(FFT) [ scale=0.7] at (0,15.3) {FFT IFFT}; + \draw[thin,gray,dashed] (0,12) to (0,-12); + \node(IFFT) [scale=0.7] at (0,12.3) {IFFT}; + \draw[<-](IFFT.south west)--(IFFT.south east); + \node(FFT) [scale=0.7, above of=IFFT] {FFT}; + \draw[->](FFT.north west)--(FFT.north east); + + \draw[thick, ->,] (fehler.west)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); %Arrows \draw[ultra thick, ->] (signal.east) to (codiert.west); \draw[ultra thick, ->] (codiert.south) to (fehler.north); @@ -85,7 +89,15 @@ \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + %item + \node[circle, draw, fill =lightgray] at (signal.north west)+(1,0) {1}; + \node[circle, draw, fill =lightgray] at (codiert.north west) {2}; + \node[circle, draw, fill =lightgray] at (fehler.north west) {3}; + \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; + \node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; + \node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; + \node[circle, draw, fill =lightgray] at (locator.north west) {7}; - \end{tikzpicture} +\end{tikzpicture} \end{document} diff --git a/buch/papers/reedsolomon/images/plotfft.tex b/buch/papers/reedsolomon/images/plotfft.tex index e6d3b47..83a89eb 100644 --- a/buch/papers/reedsolomon/images/plotfft.tex +++ b/buch/papers/reedsolomon/images/plotfft.tex @@ -1,77 +1,89 @@ % -% Plot der èbertrangungsabfolge ins FFT und zurück mit IFFT +% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT % -\tikzset{ - node/.style={rectangle, draw=black!100, thick, on grid}, % on grid added - dangling node/.style={node, fill=black!30} -} \begin{tikzpicture}[] %--------------------------------------------------------------- %Knote -\matrix[draw = none, column sep=20mm, row sep=20mm]{ +\matrix[draw = none, column sep=25mm, row sep=2mm]{ \node(signal) [] { \begin{tikzpicture} - \begin{axis}[title = {\Large {Signal}}] - \addplot[] table[col sep=comma] {signal.txt}; + \begin{axis} + [title = {\Large {Signal}}, + xlabel={Anzahl Übertragene Zahlen}, + xtick={0,20,40,64,80,98},] + \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/signal.txt}; \end{axis} \end{tikzpicture}}; & \node(codiert) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Codiert}}] - \addplot[] table[col sep=comma] {codiert.txt}; + \addplot[] table[col sep=comma] {papers/reedsolomon/images/codiert.txt}; \end{axis} \end{tikzpicture}}; \\ &\node(fehler) [] { \begin{tikzpicture} - \begin{axis}[scale=0.6, title = {\Large {Fehler}}] - \addplot[] table[col sep=comma] {fehler.txt}; + \begin{axis}[scale=0.6, title = {\Large {Fehler}}, + xtick={7,21,75}] + \addplot[red] table[col sep=comma] {papers/reedsolomon/images/fehler.txt}; \end{axis} \end{tikzpicture}};\\ \node(decodiert) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Decodiert}}] - \addplot[] table[col sep=comma] {decodiert.txt}; + \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/decodiert.txt}; \end{axis} \end{tikzpicture}}; & \node(empfangen) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Empfangen}}] - \addplot[] table[col sep=comma] {empfangen.txt}; + \addplot[] table[col sep=comma] {papers/reedsolomon/images/empfangen.txt}; \end{axis} \end{tikzpicture}};\\ \node(syndrom) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Syndrom}}] - \addplot[] table[col sep=comma] {syndrom.txt}; + \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/syndrom.txt}; \end{axis} \end{tikzpicture}}; & \node(locator) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Locator}}] - \addplot[] table[col sep=comma] {locator.txt}; + \addplot[] table[col sep=comma] {papers/reedsolomon/images/locator.txt}; \end{axis} \end{tikzpicture}};\\ }; %------------------------------------------------------------- %FFT & IFFT deskription - \draw[thin,gray,dashed] (0,15) to (0,-15); - \node(FFT) [ scale=0.7] at (0,15.3) {FFT IFFT}; - - %Arrows - \draw[ultra thick, ->] (signal.east) to (codiert.west); - \draw[ultra thick, ->] (codiert.south) to (fehler.north); - \draw[ultra thick, ->] (fehler.south) to (empfangen.north); - \draw[ultra thick, ->] (empfangen.west) to (decodiert.east); - \draw[ultra thick, ->] (syndrom.east) to (locator.west); - \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; - \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); - - \end{tikzpicture} \ No newline at end of file +\draw[thin,gray,dashed] (0,12) to (0,-12); +\node(IFFT) [scale=0.7] at (0,12.3) {IFFT}; +\draw[<-](IFFT.south west)--(IFFT.south east); +\node(FFT) [scale=0.7, above of=IFFT] {FFT}; +\draw[->](FFT.north west)--(FFT.north east); + +\draw[thick, ->,] (fehler.west)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); +%Arrows +\draw[ultra thick, ->] (signal.east) to (codiert.west); +\draw[ultra thick, ->] (codiert.south) to (fehler.north); +\draw[ultra thick, ->] (fehler.south) to (empfangen.north); +\draw[ultra thick, ->] (empfangen.west) to (decodiert.east); +\draw[ultra thick, ->] (syndrom.east) to (locator.west); +\draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; +\draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + +%item +\node[circle, draw, fill =lightgray] at (signal.north west) {1}; +\node[circle, draw, fill =lightgray] at (codiert.north west) {2}; +\node[circle, draw, fill =lightgray] at (fehler.north west) {3}; +\node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; +\node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; +\node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; +\node[circle, draw, fill =lightgray] at (locator.north west) {7}; +\end{tikzpicture} \ No newline at end of file diff --git a/buch/papers/reedsolomon/packages.tex b/buch/papers/reedsolomon/packages.tex index 4b1ee68..b84e228 100644 --- a/buch/papers/reedsolomon/packages.tex +++ b/buch/papers/reedsolomon/packages.tex @@ -9,4 +9,4 @@ %\usepackage{packagename} \usepackage{pgfplots} - +\usepackage{filecontents} -- cgit v1.2.1 From f5dc85609d5db143cbdefcbb1430b4dfec7a8d3f Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 09:38:24 +0200 Subject: Create figure for stereographic projection --- buch/papers/punktgruppen/Makefile | 1 + .../figures/stereographic-projections.pdf | Bin 0 -> 2045 bytes .../tikz/stereographic-projections.tex | 90 +++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 buch/papers/punktgruppen/figures/stereographic-projections.pdf create mode 100644 buch/papers/punktgruppen/tikz/stereographic-projections.tex (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/Makefile b/buch/papers/punktgruppen/Makefile index 98e7149..03ad15a 100644 --- a/buch/papers/punktgruppen/Makefile +++ b/buch/papers/punktgruppen/Makefile @@ -20,6 +20,7 @@ TIKZFIGURES := \ tikz/lattice.tex \ tikz/piezo.tex \ tikz/projections.tex \ + tikz/stereographic-projections.tex \ tikz/symmetric-shapes.tex FIGURES := $(patsubst tikz/%.tex, figures/%.pdf, $(TIKZFIGURES)) diff --git a/buch/papers/punktgruppen/figures/stereographic-projections.pdf b/buch/papers/punktgruppen/figures/stereographic-projections.pdf new file mode 100644 index 0000000..59db126 Binary files /dev/null and b/buch/papers/punktgruppen/figures/stereographic-projections.pdf differ diff --git a/buch/papers/punktgruppen/tikz/stereographic-projections.tex b/buch/papers/punktgruppen/tikz/stereographic-projections.tex new file mode 100644 index 0000000..4091ad9 --- /dev/null +++ b/buch/papers/punktgruppen/tikz/stereographic-projections.tex @@ -0,0 +1,90 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{txfonts} +\usepackage{tikz-3dplot} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + +\tdplotsetmaincoords{60}{130} +\pgfmathsetmacro{\l}{2} + +\begin{tikzpicture}[ + >=latex, + tdplot_main_coords, + dot/.style = { + black, fill = black, circle, + outer sep = 0, inner sep = 0, + minimum size = 1mm + }, + round/.style = { + draw = orange, thick, circle, + minimum size = 1mm, + inner sep = 0pt, outer sep = 0pt, + }, + cross/.style = { + cross out, draw = magenta, thick, + minimum size = 1mm, + inner sep = 0pt, outer sep = 0pt + }, + ] + + % origin + \coordinate (O) at (0,0,0); + + % poles + \coordinate (NP) at (0,0,\l); + \coordinate (SP) at (0,0,-\l); + + % axis + % \draw[->] (O) -- ++(1.5*\l,0,0); + % \draw[->] (O) -- ++(0,1.5*\l,0); + % \draw[->] (O) -- ++(0,0,1.5*\l); + + % gray unit circle + \tdplotdrawarc[gray, dashed]{(O)}{\l}{0}{360}{}{}; + \draw[gray, dashed] (-\l, 0, 0) to (\l, 0, 0); + \draw[gray, dashed] (0, -\l, 0) to (0, \l, 0); + + % meridians + \foreach \phi in {0, 30, 60, ..., 150}{ + \tdplotsetrotatedcoords{\phi}{90}{0}; + \tdplotdrawarc[lightgray, dashed, tdplot_rotated_coords]{(O)}{\l}{0}{360}{}{}; + } + + % dot above and its projection + \pgfmathsetmacro{\phi}{120} + \pgfmathsetmacro{\theta}{60} + + \pgfmathsetmacro{\px}{cos(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\py}{sin(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\pz}{cos(\theta)*\l}) + + \coordinate (A) at (\px,\py,\pz); + \coordinate (Aproj) at ({\px * \l / (\l + \pz)}, {\py * \l / (\l + \pz)}, 0); + + % projection line + \draw[] (A) to (SP); + \draw[gray] (SP) to (O) to (Aproj); + + % dot + \draw (O) node[dot] {}; + \draw (SP) node[dot] {}; + \draw (A) node[dot, fill=magenta] {}; + \draw[very thick, magenta] + (Aproj) ++(.15,0) to ($(Aproj)+(-.15, 0)$) + (Aproj) ++(0,.15) to ($(Aproj) +(0, -.15)$); + + % \draw (O) to ({cos(\phi)*\l}, {sin(\phi)*\l}, 0); + +\end{tikzpicture} +\end{document} +% vim:ts=2 sw=2 et: -- cgit v1.2.1 From 38950a79c5e5d4a4a064f17539d7f0fc5a9a2ef0 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 09:38:44 +0200 Subject: Rebuild figures --- .../punktgruppen/figures/atoms-grid-force.pdf | Bin 1496 -> 1496 bytes .../punktgruppen/figures/atoms-grid-still.pdf | Bin 0 -> 1307 bytes .../figures/atoms-piezo-force-horizontal.pdf | Bin 0 -> 12453 bytes .../figures/atoms-piezo-force-vertical.pdf | Bin 0 -> 12490 bytes .../punktgruppen/figures/atoms-piezo-still.pdf | Bin 0 -> 1643 bytes .../punktgruppen/figures/combine-symmetries.pdf | Bin 14414 -> 12054 bytes buch/papers/punktgruppen/figures/lattice.pdf | Bin 27886 -> 25646 bytes buch/papers/punktgruppen/figures/piezo-atoms.pdf | Bin 35693 -> 0 bytes buch/papers/punktgruppen/figures/piezo.pdf | Bin 16865 -> 14077 bytes buch/papers/punktgruppen/figures/projections.pdf | Bin 27953 -> 26440 bytes .../punktgruppen/figures/symmetric-shapes.pdf | Bin 12790 -> 12772 bytes 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/punktgruppen/figures/atoms-grid-still.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf create mode 100644 buch/papers/punktgruppen/figures/atoms-piezo-still.pdf delete mode 100644 buch/papers/punktgruppen/figures/piezo-atoms.pdf (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/figures/atoms-grid-force.pdf b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf index f56be04..b3e6215 100644 Binary files a/buch/papers/punktgruppen/figures/atoms-grid-force.pdf and b/buch/papers/punktgruppen/figures/atoms-grid-force.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-grid-still.pdf b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf new file mode 100644 index 0000000..752014d Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-grid-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf new file mode 100644 index 0000000..313dc69 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-force-horizontal.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf new file mode 100644 index 0000000..9a86b7c Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-force-vertical.pdf differ diff --git a/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf new file mode 100644 index 0000000..83b6590 Binary files /dev/null and b/buch/papers/punktgruppen/figures/atoms-piezo-still.pdf differ diff --git a/buch/papers/punktgruppen/figures/combine-symmetries.pdf b/buch/papers/punktgruppen/figures/combine-symmetries.pdf index 13f7330..6cd4e64 100644 Binary files a/buch/papers/punktgruppen/figures/combine-symmetries.pdf and b/buch/papers/punktgruppen/figures/combine-symmetries.pdf differ diff --git a/buch/papers/punktgruppen/figures/lattice.pdf b/buch/papers/punktgruppen/figures/lattice.pdf index 6565be5..712d6f4 100644 Binary files a/buch/papers/punktgruppen/figures/lattice.pdf and b/buch/papers/punktgruppen/figures/lattice.pdf differ diff --git a/buch/papers/punktgruppen/figures/piezo-atoms.pdf b/buch/papers/punktgruppen/figures/piezo-atoms.pdf deleted file mode 100644 index 63da7a9..0000000 Binary files a/buch/papers/punktgruppen/figures/piezo-atoms.pdf and /dev/null differ diff --git a/buch/papers/punktgruppen/figures/piezo.pdf b/buch/papers/punktgruppen/figures/piezo.pdf index ca6192b..d82ee96 100644 Binary files a/buch/papers/punktgruppen/figures/piezo.pdf and b/buch/papers/punktgruppen/figures/piezo.pdf differ diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index c9369b2..bc04313 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ diff --git a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf index 0b3ba54..3a8d9dd 100644 Binary files a/buch/papers/punktgruppen/figures/symmetric-shapes.pdf and b/buch/papers/punktgruppen/figures/symmetric-shapes.pdf differ -- cgit v1.2.1 From 49b0ab2844c380a5380e1d9d893738e9fd22c2b5 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 10:20:15 +0200 Subject: Add figure of stereographic projection and little explanation --- buch/papers/punktgruppen/crystals.tex | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index f8be01b..0e4d6c7 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -107,9 +107,14 @@ ein. \begin{figure} \centering - \includegraphics[]{papers/punktgruppen/figures/projections} - \caption{Kristallklassen mit zugehörigem Schönflies-Symbol} - \label{fig:punktgruppen:Kristallkassen} + \includegraphics[height=6cm]{papers/punktgruppen/figures/stereographic-projections} + \caption{ + Stereografische Projektion: Es wird eine Linie vom magentafarbenen Punkt auf der oberen Hälfte der Kugel zum Südpol gezogen. + Wo die Linie die Ebene schneidet (\(z = 0\)), ist die Projektion des Punktes. + Die Koordinaten der Projektionen sind einfach zu berechnen: + ein Punkt auf eine Kugel mit Radius \(r\) mit den Koordinaten \(x, y, z,\) wird auf \(xr/(r - z), yr/(r - z)\) projiziert. + } + \label{fig:punktgruppen:stereographic-projections} \end{figure} \subsection{Kristallklassen} @@ -119,15 +124,17 @@ nur auf genau 32 Arten rein punktsymmetrische Symmetriegruppen bilden können. Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. -Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion -\footnote{Die Markierten Kreise/Kreuze repräsentieren Punkte auf einer Kugel. -Die Orte der Symbole stehen für einen Schattenwurf eines Punktes auf dem Boden, auf welcher sich die Kugel befindet. -Wobei die Lichtquelle am Nord/Südpol liegt.} -ermöglicht, -wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. +Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion ermöglicht (siehe Abb. \ref{fig:punktgruppen:stereographic-projections}), wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. +\begin{figure} + \centering + \includegraphics[]{papers/punktgruppen/figures/projections} + \caption{Kristallklassen mit zugehörigem Schönflies-Symbol} + \label{fig:punktgruppen:Kristallkassen} +\end{figure} \subsubsection{Schönflies-Symbilok} + Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schöönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. -- cgit v1.2.1 From 09da726608ea811d6d9aa51261e48c787a4300ab Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 10:28:08 +0200 Subject: Fix piezo figure E-Field --- buch/papers/punktgruppen/figures/piezo.pdf | Bin 14077 -> 15599 bytes buch/papers/punktgruppen/tikz/piezo.tex | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/figures/piezo.pdf b/buch/papers/punktgruppen/figures/piezo.pdf index d82ee96..904250a 100644 Binary files a/buch/papers/punktgruppen/figures/piezo.pdf and b/buch/papers/punktgruppen/figures/piezo.pdf differ diff --git a/buch/papers/punktgruppen/tikz/piezo.tex b/buch/papers/punktgruppen/tikz/piezo.tex index 56e9463..6542f26 100644 --- a/buch/papers/punktgruppen/tikz/piezo.tex +++ b/buch/papers/punktgruppen/tikz/piezo.tex @@ -47,7 +47,7 @@ \node[ rectangle, fill = gray!20!white, minimum width = 3cm, minimum height = 1.5cm, - ] (body) {\(\vec{E}_p = \vec{0}\)}; + ] (body) {\(\vec{E}_p \neq \vec{0}\)}; \node[ draw, rectangle, thick, black, fill = red!50, -- cgit v1.2.1 From cccb51c61e5423ab8bc42ff327bc577dfc5aca24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 22 Jul 2021 10:35:04 +0200 Subject: typo --- buch/papers/reedsolomon/Makefile.inc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/Makefile.inc b/buch/papers/reedsolomon/Makefile.inc index 6a676f8..ea51f7a 100644 --- a/buch/papers/reedsolomon/Makefile.inc +++ b/buch/papers/reedsolomon/Makefile.inc @@ -6,9 +6,17 @@ dependencies-reedsolomon = \ papers/reedsolomon/packages.tex \ papers/reedsolomon/main.tex \ - papers/reedsolomon/references.bib \ - papers/reedsolomon/teil0.tex \ - papers/reedsolomon/teil1.tex \ - papers/reedsolomon/teil2.tex \ - papers/reedsolomon/teil3.tex + papers/reedsolomon/einleitung.tex \ + papers/reedsolomon/idee.tex \ + papers/reedsolomon/dtf.tex \ + papers/reedsolomon/endlichekoerper.tex \ + papers/reedsolomon/codebsp.tex \ + papers/reedsolomon/decohnefehler.tex \ + papers/reedsolomon/decmitfehler.tex \ + papers/reedsolomon/rekonstruktion.tex \ + papers/reedsolomon/zusammenfassung.tex \ + papers/reedsolomon/anwendungen.tex \ + papers/reedsolomon/hilfstabellen.tex \ + papers/reedsolomon/references.bib + -- cgit v1.2.1 From bb830b17b647c27c48cc611af44045ed9eab7ae8 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 10:48:02 +0200 Subject: Add missing reference --- buch/papers/punktgruppen/main.tex | 1 + buch/papers/punktgruppen/references.bib | 9 +++++++++ 2 files changed, 10 insertions(+) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/main.tex b/buch/papers/punktgruppen/main.tex index a6e246c..ea19421 100644 --- a/buch/papers/punktgruppen/main.tex +++ b/buch/papers/punktgruppen/main.tex @@ -18,6 +18,7 @@ \nocite{punktgruppen:pinter-algebra} \nocite{punktgruppen:sands-crystal} \nocite{punktgruppen:lang-elt2} +\nocite{punktgruppen:ouchem} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib index 9edb8bd..a29640c 100644 --- a/buch/papers/punktgruppen/references.bib +++ b/buch/papers/punktgruppen/references.bib @@ -33,3 +33,12 @@ inseries = {Vorlesungsskript zum Modul ELT}, } +@online{punktgruppen:ouchem, + title = {Symmetry in Crystallography}, + author = {Dept. of Chemistry \& Biochemistry, Chemical Crystallography Laboratory, University of Oklahoma}, + year = {2019}, + month = {11}, + day = {17}, + url = {http://archive.today/2021.07.22-083802/http://xrayweb.chem.ou.edu/notes/symmetry.html}, + urldate = {2021-07-22}, +} -- cgit v1.2.1 From 2d4039ca87a6b2fb7897cc47ed1d81256a25d79d Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 22 Jul 2021 14:17:29 +0200 Subject: Fix Makefile.inc --- buch/papers/punktgruppen/Makefile.inc | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/Makefile.inc b/buch/papers/punktgruppen/Makefile.inc index 8cde9d7..3b49602 100644 --- a/buch/papers/punktgruppen/Makefile.inc +++ b/buch/papers/punktgruppen/Makefile.inc @@ -11,8 +11,15 @@ dependencies-punktgruppen = \ papers/punktgruppen/crystals.tex \ papers/punktgruppen/piezo.tex \ papers/punktgruppen/references.bib \ - papers/punktgruppen/tikz/combine-symmetries.tex \ - papers/punktgruppen/tikz/lattice.tex \ - papers/punktgruppen/tikz/piezo-atoms.tex \ - papers/punktgruppen/tikz/piezo.tex \ - papers/punktgruppen/tikz/projections.tex + paers/punktgruppen/tikz/atoms-grid-force.tex \ + paers/punktgruppen/tikz/atoms-grid-still.tex \ + paers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex \ + paers/punktgruppen/tikz/atoms-piezo-force-vertical.tex \ + paers/punktgruppen/tikz/atoms-piezo-still.tex \ + paers/punktgruppen/tikz/combine-symmetries.tex \ + paers/punktgruppen/tikz/lattice.tex \ + paers/punktgruppen/tikz/piezo-atoms.tex \ + paers/punktgruppen/tikz/piezo.tex \ + paers/punktgruppen/tikz/projections.tex \ + paers/punktgruppen/tikz/stereographic-projections.tex \ + paers/punktgruppen/tikz/symmetric-shapes.tex -- cgit v1.2.1 From 88fef8a83dcae2c49edab204809b438a27c24482 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 08:46:39 +0200 Subject: Some corrections on the symmetry section --- buch/papers/punktgruppen/symmetry.tex | 39 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 1dc6f98..6655864 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -1,7 +1,7 @@ \section{Symmetrie} Das Wort Symmetrie ist sehr alt und hat sich seltsamerweise von seinem ursprünglichen griechischen Wort -\(\mathrm{\Sigma\nu\mu\mu\varepsilon\tau\rho\iota\alpha}\) +\(\mathrm{\Sigma\upsilon\mu\mu\varepsilon\tau\rho\iota\alpha}\) \footnote{\emph{Symmetr\'ia}: ein gemeinsames Mass habend, gleichmässig, verhältnismässig} fast nicht verändert. In der Alltagssprache mag es ein locker definierter Begriff sein, aber in der Mathematik hat Symmetrie eine sehr @@ -33,9 +33,7 @@ Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für -\(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. Dies ist -hoffentlich ausreichend, um die Bedeutung hinter der Notation zu verstehen, die -nun eingeführt wird. +\(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. % Vieleicht eine kurze Einführung in für die Definition, ich habe das gefühl, dass in der Definition die Symmetrie-Operation und die Gruppe auf einmal erklährt wird \subsubsection{Symetriegruppe} @@ -46,39 +44,40 @@ nicht nur um $\sigma$ sondern auch Diagonal gespiegelt werden oder um $90^\circ$ Fässt man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - Sei \(g\) eine Operation, die ein mathematisches Objekt unverändert lässt. - Bei einer anderen Operation \(h\) definieren wir die Komposition \(h\circ g\) - als die Anwendung der Operationen nacheinander. Alle Operationen bilden unter - Komposition eine Gruppe, die Symmetriegruppe genannt wird. + Sei \(g\) eine umkehrbare Operation, die ein mathematisches Objekt + unverändert lässt. Bei einer anderen Operation \(h\) definieren wir die + Komposition \(h\circ g\) als die Anwendung der Operationen nacheinander. Alle + Operationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt + wird. \end{definition} % ich lese diese Definition ein wenig holprig, vieleicht können wir sie zusammen anschauen % Nach meinem Geschmack könne es hier auch eine einleitung wie mein Beispiel geben dammit man den Text flüssiger lesen kann \begin{definition}[Zyklische Untergruppe, Erzeuger] Sei \(g\) ein Element einer Symmetriegruppe \(G\). Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische - Untergruppe von \(G\), und \(g\) wird ihr Erzeuger genannt. Die erzeugte - Untergruppe \(\langle g \rangle\) wird mit spitzen Klammern um den Erzeuger - bezeichnet. + Untergruppe von \(G\), und \(g\) wird ihr Erzeuger genannt. Die von \(g\) + erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} + \right\}\) wird mit spitzen Klammern bezeichnet. \end{definition} -Mit dem oben Gesagten können wir das \(n\)-Gon Beispiel formalisieren. +Damit können wir das \(n\)-Gon Beispiel formalisieren. Bezeichnen wir mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die gesamte Symmetriegruppe \[ C_n = \langle r \rangle = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} \] -der Drehungen eines \(n\)-Gons zu definieren. Das liegt daran, -dass wir durch die mehrfache Verwendung von \(r\) jeden Winkel erzeugen, der -die Rotationssymmetrie bewahrt. Hier die Potenzen von \(r\) sind als -wiederholte Komposition gemeint, dass heisst \(r^n = r\circ r \circ \cdots -r\circ r\). Wenn wir diese Idee nun erweitern, können wir mit einem -Erzeugendensystemen komplexere Strukturen aufbauen. +der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch die +mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die +Rotationssymmetrie bewahrt. Hier die Potenzen von \(r\) sind als wiederholte +Komposition gemeint, dass heisst \(r^n = r\circ r \circ \cdots r\circ r\). +Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystemen +komplexere Strukturen aufbauen. \begin{definition}[Erzeugendensysteme] % please fix this unreadable mess - Jede Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. - Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer + Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert + werden. Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. Da es mehrere Erzeuger gibt, müssen auch die sogenannte Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls -- cgit v1.2.1 From 472b3d0a253879552d139cc4f41a2e00e5f6e4f5 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 09:08:08 +0200 Subject: Change stereographic projection to Ci --- buch/papers/punktgruppen/crystals.tex | 5 +-- .../figures/stereographic-projections.pdf | Bin 2045 -> 2377 bytes .../tikz/stereographic-projections.tex | 34 ++++++++++++++++----- 3 files changed, 29 insertions(+), 10 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 0e4d6c7..b59ae0e 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -109,10 +109,11 @@ ein. \centering \includegraphics[height=6cm]{papers/punktgruppen/figures/stereographic-projections} \caption{ - Stereografische Projektion: Es wird eine Linie vom magentafarbenen Punkt auf der oberen Hälfte der Kugel zum Südpol gezogen. + Stereografische Projektion einer \(C_{i}\) Symmetrie. Es wird eine Linie vom magentafarbenen Punkt auf der oberen Hälfte der Kugel zum Südpol gezogen. Wo die Linie die Ebene schneidet (\(z = 0\)), ist die Projektion des Punktes. Die Koordinaten der Projektionen sind einfach zu berechnen: - ein Punkt auf eine Kugel mit Radius \(r\) mit den Koordinaten \(x, y, z,\) wird auf \(xr/(r - z), yr/(r - z)\) projiziert. + ein Punkt auf eine Kugel mit Radius \(r\) mit den Koordinaten \(x, y, z,\) wird auf \(xr/(r + z), yr/(r + z)\) projiziert. + Für den orangefarbenen Punkt unterhalb des Äquators wird die Linie zum Nordpol gezogen und die Projektionsformel hat stattdessen einen Nenner von \(r - z\). } \label{fig:punktgruppen:stereographic-projections} \end{figure} diff --git a/buch/papers/punktgruppen/figures/stereographic-projections.pdf b/buch/papers/punktgruppen/figures/stereographic-projections.pdf index 59db126..7598265 100644 Binary files a/buch/papers/punktgruppen/figures/stereographic-projections.pdf and b/buch/papers/punktgruppen/figures/stereographic-projections.pdf differ diff --git a/buch/papers/punktgruppen/tikz/stereographic-projections.tex b/buch/papers/punktgruppen/tikz/stereographic-projections.tex index 4091ad9..7d612fb 100644 --- a/buch/papers/punktgruppen/tikz/stereographic-projections.tex +++ b/buch/papers/punktgruppen/tikz/stereographic-projections.tex @@ -50,9 +50,9 @@ % \draw[->] (O) -- ++(0,0,1.5*\l); % gray unit circle - \tdplotdrawarc[gray, dashed]{(O)}{\l}{0}{360}{}{}; - \draw[gray, dashed] (-\l, 0, 0) to (\l, 0, 0); - \draw[gray, dashed] (0, -\l, 0) to (0, \l, 0); + \tdplotdrawarc[gray, thick]{(O)}{\l}{0}{360}{}{}; + \draw[gray, dotted] (-\l, 0, 0) to (\l, 0, 0); + \draw[gray, dotted] (0, -\l, 0) to (0, \l, 0); % meridians \foreach \phi in {0, 30, 60, ..., 150}{ @@ -71,19 +71,37 @@ \coordinate (A) at (\px,\py,\pz); \coordinate (Aproj) at ({\px * \l / (\l + \pz)}, {\py * \l / (\l + \pz)}, 0); - % projection line - \draw[] (A) to (SP); + % dot below and its projection + \pgfmathsetmacro{\phi}{-60} + \pgfmathsetmacro{\theta}{120} + + \pgfmathsetmacro{\px}{cos(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\py}{sin(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\pz}{cos(\theta)*\l}) + + \coordinate (B) at (\px,\py,\pz); + \coordinate (Bproj) at ({\px * \l / (\l - \pz)}, {\py * \l / (\l - \pz)}, 0); + + % projection lines + \draw[gray] (A) to (SP); \draw[gray] (SP) to (O) to (Aproj); - % dot + \draw[gray] (B) to (NP); + \draw[gray] (NP) to (O) to (Bproj); + + % dots \draw (O) node[dot] {}; \draw (SP) node[dot] {}; - \draw (A) node[dot, fill=magenta] {}; + \draw (NP) node[dot] {}; + \draw (A) node[dot, fill = magenta, minimum size = 1.5mm] {}; + \draw (B) node[dot, fill = orange, minimum size = 1.5mm] {}; + + % projection markers \draw[very thick, magenta] (Aproj) ++(.15,0) to ($(Aproj)+(-.15, 0)$) (Aproj) ++(0,.15) to ($(Aproj) +(0, -.15)$); - % \draw (O) to ({cos(\phi)*\l}, {sin(\phi)*\l}, 0); + \tdplotdrawarc[orange, very thick]{(Bproj)}{.1}{0}{360}{}{}; \end{tikzpicture} \end{document} -- cgit v1.2.1 From 7e173afd620b52d542cec0f939299a995eb34689 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 09:19:32 +0200 Subject: Change crystal restriction to theorem style with proof --- buch/papers/punktgruppen/crystals.tex | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index b59ae0e..5211b68 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -28,8 +28,6 @@ erreicht werden sofern $\{n_1,n_2,n_3\} \in \mathbb{Z}$ sind. Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. -%TODOO fix Q define without vector symb. -> ask naoki - \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, @@ -44,7 +42,7 @@ der Vektoren $\vec{a}$ , $\vec{b}$ und $\vec{c}$ erlaubt sind oder kurz, um $\ve Verschiebungen um $\vec{r}$ bewirken demnach keine Veränderungen, solange wir ein unendlich grosses Kristallgitter verschieben. -\subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen: Translationssymmetrie} +\subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen:Translationssymmetrie} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. Was nicht direkt ersichtlich ist, dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können. Die geforderte Translationssymmetrie eines Kristalles schränkt weitere Symmetrien deutlich ein. @@ -58,7 +56,18 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \label{fig:punktgruppen:rot-geometry} \end{figure} - \subsubsection{Translationssymmetrie $Q$ in Kombination mit Rotationssymmetrie $C_\alpha$} % Müssen uns auf eine schreibweise für Symmetrie Operationen einigen oder sicher am Ende überprüfen +\begin{satz} + Die Rotationssymmetrien eines Kristalls sind auf 2-fach, 3-fach, 4-fach und 6-fach beschränkt. + Mit anderen Worten: Es sind nur Drehwinkel von + 0\(^{\circ}\), + 60\(^{\circ}\), + 90\(^{\circ}\), + 120\(^{\circ}\) und + 180\(^{\circ}\) + erlaubt. +\end{satz} + +\begin{proof} In Abbildung \ref{fig:punktgruppen:rot-geometry} sehen wir Gitterpunkte und deren Zusammenhänge. \begin{itemize} @@ -66,13 +75,13 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \item \(A'\) ist gegeben, weil wir \(A\) mit der Translation \(\vec{Q}\) um einen Grundvektor verschieben und wir wissen, dass nach einer Translation wieder ein Gitterpunkt an der verschobenen Stelle sein muss. - \item \(B\) entsteht, weil wir die Rotationssymmetrie \(C_\alpha\) auf den Punkt \(A\) anwenden. - Dadurch dreht sich das ganze Gitter um den Winkel \(\alpha\). + \item \(B\) entsteht, weil wir die Rotationssymmetrie \(C_n\) auf den Punkt \(A\) anwenden. + Dadurch dreht sich das ganze Gitter um den Winkel \(360^\circ/n\). Für uns bedeutet dies lediglich, dass unser zweiter Punkt \(A'\) abgedreht wird. An der neuen Position \(B\) von \(A'\) muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. \item \(B\) ist unser Name für diesen neuen Punkt. - Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir \(C_\alpha\) auch auf \(A'\) anwenden. - Also wenden wir \(C_\alpha\) invertiert + Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir \(C_n\) auch auf \(A'\) anwenden. + Also wenden wir \(C_n\) invertiert \footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. Genauere Überlegungen hierzu werden dem Leser überlassen, da sich die Autoren nicht explizit mit dieser Frage Auseinander gesetzt haben.} auch auf \(A'\) an. @@ -104,6 +113,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. \alpha \in \left\{ 0^\circ, 60^\circ, 90^\circ, 120^\circ, 180^\circ\right\} \) ein. +\end{proof} \begin{figure} \centering -- cgit v1.2.1 From f33a109c77b9430ce39d2513ee48b4d820527922 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 09:26:23 +0200 Subject: Fix typo in Makefile.inc --- buch/papers/punktgruppen/Makefile.inc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/Makefile.inc b/buch/papers/punktgruppen/Makefile.inc index 3b49602..fbb073e 100644 --- a/buch/papers/punktgruppen/Makefile.inc +++ b/buch/papers/punktgruppen/Makefile.inc @@ -11,15 +11,15 @@ dependencies-punktgruppen = \ papers/punktgruppen/crystals.tex \ papers/punktgruppen/piezo.tex \ papers/punktgruppen/references.bib \ - paers/punktgruppen/tikz/atoms-grid-force.tex \ - paers/punktgruppen/tikz/atoms-grid-still.tex \ - paers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex \ - paers/punktgruppen/tikz/atoms-piezo-force-vertical.tex \ - paers/punktgruppen/tikz/atoms-piezo-still.tex \ - paers/punktgruppen/tikz/combine-symmetries.tex \ - paers/punktgruppen/tikz/lattice.tex \ - paers/punktgruppen/tikz/piezo-atoms.tex \ - paers/punktgruppen/tikz/piezo.tex \ - paers/punktgruppen/tikz/projections.tex \ - paers/punktgruppen/tikz/stereographic-projections.tex \ - paers/punktgruppen/tikz/symmetric-shapes.tex + papers/punktgruppen/tikz/atoms-grid-force.tex \ + papers/punktgruppen/tikz/atoms-grid-still.tex \ + papers/punktgruppen/tikz/atoms-piezo-force-horizontal.tex \ + papers/punktgruppen/tikz/atoms-piezo-force-vertical.tex \ + papers/punktgruppen/tikz/atoms-piezo-still.tex \ + papers/punktgruppen/tikz/combine-symmetries.tex \ + papers/punktgruppen/tikz/lattice.tex \ + papers/punktgruppen/tikz/piezo-atoms.tex \ + papers/punktgruppen/tikz/piezo.tex \ + papers/punktgruppen/tikz/projections.tex \ + papers/punktgruppen/tikz/stereographic-projections.tex \ + papers/punktgruppen/tikz/symmetric-shapes.tex -- cgit v1.2.1 From cb91b7005c8a886e05595d73710ee3dfa29fe193 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 10:37:52 +0200 Subject: Fix broken references --- buch/papers/punktgruppen/crystals.tex | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 5211b68..33e7b54 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -154,13 +154,9 @@ Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Un Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\) Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. -Dank Abschintt \ref{txt:punktgruppen: Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen. +Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen. Da das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. -Inzwischen wissen wir auch, dass \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da -\[ - 360^\circ/5 = 72^\circ -\] -was nach Abschnitt \ref{txt:punktgruppen: Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. +Inzwischen wissen wir auch, dass \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Wie zum Beispiel ein Inversionszentrum \footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} -- cgit v1.2.1 From 0d46748d5accdf9f2f176dc72c287cfcef7433f8 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 11:10:46 +0200 Subject: Update symmetry section --- buch/papers/punktgruppen/symmetry.tex | 117 ++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 47 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 6655864..dd8883e 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -26,22 +26,19 @@ ist das Konzept der Symmetrie eigentlich viel allgemeiner. \subsection{Geometrische Symmetrien} In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, -die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, an -deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. Regelmässige -Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete -Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um -einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert -lässt. Das letzte Beispiel auf der rechten Seite ist eine unendliche -Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für -\(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. - -% Vieleicht eine kurze Einführung in für die Definition, ich habe das gefühl, dass in der Definition die Symmetrie-Operation und die Gruppe auf einmal erklährt wird -\subsubsection{Symetriegruppe} -\texttt{TODO: review this paragraph, explain what is \(\mathds{1}\).} -Ein Objekt kann mehr als nur eine Symmetrie aufweisen. -Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} -nicht nur um $\sigma$ sondern auch Diagonal gespiegelt werden oder um $90^\circ$ gedreht werden. -Fässt man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. +die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, +an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. +Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine +diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine +Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur +unverändert lässt. Das letzte Beispiel auf der rechten Seite ist eine +unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele +Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. Ein +Objekt kann mehr als nur eine Symmetrie aufweisen. Als Beispiel, kann das +Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um +\(\sigma\) sondern auch Diagonal gespiegelt werden oder um \(90^\circ\) gedreht +werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine +Symmetriegruppe. \begin{definition}[Symmetriegruppe] Sei \(g\) eine umkehrbare Operation, die ein mathematisches Objekt @@ -51,7 +48,18 @@ Fässt man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. wird. \end{definition} % ich lese diese Definition ein wenig holprig, vieleicht können wir sie zusammen anschauen -% Nach meinem Geschmack könne es hier auch eine einleitung wie mein Beispiel geben dammit man den Text flüssiger lesen kann +Ausserdem benötigen wir zur Bildung einer Gruppe ein neutrales Element, das wir +mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist +gleichbedeutend damit, alles unverändert zu lassen. \(\mathds{1}\) ist auch +äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen +(ihre Umkehrung anzuwenden). +Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, +es wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass +manchmal die Zusammensetzung algebraisch durch eine Multiplikation berechnet +wird. Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige +Ausdrücke kompakter zu schreiben, z.B. durch Verwendung von Potenzen \(r^n = +r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. + \begin{definition}[Zyklische Untergruppe, Erzeuger] Sei \(g\) ein Element einer Symmetriegruppe \(G\). Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische @@ -59,18 +67,28 @@ Fässt man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet. \end{definition} +\begin{beispiel} + Um die Syntax zu verstehen, betrachten Sie eine durch \(a\) erzeugte Gruppe + \(G = \langle a \rangle\). Das bedeutet, dass \(G\) die Elemente \(a, aa, + aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales + Element \(\mathds{1} = aa^{-1}\) enthält. +\end{beispiel} +\begin{beispiel} + Nun zu einem sinnvolleren Beispiel, wir können das \(n\)-Gon Beispiel + formalisieren. Bezeichnen wir mit \(r\) eine Drehung im Gegenuhrzeigersinn + von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die + gesamte Symmetriegruppe + \[ + C_n = \langle r \rangle + = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} + \] + der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch + die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die + Rotationssymmetrie bewahrt. In ähnlicher Weise, aber weniger interessant die + Reflexionssymmetriegruppe \(\langle\sigma\rangle\) enthält nur + \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). +\end{beispiel} -Damit können wir das \(n\)-Gon Beispiel formalisieren. -Bezeichnen wir mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) -um einen Punkt. Diese Definition reicht aus, um die gesamte Symmetriegruppe -\[ - C_n = \langle r \rangle - = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} -\] -der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch die -mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die -Rotationssymmetrie bewahrt. Hier die Potenzen von \(r\) sind als wiederholte -Komposition gemeint, dass heisst \(r^n = r\circ r \circ \cdots r\circ r\). Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystemen komplexere Strukturen aufbauen. @@ -84,18 +102,24 @@ komplexere Strukturen aufbauen. in den Klammern angegeben. Die erzeugende Elementen zusammen mit der Definitionsgleichungen bauen ein Erzeugendensysteme. \end{definition} - -\texttt{TODO: should put examples for generators?} \\ - -Die Reflexionssymmetriegruppe ist nicht so interessant, da sie nur -\(\left\{\mathds{1}, \sigma\right\}\) enthält. Kombiniert man sie jedoch mit -der Rotation, erhält man die so genannte Diedergruppe -\[ - D_n = \langle r, \sigma : r^{n-1} = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle - = \left\{ - \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} - \right\}. -\] +\begin{beispiel} + Wir werden nun alle Symmetrien eines \(n\)-Gons beschreiben, was bedeutet, + dass wir die Operationen \(r\) und \(\sigma\) kombinieren. Die + Definitionsgleichungen sind \(r^n = \mathds{1}\), \(\sigma^2 = + \mathds{1}\) und \((\sigma r)^2 = \mathds{1}\). + Die ersten beiden sind ziemlich offensichtlich. Die letzte wird oft auch als + Inversion bezeichnet, weil die Anwendung von \(\sigma r\) dasselbe ist wie + das Ziehen einer Linie von einem Punkt, die durch den Ursprung geht, und das + Verschieben des Punktes auf die andere Seite des Nullpunkts. Wenn man das + zweimal macht, geht man zurück zum Anfangspunkt. + Daraus ergibt sich die so genannte Diedergruppe + \begin{align*} + D_n &= \langle r, \sigma : r^n = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle \\ + &= \left\{ + \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} + \right\}. + \end{align*} +\end{beispiel} Die Symmetrieoperationen, die wir bis jetzt besprochen haben, haben immer mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. Im @@ -105,16 +129,16 @@ Symmetrien gibt, die jeden Punkt zu einem anderen Punkt verschieben können. Diesen Spezialfall, bei dem mindestens ein Punkt unverändert bleibt, nennt man Punktsymmetrie. \begin{definition}[Punktgruppe] - Wenn jede Operation in einer Symmetriegruppe die Eigenschaft hat, mindestens - einen Punkt unverändert zu lassen, sagt man, dass die Symmetriegruppe eine - Punktgruppe ist. + Wenn es einen Punkt gibt, der von jeder Gruppenoperation unverändert gelassen + wird, sagt man, dass die Symmetriegruppe eine Punktgruppe ist. \end{definition} \subsection{Algebraische Symmetrien} Wir haben nun unseren Operationen Symbole gegeben, mit denen es tatsächlich -möglich ist, Gleichungen zu schreiben. Die naheliegende Frage ist dann, könnte -es sein, dass wir bereits etwas haben, das dasselbe tut? Natürlich, ja. -Um es formaler zu beschreiben, werden wir einige Begriffe einführen. +möglich ist, Gleichungen zu schreiben. Die folgende Frage ist dann, ob wir +bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die +sich auf die gleiche Weise verhalten. Die Antwort lautet natürlich ja. Um es +formaler zu beschreiben, werden wir einige Begriffe einführen. \begin{definition}[Gruppenhomomorphismus] Seien \(G\) und \(H\) Gruppe mit unterschiedlicher Operation \(\diamond\) bzw. \(\star\). Ein Homomorphismus\footnote{ Für eine ausführlichere @@ -154,7 +178,6 @@ Um es formaler zu beschreiben, werden wir einige Begriffe einführen. \circ r) = \Phi(r^2)\Phi(r)\). \end{beispiel} -\texttt{TODO: rewrite section on translational symmetry.} %% TODO: title / fix continuity % Um das Konzept zu illustrieren, werden wir den umgekehrten Fall diskutieren: % eine Symmetrie, die keine Punktsymmetrie ist, die aber in der Physik sehr -- cgit v1.2.1 From 9cf1c0416deac9e1f5043775a1b25f9a1f4de07c Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 11:15:33 +0200 Subject: Make crystal basis vector notation consistent with pictures --- buch/papers/punktgruppen/crystals.tex | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 33e7b54..0cea6ef 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -18,27 +18,25 @@ Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. \subsection{Kristallgitter} Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punktgruppen:lattice}. 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}\) und \(\vec{b}\) sind die kleinstmöglichen Schritte im Raum bis sich das Kristallgitter wiederholt. -Wird ein beliebiger grauer Gitterpunkt in \ref{fig:punktgruppen:lattice} gewählt und um eine ganzzahlige Linearkombination von \(\vec{a}\) und \(\vec{b}\) verschoben, endet er zwangsweise auf einem Gitterpunkt, wenn nicht wieder am selben Ort. +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 \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 \[ - \vec{r} = n_1 \vec{a} + n_2 \vec{b} + n_3 \vec{c} + \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i \] -erreicht werden sofern $\{n_1,n_2,n_3\} \in \mathbb{Z}$ sind. -Sind die Vektoren $\vec{a}$ , $\vec{b}$ , $\vec{c}$ gegeben, -ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. +erreicht werden sofern \(n_1,n_2,n_3 \in \mathbb{Z}\) sind. +Sind die Vektoren \(\vec{a}_1\), \(\vec{a}_2\), \(\vec{a}_3\) gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. -Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, -da die Umgebungen aller Punkte identisch sind. +Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, da die Umgebungen aller Punkte identisch sind. Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation \[ \vec{Q}_i(G) = G + \vec{a}_i \] wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination -der Vektoren $\vec{a}$ , $\vec{b}$ und $\vec{c}$ erlaubt sind oder kurz, um $\vec{r}$. +der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind oder kurz, um $\vec{r}$. Verschiebungen um $\vec{r}$ bewirken demnach keine Veränderungen, solange wir ein unendlich grosses Kristallgitter verschieben. -- cgit v1.2.1 From 7613cec184c17ed05460e991603529ebacf029c5 Mon Sep 17 00:00:00 2001 From: tim30b Date: Fri, 23 Jul 2021 13:19:38 +0200 Subject: Small rewrites in symmetry.txt and minor topos fixed --- buch/papers/punktgruppen/crystals.tex | 9 ++++--- buch/papers/punktgruppen/intro.tex | 8 +++--- buch/papers/punktgruppen/symmetry.tex | 47 +++++++++++++++++------------------ 3 files changed, 32 insertions(+), 32 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 0cea6ef..465c862 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -149,12 +149,13 @@ Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. -Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\) Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). +Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. -Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen. -Da das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. -Inzwischen wissen wir auch, dass \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. +Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, +Weol das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. +Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt +\ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Wie zum Beispiel ein Inversionszentrum \footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index d2e4644..b6a72b5 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -9,16 +9,16 @@ Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalles zu beschreiben. Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, was in der Welt der Kristallographie alles möglich ist oder nicht. -Die Einschränkungen sind durchaus willkommen, -dank ihnen halten sich die möglichen Kristallgitter in Grenzen -und lassen sich kategorisieren.%umformulieren +Einschränkungen in Kristallsymmetrien sind durchaus willkommen, +da dank ihnen sich die möglichen Kristallgitter in Grenzen halten +und sich kategorisieren lassen. Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, sie versteckt sich aber in diversen Altagsgegenständen zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. -Ein Funken Interesse ist hoffentlich geweckt +Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index dd8883e..07f2bc5 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -4,7 +4,7 @@ ursprünglichen griechischen Wort \(\mathrm{\Sigma\upsilon\mu\mu\varepsilon\tau\rho\iota\alpha}\) \footnote{\emph{Symmetr\'ia}: ein gemeinsames Mass habend, gleichmässig, verhältnismässig} fast nicht verändert. In der Alltagssprache mag es ein -locker definierter Begriff sein, aber in der Mathematik hat Symmetrie eine sehr +locker definierter Begriff sein, in der Mathematik hat Symmetrie jedoch eine sehr präzise Bedeutung. \begin{definition}[Symmetrie] Ein mathematisches Objekt wird als symmetrisch bezeichnet, wenn es unter einer @@ -27,43 +27,42 @@ ist das Konzept der Symmetrie eigentlich viel allgemeiner. In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, -an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. +an deren es gespiegelt(Operation) werden kann, ohne sein Aussehen zu verändern(invariant). %What do you think about the () Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine -Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur +Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele -Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. Ein -Objekt kann mehr als nur eine Symmetrie aufweisen. Als Beispiel, kann das +Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. +Ein Objekt kann mehr als nur eine Symmetrie aufweisen. Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch Diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - Sei \(g\) eine umkehrbare Operation, die ein mathematisches Objekt - unverändert lässt. Bei einer anderen Operation \(h\) definieren wir die - Komposition \(h\circ g\) als die Anwendung der Operationen nacheinander. Alle - Operationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt - wird. -\end{definition} % ich lese diese Definition ein wenig holprig, vieleicht können wir sie zusammen anschauen + \(g\) und \(h\) sein umkehrbare Operationen, die ein mathematisches Objekt + unverändert lassen. Die Komposition \(h\circ g\) definieren wir als die Anwendung + der Operationen nacheinander. Alle möglichen Operationen bilden unter Komposition eine Gruppe, + die Symmetriegruppe genannt wird. +\end{definition} % rewritten, make shore it works for you -Ausserdem benötigen wir zur Bildung einer Gruppe ein neutrales Element, das wir +Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. \(\mathds{1}\) ist auch äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen (ihre Umkehrung anzuwenden). Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, es wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass -manchmal die Zusammensetzung algebraisch durch eine Multiplikation berechnet +in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige Ausdrücke kompakter zu schreiben, z.B. durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. \begin{definition}[Zyklische Untergruppe, Erzeuger] - Sei \(g\) ein Element einer Symmetriegruppe \(G\). Alle möglichen + \(g\) sei ein Element einer Symmetriegruppe \(G\). Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische - Untergruppe von \(G\), und \(g\) wird ihr Erzeuger genannt. Die von \(g\) + Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird. Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet. \end{definition} @@ -74,8 +73,8 @@ r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. Element \(\mathds{1} = aa^{-1}\) enthält. \end{beispiel} \begin{beispiel} - Nun zu einem sinnvolleren Beispiel, wir können das \(n\)-Gon Beispiel - formalisieren. Bezeichnen wir mit \(r\) eine Drehung im Gegenuhrzeigersinn + Als anschaulicheres Beispiel, können wir eine Zyklische Untergruppe des \(n\)-Gon + formalisieren. Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die gesamte Symmetriegruppe \[ @@ -84,8 +83,8 @@ r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. \] der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die - Rotationssymmetrie bewahrt. In ähnlicher Weise, aber weniger interessant die - Reflexionssymmetriegruppe \(\langle\sigma\rangle\) enthält nur + Rotationssymmetrie bewahrt. In ähnlicher Weise, aber weniger interessant + enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). \end{beispiel} @@ -110,7 +109,7 @@ komplexere Strukturen aufbauen. Die ersten beiden sind ziemlich offensichtlich. Die letzte wird oft auch als Inversion bezeichnet, weil die Anwendung von \(\sigma r\) dasselbe ist wie das Ziehen einer Linie von einem Punkt, die durch den Ursprung geht, und das - Verschieben des Punktes auf die andere Seite des Nullpunkts. Wenn man das + Verschieben des Punktes auf die andere Seite des Nullpunkts. Wenn man dies zweimal macht, geht man zurück zum Anfangspunkt. Daraus ergibt sich die so genannte Diedergruppe \begin{align*} @@ -126,21 +125,21 @@ mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. Im Fall der Rotation war es der Drehpunkt, bei der Spiegelung die Punkte der Spiegelachse. Dies ist jedoch keine Voraussetzung für eine Symmetrie, da es Symmetrien gibt, die jeden Punkt zu einem anderen Punkt verschieben können. -Diesen Spezialfall, bei dem mindestens ein Punkt unverändert bleibt, nennt man +Diesen Spezialfall, bei dem immer mindestens ein Punkt unverändert bleibt, nennt man Punktsymmetrie. \begin{definition}[Punktgruppe] Wenn es einen Punkt gibt, der von jeder Gruppenoperation unverändert gelassen - wird, sagt man, dass die Symmetriegruppe eine Punktgruppe ist. + wird, ist die Symmetriegruppe eine Punktgruppe. \end{definition} \subsection{Algebraische Symmetrien} Wir haben nun unseren Operationen Symbole gegeben, mit denen es tatsächlich -möglich ist, Gleichungen zu schreiben. Die folgende Frage ist dann, ob wir +möglich ist, Gleichungen zu schreiben. Die anschliesende Frage ist dann, ob wir bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die sich auf die gleiche Weise verhalten. Die Antwort lautet natürlich ja. Um es formaler zu beschreiben, werden wir einige Begriffe einführen. \begin{definition}[Gruppenhomomorphismus] - Seien \(G\) und \(H\) Gruppe mit unterschiedlicher Operation \(\diamond\) + \(G\) und \(H\) seien Gruppen mit unterschiedlichen Operationen \(\diamond\) bzw. \(\star\). Ein Homomorphismus\footnote{ Für eine ausführlichere Diskussion siehe \S\ref{buch:grundlagen:subsection:gruppen} im Buch.} ist eine Funktion \(f: G \to H\), so dass für jedes \(a, b \in G\) gilt -- cgit v1.2.1 From 846a04a614a53cb8a5978057364b8b88d7a38e25 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 13:40:10 +0200 Subject: One sentence per line, small typos and fix footnotes Sorry for the fixed 72 chars. Tip! With Vim one can use vipJ and then :'<,'>s:\. :\.\r:g to do this *very* quickly. --- buch/papers/punktgruppen/crystals.tex | 50 +++---- buch/papers/punktgruppen/symmetry.tex | 246 +++++++++++++--------------------- 2 files changed, 112 insertions(+), 184 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 465c862..de3deda 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -79,8 +79,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. An der neuen Position \(B\) von \(A'\) muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. \item \(B\) ist unser Name für diesen neuen Punkt. Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir \(C_n\) auch auf \(A'\) anwenden. - Also wenden wir \(C_n\) invertiert - \footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. + Also wenden wir \(C_n\) invertiert\footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. Genauere Überlegungen hierzu werden dem Leser überlassen, da sich die Autoren nicht explizit mit dieser Frage Auseinander gesetzt haben.} auch auf \(A'\) an. Dies dreht \(A\) auf einen neuen Punkt. @@ -119,21 +118,20 @@ ein. \caption{ Stereografische Projektion einer \(C_{i}\) Symmetrie. Es wird eine Linie vom magentafarbenen Punkt auf der oberen Hälfte der Kugel zum Südpol gezogen. Wo die Linie die Ebene schneidet (\(z = 0\)), ist die Projektion des Punktes. - Die Koordinaten der Projektionen sind einfach zu berechnen: - ein Punkt auf eine Kugel mit Radius \(r\) mit den Koordinaten \(x, y, z,\) wird auf \(xr/(r + z), yr/(r + z)\) projiziert. + Die Koordinaten der Projektionen sind einfach zu berechnen: ein Punkt auf eine Kugel mit Radius \(r\) mit den Koordinaten \(x, y, z,\) wird auf \(xr/(r + z), yr/(r + z)\) projiziert. Für den orangefarbenen Punkt unterhalb des Äquators wird die Linie zum Nordpol gezogen und die Projektionsformel hat stattdessen einen Nenner von \(r - z\). } \label{fig:punktgruppen:stereographic-projections} \end{figure} \subsection{Kristallklassen} + Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. -Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum -nur auf genau 32 Arten rein punktsymmetrische -Symmetriegruppen bilden können. -Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. -Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. -Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion ermöglicht (siehe Abb. \ref{fig:punktgruppen:stereographic-projections}), wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. + Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum nur auf genau 32 Arten rein punktsymmetrische Symmetriegruppen bilden können. + Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. + Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. + Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion ermöglicht (siehe Abbildung \ref{fig:punktgruppen:stereographic-projections}), wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. + \begin{figure} \centering @@ -145,26 +143,18 @@ Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographi \subsubsection{Schönflies-Symbilok} Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schöönflies-Symbol bezeichnet. -Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, -welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. -Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. -Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. -Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). -Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. -Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. -Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, -Weol das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. -Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt -\ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. -Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. -Wie zum Beispiel ein Inversionszentrum -\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} -\(i\) oder eine horizontale -\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} -Spiegelachse \(h\). -Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. -\(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer -sechsfachen Drehspiegelsymmetrie entspricht. + Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. + Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. + Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. + Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). + Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. + Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. + Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, Weol das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. + Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. + Wie zum Beispiel ein Inversionszentrum\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} \(i\) oder eine horizontale\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} Spiegelachse \(h\). + Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. + \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 07f2bc5..0bb4aec 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -1,196 +1,134 @@ \section{Symmetrie} Das Wort Symmetrie ist sehr alt und hat sich seltsamerweise von seinem -ursprünglichen griechischen Wort -\(\mathrm{\Sigma\upsilon\mu\mu\varepsilon\tau\rho\iota\alpha}\) -\footnote{\emph{Symmetr\'ia}: ein gemeinsames Mass habend, gleichmässig, -verhältnismässig} fast nicht verändert. In der Alltagssprache mag es ein -locker definierter Begriff sein, in der Mathematik hat Symmetrie jedoch eine sehr -präzise Bedeutung. +ursprünglichen griechischen Wort \(\mathrm{\Sigma\upsilon\mu\mu\varepsilon\tau\rho\iota\alpha}\)\footnote{\emph{Symmetr\'ia}: ein gemeinsames Mass habend, gleichmässig,verhältnismässig} fast nicht verändert. +In der Alltagssprache mag es ein locker definierter Begriff sein, in der Mathematik hat Symmetrie jedoch eine sehr präzise Bedeutung. \begin{definition}[Symmetrie] - Ein mathematisches Objekt wird als symmetrisch bezeichnet, wenn es unter einer - bestimmten Operation invariant ist. + Ein mathematisches Objekt wird als symmetrisch bezeichnet, wenn es unter einer bestimmten Operation invariant ist. \end{definition} -Die intuitivsten Beispiele kommen aus der Geometrie, daher werden wir mit -einigen geometrischen Beispielen beginnen. Wie wir jedoch später sehen werden, -ist das Konzept der Symmetrie eigentlich viel allgemeiner. +Die intuitivsten Beispiele kommen aus der Geometrie, daher werden wir mit einigen geometrischen Beispielen beginnen. +Wie wir jedoch später sehen werden, ist das Konzept der Symmetrie eigentlich viel allgemeiner. \begin{figure} - \centering - \includegraphics{papers/punktgruppen/figures/symmetric-shapes} - \caption{ - Beispiele für geometrisch symmetrische Formen. - \label{fig:punktgruppen:geometry-example} - } + \centering + \includegraphics{papers/punktgruppen/figures/symmetric-shapes} + \caption{ + Beispiele für geometrisch symmetrische Formen. + \label{fig:punktgruppen:geometry-example} + } \end{figure} \subsection{Geometrische Symmetrien} -In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, -die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, -an deren es gespiegelt(Operation) werden kann, ohne sein Aussehen zu verändern(invariant). %What do you think about the () -Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine -diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine -Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur -unverändert lässt. Das letzte Beispiel auf der rechten Seite ist eine -unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele -Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. -Ein Objekt kann mehr als nur eine Symmetrie aufweisen. Als Beispiel, kann das -Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um -\(\sigma\) sondern auch Diagonal gespiegelt werden oder um \(90^\circ\) gedreht -werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine -Symmetriegruppe. +In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind. +Zum Beispiel hat das Quadrat eine Gerade, an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. +Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. +Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. +Ein Objekt kann mehr als nur eine Symmetrie aufweisen. +Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch Diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. +Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - \(g\) und \(h\) sein umkehrbare Operationen, die ein mathematisches Objekt - unverändert lassen. Die Komposition \(h\circ g\) definieren wir als die Anwendung - der Operationen nacheinander. Alle möglichen Operationen bilden unter Komposition eine Gruppe, - die Symmetriegruppe genannt wird. -\end{definition} % rewritten, make shore it works for you + \(g\) und \(h\) sein umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen. + Die Komposition \(h\circ g\) definieren wir als die Anwendung der Operationen nacheinander. + Alle möglichen Operationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt wird. +\end{definition} -Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir -mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist -gleichbedeutend damit, alles unverändert zu lassen. \(\mathds{1}\) ist auch -äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen -(ihre Umkehrung anzuwenden). -Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, -es wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass -in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet -wird. Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige -Ausdrücke kompakter zu schreiben, z.B. durch Verwendung von Potenzen \(r^n = -r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. +Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. +Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. +\(\mathds{1}\) ist auch äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen (ihre Inverse anzuwenden). + Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, es wird aber auch oft als Multiplikation geschrieben. +Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. +Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige Ausdrücke kompakter zu schreiben, z.B. +durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. \begin{definition}[Zyklische Untergruppe, Erzeuger] - \(g\) sei ein Element einer Symmetriegruppe \(G\). Alle möglichen - Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische - Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird. Die von \(g\) - erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} - \right\}\) wird mit spitzen Klammern bezeichnet. + \(g\) sei ein Element einer Symmetriegruppe \(G\). + Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird. + Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet. \end{definition} \begin{beispiel} - Um die Syntax zu verstehen, betrachten Sie eine durch \(a\) erzeugte Gruppe - \(G = \langle a \rangle\). Das bedeutet, dass \(G\) die Elemente \(a, aa, - aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales - Element \(\mathds{1} = aa^{-1}\) enthält. + Um die Syntax zu verstehen, betrachten wir eine durch \(a\) erzeugte Gruppe \(G = \langle a \rangle\). + Das bedeutet, dass \(G\) die Elemente \(a, aa, aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales Element \(\mathds{1} = aa^{-1}\) enthält. \end{beispiel} \begin{beispiel} - Als anschaulicheres Beispiel, können wir eine Zyklische Untergruppe des \(n\)-Gon - formalisieren. Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn - von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die - gesamte Symmetriegruppe - \[ - C_n = \langle r \rangle - = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} - \] - der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch - die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die - Rotationssymmetrie bewahrt. In ähnlicher Weise, aber weniger interessant - enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur - \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). + Als anschaulicheres Beispiel, können wir eine Zyklische Untergruppe des \(n\)-Gon formalisieren. + Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt. + Diese Definition reicht aus, um die gesamte Symmetriegruppe + \[ + C_n = \langle r \rangle + = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} + \] + der Drehungen eines \(n\)-Gons zu erzeugen. + Das liegt daran, dass wir durch die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die Rotationssymmetrie bewahrt. + In ähnlicher Weise, aber weniger interessant enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). \end{beispiel} Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystemen komplexere Strukturen aufbauen. \begin{definition}[Erzeugendensysteme] - % please fix this unreadable mess - Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert - werden. Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer - Symmetriegruppe sein. Da es mehrere Erzeuger gibt, müssen auch die - sogenannte Definitionsgleichungen gegeben werden, die die - Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls - in den Klammern angegeben. Die erzeugende Elementen zusammen mit der - Definitionsgleichungen bauen ein Erzeugendensysteme. + Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. + Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. + Da es mehrere Erzeuger gibt, müssen auch die sogenannte Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. + Die Gleichungen sind ebenfalls in den Klammern angegeben. + Die erzeugende Elementen zusammen mit der Definitionsgleichungen bauen ein Erzeugendensysteme. \end{definition} \begin{beispiel} - Wir werden nun alle Symmetrien eines \(n\)-Gons beschreiben, was bedeutet, - dass wir die Operationen \(r\) und \(\sigma\) kombinieren. Die - Definitionsgleichungen sind \(r^n = \mathds{1}\), \(\sigma^2 = - \mathds{1}\) und \((\sigma r)^2 = \mathds{1}\). - Die ersten beiden sind ziemlich offensichtlich. Die letzte wird oft auch als - Inversion bezeichnet, weil die Anwendung von \(\sigma r\) dasselbe ist wie - das Ziehen einer Linie von einem Punkt, die durch den Ursprung geht, und das - Verschieben des Punktes auf die andere Seite des Nullpunkts. Wenn man dies - zweimal macht, geht man zurück zum Anfangspunkt. - Daraus ergibt sich die so genannte Diedergruppe - \begin{align*} - D_n &= \langle r, \sigma : r^n = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle \\ - &= \left\{ - \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} - \right\}. - \end{align*} + Wir werden nun alle Symmetrien eines \(n\)-Gons beschreiben, was bedeutet, dass wir die Operationen \(r\) und \(\sigma\) kombinieren. + Die Definitionsgleichungen sind \(r^n = \mathds{1}\), \(\sigma^2 = \mathds{1}\) und \((\sigma r)^2 = \mathds{1}\). + Die ersten beiden sind ziemlich offensichtlich. + Die letzte wird oft auch als Inversion bezeichnet, weil die Anwendung von \(\sigma r\) dasselbe ist wie das Ziehen einer Linie von einem Punkt, die durch den Ursprung geht, und das Verschieben des Punktes auf die andere Seite des Nullpunkts. + Wenn man dies zweimal macht, geht man zurück zum Anfangspunkt. + Daraus ergibt sich die so genannte Diedergruppe + \begin{align*} + D_n &= \langle r, \sigma : r^n = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle \\ + &= \left\{ + \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} + \right\}. + \end{align*} \end{beispiel} -Die Symmetrieoperationen, die wir bis jetzt besprochen haben, haben immer -mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. Im -Fall der Rotation war es der Drehpunkt, bei der Spiegelung die Punkte der -Spiegelachse. Dies ist jedoch keine Voraussetzung für eine Symmetrie, da es -Symmetrien gibt, die jeden Punkt zu einem anderen Punkt verschieben können. -Diesen Spezialfall, bei dem immer mindestens ein Punkt unverändert bleibt, nennt man -Punktsymmetrie. +Die Symmetrieoperationen, die wir bis jetzt besprochen haben, haben immer mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. +Im Fall der Rotation war es der Drehpunkt, bei der Spiegelung die Punkte der Spiegelachse. +Dies ist jedoch keine Voraussetzung für eine Symmetrie, da es Symmetrien gibt, die jeden Punkt zu einem anderen Punkt verschieben können. + Diesen Spezialfall, bei dem immer mindestens ein Punkt unverändert bleibt, nennt man Punktsymmetrie. \begin{definition}[Punktgruppe] - Wenn es einen Punkt gibt, der von jeder Gruppenoperation unverändert gelassen - wird, ist die Symmetriegruppe eine Punktgruppe. + Wenn es einen Punkt gibt, der von jeder Gruppenoperation unverändert gelassen wird, ist die Symmetriegruppe eine Punktgruppe. \end{definition} \subsection{Algebraische Symmetrien} -Wir haben nun unseren Operationen Symbole gegeben, mit denen es tatsächlich -möglich ist, Gleichungen zu schreiben. Die anschliesende Frage ist dann, ob wir -bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die -sich auf die gleiche Weise verhalten. Die Antwort lautet natürlich ja. Um es -formaler zu beschreiben, werden wir einige Begriffe einführen. +Wir haben nun unseren Operationen Symbole gegeben, mit denen es tatsächlich möglich ist, Gleichungen zu schreiben. +Die anschliesende Frage ist dann, ob wir bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die sich auf die gleiche Weise verhalten. +Die Antwort lautet natürlich ja. +Um es formaler zu beschreiben, werden wir einige Begriffe einführen. \begin{definition}[Gruppenhomomorphismus] - \(G\) und \(H\) seien Gruppen mit unterschiedlichen Operationen \(\diamond\) - bzw. \(\star\). Ein Homomorphismus\footnote{ Für eine ausführlichere - Diskussion siehe \S\ref{buch:grundlagen:subsection:gruppen} im Buch.} ist - eine Funktion \(f: G \to H\), so dass für jedes \(a, b \in G\) gilt - \(f(a\diamond b) = f(a) \star f(b)\). Man sagt, dass der Homomorphismus - \(f\) \(G\) in \(H\) transformiert. + \(G\) und \(H\) seien Gruppen mit unterschiedlichen Operationen \(\diamond\) bzw. + \(\star\). + Ein Homomorphismus\footnote{ Für eine ausführlichere Diskussion siehe \S\ref{buch:grundlagen:subsection:gruppen} im Buch.} ist eine Funktion \(f: G \to H\), so dass für jedes \(a, b \in G\) gilt \(f(a\diamond b) = f(a) \star f(b)\). + Man sagt, dass der Homomorphismus \(f\) \(G\) in \(H\) transformiert. \end{definition} \begin{beispiel} - Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen - Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht perfekt dem - komplexen Einheitskreis. Der Homomorphismus \(\phi: C_\infty \to \mathbb{C}\) - ist durch die Eulersche Formel \(\phi(r) = e^{i\alpha}\) gegeben. + Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht perfekt dem komplexen Einheitskreis. + Der Homomorphismus \(\phi: C_\infty \to \mathbb{C}\) ist durch die Eulersche Formel \(\phi(r) = e^{i\alpha}\) gegeben. \end{beispiel} \begin{definition}[Darstellung einer Gruppe] - Die Darstellung einer Gruppe ist ein Homomorphismus, der eine Symmetriegruppe - auf eine Menge von Matrizen abbildet. - \[ - \Phi: G \to \operatorname{GL}_n(\mathbb{R}). - \] - Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen - Vektorraum \(V\) wirkt, indem man definiert \(\Phi : G \times V \to V\). + Die Darstellung einer Gruppe ist ein Homomorphismus, der eine Symmetriegruppe auf eine Menge von Matrizen abbildet. + \[ + \Phi: G \to \operatorname{GL}_n(\mathbb{R}). + \] + Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen Vektorraum \(V\) wirkt, indem man definiert \(\Phi : G \times V \to V\). \end{definition} \begin{beispiel} - Die Elemente \(r^k \in C_n\), wobei \(0 < k < n\), stellen abstrakt eine - Drehung von \(2\pi k/n\) um den Ursprung dar. Die mit der Matrix - \[ - \Phi(r^k) = \begin{pmatrix} - \cos(2\pi k/n) & -\sin(2\pi k/n) \\ - \sin(2\pi k/n) & \cos(2\pi k/n) - \end{pmatrix} - \] - definierte Funktion von \(C_n\) nach \(O(2)\) ist eine Darstellung von - \(C_n\). In diesem Fall ist die erste Gruppenoperation die Komposition und - die zweite die Matrixmultiplikation. Man kann überprüfen, dass \(\Phi(r^2 - \circ r) = \Phi(r^2)\Phi(r)\). + Die Elemente \(r^k \in C_n\), wobei \(0 < k < n\), stellen abstrakt eine Drehung von \(2\pi k/n\) um den Ursprung dar. + Die mit der Matrix + \[ + \Phi(r^k) = \begin{pmatrix} + \cos(2\pi k/n) & -\sin(2\pi k/n) \\ + \sin(2\pi k/n) & \cos(2\pi k/n) + \end{pmatrix} + \] + definierte Funktion von \(C_n\) nach \(O(2)\) ist eine Darstellung von \(C_n\). + In diesem Fall ist die erste Gruppenoperation die Komposition und die zweite die Matrixmultiplikation. + Man kann überprüfen, dass \(\Phi(r^2 \circ r) = \Phi(r^2)\Phi(r)\). \end{beispiel} - -%% TODO: title / fix continuity -% Um das Konzept zu illustrieren, werden wir den umgekehrten Fall diskutieren: -% eine Symmetrie, die keine Punktsymmetrie ist, die aber in der Physik sehr -% nützlich ist, nämlich die Translationssymmetrie. Von einem mathematischen -% Objekt \(U\) wird gesagt, dass es eine Translationssymmetrie \(Q(x) = x + a\) -% hat, wenn es die Gleichung -% \[ -% U(x) = U(Q(x)) = U(x + a), -% \] -% für ein gewisses \(a\), erfüllt. Zum Beispiel besagt das erste Newtonsche -% Gesetz, dass ein Objekt, auf das keine Kraft einwirkt, eine -% zeitranslationsinvariante Geschwindigkeit hat, d.h. wenn \(\vec{F} = \vec{0}\) -% dann \(\vec{v}(t) = \vec{v}(t + \tau)\). - -% \subsection{Sch\"onflies notation} - -% vim:ts=2 sw=2 spell spelllang=de: -- cgit v1.2.1 From 67c134a41c5b47b926d0b5e461892dd267f36b5a Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 23 Jul 2021 18:07:14 +0200 Subject: Fix typo --- buch/papers/punktgruppen/crystals.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index de3deda..21e29c9 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -149,7 +149,7 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkass Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. - Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, Weol das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. + Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Wie zum Beispiel ein Inversionszentrum\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} \(i\) oder eine horizontale\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} Spiegelachse \(h\). -- cgit v1.2.1 From cecdcdb230662af594ce68715c61f1263bff9ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 26 Jul 2021 07:57:58 +0200 Subject: add munkres files --- .../papers/munkres/figures/Netzwerkdarstellung.png | Bin 0 -> 307876 bytes buch/papers/munkres/figures/beispiel_munkres.png | Bin 0 -> 245951 bytes buch/papers/munkres/figures/bipartiter_graph.png | Bin 0 -> 246867 bytes buch/papers/munkres/main.tex | 26 +---- buch/papers/munkres/teil0.tex | 27 +++-- buch/papers/munkres/teil1.tex | 62 +++-------- buch/papers/munkres/teil2.tex | 110 ++++++++++++------ buch/papers/munkres/teil3.tex | 124 ++++++++++++++++----- buch/papers/munkres/teil4.tex | 36 ++++++ buch/papers/munkres/teil5.tex | 14 +++ 10 files changed, 255 insertions(+), 144 deletions(-) create mode 100644 buch/papers/munkres/figures/Netzwerkdarstellung.png create mode 100644 buch/papers/munkres/figures/beispiel_munkres.png create mode 100644 buch/papers/munkres/figures/bipartiter_graph.png create mode 100644 buch/papers/munkres/teil4.tex create mode 100644 buch/papers/munkres/teil5.tex (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/Netzwerkdarstellung.png b/buch/papers/munkres/figures/Netzwerkdarstellung.png new file mode 100644 index 0000000..6c20bf4 Binary files /dev/null and b/buch/papers/munkres/figures/Netzwerkdarstellung.png differ diff --git a/buch/papers/munkres/figures/beispiel_munkres.png b/buch/papers/munkres/figures/beispiel_munkres.png new file mode 100644 index 0000000..2303708 Binary files /dev/null and b/buch/papers/munkres/figures/beispiel_munkres.png differ diff --git a/buch/papers/munkres/figures/bipartiter_graph.png b/buch/papers/munkres/figures/bipartiter_graph.png new file mode 100644 index 0000000..87c164c Binary files /dev/null and b/buch/papers/munkres/figures/bipartiter_graph.png differ diff --git a/buch/papers/munkres/main.tex b/buch/papers/munkres/main.tex index 4dd20fa..8915a3d 100644 --- a/buch/papers/munkres/main.tex +++ b/buch/papers/munkres/main.tex @@ -3,34 +3,18 @@ % % (c) 2020 Hochschule Rapperswil % -\chapter{Thema\label{chapter:munkres}} -\lhead{Thema} +\chapter{Munkres-Algorithmus\label{chapter:munkres}} +\lhead{Munkres-Algorithmus} \begin{refsection} -\chapterauthor{Hans Muster} +\chapterauthor{Marc Kühne} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} \input{papers/munkres/teil0.tex} \input{papers/munkres/teil1.tex} \input{papers/munkres/teil2.tex} \input{papers/munkres/teil3.tex} +\input{papers/munkres/teil4.tex} +\input{papers/munkres/teil5.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/munkres/teil0.tex b/buch/papers/munkres/teil0.tex index de522c7..1ef0538 100644 --- a/buch/papers/munkres/teil0.tex +++ b/buch/papers/munkres/teil0.tex @@ -3,20 +3,19 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 0\label{munkres:section:teil0}} -\rhead{Teil 0} -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua \cite{munkres:bibtex}. -At vero eos et accusam et justo duo dolores et ea rebum. -Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum -dolor sit amet. +\section{Geschichte\label{munkres:section:teil0}} +\rhead{Geschichte} +Die Ungarische Methode wurde 1955 von Harold Kuhn entwickelt und veröffentlicht. +Der Name ``Ungarische Methode'' ergab sich, weil der Algorithmus +weitestgehend auf den früheren Arbeiten zweier ungarischer Mathematiker +basierte: Dénes Kőnig und Jenő Egerváry. +James Munkres überprüfte den Algorithmus im Jahr 1957 und stellte fest, +dass der Algorithmus (stark) polynomiell ist. +Seitdem ist der Algorithmus auch als Kuhn-Munkres oder +Munkres-Zuordnungsalgorithmus bekannt. +Die Zeitkomplexität des ursprünglichen Algorithmus war $O(n^4)$, +später wurde zudem festgestellt, dass er modifiziert werden kann, +um eine $O(n^3)$-Laufzeit zu erreichen. -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua. -At vero eos et accusam et justo duo dolores et ea rebum. Stet clita -kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit -amet. diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index f4f5e39..7cbbbfd 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -3,53 +3,19 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 1 +\section{Was ist die ungarische Methode? \label{munkres:section:teil1}} \rhead{Problemstellung} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. -Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit -aut fugit, sed quia consequuntur magni dolores eos qui ratione -voluptatem sequi nesciunt -\begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{munkres:equation1} -\end{equation} -Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, -consectetur, adipisci velit, sed quia non numquam eius modi tempora -incidunt ut labore et dolore magnam aliquam quaerat voluptatem. - -Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis -suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? -Quis autem vel eum iure reprehenderit qui in ea voluptate velit -esse quam nihil molestiae consequatur, vel illum qui dolorem eum -fugiat quo voluptas nulla pariatur? - -\subsection{De finibus bonorum et malorum -\label{munkres:subsection:finibus}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. - -Et harum quidem rerum facilis est et expedita distinctio -\ref{munkres:section:loesung}. -Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil -impedit quo minus id quod maxime placeat facere possimus, omnis -voluptas assumenda est, omnis dolor repellendus -\ref{munkres:section:folgerung}. -Temporibus autem quibusdam et aut officiis debitis aut rerum -necessitatibus saepe eveniet ut et voluptates repudiandae sint et -molestiae non recusandae. -Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis -voluptatibus maiores alias consequatur aut perferendis doloribus -asperiores repellat. - - +Es ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem +in polynomieller Zeit löst. +\begin{itemize} +\item +Polynom = vielgliedrig +\end{itemize} +Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms +wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. +Mit der ungarischen Methode können also lineare Optimierungsprobleme gelöst +werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. +Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so +optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der +Gesamtgewinn maximiert werden kann. diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index 23536b9..29db8d7 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -3,38 +3,86 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 2 +\section{Das Zuordnungsproblem \label{munkres:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum +\rhead{Das Zuordnungsproblem} +Das (lineare) Zuordnungsproblem ist ein diskretes Optimierungsproblem aus +der Graphentheorie. +Es handelt sich um einen Spezialfall eines maximalen Matchings +minimalen Gewichtes in einem bipartiten, gewichteten Graphen + +Vereinfacht gesagt sind Zuordnungsprobleme spezielle Transportprobleme. +Der Unterschied zu klassischen Transportproblemen liegen darin, +dass hier nicht Mengen möglichst kostenminimal von einem zum anderen +Ort transportiert werden sollen, sondern es geht um die kostenminimale +Zuordnung von z.~B.~Personen, oder Bau-Materialien auf bestimmte +Orte, Stellen oder Aufgaben. +Dabei sind alle Angebots- und Bedarfsmenge gleich 1 +\begin{equation} +a_{i}=b_{j}=1 +\end{equation} + +\subsection{Zuordnungsproblem in Netzwerkdarstellung +\label{munkres:subsection:bonorum}} + +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung} +\caption{Typische Netzwerkdarstellung eines Zuordnungsproblems.} +\label{munkres:Vr2} +\end{figure} + +\subsection{Matrix Formulierung +\label{munkres:subsection:bonorum}} +In der Matrixformulierung ist eine nicht-negative $n\times n$-Matrix +gegeben, wobei das Element in der $i$-ten Zeile und $j$-ten Spalte +die Kosten für die Zuweisung des $j$-ten Jobs an den $i$-ten Arbeiter +darstellt. +Wir müssen eine Zuordnung der Jobs zu den Arbeitern finden, so dass +jeder Job einem Arbeiter zugewiesen wird und jeder Arbeiter einen +Job zugewiesen bekommt, so dass die Gesamtkosten der Zuordnung +minimal sind. +Dies kann als Permutation der Zeilen und Spalten einer Kostenmatrix +$C$ ausgedrückt werden, um die Spur einer Matrix zu minimieren: +\begin{equation} +\min(L,R)Tr (LCR) +\end{equation} +wobei $L$ und $R$ Permutationsmatrizen sind. +Wenn das Ziel ist, die Zuordnung zu finden, die die maximalen Kosten +ergibt, kann das Problem durch Negieren der Kostenmatrix $C$ gelöst +werden. + +\subsection{Suche der optimalen Lösung +\label{munkres:subsection:bonorum}} +Ist eine maximale Zuordnung (maximales Matching) gefunden, so steht +in jeder Zeile und jeder Spalte der Matrix genau ein Element, das +zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird +auch als Transversale der Matrix bezeichnet. +Deshalb kann die Problemstellung auch anders formuliert werden: Man +ordne die Zeilen- oder die Spaltenvektoren so um, dass die Summe +der Elemente in der Hauptdiagonale maximal wird. +Hieraus wird sofort ersichtlich, dass es in einer +$n\times n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- +bzw.~Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen +gibt, also $n!$. +Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale +Lösung durch Berechnung aller Möglichkeiten zu finden. +Schon bei einer $10\times 10$-Matrix gibt es nahezu 3,63 Millionen (3.628.800) +zu berücksichtigender Permutationen. + +\subsection{Formulierung Bipartiter Graph \label{munkres:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +Der Algorithmus ist einfacher zu beschreiben, wenn wir das Problem +anhand eines bipartiten Graphen formulieren. +Wir haben einen vollständigen zweistufigen Graphen $G=(S,T;E)$ mit +$n$ Arbeiter-Eckpunkten ($S$) und $n$ Job-Scheitelpunkte ($T$), und +jede Kante hat einen nichtnegativen Preis $c(i,j)$. +Wir wollen ein perfektes Matching mit minimalen Gesamtkosten finden. +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/bipartiter_graph} +\caption{$K_{3,3}$ vollständig bipartiter Graph mit 3 Knoten pro Teilmenge.} +\label{munkres:Vr2} +\end{figure} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index b67ad74..806cd83 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -3,38 +3,102 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 3 +\section{Der Algorithmus in Form von bipartiten Graphen \label{munkres:section:teil3}} -\rhead{Teil 3} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? +\rhead{Der Algorithmus in Form von bipartiten Graphen} +Mit der ungarischen Methode können also lineare Optimierungsprobleme +gelöst werden, die bei gewichteten Zuordnungen in bipartiten Graphen +entstehen. -\subsection{De finibus bonorum et malorum +Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen +so optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der +Gesamtgewinn maximiert werden kann. + +Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen +zwischen den Elementen zweier Mengen. +Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen» + +\subsection{Beweis, dass der Algorithmus Fortschritte macht +\label{munkres:subsection:malorum}} +Wir müssen zeigen, dass der Algorithmus, solange das Matching nicht +die maximal mögliche Größe hat, immer in der Lage ist, Fortschritte +zu machen --- das heißt, entweder die Anzahl der übereinstimmenden +Kanten zu erhöhen oder mindestens eine Kante zu straffen. +Es genügt zu zeigen, dass bei jedem Schritt mindestens eine der +folgenden Bedingungen erfüllt ist: + +\begin{itemize} +\item +$M$ die maximal mögliche Größe. +\item +$Gy$ enthält einen Erweiterungspfad. +\item +$G$ enthält einen losen Pfad: einen Pfad von einem Knoten in $Rs$ +zu einem Knoten in $T$ / $Z$ die aus einer beliebigen Anzahl von +festen Kanten, gefolgt von einer einzelnen losen Kante, besteht. +Die freie Kante einer freien Bahn ist also $Z$ (beinhaltet $T$), +so garantiert es, dass Delta gut definiert ist. +\end{itemize} +Wenn $M$ die maximal mögliche Größe hat, sind wir natürlich fertig. +Andernfalls muss es nach Berges Lemma im zugrundeliegenden Graphen +$G$ einen Augmentierungspfad $P$ in Bezug auf $M$ geben. +Dieser Pfad darf jedoch nicht in $G_y$ existieren: Obwohl jede +geradzahlige Kante in $P$ durch die Definition von $M$ fest ist, +können ungeradzahlige Kanten lose sein und in $G_y$ fehlen. +Ein Endpunkt von $P$ liegt in $R_{S}$, der andere in $R_T$; w.l.o.g., +nehmen Sie an, es beginnt in $R_{S}$. +Wenn jede Kante von $P$ dicht ist, dann bleibt sie ein augmentierender +Pfad in $G_y$ und wir sind fertig. +Andernfalls sei $uv$ die erste lose Kante auf $P$. +Wenn $v$ kein Element von $Z$ ist, dann haben wir einen losen Pfad +gefunden und sind fertig. +Andernfalls ist $v$ von irgendeinem anderen Pfad $Q$ aus festen +Kanten von einem Knoten in $R_{S}$ erreichbar. +Sei $P_{v}$ der Teilpfad von $P$, der bei $v$ beginnt und bis zum +Ende reicht, und sei $P'$ der Pfad, der gebildet wird, indem man +entlang $Q$ gebildet wird, bis ein Scheitelpunkt auf $P_{v}$ erreicht +wird, und dann weiter bis zum Ende von $P_{v}$. +Beachten Sie, dass $P'$ ein erweiternder Pfad in $G$ mit mindestens +einer losen Kante weniger als $P$ ist. +$P$ kann durch $P'$ ersetzt und dieser Argumentationsprozess iteriert +werden (formal, unter Verwendung von Induktion auf die Anzahl der +losen Kanten), bis entweder ein erweiternder Pfad in $G_y$ oder ein +losender Pfad in $G$ gefunden wird. + +\subsection{Beweis, dass die Anpassung des Potentials $y$ $M$ unverändert lässt \label{munkres:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +Um zu zeigen, dass jede Kante in $M$ nach der Anpassung von $y$ +erhalten bleibt, genügt es zu zeigen, dass für eine beliebige Kante +in $M$ entweder beide Endpunkte oder keiner von ihnen in $Z$ liegen. +Zu diesem Zweck sei $vu$ eine Kante in $M$ von $T$ nach $S$. +Es ist leicht zu sehen, dass wenn $v$ in $Z$ ist, dann muss auch +$u$ in $Z$ sein, da jede Kante in $M$ dicht ist. +Nehmen wir nun an, dass $u$ kein Element von $Z$ und auch $v$ kein +Element von $Z$ ist. +$u$ selbst kann nicht in $R_{S}$ sein, da es der Endpunkt einer +angepassten Kante ist, also muss es einen gerichteten Pfad von engen +Kanten von einem Knoten in $R_{S}$ zu $u$ geben. +Dieser Pfad muss $v$ vermeiden, da es per Annahme nicht in $Z$ ist, +also ist der Knoten, der $u$ in diesem Pfad unmittelbar vorausgeht, +ein anderer Knoten $v$ (ein Element von $T$) und $v$ ein Element +von $u$ ist eine enge Kante von $T$ nach $S$ und ist somit in $M$. +Aber dann enthält $M$ zwei Kanten, die den Knoten $u$ teilen, was +der Tatsache widerspricht, dass $M$ ein Matching ist. +Jede Kante in $M$ hat also entweder beide Endpunkte oder keinen +Endpunkt in $Z$. +\subsection{Beweis, dass $y$ ein Potential bleibt +\label{munkres:subsection:malorum}} +Um zu zeigen, dass y nach der Anpassung ein Potenzial bleibt, genügt +es zu zeigen, dass keine Kante ihr Gesamtpotenzial über ihre Kosten +hinaus erhöht. +Dies ist für Kanten in $M$ bereits durch den vorangegangenen Absatz +bewiesen. +Man betrachtet also eine beliebige Kante $uv$ von $S$ nach $T$. +Wenn $y(u)$ erhöht wird um $\Delta$, dann wird entweder $v\in +\mathbb{Z}_n$ in diesem Fall wird $y(v)$ verringert um $\Delta$, +wobei das Gesamtpotenzial der Kante unverändert bleibt, oder $v\in +T\setminus Z$, wobei die Definition von $\Delta$ garantiert, dass +$y(u)+y(v)+\Delta \le c(u,v)$ +Also $y$ bleibt ein Potential. diff --git a/buch/papers/munkres/teil4.tex b/buch/papers/munkres/teil4.tex new file mode 100644 index 0000000..3d76743 --- /dev/null +++ b/buch/papers/munkres/teil4.tex @@ -0,0 +1,36 @@ +% +% teil4.tex -- Beispiel-File für Teil 4 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Matrix-Interpretation +\label{munkres:section:teil4}} +\rhead{Matrix-Interpretation} +Gegeben ist die quadratische Matrix $C=(c_{ij})$ der Grösse $n\times n$. +Ohne Beschränkung der Allgemeinheit werden eine Zuordnung $j +\rightarrow s_j$, $j = 1, \dots, n$ mit minimaler Gesamtsumme +$\sum_{j=1}^{n}c_{s_j,j}$ gesucht, wobei die $s_j$ eine Permutation +von $\{1,\ldots ,n\}$ sind. +Soll die Summe maximiert werden, dann kann $C$ durch $-C$ ersetzt werden. +Die Grundlage dieses Verfahrens ist, dass sich die optimale Zuordnung +unter bestimmten Änderungen der Matrix nicht ändert, sondern nur +der Optimalwert. +Diese Änderungen sind durch Knotenpotentiale bzw.~duale Variablen +\begin{equation} +u_1 u_2,{\dots}, u_n +\end{equation} + +für die Zeilen und + +\begin{equation}v_1,v_2,\dots,v_n \end{equation} fuer die Spalten angegeben. +Die modifizierte Matrix hat dann die Komponenten $\tilde{c}_{i,j} += c_{ij} - u_j - v_j$. + +In der Summe über jede kantenmaximale Zuordnung kommt jedes +Knotenpotential genau einmal vor, so dass die Änderung der Zielfunktion +eine Konstante ist. +Sind die Einträge von $C$ nichtnegativ, und sind alle Knotenpotentiale +ebenfalls nichtnegativ, so nennt man die modifizierte Matrix \~{C} +auch eine Reduktion. +Ziel ist, in der reduzierten Matrix möglichst viele Komponenten auf +den Wert Null zu bringen und unter diesen die Zuordnung zu konstruieren. diff --git a/buch/papers/munkres/teil5.tex b/buch/papers/munkres/teil5.tex new file mode 100644 index 0000000..f8138f4 --- /dev/null +++ b/buch/papers/munkres/teil5.tex @@ -0,0 +1,14 @@ +% +% teil5.tex -- Beispiel-File für Teil 5 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Ungarische Methode anhand eines Beispiels +\label{munkres:section:teil5}} +\rhead{Ungarische Methode anhand eines Beispiels} +\begin{figure} +\centering +\includegraphics[width=14cm]{papers/munkres/figures/beispiel_munkres} +\caption{Händisches Beispiel des Munkres Algorithmus.} +\label{munkres:Vr2} +\end{figure} -- cgit v1.2.1 From f12bfc8392b2f09416fb2171a4dd0107ebe16722 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 26 Jul 2021 14:17:05 +0200 Subject: update some files too --- buch/papers/reedsolomon/Makefile | 50 ++++++++++- buch/papers/reedsolomon/dtf.tex | 29 ++++--- buch/papers/reedsolomon/einleitung.tex | 10 +-- buch/papers/reedsolomon/experiments/plot.tex | 2 +- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 0 -> 60217 bytes buch/papers/reedsolomon/figures/polynom2.pdf | Bin 0 -> 20327 bytes buch/papers/reedsolomon/idee.tex | 13 ++- buch/papers/reedsolomon/images/codiert.txt | 96 --------------------- buch/papers/reedsolomon/images/decodiert.txt | 96 --------------------- buch/papers/reedsolomon/images/empfangen.txt | 96 --------------------- buch/papers/reedsolomon/images/fehler.txt | 96 --------------------- buch/papers/reedsolomon/images/locator.txt | 96 --------------------- buch/papers/reedsolomon/images/plotfft.tex | 89 ------------------- buch/papers/reedsolomon/images/polynom2.tex | 49 ----------- buch/papers/reedsolomon/images/signal.txt | 96 --------------------- buch/papers/reedsolomon/images/syndrom.txt | 96 --------------------- buch/papers/reedsolomon/main.tex | 20 ----- buch/papers/reedsolomon/standalone.tex | 30 +++++++ buch/papers/reedsolomon/standalone/standalone.pdf | Bin 0 -> 1782700 bytes buch/papers/reedsolomon/tikz/codiert.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/decodiert.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/empfangen.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/fehler.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/locator.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/plotfft.tex | 99 ++++++++++++++++++++++ buch/papers/reedsolomon/tikz/polynom2.tex | 57 +++++++++++++ buch/papers/reedsolomon/tikz/signal.txt | 96 +++++++++++++++++++++ buch/papers/reedsolomon/tikz/syndrom.txt | 96 +++++++++++++++++++++ 28 files changed, 939 insertions(+), 853 deletions(-) create mode 100644 buch/papers/reedsolomon/figures/plotfft.pdf create mode 100644 buch/papers/reedsolomon/figures/polynom2.pdf delete mode 100644 buch/papers/reedsolomon/images/codiert.txt delete mode 100644 buch/papers/reedsolomon/images/decodiert.txt delete mode 100644 buch/papers/reedsolomon/images/empfangen.txt delete mode 100644 buch/papers/reedsolomon/images/fehler.txt delete mode 100644 buch/papers/reedsolomon/images/locator.txt delete mode 100644 buch/papers/reedsolomon/images/plotfft.tex delete mode 100644 buch/papers/reedsolomon/images/polynom2.tex delete mode 100644 buch/papers/reedsolomon/images/signal.txt delete mode 100644 buch/papers/reedsolomon/images/syndrom.txt create mode 100644 buch/papers/reedsolomon/standalone.tex create mode 100644 buch/papers/reedsolomon/standalone/standalone.pdf create mode 100644 buch/papers/reedsolomon/tikz/codiert.txt create mode 100644 buch/papers/reedsolomon/tikz/decodiert.txt create mode 100644 buch/papers/reedsolomon/tikz/empfangen.txt create mode 100644 buch/papers/reedsolomon/tikz/fehler.txt create mode 100644 buch/papers/reedsolomon/tikz/locator.txt create mode 100644 buch/papers/reedsolomon/tikz/plotfft.tex create mode 100644 buch/papers/reedsolomon/tikz/polynom2.tex create mode 100644 buch/papers/reedsolomon/tikz/signal.txt create mode 100644 buch/papers/reedsolomon/tikz/syndrom.txt (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/Makefile b/buch/papers/reedsolomon/Makefile index 9c96e88..25fd98b 100644 --- a/buch/papers/reedsolomon/Makefile +++ b/buch/papers/reedsolomon/Makefile @@ -4,6 +4,52 @@ # (c) 2020 Prof Dr Andreas Mueller # -images: - @echo "no images to be created in reedsolomon" +SOURCES := \ + anwendungen.tex \ + codebsp.tex \ + decmitfehler.tex \ + decohnefehler.tex \ + dtf.tex \ + einleitung.tex \ + endlichekoerper.tex \ + hilfstabellen.tex \ + idee.tex \ + main.tex \ + packages.tex \ + rekonstruktion.tex \ + restetabelle1.tex \ + restetabelle2.tex \ + standalone.tex \ + zusammenfassung.tex + +TIKZFIGURES := \ + tikz/polynom2.tex \ + tikz/plotfft.tex + +FIGURES := $(patsubst tikz/%.tex, figures/%.pdf, $(TIKZFIGURES)) + + +all: images standalone + + +.PHONY: images +images: $(FIGURES) + +figures/%.pdf: tikz/%.tex + mkdir -p figures + pdflatex --output-directory=figures $< + +.PHONY: standalone +standalone: standalone.tex $(SOURCES) $(FIGURES) + mkdir -p standalone + cd ../..; \ + pdflatex \ + --halt-on-error \ + --shell-escape \ + --output-directory=papers/reedsolomon/standalone \ + papers/reedsolomon/standalone.tex; + cd standalone; \ + bibtex standalone; \ + makeindex standalone; + diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index a111527..62e44cc 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -14,20 +14,27 @@ wobei sie dann bei späteren Berchnungen ganz nützlich ist. \subsection{Diskrete Fourientransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} Die Diskrete Fourientransformation ist definiert als - \[ - \label{ft_discrete} +\begin{equation} \hat{c}_{k} = \frac{1}{N} \sum_{n=0}^{N-1} {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} - \] + \label{reedsolomon:DFT} +\end{equation} + , wenn man nun - \[ - w = e^{-\frac{2\pi j}{N} k} - \] +\begin{equation} + w = + e^{-\frac{2\pi j}{N} k} + \label{reedsolomon:DFT_summand} +\end{equation} + ersetzte, und $N$ konstantbleibt, erhält man - \[ - \hat{c}_{k}=\frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) - \] +\begin{equation} + \hat{c}_{k}= + \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) + \label{reedsolomon:DFT_polynom} +\end{equation} + was überaust ähnlich zu unserem Polynomidee ist. \subsection{Übertragungsabfolge \label{reedsolomon:subsection:Übertragungsabfolge}} @@ -47,8 +54,8 @@ Das heisst alle information ist in alle Zahlenvorhanden. \begin{figure} \centering \resizebox{0.9\textwidth}{!}{ - %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/plot.pdf} - \input{papers/reedsolomon/images/plotfft.tex} + \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} + %\input{papers/reedsolomon/images/plotfft.tex} } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index 2b1d878..074df05 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -7,13 +7,11 @@ \label{reedsolomon:section:einleitung}} \rhead{Einleitung} Der Reed-Solomon-Code ist entstanden um, -das Problem der Fehler, bei der Datenübertragung, zu lösen. -In diesem Abschnitt wird möglichst verständlich die mathematische Abfolge, Funktion oder Algorithmus erklärt. +das Problem der Fehler bei der Datenübertragung, zu lösen. +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. -Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden, -und so jeweilige Fehler zu erkennen. -Doch nur schon um weinige Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet. -Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. + diff --git a/buch/papers/reedsolomon/experiments/plot.tex b/buch/papers/reedsolomon/experiments/plot.tex index 2196c82..4b156bb 100644 --- a/buch/papers/reedsolomon/experiments/plot.tex +++ b/buch/papers/reedsolomon/experiments/plot.tex @@ -90,7 +90,7 @@ \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); %item - \node[circle, draw, fill =lightgray] at (signal.north west)+(1,0) {1}; + \node[circle, draw, fill =lightgray] at (signal.north west) {1}; \node[circle, draw, fill =lightgray] at (codiert.north west) {2}; \node[circle, draw, fill =lightgray] at (fehler.north west) {3}; \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf new file mode 100644 index 0000000..27992c9 Binary files /dev/null and b/buch/papers/reedsolomon/figures/plotfft.pdf differ diff --git a/buch/papers/reedsolomon/figures/polynom2.pdf b/buch/papers/reedsolomon/figures/polynom2.pdf new file mode 100644 index 0000000..ae68385 Binary files /dev/null and b/buch/papers/reedsolomon/figures/polynom2.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 39adbbf..e18ccd2 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -1,15 +1,22 @@ % -% teil1.tex -- Beispiel-File für das Paper +% idee.tex -- Beispiel-File für das Paper % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % \section{Idee \label{reedsolomon:section:idee}} \rhead{Problemstellung} +Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden, +und so jeweilige Fehler zu erkennen. +Doch nur schon um Fehler zu erkennen werden überproportional viele Daten doppelt und dreifach gesendet. +Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen. Beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, man kann sogar einige Fehler korrigieren. +Der unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage kommt hat es Fehler oder keine, +beim korrigieren muss man den Fehler erkennun und dann zusätzlich noch den original Wert rekonstruieren. +Auch eine variante wäre es die Daten nach einem Fehler einfach nochmals zu senden, was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvolll ist. \ref(reedsolomon:section:anwendung) \rhead{Polynom-Ansatz} Eine Idee ist aus den Daten @@ -48,8 +55,8 @@ Dafür sind mehr übertragene Werte nötig. \begin{figure} \centering - %\includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/polynom2} - \input{papers/reedsolomon/images/polynom2.tex} + \includegraphics[width=\textwidth]{papers/reedsolomon/figures/polynom2} + %\input{papers/reedsolomon/images/polynom2.tex} \caption{Polynom $p(x)$ \eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} diff --git a/buch/papers/reedsolomon/images/codiert.txt b/buch/papers/reedsolomon/images/codiert.txt deleted file mode 100644 index 4a481d8..0000000 --- a/buch/papers/reedsolomon/images/codiert.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,284 -1,131.570790435043 -2,41.9840308053375 -3,12.1189172092243 -4,23.8408857476069 -5,69.1793197789512 -6,24.0186013379153 -7,37.3066577242559 -8,18.2010889773887 -9,12.3214904922455 -10,15.6627133315015 -11,24.5237955316204 -12,32.1114345314062 -13,44.9845039238714 -14,13.5324640263625 -15,10.1736266929292 -16,4.58257569495584 -17,23.217268502288 -18,16.5769107917917 -19,6.89948680823017 -20,4.84567134895776 -21,10.4219666223433 -22,43.6179140616243 -23,35.9073375743642 -24,15.0332963783729 -25,21.7594021268945 -26,23.2496572716993 -27,17.9815599423852 -28,11.3577742151117 -29,38.467599433197 -30,28.3035029562577 -31,9.54321919833388 -32,21.377558326432 -33,17.6292439561917 -34,12.6951848921471 -35,20.0667752354841 -36,22.9097309529208 -37,8.78894645948548 -38,13.360682005498 -39,25.1757616314718 -40,38.0357773686457 -41,18.4633287776253 -42,19.0584505869806 -43,10.8631093309173 -44,12.6147770818983 -45,12.5398140021274 -46,34.901983501949 -47,22.3480442021702 -48,6 -49,22.3480442021702 -50,34.901983501949 -51,12.5398140021274 -52,12.6147770818983 -53,10.8631093309173 -54,19.0584505869806 -55,18.4633287776253 -56,38.0357773686457 -57,25.1757616314718 -58,13.360682005498 -59,8.78894645948548 -60,22.9097309529208 -61,20.0667752354841 -62,12.6951848921471 -63,17.6292439561917 -64,21.377558326432 -65,9.54321919833388 -66,28.3035029562577 -67,38.467599433197 -68,11.3577742151117 -69,17.9815599423852 -70,23.2496572716993 -71,21.7594021268945 -72,15.0332963783729 -73,35.9073375743642 -74,43.6179140616243 -75,10.4219666223433 -76,4.84567134895776 -77,6.89948680823017 -78,16.5769107917917 -79,23.217268502288 -80,4.58257569495584 -81,10.1736266929292 -82,13.5324640263625 -83,44.9845039238714 -84,32.1114345314062 -85,24.5237955316204 -86,15.6627133315015 -87,12.3214904922455 -88,18.2010889773887 -89,37.3066577242559 -90,24.0186013379153 -91,69.1793197789512 -92,23.8408857476069 -93,12.1189172092243 -94,41.9840308053375 -95,131.570790435043 diff --git a/buch/papers/reedsolomon/images/decodiert.txt b/buch/papers/reedsolomon/images/decodiert.txt deleted file mode 100644 index f6221e6..0000000 --- a/buch/papers/reedsolomon/images/decodiert.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,6.05208333333333 -1,6.02602539785853 -2,0.0261327016093151 -3,5.98927158561317 -4,4.019445724874 -5,0.0247005083663722 -6,4.97798278395618 -7,1.95246440445439 -8,0.974000110512201 -9,2.00528527696027 -10,1.00071804528155 -11,1.97630907888264 -12,0.0232923747656228 -13,6.01302820392331 -14,3.03567381915226 -15,5.02435590137329 -16,7.00526061008995 -17,5.00739608089369 -18,5.02211514480064 -19,4.02175864806658 -20,1.00236543833726 -21,4.98147315261261 -22,8.97728828610336 -23,8.98481304394618 -24,2.98958333333333 -25,1.98491220960989 -26,5.97728835934715 -27,5.98144124907561 -28,4.00163839998525 -29,2.02176249296313 -30,9.02210713874162 -31,1.00742763919872 -32,1.00557258081044 -33,1.02435888848794 -34,2.03577412756745 -35,6.01302820392331 -36,5.97917574041123 -37,0.976310374034338 -38,9.00062625447998 -39,7.00515849238528 -40,6.97396416790894 -41,0.95256880864368 -42,8.97794719866783 -43,9.01850701506487 -44,10.0194409579917 -45,8.98926601525997 -46,7.9866590265379 -47,5.02603060999077 -48,2.05208333333333 -49,4.02603841132848 -50,0.986882897867895 -51,0.0177592928994285 -52,9.01944131204563 -53,3.0185365665612 -54,2.97803642439316 -55,2.95243072164649 -56,4.97396651395488 -57,6.00516695947321 -58,0.0143895905726619 -59,7.97630812771393 -60,5.97917574041123 -61,9.01298821331865 -62,3.03567381915226 -63,4.02435609145793 -64,0.0275599094902563 -65,0.0115837187254191 -66,0.025877761014238 -67,0.0224618032819697 -68,0.04410594689944 -69,0.0474504002669341 -70,0.0227694695500626 -71,0.0271436638090525 -72,0.0104166666666667 -73,0.0271436638090523 -74,0.0227694695500608 -75,0.0474504002669343 -76,0.0441059468994397 -77,0.0224618032819701 -78,0.0258777610142379 -79,0.0115837187254183 -80,0.027559909490256 -81,0.0245124379481793 -82,0.0499782237195209 -83,0.0401432022864265 -84,0.0232923747656228 -85,0.0237974288564099 -86,0.0143895905726624 -87,0.0271745729691685 -88,0.0275599094902567 -89,0.0515501672184983 -90,0.0358255004834542 -91,0.024700508366373 -92,0.0210194725405171 -93,0.0177592928994296 -94,0.0261327016093158 -95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/images/empfangen.txt b/buch/papers/reedsolomon/images/empfangen.txt deleted file mode 100644 index 38c13b0..0000000 --- a/buch/papers/reedsolomon/images/empfangen.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,284 -1,131.570790435043 -2,41.9840308053375 -3,12.1189172092243 -4,23.8408857476069 -5,69.1793197789512 -6,23.6290258699579 -7,37.3066577242559 -8,18.2010889773887 -9,12.3214904922455 -10,15.6627133315015 -11,24.5237955316204 -12,32.1114345314062 -13,44.9845039238714 -14,13.5324640263625 -15,10.1736266929292 -16,4.58257569495584 -17,23.217268502288 -18,16.5769107917917 -19,6.89948680823017 -20,5.55320238736303 -21,10.4219666223433 -22,43.6179140616243 -23,35.9073375743642 -24,15.0332963783729 -25,21.7594021268945 -26,23.2496572716993 -27,17.9815599423852 -28,11.3577742151117 -29,38.467599433197 -30,28.3035029562577 -31,9.54321919833388 -32,21.377558326432 -33,17.6292439561917 -34,12.6951848921471 -35,20.0667752354841 -36,22.9097309529208 -37,8.78894645948548 -38,13.360682005498 -39,25.1757616314718 -40,38.0357773686457 -41,18.4633287776253 -42,19.0584505869806 -43,10.8631093309173 -44,12.6147770818983 -45,12.5398140021274 -46,34.901983501949 -47,22.3480442021702 -48,6 -49,22.3480442021702 -50,34.901983501949 -51,12.5398140021274 -52,12.6147770818983 -53,10.8631093309173 -54,19.0584505869806 -55,18.4633287776253 -56,38.0357773686457 -57,25.1757616314718 -58,13.360682005498 -59,8.78894645948548 -60,22.9097309529208 -61,20.0667752354841 -62,12.6951848921471 -63,17.6292439561917 -64,21.377558326432 -65,9.54321919833388 -66,28.3035029562577 -67,38.467599433197 -68,11.3577742151117 -69,17.9815599423852 -70,23.2496572716993 -71,21.7594021268945 -72,15.0332963783729 -73,35.9073375743642 -74,44.6135417384784 -75,10.4219666223433 -76,4.84567134895776 -77,6.89948680823017 -78,16.5769107917917 -79,23.217268502288 -80,4.58257569495584 -81,10.1736266929292 -82,13.5324640263625 -83,44.9845039238714 -84,32.1114345314062 -85,24.5237955316204 -86,15.6627133315015 -87,12.3214904922455 -88,18.2010889773887 -89,37.3066577242559 -90,24.0186013379153 -91,69.1793197789512 -92,23.8408857476069 -93,12.1189172092243 -94,41.9840308053375 -95,131.570790435043 diff --git a/buch/papers/reedsolomon/images/fehler.txt b/buch/papers/reedsolomon/images/fehler.txt deleted file mode 100644 index 23f1a83..0000000 --- a/buch/papers/reedsolomon/images/fehler.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0 -1,0 -2,0 -3,0 -4,0 -5,0 -6,2 -7,0 -8,0 -9,0 -10,0 -11,0 -12,0 -13,0 -14,0 -15,0 -16,0 -17,0 -18,0 -19,0 -20,2 -21,0 -22,0 -23,0 -24,0 -25,0 -26,0 -27,0 -28,0 -29,0 -30,0 -31,0 -32,0 -33,0 -34,0 -35,0 -36,0 -37,0 -38,0 -39,0 -40,0 -41,0 -42,0 -43,0 -44,0 -45,0 -46,0 -47,0 -48,0 -49,0 -50,0 -51,0 -52,0 -53,0 -54,0 -55,0 -56,0 -57,0 -58,0 -59,0 -60,0 -61,0 -62,0 -63,0 -64,0 -65,0 -66,0 -67,0 -68,0 -69,0 -70,0 -71,0 -72,0 -73,0 -74,1 -75,0 -76,0 -77,0 -78,0 -79,0 -80,0 -81,0 -82,0 -83,0 -84,0 -85,0 -86,0 -87,0 -88,0 -89,0 -90,0 -91,0 -92,0 -93,0 -94,0 -95,0 diff --git a/buch/papers/reedsolomon/images/locator.txt b/buch/papers/reedsolomon/images/locator.txt deleted file mode 100644 index b28988c..0000000 --- a/buch/papers/reedsolomon/images/locator.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0.0301224340567056 -1,0.141653026854885 -2,0.138226631799377 -3,0.0339903276086929 -4,0.310585462557496 -5,0.551427312631385 -6,0.628514858396814 -7,0.51102386251559 -8,0.275861355940449 -9,0.0502396354182268 -10,0.090185502547573 -11,0.110759344849756 -12,0.0684618905063001 -13,0.0362855426992259 -14,0.0697096919781468 -15,0.109288539370248 -16,0.0923187999496653 -17,0.0512198536768088 -18,0.274192386987782 -19,0.51349614953654 -20,0.633154426602466 -21,0.553283743533942 -22,0.307840573214514 -23,0.0341664350328392 -24,0.140270857957 -25,0.138527177682831 -26,0.029637547736156 -27,0.0816962563186052 -28,0.0944383203811073 -29,0.0263932110686261 -30,0.0585881348402056 -31,0.0737117341599984 -32,0.0239973937701886 -33,0.0464215468420038 -34,0.0616218854220964 -35,0.0221963086695009 -36,0.0390764778127646 -37,0.0537637218396934 -38,0.0208333333333332 -39,0.0343107696069045 -40,0.0483441215964552 -41,0.0198077862118806 -42,0.0311207395968725 -43,0.0444955089373458 -44,0.0190533549944159 -45,0.0290049795038723 -46,0.0417536642697558 -47,0.0185261550443084 -48,0.0277059929762261 -49,0.0398606084144816 -50,0.0181978813094817 -51,0.0271098219177584 -52,0.0386836665079729 -53,0.0180518611046889 -54,0.0272138992557141 -55,0.0381891287148314 -56,0.0180809085252469 -57,0.0281418959420061 -58,0.0384596362516637 -59,0.0182864418432272 -60,0.0302250788423173 -61,0.0397874837986351 -62,0.0186786556701694 -63,0.0342489348284216 -64,0.0429932815348666 -65,0.0192777878591759 -66,0.0422808966931999 -67,0.0506815964680563 -68,0.0201167847752226 -69,0.0615048274405271 -70,0.0744953894508454 -71,0.021246054596492 -72,0.142602265816215 -73,0.273502052865436 -74,0.325309673287599 -75,0.272705389655349 -76,0.149074257381345 -77,0.0247199397628712 -78,0.0680137859566976 -79,0.075388270873485 -80,0.0273637831604903 -81,0.0407867704453274 -82,0.0632964886441949 -83,0.0309749128751093 -84,0.0315202035072035 -85,0.0627625211892184 -86,0.0360843918243497 -87,0.02794920551495 -88,0.0677921493367236 -89,0.0437167157553067 -90,0.0270640150996317 -91,0.0783380025231622 -92,0.0561293738314281 -93,0.0278742033265809 -94,0.0981443889498639 -95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/images/plotfft.tex b/buch/papers/reedsolomon/images/plotfft.tex deleted file mode 100644 index 83a89eb..0000000 --- a/buch/papers/reedsolomon/images/plotfft.tex +++ /dev/null @@ -1,89 +0,0 @@ -% -% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT -% -\begin{tikzpicture}[] - -%--------------------------------------------------------------- - %Knote -\matrix[draw = none, column sep=25mm, row sep=2mm]{ - \node(signal) [] { - \begin{tikzpicture} - \begin{axis} - [title = {\Large {Signal}}, - xlabel={Anzahl Übertragene Zahlen}, - xtick={0,20,40,64,80,98},] - \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/signal.txt}; - \end{axis} - \end{tikzpicture}}; & - - \node(codiert) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Codiert}}] - \addplot[] table[col sep=comma] {papers/reedsolomon/images/codiert.txt}; - \end{axis} - \end{tikzpicture}}; \\ - - &\node(fehler) [] { - \begin{tikzpicture} - \begin{axis}[scale=0.6, title = {\Large {Fehler}}, - xtick={7,21,75}] - \addplot[red] table[col sep=comma] {papers/reedsolomon/images/fehler.txt}; - \end{axis} - \end{tikzpicture}};\\ - - \node(decodiert) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Decodiert}}] - \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/decodiert.txt}; - \end{axis} - \end{tikzpicture}}; & - - \node(empfangen) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Empfangen}}] - \addplot[] table[col sep=comma] {papers/reedsolomon/images/empfangen.txt}; - \end{axis} - \end{tikzpicture}};\\ - - \node(syndrom) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Syndrom}}] - \addplot[blue] table[col sep=comma] {papers/reedsolomon/images/syndrom.txt}; - \end{axis} - \end{tikzpicture}}; & - - \node(locator) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Locator}}] - \addplot[] table[col sep=comma] {papers/reedsolomon/images/locator.txt}; - \end{axis} - \end{tikzpicture}};\\ -}; -%------------------------------------------------------------- - %FFT & IFFT deskription - -\draw[thin,gray,dashed] (0,12) to (0,-12); -\node(IFFT) [scale=0.7] at (0,12.3) {IFFT}; -\draw[<-](IFFT.south west)--(IFFT.south east); -\node(FFT) [scale=0.7, above of=IFFT] {FFT}; -\draw[->](FFT.north west)--(FFT.north east); - -\draw[thick, ->,] (fehler.west)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); -%Arrows -\draw[ultra thick, ->] (signal.east) to (codiert.west); -\draw[ultra thick, ->] (codiert.south) to (fehler.north); -\draw[ultra thick, ->] (fehler.south) to (empfangen.north); -\draw[ultra thick, ->] (empfangen.west) to (decodiert.east); -\draw[ultra thick, ->] (syndrom.east) to (locator.west); -\draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; -\draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); - -%item -\node[circle, draw, fill =lightgray] at (signal.north west) {1}; -\node[circle, draw, fill =lightgray] at (codiert.north west) {2}; -\node[circle, draw, fill =lightgray] at (fehler.north west) {3}; -\node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; -\node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; -\node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; -\node[circle, draw, fill =lightgray] at (locator.north west) {7}; -\end{tikzpicture} \ No newline at end of file diff --git a/buch/papers/reedsolomon/images/polynom2.tex b/buch/papers/reedsolomon/images/polynom2.tex deleted file mode 100644 index 288b51c..0000000 --- a/buch/papers/reedsolomon/images/polynom2.tex +++ /dev/null @@ -1,49 +0,0 @@ -% polynome -%------------------- -% Teiler für das Skalieren der Grafik /40 -\newcommand{\teiler}{40} - - -%////////////////////////////////////// - -\begin{tikzpicture}[>=latex,thick] - \draw[color=blue, line width=1.4pt] - plot[domain=0:8, samples=100] - ({\x},{(2*\x^2+1*\x+5)/\teiler}); - - \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; - \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; - - \def\punkt#1{ - \fill[color=green] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; - } - - \def\hellpunkt#1{ - \fill[color=lightgray] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; - } - - \punkt{(1,8/\teiler)} - \hellpunkt{(2,15/\teiler)} - \hellpunkt{(3,26/\teiler)} - \punkt{(4,41/\teiler)} - \punkt{(5,60/\teiler)} - \punkt{(6,83/\teiler)} - \punkt{(7,110/\teiler)} - - \draw[color=gray,line width=1pt,dashed] - plot[domain=0.5:7, samples=100] - ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); - - \def\erpunkt#1{ - \fill[color=red] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; - } - \erpunkt{(2,50/\teiler)} - \erpunkt{(3,37.66/\teiler)} - - \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; - \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; -\end{tikzpicture} -%\end{document} diff --git a/buch/papers/reedsolomon/images/signal.txt b/buch/papers/reedsolomon/images/signal.txt deleted file mode 100644 index c4fa5f8..0000000 --- a/buch/papers/reedsolomon/images/signal.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,6 -1,6 -2,0 -3,6 -4,4 -5,0 -6,5 -7,2 -8,1 -9,2 -10,1 -11,2 -12,0 -13,6 -14,3 -15,5 -16,7 -17,5 -18,5 -19,4 -20,1 -21,5 -22,9 -23,9 -24,3 -25,2 -26,6 -27,6 -28,4 -29,2 -30,9 -31,1 -32,1 -33,1 -34,2 -35,6 -36,6 -37,1 -38,9 -39,7 -40,7 -41,1 -42,9 -43,9 -44,10 -45,9 -46,8 -47,5 -48,2 -49,4 -50,1 -51,0 -52,9 -53,3 -54,3 -55,3 -56,5 -57,6 -58,0 -59,8 -60,6 -61,9 -62,3 -63,4 -64,0 -65,0 -66,0 -67,0 -68,0 -69,0 -70,0 -71,0 -72,0 -73,0 -74,0 -75,0 -76,0 -77,0 -78,0 -79,0 -80,0 -81,0 -82,0 -83,0 -84,0 -85,0 -86,0 -87,0 -88,0 -89,0 -90,0 -91,0 -92,0 -93,0 -94,0 -95,0 diff --git a/buch/papers/reedsolomon/images/syndrom.txt b/buch/papers/reedsolomon/images/syndrom.txt deleted file mode 100644 index 8ca9eed..0000000 --- a/buch/papers/reedsolomon/images/syndrom.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0 -1,0 -2,0 -3,0 -4,0 -5,0 -6,0 -7,0 -8,0 -9,0 -10,0 -11,0 -12,0 -13,0 -14,0 -15,0 -16,0 -17,0 -18,0 -19,0 -20,0 -21,0 -22,0 -23,0 -24,0 -25,0 -26,0 -27,0 -28,0 -29,0 -30,0 -31,0 -32,0 -33,0 -34,0 -35,0 -36,0 -37,0 -38,0 -39,0 -40,0 -41,0 -42,0 -43,0 -44,0 -45,0 -46,0 -47,0 -48,0 -49,0 -50,0 -51,0 -52,0 -53,0 -54,0 -55,0 -56,0 -57,0 -58,0 -59,0 -60,0 -61,0 -62,0 -63,0 -64,0.0275599094902563 -65,0.0115837187254191 -66,0.025877761014238 -67,0.0224618032819697 -68,0.04410594689944 -69,0.0474504002669341 -70,0.0227694695500626 -71,0.0271436638090525 -72,0.0104166666666667 -73,0.0271436638090523 -74,0.0227694695500608 -75,0.0474504002669343 -76,0.0441059468994397 -77,0.0224618032819701 -78,0.0258777610142379 -79,0.0115837187254183 -80,0.027559909490256 -81,0.0245124379481793 -82,0.0499782237195209 -83,0.0401432022864265 -84,0.0232923747656228 -85,0.0237974288564099 -86,0.0143895905726624 -87,0.0271745729691685 -88,0.0275599094902567 -89,0.0515501672184983 -90,0.0358255004834542 -91,0.024700508366373 -92,0.0210194725405171 -93,0.0177592928994296 -94,0.0261327016093158 -95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/main.tex b/buch/papers/reedsolomon/main.tex index e68b947..327d01a 100644 --- a/buch/papers/reedsolomon/main.tex +++ b/buch/papers/reedsolomon/main.tex @@ -8,29 +8,9 @@ \begin{refsection} \chapterauthor{Joshua Bär und Michael Steiner} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} - % Joshua \input{papers/reedsolomon/einleitung.tex} \input{papers/reedsolomon/idee.tex} -%\input{papers/reedsolomon/teil2.tex} \input{papers/reedsolomon/dtf.tex} % Michael diff --git a/buch/papers/reedsolomon/standalone.tex b/buch/papers/reedsolomon/standalone.tex new file mode 100644 index 0000000..c850d1f --- /dev/null +++ b/buch/papers/reedsolomon/standalone.tex @@ -0,0 +1,30 @@ +\documentclass{book} + +\input{common/packages.tex} + +% additional packages used by the individual papers, add a line for +% each paper +\input{papers/common/addpackages.tex} + +% workaround for biblatex bug +\makeatletter +\def\blx@maxline{77} +\makeatother +\addbibresource{chapters/references.bib} + +% Bibresources for each article +\input{papers/common/addbibresources.tex} + +% make sure the last index starts on an odd page +\AtEndDocument{\clearpage\ifodd\value{page}\else\null\clearpage\fi} +\makeindex + +%\pgfplotsset{compat=1.12} +\setlength{\headheight}{15pt} % fix headheight warning +\DeclareGraphicsRule{*}{mps}{*}{} + +\begin{document} + \input{common/macros.tex} + \def\chapterauthor#1{{\large #1}\bigskip\bigskip} + \input{papers/reedsolomon/main.tex} +\end{document} diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf new file mode 100644 index 0000000..80af280 Binary files /dev/null and b/buch/papers/reedsolomon/standalone/standalone.pdf differ diff --git a/buch/papers/reedsolomon/tikz/codiert.txt b/buch/papers/reedsolomon/tikz/codiert.txt new file mode 100644 index 0000000..4a481d8 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/codiert.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,24.0186013379153 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,4.84567134895776 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,43.6179140616243 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/tikz/decodiert.txt b/buch/papers/reedsolomon/tikz/decodiert.txt new file mode 100644 index 0000000..f6221e6 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/decodiert.txt @@ -0,0 +1,96 @@ +0,6.05208333333333 +1,6.02602539785853 +2,0.0261327016093151 +3,5.98927158561317 +4,4.019445724874 +5,0.0247005083663722 +6,4.97798278395618 +7,1.95246440445439 +8,0.974000110512201 +9,2.00528527696027 +10,1.00071804528155 +11,1.97630907888264 +12,0.0232923747656228 +13,6.01302820392331 +14,3.03567381915226 +15,5.02435590137329 +16,7.00526061008995 +17,5.00739608089369 +18,5.02211514480064 +19,4.02175864806658 +20,1.00236543833726 +21,4.98147315261261 +22,8.97728828610336 +23,8.98481304394618 +24,2.98958333333333 +25,1.98491220960989 +26,5.97728835934715 +27,5.98144124907561 +28,4.00163839998525 +29,2.02176249296313 +30,9.02210713874162 +31,1.00742763919872 +32,1.00557258081044 +33,1.02435888848794 +34,2.03577412756745 +35,6.01302820392331 +36,5.97917574041123 +37,0.976310374034338 +38,9.00062625447998 +39,7.00515849238528 +40,6.97396416790894 +41,0.95256880864368 +42,8.97794719866783 +43,9.01850701506487 +44,10.0194409579917 +45,8.98926601525997 +46,7.9866590265379 +47,5.02603060999077 +48,2.05208333333333 +49,4.02603841132848 +50,0.986882897867895 +51,0.0177592928994285 +52,9.01944131204563 +53,3.0185365665612 +54,2.97803642439316 +55,2.95243072164649 +56,4.97396651395488 +57,6.00516695947321 +58,0.0143895905726619 +59,7.97630812771393 +60,5.97917574041123 +61,9.01298821331865 +62,3.03567381915226 +63,4.02435609145793 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/tikz/empfangen.txt b/buch/papers/reedsolomon/tikz/empfangen.txt new file mode 100644 index 0000000..38c13b0 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/empfangen.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,23.6290258699579 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,5.55320238736303 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,44.6135417384784 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/tikz/fehler.txt b/buch/papers/reedsolomon/tikz/fehler.txt new file mode 100644 index 0000000..23f1a83 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/fehler.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,2 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,2 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,1 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/tikz/locator.txt b/buch/papers/reedsolomon/tikz/locator.txt new file mode 100644 index 0000000..b28988c --- /dev/null +++ b/buch/papers/reedsolomon/tikz/locator.txt @@ -0,0 +1,96 @@ +0,0.0301224340567056 +1,0.141653026854885 +2,0.138226631799377 +3,0.0339903276086929 +4,0.310585462557496 +5,0.551427312631385 +6,0.628514858396814 +7,0.51102386251559 +8,0.275861355940449 +9,0.0502396354182268 +10,0.090185502547573 +11,0.110759344849756 +12,0.0684618905063001 +13,0.0362855426992259 +14,0.0697096919781468 +15,0.109288539370248 +16,0.0923187999496653 +17,0.0512198536768088 +18,0.274192386987782 +19,0.51349614953654 +20,0.633154426602466 +21,0.553283743533942 +22,0.307840573214514 +23,0.0341664350328392 +24,0.140270857957 +25,0.138527177682831 +26,0.029637547736156 +27,0.0816962563186052 +28,0.0944383203811073 +29,0.0263932110686261 +30,0.0585881348402056 +31,0.0737117341599984 +32,0.0239973937701886 +33,0.0464215468420038 +34,0.0616218854220964 +35,0.0221963086695009 +36,0.0390764778127646 +37,0.0537637218396934 +38,0.0208333333333332 +39,0.0343107696069045 +40,0.0483441215964552 +41,0.0198077862118806 +42,0.0311207395968725 +43,0.0444955089373458 +44,0.0190533549944159 +45,0.0290049795038723 +46,0.0417536642697558 +47,0.0185261550443084 +48,0.0277059929762261 +49,0.0398606084144816 +50,0.0181978813094817 +51,0.0271098219177584 +52,0.0386836665079729 +53,0.0180518611046889 +54,0.0272138992557141 +55,0.0381891287148314 +56,0.0180809085252469 +57,0.0281418959420061 +58,0.0384596362516637 +59,0.0182864418432272 +60,0.0302250788423173 +61,0.0397874837986351 +62,0.0186786556701694 +63,0.0342489348284216 +64,0.0429932815348666 +65,0.0192777878591759 +66,0.0422808966931999 +67,0.0506815964680563 +68,0.0201167847752226 +69,0.0615048274405271 +70,0.0744953894508454 +71,0.021246054596492 +72,0.142602265816215 +73,0.273502052865436 +74,0.325309673287599 +75,0.272705389655349 +76,0.149074257381345 +77,0.0247199397628712 +78,0.0680137859566976 +79,0.075388270873485 +80,0.0273637831604903 +81,0.0407867704453274 +82,0.0632964886441949 +83,0.0309749128751093 +84,0.0315202035072035 +85,0.0627625211892184 +86,0.0360843918243497 +87,0.02794920551495 +88,0.0677921493367236 +89,0.0437167157553067 +90,0.0270640150996317 +91,0.0783380025231622 +92,0.0561293738314281 +93,0.0278742033265809 +94,0.0981443889498639 +95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex new file mode 100644 index 0000000..3036e14 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -0,0 +1,99 @@ +% +% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{pgfplots} +\usepackage{pgfplotstable} +\usepackage{csvsimple} +\usepackage{filecontents} + + +\begin{document} +\begin{tikzpicture}[] + + %--------------------------------------------------------------- + %Knote + \matrix[draw = none, column sep=25mm, row sep=2mm]{ + \node(signal) [] { + \begin{tikzpicture} + \begin{axis} + [title = {\Large {Signal}}, + xtick={0,20,40,64,80,98},] + \addplot[blue] table[col sep=comma] {tikz/signal.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(codiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Codiert}}] + \addplot[] table[col sep=comma] {tikz/codiert.txt}; + \end{axis} + \end{tikzpicture}}; \\ + + &\node(fehler) [] { + \begin{tikzpicture} + \begin{axis}[scale=0.6, title = {\Large {Fehler}}, + xtick={7,21,75}] + \addplot[red] table[col sep=comma] {tikz/fehler.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(decodiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Decodiert}}] + \addplot[blue] table[col sep=comma] {tikz/decodiert.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(empfangen) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Empfangen}}] + \addplot[] table[col sep=comma] {tikz/empfangen.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(syndrom) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Syndrom}}] + \addplot[blue] table[col sep=comma] {tikz/syndrom.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(locator) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Locator}}] + \addplot[] table[col sep=comma] {tikz/locator.txt}; + \end{axis} + \end{tikzpicture}};\\ + }; + %------------------------------------------------------------- + %FFT & IFFT deskription + + \draw[thin,gray,dashed] (0,12) to (0,-12); + \node(IFFT) [scale=0.7] at (0,12.3) {IFFT}; + \draw[<-](IFFT.south west)--(IFFT.south east); + \node(FFT) [scale=0.7, above of=IFFT] {FFT}; + \draw[->](FFT.north west)--(FFT.north east); + + \draw[thick, ->,] (fehler.west)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); + %Arrows + \draw[ultra thick, ->] (signal.east) to (codiert.west); + \draw[ultra thick, ->] (codiert.south) to (fehler.north); + \draw[ultra thick, ->] (fehler.south) to (empfangen.north); + \draw[ultra thick, ->] (empfangen.west) to (decodiert.east); + \draw[ultra thick, ->] (syndrom.east) to (locator.west); + \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; + \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + + %item + \node[circle, draw, fill =lightgray] at (signal.north west) {1}; + \node[circle, draw, fill =lightgray] at (codiert.north west) {2}; + \node[circle, draw, fill =lightgray] at (fehler.north west) {3}; + \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; + \node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; + \node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; + \node[circle, draw, fill =lightgray] at (locator.north west) {7}; +\end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/buch/papers/reedsolomon/tikz/polynom2.tex b/buch/papers/reedsolomon/tikz/polynom2.tex new file mode 100644 index 0000000..456e067 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/polynom2.tex @@ -0,0 +1,57 @@ +% polynome +%------------------- + +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{pgfplots} + + +\begin{document} +% Teiler für das Skalieren der Grafik /40 +\newcommand{\teiler}{40} + + +%////////////////////////////////////// + +\begin{tikzpicture}[>=latex,thick] + \draw[color=blue, line width=1.4pt] + plot[domain=0:8, samples=100] + ({\x},{(2*\x^2+1*\x+5)/\teiler}); + + \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; + \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; + + \def\punkt#1{ + \fill[color=green] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + + \def\hellpunkt#1{ + \fill[color=lightgray] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + + \punkt{(1,8/\teiler)} + \hellpunkt{(2,15/\teiler)} + \hellpunkt{(3,26/\teiler)} + \punkt{(4,41/\teiler)} + \punkt{(5,60/\teiler)} + \punkt{(6,83/\teiler)} + \punkt{(7,110/\teiler)} + + \draw[color=gray,line width=1pt,dashed] + plot[domain=0.5:7, samples=100] + ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); + + \def\erpunkt#1{ + \fill[color=red] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + \erpunkt{(2,50/\teiler)} + \erpunkt{(3,37.66/\teiler)} + + \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; + \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; +\end{tikzpicture} +\end{document} diff --git a/buch/papers/reedsolomon/tikz/signal.txt b/buch/papers/reedsolomon/tikz/signal.txt new file mode 100644 index 0000000..c4fa5f8 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/signal.txt @@ -0,0 +1,96 @@ +0,6 +1,6 +2,0 +3,6 +4,4 +5,0 +6,5 +7,2 +8,1 +9,2 +10,1 +11,2 +12,0 +13,6 +14,3 +15,5 +16,7 +17,5 +18,5 +19,4 +20,1 +21,5 +22,9 +23,9 +24,3 +25,2 +26,6 +27,6 +28,4 +29,2 +30,9 +31,1 +32,1 +33,1 +34,2 +35,6 +36,6 +37,1 +38,9 +39,7 +40,7 +41,1 +42,9 +43,9 +44,10 +45,9 +46,8 +47,5 +48,2 +49,4 +50,1 +51,0 +52,9 +53,3 +54,3 +55,3 +56,5 +57,6 +58,0 +59,8 +60,6 +61,9 +62,3 +63,4 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/tikz/syndrom.txt b/buch/papers/reedsolomon/tikz/syndrom.txt new file mode 100644 index 0000000..8ca9eed --- /dev/null +++ b/buch/papers/reedsolomon/tikz/syndrom.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 -- cgit v1.2.1 From 91c10deedee35f5fa673de585c41c06b81248f14 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Mon, 26 Jul 2021 20:59:51 +0200 Subject: Bonus-Chapter updated --- buch/papers/reedsolomon/anwendungen.tex | 35 +++++++++++++-------- .../reedsolomon/images/Compact_Disc_zoomed_in.png | Bin 0 -> 45679 bytes buch/papers/reedsolomon/main.tex | 1 + buch/papers/reedsolomon/references.bib | 11 ++++++- 4 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 buch/papers/reedsolomon/images/Compact_Disc_zoomed_in.png (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/anwendungen.tex b/buch/papers/reedsolomon/anwendungen.tex index c03b1a4..b9b1d69 100644 --- a/buch/papers/reedsolomon/anwendungen.tex +++ b/buch/papers/reedsolomon/anwendungen.tex @@ -7,21 +7,20 @@ \label{reedsolomon:section:anwendung}} \rhead{Anwendungen} -In den vorherigen Abschnitten haben wir betrachtet, wie Reed-Solomon-Codes in der Theorie Funktionieren. +In den vorherigen Abschnitten haben wir betrachtet, wie Reed-Solomon-Codes in der Theorie funktionieren. In diesem Abschnitt werden wir einige Anwendungen vorstellen, bei denen ein Reed-Solomon-Code zum Einsatz kommt. -Dabei teilen all diese Anwendungen das gleiche Problem: Die Daten können nur durch einen (höchst Wahrscheinlichen) fehlerbehafteten Kanal empfangen werden. Es gibt keine andere Methode an diese Daten zu kommen als über diesen Kanal. +Dabei teilen all diese Anwendungen das gleiche Problem: Die Daten können nur durch einen (höchst Wahrscheinlichen) fehlerbehafteten Kanal empfangen werden. Es gibt keine andere Methode, an diese Daten zu kommen, als über diesen Kanal. - -In der Netzwerktechnik zum Beispiel ist es üblich, dass bei Paketverluste oder beschädigt empfangene Datenpakete diese einfach noch einmal inert wenigen Millisekunden angefordert werden können. +In der Netzwerktechnik zum Beispiel ist es üblich, dass bei Paketverluste oder beschädigt empfangene Datenpaketen diese einfach noch einmal innert wenigen Millisekunden angefordert werden können. In der Raumfahrt ist dies nicht möglich, da aufgrund der beschränkten Speichermöglichkeit die gesammelten Daten so rasch wie möglich zur Erde gesendet werden. Diese Daten wiederum brauchen aufgrund der grossen Distanz Stunden bis die Daten beim Empfänger ankommen. Fehlerhafte Daten kann also auf Grund der Zeitverzögerung nicht mehr angefordert werden. -Bei CDs oder DVDs gibt es zwar kein Zeitliches Problem, jedoch erschweren Kratzer, Verschmutzungen oder Produktionsfehler das Lesen einer solchen Disk. +Bei CDs oder DVDs gibt es zwar kein zeitliches Problem, jedoch erschweren Kratzer, Verschmutzungen oder Produktionsfehler das Lesen einer solchen Disk. Da vor allem Produktionsfehler und Kratzer irreversibel sind und die Disk nicht nach jedem Kratzer ersetzt werden muss, so wird die korrekte Ausgabe der gespeicherten Information durch die Fehlerkorrektur sichergestellt. -Ein ähnlicher Ansatz verfolgen QR-Codes, wobei die Information auch dann noch gelesen werden kann wenn der Code nicht mehr vollständig vorhanden ist. +Einen ähnlichen Ansatz verfolgen QR-Codes, wobei die Information auch dann noch gelesen werden kann wenn der Code nicht mehr vollständig vorhanden ist. %Wie man sieht, eignen sich Reed-Solomon-Codes vor allem für Anwendungen, bei der die Informationen nicht auf einen Anderen Weg beschafft werden kann. % @@ -33,7 +32,6 @@ Ein ähnlicher Ansatz verfolgen QR-Codes, wobei die Information auch dann noch g % da aufgrund der grossen Distanz Stunden vergehen können bis gesendete Daten auf der Erde empfangen werden kann. % - Obwohl alle diese Codes nach dem gleichen Prinzip arbeiten gibt es starke Unterschiede in deren Funktionsweise. Dies kommt vor allem daher, da die Codes nur Ressourcen zur Verfügung haben, die von der Hardware bereitstellt wird, auf denen die Codes implementiert wurden. Diese Codes bedienen sich daher verschiedener Tricks und Optimierungen um möglichst effizient zu arbeiten. @@ -75,8 +73,14 @@ Obwohl Reed-Solomon-Codes bereits in den 1960er entwickelt wurden fanden sie ers Codiert. Der Nachrichtenblock hat somit eine Länge von $255$ Zahlen, wovon $233$ als Nutzlast zur Verfügung stehen. Damit ist es möglich bis zu $11$ Fehler im Nachrichtenblock zu korrigieren. -Der Codierte Nachrichtenblock wird in kleinere Blöcke aufgeteilt, mit einem Faltungscode erneut Codiert und anschliessend gesendet. Ein Faltungscode ist wie ein Reed-Solomon-Code in der Lage Fehler zu korrigieren, Funktioniert aber nach einem ganz anderen Prinzip. -Durch diese doppelte Codierung wird eine äusserst hohe Übertragungssicherheit garantiert. +Der Codierte Nachrichtenblock wird in kleinere Blöcke aufgeteilt, mit einem Faltungscode erneut Codiert und anschliessend gesendet. +Ein Faltungscode ist wie ein Reed-Solomon-Code in der Lage Fehler zu korrigieren, +Codiert seine Information aber auf eine andere weise. Aus jedem unterteilten Block wird vor dem Versenden ein Paritätsbit erzeugt und dem Block angehängt. Anhand diesem Paritätsbit überprüft der Empfänger, ob bei der Übertragung der Block beschädigt wurde. Ist dies der Fall, wird der Block bei der Decodierung nicht beachtet. Diese so entstandenen ``Lücken'' im Datenstrom werden wiederum vom Reed-Solomon-Code korrigiert. Dieses Zusammenspiel beider Codes garantiert so eine hohe Robustheit gegenüber Übertragungsfeher. + +% +% Funktioniert aber nach einem ganz anderen Prinzip. +% +%Durch diese doppelte Codierung wird eine äusserst hohe Übertragungssicherheit garantiert. % %Dabei steht die Zahl 255 für grösse des Nachrichtenblocks, der die Anzahl 233 % @@ -107,13 +111,18 @@ Die Digital Video Disc funktioniert nach dem selben Konzept mit grösseren Codeb \begin{figure} \centering - \includegraphics[width=0.5\textwidth]{papers/reedsolomon/images/Compact_Disc} - \caption{CDs kamen 1982 auf den Markt. Sie funktioniert durch das ``einbrennen'' von Punkten und Strichen, die die Daten repräsentieren. Gelesen werden diese wiederum durch die Reflektion eines Lasers an diesen Punkten und Strichen.} + \subfigure[]{ + \includegraphics[width=0.45\textwidth]{papers/reedsolomon/images/Compact_Disc} + } + \subfigure[]{ + \includegraphics[width=0.45\textwidth]{papers/reedsolomon/images/Compact_Disc_zoomed_in} + } + \caption{CDs kamen 1982 auf den Markt. Sie funktioniert durch das Einpressen oder Einbrennen von Punkten und Strichen, die die Daten repräsentieren. Gelesen werden diese wiederum durch die Reflektion eines Lasers an diesen Punkten und Strichen.} \label{fig:cd} \end{figure} \subsection{QR-Codes} -Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel der Abschnitte \ref{reedsolomon:section:codebsp} - \ref{reedsolomon:section:rekonstruktion} nur das QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Die Physische Grösse eines Codes ist stark abhängig von der Grösse der Codierung sowie dem Fehlerkorrektur-Level. Es ist so auf dem ersten Blick nicht ersichtlich, wie viel Nutzinformationen ein Qr-Code enthält. Die QR-Codes in Abbildung \ref{fig:qr} zeigen jeweils die Gleiche Information mit unterschiedlichem Fehlerkorrektur-Level. Codes mit einem höheren Korrektur-Level können auch für Designer-Codes Zweckentfremdet werden. Dabei wird z.B. das Firmenlogo oder einen Schriftzug über den Qr-Code gelegt, ohne das die Funktion des Codes beeinträchtigt wird. Ein Beispiel dazu ist unter Abbildung \ref{fig:designqr} zu finden. +Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen Prinzip wie in unserem Beispiel der Abschnitte \ref{reedsolomon:section:codebsp} - \ref{reedsolomon:section:rekonstruktion} nur das QR-Codes in einem $\mathbb{F}_{256}$ Körper arbeiten. Die physische Grösse eines Codes ist stark abhängig von der Menge an codierten Daten sowie dem verwendeten Fehlerkorrektur-Level. Es ist so auf dem ersten Blick nicht ersichtlich, wie viel Nutzinformationen ein Qr-Code enthält. Die QR-Codes in Abbildung \ref{fig:qr} zeigen jeweils die Gleiche Information mit unterschiedlichem Fehlerkorrektur-Level. Codes mit einem höheren Korrektur-Level können auch für Designer-Codes Zweckentfremdet werden. Dabei wird z.B. das Firmenlogo oder einen Schriftzug über den Qr-Code gelegt, ohne das die Funktion des Codes beeinträchtigt wird. Ein Beispiel dazu ist unter Abbildung \ref{fig:designqr} zu finden. % @@ -154,6 +163,6 @@ Quick Response Codes oder auch QR-Codes funktionieren nach einem sehr ähnlichen \subfigure[]{ \includegraphics[width=0.4\textwidth]{papers/reedsolomon/images/designer_qrcode} } - \caption{Während (a) noch ein unveränderter QR-Code repräsentiert, handelt es sich bei (b) nun um einen Designer-QR-Code. Beide Codes verfügen über einen mittleren Fehlerkorrektur-Level von theoretisch 15\%. Da bei (b) jetzt einen Teil des Codes durch ein Logo verdeckt wird, schränkt sich dadurch die Fehlerkorrekturfähigkeit je nach grösse des verdeckten Teils mehr oder weniger stark ein. Unser Designer-Code in (b) ist nur noch in der Lage etwa 9\% des Codes zu rekonstruieren.} + \caption{Während (a) noch einen unveränderten QR-Code repräsentiert, handelt es sich bei (b) nun um einen Designer-QR-Code. Beide Codes verfügen über einen mittleren Fehlerkorrektur-Level von theoretisch 15\%. Da bei (b) jetzt einen Teil des Codes durch ein Logo verdeckt wird, schränkt sich die Fehlerkorrekturfähigkeit je nach Grösse des verdeckten Teils mehr oder weniger stark ein. Unser Designer-Code in (b) ist nur noch in der Lage etwa 9\% des Codes zu rekonstruieren.} \label{fig:designqr} \end{figure} \ No newline at end of file diff --git a/buch/papers/reedsolomon/images/Compact_Disc_zoomed_in.png b/buch/papers/reedsolomon/images/Compact_Disc_zoomed_in.png new file mode 100644 index 0000000..69556d0 Binary files /dev/null and b/buch/papers/reedsolomon/images/Compact_Disc_zoomed_in.png differ diff --git a/buch/papers/reedsolomon/main.tex b/buch/papers/reedsolomon/main.tex index e68b947..ab4e4be 100644 --- a/buch/papers/reedsolomon/main.tex +++ b/buch/papers/reedsolomon/main.tex @@ -49,6 +49,7 @@ Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren \nocite{reedsolomon:voyager} \nocite{reedsolomon:cd_wiki} \nocite{reedsolomon:cd} +\nocite{reedsolomon:strichepunkte} \nocite{reedsolomon:qr_wiki} \nocite{reedsolomon:qr} %\nocite{reedsolomon:mendezmueller} diff --git a/buch/papers/reedsolomon/references.bib b/buch/papers/reedsolomon/references.bib index e0a75a8..b84b5a4 100644 --- a/buch/papers/reedsolomon/references.bib +++ b/buch/papers/reedsolomon/references.bib @@ -51,7 +51,7 @@ } @online{reedsolomon:cd, - title = {Funktionsweise des QR-Codes}, + title = {Abbildung einer CD}, url = {https://www.stickpng.com/img/electronics/compact-discs/stack-compact-disc}, date = {2021-07-19}, year = {2021}, @@ -59,6 +59,15 @@ day = {19} } +@online{reedsolomon:strichepunkte, + title = {Abbildung der Striche und Punkte einer CD}, + url = {https://www.researchgate.net/figure/The-readable-area-of-a-CD-is-magnified-in-order- to-see-the-pit-and-land-sizing-The_fig7_303401629}, + date = {2021-07-26}, + year = {2021}, + month = {7}, + day = {26} +} + @online{reedsolomon:qr_wiki, title = {Funktionsweise des QR-Codes}, url = {https://de.wikipedia.org/wiki/QR-Code}, -- cgit v1.2.1 From adb7f34e662733e831d1caa86eacb9fdf13b3eed Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 08:45:43 +0200 Subject: =?UTF-8?q?Titel=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/main.tex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/main.tex b/buch/papers/verkehr/main.tex index 6348993..98d0581 100644 --- a/buch/papers/verkehr/main.tex +++ b/buch/papers/verkehr/main.tex @@ -3,8 +3,7 @@ % % (c) 2020 Hochschule Rapperswil % -\chapter{Thema\label{chapter:verkehr}} -\lhead{Verkehrsfluss und Verkehrsnetze} +\chapter{Verkehrsfluss und Verkehrsnetze\label{chapter:verkehr}} \begin{refsection} \chapterauthor{Pascal Andreas Schmid und Robine Luchsinger} -- cgit v1.2.1 From 22d2b924b156f953409cd9f524501c7d71f7eb9b Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 27 Jul 2021 08:50:58 +0200 Subject: Some corrections from feedback --- buch/papers/punktgruppen/crystals.tex | 51 ++++++++++++++++++---------------- buch/papers/punktgruppen/piezo.tex | 52 +++++++++++++++++------------------ buch/papers/punktgruppen/symmetry.tex | 18 ++++++------ 3 files changed, 62 insertions(+), 59 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 21e29c9..18b8395 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -1,5 +1,6 @@ \section{Kristalle} -%einleitung sollte noch an das ende von der Symmetrie angepasst werden +% TODO: einleitung sollte noch an das ende von der Symmetrie angepasst werden +% TODO: sich jeder => paper sprache Unter dem Begriff Kristall sollte sich jeder ein Bild machen können. Wir werden uns aber nicht auf sein Äusseres fokussieren, sondern was ihn im Inneren ausmacht. Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. @@ -30,10 +31,11 @@ Sind die Vektoren \(\vec{a}_1\), \(\vec{a}_2\), \(\vec{a}_3\) gegeben, ist ein \subsection{Translationssymmetrie} Da sich das ganze Kristallgitter wiederholt, wiederholen sich auch dessen Eigenschaften periodisch mit den Grundvektoren. Sollte man sich auf einem Gitterpunkt in einem Kristall aufhalten, ist es unmöglich zu wissen, auf welchem Gitterpunkt man sich befindet, da die Umgebungen aller Punkte identisch sind. -Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{Translationssymmetrisch} in der Translation +Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{translationssymmetrisch} in der Translation \[ - \vec{Q}_i(G) = G + \vec{a}_i -\] wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. + \vec{Q}_i(G) = G + \vec{a}_i, +\] +wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind oder kurz, um $\vec{r}$. @@ -62,7 +64,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. 90\(^{\circ}\), 120\(^{\circ}\) und 180\(^{\circ}\) - erlaubt. + m\"oglich. \end{satz} \begin{proof} @@ -78,9 +80,8 @@ solange wir ein unendlich grosses Kristallgitter verschieben. Für uns bedeutet dies lediglich, dass unser zweiter Punkt \(A'\) abgedreht wird. An der neuen Position \(B\) von \(A'\) muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. \item \(B\) ist unser Name für diesen neuen Punkt. - Da auch die Eigenschaften des Kristallgittes periodisch mit dem Gitter sein müssen, dürfen wir \(C_n\) auch auf \(A'\) anwenden. - Also wenden wir \(C_n\) invertiert\footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren. - Genauere Überlegungen hierzu werden dem Leser überlassen, da sich die Autoren nicht explizit mit dieser Frage Auseinander gesetzt haben.} + Da auch die Eigenschaften des Kristallgitters periodisch mit dem Gitter sein müssen, dürfen wir \(C_n\) auch auf \(A'\) anwenden. + Also wenden wir \(C_n\) invertiert\footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren.} auch auf \(A'\) an. Dies dreht \(A\) auf einen neuen Punkt. \item \(B'\) ist kein zufälliger Name für diesen neuen Punkt, denn wir wissen, dass zwischen allen Punkten eine Translationssymmetrie bestehen muss. @@ -89,14 +90,14 @@ solange wir ein unendlich grosses Kristallgitter verschieben. Mit den gegebenen Punkten lassen sich geometrische Folgerungen ziehen. Wir beginnen, indem wir die Länge der Verschiebung \(|\vec{Q}| = Q\) setzen und \(|\vec{Q}'| = Q'\). Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\). - Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes vielfaches von \(\vec{Q}\) sein. - Demnach auch die Längen + Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes Vielfaches von \(\vec{Q}\) sein. + Demnach ist auch die Länge \[ - Q' = nQ = Q + 2x + Q' = nQ = Q + 2x . \] - Die Strecke \(x\) lässt sich auch mit hilfe der Trigonometrie und dem angenommenen Rotationswinkel \(\alpha\) ausdrücken: + Die Strecke \(x\) lässt sich auch mit Hilfe der Trigonometrie und dem angenommenen Rotationswinkel \(\alpha\) ausdrücken: \[ - nQ = Q + 2Q\sin(\alpha - \pi/2) + nQ = Q + 2Q\sin(\alpha - \pi/2) . \] Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. @@ -126,7 +127,7 @@ ein. \subsection{Kristallklassen} -Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. +Im vorausgegangenen Abschnitt wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum nur auf genau 32 Arten rein punktsymmetrische Symmetriegruppen bilden können. Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. @@ -140,21 +141,23 @@ Vorgehend wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht al \label{fig:punktgruppen:Kristallkassen} \end{figure} -\subsubsection{Schönflies-Symbilok} +\subsubsection{Schönflies-Symbolik} Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schöönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. - Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). - Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. - Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. - Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. - Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. - Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. - Wie zum Beispiel ein Inversionszentrum\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} \(i\) oder eine horizontale\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} Spiegelachse \(h\). - Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. - \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. + \begin{itemize} + \item Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). + Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. + Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. + \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. + \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. + Wie zum Beispiel ein Inversionszentrum\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} \(i\) oder eine horizontale\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} Spiegelachse \(h\). + \item Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. + \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. + \end{itemize} diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index 6defcdc..67e6214 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -1,6 +1,6 @@ \section{Piezoelektrizität} -Die Piezoelektrizität ist per Definition spannend. -Sie beschreibt die Eigenschaft, dass gewisse Kristalle eine elektrische Spannung erzeugen, wenn machanischer Druck auf sie ausgeübt wird. +%% TODO: improve this paragraph +Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle eine elektrische Spannung erzeugen, wenn mechanischer Druck auf sie ausgeübt wird. \begin{figure} \centering @@ -10,10 +10,10 @@ Sie beschreibt die Eigenschaft, dass gewisse Kristalle eine elektrische Spannung \end{figure} \subsection{Polarisierung} -Piezoelektrizität basiert darauf, dass zwischen den Oberflächen des Kristalles ein Ladungsungleichgewicht entsteht siehe Abbildung\ref{fig:punktgruppen:basicPiezo}. +Piezoelektrizität basiert darauf, dass zwischen den Oberflächen des Kristalles ein Ladungsungleichgewicht entsteht (siehe Abbildung\ref{fig:punktgruppen:basicPiezo}). Dieses Ungleichgewicht resultiert, -weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positiv Ione näher an die Oberfläche gelangen, -wärend auf der gegenüberliegenden Oberfläche sich mehr negative Ionen Sammeln. +weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positiv Ionen näher an die Oberfläche gelangen, +wärend auf der gegenüberliegenden Oberfläche sich mehr negative Ionen sammeln. Das sich die atomare Struktur eines Kristalles unter Druck genau so verformt ist nicht bei jedem Kristall gegeben. Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für die Entstehung dieses Effektes. @@ -37,47 +37,45 @@ Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für \subsection{Atomarer Aufbau} Die Polarisation resultiert über eine gesamte Oberfläche eines Kristalles, entscheidend ist aber der atomare Aufbau. Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren. -In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise Positive Ionen und blaue negative Ionen repräsentieren. -%liste oder anderes format?.. +In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren. Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. -Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil mitlleren Ladungsträger weiter auseinander gerdrückt werden. -Als hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, +Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil die mittleren Ladungsträger weiter auseinander gedrückt werden. +Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. +\par \subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. -Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unterdruck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. +Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unter Druck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, -scheint es als würden rechts mehr Positive Ionen in die Platte gedrückt werden und links umgekehrt. +scheint es als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt. Dies ist aber nicht mehr der Fall, wenn die Struktur sich nach oben und unten periodisch wiederholt. Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. +\par Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}. -Daraus kann man schlissen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von $90^\circ$ besitzen kann, -weil die Eigenschaften ändern bei einer $90^\circ$ Drehung. -Das Fehlen dieser Rotationssymmetrie kann mit betrachten von \subref{fig:punktgruppen:atoms-piezo} bestätigt werden. +Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann, +weil die Eigenschaften ändern bei einer \(90^\circ\) Drehung. +Das Fehlen dieser Rotationssymmetrie kann in \subref{fig:punktgruppen:atoms-piezo} beobachtet werden. \subsection{Punktsymmetrie} -Piezoelektrische Kristalle können nicht Punktsymmetrisch sein. +Piezoelektrische Kristalle können nicht punktsymmetrisch sein. Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden. -Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht Punktsymmetrischer Kristall -mit einem Punktsymmetrischen \subref{fig:punktgruppen:atoms-grid}verglichen worden. -Als vereinfachte Erklärung kann mann sich wieder das Bild vor augen führen, eines Kristalles, +Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall +mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden. +Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles vor Augen führen, welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt. -Spiegelt man nun den Kristall um den Gitterpunkt in der mitte des Kristalles, so würden die negativen Ionen auf den Positiven auf der anderen seite landen, +Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen, was der Definition einer Symmetrie deutlich widerspricht. \subsection{Vom Kristall zum Feuer} -Piezoelektrizität hat durchaus nutzen im Alltag. +Piezoelektrizität hat durchaus Nutzen im Alltag. Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, sonder ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität. -Drückt der Nutzende auf den Zündknopf spannt sich eine Feder bis zu einer Konfigurierten Spannung. +Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu eine konfigurierten Spannung. Wird vom Nutzenden weiter gedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, -welcher auf das Piezoelement aufschlägt. -Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so Kurze aber hohe elekrische Spannung. +welchen auf das Piezoelement aufschlägt. +Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung. Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden. -Sollten Sie also eines Tages in die Situation geraten, in welcher Sie zwei verschiedene Kristalle vor sich haben -und ein piezoelektrisches Feuerzeug bauen müssen, -wobei Sie aber wissen, dass einer eine Punktsymmetrie aufweist, -versuche sie es mit dem anderen. +Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass einer eine Punktsymmetrie aufweist, empfiehlt es sich mit die anderen zu versuchen. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 0bb4aec..a5b2fe2 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -22,27 +22,29 @@ Wie wir jedoch später sehen werden, ist das Konzept der Symmetrie eigentlich vi In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. -Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. +Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, der die Form unverändert lassen. Ein Objekt kann mehr als nur eine Symmetrie aufweisen. -Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch Diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. +Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - \(g\) und \(h\) sein umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen. + %% TODO + Seien \(g\) und \(h\) umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen. Die Komposition \(h\circ g\) definieren wir als die Anwendung der Operationen nacheinander. - Alle möglichen Operationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt wird. + Alle möglichen Symmetrieoperationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt wird. \end{definition} Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. \(\mathds{1}\) ist auch äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen (ihre Inverse anzuwenden). - Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, es wird aber auch oft als Multiplikation geschrieben. +%% TODO + Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, sie wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige Ausdrücke kompakter zu schreiben, z.B. durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine wiederholte Komposition. \begin{definition}[Zyklische Untergruppe, Erzeuger] - \(g\) sei ein Element einer Symmetriegruppe \(G\). + Sei \(g\) ein Element einer Symmetriegruppe \(G\). Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird. Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet. \end{definition} @@ -51,7 +53,7 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine Das bedeutet, dass \(G\) die Elemente \(a, aa, aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales Element \(\mathds{1} = aa^{-1}\) enthält. \end{beispiel} \begin{beispiel} - Als anschaulicheres Beispiel, können wir eine Zyklische Untergruppe des \(n\)-Gon formalisieren. + Als anschaulicheres Beispiel, können wir eine zyklische Untergruppe des \(n\)-Gon formalisieren. Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die gesamte Symmetriegruppe \[ @@ -98,7 +100,7 @@ Dies ist jedoch keine Voraussetzung für eine Symmetrie, da es Symmetrien gibt, \subsection{Algebraische Symmetrien} Wir haben nun unseren Operationen Symbole gegeben, mit denen es tatsächlich möglich ist, Gleichungen zu schreiben. -Die anschliesende Frage ist dann, ob wir bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die sich auf die gleiche Weise verhalten. +Die anschliessende Frage ist dann, ob wir bereits mathematische Objekte haben, mit denen wir Gleichungen schreiben, die sich auf die gleiche Weise verhalten. Die Antwort lautet natürlich ja. Um es formaler zu beschreiben, werden wir einige Begriffe einführen. \begin{definition}[Gruppenhomomorphismus] -- cgit v1.2.1 From 08ab4d022e3ec5aa8c598deedca5af8448bf7b1e Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 08:52:01 +0200 Subject: =?UTF-8?q?Strukturierung=20der=20Einf=C3=BChrung=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 2 -- 1 file changed, 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index d96d450..d793e4e 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -1,7 +1,5 @@ -\section{Einführung} \label{section:verkehr/einfuehrung} -\subsection{Verkehrsnetze} Das Verkehrsnetz besteht aus allen Anlagen, auf oder unter der Erdoberfläche, auf denen eine räumliche Fortbewegung von Personen oder auch Gütern stattfindet. Verkehrsnetze sind ein Bestandteil der Verkehrsinfrastruktur, die auf topografischen Karten festgehalten werden. Sie umfassen den Schienenverkehr, alle Strassen und Wege, wie auch Flugplätze und alle dazugehörigen Bauwerke. Aus verkehrsgeografischer Sicht besteht das Verkehrsnetz aus Kanten, Knotenpunkten und dem Hinterland. Die Knotenpunkte werden auch hier durch die Kanten verbunden, die den Verkehrsstrom aufnehmen, wobei das Hinterland durch einzelne Knoten versorgt wird. Die Aufteilung in Kanten und Knotenpunkte ermöglicht eine Vereinfachung komplexer Verkehrsnetze, damit sie mittels der Graphentheorie untersucht werden können. Grundsätzlich können kurze Wege zwischen den Knotenpunkten das Ziel beim Aufbau eines Verkehrsnetzes sein. Es kann aber auch versucht werden, die Bau- und Unterhaltskosten des Verkehrsnetzes in einem gewissen Rahmen zu halten. Aus diesen Vorgaben ergibt sich dann, je nach dem was gewünscht wird, eine grob- oder feinmaschige Struktur des Netzes. -- cgit v1.2.1 From 6f673d1626cf26d479f22499eaa578a300637a8d Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 08:54:49 +0200 Subject: =?UTF-8?q?Sections=20eine=20Stufe=20einger=C3=BCckt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index d793e4e..ae13ac5 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -5,9 +5,9 @@ Aus verkehrsgeografischer Sicht besteht das Verkehrsnetz aus Kanten, Knotenpunkt Grundsätzlich können kurze Wege zwischen den Knotenpunkten das Ziel beim Aufbau eines Verkehrsnetzes sein. Es kann aber auch versucht werden, die Bau- und Unterhaltskosten des Verkehrsnetzes in einem gewissen Rahmen zu halten. Aus diesen Vorgaben ergibt sich dann, je nach dem was gewünscht wird, eine grob- oder feinmaschige Struktur des Netzes. Ziel ist aber ein möglichst wirtschaftliches und optimales Verkehrsnetz. -\subsection{Suchalgorithmen} +\section{Suchalgorithmen} -\subsubsection{Dijkstra-Algorithmus} +\subsection{Dijkstra-Algorithmus} Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Infomratikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. Der Algorithmus von Dijkstra ist ein Greedy-Algorithmus (gieriger Algorithmus), der schrittweise einen Folgezustand auswählt, damit beim Zeitpunkt der Wahl der grösste Gewinn bzw. das beste Ergebnis erzielt werden kann. Trotz der Schnelligkeit der Greedy-Algorithmen, können viele Probleme nicht optimal gelöst werden. @@ -39,7 +39,7 @@ Iteration Diese drei Schritte werden so lange wiederholt bis gilt \begin{equation}M=\{\}\end{equation} -\subsubsection{A*-Algorithmus} +\subsection{A*-Algorithmus} Suchalgorithmen werden nach einfachen (uninformierte) und heuristischen (informierten) Algorithmen unterschieden. Während einfache Algorithmen den Suchraum intuitiv durchsuchen, beziehen heuristische Algorithmen Wissen über den Suchraum mit ein. Der A*-Algorithmus geht auf seine Erfinder Peter Hart, Nils Nilsson und Bertram Raphael zurück, die den Algorithmus erstmals im Jahr 1968 beschrieben. Der A*-Algorithmus ist ein heuristischer Suchalgorithmus, der den kürzesten Pfad zwischen zwei Knoten in einem Graphen mit positiven Kantengewichten berechnet. @@ -47,7 +47,7 @@ Im Gegensatz zu einfachen Suchalgorithmen, wird beim A*-Algorithmus eine Schätz Ausserdem findet der A*-Algorithmus immer eine optimale Lösung, sofern eine vorhanden ist. Der A*-Algorithmus wird als Verallgemeinerung gehandhabt und gilt als Erweiterung des Dijkstra-Algorithmus. -\subsubsection{Anwendung A*-Algorithmus} +\subsection{Anwendung A*-Algorithmus} Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch die optimalste Lösung darstellt.\\ Die Kantengewichte werden für jeden Knoten in Form einer Funktion dargestellt @@ -58,13 +58,13 @@ Somit gilt: \begin{equation}f(n)=g(n)+h(n)\end{equation}\\ Wie auch der Algorithmus von Dijkstra findet der A*-Algorithmus die optimalste Lösung. -\subsubsection{Floyd-Warshall-Algorithmus} +\subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die kürzesten , beziehungsweise die optimalsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. Ein Kreis (Zyklus) in einem Graphen ist ein Weg, bei dem Start- und Endpunkt den gleichen Knoten aufweisen. Dieser wird negativ, wenn die Summe der gewichteten Kanten kleiner als Null wird.\\ Der Floyd-Warshall-Algorithmus besteht grundsätzlich aus Floyd's Berechnung der kürzesten Distanzen zwischen zwei Knoten und Warshall's Konstruktion der kürzesten Wege. Werden diese beiden Teilgebiete zusammengefügt, ergibt sich der Floyd-Warshall-Algorithmus. -\subsubsection{Anwendung Floyd-Warshall-Algorithmus} +\subsection{Anwendung Floyd-Warshall-Algorithmus} Wie oben erwähnt, besteht der Floyd-Warshall-Algorithmus aus dem Teil von Floyd zur Berechnung der kürzesten Pfade und dem Teil von Warshall zur Konstruktion der kürzesten Pfade. @@ -78,11 +78,11 @@ Die aktuelle Gewichtung der Pfade wird mit \begin{equation}d[i, j]=min[d[i,j], d[i,k] + d[k,i]]\end{equation} ermittelt. -\subsubsection{Euklidische Heuristik} +\subsection{Euklidische Heuristik} Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. -\subsection{PageRank-Algorithmus} +\section{PageRank-Algorithmus} Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc.. Beim PageRank-Algorithmus handelt es sich um den Algorithmus von Google, aus dem die Google-Matrix abgeleitet wird. Die Google-Matrix ist eine immens grosse Matrix mit Millionen Zeilen und Spalten, die für die schnelle und vor allem exakte Bestimmung der PageRanks (Gewichtung) eine grosse Bedeutung hat. -- cgit v1.2.1 From cf0c08db837b718b2e6844f39886c065e923d2fb Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 09:04:15 +0200 Subject: Typo --- buch/papers/verkehr/section1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index ae13ac5..40c8edf 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -8,7 +8,7 @@ Ziel ist aber ein möglichst wirtschaftliches und optimales Verkehrsnetz. \section{Suchalgorithmen} \subsection{Dijkstra-Algorithmus} -Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Infomratikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. +Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. Der Algorithmus von Dijkstra ist ein Greedy-Algorithmus (gieriger Algorithmus), der schrittweise einen Folgezustand auswählt, damit beim Zeitpunkt der Wahl der grösste Gewinn bzw. das beste Ergebnis erzielt werden kann. Trotz der Schnelligkeit der Greedy-Algorithmen, können viele Probleme nicht optimal gelöst werden. Vereinfacht wird beim Dijkstra-Algorithmus, ausgehend von einem Startknoten so lange dem kürzesten Pfad gefolgt, bis der Zielknoten erreicht wird. Dabei muss für jeden besuchten Knoten die Kostenfunktion als auch der Pfad dahin (vorheriger Knoten) gespeichert werden. -- cgit v1.2.1 From f102e60cf34adc068ccdc717b9c27d4179d208f8 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 09:15:21 +0200 Subject: =?UTF-8?q?Erl=C3=A4uterung=20zu=20A*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 40c8edf..05c53c5 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -45,7 +45,7 @@ Der A*-Algorithmus geht auf seine Erfinder Peter Hart, Nils Nilsson und Bertram Der A*-Algorithmus ist ein heuristischer Suchalgorithmus, der den kürzesten Pfad zwischen zwei Knoten in einem Graphen mit positiven Kantengewichten berechnet. Im Gegensatz zu einfachen Suchalgorithmen, wird beim A*-Algorithmus eine Schätzfunktion, die sogenannte Heuristik, verwendet. Dies ermöglicht ein zielgerichtetes Suchen und gleichzeitig wird die Laufzeit verringert. Ausserdem findet der A*-Algorithmus immer eine optimale Lösung, sofern eine vorhanden ist. -Der A*-Algorithmus wird als Verallgemeinerung gehandhabt und gilt als Erweiterung des Dijkstra-Algorithmus. +Der A*-Algorithmus gilt als Erweiterung des Dijkstra-Algorithmus. \subsection{Anwendung A*-Algorithmus} Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch die optimalste Lösung darstellt.\\ -- cgit v1.2.1 From 2bd577326030c895a37d9bacaec84d7d62e6fe8b Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 09:16:20 +0200 Subject: Grammatik --- buch/papers/verkehr/section1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 05c53c5..d18089d 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -48,7 +48,7 @@ Ausserdem findet der A*-Algorithmus immer eine optimale Lösung, sofern eine vor Der A*-Algorithmus gilt als Erweiterung des Dijkstra-Algorithmus. \subsection{Anwendung A*-Algorithmus} -Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch die optimalste Lösung darstellt.\\ +Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch eine optimale Lösung darstellt.\\ Die Kantengewichte werden für jeden Knoten in Form einer Funktion dargestellt \begin{equation}f(n)=g(n)\end{equation} mit -- cgit v1.2.1 From 3aafc071d7126b38c672047b95c1d584d52a3849 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 09:17:32 +0200 Subject: =?UTF-8?q?Erl=C3=A4uterung=20Floyd-Warshall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index d18089d..f66896e 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -60,7 +60,7 @@ Wie auch der Algorithmus von Dijkstra findet der A*-Algorithmus die optimalste L \subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. -Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die kürzesten , beziehungsweise die optimalsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. +Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die günstigsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. Ein Kreis (Zyklus) in einem Graphen ist ein Weg, bei dem Start- und Endpunkt den gleichen Knoten aufweisen. Dieser wird negativ, wenn die Summe der gewichteten Kanten kleiner als Null wird.\\ Der Floyd-Warshall-Algorithmus besteht grundsätzlich aus Floyd's Berechnung der kürzesten Distanzen zwischen zwei Knoten und Warshall's Konstruktion der kürzesten Wege. Werden diese beiden Teilgebiete zusammengefügt, ergibt sich der Floyd-Warshall-Algorithmus. -- cgit v1.2.1 From fc8e18376f9db8e43a81006a3c7bd00e167d08b5 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 09:34:00 +0200 Subject: =?UTF-8?q?Widerspruch=20aufgel=C3=B6st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index f66896e..389c78c 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -10,14 +10,13 @@ Ziel ist aber ein möglichst wirtschaftliches und optimales Verkehrsnetz. \subsection{Dijkstra-Algorithmus} Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. Der Algorithmus von Dijkstra ist ein Greedy-Algorithmus (gieriger Algorithmus), der schrittweise einen Folgezustand auswählt, damit beim Zeitpunkt der Wahl der grösste Gewinn bzw. das beste Ergebnis erzielt werden kann. -Trotz der Schnelligkeit der Greedy-Algorithmen, können viele Probleme nicht optimal gelöst werden. Vereinfacht wird beim Dijkstra-Algorithmus, ausgehend von einem Startknoten so lange dem kürzesten Pfad gefolgt, bis der Zielknoten erreicht wird. Dabei muss für jeden besuchten Knoten die Kostenfunktion als auch der Pfad dahin (vorheriger Knoten) gespeichert werden. Dadurch wird hingegen garantiert, dass, wenn der Zielknoten erreicht wird, auch der kürzeste Pfad gefunden wurde. Grundlegende Voraussetzung für den Dijkstra-Algorithmus ist die strikte Positivität der Kantengewichte. Andernfalls würde ein wiederholtes Ablaufen einer Kante mit negativem Gewicht zu einer stetigen Reduktion der Kostenfunktion führen, was zu einer unendlichen Schlaufe führen würde. Gegeben sei ein Netzwerk mit $n$ Knoten und dem Startknoten $a$. Alle Kanten sind mit $k(i, j)$ bewertet. -Gesucht wird der kürzeste Pfad zwischen dem Startknoten und allen übrigen Knoten im Netz. +Gesucht wird der kürzeste Pfad zwischen dem Startknoten und dem Knoten im Netz. $D(i)$ ist die kürzeste Distanz vom Startknoten $a$ zum Knoten $i, V(i)$ ist der unmittelbare Vorgängerknoten vom Knoten $i$ auf dem kürzesten Weg vom Startknoten $a$ zum Konten $i$ und die Menge $M$ ist die Menge einer bestimmten Auswahl an Knoten. Dabei gilt -- cgit v1.2.1 From 2b0d4d1b98f7bed5fa05e2ab6c30352390f22eef Mon Sep 17 00:00:00 2001 From: "User-PC\\User" Date: Tue, 27 Jul 2021 11:15:54 +0200 Subject: =?UTF-8?q?Diverse=20=C3=84nderungen=20/=20Korrekturen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/spannung/Einleitung.tex | 27 ++++++++++++------------ buch/papers/spannung/main.tex | 2 +- buch/papers/spannung/teil0.tex | 23 +++++++++++---------- buch/papers/spannung/teil1.tex | 7 +++---- buch/papers/spannung/teil2.tex | 41 +++++++++++++++++++------------------ buch/papers/spannung/teil3.tex | 32 +++++++++++++++-------------- buch/papers/spannung/teil4.tex | 24 +++++++++++----------- 7 files changed, 80 insertions(+), 76 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/spannung/Einleitung.tex b/buch/papers/spannung/Einleitung.tex index b1588ff..8e0d36d 100644 --- a/buch/papers/spannung/Einleitung.tex +++ b/buch/papers/spannung/Einleitung.tex @@ -1,17 +1,18 @@ \section{Einleitung\label{spannung:section:Einleitung}} \rhead{Einleitung} Das Hook'sche Gesetz beschreibt die Beziehung von Spannung und Dehnung von linear-elastischen Materialien im Eindimensionalen. -In diesem Kapitel geht es darum das Hook'sche Gesetz im Dreidimensionalen zu beschreiben. +In diesem Kapitel geht es darum, das Hook'sche Gesetz im Dreidimensionalen zu beschreiben. Durch variable Krafteinwirkungen entstehen in jedem Punkt des Materials eine Vielzahl an unterschiedlichen Spannungen. In jedem erdenklichen Punkt im Dreidimensionalen herrscht daher ein entsprechender individueller Spannungszustand. Um das Hook'sche Gesetz für den 3D Spannungszustand formulieren zu können, reichen Skalare nicht aus. -Darum werden Vektoren, Matrizen und Tensoren zur Hilfe gezogen. +Darum werden Vektoren, Matrizen und Tensoren zu Hilfe gezogen. Mit diesen lässt sich eine Spannungsformel für den 3D Spannungszustand bilden. Diese Spannungsformel ist Grundlage für Computerprogramme und geotechnische Versuche, wie der Oedometer-Versuch. -Um die mathematische Untersuchung vorzunehmen, beschäftigt man sich zuerst mit den spezifischen Gegebenheiten und Voraussetzungen. -Ebenfalls gilt es ein paar wichtige Begriffe und deren mathematischen Zeichen einzuführen. -In diesem Kapitel gehen wir auch auf die Zusammenhänge von Spannung, Dehnungen und Verformungen an elastischen Materialien ein, +Um die mathematischen und physikalischen Berechnungen anwenden zu können, +müssen vorerst ein paar spezifische Bedingungen vorausgesetzt und Annahmen getroffen werden. +Ebenfalls gilt es, ein paar wichtige Begriffe und deren mathematischen Zeichen einzuführen. +In diesem Kapitel gehen wir auch auf die Zusammenhänge von Spannungen, Dehnungen und Verformungen an elastischen Materialien ein, wie sie in gängigen Lehrbüchern der Mechanik oder der Geotechnik behandelt werden, z.~B.~\cite{spannung:Grundlagen-der-Geotechnik}. \section{Spannungsausbreitung\label{spannung:section:Spannungsausbreitung}} @@ -29,7 +30,7 @@ Belastet man den Boden mit einer Spannung so wird diese in den Boden geleitet und von diesem kompensiert. Im Boden entstehen unterschiedlich hohe Zusatzspannungen. Diese Zusatzspannung breitet sich räumlich im Boden aus. -Im Falle einer konstanten Flächenlast $\sigma$ siehe Abbildung~\ref{spannung:Bild4} breitet sich die Zusatzspannung zwiebelartig aus. +Im Falle einer konstanten Flächenlast $\sigma$ siehe Abbildung~\ref{fig:Bild4} breitet sich die Zusatzspannung zwiebelartig aus. \begin{figure} \centering @@ -38,11 +39,11 @@ Im Falle einer konstanten Flächenlast $\sigma$ siehe Abbildung~\ref{spannung:Bi \label{fig:Bild4} \end{figure} -Mit der Tiefe $t$ nimmt diese permanent ab (siehe Abbildung~\ref{spannung:Bild5}). -Wie diese Geometrie der Ausbreitung ist, kann durch viele Modelle und Ansätze näherungsweise beschrieben werden. +Mit der Tiefe $t$ nimmt diese permanent ab (siehe Abbildung~\ref{fig:Bild5}). +Wie diese Geometrie der Ausbreitung aussieht, kann durch viele Modelle und Ansätze näherungsweise beschrieben werden. Diese Zusatzspannung $\sigma$ ist im Wesentlichen abhängig von $(x,y,t)$. Je nach Modell werden noch andere Parameter berücksichtigt. -Das können beispielsweise jenste Bodenkennwerte oder auch der Wassergehalt sein. +Das können beispielsweise verschiedene Bodenkennwerte oder auch der Wassergehalt sein. \begin{figure} \centering @@ -72,18 +73,18 @@ berechnet werden mit: t &= \text{Tiefe [\si{\meter}]} \\ s &= \text{Setzung, Absenkung [m].} \end{align*} -Diese Zusammenhänge sind wie erwähnt unter anderem im Lehrbuch [\cite{spannung:Grundlagen-der-Geotechnik}] beschrieben. +Diese Zusammenhänge sind wie erwähnt unter anderem im Lehrbuch \cite{spannung:Grundlagen-der-Geotechnik} beschrieben. In der praktischen Geotechnik wird man allerdings weitaus schwierigere Situationen antreffen. -Ein Beispiel wäre eine Baugrube mit einem Baugrubenabschluss, wo ein Teil des Bodens abgetragen ist (siehe Abbildung~\ref{spannung:Bild3}). +Ein Beispiel wäre eine Baugrube mit einem Baugrubenabschluss, wo ein Teil des Bodens abgetragen ist (siehe Abbildung~\ref{fig:Bild3}). Die Ausbreitung der Zusatzspannung $\sigma(x,y,t)$ würde hier deutlich komplizierter ausfallen. Dies bedeutet auch eine komplexere Setzung der Bodenoberfläche infolge einer Flächenlast $\sigma$. Aus allen zusätzlichen Spannungen müssen die adäquaten Dehnungen mit Hilfe einer Spannungsgleichung berechnet werden. Diese beruht auf Annahmen nach Hooke auf einem linear-elastischen Boden. -Generell wird im Ingenieurwesen versucht Phänomene möglichst nach dem Hook'schen Gesetz abbilden zu können. +Generell wird im Bauingenieurwesen oder auch im Maschinenbau versucht, manche Phänomene möglichst nach dem Hook'schen Gesetz abbilden zu können. \begin{figure} \centering \includegraphics[width=0.45\linewidth,keepaspectratio]{papers/spannung/Grafiken/Bild3.png} - \caption{Beispiel eines Lastauftrags auf den Boden bei einer komplexeren Situation, welches kompliziertere Spannungsausbreitung zur Folge hat} + \caption{Beispiel eines Lastauftrags auf den Boden bei einer komplexeren Situation, welche kompliziertere Spannungsausbreitung zur Folge hat} \label{fig:Bild3} \end{figure} diff --git a/buch/papers/spannung/main.tex b/buch/papers/spannung/main.tex index bbdf730..d2aeda9 100644 --- a/buch/papers/spannung/main.tex +++ b/buch/papers/spannung/main.tex @@ -3,7 +3,7 @@ % % (c) 2020 Hochschule Rapperswil % -\chapter{Thema\label{chapter:spannung}} +\chapter{Dreidimensionaler Spannungszustand\label{chapter:spannung}} \lhead{Dreiachsiger Spannungszustand} \begin{refsection} \chapterauthor{Adrian Schuler und Thomas Reichlin} diff --git a/buch/papers/spannung/teil0.tex b/buch/papers/spannung/teil0.tex index 7647252..089c28e 100644 --- a/buch/papers/spannung/teil0.tex +++ b/buch/papers/spannung/teil0.tex @@ -1,9 +1,10 @@ \section{Der Spannungszustand\label{spannung:section:Der Spannungsustand}} \rhead{Der Spannungszustand} -Ein Spannungszustand ist durch alle Spannungen, welche in einem beliebigen Punkt im Körper wirken, definiert (siehe Abbildung~\ref{spannung:Bild2}). +Ein Spannungszustand ist durch alle Spannungen, welche in einem beliebigen Punkt im Körper wirken, definiert (siehe Abbildung~\ref{fig:Bild2}). Änderungen der äusseren Kräfte verändern die inneren Spannungszustände im Material. -Um alle Spannungen eines Punktes darstellen zu können, wird ein infinitesimales Bodenelement in Form eines Würfels modellhaft vorgestellt. -Man spricht auch von einem Elementarwürfel, da dieser elementar klein ist. +Um alle Spannungen eines Punktes darstellen zu können, +stellt man sich modellhaft ein infinitesimales Bodenelement in Form eines Würfels vor. +Man spricht auch von einem Elementarwürfel. \begin{figure} \centering @@ -15,19 +16,19 @@ Man spricht auch von einem Elementarwürfel, da dieser elementar klein ist. Es werden jeweils drei Seiten dieses Würfels betrachtet, wobei die drei gegenüberliegenden Seiten im Betrag die selben Spannungen aufweisen, sodass der Elementarwürfel im Gleichgewicht ist. Wäre dieses Gleichgewicht nicht vorhanden, käme es zu Verschiebungen und Drehungen. -Das infinitesimale Bodenteilchen hat die Koordinaten $1$, $2$, $3$. +Das infinitesimale Bodenteilchen hat die Koordinatenachsen $1$, $2$, $3$. Veränderungen der Normalspannungen können durch Schubspannungen kompensiert werden und umgekehrt. -So sind insgesamt neun verschiedene Spannungen möglich, wobei drei Normal- und sechs Schubspannungen sind. +So sind insgesamt neun verschiedene Spannungen möglich, konkret sind dies drei Normal- und sechs Schubspannungen. Normalspannungen wirken normal (mit rechtem Winkel) zur angreifenden Fläche und Schubspannungen parallel zur angreifenden Fläche. Alle Beträge dieser neun Spannungen am Elementarwürfel bilden den Spannungszustand. -Daraus können die äquivalenten Dehnungen $\varepsilon$ mit Hilfe des Hook'schen Gesetz berechnet werden. +Daraus können die äquivalenten Dehnungen $\varepsilon$ mit Hilfe des Hook'schen Gesetzes berechnet werden. Daher gibt es auch den entsprechenden Dehnungszustand. \section{Spannungszustand\label{spannung:section:Spannungsustand}} \rhead{Spannungszustand} -Im einachsigen Spannungszustand herrscht nur die Normalspannung $\sigma_{11}$ (siehe Abbildung~\ref{spannung:Bild1}). +Im einachsigen Spannungszustand herrscht nur die Normalspannung $\sigma_{11}$ (siehe Abbildung~\ref{fig:Bild1}). Das Hook'sche Gesetz beschreibt genau diesen 1D Spannungszustand. Nach Hooke gilt: \[ @@ -59,7 +60,7 @@ mit A &= \text{Fläche [\si{\meter\squared}].} \end{align*} Diese Beziehung gilt bei linear-elastischen Materialien, welche reversible Verformungen zulassen. -Es ist praktisch die relative Dehnung $\varepsilon$ anzugeben und nicht eine absolute Längenänderung $\Delta l$. +Es ist praktisch, die relative Dehnung $\varepsilon$ anzugeben und nicht eine absolute Längenänderung $\Delta l$. \begin{figure} \centering \includegraphics[width=0.35\linewidth,keepaspectratio]{papers/spannung/Grafiken/Bild1.png} @@ -73,10 +74,10 @@ Mithilfe vom Elastizitätsmodul $E$ als Proportionalitätskonstante lässt sich E\cdot\varepsilon \] beschreiben. -Im Falle, dass $E$ nicht konstant ist, kann dieser näherungsweise durch +Im Falle, dass $E$ nicht konstant ist, wird dieser durch \[ E = -\frac{\Delta\sigma}{\Delta\varepsilon} +\frac{\text{d}\sigma}{\text{d}\varepsilon} \] -ausgedrückt werden. \ No newline at end of file +ausgedrückt. \ No newline at end of file diff --git a/buch/papers/spannung/teil1.tex b/buch/papers/spannung/teil1.tex index 74516c1..647b452 100644 --- a/buch/papers/spannung/teil1.tex +++ b/buch/papers/spannung/teil1.tex @@ -1,8 +1,8 @@ \section{Skalare, Vektoren, Matrizen und Tensoren\label{spannung:section:Skalare,_Vektoren,_Matrizen_und_Tensoren}} \rhead{Skalare, Vektoren, Matrizen und Tensoren} -Der Begriff Tensor kann als Überbegriff, der mathematischen Objekte Skalar, Vektor und Matrix, betrachtet werden. +Der Begriff Tensor kann als Überbegriff der mathematischen Objekte Skalar, Vektor und Matrix, betrachtet werden. Allerdings sind noch höhere Stufen dieser Objekte beinhaltet. -Ein Skalar, ein Vektor oder eine Matrix ist daher auch ein Tensor. +Skalare, Vektoren oder Matrizen sind daher auch Tensoren. Ein Skalar ist ein Tensor 0. Stufe. Mit einem Vektor können mehrere Skalare auf einmal beschrieben werden. Ein Vektor hat daher die Stufe 1 und ist höherstufig als ein Skalar. @@ -14,11 +14,10 @@ Jede Stufe von Tensoren verlangt andere Rechenregeln. So zeigt sich auch der Nachteil von Tensoren mit Stufen höher als 2. Man ist also bestrebt höherstufige Tensoren mit Skalaren, Vektoren oder Matrizen zu beschreiben. -Der Begriff Tensor wurde 1840 von Rowan Hamilton in die Mathematik eingeführt. +In den 40er Jahren vom 19. Jahrhundert wurde der Begriff Tensor von Rowan Hamilton in die Mathematik eingeführt. James Clerk Maxwell hat bereits mit Tensoren operiert, ohne den Begriff Tensor gekannt zu haben. Erst Woldemar Voigt hat den Begriff in die moderne Bedeutung von Skalar, Matrix und Vektor verallgemeinert. Er hat in der Elastizitätstheorie als erstes Tensoren eingesetzt und beschrieben. Auch Albert Einstein hat solche Tensoren eingesetzt, um in der Relativitätstheorie die Änderung der 4D Raumzeit beschreiben zu können. \cite{spannung:Tensor} -\cite{spannung:Voigtsche-Notation} diff --git a/buch/papers/spannung/teil2.tex b/buch/papers/spannung/teil2.tex index 6326eab..8620afe 100644 --- a/buch/papers/spannung/teil2.tex +++ b/buch/papers/spannung/teil2.tex @@ -3,7 +3,7 @@ Durch komplexe Spannungsausbreitungen im Boden entstehen im 3D Spannungszustand unterschiedliche Normal- und Schubspannungen. \begin{figure} \centering - \includegraphics[width=0.4\linewidth,keepaspectratio]{papers/spannung/Grafiken/infinitesimalerWuerfel.png} + \includegraphics[width=0.30\linewidth,keepaspectratio]{papers/spannung/Grafiken/infinitesimalerWuerfel.png} \caption{Beispiel eines Spannungszustandes; Vergrösserung eines infinitesimalen Bodenteilchen} \label{fig:infinitesimalerWuerfel} \end{figure} @@ -49,7 +49,7 @@ Der Dehnungstensor ist ebenfalls ein Tensor 2. Stufe und kann somit auch als $3\ dargestellt werden und beschreibt den gesamten Dehnungszustand. Der Spannungs- und Dehnungstensor 2. Stufe kann je in einen Tensor 1. Stufe überführt werden, welches ein Spaltenvektor ist. -Gemäss der Hadamard-Algebra dürfen Zeile um Zeile in eine Spalte notiert werden, sodass es einen Spaltenvektor ergibt. +Man darf Zeile um Zeile in eine Spalte notieren, sodass es einen Spaltenvektor ergibt. So ergibt sich der Spannungsvektor \[ @@ -79,7 +79,7 @@ So ergibt sich der Spannungsvektor \sigma_{33} \end{pmatrix} \] -und Dehnungsvektor +und der Dehnungsvektor \[ \overline{\varepsilon} = @@ -140,14 +140,6 @@ C_{3311} & C_{3312} & C_{3313} & C_{3321} & C_{3322} & C_{3323} & C_{3331} & C_{ \end{pmatrix} \] geschrieben werden kann. -Dieser Elastizitätstensor muss für isotrope Materialien zwingend symmetrisch sein. -Folglich gilt: -\[ -\overline{\overline{C}} -= -\overline{\overline{C}}~^{T} -. -\] Die allgemeine Spannungsgleichung lautet nun: \[ \vec\sigma @@ -155,8 +147,7 @@ Die allgemeine Spannungsgleichung lautet nun: \overline{\overline{C}}\cdot\vec{\varepsilon} . \] - -Als Indexnotation +Sie kann ebenfalls als Indexnotation \[ \sigma_{ij} = @@ -164,7 +155,15 @@ Als Indexnotation \sum_{l=1}^3 C_{ijkl}\cdot\varepsilon_{kl} \] -kann dies ebenfalls geschrieben werden. +geschrieben werden. +Der Elastizitätstensor muss für isotrope Materialien zwingend symmetrisch sein. +Folglich gilt: +\[ +\overline{\overline{C}} += +\overline{\overline{C}}~^{T} +. +\] Die Konstanten $C$ werden nun nach dem Hook'schen Gesetz mit Hilfe des Elastizitätsmoduls $E$ definiert. Da dieser Modul durch die eindimensionale Betrachtung definiert ist, @@ -221,7 +220,7 @@ definiert ist. Trägt man die Konstanten in die Matrix ein, ergibt sich \end{pmatrix} . \] -Die Normalspannung $\sigma_{22}$ lässt sich exemplarisch als +Die Normalspannung $\sigma_{22}$ lässt sich zum Beispiel als \[ \sigma_{22} = @@ -229,11 +228,13 @@ Die Normalspannung $\sigma_{22}$ lässt sich exemplarisch als \] berechnen. +Reduzierte Spannungs- und Dehnungsgleichungen + Man betrachte nun die Eigenschaften des Elastizitätstensors. Dieser ist quadratisch und symmetrisch, die verschiedenen Einträge wechseln sich aber miteinander ab. Es ergeben sich keine Blöcke mit einheitlichen Einträgen. -Allerdings weiss man, dass im isotropen Boden der Spannungs-, Dehnungs- und daher auch Elastizitätstensor symmetrisch sind. +Allerdings weiss man, dass im isotropen Boden der Spannungs-, Dehnungs- und daher auch der Elastizitätstensor symmetrisch sind. Wäre dem nicht so, würde sich das Material je nach Richtung unterschiedlich elastisch verhalten. Diese Symmetrie setzt daher voraus, dass \[ @@ -399,7 +400,7 @@ Somit lässt sich die reduzierte allgemeine Spannungsgleichung mit \] beschreiben. Die Konstanten $C$ werden wieder nach dem Hook'schen Gesetz definiert. -Dies ergibt die Spannungsformel, welche weit möglichst vereinfacht ist: +Dies ergibt die Spannungsgleichung, welche weit möglichst vereinfacht ist: \begin{equation} \begin{pmatrix} \sigma_{11}\\ @@ -433,7 +434,7 @@ Dies ergibt die Spannungsformel, welche weit möglichst vereinfacht ist: Im Elastizitätstensor fallen zwei $3\times3$ Blöcke auf, welche nur Einträge mit $0$ haben. Der Tensor besagt also, dass diese jeweiligen Dehnungen keinen Einfluss auf unsere Spannung haben. -Man sieht nun auch ganz gut, dass sich im Vergleich zu der allgemeinen Spannungsgleichung, die Einträge verschoben haben. +Man sieht nun auch ganz gut, dass sich im Vergleich zu der allgemeinen Spannungsgleichung die Einträge verschoben haben. Da nach Voigt zuerst die Normalspannungen und anschliessend die Schubspannungen notiert worden sind, ergeben sich die $3\times3$ Blöcke. Man betrachte als Beispiel die Berechnung von $\sigma_{33}$. @@ -441,8 +442,8 @@ Es ist ersichtlich, dass die Schubdehnungen keinen Einfluss auf $\sigma_{33}$ ha Der Einfluss der zu $\sigma_{33}$ äquivalenten Dehnung $\varepsilon_{33}$ hat den grössten Einfluss. Die anderen Normalspannungen $\sigma_{11}$ und $\sigma_{22}$ haben einen unter anderem mit $\nu$ korrigierten Einfluss. -Von $\overline{\overline{C}}$ bildet man noch die inverse Matrix $\overline{\overline{C}}\mathstrut^{-1}$ um die Gleichung umstellen zu können. -Dadurch erhält man die Dehnungsgleichung: +Von $\overline{\overline{C}}$ bildet man die inverse Matrix $\overline{\overline{C}}\mathstrut^{-1}$, mithilfe des Gauss - Jordan Algorithmus, um die Gleichung umstellen zu können. +Durch einige Berechnungsschritte erhält man die Dehnungsgleichung: \[ \vec{\varepsilon} diff --git a/buch/papers/spannung/teil3.tex b/buch/papers/spannung/teil3.tex index 3e456c3..a9080ea 100644 --- a/buch/papers/spannung/teil3.tex +++ b/buch/papers/spannung/teil3.tex @@ -30,7 +30,7 @@ q \label{spannung:Invariante_q} . \end{equation} -Diese Zusammenhänge werden im Skript [\cite{spannung:Stoffgesetze-und-numerische-Modellierung-in-der-Geotechnik}] aufgezeigt. +Diese Zusammenhänge werden im Skript \cite{spannung:Stoffgesetze-und-numerische-Modellierung-in-der-Geotechnik} aufgezeigt. Die hydrostatische Spannung $p$ kann gemäss Gleichung \eqref{spannung:Invariante_p} als \[ p @@ -38,28 +38,28 @@ p \frac{\sigma_{11}+2\sigma_{33}}{3} \] vereinfacht werden. -Die deviatorische Spannung $q$ wird gemäss Gleichung \eqref{spannung:Invariante_q}als +Die deviatorische Spannung $q$ wird gemäss Gleichung \eqref{spannung:Invariante_q} als \[ q = \sigma_{11}-\sigma_{33} \] -vereinfacht. Man kann $p$ als Isotrop und $q$ als Schub betrachten. +vereinfacht. Man kann $p$ als Druck und $q$ als Schub betrachten. -Die Invarianten können mit der Spannungsformel \eqref{spannung:Spannungsgleichung} berechnet werden. +Die Invarianten $p$ und $q$ können mit der Spannungsgleichung \eqref{spannung:Spannungsgleichung} berechnet werden. Durch geschickte Umformung dieser Gleichung, lassen sich die Module als Faktor separieren. Dabei entstehen spezielle Faktoren mit den Dehnungskomponenten. So ergibt sich \[ -\overbrace{\frac{\sigma_{11}+2\sigma_{33}}{3}}^{p} +\overbrace{\frac{\sigma_{11}+2\sigma_{33}}{3}}^{\displaystyle{p}} = -\frac{E}{3(1-2\nu)} \overbrace{(\varepsilon_{11} - 2\varepsilon_{33})}^{\varepsilon_{v}} +\frac{E}{3(1-2\nu)} \overbrace{(\varepsilon_{11} - 2\varepsilon_{33})}^{\displaystyle{{\varepsilon_{v}}}} \] und \[ -\overbrace{\sigma_{11}-\sigma_{33}}^{q} +\overbrace{\sigma_{11}-\sigma_{33}}^{\displaystyle{q}} = -\frac{3E}{2(1+\nu)} \overbrace{\frac{2}{3}(\varepsilon_{11} - \varepsilon_{33})}^{\varepsilon_{s}} +\frac{3E}{2(1+\nu)} \overbrace{\frac{2}{3}(\varepsilon_{11} - \varepsilon_{33})}^{\displaystyle{\varepsilon_{s}}} . \] Die Faktoren mit den Dehnungskomponenten können so mit @@ -79,8 +79,8 @@ eingeführt werden, mit \varepsilon_{v} &= \text{Hydrostatische Dehnung [-]} \\ \varepsilon_{s} &= \text{Deviatorische Dehnung [-].} \end{align*} -Die hydrostatische Dehnung $\varepsilon_{v}$ kann mit einer Kompression verglichen werden. -Die deviatorische Dehnung $\varepsilon_{s}$ kann mit einer Verzerrung verglichen werden. +Die hydrostatische Dehnung $\varepsilon_{v}$ kann mit einer Kompression und +die deviatorische Dehnung $\varepsilon_{s}$ mit einer Verzerrung verglichen werden. Diese zwei Gleichungen kann man durch die Matrixschreibweise \begin{equation} @@ -90,8 +90,8 @@ Diese zwei Gleichungen kann man durch die Matrixschreibweise \end{pmatrix} = \begin{pmatrix} - \frac{3E}{2(1+\nu)} & 0 \\ - 0 & \frac{E}{3(1-2\nu)} + \displaystyle{\frac{3E}{2(1+\nu)}} & 0 \\ + 0 & \displaystyle{\frac{E}{3(1-2\nu)}} \end{pmatrix} \begin{pmatrix} \varepsilon_{s}\\ @@ -100,9 +100,11 @@ Diese zwei Gleichungen kann man durch die Matrixschreibweise \label{spannung:Matrixschreibweise} \end{equation} vereinfachen. -Man hat so eine Matrix multipliziert mit einem Vektor und erhält einen Vektor. -Änderungen des Spannungszustandes können mit dieser Gleichung vollumfänglich erfasst werden. +Änderungen des Spannungszustandes können mit diesen Gleichungen vollumfänglich erfasst werden. +Diese Spannungsgleichung mit den zwei Einträgen ($p$ und $q$) ist gleichwertig +wie die ursprüngliche Spannungsgleichung mit den neun Einträgen +($\sigma_{11}$, $\sigma_{12}$, $\sigma_{13}$, $\sigma_{21}$, $\sigma_{22}$, $\sigma_{23}$, $\sigma_{31}$, $\sigma_{32}$, $\sigma_{33}$). Mit dieser Formel \eqref{spannung:Matrixschreibweise} lassen sich verschieden Ergebnisse von Versuchen analysieren und berechnen. -Ein solcher Versuch, den oft in der Geotechnik durchgeführt wird, ist der Oedometer-Versuch. +Ein solcher Versuch, der oft in der Geotechnik durchgeführt wird, ist der Oedometer-Versuch. Im nächsten Kapitel wird die Anwendung der Matrix an diesem Versuch beschrieben. diff --git a/buch/papers/spannung/teil4.tex b/buch/papers/spannung/teil4.tex index 2f2e4ce..00b2d4f 100644 --- a/buch/papers/spannung/teil4.tex +++ b/buch/papers/spannung/teil4.tex @@ -1,6 +1,6 @@ -\section{Oedometer-Versuch\label{spannung:section:Oedometer-Versuch}} -\rhead{Oedometer-Versuch} -Mit dem Oedometer-Versuch kann der oedometrische Elastizitätsmodul $E_{OED}$ bestimmt werden. +\section{Oedometrischer Elastizitätsmodul\label{spannung:section:Oedometrischer Elastizitätsmodul}} +\rhead{Oedometrischer Elastizitätsmodul} +Mit dem Oedometer-Versuch kann der oedometrische Elastizitätsmodul $E_{\text{OED}}$ bestimmt werden. Dieser beschreibt ebenfalls das Verhältnis zwischen Spannung und Dehnung, allerdings unter anderen Bedingungen. Diese Bedingung ist das Verhindern der seitlichen Verformung, sprich der Dehnung in Richtung $1$ und $2$. Es wird ein Probeelement mit immer grösseren Gewichten belastet, welche gleichmässig auf das Material drücken. @@ -43,8 +43,8 @@ Diese lautet nun: \end{pmatrix} = \begin{pmatrix} - \frac{E_{OED}}{(1+\nu)} & 0 \\ - 0 & \frac{E_{OED}}{3(1-2\nu)} + \displaystyle{\frac{E_{\text{OED}}}{(1+\nu)}} & 0 \\ + 0 & \displaystyle{\frac{E_{\text{OED}}}{3(1-2\nu)}} \end{pmatrix} \begin{pmatrix} \varepsilon_{11}\\ @@ -52,28 +52,28 @@ Diese lautet nun: \end{pmatrix} . \] -Daraus lässt sich bei jedem Setzungsgrad der oedometrische Elastitzitätsmodul $E_{OED}$ und die seitlichen Spannungen $\sigma_{33}$ mit den 2 Gleichungen +Daraus lässt sich bei jedem Setzungsgrad der oedometrische Elastitzitätsmodul $E_{\text{OED}}$ und die seitlichen Spannungen $\sigma_{33}$ mit den zwei Gleichungen \[ \sigma_{11}-\sigma_{33} = -\frac{E_{OED}}{(1+\nu)}\cdot\varepsilon_{11} +\frac{E_{\text{OED}}}{(1+\nu)}\cdot\varepsilon_{11} \] und \[ \sigma_{11}+2\sigma_{33} = -\frac{E_{OED}}{3(1-2\nu)}\cdot\varepsilon_{11} +\frac{E_{\text{OED}}}{3(1-2\nu)}\cdot\varepsilon_{11} \] berechnen. -Mit diesen Gleichungen hat man das Gleichungssystem um $E_{OED}$ und $\sigma_{33}$ zu berechnen. +Mit diesen Gleichungen hat man das Gleichungssystem um $E_{\text{OED}}$ und $\sigma_{33}$ zu berechnen. Die Poisson-Zahl muss als Kennwert gemäss der Bodenklasse gewählt werden. -Den Versuch kann man auf einem $\sigma$-$\varepsilon$-Diagramm abtragen (siehe Abbildung~\ref{spannung:DiagrammOedometer-Versuch}). +Den Versuch kann man auf einem $\sigma$-$\varepsilon$-Diagramm abtragen (siehe Abbildung~\ref{fig:DiagrammOedometer-Versuch}). Durch die Komprimierung nimmt der Boden mehr Spannung auf, und verformt sich zugleich weniger stark. -Mit diesem ermittelten $E_{OED}$ kann man nun weitere Berechnungen für die Geotechnik durchführen. +Mit diesem ermittelten $E_{\text{OED}}$ kann man nun weitere Berechnungen für die Geotechnik durchführen. \begin{figure} \centering - \includegraphics[width=0.5\linewidth,keepaspectratio]{papers/spannung/Grafiken/DiagrammOedometer-Versuch.png} + \includegraphics[width=0.45\linewidth,keepaspectratio]{papers/spannung/Grafiken/DiagrammOedometer-Versuch.png} \caption{Diagramm Charakteristik verschiedener Elastizitätsmodule bei gleichem Material} \label{fig:DiagrammOedometer-Versuch} \end{figure} \ No newline at end of file -- cgit v1.2.1 From 4f9cf26c7802a163da6b18cec9db62e75a9730cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Tue, 27 Jul 2021 12:30:10 +0200 Subject: neue version --- buch/papers/munkres/main.tex | 4 +- buch/papers/munkres/teil0.tex | 19 ++----- buch/papers/munkres/teil1.tex | 65 +++++++++++++++++----- buch/papers/munkres/teil2.tex | 83 ++-------------------------- buch/papers/munkres/teil3.tex | 122 +++++++++++------------------------------- buch/papers/munkres/teil4.tex | 31 +---------- buch/papers/munkres/teil5.tex | 10 +--- 7 files changed, 97 insertions(+), 237 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/main.tex b/buch/papers/munkres/main.tex index 8915a3d..e5282dc 100644 --- a/buch/papers/munkres/main.tex +++ b/buch/papers/munkres/main.tex @@ -3,8 +3,8 @@ % % (c) 2020 Hochschule Rapperswil % -\chapter{Munkres-Algorithmus\label{chapter:munkres}} -\lhead{Munkres-Algorithmus} +\chapter{Das Zuordnungsproblem und der Munkres-Algorithmus\label{chapter:munkres}} +\lhead{Das Zuordnungsproblem und der Munkres-Algorithmus} \begin{refsection} \chapterauthor{Marc Kühne} diff --git a/buch/papers/munkres/teil0.tex b/buch/papers/munkres/teil0.tex index 1ef0538..0578429 100644 --- a/buch/papers/munkres/teil0.tex +++ b/buch/papers/munkres/teil0.tex @@ -3,19 +3,8 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Geschichte\label{munkres:section:teil0}} -\rhead{Geschichte} -Die Ungarische Methode wurde 1955 von Harold Kuhn entwickelt und veröffentlicht. -Der Name ``Ungarische Methode'' ergab sich, weil der Algorithmus -weitestgehend auf den früheren Arbeiten zweier ungarischer Mathematiker -basierte: Dénes Kőnig und Jenő Egerváry. -James Munkres überprüfte den Algorithmus im Jahr 1957 und stellte fest, -dass der Algorithmus (stark) polynomiell ist. -Seitdem ist der Algorithmus auch als Kuhn-Munkres oder -Munkres-Zuordnungsalgorithmus bekannt. -Die Zeitkomplexität des ursprünglichen Algorithmus war $O(n^4)$, -später wurde zudem festgestellt, dass er modifiziert werden kann, -um eine $O(n^3)$-Laufzeit zu erreichen. - - +\section{Einleitung\label{munkres:section:teil0}} +\rhead{Einleitung} +Im Bereich der Unternehmensplanung (Operations Research) gibt es verschiedene Fragestellungen. Eine davon ist das sogenannte Transportproblem. Zum Transport einheitlicher Objekte von mehreren Angebots- zu mehreren Nachfrageorten ist ein optimaler, d. h. kostenminimaler Plan zu finden, wobei die vorhandenen und zu liefernden Mengen an den einzelnen Standorten gegeben sowie die jeweiligen Transportkosten pro Einheit zwischen allen Standorten bekannt sind. +Nun gibt es im Bereich des klassischen Transportproblems Sonderfälle. Ein Sonderfall ist z.B. das Zuordnungsproblem. diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 7cbbbfd..c13732c 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -3,19 +3,56 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Was ist die ungarische Methode? +\section{Beschrieb des Zuordnungsproblems \label{munkres:section:teil1}} \rhead{Problemstellung} -Es ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem -in polynomieller Zeit löst. -\begin{itemize} -\item -Polynom = vielgliedrig -\end{itemize} -Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms -wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. -Mit der ungarischen Methode können also lineare Optimierungsprobleme gelöst -werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. -Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so -optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der -Gesamtgewinn maximiert werden kann. + +Das spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen +Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Materialien auf bestimmte Orte, Stellen oder Aufgaben. +Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels. + +\subsection{Zuordnungsproblem an einem konkreten Beispiel +\label{munkres:subsection:bonorum}} + +\subsection{Zuordnungsproblem abstrakt +\label{munkres:subsection:bonorum}} + +Es sind alle Angebots- und Bedarfsmengen gleich 1 +\begin{equation} +a_{i}=b_{j}=1 +\end{equation} + +\subsection{alternative Darstellungen des Zuordnungsproblems +\label{munkres:subsection:bonorum}} +\begin{equation} +Netzwerk +\end{equation} +\begin{equation} +Matrix +\end{equation} +\begin{equation} +Bitpartiter Graph +\end{equation} +Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen +zwischen den Elementen zweier Mengen. +Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen» +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung} +\caption{Typische Netzwerkdarstellung eines Zuordnungsproblems.} +\label{munkres:Vr2} +\end{figure} + +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/Matrixdarstellung} +\caption{Typische 4x4 Matrixdarstellung eines Zuordnungsproblems.} +\label{munkres:Vr2} +\end{figure} + +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/bipartiter_graph} +\caption{$K_{3,3}$ vollständig bipartiter Graph mit 3 Knoten pro Teilmenge.} +\label{munkres:Vr2} +\end{figure} diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index 29db8d7..9a44cd4 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -3,86 +3,11 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Das Zuordnungsproblem +\section{Schwierigkeit der Lösung (Permutationen) \label{munkres:section:teil2}} -\rhead{Das Zuordnungsproblem} -Das (lineare) Zuordnungsproblem ist ein diskretes Optimierungsproblem aus -der Graphentheorie. -Es handelt sich um einen Spezialfall eines maximalen Matchings -minimalen Gewichtes in einem bipartiten, gewichteten Graphen +\rhead{Schwierigkeit der Lösung (Permutationen)} -Vereinfacht gesagt sind Zuordnungsprobleme spezielle Transportprobleme. -Der Unterschied zu klassischen Transportproblemen liegen darin, -dass hier nicht Mengen möglichst kostenminimal von einem zum anderen -Ort transportiert werden sollen, sondern es geht um die kostenminimale -Zuordnung von z.~B.~Personen, oder Bau-Materialien auf bestimmte -Orte, Stellen oder Aufgaben. -Dabei sind alle Angebots- und Bedarfsmenge gleich 1 -\begin{equation} -a_{i}=b_{j}=1 -\end{equation} +Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine maximale Zuordnung (maximales Matching) gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. -\subsection{Zuordnungsproblem in Netzwerkdarstellung -\label{munkres:subsection:bonorum}} - -\begin{figure} -\centering -\includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung} -\caption{Typische Netzwerkdarstellung eines Zuordnungsproblems.} -\label{munkres:Vr2} -\end{figure} - -\subsection{Matrix Formulierung -\label{munkres:subsection:bonorum}} -In der Matrixformulierung ist eine nicht-negative $n\times n$-Matrix -gegeben, wobei das Element in der $i$-ten Zeile und $j$-ten Spalte -die Kosten für die Zuweisung des $j$-ten Jobs an den $i$-ten Arbeiter -darstellt. -Wir müssen eine Zuordnung der Jobs zu den Arbeitern finden, so dass -jeder Job einem Arbeiter zugewiesen wird und jeder Arbeiter einen -Job zugewiesen bekommt, so dass die Gesamtkosten der Zuordnung -minimal sind. -Dies kann als Permutation der Zeilen und Spalten einer Kostenmatrix -$C$ ausgedrückt werden, um die Spur einer Matrix zu minimieren: -\begin{equation} -\min(L,R)Tr (LCR) -\end{equation} -wobei $L$ und $R$ Permutationsmatrizen sind. -Wenn das Ziel ist, die Zuordnung zu finden, die die maximalen Kosten -ergibt, kann das Problem durch Negieren der Kostenmatrix $C$ gelöst -werden. - -\subsection{Suche der optimalen Lösung -\label{munkres:subsection:bonorum}} -Ist eine maximale Zuordnung (maximales Matching) gefunden, so steht -in jeder Zeile und jeder Spalte der Matrix genau ein Element, das -zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird -auch als Transversale der Matrix bezeichnet. -Deshalb kann die Problemstellung auch anders formuliert werden: Man -ordne die Zeilen- oder die Spaltenvektoren so um, dass die Summe -der Elemente in der Hauptdiagonale maximal wird. -Hieraus wird sofort ersichtlich, dass es in einer -$n\times n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- -bzw.~Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen -gibt, also $n!$. -Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale -Lösung durch Berechnung aller Möglichkeiten zu finden. -Schon bei einer $10\times 10$-Matrix gibt es nahezu 3,63 Millionen (3.628.800) -zu berücksichtigender Permutationen. - -\subsection{Formulierung Bipartiter Graph -\label{munkres:subsection:bonorum}} -Der Algorithmus ist einfacher zu beschreiben, wenn wir das Problem -anhand eines bipartiten Graphen formulieren. -Wir haben einen vollständigen zweistufigen Graphen $G=(S,T;E)$ mit -$n$ Arbeiter-Eckpunkten ($S$) und $n$ Job-Scheitelpunkte ($T$), und -jede Kante hat einen nichtnegativen Preis $c(i,j)$. -Wir wollen ein perfektes Matching mit minimalen Gesamtkosten finden. - -\begin{figure} -\centering -\includegraphics[width=5cm]{papers/munkres/figures/bipartiter_graph} -\caption{$K_{3,3}$ vollständig bipartiter Graph mit 3 Knoten pro Teilmenge.} -\label{munkres:Vr2} -\end{figure} +Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer n×n-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von n Elementen gibt, also n!. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 806cd83..cd47c92 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -3,102 +3,44 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Der Algorithmus in Form von bipartiten Graphen +\section{Der Munkres-Algorithmus (Ungarische Methode) \label{munkres:section:teil3}} -\rhead{Der Algorithmus in Form von bipartiten Graphen} -Mit der ungarischen Methode können also lineare Optimierungsprobleme -gelöst werden, die bei gewichteten Zuordnungen in bipartiten Graphen -entstehen. +\rhead{Der Munkres-Algorithmus (Ungarische Methode)} -Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen -so optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der -Gesamtgewinn maximiert werden kann. +Mit der ungarischen Methode können also lineare Optimierungsprobleme gelöst +werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. +Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so +optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der +Gesamtgewinn maximiert werden kann. -Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen -zwischen den Elementen zweier Mengen. -Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen» - -\subsection{Beweis, dass der Algorithmus Fortschritte macht +\subsection{Geschichte \label{munkres:subsection:malorum}} -Wir müssen zeigen, dass der Algorithmus, solange das Matching nicht -die maximal mögliche Größe hat, immer in der Lage ist, Fortschritte -zu machen --- das heißt, entweder die Anzahl der übereinstimmenden -Kanten zu erhöhen oder mindestens eine Kante zu straffen. -Es genügt zu zeigen, dass bei jedem Schritt mindestens eine der -folgenden Bedingungen erfüllt ist: - -\begin{itemize} -\item -$M$ die maximal mögliche Größe. -\item -$Gy$ enthält einen Erweiterungspfad. -\item -$G$ enthält einen losen Pfad: einen Pfad von einem Knoten in $Rs$ -zu einem Knoten in $T$ / $Z$ die aus einer beliebigen Anzahl von -festen Kanten, gefolgt von einer einzelnen losen Kante, besteht. -Die freie Kante einer freien Bahn ist also $Z$ (beinhaltet $T$), -so garantiert es, dass Delta gut definiert ist. -\end{itemize} -Wenn $M$ die maximal mögliche Größe hat, sind wir natürlich fertig. -Andernfalls muss es nach Berges Lemma im zugrundeliegenden Graphen -$G$ einen Augmentierungspfad $P$ in Bezug auf $M$ geben. -Dieser Pfad darf jedoch nicht in $G_y$ existieren: Obwohl jede -geradzahlige Kante in $P$ durch die Definition von $M$ fest ist, -können ungeradzahlige Kanten lose sein und in $G_y$ fehlen. -Ein Endpunkt von $P$ liegt in $R_{S}$, der andere in $R_T$; w.l.o.g., -nehmen Sie an, es beginnt in $R_{S}$. -Wenn jede Kante von $P$ dicht ist, dann bleibt sie ein augmentierender -Pfad in $G_y$ und wir sind fertig. -Andernfalls sei $uv$ die erste lose Kante auf $P$. -Wenn $v$ kein Element von $Z$ ist, dann haben wir einen losen Pfad -gefunden und sind fertig. -Andernfalls ist $v$ von irgendeinem anderen Pfad $Q$ aus festen -Kanten von einem Knoten in $R_{S}$ erreichbar. -Sei $P_{v}$ der Teilpfad von $P$, der bei $v$ beginnt und bis zum -Ende reicht, und sei $P'$ der Pfad, der gebildet wird, indem man -entlang $Q$ gebildet wird, bis ein Scheitelpunkt auf $P_{v}$ erreicht -wird, und dann weiter bis zum Ende von $P_{v}$. -Beachten Sie, dass $P'$ ein erweiternder Pfad in $G$ mit mindestens -einer losen Kante weniger als $P$ ist. -$P$ kann durch $P'$ ersetzt und dieser Argumentationsprozess iteriert -werden (formal, unter Verwendung von Induktion auf die Anzahl der -losen Kanten), bis entweder ein erweiternder Pfad in $G_y$ oder ein -losender Pfad in $G$ gefunden wird. +Die Ungarische Methode wurde 1955 von Harold Kuhn entwickelt und veröffentlicht. +Der Name ``Ungarische Methode'' ergab sich, weil der Algorithmus +weitestgehend auf den früheren Arbeiten zweier ungarischer Mathematiker +basierte: Dénes Kőnig und Jenő Egerváry. +James Munkres überprüfte den Algorithmus im Jahr 1957 und stellte fest, +dass der Algorithmus (stark) polynomiell ist. +Seitdem ist der Algorithmus auch als Kuhn-Munkres oder +Munkres-Zuordnungsalgorithmus bekannt. +Die Zeitkomplexität des ursprünglichen Algorithmus war $O(n^4)$, +später wurde zudem festgestellt, dass er modifiziert werden kann, +um eine $O(n^3)$-Laufzeit zu erreichen. -\subsection{Beweis, dass die Anpassung des Potentials $y$ $M$ unverändert lässt +\subsection{Besondere Leistung der Ungarischen Methode \label{munkres:subsection:malorum}} -Um zu zeigen, dass jede Kante in $M$ nach der Anpassung von $y$ -erhalten bleibt, genügt es zu zeigen, dass für eine beliebige Kante -in $M$ entweder beide Endpunkte oder keiner von ihnen in $Z$ liegen. -Zu diesem Zweck sei $vu$ eine Kante in $M$ von $T$ nach $S$. -Es ist leicht zu sehen, dass wenn $v$ in $Z$ ist, dann muss auch -$u$ in $Z$ sein, da jede Kante in $M$ dicht ist. -Nehmen wir nun an, dass $u$ kein Element von $Z$ und auch $v$ kein -Element von $Z$ ist. -$u$ selbst kann nicht in $R_{S}$ sein, da es der Endpunkt einer -angepassten Kante ist, also muss es einen gerichteten Pfad von engen -Kanten von einem Knoten in $R_{S}$ zu $u$ geben. -Dieser Pfad muss $v$ vermeiden, da es per Annahme nicht in $Z$ ist, -also ist der Knoten, der $u$ in diesem Pfad unmittelbar vorausgeht, -ein anderer Knoten $v$ (ein Element von $T$) und $v$ ein Element -von $u$ ist eine enge Kante von $T$ nach $S$ und ist somit in $M$. -Aber dann enthält $M$ zwei Kanten, die den Knoten $u$ teilen, was -der Tatsache widerspricht, dass $M$ ein Matching ist. -Jede Kante in $M$ hat also entweder beide Endpunkte oder keinen -Endpunkt in $Z$. +Es ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem +in polynomieller Zeit löst. +Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms +wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. + -\subsection{Beweis, dass $y$ ein Potential bleibt +\subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Um zu zeigen, dass y nach der Anpassung ein Potenzial bleibt, genügt -es zu zeigen, dass keine Kante ihr Gesamtpotenzial über ihre Kosten -hinaus erhöht. -Dies ist für Kanten in $M$ bereits durch den vorangegangenen Absatz -bewiesen. -Man betrachtet also eine beliebige Kante $uv$ von $S$ nach $T$. -Wenn $y(u)$ erhöht wird um $\Delta$, dann wird entweder $v\in -\mathbb{Z}_n$ in diesem Fall wird $y(v)$ verringert um $\Delta$, -wobei das Gesamtpotenzial der Kante unverändert bleibt, oder $v\in -T\setminus Z$, wobei die Definition von $\Delta$ garantiert, dass -$y(u)+y(v)+\Delta \le c(u,v)$ -Also $y$ bleibt ein Potential. +\begin{figure} +\centering +\includegraphics[width=14cm]{papers/munkres/figures/beispiel_munkres} +\caption{Händisches Beispiel des Munkres Algorithmus.} +\label{munkres:Vr2} +\end{figure} diff --git a/buch/papers/munkres/teil4.tex b/buch/papers/munkres/teil4.tex index 3d76743..9a27227 100644 --- a/buch/papers/munkres/teil4.tex +++ b/buch/papers/munkres/teil4.tex @@ -3,34 +3,7 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Matrix-Interpretation +\section{- \label{munkres:section:teil4}} -\rhead{Matrix-Interpretation} -Gegeben ist die quadratische Matrix $C=(c_{ij})$ der Grösse $n\times n$. -Ohne Beschränkung der Allgemeinheit werden eine Zuordnung $j -\rightarrow s_j$, $j = 1, \dots, n$ mit minimaler Gesamtsumme -$\sum_{j=1}^{n}c_{s_j,j}$ gesucht, wobei die $s_j$ eine Permutation -von $\{1,\ldots ,n\}$ sind. -Soll die Summe maximiert werden, dann kann $C$ durch $-C$ ersetzt werden. -Die Grundlage dieses Verfahrens ist, dass sich die optimale Zuordnung -unter bestimmten Änderungen der Matrix nicht ändert, sondern nur -der Optimalwert. -Diese Änderungen sind durch Knotenpotentiale bzw.~duale Variablen -\begin{equation} -u_1 u_2,{\dots}, u_n -\end{equation} +\rhead{-} -für die Zeilen und - -\begin{equation}v_1,v_2,\dots,v_n \end{equation} fuer die Spalten angegeben. -Die modifizierte Matrix hat dann die Komponenten $\tilde{c}_{i,j} -= c_{ij} - u_j - v_j$. - -In der Summe über jede kantenmaximale Zuordnung kommt jedes -Knotenpotential genau einmal vor, so dass die Änderung der Zielfunktion -eine Konstante ist. -Sind die Einträge von $C$ nichtnegativ, und sind alle Knotenpotentiale -ebenfalls nichtnegativ, so nennt man die modifizierte Matrix \~{C} -auch eine Reduktion. -Ziel ist, in der reduzierten Matrix möglichst viele Komponenten auf -den Wert Null zu bringen und unter diesen die Zuordnung zu konstruieren. diff --git a/buch/papers/munkres/teil5.tex b/buch/papers/munkres/teil5.tex index f8138f4..b938c50 100644 --- a/buch/papers/munkres/teil5.tex +++ b/buch/papers/munkres/teil5.tex @@ -3,12 +3,6 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Ungarische Methode anhand eines Beispiels +\section{- \label{munkres:section:teil5}} -\rhead{Ungarische Methode anhand eines Beispiels} -\begin{figure} -\centering -\includegraphics[width=14cm]{papers/munkres/figures/beispiel_munkres} -\caption{Händisches Beispiel des Munkres Algorithmus.} -\label{munkres:Vr2} -\end{figure} +\rhead{-} -- cgit v1.2.1 From ef1973fdcb29ad84666ccee58633711afb978629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Tue, 27 Jul 2021 12:45:18 +0200 Subject: fehlendes bild --- buch/papers/munkres/figures/Matrixdarstellung.png | Bin 0 -> 46310 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/munkres/figures/Matrixdarstellung.png (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/Matrixdarstellung.png b/buch/papers/munkres/figures/Matrixdarstellung.png new file mode 100644 index 0000000..91a376d Binary files /dev/null and b/buch/papers/munkres/figures/Matrixdarstellung.png differ -- cgit v1.2.1 From 88c208363cf560043f87c2c83fa251177e74cd1b Mon Sep 17 00:00:00 2001 From: JODBaer Date: Tue, 27 Jul 2021 13:20:05 +0200 Subject: save --- buch/papers/reedsolomon/dtf.tex | 2 +- buch/papers/reedsolomon/idee.tex | 18 +++++------ buch/papers/reedsolomon/tikz/plotfft.tex | 55 +++++++++++++++----------------- 3 files changed, 35 insertions(+), 40 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 62e44cc..ffe98f8 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -53,7 +53,7 @@ Das heisst alle information ist in alle Zahlenvorhanden. \begin{figure} \centering - \resizebox{0.9\textwidth}{!}{ + \resizebox{\textwidth}{!}{ \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} %\input{papers/reedsolomon/images/plotfft.tex} } diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index e18ccd2..519e642 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -22,7 +22,7 @@ Auch eine variante wäre es die Daten nach einem Fehler einfach nochmals zu send Eine Idee ist aus den Daten ein Polynom zu bilden. Diese Polynomfunktion bei bestimmten Werten, ausrechnet und diese Punkte dann überträgt. -Nehmen wir als beisbiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, +Nehmen wir als Beispiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, welche uns dann das Polynom \begin{equation} p(x) @@ -31,21 +31,21 @@ p(x) \label{reedsolomon:equation1} \end{equation} ergeben. -Übertragen werden nun die Werte an den stellen 1, 2, 3\dots 7 dieses Polynomes. +Übertragen werden nun die Werte dieses Polynomes an den Stellen 1, 2, 3\dots 7 dieses Polynomes. Grafisch sieht man dies dann in Abbildung \ref{fig:polynom}, -mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{green}{8}, -\textcolor{green}{15}, \textcolor{green}{26}, -\textcolor{green}{41}, \textcolor{green}{60}, -\textcolor{green}{83}, \textcolor{green}{110})$ -Wenn ein Fehler sich in die Übertragung eingeschlichen hatt, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. +mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, +\textcolor{darkgreen}{15}, \textcolor{darkgreen}{26}, +\textcolor{darkgreen}{41}, \textcolor{darkgreen}{60}, +\textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ +Wenn ein Fehler sich in die Übertragung eingeschlichen hat, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. \subsection{Beispiel} -Für das Beispeil aus der Gleichung \eqref{reedsolomon:equation1}, +Für das Beispiel aus der Gleichung \eqref{reedsolomon:equation1}, ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. Hat es Fehler in der Übertragunge gegeben,(Bei Abbildung \ref{fig:polynom}\textcolor{red}{roten Punkte}) kann man diese erkennen, da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. -(Bei Abbildung \ref{fig:polynom}\textcolor{green}{grünen Punkte}) +(Bei Abbildung \ref{fig:polynom}\textcolor{darkgreen}{grünen Punkte}) Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, gegenüber dem mit 5 Punkten falsch liegt.\ref{fig:polynom} diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex index 3036e14..db141a8 100644 --- a/buch/papers/reedsolomon/tikz/plotfft.tex +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -15,30 +15,27 @@ %--------------------------------------------------------------- %Knote - \matrix[draw = none, column sep=25mm, row sep=2mm]{ + \matrix(m) [draw = none, column sep=25mm, row sep=2mm]{ + \node(signal) [] { \begin{tikzpicture} \begin{axis} [title = {\Large {Signal}}, - xtick={0,20,40,64,80,98},] - \addplot[blue] table[col sep=comma] {tikz/signal.txt}; + xtick={0,20,40,64,80,98}] + \addplot[black] table[col sep=comma] {tikz/signal.txt}; \end{axis} \end{tikzpicture}}; & \node(codiert) [] { - \begin{tikzpicture} - \begin{axis}[title = {\Large {Codiert}}] - \addplot[] table[col sep=comma] {tikz/codiert.txt}; + \begin{tikzpicture}[] + \begin{axis}[ title = {\Large {Codiert \space + \space Fehler}}, + xtick={0,40,60,100}, axis y line*=left] + \addplot[green] table[col sep=comma] {tikz/codiert.txt}; \end{axis} - \end{tikzpicture}}; \\ - - &\node(fehler) [] { - \begin{tikzpicture} - \begin{axis}[scale=0.6, title = {\Large {Fehler}}, - xtick={7,21,75}] - \addplot[red] table[col sep=comma] {tikz/fehler.txt}; + \begin{axis}[xtick={7,21,75}, axis y line*=right] + \addplot[red] table[col sep=comma] {tikz/fehler.txt}; \end{axis} - \end{tikzpicture}};\\ + \end{tikzpicture}}; \\ \node(decodiert) [] { \begin{tikzpicture} @@ -50,7 +47,7 @@ \node(empfangen) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Empfangen}}] - \addplot[] table[col sep=comma] {tikz/empfangen.txt}; + \addplot[green] table[col sep=comma] {tikz/empfangen.txt}; \end{axis} \end{tikzpicture}};\\ @@ -71,26 +68,24 @@ %------------------------------------------------------------- %FFT & IFFT deskription - \draw[thin,gray,dashed] (0,12) to (0,-12); - \node(IFFT) [scale=0.7] at (0,12.3) {IFFT}; - \draw[<-](IFFT.south west)--(IFFT.south east); - \node(FFT) [scale=0.7, above of=IFFT] {FFT}; - \draw[->](FFT.north west)--(FFT.north east); + \draw[thin,gray,dashed] (0,9) to (0,-9); + \node(IFFT) [scale=0.8] at (0,9.3) {IFFT}; + \draw[stealth-](IFFT.south west)--(IFFT.south east); + \node(FFT) [scale=0.8, above of=IFFT] {FFT}; + \draw[-stealth](FFT.north west)--(FFT.north east); - \draw[thick, ->,] (fehler.west)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); + \draw[thick, ->,] (codiert)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); %Arrows - \draw[ultra thick, ->] (signal.east) to (codiert.west); - \draw[ultra thick, ->] (codiert.south) to (fehler.north); - \draw[ultra thick, ->] (fehler.south) to (empfangen.north); - \draw[ultra thick, ->] (empfangen.west) to (decodiert.east); - \draw[ultra thick, ->] (syndrom.east) to (locator.west); - \draw(decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; - \draw[ultra thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + \draw[thick, ->] (signal.east) to (codiert.west); + \draw[thick, ->] (codiert.south) to (empfangen.north); + \draw[thick, ->] (empfangen.west) to (decodiert.east); + \draw[thick, ->] (syndrom.east) to (locator.west); + \draw[thick](decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; + \draw[thick, ->] (zoom) to[out=180, in=90] (syndrom.north); %item \node[circle, draw, fill =lightgray] at (signal.north west) {1}; - \node[circle, draw, fill =lightgray] at (codiert.north west) {2}; - \node[circle, draw, fill =lightgray] at (fehler.north west) {3}; + \node[circle, draw, fill =lightgray] at (codiert.north west) {2+3}; \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; \node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; \node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; -- cgit v1.2.1 From 46eee95c5d39e99535f3790e40994d0eb1167ffe Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 13:56:38 +0200 Subject: =?UTF-8?q?Erl=C3=A4uterung=20zu=20Suchalgorithmen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 389c78c..756f6e1 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -6,6 +6,13 @@ Grundsätzlich können kurze Wege zwischen den Knotenpunkten das Ziel beim Aufba Ziel ist aber ein möglichst wirtschaftliches und optimales Verkehrsnetz. \section{Suchalgorithmen} +Inbesondere bei Graphen in Form von Verkehrsnetzen ist das Finden eines kürzesten Weges von Interesse. Mathematisch betrachtet handelt es sich hierbei um ein Optimierungsproblem, bei dem die Summe der Kantengewichte zwischen zwei Knoten minimiert werden soll. Zu diesem Zweck existieren verschiedene Suchalgorithmen. In den folgenden Abschnitten wird auf eines Auswahl davon eingegangen. Zuvor ist es jedoch notwendig, einige Begriffe und Eigenschaften von Suchalgorithmen zu definieren. + +Einerseits wird zwischen optimalen und nicht-optimalen Algorithmen unterschieden. Ein Suchalgorithmus gilt als optimal, falls er einen günstigsten Pfad zwischen zwei Knoten findet. Es gilt zu beachten, dass im Falle des Vorhandenseins von mehrerern Pfaden mit identischer, minimaler Summe der Kantengewichte zwischen zwei Knoten, mindestens einer dieser Pfade gefunden wird. + +Weiter wird zwischen informierten und uninformierten Algorithmen differenziert. Während uninformierte Suchalgorithmen den Suchraum schematisch auf Basis der Eigenschaften des Graphen absuchen, bis eine günstigste Lösung gefunden wurde, verwenden informierte Suchalgorithmen eine Heuristik zur Abschätzung der Suchrichtung. Oftmals wird bei informierten Algorithmen ein Verlust der Optimalität zugunsten einer verbesserten Rechenzeit in Kauf genommen. Es exisitieren jedoch auch Heurstiken, die eine optimale Lösung gewährleisten. + +Eine besondere Art von Suchalgorithmen stellen die sogenannten Greedy-Algorithmen, zu deutsch gierige Algorithmen, dar. Sie zeichnen sich dadurch aus, dass stets der günstigste Weg verfolgt wird und davon ausgehend der darauffolgende, günstigste Folgezustand ausgewählt wird. Am Beispiel eines Verkehrsnetzes ist somit gewährleistet, dass beim Antreffen des Zielknotens auch der günstigste Pfad gefunden wurde. \subsection{Dijkstra-Algorithmus} Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. -- cgit v1.2.1 From dc45d7a57dfcc3ca4b9a97be4a51216c1a6ce4bc Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:00:00 +0200 Subject: =?UTF-8?q?Erl=C3=A4uterungen=20zu=20Dijkstra?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 756f6e1..4a27737 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -15,35 +15,13 @@ Weiter wird zwischen informierten und uninformierten Algorithmen differenziert. Eine besondere Art von Suchalgorithmen stellen die sogenannten Greedy-Algorithmen, zu deutsch gierige Algorithmen, dar. Sie zeichnen sich dadurch aus, dass stets der günstigste Weg verfolgt wird und davon ausgehend der darauffolgende, günstigste Folgezustand ausgewählt wird. Am Beispiel eines Verkehrsnetzes ist somit gewährleistet, dass beim Antreffen des Zielknotens auch der günstigste Pfad gefunden wurde. \subsection{Dijkstra-Algorithmus} -Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Den Algorithmus hat er im Jahr 1959 erfunden. -Der Algorithmus von Dijkstra ist ein Greedy-Algorithmus (gieriger Algorithmus), der schrittweise einen Folgezustand auswählt, damit beim Zeitpunkt der Wahl der grösste Gewinn bzw. das beste Ergebnis erzielt werden kann. -Vereinfacht wird beim Dijkstra-Algorithmus, ausgehend von einem Startknoten so lange dem kürzesten Pfad gefolgt, bis der Zielknoten erreicht wird. Dabei muss für jeden besuchten Knoten die Kostenfunktion als auch der Pfad dahin (vorheriger Knoten) gespeichert werden. -Dadurch wird hingegen garantiert, dass, wenn der Zielknoten erreicht wird, auch der kürzeste Pfad gefunden wurde. -Grundlegende Voraussetzung für den Dijkstra-Algorithmus ist die strikte Positivität der Kantengewichte. Andernfalls würde ein wiederholtes Ablaufen einer Kante mit negativem Gewicht zu einer stetigen Reduktion der Kostenfunktion führen, was zu einer unendlichen Schlaufe führen würde. - -Gegeben sei ein Netzwerk mit $n$ Knoten und dem Startknoten $a$. -Alle Kanten sind mit $k(i, j)$ bewertet. -Gesucht wird der kürzeste Pfad zwischen dem Startknoten und dem Knoten im Netz. -$D(i)$ ist die kürzeste Distanz vom Startknoten $a$ zum Knoten $i, V(i)$ ist der unmittelbare Vorgängerknoten vom Knoten $i$ auf dem kürzesten Weg vom Startknoten $a$ zum Konten $i$ und die Menge $M$ ist die Menge einer bestimmten Auswahl an Knoten. - -Dabei gilt -\begin{equation}M={a}\end{equation} -\begin{equation}D(a)=0\end{equation} wobei -\begin{equation}D(i)=\infty\end{equation} und -\begin{equation}i \neq a \end{equation} -Ausserdem gilt \begin{equation}V(i)=(-) \text{für alle Knoten $i$}\end{equation}\\ +Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Er gehört zur Klasse der uninformierten Greedy-Algorithmen. Zudem ist die Optimalität bei strikter Positivität des Graphen gewährleistet. +Vorteilhaft ist die einfache Implementierung. Abhängig von der Programmiersprache sind zwischen 30 und 40 Zeilen an Code ausreichend, damit er den kürzesten Pfad zwischen einem Startknoten $a$ und Zielknoten $b$ finden kann. Die für dieses Paper verwendete Funktion verwendet eine abgewandelte Form der gewichteten Adjazenz-Matrix $A$, für welche gilt: +Der Matrix-Eintrag $A_{i,j}$ weist das Kantengewicht der Kante von Knoten $j$ nach $i$ auf. Falls keine Kante zwischen $j$ und $i$ vorhanden ist, beträgt der Eintrag $\infty$. Dies vereinfacht die Implementierung zur Bestimmung des nächst-günstigsten Pfades. +Zudem werden zwei Hilfs-Vektoren $\vec{d}$ und $\vec{b}$ der Länge $n$ eingeführt, wobei $n$ die Anzahl Knoten des Graphen ist. Im Vektoreintrag $\vec{d}(i)$ wird das kummulierte Kantengewicht zur Erreichung von Knoten $i$ vom Startknoten $a$ gespeichert. Der Eintrag $\vec{d}(a)$ beträgt somit $0$. Im Vektor $\vec{b}$ wird zudem vermerkt, falls ein Knoten bereits als Ziel eines kürzesten Pfads gefunden wurde und somit für die weitere Suche nicht mehr berücksichtigt werden muss ($\vec{b}(i)=1$, sonst $\vec{b}(i)=0$). -%THEORIE... -Iteration - -1. Auswahl eines Knotens \begin{equation} K\in M \text{mit} D(K)=D(i);i\in M\end{equation} - -2. Für alle Nachfolger $N(j)$ vom Knoten $K$ gilt: -\begin{equation}D(K) + k_Kj < D(j)\end{equation} dann wird \begin{equation}D(j) = D(K) + k_Kj, V(j) = K\end{equation} gesetzt und somit wird der Knoten $j$ in die Menge $M$ aufgenommen. - -3. Der ausgewählte Knoten \begin{equation}K\in M\text{wird aus der Menge herausgelöscht}\end{equation}\\ -Diese drei Schritte werden so lange wiederholt bis gilt -\begin{equation}M=\{\}\end{equation} +Ausgehend vom Startknoten $a$ wird nun anhand der Matrix $A$ in der Spalte $a$ nach dem kleinsten Eintrag gesucht. Somit wird der Folgeknoten $c$ gefunden. Dieser Vorgang wird nun wiederholt, wobei jedoch sämtliche von Knoten $a$ und $c$ erreichbaren Knoten berücksichtigt werden, die noch nicht besucht wurden. In anderen Worten alle nicht verschwindenden Einträge $i$ der Spalten $a$ und $c$ der Matrix $A$, für welche gilt $\vec{b}(i)=0$. +Diese Iteration wird solang durchgeführt, bis der Folgeknoten dem Zielknoten entspricht. \subsection{A*-Algorithmus} Suchalgorithmen werden nach einfachen (uninformierte) und heuristischen (informierten) Algorithmen unterschieden. Während einfache Algorithmen den Suchraum intuitiv durchsuchen, beziehen heuristische Algorithmen Wissen über den Suchraum mit ein. -- cgit v1.2.1 From 4f04bd2ec5008a375c6d77ec6d01c3bc68a0b976 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:20:52 +0200 Subject: =?UTF-8?q?Erl=C3=A4uterungen=20zu=20A*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 4a27737..6f8f2b7 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -20,27 +20,19 @@ Vorteilhaft ist die einfache Implementierung. Abhängig von der Programmiersprac Der Matrix-Eintrag $A_{i,j}$ weist das Kantengewicht der Kante von Knoten $j$ nach $i$ auf. Falls keine Kante zwischen $j$ und $i$ vorhanden ist, beträgt der Eintrag $\infty$. Dies vereinfacht die Implementierung zur Bestimmung des nächst-günstigsten Pfades. Zudem werden zwei Hilfs-Vektoren $\vec{d}$ und $\vec{b}$ der Länge $n$ eingeführt, wobei $n$ die Anzahl Knoten des Graphen ist. Im Vektoreintrag $\vec{d}(i)$ wird das kummulierte Kantengewicht zur Erreichung von Knoten $i$ vom Startknoten $a$ gespeichert. Der Eintrag $\vec{d}(a)$ beträgt somit $0$. Im Vektor $\vec{b}$ wird zudem vermerkt, falls ein Knoten bereits als Ziel eines kürzesten Pfads gefunden wurde und somit für die weitere Suche nicht mehr berücksichtigt werden muss ($\vec{b}(i)=1$, sonst $\vec{b}(i)=0$). -Ausgehend vom Startknoten $a$ wird nun anhand der Matrix $A$ in der Spalte $a$ nach dem kleinsten Eintrag gesucht. Somit wird der Folgeknoten $c$ gefunden. Dieser Vorgang wird nun wiederholt, wobei jedoch sämtliche von Knoten $a$ und $c$ erreichbaren Knoten berücksichtigt werden, die noch nicht besucht wurden. In anderen Worten alle nicht verschwindenden Einträge $i$ der Spalten $a$ und $c$ der Matrix $A$, für welche gilt $\vec{b}(i)=0$. +Ausgehend vom Startknoten $a$ wird nun anhand der Matrix $A$ in der Spalte $a$ nach dem kleinsten Eintrag gesucht. Somit wird der Folgeknoten $c$ gefunden. Dieser Vorgang wird nun wiederholt, wobei jedoch sämtliche von Knoten $a$ und $c$ erreichbaren Knoten berücksichtigt werden, die noch nicht besucht wurden. In anderen Worten alle nicht verschwindenden Einträge $i$ der Spalten $a$ und $c$ der Matrix $A$, für welche gilt $\vec{b}(i)=0$. Ausschlaggebend für die folgende Auswahl ist die Summe der kummulierten Kantengewichte und des Kantengewichts des nächsten Knotens. Als Beispiel zur Erreichung von Knoten $k$ über Knoten $j$: +\begin{equation} +\vec{d}(k)=\vec{d}(j)+A(k,j) +\end{equation} Diese Iteration wird solang durchgeführt, bis der Folgeknoten dem Zielknoten entspricht. \subsection{A*-Algorithmus} -Suchalgorithmen werden nach einfachen (uninformierte) und heuristischen (informierten) Algorithmen unterschieden. Während einfache Algorithmen den Suchraum intuitiv durchsuchen, beziehen heuristische Algorithmen Wissen über den Suchraum mit ein. -Der A*-Algorithmus geht auf seine Erfinder Peter Hart, Nils Nilsson und Bertram Raphael zurück, die den Algorithmus erstmals im Jahr 1968 beschrieben. -Der A*-Algorithmus ist ein heuristischer Suchalgorithmus, der den kürzesten Pfad zwischen zwei Knoten in einem Graphen mit positiven Kantengewichten berechnet. -Im Gegensatz zu einfachen Suchalgorithmen, wird beim A*-Algorithmus eine Schätzfunktion, die sogenannte Heuristik, verwendet. Dies ermöglicht ein zielgerichtetes Suchen und gleichzeitig wird die Laufzeit verringert. -Ausserdem findet der A*-Algorithmus immer eine optimale Lösung, sofern eine vorhanden ist. -Der A*-Algorithmus gilt als Erweiterung des Dijkstra-Algorithmus. +Der A*-Algorithmus basiert auf dem Dijkstra-Algorithmus, verwendet jedoch eine Heuristik zur Abschätzung der günstigsten Suchrichtung. Somit handelt es sich um einen informierten Greedy-Algorithmus, der abhängig von der verwendeten Heuristik auch optimal sein kann. Er wurde von Peter Hart, Nils Nilsson und Bertram Raphael entwickelt. \subsection{Anwendung A*-Algorithmus} Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch eine optimale Lösung darstellt.\\ -Die Kantengewichte werden für jeden Knoten in Form einer Funktion dargestellt -\begin{equation}f(n)=g(n)\end{equation} mit -\begin{equation}g(n)=\text{Summe aller Kantengewichte vom Startknoten bis n}\end{equation}\\ -Der A*-Algorithmus erweitert die Vorgehensweise des Algorithmus von Dijkstra um die Heuristik $h(n)$, die für jeden Knoten $n$ die geschätzte Entfernung zum Zielknoten beschreibt. -Somit gilt: -\begin{equation}f(n)=g(n)+h(n)\end{equation}\\ -Wie auch der Algorithmus von Dijkstra findet der A*-Algorithmus die optimalste Lösung. +Der A*-Algorithmus unterscheidet sich vom Dijkstra-Algorithmus dahingehend, dass bei der Auswahl des Folgeknotens, nicht nur die Summe der Kantengewichte $\vec{d}(j)+A(k,j)$, sondern zusätzlich die für jeden Knoten definierte Abschätzfunktion $f(k)$ hinzuaddiert wird. Dies passiert jedoch nur bei der \emph{Auswahl} des Folgeknotens. Der Wert von $f(k)$ wird nicht im Eintrag $\vec{d}(k)$ gespeichert. Somit wird gewährleistet, dass der gefundene Pfad, der Summe der Kantengewichte entspricht. \subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. -- cgit v1.2.1 From 0d84587614eb3a91f0a63e0d2ab2eb3926b2f95c Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:21:30 +0200 Subject: subsection "Euklidische Heurstik" verschoben --- buch/papers/verkehr/section1.tex | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6f8f2b7..1a4ecbb 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -34,6 +34,10 @@ Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus v Der A*-Algorithmus unterscheidet sich vom Dijkstra-Algorithmus dahingehend, dass bei der Auswahl des Folgeknotens, nicht nur die Summe der Kantengewichte $\vec{d}(j)+A(k,j)$, sondern zusätzlich die für jeden Knoten definierte Abschätzfunktion $f(k)$ hinzuaddiert wird. Dies passiert jedoch nur bei der \emph{Auswahl} des Folgeknotens. Der Wert von $f(k)$ wird nicht im Eintrag $\vec{d}(k)$ gespeichert. Somit wird gewährleistet, dass der gefundene Pfad, der Summe der Kantengewichte entspricht. +\subsection{Euklidische Heuristik} +Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. +Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. + \subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die günstigsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. @@ -54,9 +58,7 @@ Die aktuelle Gewichtung der Pfade wird mit \begin{equation}d[i, j]=min[d[i,j], d[i,k] + d[k,i]]\end{equation} ermittelt. -\subsection{Euklidische Heuristik} -Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. -Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. + \section{PageRank-Algorithmus} Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc.. -- cgit v1.2.1 From 6437ce5c4a0b281fbd116bc42dbcdc3dce908aaf Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:35:28 +0200 Subject: Anpassungen Folyd-Warshall-Algorithmus --- buch/papers/verkehr/section1.tex | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 1a4ecbb..d34d31e 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -35,24 +35,22 @@ Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus v Der A*-Algorithmus unterscheidet sich vom Dijkstra-Algorithmus dahingehend, dass bei der Auswahl des Folgeknotens, nicht nur die Summe der Kantengewichte $\vec{d}(j)+A(k,j)$, sondern zusätzlich die für jeden Knoten definierte Abschätzfunktion $f(k)$ hinzuaddiert wird. Dies passiert jedoch nur bei der \emph{Auswahl} des Folgeknotens. Der Wert von $f(k)$ wird nicht im Eintrag $\vec{d}(k)$ gespeichert. Somit wird gewährleistet, dass der gefundene Pfad, der Summe der Kantengewichte entspricht. \subsection{Euklidische Heuristik} -Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. -Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. +Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. Unter Verwendung dieser Heuristik gilt der A*-Algorithmus als optimal. + +Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. Hier können hingegen andere Eigenschaften des Netzwerks verwendet werden, auf welche in diesem Paper nicht weiter eingegangen wird. \subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die günstigsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. Ein Kreis (Zyklus) in einem Graphen ist ein Weg, bei dem Start- und Endpunkt den gleichen Knoten aufweisen. Dieser wird negativ, wenn die Summe der gewichteten Kanten kleiner als Null wird.\\ -Der Floyd-Warshall-Algorithmus besteht grundsätzlich aus Floyd's Berechnung der kürzesten Distanzen zwischen zwei Knoten und Warshall's Konstruktion der kürzesten Wege. Werden diese beiden Teilgebiete zusammengefügt, ergibt sich der Floyd-Warshall-Algorithmus. \subsection{Anwendung Floyd-Warshall-Algorithmus} -Wie oben erwähnt, besteht der Floyd-Warshall-Algorithmus aus dem Teil von Floyd zur Berechnung der kürzesten Pfade und dem Teil von Warshall zur Konstruktion der kürzesten Pfade. - %THEORIE... -Als erstes wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W[i, j]$ erstellt. +In einem ersten Schritt wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W[i, j]$ erstellt. Der Algorithmus berechnet danach in einer Hauptschleife alle Knoten $k$ von 1 bis $n$. Dabei versucht er in jeder Iteration alle Wege von $i$ nach $j$ durch die Wege $(i, k)$ und $(k, j)$ zu verbessern. -Falls dieser mögliche Umweg zu einer Verbesserung führt, wird der Algorithmus aktualisiert. +Falls dieser mögliche Umweg zu einer Verbesserung führt, wird der entsprechende Eintrag aktualisiert. Die aktuelle Gewichtung der Pfade wird mit \begin{equation}d[i, j]=min[d[i,j], d[i,k] + d[k,i]]\end{equation} -- cgit v1.2.1 From 04e2c97e5885542ee0beda05da749964a44cf1e1 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:39:06 +0200 Subject: Anpassungen PageRank-Algorithmus --- buch/papers/verkehr/section1.tex | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index d34d31e..5abd107 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -59,11 +59,9 @@ ermittelt. \section{PageRank-Algorithmus} -Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc.. -Beim PageRank-Algorithmus handelt es sich um den Algorithmus von Google, aus dem die Google-Matrix abgeleitet wird. -Die Google-Matrix ist eine immens grosse Matrix mit Millionen Zeilen und Spalten, die für die schnelle und vor allem exakte Bestimmung der PageRanks (Gewichtung) eine grosse Bedeutung hat. -Der PageRank-Algorithmus analysiert und gewichtet beispielsweise die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur. -Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.\\ +Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc. +Beim PageRank-Algorithmus handelt es sich nicht um einen Suchalgorithmus, stattdessen werden Knoten aufgrund der Vernetzung des vorliegenden Graphen bewertet. +Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.\\ Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche gilt. %THEORIE... -- cgit v1.2.1 From 226acbde873393484d3abf3db1160672826d5241 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:45:31 +0200 Subject: Anpassungen Abschnitt Versuchsreihe --- buch/papers/verkehr/section2.tex | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section2.tex b/buch/papers/verkehr/section2.tex index 638d9dd..4de0b24 100644 --- a/buch/papers/verkehr/section2.tex +++ b/buch/papers/verkehr/section2.tex @@ -1,12 +1,12 @@ \section{Versuchsreihe} \label{section:verkehr/versuchsreihe} -Um zwei der vorgestellten Suchalgorithmen zu vergleichen, wurden zwei Versuchsreihen erstellt. Dazu wurden in einem ersten Schritt zufällige Netzwerke generiert und anschliessend der \emph{Dijkstra}-, sowie der \emph{$A^*$}-Algorithmus auf das Netzwerk angewandt. -Dieser Vorgang wurde für die zufällig generierten Netzwerke mit einer Knotenzahl von 10, 20 50, 100, 200, 500 und 1000 je zehnmal repetiert. -Die Anzahl der Knoten im abgesuchten Netzwerk wirkt sich direkt auf die Rechenzeit aus. Der \emph{Dijkstra}-Algorithmus weist eine Zeitkomplexität von $\mathcal{O}(E\log{}V)$ auf, wobei $E$ die Anzahl Kanten (engl. \emph{edges}) und $V$ die Anzahl Knoten (engl. \emph{vertices}) darstellt. -Für den \emph{A*}-Algorithmus ist die Zeitkomplexität einerseits abhängig von der verwendeten Heuristik, andererseits aber auch vom vorliegenden Netzwerk selbst. Aus diesem Grund lässt sich keine defintive Angabe zu $\mathcal{O}$ machen. +Um zwei der vorgestellten Suchalgorithmen zu vergleichen, wurden zwei Versuchsreihen erstellt. Dazu wurden in einem ersten Schritt zufällige Netzwerke generiert und anschliessend der Dijkstra- und der A*-Algorithmus auf das Netzwerk angewandt. +Dieser Vorgang wurde für die zufällig generierten Netzwerke mit einer Knotenzahl von 10, 20 50, 100, 200, 500 und 1000 je zehnmal wiederholt. +Die Anzahl der Knoten im abgesuchten Netzwerk wirkt sich direkt auf die Rechenzeit aus. Der \emph{Dijkstra}-Algorithmus weist eine Zeitkomplexität von $\mathcal{O}(E\log{}V)$ auf, wobei $E$ die Menge der Kanten (engl. \emph{edges}) und $V$ die Menge der Knoten (engl. \emph{vertices}) des Graphen $G$ darstellt. +Für den A*-Algorithmus ist die Zeitkomplexität einerseits abhängig von der verwendeten Heuristik, andererseits aber auch vom vorliegenden Netzwerk selbst. Aus diesem Grund lässt sich keine defintive Angabe zur Zeitkomplexität machen. -Die beiden Versuchsreihen unterscheiden sich zudem dahingehend, dass der Start- und Zielknoten bei der ersten Versuchsreihe im Netzwerk diametral gegenüber liegen. Dadurch gehen viele Knoten verloren, welcher \emph{Dijkstra} als uninformierter Suchalgorithmus absuchen würde. In der zweiten Veruschsreihe werden hingegen Start- un Zielpunkt zufällig im Netzwerk ausgewählt. Es wird deshalb erwwartet, dass die Unterschiede in der Rechenzeit der beiden Algorithmen in der zweiten Versuchsreihe deutlich ausgeprägter sind. +Die beiden Versuchsreihen unterscheiden sich zudem dahingehend, dass der Start- und Zielknoten bei der ersten Versuchsreihe im Netzwerk diametral gegenüber liegen. Dadurch gehen viele Knoten verloren, welcher \emph{Dijkstra} als uninformierter Suchalgorithmus absuchen würde. In der zweiten Veruschsreihe werden hingegen Start- un Zielpunkt zufällig im Netzwerk ausgewählt. Es wird deshalb erwartet, dass die Unterschiede in der Rechenzeit der beiden Algorithmen in der zweiten Versuchsreihe deutlich ausgeprägter sind. \subsection{Einfluss der Knotenzahl auf die Rechenzeit} \label{verkehr:Knotenzahl} @@ -19,9 +19,9 @@ Die beiden Versuchsreihen unterscheiden sich zudem dahingehend, dass der Start- \label{verkehr:Vr1} \end{figure} -In \ref{verkehr:Vr1} ist ersichtlich, dass der Unterschied in der Rechenzeit zwischen \emph{Dijkstra} und \emph{A*} erst aber einer Knotenzahl von ca. $n=500$ merklich ansteigt. Dieses etwas überraschende Resultat ist darauf zurückzuführen, dass bei steigender Knotenzahl die Abweichung des effektiven kürzesten Pfades von der Distanz der Luftlinie abnimmt. +In \ref{verkehr:Vr1} ist ersichtlich, dass der Unterschied in der Rechenzeit zwischen Dijkstra und A* erst ab einer Knotenzahl von ca. $n=500$ merklich ansteigt. Dieses etwas überraschende Resultat ist darauf zurückzuführen, dass bei steigender Knotenzahl die Abweichung des effektiven kürzesten Pfades von der Distanz der Luftlinie abnimmt. Die Effektivität von \emph{A*} mit euklidischer Heuristik ist wiederum grösser, wenn die Abweichung des kürzesten Pfads von der Luftlinie minimal ist. -Bei Betrachtung von \ref{verkehr:pathDifference} wird dies ersichtlich, wobei die relative Abweichung erstaunlicherweise bei einer Knotenzahl von $n=100$ maximal ist und nach $n=500$ nur noch marginal abnimmt. +Abbildung \ref{verkehr:pathDifference} illustriert dies, wobei die relative Abweichung erstaunlicherweise bei einer Knotenzahl von $n=100$ maximal ist und nach $n=500$ nur noch marginal abnimmt. \begin{figure} \centering @@ -36,13 +36,13 @@ Bei Betrachtung von \ref{verkehr:pathDifference} wird dies ersichtlich, wobei di \begin{figure} \centering -\includegraphics[width=12cm]{papers/verkehr/figures/chart_Vr2.png}\\ +\includegraphics[width=12cm]{papers/verkehr/figures/chart_Vr2.png} \caption{Gemessene Rechenzeiten der zweiten Versuchsreihe in Abhängigkeit der Knotenzahl.} \label{verkehr:Vr2} \end{figure} -Zum Vergleich der Resultate in \ref{verkehr:Knotenzahl} zeigt \ref{verkehr:Vr2} die Rechenzeiten der zweiten Versuchsreihe, in welcher die Start- und Zielknoten zufällig im Netzwerk ausgewählt wurden. Einerseits ist eine reduzierte durchschnittliche Rechenzeit festzustellen, was schlicht daran liegt, dass die zufällige Wahl der Knoten dazu führt, dass diese tendenziell weniger weit auseinander liegen.\\ -Des weiteren ist festzustellen, dass sich die Unterschiede der Rechenzeiten zwischen \emph{Dijkstra} und \emph{A*} deutlich früher abzeichnen. Dieses Phänomen lässt sich leicht durch die zielgerichtete Suche des \emph{A*}-Algorithmus erklären. +Zum Vergleich der Resultate in Abschnitt \ref{verkehr:Knotenzahl} zeigt Abbildung \ref{verkehr:Vr2} die Rechenzeiten der zweiten Versuchsreihe, in welcher die Start- und Zielknoten zufällig im Netzwerk ausgewählt wurden. Einerseits ist eine reduzierte durchschnittliche Rechenzeit festzustellen, was daran liegt, dass die zufällige Wahl der Knoten dazu führt, dass diese tendenziell weniger weit auseinander liegen. +Des weiteren ist festzustellen, dass sich die Unterschiede der Rechenzeiten zwischen Dijkstra und A* deutlich früher abzeichnen. Dieses Phänomen lässt sich leicht durch die zielgerichtete Suche des A*-Algorithmus erklären. \begin{figure} \centering @@ -52,4 +52,4 @@ Des weiteren ist festzustellen, dass sich die Unterschiede der Rechenzeiten zwis \label{verkehr:Comparison} \end{figure} -In \ref{verkehr:Comparison} ist ersichtlich, dass bei einem im Netzwerk liegenden Startknoten die zielgerichtete Suche von \emph{A*} deutlich ausgeprägter zum Zuge kommt, als wenn dieser am Rand des Netzwerks liegen würde. +In Abbildung \ref{verkehr:Comparison} ist ersichtlich, dass bei einem im Netzwerk liegenden Startknoten die zielgerichtete Suche von \emph{A*} deutlich ausgeprägter zum Zuge kommt, als wenn dieser am Rand des Netzwerks liegen würde. -- cgit v1.2.1 From 45e525ce336712b0b75d2431b130d09835857382 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:48:46 +0200 Subject: Anpassungen Abschnitt Ausblick --- buch/papers/verkehr/section3.tex | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section3.tex b/buch/papers/verkehr/section3.tex index 99a0d92..9aa8ae4 100644 --- a/buch/papers/verkehr/section3.tex +++ b/buch/papers/verkehr/section3.tex @@ -1,8 +1,9 @@ \section{Ausblick} \subsection{Optimierungsprobleme bei Graphen} -Das Finden eines kürzesten Pfades, sprich die Minimierung der Summe der Kantengewichte, ist nur eines der Optimierungsprobleme, die sich im Bereich von Grafen aufstellen lassen. Verschiedene, ähnliche Problemstellungen lassen sich teilweise mit denselben Algorithmen lösen.\\ -Im Bereich vom Computernetzwerken könnte zum Beispiel die Minimierung der Knotenzahl zur Datenübbertragung von Interesse sein. Dabei lässt sich dieses Problem einfach dadurch lösen, dass dem \emph{Dijkstra}, oder dem \emph{A*}-Algorithmus anstelle der Graph-Matrix (mit Kantengewichten als Einträgen) die Adjazenz-Matrix als Argument übergeben wird. Der gefundene kürzeste Pfad enstpricht der Anzahl benutzter Kanten, bzw. der Anzahl besuchter Knoten. +Das Finden eines kürzesten Pfades, sprich die Minimierung der Summe der Kantengewichte, ist nur eines der Optimierungsprobleme, die sich im Bereich von Graphen aufstellen lassen. Verschiedene, ähnliche Problemstellungen lassen sich teilweise mit denselben Algorithmen lösen. + +Im Bereich vom Computernetzwerken könnte zum Beispiel die Minimierung der Knotenzahl zur Datenübbertragung von Interesse sein. Dabei lässt sich dieses Problem einfach dadurch lösen, dass dem Dijkstra- oder dem A*-Algorithmus anstelle der gewichteten Adjazenz-Matrix (mit Kantengewichten als Einträgen) die ungewichtet Adjazenz-Matrix als Argument übergeben wird. Der gefundene kürzeste Pfad enstpricht der Anzahl benutzter Kanten, bzw. der Anzahl besuchter Knoten. \subsection{Wahl der Heuristik} -Ein grundlegendes Problem bei der Anwendung des \emph{A*} oder ähnlicher informierter Suchalgorithmen ist die Wahl der Heurstik. Bei einem physischen Verkehrsnetz kann bspw. die euklidische Distanz problems ermittelt werde. Bei einem regionalen Netzwerk ist die Annahme eines orthogonalen X-Y-Koordinatenetzes absolut ausreichend. Dies gilt z.B. auch für das Vernessungsnetz der Schweiz\footnote{Die aktuelle Schweizer Referenzsystem LV95 benutzt ein E/N-Koordinatennetz, wobei aufgrund zunehmender Abweichung vom Referenzellipsoid bei grosser Entfernung vom Nullpunkt ein Korrekturfaktor für die Höhe angebracht werden muss.} Bei überregionalen Netzwerken (Beispiel: Flugverbindungen) ist hingegen eine Berechnung im dreidimensionalen Raum, oder vereinfacht als Projektion auf das Geoid notwendig. Anonsten ist der Ablauf bei der Ausführung des Algorithmus allerdings identisch.\\ +Ein grundlegendes Problem bei der Anwendung des A* oder ähnlicher informierter Suchalgorithmen ist die Wahl der Heurstik. Bei einem physischen Verkehrsnetz kann bspw. die euklidische Distanz problems ermittelt werde. Bei einem regionalen Netzwerk ist die Annahme eines orthogonalen X-Y-Koordinatenetzes absolut ausreichend. Dies gilt z.B. auch für das Vernessungsnetz der Schweiz\footnote{Die aktuelle Schweizer Referenzsystem LV95 benutzt ein E/N-Koordinatennetz, wobei aufgrund zunehmender Abweichung vom Referenzellipsoid bei grosser Entfernung vom Nullpunkt ein Korrekturfaktor für die Höhe angebracht werden muss.} Bei überregionalen Netzwerken (Beispiel: Flugverbindungen) ist hingegen eine Berechnung im dreidimensionalen Raum, oder vereinfacht als Projektion auf das Geoid notwendig. Anonsten ist der Ablauf bei der Ausführung des Algorithmus allerdings identisch. In nicht-physischen Netzwerken stellt sich jedoch eine zweite Problematik. Da eine physische Distanz entweder nicht ermittelt werden kann, oder aber nicht ausschlaggebend ist, sind andere Netzwerk-Eigenschaften zur Beurteilung beizuziehen. Die Zuverlässigkeit ist dabei aber in den meisten Fällen nicht vergleichbar hoch, wie bei der euklidischen Heuristik. Oftmals werden deshalb bei derartigen Problem auch Algorithmen angewendet, die eine deutlich optimierte Zeitkomplexität aufweisen, dafür aber nicht mit Sicherheit den effizienstesten Pfad finden. -- cgit v1.2.1 From c3c7a6320004974ba56eb98305b5ac9fa13d4a52 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Tue, 27 Jul 2021 17:10:19 +0200 Subject: save --- buch/papers/reedsolomon/dtf.tex | 20 +++-- buch/papers/reedsolomon/experiments/codiert.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/decodiert.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/empfangen.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/fehler.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/locator.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/signal.txt | 96 ---------------------- buch/papers/reedsolomon/experiments/syndrom.txt | 96 ---------------------- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 60217 -> 59617 bytes buch/papers/reedsolomon/figures/polynom2.pdf | Bin 20327 -> 20327 bytes buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1782700 -> 1828186 bytes buch/papers/reedsolomon/tikz/plotfft.tex | 6 +- 12 files changed, 15 insertions(+), 683 deletions(-) delete mode 100644 buch/papers/reedsolomon/experiments/codiert.txt delete mode 100644 buch/papers/reedsolomon/experiments/decodiert.txt delete mode 100644 buch/papers/reedsolomon/experiments/empfangen.txt delete mode 100644 buch/papers/reedsolomon/experiments/fehler.txt delete mode 100644 buch/papers/reedsolomon/experiments/locator.txt delete mode 100644 buch/papers/reedsolomon/experiments/signal.txt delete mode 100644 buch/papers/reedsolomon/experiments/syndrom.txt (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index ffe98f8..73d0d12 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -7,21 +7,21 @@ \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourientransformation. -Dies wird weder eine erklärung der Forientransorfmation noch ein genauer gebrauch -für den Reed-Solomon-Code. Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. +Dies wird weder eine erklärung der Forientransorfmation noch ein genauer gebrauchfür den Reed-Solomon-Code. +Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. wobei sie dann bei späteren Berchnungen ganz nützlich ist. -\subsection{Diskrete Fourientransformation Zusamenhang +\subsection{Diskrete Fourietransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} -Die Diskrete Fourientransformation ist definiert als +Die Diskrete Fourietransformation ist definiert als \begin{equation} \hat{c}_{k} = \frac{1}{N} \sum_{n=0}^{N-1} {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} - \label{reedsolomon:DFT} + ,\label{reedsolomon:DFT} \end{equation} -, wenn man nun +wenn man nun \begin{equation} w = e^{-\frac{2\pi j}{N} k} @@ -38,8 +38,12 @@ ersetzte, und $N$ konstantbleibt, erhält man was überaust ähnlich zu unserem Polynomidee ist. \subsection{Übertragungsabfolge \label{reedsolomon:subsection:Übertragungsabfolge}} - -\begin{enumerate}[1)] +Der Auftrag ist nun 64 Daten zu übertragen und nach 16 Fehler abzusicheren, +16 Fehler erkennen und rekonstruieren. +Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden. +In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für schritt, +und hier werden die einzelne Schritte erklärt. +\begin{enumerate}[(1)] \item Das Signal hat 64 die Daten, Zahlen welche übertragen werden sollen. Dabei zusätzlich nach 16 Fehler abgesichert, macht insgesamt 96 Übertragungszahlen. \item Nun wurde mittels der schnellen diskreten Fourientransformation diese 96 codiert. diff --git a/buch/papers/reedsolomon/experiments/codiert.txt b/buch/papers/reedsolomon/experiments/codiert.txt deleted file mode 100644 index 4a481d8..0000000 --- a/buch/papers/reedsolomon/experiments/codiert.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,284 -1,131.570790435043 -2,41.9840308053375 -3,12.1189172092243 -4,23.8408857476069 -5,69.1793197789512 -6,24.0186013379153 -7,37.3066577242559 -8,18.2010889773887 -9,12.3214904922455 -10,15.6627133315015 -11,24.5237955316204 -12,32.1114345314062 -13,44.9845039238714 -14,13.5324640263625 -15,10.1736266929292 -16,4.58257569495584 -17,23.217268502288 -18,16.5769107917917 -19,6.89948680823017 -20,4.84567134895776 -21,10.4219666223433 -22,43.6179140616243 -23,35.9073375743642 -24,15.0332963783729 -25,21.7594021268945 -26,23.2496572716993 -27,17.9815599423852 -28,11.3577742151117 -29,38.467599433197 -30,28.3035029562577 -31,9.54321919833388 -32,21.377558326432 -33,17.6292439561917 -34,12.6951848921471 -35,20.0667752354841 -36,22.9097309529208 -37,8.78894645948548 -38,13.360682005498 -39,25.1757616314718 -40,38.0357773686457 -41,18.4633287776253 -42,19.0584505869806 -43,10.8631093309173 -44,12.6147770818983 -45,12.5398140021274 -46,34.901983501949 -47,22.3480442021702 -48,6 -49,22.3480442021702 -50,34.901983501949 -51,12.5398140021274 -52,12.6147770818983 -53,10.8631093309173 -54,19.0584505869806 -55,18.4633287776253 -56,38.0357773686457 -57,25.1757616314718 -58,13.360682005498 -59,8.78894645948548 -60,22.9097309529208 -61,20.0667752354841 -62,12.6951848921471 -63,17.6292439561917 -64,21.377558326432 -65,9.54321919833388 -66,28.3035029562577 -67,38.467599433197 -68,11.3577742151117 -69,17.9815599423852 -70,23.2496572716993 -71,21.7594021268945 -72,15.0332963783729 -73,35.9073375743642 -74,43.6179140616243 -75,10.4219666223433 -76,4.84567134895776 -77,6.89948680823017 -78,16.5769107917917 -79,23.217268502288 -80,4.58257569495584 -81,10.1736266929292 -82,13.5324640263625 -83,44.9845039238714 -84,32.1114345314062 -85,24.5237955316204 -86,15.6627133315015 -87,12.3214904922455 -88,18.2010889773887 -89,37.3066577242559 -90,24.0186013379153 -91,69.1793197789512 -92,23.8408857476069 -93,12.1189172092243 -94,41.9840308053375 -95,131.570790435043 diff --git a/buch/papers/reedsolomon/experiments/decodiert.txt b/buch/papers/reedsolomon/experiments/decodiert.txt deleted file mode 100644 index f6221e6..0000000 --- a/buch/papers/reedsolomon/experiments/decodiert.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,6.05208333333333 -1,6.02602539785853 -2,0.0261327016093151 -3,5.98927158561317 -4,4.019445724874 -5,0.0247005083663722 -6,4.97798278395618 -7,1.95246440445439 -8,0.974000110512201 -9,2.00528527696027 -10,1.00071804528155 -11,1.97630907888264 -12,0.0232923747656228 -13,6.01302820392331 -14,3.03567381915226 -15,5.02435590137329 -16,7.00526061008995 -17,5.00739608089369 -18,5.02211514480064 -19,4.02175864806658 -20,1.00236543833726 -21,4.98147315261261 -22,8.97728828610336 -23,8.98481304394618 -24,2.98958333333333 -25,1.98491220960989 -26,5.97728835934715 -27,5.98144124907561 -28,4.00163839998525 -29,2.02176249296313 -30,9.02210713874162 -31,1.00742763919872 -32,1.00557258081044 -33,1.02435888848794 -34,2.03577412756745 -35,6.01302820392331 -36,5.97917574041123 -37,0.976310374034338 -38,9.00062625447998 -39,7.00515849238528 -40,6.97396416790894 -41,0.95256880864368 -42,8.97794719866783 -43,9.01850701506487 -44,10.0194409579917 -45,8.98926601525997 -46,7.9866590265379 -47,5.02603060999077 -48,2.05208333333333 -49,4.02603841132848 -50,0.986882897867895 -51,0.0177592928994285 -52,9.01944131204563 -53,3.0185365665612 -54,2.97803642439316 -55,2.95243072164649 -56,4.97396651395488 -57,6.00516695947321 -58,0.0143895905726619 -59,7.97630812771393 -60,5.97917574041123 -61,9.01298821331865 -62,3.03567381915226 -63,4.02435609145793 -64,0.0275599094902563 -65,0.0115837187254191 -66,0.025877761014238 -67,0.0224618032819697 -68,0.04410594689944 -69,0.0474504002669341 -70,0.0227694695500626 -71,0.0271436638090525 -72,0.0104166666666667 -73,0.0271436638090523 -74,0.0227694695500608 -75,0.0474504002669343 -76,0.0441059468994397 -77,0.0224618032819701 -78,0.0258777610142379 -79,0.0115837187254183 -80,0.027559909490256 -81,0.0245124379481793 -82,0.0499782237195209 -83,0.0401432022864265 -84,0.0232923747656228 -85,0.0237974288564099 -86,0.0143895905726624 -87,0.0271745729691685 -88,0.0275599094902567 -89,0.0515501672184983 -90,0.0358255004834542 -91,0.024700508366373 -92,0.0210194725405171 -93,0.0177592928994296 -94,0.0261327016093158 -95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/experiments/empfangen.txt b/buch/papers/reedsolomon/experiments/empfangen.txt deleted file mode 100644 index 38c13b0..0000000 --- a/buch/papers/reedsolomon/experiments/empfangen.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,284 -1,131.570790435043 -2,41.9840308053375 -3,12.1189172092243 -4,23.8408857476069 -5,69.1793197789512 -6,23.6290258699579 -7,37.3066577242559 -8,18.2010889773887 -9,12.3214904922455 -10,15.6627133315015 -11,24.5237955316204 -12,32.1114345314062 -13,44.9845039238714 -14,13.5324640263625 -15,10.1736266929292 -16,4.58257569495584 -17,23.217268502288 -18,16.5769107917917 -19,6.89948680823017 -20,5.55320238736303 -21,10.4219666223433 -22,43.6179140616243 -23,35.9073375743642 -24,15.0332963783729 -25,21.7594021268945 -26,23.2496572716993 -27,17.9815599423852 -28,11.3577742151117 -29,38.467599433197 -30,28.3035029562577 -31,9.54321919833388 -32,21.377558326432 -33,17.6292439561917 -34,12.6951848921471 -35,20.0667752354841 -36,22.9097309529208 -37,8.78894645948548 -38,13.360682005498 -39,25.1757616314718 -40,38.0357773686457 -41,18.4633287776253 -42,19.0584505869806 -43,10.8631093309173 -44,12.6147770818983 -45,12.5398140021274 -46,34.901983501949 -47,22.3480442021702 -48,6 -49,22.3480442021702 -50,34.901983501949 -51,12.5398140021274 -52,12.6147770818983 -53,10.8631093309173 -54,19.0584505869806 -55,18.4633287776253 -56,38.0357773686457 -57,25.1757616314718 -58,13.360682005498 -59,8.78894645948548 -60,22.9097309529208 -61,20.0667752354841 -62,12.6951848921471 -63,17.6292439561917 -64,21.377558326432 -65,9.54321919833388 -66,28.3035029562577 -67,38.467599433197 -68,11.3577742151117 -69,17.9815599423852 -70,23.2496572716993 -71,21.7594021268945 -72,15.0332963783729 -73,35.9073375743642 -74,44.6135417384784 -75,10.4219666223433 -76,4.84567134895776 -77,6.89948680823017 -78,16.5769107917917 -79,23.217268502288 -80,4.58257569495584 -81,10.1736266929292 -82,13.5324640263625 -83,44.9845039238714 -84,32.1114345314062 -85,24.5237955316204 -86,15.6627133315015 -87,12.3214904922455 -88,18.2010889773887 -89,37.3066577242559 -90,24.0186013379153 -91,69.1793197789512 -92,23.8408857476069 -93,12.1189172092243 -94,41.9840308053375 -95,131.570790435043 diff --git a/buch/papers/reedsolomon/experiments/fehler.txt b/buch/papers/reedsolomon/experiments/fehler.txt deleted file mode 100644 index 23f1a83..0000000 --- a/buch/papers/reedsolomon/experiments/fehler.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0 -1,0 -2,0 -3,0 -4,0 -5,0 -6,2 -7,0 -8,0 -9,0 -10,0 -11,0 -12,0 -13,0 -14,0 -15,0 -16,0 -17,0 -18,0 -19,0 -20,2 -21,0 -22,0 -23,0 -24,0 -25,0 -26,0 -27,0 -28,0 -29,0 -30,0 -31,0 -32,0 -33,0 -34,0 -35,0 -36,0 -37,0 -38,0 -39,0 -40,0 -41,0 -42,0 -43,0 -44,0 -45,0 -46,0 -47,0 -48,0 -49,0 -50,0 -51,0 -52,0 -53,0 -54,0 -55,0 -56,0 -57,0 -58,0 -59,0 -60,0 -61,0 -62,0 -63,0 -64,0 -65,0 -66,0 -67,0 -68,0 -69,0 -70,0 -71,0 -72,0 -73,0 -74,1 -75,0 -76,0 -77,0 -78,0 -79,0 -80,0 -81,0 -82,0 -83,0 -84,0 -85,0 -86,0 -87,0 -88,0 -89,0 -90,0 -91,0 -92,0 -93,0 -94,0 -95,0 diff --git a/buch/papers/reedsolomon/experiments/locator.txt b/buch/papers/reedsolomon/experiments/locator.txt deleted file mode 100644 index b28988c..0000000 --- a/buch/papers/reedsolomon/experiments/locator.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0.0301224340567056 -1,0.141653026854885 -2,0.138226631799377 -3,0.0339903276086929 -4,0.310585462557496 -5,0.551427312631385 -6,0.628514858396814 -7,0.51102386251559 -8,0.275861355940449 -9,0.0502396354182268 -10,0.090185502547573 -11,0.110759344849756 -12,0.0684618905063001 -13,0.0362855426992259 -14,0.0697096919781468 -15,0.109288539370248 -16,0.0923187999496653 -17,0.0512198536768088 -18,0.274192386987782 -19,0.51349614953654 -20,0.633154426602466 -21,0.553283743533942 -22,0.307840573214514 -23,0.0341664350328392 -24,0.140270857957 -25,0.138527177682831 -26,0.029637547736156 -27,0.0816962563186052 -28,0.0944383203811073 -29,0.0263932110686261 -30,0.0585881348402056 -31,0.0737117341599984 -32,0.0239973937701886 -33,0.0464215468420038 -34,0.0616218854220964 -35,0.0221963086695009 -36,0.0390764778127646 -37,0.0537637218396934 -38,0.0208333333333332 -39,0.0343107696069045 -40,0.0483441215964552 -41,0.0198077862118806 -42,0.0311207395968725 -43,0.0444955089373458 -44,0.0190533549944159 -45,0.0290049795038723 -46,0.0417536642697558 -47,0.0185261550443084 -48,0.0277059929762261 -49,0.0398606084144816 -50,0.0181978813094817 -51,0.0271098219177584 -52,0.0386836665079729 -53,0.0180518611046889 -54,0.0272138992557141 -55,0.0381891287148314 -56,0.0180809085252469 -57,0.0281418959420061 -58,0.0384596362516637 -59,0.0182864418432272 -60,0.0302250788423173 -61,0.0397874837986351 -62,0.0186786556701694 -63,0.0342489348284216 -64,0.0429932815348666 -65,0.0192777878591759 -66,0.0422808966931999 -67,0.0506815964680563 -68,0.0201167847752226 -69,0.0615048274405271 -70,0.0744953894508454 -71,0.021246054596492 -72,0.142602265816215 -73,0.273502052865436 -74,0.325309673287599 -75,0.272705389655349 -76,0.149074257381345 -77,0.0247199397628712 -78,0.0680137859566976 -79,0.075388270873485 -80,0.0273637831604903 -81,0.0407867704453274 -82,0.0632964886441949 -83,0.0309749128751093 -84,0.0315202035072035 -85,0.0627625211892184 -86,0.0360843918243497 -87,0.02794920551495 -88,0.0677921493367236 -89,0.0437167157553067 -90,0.0270640150996317 -91,0.0783380025231622 -92,0.0561293738314281 -93,0.0278742033265809 -94,0.0981443889498639 -95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/experiments/signal.txt b/buch/papers/reedsolomon/experiments/signal.txt deleted file mode 100644 index c4fa5f8..0000000 --- a/buch/papers/reedsolomon/experiments/signal.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,6 -1,6 -2,0 -3,6 -4,4 -5,0 -6,5 -7,2 -8,1 -9,2 -10,1 -11,2 -12,0 -13,6 -14,3 -15,5 -16,7 -17,5 -18,5 -19,4 -20,1 -21,5 -22,9 -23,9 -24,3 -25,2 -26,6 -27,6 -28,4 -29,2 -30,9 -31,1 -32,1 -33,1 -34,2 -35,6 -36,6 -37,1 -38,9 -39,7 -40,7 -41,1 -42,9 -43,9 -44,10 -45,9 -46,8 -47,5 -48,2 -49,4 -50,1 -51,0 -52,9 -53,3 -54,3 -55,3 -56,5 -57,6 -58,0 -59,8 -60,6 -61,9 -62,3 -63,4 -64,0 -65,0 -66,0 -67,0 -68,0 -69,0 -70,0 -71,0 -72,0 -73,0 -74,0 -75,0 -76,0 -77,0 -78,0 -79,0 -80,0 -81,0 -82,0 -83,0 -84,0 -85,0 -86,0 -87,0 -88,0 -89,0 -90,0 -91,0 -92,0 -93,0 -94,0 -95,0 diff --git a/buch/papers/reedsolomon/experiments/syndrom.txt b/buch/papers/reedsolomon/experiments/syndrom.txt deleted file mode 100644 index 8ca9eed..0000000 --- a/buch/papers/reedsolomon/experiments/syndrom.txt +++ /dev/null @@ -1,96 +0,0 @@ -0,0 -1,0 -2,0 -3,0 -4,0 -5,0 -6,0 -7,0 -8,0 -9,0 -10,0 -11,0 -12,0 -13,0 -14,0 -15,0 -16,0 -17,0 -18,0 -19,0 -20,0 -21,0 -22,0 -23,0 -24,0 -25,0 -26,0 -27,0 -28,0 -29,0 -30,0 -31,0 -32,0 -33,0 -34,0 -35,0 -36,0 -37,0 -38,0 -39,0 -40,0 -41,0 -42,0 -43,0 -44,0 -45,0 -46,0 -47,0 -48,0 -49,0 -50,0 -51,0 -52,0 -53,0 -54,0 -55,0 -56,0 -57,0 -58,0 -59,0 -60,0 -61,0 -62,0 -63,0 -64,0.0275599094902563 -65,0.0115837187254191 -66,0.025877761014238 -67,0.0224618032819697 -68,0.04410594689944 -69,0.0474504002669341 -70,0.0227694695500626 -71,0.0271436638090525 -72,0.0104166666666667 -73,0.0271436638090523 -74,0.0227694695500608 -75,0.0474504002669343 -76,0.0441059468994397 -77,0.0224618032819701 -78,0.0258777610142379 -79,0.0115837187254183 -80,0.027559909490256 -81,0.0245124379481793 -82,0.0499782237195209 -83,0.0401432022864265 -84,0.0232923747656228 -85,0.0237974288564099 -86,0.0143895905726624 -87,0.0271745729691685 -88,0.0275599094902567 -89,0.0515501672184983 -90,0.0358255004834542 -91,0.024700508366373 -92,0.0210194725405171 -93,0.0177592928994296 -94,0.0261327016093158 -95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf index 27992c9..c5e21e3 100644 Binary files a/buch/papers/reedsolomon/figures/plotfft.pdf and b/buch/papers/reedsolomon/figures/plotfft.pdf differ diff --git a/buch/papers/reedsolomon/figures/polynom2.pdf b/buch/papers/reedsolomon/figures/polynom2.pdf index ae68385..dd6cdd3 100644 Binary files a/buch/papers/reedsolomon/figures/polynom2.pdf and b/buch/papers/reedsolomon/figures/polynom2.pdf differ diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index 80af280..a984f35 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex index db141a8..14af683 100644 --- a/buch/papers/reedsolomon/tikz/plotfft.tex +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -22,7 +22,7 @@ \begin{axis} [title = {\Large {Signal}}, xtick={0,20,40,64,80,98}] - \addplot[black] table[col sep=comma] {tikz/signal.txt}; + \addplot[blue] table[col sep=comma] {tikz/signal.txt}; \end{axis} \end{tikzpicture}}; & @@ -54,14 +54,14 @@ \node(syndrom) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Syndrom}}] - \addplot[blue] table[col sep=comma] {tikz/syndrom.txt}; + \addplot[black] table[col sep=comma] {tikz/syndrom.txt}; \end{axis} \end{tikzpicture}}; & \node(locator) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Locator}}] - \addplot[] table[col sep=comma] {tikz/locator.txt}; + \addplot[gray] table[col sep=comma] {tikz/locator.txt}; \end{axis} \end{tikzpicture}};\\ }; -- cgit v1.2.1 From a23ef813e263ac2d0f06d734c711517806fa1437 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 20:48:34 +0200 Subject: diverse Anpassungen --- buch/papers/verkehr/section1.tex | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 5abd107..6d05dc0 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -6,25 +6,27 @@ Grundsätzlich können kurze Wege zwischen den Knotenpunkten das Ziel beim Aufba Ziel ist aber ein möglichst wirtschaftliches und optimales Verkehrsnetz. \section{Suchalgorithmen} -Inbesondere bei Graphen in Form von Verkehrsnetzen ist das Finden eines kürzesten Weges von Interesse. Mathematisch betrachtet handelt es sich hierbei um ein Optimierungsproblem, bei dem die Summe der Kantengewichte zwischen zwei Knoten minimiert werden soll. Zu diesem Zweck existieren verschiedene Suchalgorithmen. In den folgenden Abschnitten wird auf eines Auswahl davon eingegangen. Zuvor ist es jedoch notwendig, einige Begriffe und Eigenschaften von Suchalgorithmen zu definieren. +Inbesondere bei Graphen in Form von Verkehrsnetzen ist das Finden eines kürzesten Weges von Interesse. Mathematisch betrachtet handelt es sich hierbei um ein Optimierungsproblem, bei dem die Summe der Kantengewichte zwischen zwei Knoten minimiert werden soll. Zu diesem Zweck existieren verschiedene Suchalgorithmen. In den folgenden Abschnitten wird auf eine Auswahl davon eingegangen. Zuvor ist es jedoch notwendig, einige Begriffe und Eigenschaften von Suchalgorithmen zu definieren. Einerseits wird zwischen optimalen und nicht-optimalen Algorithmen unterschieden. Ein Suchalgorithmus gilt als optimal, falls er einen günstigsten Pfad zwischen zwei Knoten findet. Es gilt zu beachten, dass im Falle des Vorhandenseins von mehrerern Pfaden mit identischer, minimaler Summe der Kantengewichte zwischen zwei Knoten, mindestens einer dieser Pfade gefunden wird. Weiter wird zwischen informierten und uninformierten Algorithmen differenziert. Während uninformierte Suchalgorithmen den Suchraum schematisch auf Basis der Eigenschaften des Graphen absuchen, bis eine günstigste Lösung gefunden wurde, verwenden informierte Suchalgorithmen eine Heuristik zur Abschätzung der Suchrichtung. Oftmals wird bei informierten Algorithmen ein Verlust der Optimalität zugunsten einer verbesserten Rechenzeit in Kauf genommen. Es exisitieren jedoch auch Heurstiken, die eine optimale Lösung gewährleisten. -Eine besondere Art von Suchalgorithmen stellen die sogenannten Greedy-Algorithmen, zu deutsch gierige Algorithmen, dar. Sie zeichnen sich dadurch aus, dass stets der günstigste Weg verfolgt wird und davon ausgehend der darauffolgende, günstigste Folgezustand ausgewählt wird. Am Beispiel eines Verkehrsnetzes ist somit gewährleistet, dass beim Antreffen des Zielknotens auch der günstigste Pfad gefunden wurde. +Eine besondere Art von Suchalgorithmen stellen die sogenannten Greedy-Algorithmen, zu deutsch gierige Algorithmen, dar. Sie zeichnen sich dadurch aus, dass sie stets den zurzeit günstigsten Folgezustand auswählen. Dadurch sind sie in der Regel äusserst effizient, garantieren bei vielen Problemstellungen jedoch keine optimale Lösung. \subsection{Dijkstra-Algorithmus} -Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Er gehört zur Klasse der uninformierten Greedy-Algorithmen. Zudem ist die Optimalität bei strikter Positivität des Graphen gewährleistet. -Vorteilhaft ist die einfache Implementierung. Abhängig von der Programmiersprache sind zwischen 30 und 40 Zeilen an Code ausreichend, damit er den kürzesten Pfad zwischen einem Startknoten $a$ und Zielknoten $b$ finden kann. Die für dieses Paper verwendete Funktion verwendet eine abgewandelte Form der gewichteten Adjazenz-Matrix $A$, für welche gilt: -Der Matrix-Eintrag $A_{i,j}$ weist das Kantengewicht der Kante von Knoten $j$ nach $i$ auf. Falls keine Kante zwischen $j$ und $i$ vorhanden ist, beträgt der Eintrag $\infty$. Dies vereinfacht die Implementierung zur Bestimmung des nächst-günstigsten Pfades. +Der Algorithmus von Dijkstra ist benannt nach seinem Erfinder dem Mathematik- und Informatikprofessor Edsger Dijkstra. Er gehört zur Klasse der uninformierten Greedy-Algorithmen. Zudem ist die Optimalität bei strikt positiven Kantengewichten gewährleistet. +Vorteilhaft ist die einfache Implementierung. Abhängig von der Programmiersprache sind zwischen 30 und 40 Zeilen an Code ausreichend, damit er den kürzesten Pfad zwischen einem Startknoten $a$ und Zielknoten $b$ finden kann. + +Die für dieses Paper verwendete programmierte Funktion (MATLAB) verwendet eine abgewandelte Form der gewichteten Adjazenz-Matrix $A$, für welche gilt: +Der Matrix-Eintrag $A_{i,j}$ enthält das Kantengewicht der Kante von Knoten $j$ nach $i$ auf. Falls keine Kante zwischen $j$ und $i$ vorhanden ist, beträgt der Eintrag $\infty$. Dies vereinfacht die Implementierung zur Bestimmung des nächst-günstigsten Pfades. Zudem werden zwei Hilfs-Vektoren $\vec{d}$ und $\vec{b}$ der Länge $n$ eingeführt, wobei $n$ die Anzahl Knoten des Graphen ist. Im Vektoreintrag $\vec{d}(i)$ wird das kummulierte Kantengewicht zur Erreichung von Knoten $i$ vom Startknoten $a$ gespeichert. Der Eintrag $\vec{d}(a)$ beträgt somit $0$. Im Vektor $\vec{b}$ wird zudem vermerkt, falls ein Knoten bereits als Ziel eines kürzesten Pfads gefunden wurde und somit für die weitere Suche nicht mehr berücksichtigt werden muss ($\vec{b}(i)=1$, sonst $\vec{b}(i)=0$). Ausgehend vom Startknoten $a$ wird nun anhand der Matrix $A$ in der Spalte $a$ nach dem kleinsten Eintrag gesucht. Somit wird der Folgeknoten $c$ gefunden. Dieser Vorgang wird nun wiederholt, wobei jedoch sämtliche von Knoten $a$ und $c$ erreichbaren Knoten berücksichtigt werden, die noch nicht besucht wurden. In anderen Worten alle nicht verschwindenden Einträge $i$ der Spalten $a$ und $c$ der Matrix $A$, für welche gilt $\vec{b}(i)=0$. Ausschlaggebend für die folgende Auswahl ist die Summe der kummulierten Kantengewichte und des Kantengewichts des nächsten Knotens. Als Beispiel zur Erreichung von Knoten $k$ über Knoten $j$: \begin{equation} \vec{d}(k)=\vec{d}(j)+A(k,j) \end{equation} -Diese Iteration wird solang durchgeführt, bis der Folgeknoten dem Zielknoten entspricht. +Diese Iteration wird solange durchgeführt, bis der Folgeknoten dem Zielknoten entspricht. \subsection{A*-Algorithmus} Der A*-Algorithmus basiert auf dem Dijkstra-Algorithmus, verwendet jedoch eine Heuristik zur Abschätzung der günstigsten Suchrichtung. Somit handelt es sich um einen informierten Greedy-Algorithmus, der abhängig von der verwendeten Heuristik auch optimal sein kann. Er wurde von Peter Hart, Nils Nilsson und Bertram Raphael entwickelt. @@ -32,17 +34,22 @@ Der A*-Algorithmus basiert auf dem Dijkstra-Algorithmus, verwendet jedoch eine H \subsection{Anwendung A*-Algorithmus} Wie oben erwähnt basiert der A*-Algorithmus auf dem Shortest-Path-Algorithmus von Dijkstra. Gemäss dem Algorihtmus von Dijkstra werden von einem Startknoten aus die jeweiligen Nachbarknoten, die Nachbarknoten der Nachbarknoten usw. verarbeitet. Die Kantengewichte werden dabei aufsummiert und die Priorität wird auf die Kante gelegt, die das geringste Gewicht aufweist. Mit diesem Verfahren wird sichergestellt, dass die erste gefundene Lösung auch eine optimale Lösung darstellt.\\ -Der A*-Algorithmus unterscheidet sich vom Dijkstra-Algorithmus dahingehend, dass bei der Auswahl des Folgeknotens, nicht nur die Summe der Kantengewichte $\vec{d}(j)+A(k,j)$, sondern zusätzlich die für jeden Knoten definierte Abschätzfunktion $f(k)$ hinzuaddiert wird. Dies passiert jedoch nur bei der \emph{Auswahl} des Folgeknotens. Der Wert von $f(k)$ wird nicht im Eintrag $\vec{d}(k)$ gespeichert. Somit wird gewährleistet, dass der gefundene Pfad, der Summe der Kantengewichte entspricht. +Der A*-Algorithmus unterscheidet sich vom Dijkstra-Algorithmus dahingehend, dass bei der Auswahl des Folgeknotens, nicht nur die Summe der Kantengewichte $\vec{d}(j)+A(k,j)$, sondern zusätzlich die für jeden Knoten definierte Abschätzfunktion $f(k)$ hinzuaddiert wird. Dies passiert jedoch nur bei der \emph{Auswahl} des Folgeknotens. Der Wert von $f(k)$ wird nicht im Eintrag $\vec{d}(k)$ gespeichert. Somit wird gewährleistet, dass der gefundene Pfad, der Summe der Kantengewichte entspricht. Ein Beispiel dafür, wie eine Abschätzfunktion gebildet werden kann findet sich in Abschnitt \ref{sec:verkehr/euklidische} \subsection{Euklidische Heuristik} +\label{sec:verkehr/euklidische} Bei Verkehrsnetzen ist die euklidische Distanz eine gängige und zuverlässige Heurstik. Dabei wird zu den effektiven Reisekosten zum aktuellen Knoten die euklidische Distanz bis zum Zielknoten hinzuaddiert. Dadurch wird die Kostenfunktion konsequent nie überschätzt. Dies stellt eine Voraussetzung an eine zulässige Heuristik dar. Unter Verwendung dieser Heuristik gilt der A*-Algorithmus als optimal. +Bei der euklidischen Heuristik wird die Abschätzfunktion $f(k)$ für jeden Knoten $k$ durch euklidische Distanz zum Zielknoten $b$ gebildet. +\begin{equation} +f(k)=\sqrt{(x_k-x_b)^2+(y_k-y_b)^2} +\end{equation} + Was bei einem physischen Verkehrsnetz einfach zu bewältigen ist, da Koordinaten von Verkehrsnetzen zur Berechnung der Distanz verwendet werden können, ist bei virtuellen Netzwerken (z.B. Servernetzen) entweder nicht möglich, oder nicht relevant. Hier können hingegen andere Eigenschaften des Netzwerks verwendet werden, auf welche in diesem Paper nicht weiter eingegangen wird. \subsection{Floyd-Warshall-Algorithmus} Der Floyd-Warshall-Algorithmus, auch Tripel-Algorithmus genannt, wurde erstmals im Jahr 1962 von seinen Namensgebern Robert Floyd und Stephen Warshall vorgestellt. -Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die günstigsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph aber keinen negativen Kreis (Zyklus) aufweist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. -Ein Kreis (Zyklus) in einem Graphen ist ein Weg, bei dem Start- und Endpunkt den gleichen Knoten aufweisen. Dieser wird negativ, wenn die Summe der gewichteten Kanten kleiner als Null wird.\\ +Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er ermittelt aber nicht nur die Distanz zwischen zwei Knoten, sondern berechnet die kürzesten Wege zwischen allen Knotenpaaren eines gewichteten Graphen. Somit werden die günstigsten Wege zwischen allen Paaren von Knoten berechnet. Der Floyd-Warhshall-Algrithmus kann ausserdem mit negativen Kantengewichten umgehen, sofern der Graph keinen negativen Kreis (Zyklus) aufweist. Ein Kreis, sprich ein Weg mit identischem Start- und Zielknoten, ist negativ, falls die Summe der Kantengewichte des Weges kleiner als null ist. Ist dies der Fall, führt der Algorithmus zu einem falschen Ergebnis. \subsection{Anwendung Floyd-Warshall-Algorithmus} @@ -53,7 +60,7 @@ Dabei versucht er in jeder Iteration alle Wege von $i$ nach $j$ durch die Wege $ Falls dieser mögliche Umweg zu einer Verbesserung führt, wird der entsprechende Eintrag aktualisiert. Die aktuelle Gewichtung der Pfade wird mit -\begin{equation}d[i, j]=min[d[i,j], d[i,k] + d[k,i]]\end{equation} +\begin{equation}d[i, j]=\min[d[i,j], d[i,k] + d[k,i]]\end{equation} ermittelt. @@ -62,10 +69,7 @@ ermittelt. Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc. Beim PageRank-Algorithmus handelt es sich nicht um einen Suchalgorithmus, stattdessen werden Knoten aufgrund der Vernetzung des vorliegenden Graphen bewertet. Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.\\ -Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche gilt. - -%THEORIE... -Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseinander, wie eine Suchmaschine wie Google Suchresultate bewertet und somit sortieren soll. Öfters aufgerufene Resultate sollen schliesslich höher gewichtet werden. Dabei wird angenommen, dass eine Website populärer ist, je mehr andere Websites darauf verweisen. +Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche folgendes gilt: \begin{equation} A_{i,j}=\left\{ \begin{matrix} @@ -75,13 +79,17 @@ A_{i,j}=\left\{ \begin{matrix} \label{verkehr:Adja} \end{equation} +%THEORIE... +Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseinander, wie eine Suchmaschine wie Google Suchresultate bewertet und somit sortieren soll. Öfters aufgerufene Resultate sollen schliesslich höher gewichtet werden. Dabei wird angenommen, dass eine Website populärer ist, je mehr andere Websites darauf verweisen. + + -Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1...n\right\}\end{equation} +Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dot n\right\}\end{equation} Beim PageRank-Algorithmus wird eine abgewandelte Form der Adjazenz-Matrix verwendet. Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt. \begin{equation} P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \end{equation} Anschliessend multipliziert man diese Matrix $P$ mit einem Spaltenvektor $\Vec{r_0}$ mit $n$ Einträgen, für welchen gilt: -\begin{equation} \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1...n\right\} \end{equation} +\begin{equation} \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dot n\right\} \end{equation} Dieser Vektor stellt ein neutrales Ranking dar. Alle Knoten werden gleich gewichtet. Dadurch erhält man wiederum einen $n$-zeiligen Spaltenvektor $\Vec{r_1}$, der das "erste" Ranking darstellt. Durch Multiplikation der ursprünglichen Matrix $P$ mit dem 1. Ranking-Vektor $\Vec{r_1}$ wird auf Basis des ersten Rankings ein zweites erstellt. \begin{equation} \Vec{r_2} = P\cdot\Vec{r_1} = P\cdot(P\cdot\Vec{r_0}) = P^2\cdot\Vec{r_0}\end{equation} -- cgit v1.2.1 From c1d43d16b948505cc25d8eb740a393170a28a7f9 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 20:51:44 +0200 Subject: diverse Anpassungen --- buch/papers/verkehr/section1.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6d05dc0..416e311 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -87,12 +87,12 @@ Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseina Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dot n\right\}\end{equation} Beim PageRank-Algorithmus wird eine abgewandelte Form der Adjazenz-Matrix verwendet. Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt. -\begin{equation} P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \end{equation} +\[ P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \] Anschliessend multipliziert man diese Matrix $P$ mit einem Spaltenvektor $\Vec{r_0}$ mit $n$ Einträgen, für welchen gilt: -\begin{equation} \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dot n\right\} \end{equation} +\[ \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dot n\right\} \] Dieser Vektor stellt ein neutrales Ranking dar. Alle Knoten werden gleich gewichtet. -Dadurch erhält man wiederum einen $n$-zeiligen Spaltenvektor $\Vec{r_1}$, der das "erste" Ranking darstellt. Durch Multiplikation der ursprünglichen Matrix $P$ mit dem 1. Ranking-Vektor $\Vec{r_1}$ wird auf Basis des ersten Rankings ein zweites erstellt. -\begin{equation} \Vec{r_2} = P\cdot\Vec{r_1} = P\cdot(P\cdot\Vec{r_0}) = P^2\cdot\Vec{r_0}\end{equation} +Dadurch erhält man wiederum einen $n$-zeiligen Spaltenvektor $\Vec{r_1}$, der das ``erste" Ranking darstellt. Durch Multiplikation der ursprünglichen Matrix $P$ mit dem 1. Ranking-Vektor $\Vec{r_1}$ wird auf Basis des ersten Rankings ein zweites erstellt. +\[ \Vec{r_2} = P\cdot\Vec{r_1} = P\cdot(P\cdot\Vec{r_0}) = P^2\cdot\Vec{r_0}\] somit \begin{equation} \Vec{r_i} = P^i\cdot\Vec{r_0}\end{equation} -Der Vektor $\Vec{r_i}$ konvergiert zu einem Eigenvektor von $P$ und stellt das abschliessende Ranking dar. +Der Vektor $\Vec{r_i}$ konvergiert zu einem Eigenvektor von $P$ der das abschliessende Ranking darstellt. -- cgit v1.2.1 From 16084eb844ae3595fc1799feab78b96d0c977306 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Tue, 27 Jul 2021 20:52:46 +0200 Subject: diverse Anpassungen --- buch/papers/verkehr/section2.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section2.tex b/buch/papers/verkehr/section2.tex index 4de0b24..527885e 100644 --- a/buch/papers/verkehr/section2.tex +++ b/buch/papers/verkehr/section2.tex @@ -3,8 +3,8 @@ Um zwei der vorgestellten Suchalgorithmen zu vergleichen, wurden zwei Versuchsreihen erstellt. Dazu wurden in einem ersten Schritt zufällige Netzwerke generiert und anschliessend der Dijkstra- und der A*-Algorithmus auf das Netzwerk angewandt. Dieser Vorgang wurde für die zufällig generierten Netzwerke mit einer Knotenzahl von 10, 20 50, 100, 200, 500 und 1000 je zehnmal wiederholt. -Die Anzahl der Knoten im abgesuchten Netzwerk wirkt sich direkt auf die Rechenzeit aus. Der \emph{Dijkstra}-Algorithmus weist eine Zeitkomplexität von $\mathcal{O}(E\log{}V)$ auf, wobei $E$ die Menge der Kanten (engl. \emph{edges}) und $V$ die Menge der Knoten (engl. \emph{vertices}) des Graphen $G$ darstellt. -Für den A*-Algorithmus ist die Zeitkomplexität einerseits abhängig von der verwendeten Heuristik, andererseits aber auch vom vorliegenden Netzwerk selbst. Aus diesem Grund lässt sich keine defintive Angabe zur Zeitkomplexität machen. +Die Anzahl der Knoten im abgesuchten Netzwerk wirkt sich direkt auf die Rechenzeit aus. Der \emph{Dijkstra}-Algorithmus weist eine Zeitkomplexität von $\mathcal{O}(|E|\log{}|V|)$ auf, wobei $E$ die Menge der Kanten (engl. \emph{edges}) und $V$ die Menge der Knoten (engl. \emph{vertices}) des Graphen $G$ darstellt. +Für den A*-Algorithmus ist die Zeitkomplexität einerseits abhängig von der verwendeten Heuristik, andererseits aber auch vom vorliegenden Netzwerk selbst. Aus diesem Grund lässt sich keine definitive Angabe zur Zeitkomplexität machen. Die beiden Versuchsreihen unterscheiden sich zudem dahingehend, dass der Start- und Zielknoten bei der ersten Versuchsreihe im Netzwerk diametral gegenüber liegen. Dadurch gehen viele Knoten verloren, welcher \emph{Dijkstra} als uninformierter Suchalgorithmus absuchen würde. In der zweiten Veruschsreihe werden hingegen Start- un Zielpunkt zufällig im Netzwerk ausgewählt. Es wird deshalb erwartet, dass die Unterschiede in der Rechenzeit der beiden Algorithmen in der zweiten Versuchsreihe deutlich ausgeprägter sind. -- cgit v1.2.1 From 3875ac2b8df9145a66e9f6fcf34e77eb3bc2d072 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 27 Jul 2021 22:01:05 +0200 Subject: added first part of paper and code --- buch/papers/multiplikation/Makefile | 0 buch/papers/multiplikation/Makefile.inc | 7 +- buch/papers/multiplikation/code/Figure_1.png | Bin 0 -> 144173 bytes buch/papers/multiplikation/code/MM | Bin 0 -> 26848 bytes buch/papers/multiplikation/code/MM.c | 465 + buch/papers/multiplikation/code/MM.py | 311 + .../code/__pycache__/MM.cpython-38.pyc | Bin 0 -> 4160 bytes buch/papers/multiplikation/code/c_matrix.h | 101 + buch/papers/multiplikation/code/c_meas_1024.pdf | Bin 0 -> 16748 bytes buch/papers/multiplikation/code/c_meas_128.pdf | Bin 0 -> 16454 bytes buch/papers/multiplikation/code/c_meas_16.pdf | Bin 0 -> 16376 bytes buch/papers/multiplikation/code/c_meas_2048.pdf | Bin 0 -> 16281 bytes buch/papers/multiplikation/code/c_meas_256.pdf | Bin 0 -> 15286 bytes buch/papers/multiplikation/code/c_meas_32.pdf | Bin 0 -> 15163 bytes buch/papers/multiplikation/code/c_meas_4096.pdf | Bin 0 -> 15865 bytes buch/papers/multiplikation/code/c_meas_512.pdf | Bin 0 -> 15472 bytes buch/papers/multiplikation/code/c_meas_64.pdf | Bin 0 -> 16358 bytes buch/papers/multiplikation/code/c_meas_8.pdf | Bin 0 -> 16766 bytes buch/papers/multiplikation/code/helper_class.py | 105 + buch/papers/multiplikation/code/meas/MM.txt | 12 + buch/papers/multiplikation/code/meas/MM_dc.txt | 12 + buch/papers/multiplikation/code/meas/blas.txt | 12 + buch/papers/multiplikation/code/meas/strassen.txt | 12 + .../multiplikation/code/meas/test/4096/MM.txt | 12 + .../code/meas/test/4096/strassen.txt | 12 + buch/papers/multiplikation/code/meas/test/MM.txt | 14900 +++++++++++++++++++ buch/papers/multiplikation/code/meas/test/blas.txt | 14900 +++++++++++++++++++ .../multiplikation/code/meas/test/winograd.txt | 14900 +++++++++++++++++++ buch/papers/multiplikation/code/meas/winograd.txt | 11 + buch/papers/multiplikation/code/meas_1024.pdf | Bin 0 -> 17660 bytes buch/papers/multiplikation/code/meas_1024.txt | 6 + buch/papers/multiplikation/code/meas_128.pdf | Bin 0 -> 17961 bytes buch/papers/multiplikation/code/meas_128.txt | 6 + buch/papers/multiplikation/code/meas_16.pdf | Bin 0 -> 17766 bytes buch/papers/multiplikation/code/meas_16.txt | 6 + buch/papers/multiplikation/code/meas_256.pdf | Bin 0 -> 18067 bytes buch/papers/multiplikation/code/meas_256.txt | 6 + buch/papers/multiplikation/code/meas_32.pdf | Bin 0 -> 17078 bytes buch/papers/multiplikation/code/meas_32.txt | 6 + buch/papers/multiplikation/code/meas_512.pdf | Bin 0 -> 18028 bytes buch/papers/multiplikation/code/meas_512.txt | 6 + buch/papers/multiplikation/code/meas_64.pdf | Bin 0 -> 17678 bytes buch/papers/multiplikation/code/meas_64.txt | 6 + buch/papers/multiplikation/code/meas_8.pdf | Bin 0 -> 18400 bytes buch/papers/multiplikation/code/meas_8.txt | 6 + buch/papers/multiplikation/code/test.tex | 92 + buch/papers/multiplikation/einlteung.tex | 52 + buch/papers/multiplikation/images/bigo.pdf | Bin 0 -> 24288 bytes buch/papers/multiplikation/images/bigo.tex | 107 + .../multiplikation/images/mm_visualisation.pdf | Bin 0 -> 21665 bytes .../multiplikation/images/mm_visualisation.tex | 45 + buch/papers/multiplikation/images/strassen.pdf | Bin 0 -> 15850 bytes buch/papers/multiplikation/images/strassen.tex | 140 + buch/papers/multiplikation/loesungsmethoden.tex | 309 + buch/papers/multiplikation/main.tex | 34 +- buch/papers/multiplikation/packages.tex | 0 buch/papers/multiplikation/papers/Strassen_GPU.pdf | Bin 0 -> 254508 bytes .../papers/Strassen_original_1969.pdf | Bin 0 -> 151265 bytes .../papers/multiplikation/papers/assay_fast_MM.pdf | Bin 0 -> 484352 bytes .../multiplikation/papers/strassen_video.txt | 1 + .../multiplikation/papers/winograd_original.pdf | Bin 0 -> 533604 bytes buch/papers/multiplikation/presentation/common.tex | 79 + .../multiplikation/presentation/presentation.nav | 59 + .../multiplikation/presentation/presentation.pdf | Bin 0 -> 717544 bytes .../multiplikation/presentation/presentation.snm | 0 .../multiplikation/presentation/presentation.tex | 12 + .../multiplikation/presentation/slides/algo.tex | 111 + .../multiplikation/presentation/slides/bigO.tex | 251 + .../multiplikation/presentation/slides/blas.tex | 18 + .../presentation/slides/conclusuion.tex | 0 .../multiplikation/presentation/slides/logo.pdf | Bin 0 -> 8987 bytes .../multiplikation/presentation/slides/meas.tex | 42 + .../multiplikation/presentation/slides/nn.tex | 97 + .../multiplikation/presentation/slides/parcomp.tex | 66 + .../multiplikation/presentation/slides/slides.tex | 15 + .../presentation/slides/strassen.tex | 429 + .../multiplikation/presentation/tikz/algo.pdf | Bin 0 -> 33396 bytes .../multiplikation/presentation/tikz/algo.tex | 52 + buch/papers/multiplikation/problemstellung.tex | 104 + buch/papers/multiplikation/references.bib | 30 + buch/papers/multiplikation/teil0.tex | 22 - buch/papers/multiplikation/teil1.tex | 55 - buch/papers/multiplikation/teil2.tex | 40 - buch/papers/multiplikation/teil3.tex | 40 - .../multiplikation/tikz_formulas/algo.fdb_latexmk | 254 + buch/papers/multiplikation/tikz_formulas/algo.fls | 438 + buch/papers/multiplikation/tikz_formulas/algo.pdf | Bin 0 -> 33785 bytes buch/papers/multiplikation/tikz_formulas/algo.tex | 131 + .../tikz_formulas/algo_graph.fdb_latexmk | 245 + .../multiplikation/tikz_formulas/algo_graph.fls | 485 + .../multiplikation/tikz_formulas/algo_graph.pdf | Bin 0 -> 15850 bytes .../multiplikation/tikz_formulas/algo_graph.tex | 140 + 92 files changed, 49628 insertions(+), 187 deletions(-) mode change 100644 => 100755 buch/papers/multiplikation/Makefile mode change 100644 => 100755 buch/papers/multiplikation/Makefile.inc create mode 100755 buch/papers/multiplikation/code/Figure_1.png create mode 100755 buch/papers/multiplikation/code/MM create mode 100755 buch/papers/multiplikation/code/MM.c create mode 100644 buch/papers/multiplikation/code/MM.py create mode 100644 buch/papers/multiplikation/code/__pycache__/MM.cpython-38.pyc create mode 100644 buch/papers/multiplikation/code/c_matrix.h create mode 100644 buch/papers/multiplikation/code/c_meas_1024.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_128.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_16.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_2048.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_256.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_32.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_4096.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_512.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_64.pdf create mode 100644 buch/papers/multiplikation/code/c_meas_8.pdf create mode 100755 buch/papers/multiplikation/code/helper_class.py create mode 100644 buch/papers/multiplikation/code/meas/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/MM_dc.txt create mode 100644 buch/papers/multiplikation/code/meas/blas.txt create mode 100644 buch/papers/multiplikation/code/meas/strassen.txt create mode 100644 buch/papers/multiplikation/code/meas/test/4096/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/test/4096/strassen.txt create mode 100644 buch/papers/multiplikation/code/meas/test/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/test/blas.txt create mode 100644 buch/papers/multiplikation/code/meas/test/winograd.txt create mode 100644 buch/papers/multiplikation/code/meas/winograd.txt create mode 100644 buch/papers/multiplikation/code/meas_1024.pdf create mode 100644 buch/papers/multiplikation/code/meas_1024.txt create mode 100644 buch/papers/multiplikation/code/meas_128.pdf create mode 100644 buch/papers/multiplikation/code/meas_128.txt create mode 100644 buch/papers/multiplikation/code/meas_16.pdf create mode 100644 buch/papers/multiplikation/code/meas_16.txt create mode 100644 buch/papers/multiplikation/code/meas_256.pdf create mode 100644 buch/papers/multiplikation/code/meas_256.txt create mode 100644 buch/papers/multiplikation/code/meas_32.pdf create mode 100644 buch/papers/multiplikation/code/meas_32.txt create mode 100644 buch/papers/multiplikation/code/meas_512.pdf create mode 100644 buch/papers/multiplikation/code/meas_512.txt create mode 100644 buch/papers/multiplikation/code/meas_64.pdf create mode 100644 buch/papers/multiplikation/code/meas_64.txt create mode 100644 buch/papers/multiplikation/code/meas_8.pdf create mode 100644 buch/papers/multiplikation/code/meas_8.txt create mode 100644 buch/papers/multiplikation/code/test.tex create mode 100755 buch/papers/multiplikation/einlteung.tex create mode 100644 buch/papers/multiplikation/images/bigo.pdf create mode 100644 buch/papers/multiplikation/images/bigo.tex create mode 100644 buch/papers/multiplikation/images/mm_visualisation.pdf create mode 100644 buch/papers/multiplikation/images/mm_visualisation.tex create mode 100644 buch/papers/multiplikation/images/strassen.pdf create mode 100644 buch/papers/multiplikation/images/strassen.tex create mode 100755 buch/papers/multiplikation/loesungsmethoden.tex mode change 100644 => 100755 buch/papers/multiplikation/main.tex mode change 100644 => 100755 buch/papers/multiplikation/packages.tex create mode 100755 buch/papers/multiplikation/papers/Strassen_GPU.pdf create mode 100755 buch/papers/multiplikation/papers/Strassen_original_1969.pdf create mode 100755 buch/papers/multiplikation/papers/assay_fast_MM.pdf create mode 100755 buch/papers/multiplikation/papers/strassen_video.txt create mode 100755 buch/papers/multiplikation/papers/winograd_original.pdf create mode 100644 buch/papers/multiplikation/presentation/common.tex create mode 100644 buch/papers/multiplikation/presentation/presentation.nav create mode 100644 buch/papers/multiplikation/presentation/presentation.pdf create mode 100644 buch/papers/multiplikation/presentation/presentation.snm create mode 100644 buch/papers/multiplikation/presentation/presentation.tex create mode 100644 buch/papers/multiplikation/presentation/slides/algo.tex create mode 100644 buch/papers/multiplikation/presentation/slides/bigO.tex create mode 100644 buch/papers/multiplikation/presentation/slides/blas.tex create mode 100644 buch/papers/multiplikation/presentation/slides/conclusuion.tex create mode 100644 buch/papers/multiplikation/presentation/slides/logo.pdf create mode 100644 buch/papers/multiplikation/presentation/slides/meas.tex create mode 100644 buch/papers/multiplikation/presentation/slides/nn.tex create mode 100644 buch/papers/multiplikation/presentation/slides/parcomp.tex create mode 100644 buch/papers/multiplikation/presentation/slides/slides.tex create mode 100644 buch/papers/multiplikation/presentation/slides/strassen.tex create mode 100644 buch/papers/multiplikation/presentation/tikz/algo.pdf create mode 100644 buch/papers/multiplikation/presentation/tikz/algo.tex create mode 100755 buch/papers/multiplikation/problemstellung.tex mode change 100644 => 100755 buch/papers/multiplikation/references.bib delete mode 100644 buch/papers/multiplikation/teil0.tex delete mode 100644 buch/papers/multiplikation/teil1.tex delete mode 100644 buch/papers/multiplikation/teil2.tex delete mode 100644 buch/papers/multiplikation/teil3.tex create mode 100644 buch/papers/multiplikation/tikz_formulas/algo.fdb_latexmk create mode 100644 buch/papers/multiplikation/tikz_formulas/algo.fls create mode 100644 buch/papers/multiplikation/tikz_formulas/algo.pdf create mode 100755 buch/papers/multiplikation/tikz_formulas/algo.tex create mode 100644 buch/papers/multiplikation/tikz_formulas/algo_graph.fdb_latexmk create mode 100644 buch/papers/multiplikation/tikz_formulas/algo_graph.fls create mode 100755 buch/papers/multiplikation/tikz_formulas/algo_graph.pdf create mode 100755 buch/papers/multiplikation/tikz_formulas/algo_graph.tex (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/Makefile b/buch/papers/multiplikation/Makefile old mode 100644 new mode 100755 diff --git a/buch/papers/multiplikation/Makefile.inc b/buch/papers/multiplikation/Makefile.inc old mode 100644 new mode 100755 index b78d67e..074020f --- a/buch/papers/multiplikation/Makefile.inc +++ b/buch/papers/multiplikation/Makefile.inc @@ -7,8 +7,7 @@ dependencies-multiplikation = \ papers/multiplikation/packages.tex \ papers/multiplikation/main.tex \ papers/multiplikation/references.bib \ - papers/multiplikation/teil0.tex \ - papers/multiplikation/teil1.tex \ - papers/multiplikation/teil2.tex \ - papers/multiplikation/teil3.tex + papers/multiplikation/einlteung.tex \ + papers/multiplikation/loesungsmethoden.tex \ + papers/multiplikation/problemstellung.tex diff --git a/buch/papers/multiplikation/code/Figure_1.png b/buch/papers/multiplikation/code/Figure_1.png new file mode 100755 index 0000000..9def15a Binary files /dev/null and b/buch/papers/multiplikation/code/Figure_1.png differ diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM new file mode 100755 index 0000000..f07985f Binary files /dev/null and b/buch/papers/multiplikation/code/MM differ diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c new file mode 100755 index 0000000..04c4dab --- /dev/null +++ b/buch/papers/multiplikation/code/MM.c @@ -0,0 +1,465 @@ +#include +#include +#include +#include +#include +#include "c_matrix.h" +#include +#include + +void MM(int *A, int *B, int *C, int n); +void openMP_MM(int *A, int *B, int *C, int n); +void winograd(int *A, int *B, int *C, int n); +int winograd_inner(int *a, int *b, int n); +void run_algo(void (*algo)(), char alog_name[], int print); +void run_algo_cblas(int print); +void MM_dc(int *A, int *B, int *C, int n); +void strassen(int *A, int *B, int *C, int n); +void printMatrix(int *C, int n); +void printMatrix_double(double *C, int n); +void split(int *in, int *out, int n, int col, int row); +void join(int *in, int *out, int n, int col, int row); +void add(int *A, int *B, int *C, int n); +void sub(int *A, int *B, int *C, int n); +void multiply(int *A, int *B, int *C, int n); + +int main() { + // omp_set_dynamic(0); + // 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); + + return 0; +} + +void MM(int *A, int *B, int *C, int n) { + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + int sum = 0; + for (int k = 0; k < n; ++k) { + sum += (*((A + i * n) + k)) * (*((B + k * n) + j)); + } + *((C + i * n) + j) = sum; + } + } +} + +int winograd_inner(int *a, int *b, int n){ + int ab = 0; + if(n%2==0) + { + int xi = 0; + int etha = 0; + for(int i = 0; i +const int A0[][2] = + { + {-15,68}, + {49,86} + }; +const int B0[][2] = + { + {33,73}, + {38,-76} + }; +const double dB0[][2] = + { + {33,73}, + {38,-76} + }; +const double dA0[][2] = + { + {-15,68}, + {49,86} + }; +const int A1[][4] = + { + {75,-38,-32,-65}, + {37,74,-31,29}, + {15,-62,-20,-20}, + {-31,-35,-89,47} + }; +const int B1[][4] = + { + {71,90,78,-98}, + {4,63,12,-47}, + {11,-44,75,-69}, + {95,-15,64,23} + }; +const double dB1[][4] = + { + {71,90,78,-98}, + {4,63,12,-47}, + {11,-44,75,-69}, + {95,-15,64,23} + }; +const double dA1[][4] = + { + {75,-38,-32,-65}, + {37,74,-31,29}, + {15,-62,-20,-20}, + {-31,-35,-89,47} + }; +const int A2[][8] = + { + {80,42,3,-16,6,55,87,16}, + {-99,-14,21,-1,-94,-56,91,10}, + {-47,-55,-59,62,12,-53,87,-65}, + {-60,94,-67,23,-62,33,-63,-72}, + {12,-75,16,21,22,-37,1,16}, + {-100,-99,82,-66,2,64,-13,44}, + {59,-100,-90,8,36,-24,18,88}, + {73,-58,75,-100,-19,-29,85,-19} + }; +const int B2[][8] = + { + {-61,88,69,49,-53,47,73,45}, + {16,14,-88,-11,-67,-73,-20,43}, + {-60,-63,26,32,-29,18,-44,-69}, + {1,21,21,38,7,-100,-61,-76}, + {-90,95,-99,88,49,-80,27,-36}, + {24,-12,-47,-7,29,15,52,37}, + {-98,-76,29,76,-41,-75,97,79}, + {62,-90,-35,-14,-30,-42,-95,52} + }; +const double dB2[][8] = + { + {-61,88,69,49,-53,47,73,45}, + {16,14,-88,-11,-67,-73,-20,43}, + {-60,-63,26,32,-29,18,-44,-69}, + {1,21,21,38,7,-100,-61,-76}, + {-90,95,-99,88,49,-80,27,-36}, + {24,-12,-47,-7,29,15,52,37}, + {-98,-76,29,76,-41,-75,97,79}, + {62,-90,-35,-14,-30,-42,-95,52} + }; +const double dA2[][8] = + { + {80,42,3,-16,6,55,87,16}, + {-99,-14,21,-1,-94,-56,91,10}, + {-47,-55,-59,62,12,-53,87,-65}, + {-60,94,-67,23,-62,33,-63,-72}, + {12,-75,16,21,22,-37,1,16}, + {-100,-99,82,-66,2,64,-13,44}, + {59,-100,-90,8,36,-24,18,88}, + {73,-58,75,-100,-19,-29,85,-19} + }; +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; diff --git a/buch/papers/multiplikation/code/c_meas_1024.pdf b/buch/papers/multiplikation/code/c_meas_1024.pdf new file mode 100644 index 0000000..95b68b5 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_1024.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_128.pdf b/buch/papers/multiplikation/code/c_meas_128.pdf new file mode 100644 index 0000000..56b9200 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_128.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_16.pdf b/buch/papers/multiplikation/code/c_meas_16.pdf new file mode 100644 index 0000000..2edc82d Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_16.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_2048.pdf b/buch/papers/multiplikation/code/c_meas_2048.pdf new file mode 100644 index 0000000..caba698 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_2048.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_256.pdf b/buch/papers/multiplikation/code/c_meas_256.pdf new file mode 100644 index 0000000..383ae86 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_256.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_32.pdf b/buch/papers/multiplikation/code/c_meas_32.pdf new file mode 100644 index 0000000..180fd22 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_32.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf new file mode 100644 index 0000000..547d794 Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_512.pdf b/buch/papers/multiplikation/code/c_meas_512.pdf new file mode 100644 index 0000000..5e8894e Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_512.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_64.pdf b/buch/papers/multiplikation/code/c_meas_64.pdf new file mode 100644 index 0000000..8ff905c Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_64.pdf differ diff --git a/buch/papers/multiplikation/code/c_meas_8.pdf b/buch/papers/multiplikation/code/c_meas_8.pdf new file mode 100644 index 0000000..9682aca Binary files /dev/null and b/buch/papers/multiplikation/code/c_meas_8.pdf differ diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py new file mode 100755 index 0000000..485fa76 --- /dev/null +++ b/buch/papers/multiplikation/code/helper_class.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Fri Mar 12 09:02:48 2021 + +@author: nunigan +""" + +from datetime import datetime +import numpy as np + +class Helper(): + def __init__(self): + pass + + def write_c_matrix(self, n_array): + + with open('c_matrix.h', 'w') as file: + file.writelines('/* Seminar Matrizen, autogenerated File, Michael Schmid, {} */ \n \n'.format(datetime.now().strftime("%d/%m/%Y, %H:%M:%S"))) + + file.writelines('#include \n') + + + + for k, n in enumerate(n_array): + A = np.random.randint(-100,100,(n,n)) + B = np.random.randint(-100,100,(n,n)) + file.writelines('const int A{}[][{}] = \n'.format(k, n)) + file.writelines(' {\n') + for i in range(n): + file.writelines(' {') + for j in range(n): + if j == n-1: + file.writelines('{}'.format(A[i,j])) + else: + file.writelines('{},'.format(A[i,j])) + if i == n-1: + file.writelines('}\n') + else: + file.writelines('},\n') + + file.writelines(' };\n') + + file.writelines('const int B{}[][{}] = \n'.format(k,n)) + file.writelines(' {\n') + for i in range(n): + file.writelines(' {') + for j in range(n): + if j == n-1: + file.writelines('{}'.format(B[i,j])) + else: + file.writelines('{},'.format(B[i,j])) + if i == n-1: + file.writelines('}\n') + else: + file.writelines('},\n') + + file.writelines(' };\n') + + file.writelines('const double dB{}[][{}] = \n'.format(k,n)) + file.writelines(' {\n') + for i in range(n): + file.writelines(' {') + for j in range(n): + if j == n-1: + file.writelines('{}'.format(B[i,j])) + else: + file.writelines('{},'.format(B[i,j])) + if i == n-1: + file.writelines('}\n') + else: + file.writelines('},\n') + + file.writelines(' };\n') + + file.writelines('const double dA{}[][{}] = \n'.format(k,n)) + file.writelines(' {\n') + for i in range(n): + file.writelines(' {') + for j in range(n): + if j == n-1: + file.writelines('{}'.format(A[i,j])) + else: + file.writelines('{},'.format(A[i,j])) + if i == n-1: + file.writelines('}\n') + else: + file.writelines('},\n') + + file.writelines(' };\n') + + file.writelines('const int *Ap[{}] = {{{}}}; \n'.format(len(n_array),",".join(['(int*) A'+str(element) for element in np.arange(len(n_array))]))) + file.writelines('const int *Bp[{}] = {{{}}}; \n'.format(len(n_array),",".join(['(int*) B'+str(element) for element in np.arange(len(n_array))]))) + file.writelines('const double *dAp[{}] = {{{}}}; \n'.format(len(n_array),",".join(['(double*) dA'+str(element) for element in np.arange(len(n_array))]))) + file.writelines('const double *dBp[{}] = {{{}}}; \n'.format(len(n_array),",".join(['(double*) dB'+str(element) for element in np.arange(len(n_array))]))) + file.writelines('int n[{}] = {{{}}}; \n'.format(len(n_array),",".join([str(element) for element in n_array]))) + file.writelines('int n_arrays = {};\n'.format(len(n_array))) + +# test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +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) diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt new file mode 100644 index 0000000..1a0cd5d --- /dev/null +++ b/buch/papers/multiplikation/code/meas/MM.txt @@ -0,0 +1,12 @@ +0.000000,2 +0.000000,4 +0.000002,8 +0.000011,16 +0.000080,32 +0.000653,64 +0.005397,128 +0.045147,256 +0.487710,512 +3.964180,1024 +128.863544,2048 +996.370209,4096 diff --git a/buch/papers/multiplikation/code/meas/MM_dc.txt b/buch/papers/multiplikation/code/meas/MM_dc.txt new file mode 100644 index 0000000..0d5580a --- /dev/null +++ b/buch/papers/multiplikation/code/meas/MM_dc.txt @@ -0,0 +1,12 @@ +0.000006,2 +0.000007,4 +0.000035,8 +0.000228,16 +0.001310,32 +0.007204,64 +0.034338,128 +0.267511,256 +2.131212,512 +17.177403,1024 +146.112874,2048 +1156.777565,4096 diff --git a/buch/papers/multiplikation/code/meas/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt new file mode 100644 index 0000000..6b7cd0b --- /dev/null +++ b/buch/papers/multiplikation/code/meas/blas.txt @@ -0,0 +1,12 @@ +0.000001,2 +0.000000,4 +0.000001,8 +0.000003,16 +0.000021,32 +0.000164,64 +0.001240,128 +0.009657,256 +0.072523,512 +0.735149,1024 +6.895747,2048 +56.812183,4096 diff --git a/buch/papers/multiplikation/code/meas/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt new file mode 100644 index 0000000..89cf41a --- /dev/null +++ b/buch/papers/multiplikation/code/meas/strassen.txt @@ -0,0 +1,12 @@ +0.000000,2 +0.000003,4 +0.000010,8 +0.000086,16 +0.000476,32 +0.003366,64 +0.025547,128 +0.184593,256 +1.248713,512 +9.007700,1024 +61.079879,2048 +424.493037,4096 diff --git a/buch/papers/multiplikation/code/meas/test/4096/MM.txt b/buch/papers/multiplikation/code/meas/test/4096/MM.txt new file mode 100644 index 0000000..25e40e1 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/test/4096/MM.txt @@ -0,0 +1,12 @@ +0.000000,2 +0.000000,4 +0.000002,8 +0.000011,16 +0.000100,32 +0.000712,64 +0.005498,128 +0.046711,256 +0.489233,512 +4.006544,1024 +124.427496,2048 +993.405615,4096 diff --git a/buch/papers/multiplikation/code/meas/test/4096/strassen.txt b/buch/papers/multiplikation/code/meas/test/4096/strassen.txt new file mode 100644 index 0000000..eb2a496 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/test/4096/strassen.txt @@ -0,0 +1,12 @@ +0.000007,2 +0.000007,4 +0.000029,8 +0.000199,16 +0.001414,32 +0.007583,64 +0.028096,128 +0.171662,256 +1.198323,512 +8.421896,1024 +58.803644,2048 +415.115401,4096 diff --git a/buch/papers/multiplikation/code/meas/test/MM.txt b/buch/papers/multiplikation/code/meas/test/MM.txt new file mode 100644 index 0000000..e0754ab --- /dev/null +++ b/buch/papers/multiplikation/code/meas/test/MM.txt @@ -0,0 +1,14900 @@ +0.000004,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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000001,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.000002,8 +0.000001,8 +0.000002,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000001,8 +0.000001,8 +0.000002,8 +0.000002,8 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000006,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000013,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000008,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000016,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000007,14 +0.000011,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000025,16 +0.000011,16 +0.000020,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000010,16 +0.000016,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000015,18 +0.000014,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000015,18 +0.000014,18 +0.000021,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000030,20 +0.000029,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000030,20 +0.000030,20 +0.000029,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000048,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000020,20 +0.000027,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000033,22 +0.000040,22 +0.000045,22 +0.000046,22 +0.000041,22 +0.000040,22 +0.000040,22 +0.000040,22 +0.000042,22 +0.000040,22 +0.000043,22 +0.000030,22 +0.000036,22 +0.000026,22 +0.000037,22 +0.000049,22 +0.000036,22 +0.000046,22 +0.000047,22 +0.000049,22 +0.000037,22 +0.000035,22 +0.000037,22 +0.000050,22 +0.000055,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000036,22 +0.000036,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000026,22 +0.000036,22 +0.000046,22 +0.000062,22 +0.000047,22 +0.000036,22 +0.000047,22 +0.000041,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000050,24 +0.000053,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000055,24 +0.000058,26 +0.000055,26 +0.000077,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000052,26 +0.000043,26 +0.000043,26 +0.000066,26 +0.000061,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000054,28 +0.000054,28 +0.000053,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000065,28 +0.000066,28 +0.000058,28 +0.000097,28 +0.000084,28 +0.000073,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000073,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000073,28 +0.000054,28 +0.000064,28 +0.000063,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000073,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000082,28 +0.000063,28 +0.000083,28 +0.000063,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000069,30 +0.000066,30 +0.000066,30 +0.000074,30 +0.000103,30 +0.000108,30 +0.000107,30 +0.000112,30 +0.000111,30 +0.000087,30 +0.000105,30 +0.000076,30 +0.000066,30 +0.000107,30 +0.000119,30 +0.000105,30 +0.000117,30 +0.000077,30 +0.000077,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000079,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000069,30 +0.000077,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000096,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000085,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000089,30 +0.000066,30 +0.000066,30 +0.000066,30 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000079,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000102,32 +0.000091,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000090,32 +0.000119,32 +0.000129,32 +0.000134,32 +0.000095,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000100,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000102,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000100,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000100,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000114,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000080,32 +0.000098,34 +0.000096,34 +0.000106,34 +0.000124,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000134,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000131,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000119,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000154,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000116,36 +0.000153,36 +0.000133,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000123,36 +0.000142,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000150,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000113,36 +0.000143,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000143,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000143,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000145,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000161,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000180,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000141,38 +0.000143,38 +0.000168,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000168,40 +0.000164,40 +0.000165,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000166,40 +0.000164,40 +0.000268,40 +0.000164,40 +0.000164,40 +0.000165,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000188,40 +0.000183,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000174,40 +0.000293,40 +0.000184,40 +0.000164,40 +0.000164,40 +0.000170,40 +0.000234,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000195,40 +0.000174,40 +0.000164,40 +0.000214,40 +0.000234,40 +0.000203,40 +0.000164,40 +0.000183,40 +0.000183,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000186,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000164,40 +0.000190,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000200,42 +0.000198,42 +0.000215,42 +0.000258,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000231,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000201,42 +0.000252,42 +0.000189,42 +0.000189,42 +0.000347,42 +0.000296,42 +0.000208,42 +0.000194,42 +0.000195,42 +0.000213,42 +0.000215,42 +0.000323,42 +0.000235,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000199,42 +0.000220,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000199,42 +0.000240,42 +0.000189,42 +0.000222,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000209,42 +0.000199,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000194,42 +0.000202,42 +0.000223,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000189,42 +0.000222,44 +0.000216,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000288,44 +0.000228,44 +0.000216,44 +0.000217,44 +0.000254,44 +0.000216,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000216,44 +0.000268,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000256,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000254,44 +0.000255,44 +0.000217,44 +0.000216,44 +0.000216,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000240,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000245,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000216,44 +0.000217,44 +0.000217,44 +0.000217,44 +0.000250,46 +0.000246,46 +0.000246,46 +0.000249,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000257,46 +0.000275,46 +0.000303,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000285,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000250,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000252,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000253,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000253,46 +0.000257,46 +0.000277,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000285,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000246,46 +0.000250,46 +0.000286,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000286,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000279,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000284,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000284,48 +0.000280,48 +0.000280,48 +0.000290,48 +0.000311,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000318,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000281,48 +0.000279,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000283,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000281,48 +0.000321,48 +0.000280,48 +0.000332,48 +0.000316,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000279,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000280,48 +0.000334,48 +0.000343,48 +0.000319,50 +0.000338,50 +0.000315,50 +0.000431,50 +0.000315,50 +0.000335,50 +0.000315,50 +0.000446,50 +0.000315,50 +0.000315,50 +0.000351,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000359,50 +0.000315,50 +0.000343,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000355,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000352,50 +0.000315,50 +0.000315,50 +0.000325,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000326,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000354,50 +0.000339,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000343,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000334,50 +0.000376,50 +0.000317,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000315,50 +0.000319,50 +0.000315,50 +0.000359,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000362,52 +0.000353,52 +0.000354,52 +0.000356,52 +0.000392,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000354,52 +0.000354,52 +0.000358,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000354,52 +0.000355,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000357,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000354,52 +0.000362,52 +0.000356,52 +0.000354,52 +0.000353,52 +0.000392,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000358,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000354,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000355,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000358,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000353,52 +0.000355,52 +0.000409,54 +0.000395,54 +0.000395,54 +0.000405,54 +0.000423,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000400,54 +0.000394,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000396,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000394,54 +0.000395,54 +0.000395,54 +0.000396,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000394,54 +0.000395,54 +0.000395,54 +0.000398,54 +0.000395,54 +0.000403,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000434,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000397,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000399,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000395,54 +0.000421,54 +0.000395,54 +0.000395,54 +0.000473,54 +0.000404,54 +0.000419,54 +0.000415,54 +0.000419,54 +0.000408,54 +0.000443,54 +0.000419,54 +0.000395,54 +0.000419,54 +0.000434,54 +0.000409,54 +0.000467,54 +0.000462,54 +0.000429,54 +0.000395,54 +0.000440,54 +0.000415,54 +0.000395,54 +0.000497,54 +0.000415,54 +0.000395,54 +0.000436,54 +0.000395,54 +0.000395,54 +0.000431,54 +0.000395,54 +0.000444,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000469,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000463,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000448,56 +0.000439,56 +0.000439,56 +0.000523,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000472,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000535,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000461,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000450,56 +0.000439,56 +0.000468,56 +0.000478,56 +0.000439,56 +0.000439,56 +0.000440,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000441,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000461,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000457,56 +0.000451,56 +0.000451,56 +0.000448,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000439,56 +0.000470,56 +0.000439,56 +0.000439,56 +0.000537,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000512,58 +0.000500,58 +0.000497,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000529,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000491,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000511,58 +0.000496,58 +0.000487,58 +0.000487,58 +0.000526,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000492,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000489,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000489,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000491,58 +0.000487,58 +0.000495,58 +0.000487,58 +0.000487,58 +0.000526,58 +0.000487,58 +0.000487,58 +0.000489,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000521,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000487,58 +0.000545,58 +0.000521,58 +0.000511,58 +0.000557,58 +0.000544,58 +0.000531,58 +0.000500,58 +0.000498,58 +0.000539,58 +0.000521,58 +0.000517,58 +0.000549,58 +0.000508,58 +0.000576,60 +0.000609,60 +0.000601,60 +0.000538,60 +0.000538,60 +0.000582,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000543,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000540,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000542,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000546,60 +0.000538,60 +0.000579,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000569,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000570,60 +0.000567,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000542,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000546,60 +0.000538,60 +0.000541,60 +0.000577,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000543,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000540,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000542,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000548,60 +0.000609,60 +0.000538,60 +0.000570,60 +0.000538,60 +0.000558,60 +0.000558,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000538,60 +0.000542,60 +0.000538,60 +0.000597,62 +0.000593,62 +0.000593,62 +0.000595,62 +0.000593,62 +0.000594,62 +0.000593,62 +0.000592,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000597,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000633,62 +0.000595,62 +0.000601,62 +0.000593,62 +0.000632,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000598,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000595,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000594,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000597,62 +0.000593,62 +0.000601,62 +0.000593,62 +0.000632,62 +0.000593,62 +0.000595,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000597,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000606,62 +0.000668,62 +0.000617,62 +0.000617,62 +0.000637,62 +0.000607,62 +0.000634,62 +0.000625,62 +0.000608,62 +0.000667,62 +0.000634,62 +0.000653,62 +0.000683,62 +0.000625,62 +0.000593,62 +0.000593,62 +0.000635,62 +0.000593,62 +0.000593,62 +0.000633,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000593,62 +0.000613,62 +0.000677,62 +0.000746,62 +0.000613,62 +0.000749,62 +0.000623,62 +0.000612,62 +0.000593,62 +0.000632,62 +0.000593,62 +0.000612,62 +0.000658,64 +0.000681,64 +0.000651,64 +0.000697,64 +0.000650,64 +0.000650,64 +0.000671,64 +0.000650,64 +0.000650,64 +0.000680,64 +0.000650,64 +0.000650,64 +0.000651,64 +0.000650,64 +0.000651,64 +0.000673,64 +0.000732,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000654,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000659,64 +0.000653,64 +0.000690,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000655,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000652,64 +0.000651,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000654,64 +0.000650,64 +0.000670,64 +0.000670,64 +0.000650,64 +0.000709,64 +0.000663,64 +0.000689,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000655,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000652,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000654,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000652,64 +0.000658,64 +0.000650,64 +0.000689,64 +0.000650,64 +0.000650,64 +0.000655,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000652,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000650,64 +0.000654,64 +0.000650,64 +0.000650,64 +0.000651,64 +0.000651,64 +0.000650,64 +0.000725,66 +0.000713,66 +0.000722,66 +0.000713,66 +0.000752,66 +0.000713,66 +0.000718,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000759,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000717,66 +0.000713,66 +0.000812,66 +0.000736,66 +0.000740,66 +0.000776,66 +0.000755,66 +0.000738,66 +0.000766,66 +0.000775,66 +0.000797,66 +0.000776,66 +0.000829,66 +0.000722,66 +0.000713,66 +0.000713,66 +0.000736,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000859,66 +0.000825,66 +0.000713,66 +0.000713,66 +0.000733,66 +0.000757,66 +0.000713,66 +0.000733,66 +0.000765,66 +0.000772,66 +0.000894,66 +0.000713,66 +0.000713,66 +0.000752,66 +0.000731,66 +0.000754,66 +0.000723,66 +0.000713,66 +0.000734,66 +0.000713,66 +0.000713,66 +0.000749,66 +0.000793,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000840,66 +0.000768,66 +0.000752,66 +0.000756,66 +0.000713,66 +0.000724,66 +0.000781,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000736,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000736,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000744,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000713,66 +0.000712,66 +0.000745,66 +0.000713,66 +0.000752,66 +0.000713,66 +0.000713,66 +0.000719,66 +0.000713,66 +0.000789,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000785,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000783,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000780,68 +0.000787,68 +0.000817,68 +0.000778,68 +0.000778,68 +0.000783,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000780,68 +0.000779,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000780,68 +0.000779,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000782,68 +0.000778,68 +0.000787,68 +0.000778,68 +0.000817,68 +0.000781,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000783,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000780,68 +0.000778,68 +0.000845,68 +0.000822,68 +0.000813,68 +0.000832,68 +0.000826,68 +0.000902,68 +0.000890,68 +0.000835,68 +0.000799,68 +0.000868,68 +0.000778,68 +0.000778,68 +0.000816,68 +0.000778,68 +0.000779,68 +0.000778,68 +0.000778,68 +0.000813,68 +0.000798,68 +0.000778,68 +0.000778,68 +0.000798,68 +0.000820,68 +0.000778,68 +0.000779,68 +0.000778,68 +0.000787,68 +0.000841,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000783,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000780,68 +0.000846,68 +0.000778,68 +0.000778,68 +0.000778,68 +0.000786,68 +0.000779,68 +0.000778,68 +0.000779,68 +0.000790,68 +0.000864,70 +0.000887,70 +0.000848,70 +0.000895,70 +0.000856,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000850,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000849,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000863,70 +0.000848,70 +0.000887,70 +0.000848,70 +0.000848,70 +0.000852,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000854,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000850,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000852,70 +0.000857,70 +0.000848,70 +0.000887,70 +0.000848,70 +0.000850,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000896,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000850,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000848,70 +0.000852,70 +0.000848,70 +0.000857,70 +0.000887,70 +0.000848,70 +0.000851,70 +0.001152,70 +0.000848,70 +0.000848,70 +0.000880,70 +0.001018,70 +0.000848,70 +0.001016,70 +0.000885,70 +0.000848,70 +0.000935,70 +0.000894,70 +0.000883,70 +0.000921,70 +0.000926,70 +0.000922,70 +0.001052,70 +0.000956,70 +0.000883,70 +0.001083,70 +0.000970,70 +0.001244,70 +0.000980,70 +0.000928,70 +0.000927,70 +0.000914,70 +0.000951,70 +0.000948,70 +0.000969,70 +0.000974,70 +0.000970,70 +0.001081,70 +0.001080,70 +0.000962,70 +0.000948,70 +0.000948,70 +0.000946,70 +0.000934,70 +0.000946,70 +0.001066,72 +0.001042,72 +0.001018,72 +0.001084,72 +0.001068,72 +0.001038,72 +0.001056,72 +0.001073,72 +0.001119,72 +0.001100,72 +0.001092,72 +0.001032,72 +0.001029,72 +0.001016,72 +0.001057,72 +0.001057,72 +0.001057,72 +0.001068,72 +0.001039,72 +0.001038,72 +0.001066,72 +0.001032,72 +0.001037,72 +0.001037,72 +0.001135,72 +0.001046,72 +0.001085,72 +0.001089,72 +0.001054,72 +0.001079,72 +0.001024,72 +0.001033,72 +0.001036,72 +0.001050,72 +0.000921,72 +0.001033,72 +0.001062,72 +0.000960,72 +0.000921,72 +0.001050,72 +0.001081,72 +0.001111,72 +0.001031,72 +0.001009,72 +0.001014,72 +0.000946,72 +0.001031,72 +0.000950,72 +0.001043,72 +0.000921,72 +0.000921,72 +0.001055,72 +0.000958,72 +0.001054,72 +0.001056,72 +0.000921,72 +0.000980,72 +0.001135,72 +0.001088,72 +0.001116,72 +0.000955,72 +0.000921,72 +0.001174,72 +0.000941,72 +0.000967,72 +0.001058,72 +0.000921,72 +0.000921,72 +0.000947,72 +0.001054,72 +0.000941,72 +0.001007,72 +0.001018,72 +0.001027,72 +0.000987,72 +0.001003,72 +0.001095,72 +0.000942,72 +0.001094,72 +0.000921,72 +0.000971,72 +0.000921,72 +0.000921,72 +0.000942,72 +0.000965,72 +0.000921,72 +0.000921,72 +0.000921,72 +0.000921,72 +0.000966,72 +0.000941,72 +0.000921,72 +0.000941,72 +0.000996,72 +0.000921,72 +0.000921,72 +0.000921,72 +0.000967,72 +0.000921,72 +0.000921,72 +0.001012,74 +0.001031,74 +0.000999,74 +0.001078,74 +0.000998,74 +0.001047,74 +0.000999,74 +0.000999,74 +0.000999,74 +0.001067,74 +0.001024,74 +0.000998,74 +0.000999,74 +0.001002,74 +0.000998,74 +0.000998,74 +0.000998,74 +0.001007,74 +0.000998,74 +0.000998,74 +0.000998,74 +0.001001,74 +0.000998,74 +0.000999,74 +0.001053,74 +0.001033,74 +0.001023,74 +0.000999,74 +0.000998,74 +0.001003,74 +0.000999,74 +0.000999,74 +0.000998,74 +0.001000,74 +0.000999,74 +0.000998,74 +0.000998,74 +0.001005,74 +0.000999,74 +0.000998,74 +0.000998,74 +0.001000,74 +0.001022,74 +0.001024,74 +0.000999,74 +0.001007,74 +0.000999,74 +0.000999,74 +0.000998,74 +0.001000,74 +0.000998,74 +0.000998,74 +0.000999,74 +0.001000,74 +0.000999,74 +0.000999,74 +0.000999,74 +0.001002,74 +0.001021,74 +0.000998,74 +0.001023,74 +0.001002,74 +0.000998,74 +0.000998,74 +0.000998,74 +0.001005,74 +0.000999,74 +0.000999,74 +0.000998,74 +0.001000,74 +0.000998,74 +0.000999,74 +0.001075,74 +0.001077,74 +0.001043,74 +0.001087,74 +0.001126,74 +0.001090,74 +0.001029,74 +0.001098,74 +0.001032,74 +0.000999,74 +0.000998,74 +0.001048,74 +0.001004,74 +0.000999,74 +0.000999,74 +0.000999,74 +0.001006,74 +0.000999,74 +0.000999,74 +0.001023,74 +0.001028,74 +0.000999,74 +0.000998,74 +0.000999,74 +0.001007,74 +0.000998,74 +0.000998,74 +0.000998,74 +0.001095,76 +0.001081,76 +0.001153,76 +0.001081,76 +0.001095,76 +0.001081,76 +0.001081,76 +0.001111,76 +0.001116,76 +0.001082,76 +0.001080,76 +0.001091,76 +0.001080,76 +0.001081,76 +0.001081,76 +0.001083,76 +0.001081,76 +0.001081,76 +0.001082,76 +0.001277,76 +0.001102,76 +0.001101,76 +0.001132,76 +0.001106,76 +0.001081,76 +0.001105,76 +0.001081,76 +0.001081,76 +0.001081,76 +0.001104,76 +0.001081,76 +0.001080,76 +0.001081,76 +0.001109,76 +0.001081,76 +0.001081,76 +0.001109,76 +0.001103,76 +0.001105,76 +0.001081,76 +0.001089,76 +0.001081,76 +0.001081,76 +0.001080,76 +0.001082,76 +0.001081,76 +0.001081,76 +0.001102,76 +0.001081,76 +0.001081,76 +0.001081,76 +0.001085,76 +0.001080,76 +0.001103,76 +0.001104,76 +0.001107,76 +0.001081,76 +0.001081,76 +0.001089,76 +0.001174,76 +0.001081,76 +0.001081,76 +0.001330,76 +0.001080,76 +0.001081,76 +0.001148,76 +0.001121,76 +0.001161,76 +0.001117,76 +0.001203,76 +0.001255,76 +0.001144,76 +0.001592,76 +0.002119,76 +0.002177,76 +0.001425,76 +0.001322,76 +0.001309,76 +0.001290,76 +0.001266,76 +0.001303,76 +0.001343,76 +0.001229,76 +0.001141,76 +0.001222,76 +0.001349,76 +0.001260,76 +0.001221,76 +0.001172,76 +0.001276,76 +0.001166,76 +0.001110,76 +0.001237,76 +0.001164,76 +0.001207,76 +0.001205,76 +0.001145,76 +0.001226,76 +0.001109,76 +0.001230,76 +0.001250,78 +0.001198,78 +0.001318,78 +0.001202,78 +0.001205,78 +0.001384,78 +0.001220,78 +0.001353,78 +0.001168,78 +0.001194,78 +0.001167,78 +0.001167,78 +0.001167,78 +0.001215,78 +0.001167,78 +0.001167,78 +0.001201,78 +0.001167,78 +0.001167,78 +0.001239,78 +0.001190,78 +0.001191,78 +0.001168,78 +0.001204,78 +0.001167,78 +0.001167,78 +0.001198,78 +0.001167,78 +0.001177,78 +0.001198,78 +0.001167,78 +0.001167,78 +0.001167,78 +0.001221,78 +0.001190,78 +0.001194,78 +0.001362,78 +0.001167,78 +0.001167,78 +0.001210,78 +0.001167,78 +0.001167,78 +0.001167,78 +0.001204,78 +0.001167,78 +0.001167,78 +0.001283,78 +0.001278,78 +0.001323,78 +0.001268,78 +0.001204,78 +0.001262,78 +0.001289,78 +0.001167,78 +0.001167,78 +0.001167,78 +0.001202,78 +0.001309,78 +0.001167,78 +0.001206,78 +0.001167,78 +0.001167,78 +0.001423,78 +0.001194,78 +0.001167,78 +0.001167,78 +0.001211,78 +0.001168,78 +0.001168,78 +0.001192,78 +0.001251,78 +0.001167,78 +0.001332,78 +0.001199,78 +0.001190,78 +0.001189,78 +0.001204,78 +0.001191,78 +0.001167,78 +0.001212,78 +0.001167,78 +0.001167,78 +0.001207,78 +0.001167,78 +0.001167,78 +0.001167,78 +0.001201,78 +0.001167,78 +0.001167,78 +0.001239,78 +0.001167,78 +0.001192,78 +0.001184,78 +0.001186,78 +0.001168,78 +0.001167,78 +0.001173,78 +0.001168,78 +0.001167,78 +0.001169,78 +0.001268,80 +0.001257,80 +0.001261,80 +0.001279,80 +0.001282,80 +0.001257,80 +0.001261,80 +0.001257,80 +0.001257,80 +0.001263,80 +0.001257,80 +0.001257,80 +0.001259,80 +0.001257,80 +0.001287,80 +0.001268,80 +0.001257,80 +0.001297,80 +0.001284,80 +0.001257,80 +0.001257,80 +0.001259,80 +0.001257,80 +0.001257,80 +0.001256,80 +0.001263,80 +0.001257,80 +0.001257,80 +0.001259,80 +0.001353,80 +0.001333,80 +0.001366,80 +0.001305,80 +0.001357,80 +0.001332,80 +0.001365,80 +0.001257,80 +0.001291,80 +0.001257,80 +0.001257,80 +0.001282,80 +0.001257,80 +0.001278,80 +0.001294,80 +0.001280,80 +0.001257,80 +0.001286,80 +0.001257,80 +0.001257,80 +0.001280,80 +0.001257,80 +0.001330,80 +0.001257,80 +0.001302,80 +0.001257,80 +0.001257,80 +0.001283,80 +0.001281,80 +0.001257,80 +0.001261,80 +0.001257,80 +0.001257,80 +0.001297,80 +0.001306,80 +0.001257,80 +0.001300,80 +0.001267,80 +0.001257,80 +0.001323,80 +0.001278,80 +0.001280,80 +0.001281,80 +0.001257,80 +0.001257,80 +0.001274,80 +0.001266,80 +0.001257,80 +0.001257,80 +0.001259,80 +0.001257,80 +0.001257,80 +0.001260,80 +0.001278,80 +0.001353,80 +0.001274,80 +0.001259,80 +0.001257,80 +0.001263,80 +0.001257,80 +0.001257,80 +0.001259,80 +0.001257,80 +0.001257,80 +0.001261,80 +0.001434,80 +0.001276,80 +0.001527,80 +0.001383,80 +0.001498,80 +0.001345,80 +0.001604,82 +0.001498,82 +0.001578,82 +0.001498,82 +0.001565,82 +0.001591,82 +0.001523,82 +0.001503,82 +0.001502,82 +0.001531,82 +0.001463,82 +0.001638,82 +0.001432,82 +0.001530,82 +0.001492,82 +0.001578,82 +0.001501,82 +0.001977,82 +0.001577,82 +0.001540,82 +0.001526,82 +0.001540,82 +0.001564,82 +0.001492,82 +0.001627,82 +0.001528,82 +0.001529,82 +0.001539,82 +0.001479,82 +0.001453,82 +0.001450,82 +0.001442,82 +0.001445,82 +0.001457,82 +0.001457,82 +0.001469,82 +0.001572,82 +0.001430,82 +0.001776,82 +0.001605,82 +0.001509,82 +0.001503,82 +0.001509,82 +0.001536,82 +0.001509,82 +0.001493,82 +0.001517,82 +0.001511,82 +0.001508,82 +0.001513,82 +0.001536,82 +0.001484,82 +0.001468,82 +0.001473,82 +0.001476,82 +0.001487,82 +0.001474,82 +0.001489,82 +0.001553,82 +0.001523,82 +0.001489,82 +0.001544,82 +0.001542,82 +0.001464,82 +0.001463,82 +0.001469,82 +0.001482,82 +0.001511,82 +0.001423,82 +0.001497,82 +0.001488,82 +0.001635,82 +0.001456,82 +0.001527,82 +0.001452,82 +0.001566,82 +0.001485,82 +0.001559,82 +0.001428,82 +0.001697,82 +0.001431,82 +0.001431,82 +0.001410,82 +0.001421,82 +0.001736,82 +0.001462,82 +0.001439,82 +0.001382,82 +0.001366,82 +0.001766,82 +0.001578,82 +0.001466,82 +0.001366,82 +0.001556,82 +0.001485,82 +0.001559,82 +0.001420,82 +0.001509,82 +0.001448,82 +0.001433,82 +0.001505,84 +0.001708,84 +0.001583,84 +0.001532,84 +0.001867,84 +0.001624,84 +0.001513,84 +0.001615,84 +0.001491,84 +0.001673,84 +0.001537,84 +0.001602,84 +0.001517,84 +0.001776,84 +0.001573,84 +0.001652,84 +0.001731,84 +0.001606,84 +0.001568,84 +0.001583,84 +0.001534,84 +0.001584,84 +0.001581,84 +0.001996,84 +0.001828,84 +0.001970,84 +0.001907,84 +0.001872,84 +0.001870,84 +0.001966,84 +0.001880,84 +0.001653,84 +0.001818,84 +0.001933,84 +0.001632,84 +0.001582,84 +0.001560,84 +0.001675,84 +0.001603,84 +0.001697,84 +0.001657,84 +0.001648,84 +0.001725,84 +0.001654,84 +0.001623,84 +0.001516,84 +0.001491,84 +0.001517,84 +0.001491,84 +0.001679,84 +0.001637,84 +0.001610,84 +0.001630,84 +0.001572,84 +0.001564,84 +0.001569,84 +0.001545,84 +0.001588,84 +0.001658,84 +0.001571,84 +0.001573,84 +0.001709,84 +0.001576,84 +0.001554,84 +0.001481,84 +0.001796,84 +0.001491,84 +0.001621,84 +0.001545,84 +0.001453,84 +0.001494,84 +0.001452,84 +0.001563,84 +0.001522,84 +0.001584,84 +0.001637,84 +0.001725,84 +0.001619,84 +0.001604,84 +0.001670,84 +0.001588,84 +0.001708,84 +0.001615,84 +0.001452,84 +0.001606,84 +0.001490,84 +0.001604,84 +0.001579,84 +0.001527,84 +0.001452,84 +0.001499,84 +0.001452,84 +0.001465,84 +0.001486,84 +0.001555,84 +0.001452,84 +0.001526,84 +0.001675,84 +0.001599,84 +0.001499,84 +0.001638,86 +0.001737,86 +0.001600,86 +0.001737,86 +0.001559,86 +0.001559,86 +0.001749,86 +0.001691,86 +0.001658,86 +0.001558,86 +0.001590,86 +0.001558,86 +0.001559,86 +0.001587,86 +0.001558,86 +0.001680,86 +0.001558,86 +0.001579,86 +0.001627,86 +0.001597,86 +0.001789,86 +0.001558,86 +0.001558,86 +0.001584,86 +0.001559,86 +0.001583,86 +0.001558,86 +0.001703,86 +0.001776,86 +0.001597,86 +0.001583,86 +0.001558,86 +0.001559,86 +0.001690,86 +0.001600,86 +0.001592,86 +0.001559,86 +0.001559,86 +0.001683,86 +0.001761,86 +0.001623,86 +0.001558,86 +0.001558,86 +0.001584,86 +0.001558,86 +0.001581,86 +0.001796,86 +0.001659,86 +0.001857,86 +0.001810,86 +0.001826,86 +0.001671,86 +0.001702,86 +0.001696,86 +0.001702,86 +0.001628,86 +0.001734,86 +0.001704,86 +0.001711,86 +0.001851,86 +0.001669,86 +0.001721,86 +0.001756,86 +0.001707,86 +0.001834,86 +0.001838,86 +0.001635,86 +0.001871,86 +0.001859,86 +0.001666,86 +0.001666,86 +0.001657,86 +0.001668,86 +0.001654,86 +0.001675,86 +0.001891,86 +0.001799,86 +0.001804,86 +0.001750,86 +0.001787,86 +0.001738,86 +0.001770,86 +0.001625,86 +0.001771,86 +0.001757,86 +0.001690,86 +0.001711,86 +0.001751,86 +0.001820,86 +0.001612,86 +0.001733,86 +0.001706,86 +0.001678,86 +0.001699,86 +0.001700,86 +0.001734,86 +0.001750,86 +0.001779,86 +0.001700,86 +0.001779,86 +0.001813,88 +0.001813,88 +0.001888,88 +0.001836,88 +0.001887,88 +0.001911,88 +0.001892,88 +0.001787,88 +0.001867,88 +0.001848,88 +0.001905,88 +0.001843,88 +0.001897,88 +0.002130,88 +0.004302,88 +0.001848,88 +0.001766,88 +0.001722,88 +0.001804,88 +0.001802,88 +0.001815,88 +0.001818,88 +0.001847,88 +0.001865,88 +0.001767,88 +0.001776,88 +0.001751,88 +0.001773,88 +0.001744,88 +0.001782,88 +0.001919,88 +0.002034,88 +0.001918,88 +0.001979,88 +0.001885,88 +0.001895,88 +0.001865,88 +0.001859,88 +0.001773,88 +0.001917,88 +0.001851,88 +0.001844,88 +0.001803,88 +0.001832,88 +0.001774,88 +0.001863,88 +0.001940,88 +0.001916,88 +0.001999,88 +0.001922,88 +0.001866,88 +0.001984,88 +0.001864,88 +0.001809,88 +0.001784,88 +0.001841,88 +0.001970,88 +0.001865,88 +0.001875,88 +0.001867,88 +0.001998,88 +0.001879,88 +0.001818,88 +0.001863,88 +0.001943,88 +0.002102,88 +0.001872,88 +0.001922,88 +0.001922,88 +0.001738,88 +0.001803,88 +0.001777,88 +0.001788,88 +0.002044,88 +0.002014,88 +0.001786,88 +0.001942,88 +0.001800,88 +0.001764,88 +0.001819,88 +0.001800,88 +0.001826,88 +0.001763,88 +0.001832,88 +0.001832,88 +0.001867,88 +0.001826,88 +0.001783,88 +0.001833,88 +0.001755,88 +0.001767,88 +0.001849,88 +0.001800,88 +0.001838,88 +0.002000,88 +0.001914,88 +0.001889,88 +0.001822,88 +0.001900,88 +0.001868,88 +0.002045,90 +0.002083,90 +0.001996,90 +0.002012,90 +0.001956,90 +0.001960,90 +0.001994,90 +0.001975,90 +0.002229,90 +0.001996,90 +0.001926,90 +0.002033,90 +0.001940,90 +0.001917,90 +0.001934,90 +0.001913,90 +0.001920,90 +0.001983,90 +0.001978,90 +0.002018,90 +0.001928,90 +0.001949,90 +0.001948,90 +0.001969,90 +0.002095,90 +0.001965,90 +0.002043,90 +0.001930,90 +0.001987,90 +0.001946,90 +0.001935,90 +0.001928,90 +0.001970,90 +0.001996,90 +0.001952,90 +0.002076,90 +0.002171,90 +0.002512,90 +0.002524,90 +0.002317,90 +0.002413,90 +0.002428,90 +0.002173,90 +0.002052,90 +0.002012,90 +0.001995,90 +0.001990,90 +0.002001,90 +0.001979,90 +0.001961,90 +0.002068,90 +0.001985,90 +0.001988,90 +0.002031,90 +0.002024,90 +0.002012,90 +0.001985,90 +0.001977,90 +0.002043,90 +0.002001,90 +0.002052,90 +0.002040,90 +0.002011,90 +0.002026,90 +0.001964,90 +0.002007,90 +0.001987,90 +0.001951,90 +0.001966,90 +0.002065,90 +0.001977,90 +0.001908,90 +0.001914,90 +0.002070,90 +0.002188,90 +0.002242,90 +0.002210,90 +0.002093,90 +0.002013,90 +0.001985,90 +0.001969,90 +0.001980,90 +0.001984,90 +0.001978,90 +0.001962,90 +0.001997,90 +0.001951,90 +0.001964,90 +0.001948,90 +0.001950,90 +0.001944,90 +0.002016,90 +0.001914,90 +0.001957,90 +0.001954,90 +0.001952,90 +0.001933,90 +0.001929,90 +0.001929,90 +0.001955,90 +0.002176,92 +0.002076,92 +0.002074,92 +0.002073,92 +0.002086,92 +0.002072,92 +0.002070,92 +0.002071,92 +0.002150,92 +0.002102,92 +0.002085,92 +0.002072,92 +0.002090,92 +0.002103,92 +0.002081,92 +0.002080,92 +0.002178,92 +0.002117,92 +0.002096,92 +0.002074,92 +0.002081,92 +0.002049,92 +0.001983,92 +0.001978,92 +0.001988,92 +0.002048,92 +0.002083,92 +0.001966,92 +0.001939,92 +0.001905,92 +0.001938,92 +0.001905,92 +0.001998,92 +0.001988,92 +0.001990,92 +0.001956,92 +0.001944,92 +0.001905,92 +0.001940,92 +0.001905,92 +0.001931,92 +0.002051,92 +0.001932,92 +0.001916,92 +0.001945,92 +0.001934,92 +0.001905,92 +0.001934,92 +0.001905,92 +0.001959,92 +0.001905,92 +0.001956,92 +0.002195,92 +0.002039,92 +0.002183,92 +0.001987,92 +0.002163,92 +0.002143,92 +0.002184,92 +0.002212,92 +0.002241,92 +0.002146,92 +0.002183,92 +0.002171,92 +0.002169,92 +0.002408,92 +0.002204,92 +0.002163,92 +0.002097,92 +0.002111,92 +0.002057,92 +0.002114,92 +0.002097,92 +0.002273,92 +0.002191,92 +0.002150,92 +0.002058,92 +0.002047,92 +0.002057,92 +0.002034,92 +0.001942,92 +0.002168,92 +0.002163,92 +0.003191,92 +0.002162,92 +0.002106,92 +0.002028,92 +0.002057,92 +0.002162,92 +0.002098,92 +0.002227,92 +0.002239,92 +0.002172,92 +0.002044,92 +0.002031,92 +0.002021,92 +0.002299,92 +0.002519,92 +0.002628,92 +0.002104,92 +0.002270,94 +0.002232,94 +0.002239,94 +0.002805,94 +0.002718,94 +0.002506,94 +0.002880,94 +0.002652,94 +0.002438,94 +0.002516,94 +0.002958,94 +0.002180,94 +0.002139,94 +0.002145,94 +0.002162,94 +0.002192,94 +0.002308,94 +0.002193,94 +0.003367,94 +0.002772,94 +0.002902,94 +0.002238,94 +0.002120,94 +0.002267,94 +0.002291,94 +0.002955,94 +0.002548,94 +0.002764,94 +0.002785,94 +0.002638,94 +0.002414,94 +0.002271,94 +0.002242,94 +0.002232,94 +0.002199,94 +0.002193,94 +0.002248,94 +0.002287,94 +0.002269,94 +0.002258,94 +0.002242,94 +0.002174,94 +0.002188,94 +0.002180,94 +0.002209,94 +0.002219,94 +0.002284,94 +0.002228,94 +0.002259,94 +0.002227,94 +0.002286,94 +0.002191,94 +0.002205,94 +0.002281,94 +0.002241,94 +0.002187,94 +0.002224,94 +0.002170,94 +0.002151,94 +0.002234,94 +0.002278,94 +0.002294,94 +0.002267,94 +0.002179,94 +0.002405,94 +0.002226,94 +0.002247,94 +0.002268,94 +0.002221,94 +0.002960,94 +0.003003,94 +0.002788,94 +0.002929,94 +0.002821,94 +0.003428,94 +0.002702,94 +0.002226,94 +0.002220,94 +0.002311,94 +0.002193,94 +0.002503,94 +0.002530,94 +0.002313,94 +0.002327,94 +0.002228,94 +0.002315,94 +0.002801,94 +0.003093,94 +0.002355,94 +0.002123,94 +0.002102,94 +0.002036,94 +0.002268,94 +0.002291,94 +0.002212,94 +0.002548,94 +0.002096,94 +0.002070,94 +0.002223,94 +0.003631,94 +0.003131,96 +0.002345,96 +0.002444,96 +0.002200,96 +0.002164,96 +0.002201,96 +0.002165,96 +0.002459,96 +0.002256,96 +0.002386,96 +0.002270,96 +0.002165,96 +0.002200,96 +0.002165,96 +0.002303,96 +0.002474,96 +0.002570,96 +0.002492,96 +0.002222,96 +0.002253,96 +0.002445,96 +0.002405,96 +0.002374,96 +0.002388,96 +0.002320,96 +0.002348,96 +0.002412,96 +0.002335,96 +0.002826,96 +0.002458,96 +0.002369,96 +0.002287,96 +0.002271,96 +0.002221,96 +0.002232,96 +0.002600,96 +0.002674,96 +0.002477,96 +0.002204,96 +0.002200,96 +0.002249,96 +0.002207,96 +0.002188,96 +0.003085,96 +0.002353,96 +0.002224,96 +0.002199,96 +0.002165,96 +0.002200,96 +0.002524,96 +0.002687,96 +0.002478,96 +0.002204,96 +0.002224,96 +0.002204,96 +0.002476,96 +0.002659,96 +0.002713,96 +0.002460,96 +0.002290,96 +0.002394,96 +0.002247,96 +0.002490,96 +0.002873,96 +0.002604,96 +0.002406,96 +0.002254,96 +0.002250,96 +0.002389,96 +0.002253,96 +0.002941,96 +0.002625,96 +0.002418,96 +0.002181,96 +0.002247,96 +0.002221,96 +0.002249,96 +0.002854,96 +0.002349,96 +0.002397,96 +0.002164,96 +0.002199,96 +0.002287,96 +0.002282,96 +0.002452,96 +0.002915,96 +0.002363,96 +0.002283,96 +0.002221,96 +0.002247,96 +0.002222,96 +0.002580,96 +0.002344,96 +0.002385,96 +0.002205,96 +0.002164,96 +0.002200,96 +0.002164,96 +0.002477,96 +0.002228,96 +0.002862,98 +0.002740,98 +0.002681,98 +0.002558,98 +0.003056,98 +0.003342,98 +0.002864,98 +0.003272,98 +0.003514,98 +0.002586,98 +0.002846,98 +0.003309,98 +0.002700,98 +0.002704,98 +0.002443,98 +0.002605,98 +0.003502,98 +0.003117,98 +0.002557,98 +0.002528,98 +0.002538,98 +0.002366,98 +0.002391,98 +0.003854,98 +0.003106,98 +0.002539,98 +0.002463,98 +0.002305,98 +0.003020,98 +0.002789,98 +0.002425,98 +0.002469,98 +0.002396,98 +0.002366,98 +0.002765,98 +0.002778,98 +0.002635,98 +0.002610,98 +0.002480,98 +0.002392,98 +0.002396,98 +0.002714,98 +0.002756,98 +0.002841,98 +0.004154,98 +0.002943,98 +0.002630,98 +0.002467,98 +0.003615,98 +0.003165,98 +0.002790,98 +0.002379,98 +0.003336,98 +0.002897,98 +0.003019,98 +0.002448,98 +0.002841,98 +0.002532,98 +0.002560,98 +0.002856,98 +0.003478,98 +0.003149,98 +0.002553,98 +0.002413,98 +0.002631,98 +0.003139,98 +0.002597,98 +0.002427,98 +0.002502,98 +0.002393,98 +0.002618,98 +0.002441,98 +0.002753,98 +0.003863,98 +0.003689,98 +0.002348,98 +0.002846,98 +0.002731,98 +0.002495,98 +0.002508,98 +0.002396,98 +0.002401,98 +0.002703,98 +0.002545,98 +0.002685,98 +0.002514,98 +0.002346,98 +0.002623,98 +0.002410,98 +0.002921,98 +0.003268,98 +0.002623,98 +0.002346,98 +0.002697,98 +0.002615,98 +0.002521,98 +0.003498,98 +0.003344,98 +0.003301,98 +0.002581,98 +0.002742,100 +0.002698,100 +0.003454,100 +0.002797,100 +0.002585,100 +0.002507,100 +0.002585,100 +0.002588,100 +0.003374,100 +0.002645,100 +0.002527,100 +0.002447,100 +0.002799,100 +0.002665,100 +0.003417,100 +0.002694,100 +0.002484,100 +0.002548,100 +0.002658,100 +0.002574,100 +0.003506,100 +0.002723,100 +0.002596,100 +0.002688,100 +0.002624,100 +0.002649,100 +0.003460,100 +0.002747,100 +0.002662,100 +0.002631,100 +0.002617,100 +0.002584,100 +0.002649,100 +0.002590,100 +0.002796,100 +0.002484,100 +0.002778,100 +0.002643,100 +0.002649,100 +0.002754,100 +0.002555,100 +0.002564,100 +0.002531,100 +0.004300,100 +0.002859,100 +0.002562,100 +0.002571,100 +0.002561,100 +0.002549,100 +0.002654,100 +0.002806,100 +0.002635,100 +0.002647,100 +0.002842,100 +0.002732,100 +0.002691,100 +0.004549,100 +0.003644,100 +0.003237,100 +0.003062,100 +0.003510,100 +0.002940,100 +0.002762,100 +0.002677,100 +0.002640,100 +0.002693,100 +0.002635,100 +0.002778,100 +0.004505,100 +0.002998,100 +0.003058,100 +0.002824,100 +0.002817,100 +0.002728,100 +0.002627,100 +0.002649,100 +0.002588,100 +0.003822,100 +0.003904,100 +0.003254,100 +0.003074,100 +0.003190,100 +0.003889,100 +0.003142,100 +0.002844,100 +0.002776,100 +0.002816,100 +0.003645,100 +0.003645,100 +0.002665,100 +0.002592,100 +0.002575,100 +0.002658,100 +0.003486,100 +0.002725,100 +0.002622,100 +0.002620,100 +0.002645,100 +0.002613,100 +0.002580,100 +0.002724,102 +0.003303,102 +0.003048,102 +0.002780,102 +0.002951,102 +0.004601,102 +0.003367,102 +0.003190,102 +0.003475,102 +0.003924,102 +0.003630,102 +0.002814,102 +0.002834,102 +0.002798,102 +0.002829,102 +0.003342,102 +0.003120,102 +0.002870,102 +0.002729,102 +0.002820,102 +0.003945,102 +0.003139,102 +0.003297,102 +0.002713,102 +0.002807,102 +0.002903,102 +0.003155,102 +0.003056,102 +0.002928,102 +0.002823,102 +0.002892,102 +0.003179,102 +0.002805,102 +0.002963,102 +0.003007,102 +0.002791,102 +0.002833,102 +0.003276,102 +0.003000,102 +0.002734,102 +0.002885,102 +0.002941,102 +0.003071,102 +0.003235,102 +0.003131,102 +0.002980,102 +0.003010,102 +0.002969,102 +0.002932,102 +0.003002,102 +0.002888,102 +0.002757,102 +0.002811,102 +0.002874,102 +0.002963,102 +0.002898,102 +0.002741,102 +0.002809,102 +0.002712,102 +0.003060,102 +0.003273,102 +0.003245,102 +0.003031,102 +0.002997,102 +0.003172,102 +0.002861,102 +0.002823,102 +0.002939,102 +0.002998,102 +0.002820,102 +0.002794,102 +0.003012,102 +0.002913,102 +0.002679,102 +0.002762,102 +0.002738,102 +0.002825,102 +0.002687,102 +0.002860,102 +0.002803,102 +0.002834,102 +0.002665,102 +0.002883,102 +0.002636,102 +0.002978,102 +0.002732,102 +0.002656,102 +0.002633,102 +0.002697,102 +0.002831,102 +0.002744,102 +0.002656,102 +0.002900,102 +0.002691,102 +0.002800,102 +0.002862,102 +0.003009,102 +0.002916,102 +0.002882,102 +0.002770,102 +0.003104,104 +0.004950,104 +0.005103,104 +0.004573,104 +0.004026,104 +0.003457,104 +0.003062,104 +0.003048,104 +0.002974,104 +0.003241,104 +0.003673,104 +0.002939,104 +0.002939,104 +0.002946,104 +0.003087,104 +0.003103,104 +0.003060,104 +0.003008,104 +0.003019,104 +0.003130,104 +0.003015,104 +0.003053,104 +0.002991,104 +0.003000,104 +0.003002,104 +0.002993,104 +0.003105,104 +0.003042,104 +0.003033,104 +0.003031,104 +0.003215,104 +0.002948,104 +0.002988,104 +0.003126,104 +0.003376,104 +0.003281,104 +0.003323,104 +0.003151,104 +0.003025,104 +0.002992,104 +0.002998,104 +0.003124,104 +0.003087,104 +0.003148,104 +0.003070,104 +0.003095,104 +0.003224,104 +0.003072,104 +0.002990,104 +0.003106,104 +0.003007,104 +0.003000,104 +0.003089,104 +0.002909,104 +0.002937,104 +0.003134,104 +0.003013,104 +0.003071,104 +0.003501,104 +0.003272,104 +0.002931,104 +0.002971,104 +0.003224,104 +0.003673,104 +0.004977,104 +0.005140,104 +0.004520,104 +0.003520,104 +0.003634,104 +0.003674,104 +0.003072,104 +0.004450,104 +0.005067,104 +0.003972,104 +0.003040,104 +0.004208,104 +0.003163,104 +0.003146,104 +0.003114,104 +0.003184,104 +0.004320,104 +0.004138,104 +0.003283,104 +0.003101,104 +0.003353,104 +0.003452,104 +0.003375,104 +0.003198,104 +0.002984,104 +0.002996,104 +0.003103,104 +0.003065,104 +0.002990,104 +0.003533,104 +0.002977,104 +0.003177,104 +0.003234,104 +0.003008,104 +0.002749,104 +0.002798,104 +0.003047,106 +0.003276,106 +0.003251,106 +0.002976,106 +0.002943,106 +0.002945,106 +0.003244,106 +0.003172,106 +0.003055,106 +0.002941,106 +0.002908,106 +0.003125,106 +0.003282,106 +0.003298,106 +0.002979,106 +0.002907,106 +0.002947,106 +0.003287,106 +0.003200,106 +0.003031,106 +0.002942,106 +0.002940,106 +0.003263,106 +0.003190,106 +0.003135,106 +0.003207,106 +0.003102,106 +0.003048,106 +0.003238,106 +0.004084,106 +0.003262,106 +0.002951,106 +0.003074,106 +0.003253,106 +0.003276,106 +0.002987,106 +0.002948,106 +0.002943,106 +0.003273,106 +0.003223,106 +0.003069,106 +0.002946,106 +0.002907,106 +0.003239,106 +0.003170,106 +0.003175,106 +0.002966,106 +0.002907,106 +0.002944,106 +0.003637,106 +0.003381,106 +0.003021,106 +0.002907,106 +0.002945,106 +0.003403,106 +0.003164,106 +0.003231,106 +0.003006,106 +0.003251,106 +0.003278,106 +0.003057,106 +0.003331,106 +0.003197,106 +0.003204,106 +0.003135,106 +0.003388,106 +0.003199,106 +0.003293,106 +0.003074,106 +0.003239,106 +0.003718,106 +0.003302,106 +0.003199,106 +0.003224,106 +0.003473,106 +0.004491,106 +0.003305,106 +0.002990,106 +0.003136,106 +0.003739,106 +0.003203,106 +0.003375,106 +0.003028,106 +0.003151,106 +0.003945,106 +0.003031,106 +0.003347,106 +0.003095,106 +0.003152,106 +0.003090,106 +0.003259,106 +0.003189,106 +0.002980,106 +0.002939,106 +0.002946,106 +0.003175,106 +0.003065,106 +0.003058,106 +0.002943,106 +0.002907,106 +0.003187,108 +0.003114,108 +0.003144,108 +0.003167,108 +0.003105,108 +0.003137,108 +0.003077,108 +0.003091,108 +0.003151,108 +0.003082,108 +0.003082,108 +0.003137,108 +0.003076,108 +0.003128,108 +0.003080,108 +0.003082,108 +0.003117,108 +0.003076,108 +0.003171,108 +0.003267,108 +0.003295,108 +0.003273,108 +0.003076,108 +0.003203,108 +0.003136,108 +0.003176,108 +0.003111,108 +0.003154,108 +0.003122,108 +0.003130,108 +0.003084,108 +0.003076,108 +0.003118,108 +0.003448,108 +0.003253,108 +0.003176,108 +0.003076,108 +0.003272,108 +0.003213,108 +0.003440,108 +0.003461,108 +0.003272,108 +0.003390,108 +0.003595,108 +0.003716,108 +0.003763,108 +0.003569,108 +0.003491,108 +0.004074,108 +0.004008,108 +0.003675,108 +0.003863,108 +0.004063,108 +0.004119,108 +0.003293,108 +0.003363,108 +0.003859,108 +0.004069,108 +0.003520,108 +0.003406,108 +0.003918,108 +0.003379,108 +0.003471,108 +0.003419,108 +0.003413,108 +0.003456,108 +0.003645,108 +0.003479,108 +0.003432,108 +0.003446,108 +0.003743,108 +0.003456,108 +0.003485,108 +0.003335,108 +0.003717,108 +0.003818,108 +0.004702,108 +0.003204,108 +0.003619,108 +0.004511,108 +0.003444,108 +0.003417,108 +0.003457,108 +0.003391,108 +0.004317,108 +0.003866,108 +0.003940,108 +0.004001,108 +0.004094,108 +0.003464,108 +0.003306,108 +0.003358,108 +0.004539,108 +0.003901,108 +0.003670,108 +0.003260,108 +0.003190,108 +0.003597,108 +0.003501,108 +0.003408,108 +0.003429,110 +0.003429,110 +0.003797,110 +0.004116,110 +0.004120,110 +0.003768,110 +0.004135,110 +0.003665,110 +0.003478,110 +0.003370,110 +0.003650,110 +0.003790,110 +0.003530,110 +0.003283,110 +0.003287,110 +0.003979,110 +0.003637,110 +0.003364,110 +0.003284,110 +0.003276,110 +0.003956,110 +0.003654,110 +0.003303,110 +0.003277,110 +0.003401,110 +0.003906,110 +0.003552,110 +0.003310,110 +0.003291,110 +0.003906,110 +0.003494,110 +0.004124,110 +0.004018,110 +0.003607,110 +0.004405,110 +0.003534,110 +0.003367,110 +0.003302,110 +0.004091,110 +0.003674,110 +0.003433,110 +0.003281,110 +0.003282,110 +0.004209,110 +0.004076,110 +0.003343,110 +0.003248,110 +0.003524,110 +0.004683,110 +0.003419,110 +0.003310,110 +0.003274,110 +0.003638,110 +0.004112,110 +0.003305,110 +0.003293,110 +0.003420,110 +0.004203,110 +0.003878,110 +0.003977,110 +0.003768,110 +0.004266,110 +0.003622,110 +0.003306,110 +0.003291,110 +0.003711,110 +0.004202,110 +0.003488,110 +0.003287,110 +0.003288,110 +0.004122,110 +0.003463,110 +0.003373,110 +0.003309,110 +0.003280,110 +0.003765,110 +0.003592,110 +0.003307,110 +0.003268,110 +0.003380,110 +0.003534,110 +0.003634,110 +0.003308,110 +0.003291,110 +0.003403,110 +0.003537,110 +0.003463,110 +0.004221,110 +0.003886,110 +0.003534,110 +0.003454,110 +0.003349,110 +0.003297,110 +0.003337,110 +0.003307,110 +0.003330,110 +0.003333,110 +0.003292,110 +0.003253,110 +0.003314,110 +0.003456,112 +0.003488,112 +0.003424,112 +0.003424,112 +0.003485,112 +0.003424,112 +0.003509,112 +0.003465,112 +0.003487,112 +0.003426,112 +0.003655,112 +0.003506,112 +0.003448,112 +0.003691,112 +0.003444,112 +0.003525,112 +0.004253,112 +0.004014,112 +0.003595,112 +0.003568,112 +0.003467,112 +0.003682,112 +0.003663,112 +0.003452,112 +0.003849,112 +0.003829,112 +0.003802,112 +0.004047,112 +0.003946,112 +0.003842,112 +0.003872,112 +0.003809,112 +0.003732,112 +0.003750,112 +0.003766,112 +0.003737,112 +0.003740,112 +0.003876,112 +0.003732,112 +0.003700,112 +0.004181,112 +0.004431,112 +0.004791,112 +0.004435,112 +0.004282,112 +0.004833,112 +0.003635,112 +0.003641,112 +0.004416,112 +0.004212,112 +0.003849,112 +0.003800,112 +0.004405,112 +0.004508,112 +0.003790,112 +0.003760,112 +0.004236,112 +0.004309,112 +0.004036,112 +0.004067,112 +0.004138,112 +0.004338,112 +0.003998,112 +0.003950,112 +0.004470,112 +0.004087,112 +0.003750,112 +0.003674,112 +0.004195,112 +0.003909,112 +0.003730,112 +0.003789,112 +0.003871,112 +0.004001,112 +0.003885,112 +0.003800,112 +0.003805,112 +0.003705,112 +0.003966,112 +0.003826,112 +0.003758,112 +0.004308,112 +0.004099,112 +0.003878,112 +0.003669,112 +0.004048,112 +0.003747,112 +0.004013,112 +0.003836,112 +0.004167,112 +0.004281,112 +0.003775,112 +0.003679,112 +0.003618,112 +0.004103,112 +0.004505,112 +0.003802,112 +0.003920,112 +0.004098,112 +0.003758,112 +0.004096,114 +0.004092,114 +0.004524,114 +0.003986,114 +0.004240,114 +0.004373,114 +0.004719,114 +0.004651,114 +0.004453,114 +0.004648,114 +0.004415,114 +0.004713,114 +0.004440,114 +0.004585,114 +0.004241,114 +0.003937,114 +0.003874,114 +0.004223,114 +0.004237,114 +0.004248,114 +0.003954,114 +0.004599,114 +0.003933,114 +0.004173,114 +0.003968,114 +0.004382,114 +0.004115,114 +0.004127,114 +0.004023,114 +0.004088,114 +0.004349,114 +0.004448,114 +0.004103,114 +0.004327,114 +0.004140,114 +0.004051,114 +0.004106,114 +0.004270,114 +0.004178,114 +0.004092,114 +0.004039,114 +0.003899,114 +0.004260,114 +0.004283,114 +0.004056,114 +0.004069,114 +0.004379,114 +0.004036,114 +0.004061,114 +0.004247,114 +0.003940,114 +0.004357,114 +0.004266,114 +0.004872,114 +0.004120,114 +0.004111,114 +0.004133,114 +0.004764,114 +0.004693,114 +0.004351,114 +0.004444,114 +0.004386,114 +0.004131,114 +0.004052,114 +0.003993,114 +0.004490,114 +0.004194,114 +0.004035,114 +0.004154,114 +0.004109,114 +0.004098,114 +0.004010,114 +0.004149,114 +0.004626,114 +0.004505,114 +0.003911,114 +0.004349,114 +0.004280,114 +0.004227,114 +0.003865,114 +0.004203,114 +0.004726,114 +0.004246,114 +0.004057,114 +0.004151,114 +0.004506,114 +0.004091,114 +0.004129,114 +0.003975,114 +0.004005,114 +0.004205,114 +0.004115,114 +0.004046,114 +0.004115,114 +0.004059,114 +0.003898,114 +0.003900,114 +0.004033,114 +0.003874,114 +0.003878,114 +0.004165,116 +0.004023,116 +0.003963,116 +0.003937,116 +0.003927,116 +0.003950,116 +0.004177,116 +0.003951,116 +0.003834,116 +0.003977,116 +0.003862,116 +0.003893,116 +0.003824,116 +0.003883,116 +0.004006,116 +0.004065,116 +0.003836,116 +0.003913,116 +0.003836,116 +0.003851,116 +0.003851,116 +0.003833,116 +0.003878,116 +0.003807,116 +0.003856,116 +0.003801,116 +0.003897,116 +0.003805,116 +0.003903,116 +0.003825,116 +0.003925,116 +0.003808,116 +0.003824,116 +0.003827,116 +0.003812,116 +0.003879,116 +0.003935,116 +0.003904,116 +0.003808,116 +0.003932,116 +0.003906,116 +0.004212,116 +0.003857,116 +0.004047,116 +0.003861,116 +0.003930,116 +0.003859,116 +0.003830,116 +0.003823,116 +0.003885,116 +0.003844,116 +0.003812,116 +0.003804,116 +0.003832,116 +0.003877,116 +0.003803,116 +0.003807,116 +0.003801,116 +0.003831,116 +0.003943,116 +0.003805,116 +0.003826,116 +0.003802,116 +0.003859,116 +0.003803,116 +0.003913,116 +0.003920,116 +0.004088,116 +0.003964,116 +0.003828,116 +0.003826,116 +0.003879,116 +0.003828,116 +0.003809,116 +0.003812,116 +0.003832,116 +0.003845,116 +0.003829,116 +0.003806,116 +0.003802,116 +0.003875,116 +0.003803,116 +0.003804,116 +0.003800,116 +0.003830,116 +0.003849,116 +0.003802,116 +0.003805,116 +0.003802,116 +0.003875,116 +0.003802,116 +0.003932,116 +0.003888,116 +0.004108,116 +0.003871,116 +0.003825,116 +0.003979,116 +0.003924,116 +0.003832,116 +0.003967,116 +0.004099,118 +0.004075,118 +0.004074,118 +0.004004,118 +0.004010,118 +0.004033,118 +0.004051,118 +0.004004,118 +0.004004,118 +0.004007,118 +0.004094,118 +0.004050,118 +0.004003,118 +0.004006,118 +0.004077,118 +0.004006,118 +0.004087,118 +0.004210,118 +0.004358,118 +0.004105,118 +0.004024,118 +0.004011,118 +0.004085,118 +0.004140,118 +0.004008,118 +0.004016,118 +0.004140,118 +0.004010,118 +0.004005,118 +0.004004,118 +0.004075,118 +0.004006,118 +0.004006,118 +0.004004,118 +0.004124,118 +0.004004,118 +0.004149,118 +0.004055,118 +0.004022,118 +0.004042,118 +0.004037,118 +0.004253,118 +0.004472,118 +0.004140,118 +0.004036,118 +0.004067,118 +0.004177,118 +0.004095,118 +0.004128,118 +0.004145,118 +0.004078,118 +0.004070,118 +0.004007,118 +0.004009,118 +0.004034,118 +0.004069,118 +0.004007,118 +0.004009,118 +0.004007,118 +0.004071,118 +0.004006,118 +0.004003,118 +0.004006,118 +0.004093,118 +0.004039,118 +0.004071,118 +0.004192,118 +0.004376,118 +0.004032,118 +0.004024,118 +0.004029,118 +0.004094,118 +0.004011,118 +0.004007,118 +0.004009,118 +0.004075,118 +0.004004,118 +0.004006,118 +0.004004,118 +0.004078,118 +0.004024,118 +0.004006,118 +0.004003,118 +0.004033,118 +0.004112,118 +0.004038,118 +0.004023,118 +0.004035,118 +0.004048,118 +0.004004,118 +0.004159,118 +0.004318,118 +0.004226,118 +0.004037,118 +0.004078,118 +0.004100,118 +0.004078,118 +0.004041,118 +0.004005,118 +0.004013,118 +0.004287,120 +0.004207,120 +0.004205,120 +0.004205,120 +0.004275,120 +0.004208,120 +0.004204,120 +0.004206,120 +0.004272,120 +0.004207,120 +0.004204,120 +0.004236,120 +0.004244,120 +0.004211,120 +0.004343,120 +0.004570,120 +0.004448,120 +0.004240,120 +0.004242,120 +0.004260,120 +0.004269,120 +0.004209,120 +0.004207,120 +0.004272,120 +0.004207,120 +0.004203,120 +0.004206,120 +0.004277,120 +0.004204,120 +0.004205,120 +0.004203,120 +0.004275,120 +0.004203,120 +0.004205,120 +0.004223,120 +0.004274,120 +0.004203,120 +0.004205,120 +0.004403,120 +0.004593,120 +0.004256,120 +0.004269,120 +0.004335,120 +0.004336,120 +0.004315,120 +0.004269,120 +0.004230,120 +0.004365,120 +0.004229,120 +0.004224,120 +0.004224,120 +0.004274,120 +0.004204,120 +0.004206,120 +0.004233,120 +0.004246,120 +0.004391,120 +0.004207,120 +0.004236,120 +0.004243,120 +0.004206,120 +0.004343,120 +0.004532,120 +0.004434,120 +0.004247,120 +0.004307,120 +0.004299,120 +0.004225,120 +0.004233,120 +0.004225,120 +0.004294,120 +0.004319,120 +0.004244,120 +0.004232,120 +0.004317,120 +0.004256,120 +0.004245,120 +0.004250,120 +0.004315,120 +0.004206,120 +0.004204,120 +0.004205,120 +0.004273,120 +0.004206,120 +0.004238,120 +0.004449,120 +0.004641,120 +0.004204,120 +0.004205,120 +0.004224,120 +0.004247,120 +0.004204,120 +0.004205,120 +0.004233,120 +0.004265,120 +0.004204,120 +0.004205,120 +0.004231,120 +0.004290,120 +0.004203,120 +0.004448,122 +0.004493,122 +0.004564,122 +0.004424,122 +0.004419,122 +0.004477,122 +0.004420,122 +0.004419,122 +0.004614,122 +0.004852,122 +0.004420,122 +0.004643,122 +0.004469,122 +0.004523,122 +0.004598,122 +0.004456,122 +0.004554,122 +0.004446,122 +0.004423,122 +0.004419,122 +0.004492,122 +0.004420,122 +0.004420,122 +0.004452,122 +0.004460,122 +0.004424,122 +0.004421,122 +0.004471,122 +0.004488,122 +0.004445,122 +0.004588,122 +0.004816,122 +0.004674,122 +0.004440,122 +0.004448,122 +0.004523,122 +0.004466,122 +0.004424,122 +0.004470,122 +0.004481,122 +0.004423,122 +0.004464,122 +0.004488,122 +0.004422,122 +0.004427,122 +0.004422,122 +0.004530,122 +0.004423,122 +0.004420,122 +0.004422,122 +0.004537,122 +0.004419,122 +0.004470,122 +0.004943,122 +0.004728,122 +0.004450,122 +0.004420,122 +0.004705,122 +0.004813,122 +0.004763,122 +0.004560,122 +0.004446,122 +0.004525,122 +0.004445,122 +0.004512,122 +0.004572,122 +0.004654,122 +0.004420,122 +0.004476,122 +0.004561,122 +0.004623,122 +0.004454,122 +0.004489,122 +0.004460,122 +0.004494,122 +0.004738,122 +0.004682,122 +0.004465,122 +0.004475,122 +0.004489,122 +0.004479,122 +0.004420,122 +0.004420,122 +0.004477,122 +0.004420,122 +0.004442,122 +0.004431,122 +0.004486,122 +0.004441,122 +0.004464,122 +0.004468,122 +0.004420,122 +0.004422,122 +0.004419,122 +0.004512,122 +0.004420,122 +0.004425,122 +0.004646,122 +0.004711,122 +0.004576,122 +0.004711,124 +0.004750,124 +0.004739,124 +0.004677,124 +0.004678,124 +0.004712,124 +0.004638,124 +0.004635,124 +0.004690,124 +0.004638,124 +0.004636,124 +0.004637,124 +0.004684,124 +0.004695,124 +0.004646,124 +0.004648,124 +0.004681,124 +0.004635,124 +0.004683,124 +0.004996,124 +0.004826,124 +0.004724,124 +0.004688,124 +0.004707,124 +0.004640,124 +0.004642,124 +0.004685,124 +0.004681,124 +0.004666,124 +0.004638,124 +0.004685,124 +0.004640,124 +0.004692,124 +0.004689,124 +0.004635,124 +0.004641,124 +0.004636,124 +0.004689,124 +0.004661,124 +0.004636,124 +0.004882,124 +0.004919,124 +0.004701,124 +0.004638,124 +0.004705,124 +0.004638,124 +0.004636,124 +0.004647,124 +0.004680,124 +0.004636,124 +0.005736,124 +0.004788,124 +0.004636,124 +0.004643,124 +0.004678,124 +0.004667,124 +0.004638,124 +0.004635,124 +0.004687,124 +0.004641,124 +0.004636,124 +0.004925,124 +0.005010,124 +0.004684,124 +0.004679,124 +0.004749,124 +0.004758,124 +0.004657,124 +0.004758,124 +0.004704,124 +0.004636,124 +0.004638,124 +0.004706,124 +0.004639,124 +0.004636,124 +0.004667,124 +0.004699,124 +0.004636,124 +0.004670,124 +0.004706,124 +0.004659,124 +0.004635,124 +0.004787,124 +0.005047,124 +0.004857,124 +0.004656,124 +0.004749,124 +0.004659,124 +0.004636,124 +0.004662,124 +0.004766,124 +0.004687,124 +0.004664,124 +0.004730,124 +0.004661,124 +0.004636,124 +0.004642,124 +0.004704,124 +0.004640,124 +0.004638,124 +0.004915,126 +0.004906,126 +0.004864,126 +0.004917,126 +0.005215,126 +0.005071,126 +0.004884,126 +0.005222,126 +0.004990,126 +0.005259,126 +0.005390,126 +0.005463,126 +0.005577,126 +0.005841,126 +0.005507,126 +0.005470,126 +0.005750,126 +0.007375,126 +0.006174,126 +0.006265,126 +0.005507,126 +0.005868,126 +0.009030,126 +0.007537,126 +0.007350,126 +0.005591,126 +0.005574,126 +0.007123,126 +0.005460,126 +0.005456,126 +0.007157,126 +0.005286,126 +0.005380,126 +0.006827,126 +0.005305,126 +0.005246,126 +0.006802,126 +0.005030,126 +0.008349,126 +0.008952,126 +0.004990,126 +0.004984,126 +0.004962,126 +0.004979,126 +0.005130,126 +0.004950,126 +0.005002,126 +0.004897,126 +0.004938,126 +0.004991,126 +0.004948,126 +0.005013,126 +0.004889,126 +0.004946,126 +0.004927,126 +0.004868,126 +0.006621,126 +0.008387,126 +0.004923,126 +0.004954,126 +0.004954,126 +0.004868,126 +0.005026,126 +0.004867,126 +0.004864,126 +0.004906,126 +0.004905,126 +0.004864,126 +0.004866,126 +0.004947,126 +0.004884,126 +0.004866,126 +0.004942,126 +0.004866,126 +0.004867,126 +0.005186,126 +0.008795,126 +0.005915,126 +0.004976,126 +0.004869,126 +0.004885,126 +0.004933,126 +0.004925,126 +0.004887,126 +0.004868,126 +0.004964,126 +0.004888,126 +0.004887,126 +0.004947,126 +0.004867,126 +0.004949,126 +0.004907,126 +0.004930,126 +0.004866,126 +0.004866,126 +0.007738,126 +0.007211,126 +0.004975,126 +0.004872,126 +0.004864,126 +0.005386,128 +0.005457,128 +0.005374,128 +0.005376,128 +0.005440,128 +0.005372,128 +0.005418,128 +0.005458,128 +0.005413,128 +0.005375,128 +0.005435,128 +0.005372,128 +0.005376,128 +0.007662,128 +0.008165,128 +0.005499,128 +0.005405,128 +0.005429,128 +0.005458,128 +0.005401,128 +0.005376,128 +0.005431,128 +0.005375,128 +0.005376,128 +0.005431,128 +0.005375,128 +0.005376,128 +0.005392,128 +0.005415,128 +0.005377,128 +0.005393,128 +0.008756,128 +0.007322,128 +0.005482,128 +0.005442,128 +0.005407,128 +0.005487,128 +0.005377,128 +0.005396,128 +0.005436,128 +0.005373,128 +0.005375,128 +0.005435,128 +0.005373,128 +0.005418,128 +0.005435,128 +0.005373,128 +0.005376,128 +0.006360,128 +0.009397,128 +0.005654,128 +0.005469,128 +0.005642,128 +0.005554,128 +0.005407,128 +0.005405,128 +0.005435,128 +0.005401,128 +0.005411,128 +0.005434,128 +0.005408,128 +0.005464,128 +0.005396,128 +0.005417,128 +0.005377,128 +0.005395,128 +0.008415,128 +0.007413,128 +0.005487,128 +0.005378,128 +0.005376,128 +0.005459,128 +0.005373,128 +0.005375,128 +0.005466,128 +0.005374,128 +0.005660,128 +0.006978,128 +0.005549,128 +0.005383,128 +0.005587,128 +0.006194,128 +0.005526,128 +0.008246,128 +0.008427,128 +0.005702,128 +0.005406,128 +0.005692,128 +0.005657,128 +0.005604,128 +0.005617,128 +0.005458,128 +0.005567,128 +0.005881,128 +0.005510,128 +0.005733,128 +0.005493,128 +0.005481,128 +0.005583,128 +0.005448,128 +0.007634,130 +0.008371,130 +0.005475,130 +0.005438,130 +0.005381,130 +0.005505,130 +0.005396,130 +0.005344,130 +0.005421,130 +0.005375,130 +0.005337,130 +0.005420,130 +0.005397,130 +0.005339,130 +0.005418,130 +0.005390,130 +0.005344,130 +0.005521,130 +0.007434,130 +0.008883,130 +0.005438,130 +0.005415,130 +0.005448,130 +0.005405,130 +0.005400,130 +0.005437,130 +0.005424,130 +0.005340,130 +0.005439,130 +0.005372,130 +0.005340,130 +0.005378,130 +0.005383,130 +0.005380,130 +0.005378,130 +0.006334,130 +0.009437,130 +0.005541,130 +0.005377,130 +0.005616,130 +0.005437,130 +0.005339,130 +0.005600,130 +0.005439,130 +0.005337,130 +0.005339,130 +0.005459,130 +0.005337,130 +0.005339,130 +0.005439,130 +0.005337,130 +0.005341,130 +0.005442,130 +0.007503,130 +0.008373,130 +0.005348,130 +0.005343,130 +0.005455,130 +0.005339,130 +0.005364,130 +0.005397,130 +0.005379,130 +0.005341,130 +0.005378,130 +0.005380,130 +0.005342,130 +0.005357,130 +0.005421,130 +0.005341,130 +0.005337,130 +0.005517,130 +0.008094,130 +0.007734,130 +0.005471,130 +0.006000,130 +0.006253,130 +0.005450,130 +0.005444,130 +0.005474,130 +0.005337,130 +0.005420,130 +0.005439,130 +0.005398,130 +0.005341,130 +0.005421,130 +0.005338,130 +0.005342,130 +0.005425,130 +0.006189,130 +0.009636,130 +0.005515,130 +0.005400,130 +0.005429,130 +0.005374,130 +0.005482,130 +0.005847,130 +0.005396,130 +0.005360,130 +0.005418,130 +0.005342,130 +0.005615,132 +0.005666,132 +0.005921,132 +0.005611,132 +0.005735,132 +0.005710,132 +0.010125,132 +0.006354,132 +0.005653,132 +0.005672,132 +0.005607,132 +0.005646,132 +0.005715,132 +0.006172,132 +0.006019,132 +0.005687,132 +0.005589,132 +0.005627,132 +0.005667,132 +0.005585,132 +0.005590,132 +0.005691,132 +0.007254,132 +0.009219,132 +0.005691,132 +0.005624,132 +0.005865,132 +0.005591,132 +0.005606,132 +0.005692,132 +0.005588,132 +0.005589,132 +0.005665,132 +0.005587,132 +0.005611,132 +0.005685,132 +0.005606,132 +0.005592,132 +0.005745,132 +0.007300,132 +0.009084,132 +0.005619,132 +0.005597,132 +0.005708,132 +0.005624,132 +0.005675,132 +0.005747,132 +0.005725,132 +0.005683,132 +0.005650,132 +0.005598,132 +0.005613,132 +0.005687,132 +0.005588,132 +0.005605,132 +0.005759,132 +0.007564,132 +0.008772,132 +0.005623,132 +0.005671,132 +0.005660,132 +0.005645,132 +0.005625,132 +0.005628,132 +0.005589,132 +0.005606,132 +0.005635,132 +0.005744,132 +0.005645,132 +0.005590,132 +0.005586,132 +0.005669,132 +0.005738,132 +0.007667,132 +0.008944,132 +0.005686,132 +0.005690,132 +0.006929,132 +0.010806,132 +0.010826,132 +0.010964,132 +0.010989,132 +0.010404,132 +0.008319,132 +0.005731,132 +0.008331,132 +0.008752,132 +0.005674,132 +0.005879,132 +0.005639,132 +0.005672,132 +0.005971,132 +0.005622,132 +0.005645,132 +0.005624,132 +0.005586,132 +0.005622,132 +0.005624,132 +0.005585,132 +0.005644,132 +0.005968,134 +0.006600,134 +0.010243,134 +0.005955,134 +0.006033,134 +0.005905,134 +0.005864,134 +0.005923,134 +0.005841,134 +0.005846,134 +0.005925,134 +0.005844,134 +0.005881,134 +0.005923,134 +0.005842,134 +0.005863,134 +0.005983,134 +0.006247,134 +0.010562,134 +0.006022,134 +0.005924,134 +0.005888,134 +0.005843,134 +0.005924,134 +0.005841,134 +0.005843,134 +0.005926,134 +0.005840,134 +0.005844,134 +0.005922,134 +0.005846,134 +0.005840,134 +0.005944,134 +0.005923,134 +0.009654,134 +0.007257,134 +0.005909,134 +0.005901,134 +0.005865,134 +0.005921,134 +0.005845,134 +0.005841,134 +0.005926,134 +0.005883,134 +0.005865,134 +0.005927,134 +0.005846,134 +0.005843,134 +0.005923,134 +0.005908,134 +0.008324,134 +0.008524,134 +0.005931,134 +0.005912,134 +0.005887,134 +0.006011,134 +0.005851,134 +0.005841,134 +0.005926,134 +0.005842,134 +0.005844,134 +0.005920,134 +0.005845,134 +0.005842,134 +0.005939,134 +0.005904,134 +0.007211,134 +0.009723,134 +0.005917,134 +0.005949,134 +0.005866,134 +0.005883,134 +0.005884,134 +0.005840,134 +0.005925,134 +0.005842,134 +0.005845,134 +0.005928,134 +0.005843,134 +0.005844,134 +0.005949,134 +0.005903,134 +0.005978,134 +0.010587,134 +0.006265,134 +0.005974,134 +0.005847,134 +0.005888,134 +0.005879,134 +0.005845,134 +0.005881,134 +0.005883,134 +0.005842,134 +0.005926,134 +0.005844,134 +0.005844,134 +0.005926,134 +0.005949,134 +0.005843,134 +0.009580,134 +0.007544,136 +0.006259,136 +0.006137,136 +0.006177,136 +0.006148,136 +0.006099,136 +0.006257,136 +0.006103,136 +0.006102,136 +0.006180,136 +0.006124,136 +0.006101,136 +0.006234,136 +0.006189,136 +0.007276,136 +0.010162,136 +0.006208,136 +0.006129,136 +0.006098,136 +0.006184,136 +0.006101,136 +0.006133,136 +0.006182,136 +0.006138,136 +0.006145,136 +0.006140,136 +0.006122,136 +0.006238,136 +0.006165,136 +0.006100,136 +0.009424,136 +0.007949,136 +0.006220,136 +0.006165,136 +0.006179,136 +0.006205,136 +0.006099,136 +0.006204,136 +0.006101,136 +0.006102,136 +0.006177,136 +0.006145,136 +0.006163,136 +0.006159,136 +0.006162,136 +0.006208,136 +0.010491,136 +0.007331,136 +0.006136,136 +0.006138,136 +0.006207,136 +0.006110,136 +0.006183,136 +0.006164,136 +0.006098,136 +0.006185,136 +0.006101,136 +0.006102,136 +0.006207,136 +0.006182,136 +0.006102,136 +0.009914,136 +0.007608,136 +0.006170,136 +0.006119,136 +0.006205,136 +0.006101,136 +0.006102,136 +0.006182,136 +0.006102,136 +0.006121,136 +0.006210,136 +0.006097,136 +0.006181,136 +0.006171,136 +0.006104,136 +0.007201,136 +0.010121,136 +0.006260,136 +0.006129,136 +0.006142,136 +0.006253,136 +0.006098,136 +0.006221,136 +0.006100,136 +0.006102,136 +0.006218,136 +0.006102,136 +0.006113,136 +0.006188,136 +0.006159,136 +0.006146,136 +0.009205,136 +0.008398,136 +0.006163,136 +0.006129,136 +0.006238,136 +0.006110,136 +0.006101,136 +0.006184,136 +0.006475,138 +0.006483,138 +0.006375,138 +0.006380,138 +0.006462,138 +0.006437,138 +0.006422,138 +0.008880,138 +0.009047,138 +0.006436,138 +0.006377,138 +0.006463,138 +0.006380,138 +0.006415,138 +0.006424,138 +0.006379,138 +0.006465,138 +0.006380,138 +0.006375,138 +0.006458,138 +0.006482,138 +0.006478,138 +0.009612,138 +0.008407,138 +0.006416,138 +0.006408,138 +0.006474,138 +0.006380,138 +0.006463,138 +0.006381,138 +0.006463,138 +0.006476,138 +0.006379,138 +0.006420,138 +0.006414,138 +0.006450,138 +0.006463,138 +0.010245,138 +0.007760,138 +0.006435,138 +0.006458,138 +0.006458,138 +0.006388,138 +0.006456,138 +0.006402,138 +0.006378,138 +0.006481,138 +0.006399,138 +0.006458,138 +0.006480,138 +0.006398,138 +0.006459,138 +0.010950,138 +0.006932,138 +0.006438,138 +0.006532,138 +0.006417,138 +0.006415,138 +0.006459,138 +0.006376,138 +0.006423,138 +0.006416,138 +0.006381,138 +0.006499,138 +0.006475,138 +0.006380,138 +0.006794,138 +0.011207,138 +0.006485,138 +0.006396,138 +0.006503,138 +0.006445,138 +0.006410,138 +0.006490,138 +0.006439,138 +0.006463,138 +0.006386,138 +0.006378,138 +0.006462,138 +0.006463,138 +0.006458,138 +0.007488,138 +0.010416,138 +0.006409,138 +0.006401,138 +0.006456,138 +0.006436,138 +0.006480,138 +0.006379,138 +0.006380,138 +0.006474,138 +0.006375,138 +0.006423,138 +0.006417,138 +0.006450,138 +0.006461,138 +0.007113,138 +0.011225,138 +0.006471,138 +0.006478,138 +0.006769,140 +0.006656,140 +0.006753,140 +0.006655,140 +0.006738,140 +0.006691,140 +0.006655,140 +0.006737,140 +0.006713,140 +0.006737,140 +0.006694,140 +0.011793,140 +0.006709,140 +0.006807,140 +0.006790,140 +0.006687,140 +0.006729,140 +0.006655,140 +0.006696,140 +0.006692,140 +0.006655,140 +0.006736,140 +0.006710,140 +0.006765,140 +0.006694,140 +0.010488,140 +0.008057,140 +0.006740,140 +0.006800,140 +0.006695,140 +0.006780,140 +0.006676,140 +0.006678,140 +0.006751,140 +0.006655,140 +0.006747,140 +0.006761,140 +0.006656,140 +0.006732,140 +0.009127,140 +0.009353,140 +0.006724,140 +0.006806,140 +0.006677,140 +0.006760,140 +0.006654,140 +0.006715,140 +0.006734,140 +0.006651,140 +0.006733,140 +0.006684,140 +0.006766,140 +0.006730,140 +0.007838,140 +0.010583,140 +0.006669,140 +0.006790,140 +0.006676,140 +0.006704,140 +0.006691,140 +0.006655,140 +0.006734,140 +0.006676,140 +0.006805,140 +0.006760,140 +0.006711,140 +0.006734,140 +0.006655,140 +0.011768,140 +0.006691,140 +0.006817,140 +0.006717,140 +0.006691,140 +0.006778,140 +0.006655,140 +0.006731,140 +0.006655,140 +0.006719,140 +0.006782,140 +0.006765,140 +0.006796,140 +0.006700,140 +0.010922,140 +0.007698,140 +0.006781,140 +0.006674,140 +0.006694,140 +0.006740,140 +0.006651,140 +0.006738,140 +0.006656,140 +0.006655,140 +0.006736,140 +0.006822,140 +0.006776,140 +0.006673,140 +0.009524,140 +0.008979,140 +0.006754,140 +0.006715,140 +0.007035,142 +0.007048,142 +0.006946,142 +0.007020,142 +0.007048,142 +0.007000,142 +0.007080,142 +0.007065,142 +0.007026,142 +0.006946,142 +0.011171,142 +0.007917,142 +0.007063,142 +0.007218,142 +0.007036,142 +0.006964,142 +0.007092,142 +0.007063,142 +0.008122,142 +0.007109,142 +0.007142,142 +0.007097,142 +0.006951,142 +0.008729,142 +0.010398,142 +0.007144,142 +0.007088,142 +0.006942,142 +0.007028,142 +0.006949,142 +0.007069,142 +0.007492,142 +0.007120,142 +0.007258,142 +0.007069,142 +0.007050,142 +0.006944,142 +0.010432,142 +0.009191,142 +0.007110,142 +0.007057,142 +0.007094,142 +0.006976,142 +0.007043,142 +0.006947,142 +0.006946,142 +0.007023,142 +0.007052,142 +0.007024,142 +0.006946,142 +0.008870,142 +0.010285,142 +0.007081,142 +0.006970,142 +0.007068,142 +0.007010,142 +0.007010,142 +0.007087,142 +0.006966,142 +0.007024,142 +0.006985,142 +0.007014,142 +0.007026,142 +0.006945,142 +0.010603,142 +0.008532,142 +0.007087,142 +0.006987,142 +0.007045,142 +0.006968,142 +0.007052,142 +0.007006,142 +0.006958,142 +0.007029,142 +0.007006,142 +0.007024,142 +0.006943,142 +0.006946,142 +0.012083,142 +0.007096,142 +0.006994,142 +0.006994,142 +0.007034,142 +0.007008,142 +0.007026,142 +0.006946,142 +0.006985,142 +0.006985,142 +0.007024,142 +0.007025,142 +0.006942,142 +0.008762,142 +0.010367,142 +0.007151,142 +0.006977,142 +0.007046,142 +0.006955,142 +0.006988,142 +0.006987,142 +0.006944,142 +0.007327,144 +0.007334,144 +0.007310,144 +0.007232,144 +0.007268,144 +0.012184,144 +0.007532,144 +0.007281,144 +0.007333,144 +0.007233,144 +0.007237,144 +0.007310,144 +0.007274,144 +0.007310,144 +0.007298,144 +0.007331,144 +0.007454,144 +0.007391,144 +0.011581,144 +0.007960,144 +0.007244,144 +0.007270,144 +0.007314,144 +0.007273,144 +0.007328,144 +0.007248,144 +0.007312,144 +0.007335,144 +0.007310,144 +0.007232,144 +0.007269,144 +0.010878,144 +0.008735,144 +0.007287,144 +0.007312,144 +0.007293,144 +0.007232,144 +0.007358,144 +0.007243,144 +0.007335,144 +0.007291,144 +0.007310,144 +0.007231,144 +0.007227,144 +0.010332,144 +0.009383,144 +0.007242,144 +0.007305,144 +0.007304,144 +0.007293,144 +0.007309,144 +0.007232,144 +0.007310,144 +0.007312,144 +0.007339,144 +0.007228,144 +0.007231,144 +0.009600,144 +0.010036,144 +0.007243,144 +0.007316,144 +0.007283,144 +0.007262,144 +0.007314,144 +0.007254,144 +0.007333,144 +0.007283,144 +0.007355,144 +0.007228,144 +0.007274,144 +0.007931,144 +0.012148,144 +0.007279,144 +0.007336,144 +0.007293,144 +0.007232,144 +0.007309,144 +0.007231,144 +0.007310,144 +0.007292,144 +0.007352,144 +0.007228,144 +0.007375,144 +0.009157,144 +0.010462,144 +0.007231,144 +0.007276,144 +0.007271,144 +0.007230,144 +0.007311,144 +0.007231,144 +0.007312,144 +0.007291,144 +0.007270,144 +0.007267,144 +0.007231,144 +0.008402,144 +0.011334,144 +0.007284,144 +0.007240,144 +0.007692,146 +0.007635,146 +0.007671,146 +0.007604,146 +0.007675,146 +0.007674,146 +0.007691,146 +0.007592,146 +0.008196,146 +0.011100,146 +0.009205,146 +0.007645,146 +0.007745,146 +0.007741,146 +0.007693,146 +0.007592,146 +0.007713,146 +0.007721,146 +0.007635,146 +0.007631,146 +0.007589,146 +0.008456,146 +0.011895,146 +0.007599,146 +0.007672,146 +0.007591,146 +0.007850,146 +0.007654,146 +0.007612,146 +0.007675,146 +0.007654,146 +0.007694,146 +0.007590,146 +0.007653,146 +0.011486,146 +0.008898,146 +0.007667,146 +0.007743,146 +0.007588,146 +0.007674,146 +0.007592,146 +0.007675,146 +0.007653,146 +0.007671,146 +0.007592,146 +0.007812,146 +0.008585,146 +0.011660,146 +0.007667,146 +0.007763,146 +0.007664,146 +0.007691,146 +0.007589,146 +0.007630,146 +0.007656,146 +0.007675,146 +0.007671,146 +0.007592,146 +0.007714,146 +0.011731,146 +0.008435,146 +0.007684,146 +0.007714,146 +0.007672,146 +0.007723,146 +0.007733,146 +0.007689,146 +0.007660,146 +0.007674,146 +0.007592,146 +0.007674,146 +0.008910,146 +0.011245,146 +0.007650,146 +0.007695,146 +0.007592,146 +0.007752,146 +0.007666,146 +0.007710,146 +0.007593,146 +0.007711,146 +0.007716,146 +0.007592,146 +0.007674,146 +0.012258,146 +0.007952,146 +0.007695,146 +0.007613,146 +0.007652,146 +0.007758,146 +0.007596,146 +0.007690,146 +0.007652,146 +0.007679,146 +0.007635,146 +0.007674,146 +0.008160,146 +0.012631,146 +0.008593,146 +0.007761,146 +0.007959,148 +0.007968,148 +0.007851,148 +0.007933,148 +0.007973,148 +0.007929,148 +0.008064,148 +0.007951,148 +0.009425,148 +0.011397,148 +0.007870,148 +0.007970,148 +0.007905,148 +0.007930,148 +0.007850,148 +0.007932,148 +0.007918,148 +0.007932,148 +0.007850,148 +0.007933,148 +0.008677,148 +0.012120,148 +0.007928,148 +0.007977,148 +0.007935,148 +0.007924,148 +0.007869,148 +0.007936,148 +0.007914,148 +0.007929,148 +0.007850,148 +0.007940,148 +0.008258,148 +0.012461,148 +0.007890,148 +0.007965,148 +0.007929,148 +0.007910,148 +0.007851,148 +0.007914,148 +0.007934,148 +0.007977,148 +0.007850,148 +0.007929,148 +0.007850,148 +0.012867,148 +0.007892,148 +0.007950,148 +0.007874,148 +0.007932,148 +0.007872,148 +0.007944,148 +0.007951,148 +0.007930,148 +0.007850,148 +0.007911,148 +0.007851,148 +0.012936,148 +0.007927,148 +0.007969,148 +0.007873,148 +0.007961,148 +0.007850,148 +0.007933,148 +0.007970,148 +0.007910,148 +0.007927,148 +0.007972,148 +0.007849,148 +0.012914,148 +0.007896,148 +0.007971,148 +0.007897,148 +0.007961,148 +0.007914,148 +0.007989,148 +0.007942,148 +0.007972,148 +0.007896,148 +0.007957,148 +0.007873,148 +0.012887,148 +0.007898,148 +0.007967,148 +0.007851,148 +0.007972,148 +0.007890,148 +0.007907,148 +0.007930,148 +0.007909,148 +0.007850,148 +0.007909,148 +0.007851,148 +0.012450,148 +0.008353,148 +0.007964,148 +0.007935,148 +0.007967,148 +0.007860,148 +0.008012,148 +0.008326,150 +0.008283,150 +0.008174,150 +0.008234,150 +0.008176,150 +0.013231,150 +0.008333,150 +0.008238,150 +0.008228,150 +0.008234,150 +0.008227,150 +0.008236,150 +0.008307,150 +0.008221,150 +0.008196,150 +0.008215,150 +0.009105,150 +0.013067,150 +0.009257,150 +0.008500,150 +0.008297,150 +0.008421,150 +0.008322,150 +0.008274,150 +0.008333,150 +0.008374,150 +0.008256,150 +0.008175,150 +0.013310,150 +0.008296,150 +0.008247,150 +0.008317,150 +0.008242,150 +0.008293,150 +0.008203,150 +0.008344,150 +0.008177,150 +0.008256,150 +0.008198,150 +0.010603,150 +0.010949,150 +0.008287,150 +0.008198,150 +0.008256,150 +0.008192,150 +0.008240,150 +0.008258,150 +0.008269,150 +0.008235,150 +0.008241,150 +0.008175,150 +0.013210,150 +0.008325,150 +0.008201,150 +0.008306,150 +0.008176,150 +0.008239,150 +0.008211,150 +0.008391,150 +0.008218,150 +0.008248,150 +0.008181,150 +0.009482,150 +0.011948,150 +0.008287,150 +0.008195,150 +0.008310,150 +0.008197,150 +0.008256,150 +0.008283,150 +0.008265,150 +0.008176,150 +0.008239,150 +0.008176,150 +0.012253,150 +0.009329,150 +0.008246,150 +0.008255,150 +0.008195,150 +0.008235,150 +0.008176,150 +0.008328,150 +0.008177,150 +0.008353,150 +0.008176,150 +0.008301,150 +0.013030,150 +0.008253,150 +0.008203,150 +0.008289,150 +0.008261,150 +0.008237,150 +0.008196,150 +0.008282,150 +0.008176,150 +0.008215,150 +0.008199,150 +0.011124,150 +0.010348,150 +0.008221,150 +0.008590,152 +0.008528,152 +0.008581,152 +0.008496,152 +0.008618,152 +0.008500,152 +0.008539,152 +0.008495,152 +0.009897,152 +0.012220,152 +0.008549,152 +0.008580,152 +0.008496,152 +0.008536,152 +0.008536,152 +0.008594,152 +0.008504,152 +0.008537,152 +0.008508,152 +0.008783,152 +0.013258,152 +0.008581,152 +0.008518,152 +0.008561,152 +0.008531,152 +0.008556,152 +0.008678,152 +0.008503,152 +0.008537,152 +0.008538,152 +0.008536,152 +0.013405,152 +0.009086,152 +0.008519,152 +0.008583,152 +0.008531,152 +0.008603,152 +0.008575,152 +0.008543,152 +0.008708,152 +0.008499,152 +0.008728,152 +0.013398,152 +0.008614,152 +0.008541,152 +0.008572,152 +0.008527,152 +0.008578,152 +0.008571,152 +0.008540,152 +0.008496,152 +0.008633,152 +0.008537,152 +0.012668,152 +0.009393,152 +0.008538,152 +0.008580,152 +0.008513,152 +0.008534,152 +0.008556,152 +0.008553,152 +0.008498,152 +0.008536,152 +0.008495,152 +0.011647,152 +0.010350,152 +0.008567,152 +0.008598,152 +0.008497,152 +0.008541,152 +0.008564,152 +0.008630,152 +0.008497,152 +0.008536,152 +0.008499,152 +0.010562,152 +0.011428,152 +0.008526,152 +0.008558,152 +0.008550,152 +0.008571,152 +0.008993,152 +0.009109,152 +0.008602,152 +0.008796,152 +0.008519,152 +0.010517,152 +0.011600,152 +0.008552,152 +0.008619,152 +0.008497,152 +0.008579,152 +0.008496,152 +0.008652,152 +0.008569,152 +0.008620,152 +0.008498,152 +0.009709,152 +0.012485,152 +0.008564,152 +0.009016,154 +0.008902,154 +0.008946,154 +0.008847,154 +0.008991,154 +0.008844,154 +0.008929,154 +0.008883,154 +0.011722,154 +0.011108,154 +0.008916,154 +0.008952,154 +0.008897,154 +0.008927,154 +0.008921,154 +0.008936,154 +0.008879,154 +0.008908,154 +0.008925,154 +0.013578,154 +0.009007,154 +0.008936,154 +0.008911,154 +0.008889,154 +0.008881,154 +0.009014,154 +0.008844,154 +0.008920,154 +0.008842,154 +0.008925,154 +0.013867,154 +0.008872,154 +0.008942,154 +0.008897,154 +0.008921,154 +0.008842,154 +0.008996,154 +0.009369,154 +0.009038,154 +0.008919,154 +0.009989,154 +0.013399,154 +0.008900,154 +0.008974,154 +0.008902,154 +0.008949,154 +0.008947,154 +0.008939,154 +0.009119,154 +0.008847,154 +0.008954,154 +0.013207,154 +0.009464,154 +0.008922,154 +0.008902,154 +0.008945,154 +0.008842,154 +0.009057,154 +0.008846,154 +0.008920,154 +0.008889,154 +0.008921,154 +0.013838,154 +0.008916,154 +0.008943,154 +0.008860,154 +0.008921,154 +0.008842,154 +0.009052,154 +0.008841,154 +0.008921,154 +0.008842,154 +0.010556,154 +0.012137,154 +0.008893,154 +0.009020,154 +0.008856,154 +0.008920,154 +0.008948,154 +0.009503,154 +0.008969,154 +0.008888,154 +0.008961,154 +0.012439,154 +0.010243,154 +0.008968,154 +0.008888,154 +0.008947,154 +0.008843,154 +0.008980,154 +0.008842,154 +0.008925,154 +0.008843,154 +0.008920,154 +0.013791,154 +0.008942,154 +0.008941,154 +0.008903,154 +0.008926,154 +0.008848,154 +0.009499,156 +0.009334,156 +0.009283,156 +0.009266,156 +0.011629,156 +0.011676,156 +0.009271,156 +0.009246,156 +0.009345,156 +0.009240,156 +0.009374,156 +0.009283,156 +0.009286,156 +0.009184,156 +0.009266,156 +0.014065,156 +0.009249,156 +0.009320,156 +0.009289,156 +0.009245,156 +0.009339,156 +0.009187,156 +0.009283,156 +0.009188,156 +0.009263,156 +0.013484,156 +0.009916,156 +0.009344,156 +0.009206,156 +0.009293,156 +0.009184,156 +0.009405,156 +0.009270,156 +0.009185,156 +0.009287,156 +0.011293,156 +0.012023,156 +0.009330,156 +0.009187,156 +0.009264,156 +0.009192,156 +0.009396,156 +0.009184,156 +0.009284,156 +0.009228,156 +0.009224,156 +0.014616,156 +0.009291,156 +0.009270,156 +0.009321,156 +0.009187,156 +0.009374,156 +0.009282,156 +0.009344,156 +0.009185,156 +0.009271,156 +0.013772,156 +0.009505,156 +0.009288,156 +0.009205,156 +0.009265,156 +0.009332,156 +0.009187,156 +0.009263,156 +0.009286,156 +0.009381,156 +0.010971,156 +0.012399,156 +0.009319,156 +0.009214,156 +0.009270,156 +0.009185,156 +0.009331,156 +0.009207,156 +0.009204,156 +0.009225,156 +0.009189,156 +0.014033,156 +0.009291,156 +0.009208,156 +0.009224,156 +0.009228,156 +0.009336,156 +0.009186,156 +0.009225,156 +0.009186,156 +0.009245,156 +0.012972,156 +0.010474,156 +0.009281,156 +0.009432,156 +0.009240,156 +0.009350,156 +0.009186,156 +0.009249,156 +0.009185,156 +0.009224,156 +0.010326,156 +0.013002,156 +0.009279,156 +0.009701,158 +0.009625,158 +0.009621,158 +0.009726,158 +0.009628,158 +0.009543,158 +0.009582,158 +0.010835,158 +0.013186,158 +0.009713,158 +0.009620,158 +0.009625,158 +0.009666,158 +0.009545,158 +0.009610,158 +0.009585,158 +0.009679,158 +0.010873,158 +0.013045,158 +0.009651,158 +0.009623,158 +0.009568,158 +0.009643,158 +0.009545,158 +0.009583,158 +0.009542,158 +0.009586,158 +0.010793,158 +0.013279,158 +0.009682,158 +0.009608,158 +0.009561,158 +0.009687,158 +0.009548,158 +0.009582,158 +0.009545,158 +0.009612,158 +0.010642,158 +0.013318,158 +0.009618,158 +0.009640,158 +0.009560,158 +0.009687,158 +0.009544,158 +0.009582,158 +0.009546,158 +0.009582,158 +0.009657,158 +0.014768,158 +0.009654,158 +0.009671,158 +0.009584,158 +0.009713,158 +0.009808,158 +0.009650,158 +0.009599,158 +0.009547,158 +0.009723,158 +0.009852,158 +0.009656,158 +0.009584,158 +0.009627,158 +0.009685,158 +0.009587,158 +0.009604,158 +0.009544,158 +0.009607,158 +0.009562,158 +0.009986,158 +0.009774,158 +0.009682,158 +0.011187,158 +0.009877,158 +0.009714,158 +0.009629,158 +0.009544,158 +0.009622,158 +0.009546,158 +0.009776,158 +0.009973,158 +0.009588,158 +0.010187,158 +0.009548,158 +0.009694,158 +0.009594,158 +0.009582,158 +0.009623,158 +0.009543,158 +0.009730,158 +0.009879,158 +0.009693,158 +0.009872,158 +0.009792,158 +0.009710,158 +0.009545,158 +0.009621,158 +0.009547,158 +0.009622,158 +0.009627,158 +0.010054,158 +0.010054,160 +0.009929,160 +0.010009,160 +0.009988,160 +0.010043,160 +0.010026,160 +0.009913,160 +0.009992,160 +0.009988,160 +0.010275,160 +0.010065,160 +0.009904,160 +0.010016,160 +0.009985,160 +0.009989,160 +0.009988,160 +0.009997,160 +0.010034,160 +0.010070,160 +0.010303,160 +0.010059,160 +0.009946,160 +0.010008,160 +0.009986,160 +0.009979,160 +0.009984,160 +0.009905,160 +0.009988,160 +0.009993,160 +0.010278,160 +0.010234,160 +0.009945,160 +0.010079,160 +0.009987,160 +0.009990,160 +0.012101,160 +0.010456,160 +0.009979,160 +0.010182,160 +0.010254,160 +0.010008,160 +0.009989,160 +0.009967,160 +0.010090,160 +0.009973,160 +0.010025,160 +0.009985,160 +0.009903,160 +0.010008,160 +0.010262,160 +0.010137,160 +0.010036,160 +0.009937,160 +0.010067,160 +0.010004,160 +0.010024,160 +0.009989,160 +0.009907,160 +0.009991,160 +0.010275,160 +0.010042,160 +0.009989,160 +0.009911,160 +0.010050,160 +0.009907,160 +0.010129,160 +0.010013,160 +0.009909,160 +0.009995,160 +0.010495,160 +0.010028,160 +0.010029,160 +0.009951,160 +0.010063,160 +0.010007,160 +0.009944,160 +0.009986,160 +0.009904,160 +0.010006,160 +0.010279,160 +0.010067,160 +0.010054,160 +0.009934,160 +0.010086,160 +0.009944,160 +0.009944,160 +0.009987,160 +0.009904,160 +0.009985,160 +0.010425,160 +0.009962,160 +0.009988,160 +0.009906,160 +0.010069,160 +0.009944,160 +0.009949,160 +0.009985,160 +0.009904,160 +0.010007,160 +0.010422,160 +0.010407,162 +0.010363,162 +0.010280,162 +0.010447,162 +0.010445,162 +0.010283,162 +0.010360,162 +0.010319,162 +0.010479,162 +0.010749,162 +0.010282,162 +0.010404,162 +0.010358,162 +0.010366,162 +0.010361,162 +0.010360,162 +0.010364,162 +0.010358,162 +0.010496,162 +0.010656,162 +0.010365,162 +0.010284,162 +0.010423,162 +0.010320,162 +0.010323,162 +0.010378,162 +0.010281,162 +0.010360,162 +0.010843,162 +0.010325,162 +0.010400,162 +0.010281,162 +0.010441,162 +0.010361,162 +0.010284,162 +0.010378,162 +0.010372,162 +0.010364,162 +0.010847,162 +0.010389,162 +0.010406,162 +0.010388,162 +0.010346,162 +0.010407,162 +0.010365,162 +0.010317,162 +0.010364,162 +0.010498,162 +0.010612,162 +0.010410,162 +0.010280,162 +0.010466,162 +0.010487,162 +0.010487,162 +0.010363,162 +0.010280,162 +0.010450,162 +0.010746,162 +0.010334,162 +0.010491,162 +0.010358,162 +0.010363,162 +0.010387,162 +0.010300,162 +0.010363,162 +0.010362,162 +0.010541,162 +0.010729,162 +0.010459,162 +0.010328,162 +0.010466,162 +0.010283,162 +0.010364,162 +0.010362,162 +0.010282,162 +0.010362,162 +0.010745,162 +0.010464,162 +0.010403,162 +0.010316,162 +0.010428,162 +0.010365,162 +0.010284,162 +0.010382,162 +0.010364,162 +0.010383,162 +0.010771,162 +0.010351,162 +0.010378,162 +0.010404,162 +0.010364,162 +0.011207,162 +0.010435,162 +0.010319,162 +0.010426,162 +0.010802,162 +0.010531,162 +0.010431,162 +0.010284,162 +0.010522,162 +0.010784,164 +0.010711,164 +0.010748,164 +0.010809,164 +0.010786,164 +0.011112,164 +0.010752,164 +0.010789,164 +0.010813,164 +0.010773,164 +0.010780,164 +0.011292,164 +0.011594,164 +0.011430,164 +0.011138,164 +0.010801,164 +0.010771,164 +0.010786,164 +0.010763,164 +0.010774,164 +0.010746,164 +0.010671,164 +0.010771,164 +0.011398,164 +0.010791,164 +0.010771,164 +0.010810,164 +0.010777,164 +0.010796,164 +0.010822,164 +0.011003,164 +0.010760,164 +0.010943,164 +0.011030,164 +0.010857,164 +0.010801,164 +0.010826,164 +0.010754,164 +0.010670,164 +0.010748,164 +0.010750,164 +0.010836,164 +0.011151,164 +0.010840,164 +0.010732,164 +0.010915,164 +0.010751,164 +0.010709,164 +0.010746,164 +0.010754,164 +0.010714,164 +0.011173,164 +0.010763,164 +0.010850,164 +0.010793,164 +0.010779,164 +0.010792,164 +0.010793,164 +0.010669,164 +0.010780,164 +0.011376,164 +0.010779,164 +0.010790,164 +0.010751,164 +0.010751,164 +0.010753,164 +0.010751,164 +0.010669,164 +0.010745,164 +0.010846,164 +0.012370,164 +0.010926,164 +0.011042,164 +0.010808,164 +0.010782,164 +0.010733,164 +0.010707,164 +0.010750,164 +0.010891,164 +0.011047,164 +0.011147,164 +0.010669,164 +0.010834,164 +0.010770,164 +0.010670,164 +0.010747,164 +0.010746,164 +0.010755,164 +0.011173,164 +0.011209,164 +0.010669,164 +0.011009,164 +0.010817,164 +0.010712,164 +0.010766,164 +0.010734,164 +0.010828,164 +0.011192,164 +0.010784,164 +0.010732,164 +0.011191,166 +0.011185,166 +0.011145,166 +0.011888,166 +0.012399,166 +0.012089,166 +0.011909,166 +0.011759,166 +0.011249,166 +0.011758,166 +0.011934,166 +0.011491,166 +0.011819,166 +0.011546,166 +0.011587,166 +0.011658,166 +0.012568,166 +0.011181,166 +0.011217,166 +0.011118,166 +0.011121,166 +0.011059,166 +0.011164,166 +0.011387,166 +0.011276,166 +0.011226,166 +0.011204,166 +0.011228,166 +0.011131,166 +0.011142,166 +0.011100,166 +0.011137,166 +0.011355,166 +0.011357,166 +0.011142,166 +0.011250,166 +0.011281,166 +0.011159,166 +0.011142,166 +0.011099,166 +0.011100,166 +0.011505,166 +0.011219,166 +0.011137,166 +0.011220,166 +0.011239,166 +0.011102,166 +0.011155,166 +0.011142,166 +0.011062,166 +0.011673,166 +0.011270,166 +0.011083,166 +0.011158,166 +0.011245,166 +0.011062,166 +0.011140,166 +0.011156,166 +0.011061,166 +0.011578,166 +0.011292,166 +0.011134,166 +0.011167,166 +0.011235,166 +0.011059,166 +0.011144,166 +0.011139,166 +0.011159,166 +0.011497,166 +0.011209,166 +0.011156,166 +0.011138,166 +0.011201,166 +0.011061,166 +0.011138,166 +0.011169,166 +0.011059,166 +0.011572,166 +0.011204,166 +0.011161,166 +0.011254,166 +0.011203,166 +0.011098,166 +0.011138,166 +0.011144,166 +0.011083,166 +0.011473,166 +0.011272,166 +0.011144,166 +0.011296,166 +0.011161,166 +0.011103,166 +0.011360,166 +0.011138,166 +0.011134,166 +0.011465,166 +0.011145,166 +0.011102,166 +0.011164,166 +0.011182,166 +0.011523,168 +0.011490,168 +0.011535,168 +0.011532,168 +0.011907,168 +0.011672,168 +0.011655,168 +0.011612,168 +0.011542,168 +0.011551,168 +0.011531,168 +0.011524,168 +0.011651,168 +0.011834,168 +0.011450,168 +0.011632,168 +0.011648,168 +0.011473,168 +0.011532,168 +0.011528,168 +0.011452,168 +0.011698,168 +0.011850,168 +0.011598,168 +0.011687,168 +0.011610,168 +0.011528,168 +0.011452,168 +0.011555,168 +0.011512,168 +0.011784,168 +0.011572,168 +0.011512,168 +0.011580,168 +0.011532,168 +0.011554,168 +0.011490,168 +0.011495,168 +0.011668,168 +0.011871,168 +0.011485,168 +0.011530,168 +0.011591,168 +0.011449,168 +0.011529,168 +0.011532,168 +0.011516,168 +0.011658,168 +0.011794,168 +0.011571,168 +0.011533,168 +0.011528,168 +0.011533,168 +0.011450,168 +0.011528,168 +0.011552,168 +0.011742,168 +0.011668,168 +0.011667,168 +0.011600,168 +0.011559,168 +0.011602,168 +0.011623,168 +0.011590,168 +0.011655,168 +0.012261,168 +0.011516,168 +0.011774,168 +0.011784,168 +0.011491,168 +0.011541,168 +0.011557,168 +0.011546,168 +0.011727,168 +0.011933,168 +0.011591,168 +0.011511,168 +0.011567,168 +0.011619,168 +0.011493,168 +0.011491,168 +0.011567,168 +0.012135,168 +0.011495,168 +0.011536,168 +0.011575,168 +0.011452,168 +0.011510,168 +0.011513,168 +0.011452,168 +0.011755,168 +0.012195,168 +0.011600,168 +0.011611,168 +0.011585,168 +0.011533,168 +0.011453,168 +0.011526,168 +0.011563,168 +0.011778,168 +0.012368,170 +0.011991,170 +0.012023,170 +0.011874,170 +0.011995,170 +0.011975,170 +0.011873,170 +0.012019,170 +0.012605,170 +0.011974,170 +0.012064,170 +0.012011,170 +0.011956,170 +0.011913,170 +0.011915,170 +0.011957,170 +0.012581,170 +0.011992,170 +0.011972,170 +0.012224,170 +0.011968,170 +0.011880,170 +0.011963,170 +0.011961,170 +0.012367,170 +0.012179,170 +0.012012,170 +0.012050,170 +0.011872,170 +0.011946,170 +0.011983,170 +0.011910,170 +0.012138,170 +0.012355,170 +0.012069,170 +0.011953,170 +0.011972,170 +0.011951,170 +0.011969,170 +0.011873,170 +0.011954,170 +0.012545,170 +0.011952,170 +0.012034,170 +0.011974,170 +0.011952,170 +0.011891,170 +0.011952,170 +0.011949,170 +0.012361,170 +0.012149,170 +0.012212,170 +0.012514,170 +0.012752,170 +0.012681,170 +0.012633,170 +0.012701,170 +0.012961,170 +0.012976,170 +0.013305,170 +0.013122,170 +0.013128,170 +0.013197,170 +0.013457,170 +0.012856,170 +0.014079,170 +0.012390,170 +0.012251,170 +0.012068,170 +0.011998,170 +0.012010,170 +0.011881,170 +0.012047,170 +0.013430,170 +0.012022,170 +0.012064,170 +0.012012,170 +0.011969,170 +0.011879,170 +0.011970,170 +0.012012,170 +0.013293,170 +0.012159,170 +0.012003,170 +0.012090,170 +0.011921,170 +0.011919,170 +0.011975,170 +0.011976,170 +0.013089,170 +0.013243,170 +0.012087,170 +0.012064,170 +0.012142,170 +0.011978,170 +0.012004,170 +0.011963,170 +0.011878,170 +0.013426,170 +0.011999,170 +0.012542,172 +0.012343,172 +0.012399,172 +0.012399,172 +0.012399,172 +0.012335,172 +0.013855,172 +0.012485,172 +0.012488,172 +0.012322,172 +0.012376,172 +0.012417,172 +0.012376,172 +0.012359,172 +0.013822,172 +0.012456,172 +0.012528,172 +0.012299,172 +0.012400,172 +0.012376,172 +0.012380,172 +0.012348,172 +0.013919,172 +0.012396,172 +0.012518,172 +0.012300,172 +0.012436,172 +0.012373,172 +0.012377,172 +0.012768,172 +0.013555,172 +0.012493,172 +0.012480,172 +0.012365,172 +0.012372,172 +0.012416,172 +0.012470,172 +0.012911,172 +0.013230,172 +0.012400,172 +0.012480,172 +0.012401,172 +0.012358,172 +0.012374,172 +0.012399,172 +0.012936,172 +0.013161,172 +0.012432,172 +0.012491,172 +0.012339,172 +0.012351,172 +0.012387,172 +0.012380,172 +0.012970,172 +0.013251,172 +0.012388,172 +0.012437,172 +0.012403,172 +0.012297,172 +0.012398,172 +0.012422,172 +0.012949,172 +0.013123,172 +0.012379,172 +0.012475,172 +0.012376,172 +0.012297,172 +0.012430,172 +0.012380,172 +0.013706,172 +0.013553,172 +0.012487,172 +0.012477,172 +0.012439,172 +0.012298,172 +0.012377,172 +0.012376,172 +0.013300,172 +0.012890,172 +0.012415,172 +0.012543,172 +0.012378,172 +0.012305,172 +0.012375,172 +0.012374,172 +0.013355,172 +0.012861,172 +0.012377,172 +0.012459,172 +0.012386,172 +0.012342,172 +0.012377,172 +0.012387,172 +0.013479,172 +0.012737,172 +0.012374,172 +0.012439,172 +0.012419,172 +0.012339,172 +0.012335,172 +0.012924,174 +0.014114,174 +0.013398,174 +0.012870,174 +0.012829,174 +0.012810,174 +0.012898,174 +0.012773,174 +0.012770,174 +0.014461,174 +0.012943,174 +0.012952,174 +0.012893,174 +0.012770,174 +0.012819,174 +0.012815,174 +0.013198,174 +0.013806,174 +0.012834,174 +0.012930,174 +0.012905,174 +0.013421,174 +0.012810,174 +0.012833,174 +0.014129,174 +0.013014,174 +0.012818,174 +0.012832,174 +0.012812,174 +0.012827,174 +0.012774,174 +0.012827,174 +0.014350,174 +0.012876,174 +0.012939,174 +0.012771,174 +0.012778,174 +0.012826,174 +0.012832,174 +0.012847,174 +0.014217,174 +0.012893,174 +0.012886,174 +0.012816,174 +0.012773,174 +0.012781,174 +0.012813,174 +0.014284,174 +0.013887,174 +0.013176,174 +0.012836,174 +0.012812,174 +0.012850,174 +0.012854,174 +0.012751,174 +0.014305,174 +0.012886,174 +0.012893,174 +0.012796,174 +0.012766,174 +0.012814,174 +0.012808,174 +0.012820,174 +0.014250,174 +0.012876,174 +0.012902,174 +0.012811,174 +0.012777,174 +0.012769,174 +0.012870,174 +0.013717,174 +0.013426,174 +0.012750,174 +0.012822,174 +0.012850,174 +0.012808,174 +0.012984,174 +0.012814,174 +0.013902,174 +0.012985,174 +0.012943,174 +0.012767,174 +0.012812,174 +0.012810,174 +0.012809,174 +0.012775,174 +0.014276,174 +0.012971,174 +0.012871,174 +0.012878,174 +0.012763,174 +0.012850,174 +0.012817,174 +0.012812,174 +0.014245,174 +0.012864,174 +0.013058,174 +0.012952,174 +0.012890,174 +0.012775,174 +0.013229,176 +0.014257,176 +0.013616,176 +0.013359,176 +0.013247,176 +0.013200,176 +0.013245,176 +0.013236,176 +0.013294,176 +0.014650,176 +0.013181,176 +0.013312,176 +0.013240,176 +0.013241,176 +0.013264,176 +0.013196,176 +0.014077,176 +0.013740,176 +0.013320,176 +0.013239,176 +0.013155,176 +0.013252,176 +0.013269,176 +0.013234,176 +0.015676,176 +0.013342,176 +0.013354,176 +0.013246,176 +0.013241,176 +0.013235,176 +0.013202,176 +0.014308,176 +0.013464,176 +0.013379,176 +0.013273,176 +0.013302,176 +0.013184,176 +0.013255,176 +0.013260,176 +0.014662,176 +0.013348,176 +0.013158,176 +0.013240,176 +0.013244,176 +0.013241,176 +0.013302,176 +0.014299,176 +0.013475,176 +0.013319,176 +0.013235,176 +0.013244,176 +0.013223,176 +0.013300,176 +0.013448,176 +0.014596,176 +0.013353,176 +0.013236,176 +0.013191,176 +0.013241,176 +0.013890,176 +0.013450,176 +0.014640,176 +0.013330,176 +0.013404,176 +0.013243,176 +0.013239,176 +0.013238,176 +0.013216,176 +0.013558,176 +0.014477,176 +0.013404,176 +0.013368,176 +0.013281,176 +0.013190,176 +0.013259,176 +0.013234,176 +0.014619,176 +0.013257,176 +0.013273,176 +0.013255,176 +0.013242,176 +0.013230,176 +0.013262,176 +0.013705,176 +0.014162,176 +0.013396,176 +0.013258,176 +0.013253,176 +0.013167,176 +0.013313,176 +0.013258,176 +0.014743,176 +0.013368,176 +0.013229,176 +0.013240,176 +0.013265,176 +0.013312,176 +0.013221,176 +0.014368,176 +0.014610,176 +0.014034,178 +0.013804,178 +0.013749,178 +0.013730,178 +0.013697,178 +0.013688,178 +0.015298,178 +0.013925,178 +0.013806,178 +0.013768,178 +0.013693,178 +0.013685,178 +0.013730,178 +0.015227,178 +0.013905,178 +0.013775,178 +0.013737,178 +0.013648,178 +0.013803,178 +0.013741,178 +0.015209,178 +0.013851,178 +0.013757,178 +0.013646,178 +0.013730,178 +0.013816,178 +0.013727,178 +0.014983,178 +0.013994,178 +0.013671,178 +0.013728,178 +0.013737,178 +0.013749,178 +0.013727,178 +0.014320,178 +0.014624,178 +0.013803,178 +0.013733,178 +0.013728,178 +0.013793,178 +0.013732,178 +0.013658,178 +0.015135,178 +0.013893,178 +0.013753,178 +0.013730,178 +0.013949,178 +0.014305,178 +0.013707,178 +0.015145,178 +0.013894,178 +0.013792,178 +0.013752,178 +0.013750,178 +0.013733,178 +0.013735,178 +0.015082,178 +0.013848,178 +0.013724,178 +0.013745,178 +0.013650,178 +0.013775,178 +0.013733,178 +0.014791,178 +0.014185,178 +0.013790,178 +0.013675,178 +0.013743,178 +0.013723,178 +0.013748,178 +0.013917,178 +0.016409,178 +0.013868,178 +0.013665,178 +0.013760,178 +0.013723,178 +0.013813,178 +0.013727,178 +0.015177,178 +0.013749,178 +0.013743,178 +0.013724,178 +0.013724,178 +0.013728,178 +0.013685,178 +0.015080,178 +0.013865,178 +0.013746,178 +0.013721,178 +0.013739,178 +0.013731,178 +0.013676,178 +0.015119,178 +0.013960,178 +0.013744,178 +0.013728,178 +0.013740,178 +0.013644,178 +0.013724,178 +0.014658,178 +0.014728,180 +0.014195,180 +0.014154,180 +0.014114,180 +0.014113,180 +0.014158,180 +0.015102,180 +0.014781,180 +0.014233,180 +0.014154,180 +0.014149,180 +0.014076,180 +0.014217,180 +0.014995,180 +0.014969,180 +0.014297,180 +0.014176,180 +0.014168,180 +0.014086,180 +0.014151,180 +0.014921,180 +0.014900,180 +0.014164,180 +0.014154,180 +0.014149,180 +0.014153,180 +0.014112,180 +0.014883,180 +0.014967,180 +0.014175,180 +0.014164,180 +0.014196,180 +0.014109,180 +0.014114,180 +0.014899,180 +0.015049,180 +0.014223,180 +0.014156,180 +0.014178,180 +0.014150,180 +0.014075,180 +0.015177,180 +0.015930,180 +0.014194,180 +0.014163,180 +0.014190,180 +0.014157,180 +0.014110,180 +0.014913,180 +0.014957,180 +0.014214,180 +0.014177,180 +0.014151,180 +0.014155,180 +0.014152,180 +0.014882,180 +0.014835,180 +0.014170,180 +0.014159,180 +0.014152,180 +0.014232,180 +0.014157,180 +0.015053,180 +0.014741,180 +0.014195,180 +0.014153,180 +0.014174,180 +0.014151,180 +0.014157,180 +0.015240,180 +0.014557,180 +0.014173,180 +0.014154,180 +0.014157,180 +0.014151,180 +0.014394,180 +0.015120,180 +0.014651,180 +0.014242,180 +0.014196,180 +0.014211,180 +0.014216,180 +0.014153,180 +0.015174,180 +0.014765,180 +0.014133,180 +0.014154,180 +0.014189,180 +0.014172,180 +0.014150,180 +0.015249,180 +0.014679,180 +0.014261,180 +0.014184,180 +0.014153,180 +0.014189,180 +0.014164,180 +0.015344,180 +0.014498,180 +0.014108,180 +0.014750,182 +0.014647,182 +0.014627,182 +0.014627,182 +0.016130,182 +0.014691,182 +0.014653,182 +0.014672,182 +0.014551,182 +0.014638,182 +0.014671,182 +0.017304,182 +0.014720,182 +0.014631,182 +0.014627,182 +0.014625,182 +0.014627,182 +0.015040,182 +0.015694,182 +0.014651,182 +0.014626,182 +0.014629,182 +0.014627,182 +0.014628,182 +0.015926,182 +0.014910,182 +0.014648,182 +0.014550,182 +0.014717,182 +0.014645,182 +0.014633,182 +0.016201,182 +0.014751,182 +0.014878,182 +0.014713,182 +0.014713,182 +0.014655,182 +0.014610,182 +0.016184,182 +0.014636,182 +0.014632,182 +0.014627,182 +0.014632,182 +0.014793,182 +0.015369,182 +0.015352,182 +0.014551,182 +0.014627,182 +0.014633,182 +0.014628,182 +0.014625,182 +0.016009,182 +0.014969,182 +0.014744,182 +0.014692,182 +0.014556,182 +0.014629,182 +0.014630,182 +0.016128,182 +0.015961,182 +0.014838,182 +0.014701,182 +0.014754,182 +0.014700,182 +0.014594,182 +0.016209,182 +0.014634,182 +0.014625,182 +0.014630,182 +0.014634,182 +0.014626,182 +0.015189,182 +0.015702,182 +0.014674,182 +0.014607,182 +0.014588,182 +0.014629,182 +0.014722,182 +0.016583,182 +0.015458,182 +0.014648,182 +0.014629,182 +0.014654,182 +0.014622,182 +0.014551,182 +0.016172,182 +0.014692,182 +0.014670,182 +0.014647,182 +0.014626,182 +0.014631,182 +0.014628,182 +0.016231,182 +0.014702,182 +0.014695,182 +0.014647,182 +0.014689,182 +0.014630,182 +0.015389,182 +0.015426,182 +0.015261,184 +0.015180,184 +0.015138,184 +0.015059,184 +0.015058,184 +0.016465,184 +0.015138,184 +0.015098,184 +0.015097,184 +0.015119,184 +0.015141,184 +0.015094,184 +0.016480,184 +0.015096,184 +0.015165,184 +0.015160,184 +0.015066,184 +0.015055,184 +0.016511,184 +0.015245,184 +0.015117,184 +0.015112,184 +0.015097,184 +0.015093,184 +0.015099,184 +0.016688,184 +0.015242,184 +0.015145,184 +0.015171,184 +0.015055,184 +0.015094,184 +0.015913,184 +0.016243,184 +0.016548,184 +0.016859,184 +0.016615,184 +0.016799,184 +0.017313,184 +0.016958,184 +0.016048,184 +0.016098,184 +0.015850,184 +0.015472,184 +0.015232,184 +0.015827,184 +0.015177,184 +0.015074,184 +0.016331,184 +0.017115,184 +0.016935,184 +0.016747,184 +0.016620,184 +0.016549,184 +0.016444,184 +0.016073,184 +0.016638,184 +0.016661,184 +0.017202,184 +0.016771,184 +0.016886,184 +0.016380,184 +0.016665,184 +0.016209,184 +0.016098,184 +0.015419,184 +0.015109,184 +0.015642,184 +0.017083,184 +0.016561,184 +0.015799,184 +0.015359,184 +0.015220,184 +0.015253,184 +0.016316,184 +0.017189,184 +0.016395,184 +0.016625,184 +0.016639,184 +0.016613,184 +0.016478,184 +0.016285,184 +0.016545,184 +0.016739,184 +0.017193,184 +0.018658,184 +0.016758,184 +0.016925,184 +0.016327,184 +0.015753,184 +0.016161,184 +0.017930,184 +0.016808,184 +0.016986,184 +0.016812,184 +0.018616,184 +0.017193,184 +0.017303,184 +0.019176,184 +0.018340,184 +0.019973,184 +0.020155,186 +0.020461,186 +0.018463,186 +0.019075,186 +0.024476,186 +0.022738,186 +0.020556,186 +0.019866,186 +0.017708,186 +0.018356,186 +0.017593,186 +0.018223,186 +0.019948,186 +0.020820,186 +0.022140,186 +0.017918,186 +0.019225,186 +0.019098,186 +0.019009,186 +0.022953,186 +0.017083,186 +0.018396,186 +0.017968,186 +0.017585,186 +0.016829,186 +0.016879,186 +0.016319,186 +0.016866,186 +0.018337,186 +0.018310,186 +0.023732,186 +0.018696,186 +0.019207,186 +0.019455,186 +0.018706,186 +0.017146,186 +0.016986,186 +0.017028,186 +0.019344,186 +0.019544,186 +0.017739,186 +0.017609,186 +0.017587,186 +0.017680,186 +0.017810,186 +0.017584,186 +0.017399,186 +0.018720,186 +0.017195,186 +0.017573,186 +0.017484,186 +0.018048,186 +0.021768,186 +0.016621,186 +0.017351,186 +0.016885,186 +0.016948,186 +0.017927,186 +0.017122,186 +0.017224,186 +0.017469,186 +0.017162,186 +0.017409,186 +0.017101,186 +0.017373,186 +0.016490,186 +0.017339,186 +0.017151,186 +0.017822,186 +0.017549,186 +0.017109,186 +0.016668,186 +0.016529,186 +0.016398,186 +0.017232,186 +0.019138,186 +0.017349,186 +0.016798,186 +0.016739,186 +0.017289,186 +0.016649,186 +0.017188,186 +0.016960,186 +0.016722,186 +0.017282,186 +0.016667,186 +0.016988,186 +0.016480,186 +0.016038,186 +0.015908,186 +0.015761,186 +0.015867,186 +0.019385,186 +0.017620,186 +0.018975,186 +0.017683,186 +0.016649,186 +0.017682,186 +0.017443,186 +0.017369,186 +0.017585,188 +0.017031,188 +0.016650,188 +0.016580,188 +0.016551,188 +0.016911,188 +0.017369,188 +0.017895,188 +0.020415,188 +0.021828,188 +0.020295,188 +0.020074,188 +0.020325,188 +0.018933,188 +0.016831,188 +0.016935,188 +0.016587,188 +0.016250,188 +0.016128,188 +0.016203,188 +0.016281,188 +0.016457,188 +0.016501,188 +0.016292,188 +0.016134,188 +0.017463,188 +0.016336,188 +0.016530,188 +0.016388,188 +0.016234,188 +0.016892,188 +0.021228,188 +0.018101,188 +0.018236,188 +0.019020,188 +0.022148,188 +0.028301,188 +0.030740,188 +0.028133,188 +0.030402,188 +0.030221,188 +0.021442,188 +0.026085,188 +0.021689,188 +0.021782,188 +0.019309,188 +0.018858,188 +0.016389,188 +0.016632,188 +0.019297,188 +0.017420,188 +0.018507,188 +0.016734,188 +0.017010,188 +0.017164,188 +0.017296,188 +0.019475,188 +0.018051,188 +0.016476,188 +0.018042,188 +0.016878,188 +0.016812,188 +0.018170,188 +0.017259,188 +0.016538,188 +0.016762,188 +0.017282,188 +0.017397,188 +0.022841,188 +0.018055,188 +0.016597,188 +0.016511,188 +0.016567,188 +0.016492,188 +0.018150,188 +0.017119,188 +0.016564,188 +0.017333,188 +0.016671,188 +0.016647,188 +0.016544,188 +0.016785,188 +0.016593,188 +0.017043,188 +0.016483,188 +0.016506,188 +0.020677,188 +0.016481,188 +0.016269,188 +0.016441,188 +0.016390,188 +0.016472,188 +0.020768,188 +0.016408,188 +0.016359,188 +0.016669,188 +0.016571,188 +0.017968,188 +0.019100,188 +0.016422,188 +0.019606,190 +0.018196,190 +0.017098,190 +0.017581,190 +0.017235,190 +0.016891,190 +0.017145,190 +0.017270,190 +0.017056,190 +0.021680,190 +0.020330,190 +0.019509,190 +0.017363,190 +0.017317,190 +0.017935,190 +0.017530,190 +0.017335,190 +0.018212,190 +0.017494,190 +0.017188,190 +0.017696,190 +0.016806,190 +0.016855,190 +0.017064,190 +0.017031,190 +0.017257,190 +0.017479,190 +0.016840,190 +0.016886,190 +0.017175,190 +0.016892,190 +0.016751,190 +0.017574,190 +0.016842,190 +0.016957,190 +0.017035,190 +0.016909,190 +0.017014,190 +0.017247,190 +0.016834,190 +0.016835,190 +0.017247,190 +0.017006,190 +0.017128,190 +0.018882,190 +0.018347,190 +0.017874,190 +0.017716,190 +0.016836,190 +0.017167,190 +0.016848,190 +0.016718,190 +0.016687,190 +0.016791,190 +0.016808,190 +0.017179,190 +0.016809,190 +0.016723,190 +0.016876,190 +0.017000,190 +0.016726,190 +0.017112,190 +0.016764,190 +0.016678,190 +0.016707,190 +0.016774,190 +0.016693,190 +0.017114,190 +0.016812,190 +0.016817,190 +0.016675,190 +0.016843,190 +0.016779,190 +0.017179,190 +0.016748,190 +0.016754,190 +0.017375,190 +0.017169,190 +0.018405,190 +0.018924,190 +0.018512,190 +0.018088,190 +0.017260,190 +0.017003,190 +0.016994,190 +0.018513,190 +0.017271,190 +0.017029,190 +0.017007,190 +0.016876,190 +0.016957,190 +0.019317,190 +0.019256,190 +0.018045,190 +0.017711,190 +0.017179,190 +0.021522,190 +0.019157,190 +0.022006,190 +0.022502,190 +0.024940,192 +0.020805,192 +0.018494,192 +0.018604,192 +0.018872,192 +0.020463,192 +0.019122,192 +0.018341,192 +0.018278,192 +0.018342,192 +0.021521,192 +0.021664,192 +0.023983,192 +0.022446,192 +0.020787,192 +0.020216,192 +0.021117,192 +0.021752,192 +0.020148,192 +0.020033,192 +0.019823,192 +0.019258,192 +0.018466,192 +0.018968,192 +0.019993,192 +0.024043,192 +0.020247,192 +0.020460,192 +0.022285,192 +0.032353,192 +0.020860,192 +0.019693,192 +0.019178,192 +0.019545,192 +0.019595,192 +0.022936,192 +0.019735,192 +0.020366,192 +0.020715,192 +0.020817,192 +0.019938,192 +0.019200,192 +0.019328,192 +0.019081,192 +0.019019,192 +0.024591,192 +0.020063,192 +0.023090,192 +0.020689,192 +0.025426,192 +0.024649,192 +0.022197,192 +0.023562,192 +0.025272,192 +0.021982,192 +0.019063,192 +0.020815,192 +0.018930,192 +0.019309,192 +0.021683,192 +0.018894,192 +0.018693,192 +0.018402,192 +0.018643,192 +0.018803,192 +0.018865,192 +0.018530,192 +0.018566,192 +0.018457,192 +0.019478,192 +0.019840,192 +0.019749,192 +0.021034,192 +0.020868,192 +0.023697,192 +0.019251,192 +0.019106,192 +0.021241,192 +0.019936,192 +0.020166,192 +0.019412,192 +0.019460,192 +0.019504,192 +0.019592,192 +0.019792,192 +0.019798,192 +0.019799,192 +0.019798,192 +0.021687,192 +0.020310,192 +0.020672,192 +0.020906,192 +0.020747,192 +0.020806,192 +0.020942,192 +0.022014,192 +0.020865,192 +0.020481,192 +0.021178,192 +0.020042,192 +0.019345,194 +0.020383,194 +0.034984,194 +0.031715,194 +0.019095,194 +0.019188,194 +0.019084,194 +0.019325,194 +0.018859,194 +0.019776,194 +0.018427,194 +0.018625,194 +0.018061,194 +0.018269,194 +0.018030,194 +0.018468,194 +0.017982,194 +0.018246,194 +0.018547,194 +0.019330,194 +0.019578,194 +0.019471,194 +0.020268,194 +0.019597,194 +0.019489,194 +0.019100,194 +0.019014,194 +0.019099,194 +0.018724,194 +0.018987,194 +0.018608,194 +0.018548,194 +0.018599,194 +0.018297,194 +0.018905,194 +0.018515,194 +0.018691,194 +0.018296,194 +0.018482,194 +0.018275,194 +0.018193,194 +0.017980,194 +0.018071,194 +0.018040,194 +0.017936,194 +0.019145,194 +0.019417,194 +0.019837,194 +0.020615,194 +0.020887,194 +0.019485,194 +0.018711,194 +0.018365,194 +0.019080,194 +0.018409,194 +0.018458,194 +0.018273,194 +0.017884,194 +0.017895,194 +0.018663,194 +0.019215,194 +0.019486,194 +0.019641,194 +0.019856,194 +0.019866,194 +0.019767,194 +0.020457,194 +0.019443,194 +0.019975,194 +0.019074,194 +0.018775,194 +0.019472,194 +0.020400,194 +0.020998,194 +0.020603,194 +0.020092,194 +0.019683,194 +0.020105,194 +0.018864,194 +0.018451,194 +0.017971,194 +0.018226,194 +0.017998,194 +0.017893,194 +0.018022,194 +0.017815,194 +0.017903,194 +0.018246,194 +0.019260,194 +0.019605,194 +0.019167,194 +0.019089,194 +0.019311,194 +0.019635,194 +0.019365,194 +0.019919,194 +0.020112,194 +0.019885,194 +0.019468,194 +0.019149,194 +0.020764,196 +0.021087,196 +0.020729,196 +0.023838,196 +0.024036,196 +0.019970,196 +0.019897,196 +0.020047,196 +0.019956,196 +0.019867,196 +0.019909,196 +0.021403,196 +0.021023,196 +0.021649,196 +0.020910,196 +0.020714,196 +0.021551,196 +0.021570,196 +0.021105,196 +0.019902,196 +0.019433,196 +0.021446,196 +0.021803,196 +0.020211,196 +0.019600,196 +0.018518,196 +0.019530,196 +0.020621,196 +0.021180,196 +0.020092,196 +0.019216,196 +0.019500,196 +0.021280,196 +0.021502,196 +0.020392,196 +0.020218,196 +0.019788,196 +0.019832,196 +0.019178,196 +0.019315,196 +0.018625,196 +0.018539,196 +0.019664,196 +0.019096,196 +0.019631,196 +0.019488,196 +0.019109,196 +0.019395,196 +0.019174,196 +0.019152,196 +0.018386,196 +0.018477,196 +0.018987,196 +0.018399,196 +0.019330,196 +0.019047,196 +0.018537,196 +0.018668,196 +0.018769,196 +0.018420,196 +0.018592,196 +0.018385,196 +0.018368,196 +0.018968,196 +0.018484,196 +0.018433,196 +0.018916,196 +0.018328,196 +0.018830,196 +0.018451,196 +0.018356,196 +0.018438,196 +0.018313,196 +0.018338,196 +0.018935,196 +0.018504,196 +0.018554,196 +0.018682,196 +0.018337,196 +0.018847,196 +0.019009,196 +0.018384,196 +0.019396,196 +0.018847,196 +0.018546,196 +0.018771,196 +0.018494,196 +0.018434,196 +0.018456,196 +0.018361,196 +0.019148,196 +0.021199,196 +0.019170,196 +0.018582,196 +0.018312,196 +0.018855,196 +0.023224,196 +0.019320,196 +0.023507,196 +0.021675,196 +0.020363,198 +0.021072,198 +0.020478,198 +0.019864,198 +0.022227,198 +0.020976,198 +0.019821,198 +0.019979,198 +0.019839,198 +0.021022,198 +0.020894,198 +0.019946,198 +0.020093,198 +0.024282,198 +0.022166,198 +0.020987,198 +0.021312,198 +0.020292,198 +0.019523,198 +0.019733,198 +0.019085,198 +0.019108,198 +0.018861,198 +0.020641,198 +0.022971,198 +0.023156,198 +0.022558,198 +0.023455,198 +0.021469,198 +0.020916,198 +0.021697,198 +0.021540,198 +0.021498,198 +0.022028,198 +0.023256,198 +0.021457,198 +0.021465,198 +0.020630,198 +0.021839,198 +0.020525,198 +0.020847,198 +0.020563,198 +0.020045,198 +0.020640,198 +0.020792,198 +0.020395,198 +0.019915,198 +0.019510,198 +0.019546,198 +0.018955,198 +0.019296,198 +0.018956,198 +0.018959,198 +0.019419,198 +0.021557,198 +0.024834,198 +0.020640,198 +0.019464,198 +0.019883,198 +0.020924,198 +0.020797,198 +0.019979,198 +0.020777,198 +0.020949,198 +0.020096,198 +0.020566,198 +0.020725,198 +0.020589,198 +0.020503,198 +0.021146,198 +0.020854,198 +0.020709,198 +0.020673,198 +0.021265,198 +0.020957,198 +0.020087,198 +0.020293,198 +0.020254,198 +0.020485,198 +0.020327,198 +0.019938,198 +0.019418,198 +0.020064,198 +0.019959,198 +0.020235,198 +0.019863,198 +0.019784,198 +0.019847,198 +0.019759,198 +0.019440,198 +0.019175,198 +0.019037,198 +0.019055,198 +0.019500,198 +0.018947,198 +0.018935,198 +0.018942,198 +0.019043,198 +0.019386,198 +0.018894,198 +0.019847,200 +0.019664,200 +0.019531,200 +0.019984,200 +0.019496,200 +0.019535,200 +0.019523,200 +0.019396,200 +0.019900,200 +0.019467,200 +0.019590,200 +0.019588,200 +0.019606,200 +0.019987,200 +0.020046,200 +0.019704,200 +0.019461,200 +0.020299,200 +0.020112,200 +0.019736,200 +0.019486,200 +0.019468,200 +0.019677,200 +0.019764,200 +0.020011,200 +0.019543,200 +0.019450,200 +0.019493,200 +0.019740,200 +0.019989,200 +0.019563,200 +0.019551,200 +0.019500,200 +0.019565,200 +0.020163,200 +0.019851,200 +0.019784,200 +0.019433,200 +0.019716,200 +0.020197,200 +0.019575,200 +0.019520,200 +0.019471,200 +0.019425,200 +0.020289,200 +0.019476,200 +0.019521,200 +0.019553,200 +0.019613,200 +0.020180,200 +0.019593,200 +0.019575,200 +0.019641,200 +0.019589,200 +0.020003,200 +0.019793,200 +0.019558,200 +0.019446,200 +0.019542,200 +0.019870,200 +0.019855,200 +0.020083,200 +0.019634,200 +0.019726,200 +0.020650,200 +0.019880,200 +0.019689,200 +0.020130,200 +0.019559,200 +0.019814,200 +0.019751,200 +0.019683,200 +0.019536,200 +0.019511,200 +0.019739,200 +0.019761,200 +0.019844,200 +0.019614,200 +0.019510,200 +0.019615,200 +0.019933,200 +0.019595,200 +0.019627,200 +0.019514,200 +0.019771,200 +0.019989,200 +0.019759,200 +0.019605,200 +0.019446,200 +0.019555,200 +0.020018,200 +0.019672,200 +0.019454,200 +0.019554,200 +0.019475,200 +0.019982,200 +0.019757,200 +0.019448,200 +0.019456,200 +0.019556,200 +0.020752,202 +0.020315,202 +0.020130,202 +0.020352,202 +0.020185,202 +0.020527,202 +0.020467,202 +0.020032,202 +0.020118,202 +0.020047,202 +0.020468,202 +0.020382,202 +0.020043,202 +0.020195,202 +0.020701,202 +0.022772,202 +0.020800,202 +0.020752,202 +0.020241,202 +0.020193,202 +0.020553,202 +0.021345,202 +0.021025,202 +0.021084,202 +0.021334,202 +0.021501,202 +0.021238,202 +0.020361,202 +0.020826,202 +0.020559,202 +0.021365,202 +0.021705,202 +0.021215,202 +0.020839,202 +0.021010,202 +0.024230,202 +0.020649,202 +0.020775,202 +0.020427,202 +0.021548,202 +0.020331,202 +0.020407,202 +0.020270,202 +0.020106,202 +0.020695,202 +0.022353,202 +0.020113,202 +0.020133,202 +0.020351,202 +0.020511,202 +0.020268,202 +0.020175,202 +0.020279,202 +0.020470,202 +0.020585,202 +0.020178,202 +0.020050,202 +0.021290,202 +0.020567,202 +0.020655,202 +0.020220,202 +0.020202,202 +0.020527,202 +0.022670,202 +0.021468,202 +0.020876,202 +0.022385,202 +0.032710,202 +0.039798,202 +0.023425,202 +0.021605,202 +0.023522,202 +0.021182,202 +0.020169,202 +0.020112,202 +0.020041,202 +0.021666,202 +0.020232,202 +0.020173,202 +0.021271,202 +0.022316,202 +0.022846,202 +0.021547,202 +0.023117,202 +0.022271,202 +0.023128,202 +0.024963,202 +0.022957,202 +0.025744,202 +0.023609,202 +0.021734,202 +0.021805,202 +0.021457,202 +0.021720,202 +0.024516,202 +0.022754,202 +0.023032,202 +0.021576,202 +0.022953,202 +0.020970,202 +0.021015,204 +0.020775,204 +0.020687,204 +0.025122,204 +0.020993,204 +0.020820,204 +0.020792,204 +0.020859,204 +0.030238,204 +0.025164,204 +0.026316,204 +0.023593,204 +0.025047,204 +0.023127,204 +0.022618,204 +0.022424,204 +0.022037,204 +0.022084,204 +0.021993,204 +0.022581,204 +0.021904,204 +0.021925,204 +0.022160,204 +0.022226,204 +0.022588,204 +0.028373,204 +0.022144,204 +0.023337,204 +0.023259,204 +0.022549,204 +0.023086,204 +0.023397,204 +0.022853,204 +0.028375,204 +0.023074,204 +0.022656,204 +0.022478,204 +0.022516,204 +0.025986,204 +0.020992,204 +0.020852,204 +0.020867,204 +0.025466,204 +0.021012,204 +0.020711,204 +0.020913,204 +0.021363,204 +0.027080,204 +0.022212,204 +0.021433,204 +0.020768,204 +0.025439,204 +0.021289,204 +0.023418,204 +0.026657,204 +0.022670,204 +0.023941,204 +0.023481,204 +0.025152,204 +0.022343,204 +0.023359,204 +0.023745,204 +0.023200,204 +0.022828,204 +0.023002,204 +0.022384,204 +0.022177,204 +0.022080,204 +0.021990,204 +0.022732,204 +0.022659,204 +0.023318,204 +0.022884,204 +0.022393,204 +0.023143,204 +0.023760,204 +0.024075,204 +0.022287,204 +0.022691,204 +0.021653,204 +0.021537,204 +0.020961,204 +0.022480,204 +0.020901,204 +0.022064,204 +0.024598,204 +0.028897,204 +0.024398,204 +0.022677,204 +0.022657,204 +0.022089,204 +0.021633,204 +0.022691,204 +0.024345,204 +0.022917,204 +0.024167,204 +0.022165,204 +0.022049,204 +0.022787,204 +0.024235,204 +0.023591,206 +0.021978,206 +0.021865,206 +0.021844,206 +0.022636,206 +0.022349,206 +0.021367,206 +0.021330,206 +0.022050,206 +0.021592,206 +0.021232,206 +0.021594,206 +0.022438,206 +0.022745,206 +0.022449,206 +0.021736,206 +0.021858,206 +0.022040,206 +0.021889,206 +0.021391,206 +0.021359,206 +0.021393,206 +0.021920,206 +0.021935,206 +0.022188,206 +0.021793,206 +0.021650,206 +0.022413,206 +0.021509,206 +0.021635,206 +0.022036,206 +0.023080,206 +0.021413,206 +0.021489,206 +0.021287,206 +0.021372,206 +0.022243,206 +0.022011,206 +0.021568,206 +0.022526,206 +0.022047,206 +0.021898,206 +0.021383,206 +0.021404,206 +0.021395,206 +0.021860,206 +0.021563,206 +0.021460,206 +0.021246,206 +0.021360,206 +0.022058,206 +0.021339,206 +0.022831,206 +0.021602,206 +0.021552,206 +0.021860,206 +0.021494,206 +0.021493,206 +0.021341,206 +0.022150,206 +0.023089,206 +0.023404,206 +0.023811,206 +0.023137,206 +0.023687,206 +0.023525,206 +0.022122,206 +0.021608,206 +0.022198,206 +0.021359,206 +0.022185,206 +0.021756,206 +0.021619,206 +0.021804,206 +0.021404,206 +0.021511,206 +0.021431,206 +0.022140,206 +0.021525,206 +0.021277,206 +0.021323,206 +0.021513,206 +0.022128,206 +0.021489,206 +0.023350,206 +0.021501,206 +0.022080,206 +0.021529,206 +0.021403,206 +0.021514,206 +0.021426,206 +0.022244,206 +0.021401,206 +0.021319,206 +0.022172,206 +0.022706,206 +0.022246,206 +0.021965,206 +0.021504,206 +0.022424,206 +0.023821,208 +0.023756,208 +0.022642,208 +0.025208,208 +0.023727,208 +0.022863,208 +0.022806,208 +0.022508,208 +0.022684,208 +0.022997,208 +0.023056,208 +0.023113,208 +0.022604,208 +0.023785,208 +0.029033,208 +0.024733,208 +0.024317,208 +0.024554,208 +0.024225,208 +0.025887,208 +0.024642,208 +0.025190,208 +0.024142,208 +0.024546,208 +0.022975,208 +0.023746,208 +0.023763,208 +0.026540,208 +0.024444,208 +0.023780,208 +0.023109,208 +0.022683,208 +0.022263,208 +0.021896,208 +0.022531,208 +0.025044,208 +0.023229,208 +0.022732,208 +0.023278,208 +0.022880,208 +0.024107,208 +0.024268,208 +0.024868,208 +0.025449,208 +0.024925,208 +0.024397,208 +0.025436,208 +0.025071,208 +0.025322,208 +0.024356,208 +0.026775,208 +0.024093,208 +0.026201,208 +0.025142,208 +0.027131,208 +0.024924,208 +0.025702,208 +0.027040,208 +0.024313,208 +0.024575,208 +0.024335,208 +0.024293,208 +0.023861,208 +0.023234,208 +0.022936,208 +0.022000,208 +0.022155,208 +0.023588,208 +0.024183,208 +0.022588,208 +0.021907,208 +0.022326,208 +0.022018,208 +0.021848,208 +0.021839,208 +0.022088,208 +0.022409,208 +0.021985,208 +0.021948,208 +0.021927,208 +0.022259,208 +0.021915,208 +0.022055,208 +0.021779,208 +0.021774,208 +0.022601,208 +0.022210,208 +0.021924,208 +0.022733,208 +0.023556,208 +0.025291,208 +0.024384,208 +0.024610,208 +0.028181,208 +0.024314,208 +0.024542,208 +0.024557,208 +0.023488,208 +0.023457,208 +0.023533,208 +0.024409,210 +0.024628,210 +0.023856,210 +0.023852,210 +0.023106,210 +0.023128,210 +0.023243,210 +0.023334,210 +0.022987,210 +0.022623,210 +0.022790,210 +0.022955,210 +0.022740,210 +0.022705,210 +0.022813,210 +0.022882,210 +0.023087,210 +0.022539,210 +0.022487,210 +0.023094,210 +0.022589,210 +0.022518,210 +0.022693,210 +0.022863,210 +0.022825,210 +0.022861,210 +0.022547,210 +0.022669,210 +0.022950,210 +0.022901,210 +0.023057,210 +0.022649,210 +0.023103,210 +0.022778,210 +0.022605,210 +0.023652,210 +0.024703,210 +0.025658,210 +0.024492,210 +0.023719,210 +0.024246,210 +0.024166,210 +0.024462,210 +0.023157,210 +0.023018,210 +0.024428,210 +0.026391,210 +0.024282,210 +0.023907,210 +0.025583,210 +0.023684,210 +0.023131,210 +0.022876,210 +0.024564,210 +0.022791,210 +0.022825,210 +0.022587,210 +0.024037,210 +0.023186,210 +0.022641,210 +0.022504,210 +0.022791,210 +0.024149,210 +0.022694,210 +0.022492,210 +0.022470,210 +0.024329,210 +0.023516,210 +0.022771,210 +0.022512,210 +0.023819,210 +0.023292,210 +0.022586,210 +0.022538,210 +0.022760,210 +0.023383,210 +0.023399,210 +0.022960,210 +0.022517,210 +0.023320,210 +0.022742,210 +0.022517,210 +0.022731,210 +0.022745,210 +0.023166,210 +0.023166,210 +0.022732,210 +0.023988,210 +0.024082,210 +0.024657,210 +0.024366,210 +0.027884,210 +0.024597,210 +0.025377,210 +0.023830,210 +0.023895,210 +0.024427,210 +0.023678,210 +0.025564,210 +0.024984,210 +0.028780,212 +0.029890,212 +0.027592,212 +0.026942,212 +0.030883,212 +0.027178,212 +0.028512,212 +0.039651,212 +0.028242,212 +0.028991,212 +0.026668,212 +0.027360,212 +0.026401,212 +0.029501,212 +0.026908,212 +0.027813,212 +0.027291,212 +0.026234,212 +0.027539,212 +0.028791,212 +0.027450,212 +0.025350,212 +0.023689,212 +0.023496,212 +0.023258,212 +0.023522,212 +0.024155,212 +0.024813,212 +0.026071,212 +0.027582,212 +0.025773,212 +0.024817,212 +0.023433,212 +0.023553,212 +0.023926,212 +0.024485,212 +0.024293,212 +0.024646,212 +0.029259,212 +0.025543,212 +0.024065,212 +0.024499,212 +0.030856,212 +0.027562,212 +0.024638,212 +0.023682,212 +0.023831,212 +0.023276,212 +0.023219,212 +0.023363,212 +0.023826,212 +0.023578,212 +0.023316,212 +0.023402,212 +0.023999,212 +0.023216,212 +0.023572,212 +0.023125,212 +0.023700,212 +0.025048,212 +0.024970,212 +0.024854,212 +0.024401,212 +0.025642,212 +0.025771,212 +0.025708,212 +0.024839,212 +0.025416,212 +0.023692,212 +0.023449,212 +0.024185,212 +0.024160,212 +0.023241,212 +0.025328,212 +0.023427,212 +0.024180,212 +0.023727,212 +0.023739,212 +0.023470,212 +0.023785,212 +0.023785,212 +0.026845,212 +0.026689,212 +0.032715,212 +0.027248,212 +0.026124,212 +0.025759,212 +0.025625,212 +0.024113,212 +0.023480,212 +0.023333,212 +0.023605,212 +0.023243,212 +0.023336,212 +0.023319,212 +0.023747,212 +0.023551,212 +0.023361,212 +0.024556,212 +0.024892,212 +0.026700,214 +0.025213,214 +0.026438,214 +0.025136,214 +0.026425,214 +0.025937,214 +0.025493,214 +0.024801,214 +0.024645,214 +0.025036,214 +0.024143,214 +0.024138,214 +0.024073,214 +0.023911,214 +0.024143,214 +0.024270,214 +0.024084,214 +0.024074,214 +0.023962,214 +0.024107,214 +0.024537,214 +0.024517,214 +0.024748,214 +0.024388,214 +0.024160,214 +0.024152,214 +0.023880,214 +0.024127,214 +0.024769,214 +0.024106,214 +0.023967,214 +0.024425,214 +0.025422,214 +0.024347,214 +0.024800,214 +0.023930,214 +0.024677,214 +0.023916,214 +0.024202,214 +0.023872,214 +0.024607,214 +0.023927,214 +0.023970,214 +0.024261,214 +0.025395,214 +0.024604,214 +0.024098,214 +0.024544,214 +0.024544,214 +0.024166,214 +0.023802,214 +0.023982,214 +0.024028,214 +0.024306,214 +0.024041,214 +0.024064,214 +0.024016,214 +0.024493,214 +0.024140,214 +0.023797,214 +0.023974,214 +0.024329,214 +0.023998,214 +0.023922,214 +0.023908,214 +0.024607,214 +0.023883,214 +0.024193,214 +0.024173,214 +0.024611,214 +0.023901,214 +0.023930,214 +0.023932,214 +0.024221,214 +0.024181,214 +0.023771,214 +0.024193,214 +0.023987,214 +0.024391,214 +0.023819,214 +0.023993,214 +0.023855,214 +0.024511,214 +0.023991,214 +0.023807,214 +0.024126,214 +0.024321,214 +0.024102,214 +0.023873,214 +0.023921,214 +0.024535,214 +0.024155,214 +0.023932,214 +0.024392,214 +0.024515,214 +0.023947,214 +0.024139,214 +0.023944,214 +0.027535,214 +0.025248,214 +0.025484,216 +0.025123,216 +0.030448,216 +0.025789,216 +0.024894,216 +0.025904,216 +0.026197,216 +0.024432,216 +0.024402,216 +0.024708,216 +0.026282,216 +0.024615,216 +0.024535,216 +0.024753,216 +0.026081,216 +0.024561,216 +0.024475,216 +0.024744,216 +0.025945,216 +0.024761,216 +0.024542,216 +0.024724,216 +0.025159,216 +0.024840,216 +0.024601,216 +0.024741,216 +0.025042,216 +0.024965,216 +0.024499,216 +0.024812,216 +0.024926,216 +0.024801,216 +0.024435,216 +0.024676,216 +0.024981,216 +0.025004,216 +0.024671,216 +0.024859,216 +0.025062,216 +0.024994,216 +0.024513,216 +0.024685,216 +0.024627,216 +0.025029,216 +0.024553,216 +0.024694,216 +0.024752,216 +0.024954,216 +0.024574,216 +0.024582,216 +0.024523,216 +0.025109,216 +0.024530,216 +0.024503,216 +0.024665,216 +0.024862,216 +0.024782,216 +0.024510,216 +0.024871,216 +0.024840,216 +0.024585,216 +0.024626,216 +0.024589,216 +0.025097,216 +0.024512,216 +0.024515,216 +0.024539,216 +0.025020,216 +0.024724,216 +0.025950,216 +0.025361,216 +0.024966,216 +0.024595,216 +0.024620,216 +0.024548,216 +0.024962,216 +0.024853,216 +0.024712,216 +0.025908,216 +0.024977,216 +0.024504,216 +0.024641,216 +0.024624,216 +0.024878,216 +0.024699,216 +0.024645,216 +0.024614,216 +0.024994,216 +0.024638,216 +0.024640,216 +0.024676,216 +0.024891,216 +0.024802,216 +0.024641,216 +0.024596,216 +0.025361,216 +0.024752,216 +0.024759,216 +0.024553,216 +0.025133,216 +0.026054,218 +0.025362,218 +0.025420,218 +0.025677,218 +0.025630,218 +0.025347,218 +0.025488,218 +0.025886,218 +0.025560,218 +0.025564,218 +0.025548,218 +0.025869,218 +0.025400,218 +0.025229,218 +0.025425,218 +0.025760,218 +0.025523,218 +0.025417,218 +0.025613,218 +0.025950,218 +0.025742,218 +0.026214,218 +0.025615,218 +0.025978,218 +0.025597,218 +0.025436,218 +0.025336,218 +0.025929,218 +0.025384,218 +0.025450,218 +0.025279,218 +0.025758,218 +0.026162,218 +0.026038,218 +0.025452,218 +0.025823,218 +0.025876,218 +0.025534,218 +0.025492,218 +0.025908,218 +0.025268,218 +0.025463,218 +0.025701,218 +0.025900,218 +0.025401,218 +0.025399,218 +0.025506,218 +0.026239,218 +0.025726,218 +0.025523,218 +0.025512,218 +0.025693,218 +0.025337,218 +0.025391,218 +0.025715,218 +0.025980,218 +0.025722,218 +0.025406,218 +0.025888,218 +0.025402,218 +0.025444,218 +0.025225,218 +0.025808,218 +0.025480,218 +0.025621,218 +0.025296,218 +0.025849,218 +0.025335,218 +0.025513,218 +0.025507,218 +0.025734,218 +0.025532,218 +0.025320,218 +0.025351,218 +0.026005,218 +0.025512,218 +0.025464,218 +0.025527,218 +0.025952,218 +0.025491,218 +0.025561,218 +0.025331,218 +0.026120,218 +0.025413,218 +0.025770,218 +0.025433,218 +0.026001,218 +0.025613,218 +0.030177,218 +0.025411,218 +0.025951,218 +0.025443,218 +0.025476,218 +0.025370,218 +0.025936,218 +0.025675,218 +0.025550,218 +0.025630,218 +0.025618,218 +0.025579,218 +0.026034,220 +0.026495,220 +0.026471,220 +0.026135,220 +0.026024,220 +0.026502,220 +0.026192,220 +0.026208,220 +0.025793,220 +0.026485,220 +0.026102,220 +0.026000,220 +0.025925,220 +0.026730,220 +0.026285,220 +0.026114,220 +0.026022,220 +0.026625,220 +0.026283,220 +0.025947,220 +0.026193,220 +0.026647,220 +0.026127,220 +0.026263,220 +0.026584,220 +0.026220,220 +0.026227,220 +0.025974,220 +0.026622,220 +0.026000,220 +0.026058,220 +0.025875,220 +0.026576,220 +0.026332,220 +0.026333,220 +0.026040,220 +0.026581,220 +0.026081,220 +0.025933,220 +0.025890,220 +0.026702,220 +0.026128,220 +0.026023,220 +0.026261,220 +0.026445,220 +0.026108,220 +0.025919,220 +0.026601,220 +0.026105,220 +0.026200,220 +0.025909,220 +0.026559,220 +0.026029,220 +0.026357,220 +0.025926,220 +0.026565,220 +0.026243,220 +0.026013,220 +0.026061,220 +0.026618,220 +0.026076,220 +0.026005,220 +0.026074,220 +0.026654,220 +0.027963,220 +0.026178,220 +0.026506,220 +0.026037,220 +0.026183,220 +0.025942,220 +0.026730,220 +0.026153,220 +0.026348,220 +0.025951,220 +0.026421,220 +0.026054,220 +0.026047,220 +0.025945,220 +0.026649,220 +0.026028,220 +0.026105,220 +0.025931,220 +0.026659,220 +0.026037,220 +0.025900,220 +0.026170,220 +0.026410,220 +0.027071,220 +0.029181,220 +0.029791,220 +0.032931,220 +0.029965,220 +0.028955,220 +0.028804,220 +0.028369,220 +0.033877,220 +0.035271,220 +0.029037,220 +0.030304,220 +0.028764,220 +0.032144,222 +0.030095,222 +0.029826,222 +0.030025,222 +0.030439,222 +0.029537,222 +0.030335,222 +0.030394,222 +0.031119,222 +0.030428,222 +0.029719,222 +0.030357,222 +0.030121,222 +0.030463,222 +0.030936,222 +0.029935,222 +0.030507,222 +0.030769,222 +0.030753,222 +0.031559,222 +0.030556,222 +0.028491,222 +0.038898,222 +0.031032,222 +0.032999,222 +0.030822,222 +0.031671,222 +0.027785,222 +0.028481,222 +0.029536,222 +0.028762,222 +0.029051,222 +0.028534,222 +0.028510,222 +0.028585,222 +0.028222,222 +0.027511,222 +0.026921,222 +0.027167,222 +0.028879,222 +0.029678,222 +0.029246,222 +0.028604,222 +0.027927,222 +0.027112,222 +0.026937,222 +0.027582,222 +0.027922,222 +0.028084,222 +0.027279,222 +0.032112,222 +0.028924,222 +0.028764,222 +0.028468,222 +0.028902,222 +0.029415,222 +0.028632,222 +0.028597,222 +0.028101,222 +0.027938,222 +0.027737,222 +0.027592,222 +0.027508,222 +0.026710,222 +0.027587,222 +0.027275,222 +0.026938,222 +0.026820,222 +0.027447,222 +0.026860,222 +0.027257,222 +0.027210,222 +0.027288,222 +0.026897,222 +0.026723,222 +0.027392,222 +0.027271,222 +0.026700,222 +0.027218,222 +0.027228,222 +0.026802,222 +0.026738,222 +0.026919,222 +0.027479,222 +0.026767,222 +0.027356,222 +0.028218,222 +0.027190,222 +0.026627,222 +0.026783,222 +0.029107,222 +0.027437,222 +0.027101,222 +0.027245,222 +0.027957,222 +0.027147,222 +0.026625,222 +0.027619,222 +0.026972,222 +0.026861,222 +0.030481,224 +0.031907,224 +0.030276,224 +0.030199,224 +0.030781,224 +0.030660,224 +0.029803,224 +0.029641,224 +0.030029,224 +0.030143,224 +0.030204,224 +0.029160,224 +0.028092,224 +0.027552,224 +0.028139,224 +0.027974,224 +0.027323,224 +0.027517,224 +0.028085,224 +0.030571,224 +0.030403,224 +0.029997,224 +0.028308,224 +0.027460,224 +0.028766,224 +0.029718,224 +0.028819,224 +0.029245,224 +0.031629,224 +0.032029,224 +0.030914,224 +0.030517,224 +0.030474,224 +0.030768,224 +0.031882,224 +0.031387,224 +0.030420,224 +0.031337,224 +0.030044,224 +0.034327,224 +0.030854,224 +0.030328,224 +0.033406,224 +0.031817,224 +0.030631,224 +0.032101,224 +0.033730,224 +0.029826,224 +0.031530,224 +0.031753,224 +0.033048,224 +0.032152,224 +0.030505,224 +0.029881,224 +0.031639,224 +0.029774,224 +0.028924,224 +0.028632,224 +0.027792,224 +0.029400,224 +0.030336,224 +0.030603,224 +0.028470,224 +0.028010,224 +0.027968,224 +0.027848,224 +0.034007,224 +0.034008,224 +0.032426,224 +0.031746,224 +0.038141,224 +0.032608,224 +0.031625,224 +0.034657,224 +0.038820,224 +0.033090,224 +0.033139,224 +0.031559,224 +0.032271,224 +0.030568,224 +0.032382,224 +0.030899,224 +0.030876,224 +0.031431,224 +0.032091,224 +0.030831,224 +0.033164,224 +0.031260,224 +0.032525,224 +0.030558,224 +0.031484,224 +0.032766,224 +0.040871,224 +0.034256,224 +0.029736,224 +0.030002,224 +0.030190,224 +0.031873,224 +0.035653,224 +0.030355,224 +0.038359,226 +0.032737,226 +0.032086,226 +0.031910,226 +0.033470,226 +0.035968,226 +0.035538,226 +0.031602,226 +0.031934,226 +0.033544,226 +0.031603,226 +0.032140,226 +0.030537,226 +0.029187,226 +0.033465,226 +0.032267,226 +0.028616,226 +0.029906,226 +0.030404,226 +0.031123,226 +0.030498,226 +0.029185,226 +0.029922,226 +0.029873,226 +0.029993,226 +0.029503,226 +0.029013,226 +0.029772,226 +0.029598,226 +0.029569,226 +0.029438,226 +0.029786,226 +0.029251,226 +0.029219,226 +0.029285,226 +0.028921,226 +0.029585,226 +0.029455,226 +0.030155,226 +0.037745,226 +0.048594,226 +0.035934,226 +0.029589,226 +0.030131,226 +0.031797,226 +0.032539,226 +0.037528,226 +0.030358,226 +0.030639,226 +0.033117,226 +0.030044,226 +0.032242,226 +0.055458,226 +0.031261,226 +0.030087,226 +0.030046,226 +0.030232,226 +0.029933,226 +0.033404,226 +0.031345,226 +0.029815,226 +0.034788,226 +0.030248,226 +0.031458,226 +0.030393,226 +0.029576,226 +0.034623,226 +0.031584,226 +0.030099,226 +0.032214,226 +0.038271,226 +0.053570,226 +0.032201,226 +0.037901,226 +0.032488,226 +0.040133,226 +0.047461,226 +0.054163,226 +0.034901,226 +0.029900,226 +0.029762,226 +0.033021,226 +0.033003,226 +0.038823,226 +0.037308,226 +0.032131,226 +0.034172,226 +0.033802,226 +0.030919,226 +0.031852,226 +0.033025,226 +0.031556,226 +0.032073,226 +0.033406,226 +0.033584,226 +0.032928,226 +0.038199,226 +0.033780,226 +0.038584,226 +0.055719,226 +0.058413,228 +0.035285,228 +0.035209,228 +0.037280,228 +0.033502,228 +0.032071,228 +0.035548,228 +0.034351,228 +0.036300,228 +0.033368,228 +0.032850,228 +0.034856,228 +0.031111,228 +0.031256,228 +0.032246,228 +0.032399,228 +0.030678,228 +0.032127,228 +0.034021,228 +0.033264,228 +0.035448,228 +0.033460,228 +0.032239,228 +0.034237,228 +0.033503,228 +0.035946,228 +0.038068,228 +0.037110,228 +0.032372,228 +0.034622,228 +0.043915,228 +0.038023,228 +0.032146,228 +0.033678,228 +0.035175,228 +0.039960,228 +0.038647,228 +0.032987,228 +0.034119,228 +0.031473,228 +0.034447,228 +0.037187,228 +0.034195,228 +0.053888,228 +0.057387,228 +0.041434,228 +0.035605,228 +0.037209,228 +0.038886,228 +0.038520,228 +0.037813,228 +0.038613,228 +0.037488,228 +0.035828,228 +0.055271,228 +0.044974,228 +0.036878,228 +0.033910,228 +0.040586,228 +0.034270,228 +0.035660,228 +0.037039,228 +0.035461,228 +0.033405,228 +0.034598,228 +0.033075,228 +0.031569,228 +0.029700,228 +0.028999,228 +0.028899,228 +0.030214,228 +0.029377,228 +0.029040,228 +0.028972,228 +0.030507,228 +0.030097,228 +0.029211,228 +0.031429,228 +0.031037,228 +0.030696,228 +0.032641,228 +0.030338,228 +0.030568,228 +0.035138,228 +0.033369,228 +0.033579,228 +0.032370,228 +0.033078,228 +0.033028,228 +0.036455,228 +0.031926,228 +0.037841,228 +0.043416,228 +0.034424,228 +0.035560,228 +0.035623,228 +0.033878,228 +0.034861,228 +0.040343,228 +0.031714,228 +0.031521,230 +0.032262,230 +0.031759,230 +0.031238,230 +0.040024,230 +0.030795,230 +0.030423,230 +0.037331,230 +0.034220,230 +0.038911,230 +0.033386,230 +0.030560,230 +0.032715,230 +0.032480,230 +0.032481,230 +0.032610,230 +0.031889,230 +0.029772,230 +0.031411,230 +0.036283,230 +0.035074,230 +0.031736,230 +0.032945,230 +0.033298,230 +0.035190,230 +0.035525,230 +0.033094,230 +0.030818,230 +0.030266,230 +0.030043,230 +0.033915,230 +0.033520,230 +0.043449,230 +0.031992,230 +0.032614,230 +0.030324,230 +0.029697,230 +0.031615,230 +0.029970,230 +0.029960,230 +0.030578,230 +0.030815,230 +0.029851,230 +0.029909,230 +0.031756,230 +0.030288,230 +0.029887,230 +0.031984,230 +0.030395,230 +0.030012,230 +0.031443,230 +0.030140,230 +0.029813,230 +0.029760,230 +0.030528,230 +0.031063,230 +0.030089,230 +0.030302,230 +0.031332,230 +0.030670,230 +0.030580,230 +0.030771,230 +0.029953,230 +0.029818,230 +0.030290,230 +0.029702,230 +0.029878,230 +0.030488,230 +0.029758,230 +0.029761,230 +0.030089,230 +0.029880,230 +0.029779,230 +0.029914,230 +0.030102,230 +0.030568,230 +0.029937,230 +0.040401,230 +0.031918,230 +0.033614,230 +0.033388,230 +0.031643,230 +0.033828,230 +0.033263,230 +0.032154,230 +0.037540,230 +0.031902,230 +0.031859,230 +0.031949,230 +0.032026,230 +0.033004,230 +0.033935,230 +0.032172,230 +0.030865,230 +0.034507,230 +0.031688,230 +0.030815,230 +0.031229,230 +0.032014,230 +0.031126,230 +0.032550,232 +0.031897,232 +0.031908,232 +0.035073,232 +0.038418,232 +0.041864,232 +0.035232,232 +0.033638,232 +0.037859,232 +0.036304,232 +0.041679,232 +0.037868,232 +0.035952,232 +0.034724,232 +0.035198,232 +0.037757,232 +0.048921,232 +0.045694,232 +0.034858,232 +0.034677,232 +0.037713,232 +0.035391,232 +0.034319,232 +0.035481,232 +0.031987,232 +0.032051,232 +0.036022,232 +0.032238,232 +0.032866,232 +0.036448,232 +0.037238,232 +0.036668,232 +0.034088,232 +0.036922,232 +0.035981,232 +0.035254,232 +0.040008,232 +0.036387,232 +0.036067,232 +0.035025,232 +0.040029,232 +0.035266,232 +0.035036,232 +0.033987,232 +0.033387,232 +0.033578,232 +0.035668,232 +0.033234,232 +0.032961,232 +0.044879,232 +0.034288,232 +0.036545,232 +0.037218,232 +0.060757,232 +0.052725,232 +0.059088,232 +0.046550,232 +0.035530,232 +0.037320,232 +0.035810,232 +0.037426,232 +0.038875,232 +0.039483,232 +0.036936,232 +0.039523,232 +0.035185,232 +0.036760,232 +0.039975,232 +0.033352,232 +0.034196,232 +0.038098,232 +0.035772,232 +0.034154,232 +0.046065,232 +0.036488,232 +0.036674,232 +0.032738,232 +0.040295,232 +0.034094,232 +0.032441,232 +0.034736,232 +0.039548,232 +0.043287,232 +0.035976,232 +0.034000,232 +0.039252,232 +0.036005,232 +0.035834,232 +0.038083,232 +0.042782,232 +0.034514,232 +0.036371,232 +0.037417,232 +0.036355,232 +0.035273,232 +0.034276,232 +0.034102,232 +0.034029,232 +0.032980,232 +0.033573,232 +0.038926,234 +0.040618,234 +0.040820,234 +0.037968,234 +0.038272,234 +0.042271,234 +0.049123,234 +0.034518,234 +0.038881,234 +0.036649,234 +0.034415,234 +0.036345,234 +0.042409,234 +0.046327,234 +0.040199,234 +0.035942,234 +0.033875,234 +0.034114,234 +0.032950,234 +0.034286,234 +0.033797,234 +0.033200,234 +0.034005,234 +0.034584,234 +0.033112,234 +0.035728,234 +0.034922,234 +0.034962,234 +0.033979,234 +0.037586,234 +0.032872,234 +0.032678,234 +0.032931,234 +0.031773,234 +0.031569,234 +0.032165,234 +0.031644,234 +0.031421,234 +0.031764,234 +0.032788,234 +0.031787,234 +0.032033,234 +0.032698,234 +0.034101,234 +0.032329,234 +0.031548,234 +0.031429,234 +0.031976,234 +0.031711,234 +0.031761,234 +0.031984,234 +0.032145,234 +0.032423,234 +0.031948,234 +0.032846,234 +0.032110,234 +0.031985,234 +0.032124,234 +0.032101,234 +0.032569,234 +0.031868,234 +0.031619,234 +0.031396,234 +0.031854,234 +0.031510,234 +0.031874,234 +0.032488,234 +0.031960,234 +0.032351,234 +0.032967,234 +0.031426,234 +0.031421,234 +0.032175,234 +0.032020,234 +0.031694,234 +0.031361,234 +0.032057,234 +0.031503,234 +0.031530,234 +0.031835,234 +0.031568,234 +0.032580,234 +0.033096,234 +0.031693,234 +0.031557,234 +0.031821,234 +0.031663,234 +0.031552,234 +0.031997,234 +0.031551,234 +0.032328,234 +0.038241,234 +0.033073,234 +0.034025,234 +0.041936,234 +0.034898,234 +0.034670,234 +0.033454,234 +0.032831,234 +0.032554,234 +0.034014,236 +0.042267,236 +0.033598,236 +0.037150,236 +0.037716,236 +0.042123,236 +0.035850,236 +0.033674,236 +0.034933,236 +0.046021,236 +0.036961,236 +0.034046,236 +0.034640,236 +0.038851,236 +0.038601,236 +0.037612,236 +0.038283,236 +0.050662,236 +0.042437,236 +0.035757,236 +0.042565,236 +0.042066,236 +0.036041,236 +0.045430,236 +0.046189,236 +0.035335,236 +0.035933,236 +0.037539,236 +0.035753,236 +0.038120,236 +0.038759,236 +0.035861,236 +0.037570,236 +0.037263,236 +0.037237,236 +0.034930,236 +0.036549,236 +0.038395,236 +0.035150,236 +0.034880,236 +0.056546,236 +0.065572,236 +0.064669,236 +0.043473,236 +0.038197,236 +0.036195,236 +0.037004,236 +0.037704,236 +0.039867,236 +0.034735,236 +0.035096,236 +0.036566,236 +0.036038,236 +0.035488,236 +0.036002,236 +0.034937,236 +0.037259,236 +0.037143,236 +0.038535,236 +0.037414,236 +0.037420,236 +0.035069,236 +0.044932,236 +0.042434,236 +0.038816,236 +0.037132,236 +0.039159,236 +0.043116,236 +0.053508,236 +0.036529,236 +0.042496,236 +0.041511,236 +0.042414,236 +0.036079,236 +0.035603,236 +0.038234,236 +0.036367,236 +0.035904,236 +0.043415,236 +0.038683,236 +0.049272,236 +0.037985,236 +0.040943,236 +0.036566,236 +0.036520,236 +0.036361,236 +0.040316,236 +0.038872,236 +0.046996,236 +0.038305,236 +0.037079,236 +0.037051,236 +0.036403,236 +0.052353,236 +0.065731,236 +0.038483,236 +0.039731,236 +0.040667,236 +0.039422,236 +0.036323,236 +0.039984,238 +0.039154,238 +0.038000,238 +0.040795,238 +0.040740,238 +0.037750,238 +0.039052,238 +0.037504,238 +0.039023,238 +0.039670,238 +0.039332,238 +0.038281,238 +0.037550,238 +0.039648,238 +0.042368,238 +0.040971,238 +0.046427,238 +0.041052,238 +0.038373,238 +0.040200,238 +0.043690,238 +0.037832,238 +0.038493,238 +0.038403,238 +0.037142,238 +0.034706,238 +0.033901,238 +0.040440,238 +0.035300,238 +0.041074,238 +0.037595,238 +0.035440,238 +0.037362,238 +0.035476,238 +0.035796,238 +0.037895,238 +0.038695,238 +0.037677,238 +0.041286,238 +0.037201,238 +0.033769,238 +0.036268,238 +0.035800,238 +0.036867,238 +0.035524,238 +0.036707,238 +0.033865,238 +0.034250,238 +0.033525,238 +0.034638,238 +0.034202,238 +0.034417,238 +0.036239,238 +0.035166,238 +0.033821,238 +0.033657,238 +0.033593,238 +0.034345,238 +0.033903,238 +0.033662,238 +0.034174,238 +0.034770,238 +0.033359,238 +0.033261,238 +0.033956,238 +0.033516,238 +0.034037,238 +0.033512,238 +0.035305,238 +0.043315,238 +0.036623,238 +0.036925,238 +0.035807,238 +0.035129,238 +0.035297,238 +0.035685,238 +0.034809,238 +0.062845,238 +0.063883,238 +0.037364,238 +0.034707,238 +0.036881,238 +0.036212,238 +0.034828,238 +0.039247,238 +0.037213,238 +0.035516,238 +0.039169,238 +0.034531,238 +0.034429,238 +0.058864,238 +0.034223,238 +0.036844,238 +0.034868,238 +0.039806,238 +0.039903,238 +0.036842,238 +0.045442,238 +0.061311,238 +0.068015,238 +0.061888,240 +0.037788,240 +0.038708,240 +0.040065,240 +0.037985,240 +0.038610,240 +0.038260,240 +0.035348,240 +0.043080,240 +0.065015,240 +0.065295,240 +0.047075,240 +0.039273,240 +0.039100,240 +0.041221,240 +0.036884,240 +0.037328,240 +0.038838,240 +0.035996,240 +0.035691,240 +0.038985,240 +0.040828,240 +0.063071,240 +0.040215,240 +0.040135,240 +0.044682,240 +0.058434,240 +0.035911,240 +0.035433,240 +0.036398,240 +0.038814,240 +0.039300,240 +0.040816,240 +0.039196,240 +0.039069,240 +0.036121,240 +0.037252,240 +0.040057,240 +0.037747,240 +0.049648,240 +0.044225,240 +0.037219,240 +0.043359,240 +0.039678,240 +0.044457,240 +0.043541,240 +0.037499,240 +0.036685,240 +0.035518,240 +0.036836,240 +0.036822,240 +0.038609,240 +0.042677,240 +0.042368,240 +0.041357,240 +0.036577,240 +0.037395,240 +0.044514,240 +0.041369,240 +0.040472,240 +0.043148,240 +0.035156,240 +0.036309,240 +0.037413,240 +0.041998,240 +0.039106,240 +0.037416,240 +0.049919,240 +0.058601,240 +0.063010,240 +0.039447,240 +0.041990,240 +0.036290,240 +0.035762,240 +0.036162,240 +0.036034,240 +0.038136,240 +0.035628,240 +0.037692,240 +0.037752,240 +0.041216,240 +0.043586,240 +0.036112,240 +0.038512,240 +0.037177,240 +0.035050,240 +0.034959,240 +0.035005,240 +0.034586,240 +0.040625,240 +0.036259,240 +0.035390,240 +0.047543,240 +0.046283,240 +0.035670,240 +0.037121,240 +0.036174,240 +0.036019,240 +0.035681,240 +0.035161,240 +0.037298,242 +0.036379,242 +0.037063,242 +0.039403,242 +0.035977,242 +0.035764,242 +0.038621,242 +0.040435,242 +0.040444,242 +0.046900,242 +0.044130,242 +0.043335,242 +0.041598,242 +0.043373,242 +0.051978,242 +0.047757,242 +0.043976,242 +0.044748,242 +0.044415,242 +0.045642,242 +0.043595,242 +0.040760,242 +0.037238,242 +0.037202,242 +0.039095,242 +0.037753,242 +0.044098,242 +0.043148,242 +0.037186,242 +0.037201,242 +0.037794,242 +0.037017,242 +0.046732,242 +0.042538,242 +0.040082,242 +0.037564,242 +0.036788,242 +0.039120,242 +0.037258,242 +0.039025,242 +0.038419,242 +0.037153,242 +0.039335,242 +0.036763,242 +0.037089,242 +0.038095,242 +0.036415,242 +0.035928,242 +0.037595,242 +0.035858,242 +0.035469,242 +0.035986,242 +0.035906,242 +0.036469,242 +0.036442,242 +0.036042,242 +0.036749,242 +0.036919,242 +0.036366,242 +0.042866,242 +0.036113,242 +0.037040,242 +0.039419,242 +0.037763,242 +0.036457,242 +0.035895,242 +0.036282,242 +0.037048,242 +0.035670,242 +0.036967,242 +0.036571,242 +0.035999,242 +0.038157,242 +0.036348,242 +0.036195,242 +0.037875,242 +0.038158,242 +0.037128,242 +0.037198,242 +0.036315,242 +0.039334,242 +0.040416,242 +0.040462,242 +0.040766,242 +0.036621,242 +0.041799,242 +0.041783,242 +0.041681,242 +0.039947,242 +0.045828,242 +0.051787,242 +0.055497,242 +0.062481,242 +0.054816,242 +0.051234,242 +0.053183,242 +0.049677,242 +0.043943,242 +0.049858,242 +0.048604,242 +0.042604,244 +0.037067,244 +0.037008,244 +0.038071,244 +0.037895,244 +0.037857,244 +0.039293,244 +0.038633,244 +0.038398,244 +0.037568,244 +0.043805,244 +0.037950,244 +0.037571,244 +0.038194,244 +0.040907,244 +0.049489,244 +0.045770,244 +0.041992,244 +0.049068,244 +0.042707,244 +0.038987,244 +0.040554,244 +0.045714,244 +0.046163,244 +0.045404,244 +0.039588,244 +0.038019,244 +0.039299,244 +0.044092,244 +0.039754,244 +0.037165,244 +0.037098,244 +0.039174,244 +0.043341,244 +0.038992,244 +0.037748,244 +0.047128,244 +0.046255,244 +0.042033,244 +0.043816,244 +0.040439,244 +0.046624,244 +0.047540,244 +0.054191,244 +0.051626,244 +0.045808,244 +0.042352,244 +0.045372,244 +0.038918,244 +0.038240,244 +0.038005,244 +0.037630,244 +0.042605,244 +0.039113,244 +0.038081,244 +0.040873,244 +0.039740,244 +0.039959,244 +0.043360,244 +0.041199,244 +0.039120,244 +0.037091,244 +0.042271,244 +0.042701,244 +0.045315,244 +0.049741,244 +0.039499,244 +0.039563,244 +0.057227,244 +0.044174,244 +0.044178,244 +0.040710,244 +0.040150,244 +0.041164,244 +0.039595,244 +0.038822,244 +0.037958,244 +0.045212,244 +0.041920,244 +0.041130,244 +0.042547,244 +0.046054,244 +0.041133,244 +0.037234,244 +0.038638,244 +0.042100,244 +0.040171,244 +0.041663,244 +0.040491,244 +0.043518,244 +0.044038,244 +0.038680,244 +0.042164,244 +0.061726,244 +0.074289,244 +0.042699,244 +0.042803,244 +0.049122,244 +0.070119,244 +0.049622,244 +0.038539,246 +0.038196,246 +0.039307,246 +0.037428,246 +0.038324,246 +0.052023,246 +0.039487,246 +0.037586,246 +0.039020,246 +0.039549,246 +0.037492,246 +0.040484,246 +0.039250,246 +0.046656,246 +0.038669,246 +0.039248,246 +0.040040,246 +0.037132,246 +0.038674,246 +0.038312,246 +0.037191,246 +0.039565,246 +0.060067,246 +0.053942,246 +0.044020,246 +0.055706,246 +0.040239,246 +0.041632,246 +0.046325,246 +0.046631,246 +0.050694,246 +0.042951,246 +0.042646,246 +0.042530,246 +0.048909,246 +0.040221,246 +0.044465,246 +0.048841,246 +0.049324,246 +0.043825,246 +0.042679,246 +0.042340,246 +0.042111,246 +0.045769,246 +0.054803,246 +0.048428,246 +0.043964,246 +0.052360,246 +0.041956,246 +0.042329,246 +0.043834,246 +0.047139,246 +0.060399,246 +0.052413,246 +0.042464,246 +0.042927,246 +0.049934,246 +0.041210,246 +0.043826,246 +0.045054,246 +0.048279,246 +0.041517,246 +0.039144,246 +0.053363,246 +0.039289,246 +0.040568,246 +0.039130,246 +0.041380,246 +0.039996,246 +0.038805,246 +0.039796,246 +0.037353,246 +0.048057,246 +0.042571,246 +0.041057,246 +0.042104,246 +0.043330,246 +0.049639,246 +0.041997,246 +0.040691,246 +0.042721,246 +0.048252,246 +0.039384,246 +0.038983,246 +0.040735,246 +0.039003,246 +0.038468,246 +0.043975,246 +0.039244,246 +0.039227,246 +0.038976,246 +0.038386,246 +0.042636,246 +0.038402,246 +0.038908,246 +0.038447,246 +0.038969,246 +0.043644,246 +0.038643,246 +0.039654,246 +0.040417,248 +0.039043,248 +0.044185,248 +0.040981,248 +0.041167,248 +0.039010,248 +0.046503,248 +0.039729,248 +0.038554,248 +0.044928,248 +0.038168,248 +0.041322,248 +0.041021,248 +0.037554,248 +0.045301,248 +0.039310,248 +0.044383,248 +0.038072,248 +0.037636,248 +0.045089,248 +0.037994,248 +0.045009,248 +0.037771,248 +0.037889,248 +0.044825,248 +0.038956,248 +0.046335,248 +0.038490,248 +0.039092,248 +0.044719,248 +0.038244,248 +0.038259,248 +0.040093,248 +0.059074,248 +0.069364,248 +0.072384,248 +0.070536,248 +0.070802,248 +0.043605,248 +0.043621,248 +0.048433,248 +0.050848,248 +0.045514,248 +0.043148,248 +0.051421,248 +0.042470,248 +0.041860,248 +0.044064,248 +0.042480,248 +0.039761,248 +0.042519,248 +0.046595,248 +0.043080,248 +0.041553,248 +0.040925,248 +0.039039,248 +0.041334,248 +0.041843,248 +0.043456,248 +0.052848,248 +0.054206,248 +0.043880,248 +0.039692,248 +0.049379,248 +0.044408,248 +0.044133,248 +0.042658,248 +0.040781,248 +0.039622,248 +0.040741,248 +0.040740,248 +0.040613,248 +0.042183,248 +0.047676,248 +0.045665,248 +0.040499,248 +0.039285,248 +0.040557,248 +0.040458,248 +0.039474,248 +0.041121,248 +0.041969,248 +0.048307,248 +0.043854,248 +0.046862,248 +0.039862,248 +0.044932,248 +0.040158,248 +0.044907,248 +0.039039,248 +0.038666,248 +0.040718,248 +0.039401,248 +0.041912,248 +0.039699,248 +0.038408,248 +0.039801,248 +0.037801,248 +0.038018,248 +0.041077,248 +0.041118,250 +0.041625,250 +0.042281,250 +0.041250,250 +0.047224,250 +0.052398,250 +0.042484,250 +0.041450,250 +0.044243,250 +0.043093,250 +0.043305,250 +0.044385,250 +0.040806,250 +0.042173,250 +0.043244,250 +0.043859,250 +0.041508,250 +0.040480,250 +0.041561,250 +0.052677,250 +0.049975,250 +0.043095,250 +0.042289,250 +0.040271,250 +0.042032,250 +0.041356,250 +0.040589,250 +0.042898,250 +0.040365,250 +0.042170,250 +0.041341,250 +0.047620,250 +0.040095,250 +0.042915,250 +0.042191,250 +0.040765,250 +0.041442,250 +0.040396,250 +0.038723,250 +0.039274,250 +0.038511,250 +0.039335,250 +0.039447,250 +0.038701,250 +0.041427,250 +0.039387,250 +0.041807,250 +0.039079,250 +0.038644,250 +0.039729,250 +0.038817,250 +0.039518,250 +0.039032,250 +0.038899,250 +0.041545,250 +0.040623,250 +0.038601,250 +0.039554,250 +0.038782,250 +0.038914,250 +0.038213,250 +0.038458,250 +0.038830,250 +0.038276,250 +0.038921,250 +0.038286,250 +0.038049,250 +0.039573,250 +0.038401,250 +0.038713,250 +0.038589,250 +0.038117,250 +0.038831,250 +0.038402,250 +0.038166,250 +0.038875,250 +0.038836,250 +0.039089,250 +0.038327,250 +0.038419,250 +0.039411,250 +0.042661,250 +0.041217,250 +0.039954,250 +0.040938,250 +0.040428,250 +0.040414,250 +0.046576,250 +0.040224,250 +0.041112,250 +0.045884,250 +0.039604,250 +0.040516,250 +0.039564,250 +0.040219,250 +0.040064,250 +0.039664,250 +0.047404,250 +0.040092,250 +0.047241,250 +0.041014,252 +0.041330,252 +0.044109,252 +0.041699,252 +0.041691,252 +0.043507,252 +0.049178,252 +0.039971,252 +0.039065,252 +0.047117,252 +0.039674,252 +0.048511,252 +0.040083,252 +0.040037,252 +0.039856,252 +0.040304,252 +0.043659,252 +0.040051,252 +0.039996,252 +0.039877,252 +0.041357,252 +0.041120,252 +0.040048,252 +0.040099,252 +0.039636,252 +0.039485,252 +0.040500,252 +0.039753,252 +0.040429,252 +0.039844,252 +0.039803,252 +0.040322,252 +0.041272,252 +0.040620,252 +0.039722,252 +0.039304,252 +0.040193,252 +0.039097,252 +0.039661,252 +0.039098,252 +0.038839,252 +0.040025,252 +0.039618,252 +0.040018,252 +0.039926,252 +0.039517,252 +0.040126,252 +0.040258,252 +0.040113,252 +0.040086,252 +0.039453,252 +0.041034,252 +0.039821,252 +0.040005,252 +0.039831,252 +0.039674,252 +0.040629,252 +0.041473,252 +0.039830,252 +0.040176,252 +0.039588,252 +0.040798,252 +0.039369,252 +0.039816,252 +0.040228,252 +0.039705,252 +0.040574,252 +0.039849,252 +0.043661,252 +0.039510,252 +0.039278,252 +0.040141,252 +0.039366,252 +0.039836,252 +0.039810,252 +0.039245,252 +0.040290,252 +0.039499,252 +0.039695,252 +0.040437,252 +0.040627,252 +0.040927,252 +0.041921,252 +0.040642,252 +0.039550,252 +0.039489,252 +0.040235,252 +0.039898,252 +0.039762,252 +0.040119,252 +0.040233,252 +0.040398,252 +0.039181,252 +0.043033,252 +0.044545,252 +0.044985,252 +0.047034,252 +0.044280,252 +0.054477,252 +0.050319,252 +0.057066,254 +0.045915,254 +0.053807,254 +0.045821,254 +0.046224,254 +0.053504,254 +0.046008,254 +0.042736,254 +0.042936,254 +0.042031,254 +0.049899,254 +0.045839,254 +0.043794,254 +0.045294,254 +0.042477,254 +0.042991,254 +0.042728,254 +0.050819,254 +0.042482,254 +0.048271,254 +0.040985,254 +0.040710,254 +0.047932,254 +0.040411,254 +0.048790,254 +0.040995,254 +0.048399,254 +0.041008,254 +0.046948,254 +0.043205,254 +0.041398,254 +0.049819,254 +0.064929,254 +0.056505,254 +0.043840,254 +0.045254,254 +0.046367,254 +0.048988,254 +0.048867,254 +0.047641,254 +0.046717,254 +0.041652,254 +0.040698,254 +0.041314,254 +0.041291,254 +0.041492,254 +0.041668,254 +0.041032,254 +0.043226,254 +0.040972,254 +0.041882,254 +0.042040,254 +0.041288,254 +0.043481,254 +0.041075,254 +0.042863,254 +0.042624,254 +0.041805,254 +0.045990,254 +0.042427,254 +0.047742,254 +0.042355,254 +0.045689,254 +0.046819,254 +0.047558,254 +0.045499,254 +0.044920,254 +0.042057,254 +0.041470,254 +0.042317,254 +0.041304,254 +0.042961,254 +0.041028,254 +0.042244,254 +0.041813,254 +0.043338,254 +0.043398,254 +0.041723,254 +0.042069,254 +0.042506,254 +0.040893,254 +0.041919,254 +0.041103,254 +0.041800,254 +0.041996,254 +0.041740,254 +0.042997,254 +0.040920,254 +0.041795,254 +0.041676,254 +0.041098,254 +0.041497,254 +0.041171,254 +0.042121,254 +0.041001,254 +0.041654,254 +0.045172,254 +0.040708,254 +0.041422,254 +0.040343,254 +0.046370,256 +0.045655,256 +0.048878,256 +0.045398,256 +0.045694,256 +0.046966,256 +0.045426,256 +0.045866,256 +0.045093,256 +0.046127,256 +0.045129,256 +0.046048,256 +0.045077,256 +0.048681,256 +0.045522,256 +0.052923,256 +0.048435,256 +0.046260,256 +0.045517,256 +0.046115,256 +0.046228,256 +0.045122,256 +0.046320,256 +0.046687,256 +0.046604,256 +0.045214,256 +0.046405,256 +0.045484,256 +0.046130,256 +0.045156,256 +0.046180,256 +0.045839,256 +0.045490,256 +0.046040,256 +0.045252,256 +0.046244,256 +0.045412,256 +0.046311,256 +0.045113,256 +0.049488,256 +0.045643,256 +0.046900,256 +0.046661,256 +0.045409,256 +0.046062,256 +0.045338,256 +0.045944,256 +0.045376,256 +0.046158,256 +0.045406,256 +0.046151,256 +0.045319,256 +0.045680,256 +0.045820,256 +0.045328,256 +0.045860,256 +0.045192,256 +0.046020,256 +0.045257,256 +0.046302,256 +0.045438,256 +0.058704,256 +0.047125,256 +0.050324,256 +0.045177,256 +0.046064,256 +0.045252,256 +0.045498,256 +0.045675,256 +0.045127,256 +0.046056,256 +0.045348,256 +0.046808,256 +0.045555,256 +0.045877,256 +0.045550,256 +0.046480,256 +0.045690,256 +0.045546,256 +0.045840,256 +0.045534,256 +0.052565,256 +0.045433,256 +0.046270,256 +0.045094,256 +0.045598,256 +0.045110,256 +0.045658,256 +0.045319,256 +0.045527,256 +0.045396,256 +0.045103,256 +0.045891,256 +0.045382,256 +0.046379,256 +0.045006,256 +0.045845,256 +0.045230,256 +0.045804,256 +0.045221,256 +0.043128,258 +0.043097,258 +0.042982,258 +0.043606,258 +0.042851,258 +0.044028,258 +0.042502,258 +0.043378,258 +0.043095,258 +0.042678,258 +0.043282,258 +0.042649,258 +0.043546,258 +0.042667,258 +0.042888,258 +0.043258,258 +0.042892,258 +0.043451,258 +0.042961,258 +0.043597,258 +0.042769,258 +0.043045,258 +0.043404,258 +0.042599,258 +0.044687,258 +0.042961,258 +0.046317,258 +0.042790,258 +0.043971,258 +0.043444,258 +0.042786,258 +0.044754,258 +0.042692,258 +0.044956,258 +0.042697,258 +0.045201,258 +0.043495,258 +0.043298,258 +0.047522,258 +0.047937,258 +0.047038,258 +0.042625,258 +0.045165,258 +0.042676,258 +0.045141,258 +0.043566,258 +0.046159,258 +0.049445,258 +0.051943,258 +0.048570,258 +0.050922,258 +0.077064,258 +0.054108,258 +0.075734,258 +0.049988,258 +0.055326,258 +0.054183,258 +0.052520,258 +0.050749,258 +0.049838,258 +0.050774,258 +0.048713,258 +0.046663,258 +0.051461,258 +0.050249,258 +0.050005,258 +0.056744,258 +0.050853,258 +0.048940,258 +0.049486,258 +0.049413,258 +0.048170,258 +0.043561,258 +0.043528,258 +0.046977,258 +0.047641,258 +0.045539,258 +0.046903,258 +0.049043,258 +0.051012,258 +0.050541,258 +0.051858,258 +0.050450,258 +0.043314,258 +0.045638,258 +0.051711,258 +0.048072,258 +0.049489,258 +0.049104,258 +0.046936,258 +0.045119,258 +0.044753,258 +0.044203,258 +0.044305,258 +0.046464,258 +0.047061,258 +0.045169,258 +0.045110,258 +0.047880,258 +0.046840,258 +0.050664,260 +0.047291,260 +0.050600,260 +0.045224,260 +0.044480,260 +0.046777,260 +0.047652,260 +0.048565,260 +0.048601,260 +0.047835,260 +0.054151,260 +0.043818,260 +0.051183,260 +0.044731,260 +0.052353,260 +0.044937,260 +0.045090,260 +0.044738,260 +0.044539,260 +0.044189,260 +0.044068,260 +0.044165,260 +0.044131,260 +0.044706,260 +0.043923,260 +0.044485,260 +0.044039,260 +0.044352,260 +0.043917,260 +0.044257,260 +0.044521,260 +0.044229,260 +0.044743,260 +0.044407,260 +0.045388,260 +0.046720,260 +0.046403,260 +0.044388,260 +0.047111,260 +0.048361,260 +0.049818,260 +0.050172,260 +0.049104,260 +0.051559,260 +0.049807,260 +0.053649,260 +0.051756,260 +0.051425,260 +0.049529,260 +0.050346,260 +0.049346,260 +0.048547,260 +0.048216,260 +0.049552,260 +0.049367,260 +0.046374,260 +0.048519,260 +0.047924,260 +0.052343,260 +0.054300,260 +0.046514,260 +0.047875,260 +0.047481,260 +0.048849,260 +0.046673,260 +0.046245,260 +0.044684,260 +0.048325,260 +0.048049,260 +0.050329,260 +0.047061,260 +0.048243,260 +0.050512,260 +0.052190,260 +0.048308,260 +0.049647,260 +0.047268,260 +0.048502,260 +0.044475,260 +0.045791,260 +0.044151,260 +0.045445,260 +0.049574,260 +0.048230,260 +0.049027,260 +0.054493,260 +0.053909,260 +0.050246,260 +0.050147,260 +0.047211,260 +0.047581,260 +0.044123,260 +0.049601,260 +0.049980,260 +0.058061,260 +0.060819,260 +0.065946,260 +0.056675,260 +0.071167,260 +0.054238,260 +0.068391,262 +0.054044,262 +0.063854,262 +0.055572,262 +0.055039,262 +0.053090,262 +0.059861,262 +0.075603,262 +0.060356,262 +0.053670,262 +0.053980,262 +0.057140,262 +0.060211,262 +0.057499,262 +0.052951,262 +0.051282,262 +0.051657,262 +0.048438,262 +0.050060,262 +0.050079,262 +0.056088,262 +0.050441,262 +0.054786,262 +0.054944,262 +0.061158,262 +0.063592,262 +0.049756,262 +0.049989,262 +0.047498,262 +0.048026,262 +0.048181,262 +0.051458,262 +0.053053,262 +0.052789,262 +0.054084,262 +0.058270,262 +0.048062,262 +0.056312,262 +0.048521,262 +0.061651,262 +0.056249,262 +0.055687,262 +0.052286,262 +0.055558,262 +0.053551,262 +0.052897,262 +0.055583,262 +0.052118,262 +0.055595,262 +0.052332,262 +0.052024,262 +0.050782,262 +0.050073,262 +0.047154,262 +0.050550,262 +0.046832,262 +0.051025,262 +0.051053,262 +0.054520,262 +0.051870,262 +0.050002,262 +0.046938,262 +0.049972,262 +0.046934,262 +0.049755,262 +0.049122,262 +0.054521,262 +0.053756,262 +0.052077,262 +0.049274,262 +0.049231,262 +0.047972,262 +0.048660,262 +0.049238,262 +0.053002,262 +0.050456,262 +0.051622,262 +0.050363,262 +0.050675,262 +0.057281,262 +0.056032,262 +0.057048,262 +0.051817,262 +0.049484,262 +0.048476,262 +0.048065,262 +0.057571,262 +0.053732,262 +0.050675,262 +0.048509,262 +0.049214,262 +0.047276,262 +0.053407,262 +0.056771,262 +0.063283,262 +0.055163,262 +0.054900,262 +0.054134,262 +0.054612,262 +0.053658,262 +0.056285,264 +0.052211,264 +0.050864,264 +0.049217,264 +0.050019,264 +0.050148,264 +0.050645,264 +0.050201,264 +0.049772,264 +0.049309,264 +0.047067,264 +0.049003,264 +0.047070,264 +0.047391,264 +0.046381,264 +0.047166,264 +0.048396,264 +0.047551,264 +0.046881,264 +0.047159,264 +0.047023,264 +0.047268,264 +0.046398,264 +0.046534,264 +0.046563,264 +0.046307,264 +0.047036,264 +0.046239,264 +0.046973,264 +0.046144,264 +0.047086,264 +0.046353,264 +0.047711,264 +0.046246,264 +0.047048,264 +0.046189,264 +0.048609,264 +0.046199,264 +0.046267,264 +0.047407,264 +0.046089,264 +0.047786,264 +0.046747,264 +0.046999,264 +0.046237,264 +0.046987,264 +0.046402,264 +0.048332,264 +0.047240,264 +0.047567,264 +0.047951,264 +0.048270,264 +0.046454,264 +0.048006,264 +0.046843,264 +0.046841,264 +0.047899,264 +0.046480,264 +0.048260,264 +0.046080,264 +0.048094,264 +0.046167,264 +0.048128,264 +0.051792,264 +0.050430,264 +0.049137,264 +0.048897,264 +0.048034,264 +0.047286,264 +0.046188,264 +0.046870,264 +0.046286,264 +0.046630,264 +0.046781,264 +0.046262,264 +0.049960,264 +0.051342,264 +0.049265,264 +0.046303,264 +0.047130,264 +0.046226,264 +0.047704,264 +0.046374,264 +0.046911,264 +0.046082,264 +0.047771,264 +0.046475,264 +0.049328,264 +0.046435,264 +0.046622,264 +0.046266,264 +0.046550,264 +0.048710,264 +0.049719,264 +0.048527,264 +0.048581,264 +0.050060,264 +0.049059,264 +0.047369,264 +0.046636,264 +0.051725,266 +0.051314,266 +0.053410,266 +0.055430,266 +0.054625,266 +0.053391,266 +0.051943,266 +0.051466,266 +0.050024,266 +0.050617,266 +0.049899,266 +0.050297,266 +0.050409,266 +0.050722,266 +0.050274,266 +0.050730,266 +0.054686,266 +0.053915,266 +0.051247,266 +0.051398,266 +0.050113,266 +0.050549,266 +0.054031,266 +0.051283,266 +0.049816,266 +0.050561,266 +0.050195,266 +0.050661,266 +0.049893,266 +0.050586,266 +0.050073,266 +0.050903,266 +0.050330,266 +0.050627,266 +0.049771,266 +0.050922,266 +0.051920,266 +0.053144,266 +0.053605,266 +0.053413,266 +0.052102,266 +0.052975,266 +0.052856,266 +0.054334,266 +0.053598,266 +0.052921,266 +0.052794,266 +0.052685,266 +0.052804,266 +0.051450,266 +0.051631,266 +0.050223,266 +0.050900,266 +0.058479,266 +0.056501,266 +0.055018,266 +0.054116,266 +0.052089,266 +0.052082,266 +0.050745,266 +0.051203,266 +0.050035,266 +0.050797,266 +0.050062,266 +0.051296,266 +0.052480,266 +0.050936,266 +0.057681,266 +0.058276,266 +0.055856,266 +0.053685,266 +0.053777,266 +0.053911,266 +0.052941,266 +0.051741,266 +0.050494,266 +0.055502,266 +0.059932,266 +0.054018,266 +0.052270,266 +0.050435,266 +0.077285,266 +0.054011,266 +0.050785,266 +0.054649,266 +0.052420,266 +0.052819,266 +0.054659,266 +0.054409,266 +0.054260,266 +0.053533,266 +0.053754,266 +0.052733,266 +0.052416,266 +0.051040,266 +0.052033,266 +0.052009,266 +0.052529,266 +0.052487,266 +0.052117,266 +0.052258,268 +0.053511,268 +0.064842,268 +0.059756,268 +0.059964,268 +0.056388,268 +0.060106,268 +0.053551,268 +0.053074,268 +0.052905,268 +0.059101,268 +0.052455,268 +0.053274,268 +0.054025,268 +0.062822,268 +0.056024,268 +0.055818,268 +0.053038,268 +0.052923,268 +0.052858,268 +0.052785,268 +0.052192,268 +0.050187,268 +0.050496,268 +0.052006,268 +0.052511,268 +0.050390,268 +0.050760,268 +0.050301,268 +0.050783,268 +0.050071,268 +0.050577,268 +0.050098,268 +0.050878,268 +0.050046,268 +0.050771,268 +0.050167,268 +0.051274,268 +0.051997,268 +0.051412,268 +0.050190,268 +0.050241,268 +0.051350,268 +0.052092,268 +0.050312,268 +0.050354,268 +0.050081,268 +0.050403,268 +0.050523,268 +0.052009,268 +0.050330,268 +0.050170,268 +0.050514,268 +0.050418,268 +0.050490,268 +0.050214,268 +0.050398,268 +0.050309,268 +0.050384,268 +0.050148,268 +0.050418,268 +0.050590,268 +0.054156,268 +0.053955,268 +0.054889,268 +0.061761,268 +0.066656,268 +0.053520,268 +0.051113,268 +0.050269,268 +0.050530,268 +0.051181,268 +0.050927,268 +0.050556,268 +0.050343,268 +0.050250,268 +0.050333,268 +0.050440,268 +0.050843,268 +0.050310,268 +0.050533,268 +0.050466,268 +0.050440,268 +0.050083,268 +0.050723,268 +0.050275,268 +0.050505,268 +0.050215,268 +0.050782,268 +0.050139,268 +0.050525,268 +0.050406,268 +0.050330,268 +0.050213,268 +0.050382,268 +0.051692,268 +0.051835,268 +0.051324,268 +0.052542,268 +0.050617,268 +0.053960,270 +0.054397,270 +0.053719,270 +0.054373,270 +0.053741,270 +0.054123,270 +0.054112,270 +0.054448,270 +0.053833,270 +0.054301,270 +0.054003,270 +0.054069,270 +0.054124,270 +0.053797,270 +0.054256,270 +0.054018,270 +0.054296,270 +0.053865,270 +0.055765,270 +0.053850,270 +0.054618,270 +0.053893,270 +0.055188,270 +0.058444,270 +0.057940,270 +0.056482,270 +0.058558,270 +0.056220,270 +0.055996,270 +0.058367,270 +0.056417,270 +0.058341,270 +0.062754,270 +0.056253,270 +0.061714,270 +0.057928,270 +0.056349,270 +0.058408,270 +0.058224,270 +0.057903,270 +0.057873,270 +0.059330,270 +0.060017,270 +0.058020,270 +0.057583,270 +0.056950,270 +0.056838,270 +0.057761,270 +0.057302,270 +0.057690,270 +0.059148,270 +0.057890,270 +0.057142,270 +0.057580,270 +0.057715,270 +0.058074,270 +0.057601,270 +0.058007,270 +0.057046,270 +0.056160,270 +0.056786,270 +0.065296,270 +0.060188,270 +0.070213,270 +0.060761,270 +0.060641,270 +0.056608,270 +0.054322,270 +0.056702,270 +0.068307,270 +0.061488,270 +0.059540,270 +0.059322,270 +0.062787,270 +0.056925,270 +0.062799,270 +0.058443,270 +0.057363,270 +0.057748,270 +0.060106,270 +0.064343,270 +0.061347,270 +0.062039,270 +0.063974,270 +0.064517,270 +0.060165,270 +0.062633,270 +0.059059,270 +0.056930,270 +0.054548,270 +0.061077,270 +0.053595,270 +0.059761,270 +0.053469,270 +0.059381,270 +0.059112,270 +0.053274,270 +0.059535,270 +0.053350,270 +0.058998,270 +0.051533,272 +0.056155,272 +0.056381,272 +0.050555,272 +0.056389,272 +0.050467,272 +0.056186,272 +0.050446,272 +0.056900,272 +0.052880,272 +0.056857,272 +0.050859,272 +0.056792,272 +0.050541,272 +0.056909,272 +0.054983,272 +0.051940,272 +0.056142,272 +0.050491,272 +0.057792,272 +0.058770,272 +0.056321,272 +0.057960,272 +0.056229,272 +0.058982,272 +0.056232,272 +0.056269,272 +0.056030,272 +0.057696,272 +0.054746,272 +0.053061,272 +0.051260,272 +0.051097,272 +0.050458,272 +0.050925,272 +0.051690,272 +0.051156,272 +0.051179,272 +0.052154,272 +0.050605,272 +0.051061,272 +0.050549,272 +0.051130,272 +0.051958,272 +0.053018,272 +0.053542,272 +0.051333,272 +0.054512,272 +0.055631,272 +0.056081,272 +0.056137,272 +0.056946,272 +0.055434,272 +0.060452,272 +0.052961,272 +0.055519,272 +0.055727,272 +0.056935,272 +0.052991,272 +0.050753,272 +0.051385,272 +0.050604,272 +0.052218,272 +0.052902,272 +0.053580,272 +0.051193,272 +0.052471,272 +0.050534,272 +0.052734,272 +0.050638,272 +0.052118,272 +0.050569,272 +0.052254,272 +0.050403,272 +0.052877,272 +0.050546,272 +0.051199,272 +0.050424,272 +0.051033,272 +0.050499,272 +0.050719,272 +0.050657,272 +0.051270,272 +0.050571,272 +0.051184,272 +0.050471,272 +0.051083,272 +0.050534,272 +0.051226,272 +0.050497,272 +0.050930,272 +0.050515,272 +0.050652,272 +0.050458,272 +0.050849,272 +0.050960,272 +0.050717,272 +0.050660,272 +0.050604,272 +0.050627,272 +0.055355,274 +0.055286,274 +0.055058,274 +0.077759,274 +0.062612,274 +0.084260,274 +0.104903,274 +0.106103,274 +0.077543,274 +0.085944,274 +0.080646,274 +0.056136,274 +0.056251,274 +0.056378,274 +0.056039,274 +0.056316,274 +0.056571,274 +0.068323,274 +0.065931,274 +0.059785,274 +0.058998,274 +0.056701,274 +0.061016,274 +0.062724,274 +0.056139,274 +0.057446,274 +0.057002,274 +0.059934,274 +0.060444,274 +0.060331,274 +0.070187,274 +0.102343,274 +0.101983,274 +0.085944,274 +0.057725,274 +0.060507,274 +0.078247,274 +0.073117,274 +0.066163,274 +0.060576,274 +0.059118,274 +0.064332,274 +0.068698,274 +0.063827,274 +0.068858,274 +0.062736,274 +0.068263,274 +0.061657,274 +0.059037,274 +0.062543,274 +0.062379,274 +0.065076,274 +0.061394,274 +0.065859,274 +0.059628,274 +0.060438,274 +0.058751,274 +0.060736,274 +0.056983,274 +0.059483,274 +0.058811,274 +0.060062,274 +0.059005,274 +0.058105,274 +0.059569,274 +0.061596,274 +0.067420,274 +0.065639,274 +0.065058,274 +0.064804,274 +0.064150,274 +0.061249,274 +0.060533,274 +0.060707,274 +0.060454,274 +0.063287,274 +0.059066,274 +0.058902,274 +0.062817,274 +0.057138,274 +0.058739,274 +0.056870,274 +0.060131,274 +0.058255,274 +0.057846,274 +0.056016,274 +0.059232,274 +0.059195,274 +0.058514,274 +0.066063,274 +0.068293,274 +0.066232,274 +0.064580,274 +0.059091,274 +0.060501,274 +0.060111,274 +0.060989,274 +0.059421,274 +0.065569,274 +0.061068,274 +0.060733,276 +0.055370,276 +0.077650,276 +0.057427,276 +0.057217,276 +0.057550,276 +0.057177,276 +0.056801,276 +0.062281,276 +0.056746,276 +0.061197,276 +0.057997,276 +0.058909,276 +0.058194,276 +0.059997,276 +0.058988,276 +0.058429,276 +0.064624,276 +0.057617,276 +0.060444,276 +0.060571,276 +0.058261,276 +0.060075,276 +0.059849,276 +0.060039,276 +0.057928,276 +0.058232,276 +0.060680,276 +0.062127,276 +0.060752,276 +0.062138,276 +0.058386,276 +0.058208,276 +0.057690,276 +0.055231,276 +0.055463,276 +0.056137,276 +0.066303,276 +0.060803,276 +0.061295,276 +0.060621,276 +0.061494,276 +0.065527,276 +0.065753,276 +0.069152,276 +0.060415,276 +0.060932,276 +0.060823,276 +0.060634,276 +0.068160,276 +0.071643,276 +0.067290,276 +0.066832,276 +0.066297,276 +0.069288,276 +0.066156,276 +0.061526,276 +0.059984,276 +0.065361,276 +0.059491,276 +0.056447,276 +0.059148,276 +0.059728,276 +0.057638,276 +0.060436,276 +0.074956,276 +0.064729,276 +0.071866,276 +0.078464,276 +0.065329,276 +0.082083,276 +0.060430,276 +0.061510,276 +0.069063,276 +0.064846,276 +0.058104,276 +0.056249,276 +0.059217,276 +0.063967,276 +0.062880,276 +0.055427,276 +0.061798,276 +0.057072,276 +0.065297,276 +0.064682,276 +0.062539,276 +0.060433,276 +0.061693,276 +0.064777,276 +0.062460,276 +0.061834,276 +0.057039,276 +0.063286,276 +0.058734,276 +0.062493,276 +0.061756,276 +0.059587,276 +0.058489,276 +0.058649,276 +0.055728,276 +0.058655,278 +0.058376,278 +0.057495,278 +0.058710,278 +0.058263,278 +0.066848,278 +0.065266,278 +0.058434,278 +0.066578,278 +0.066915,278 +0.069207,278 +0.070718,278 +0.063471,278 +0.061312,278 +0.059197,278 +0.059363,278 +0.058063,278 +0.058907,278 +0.060127,278 +0.058821,278 +0.058679,278 +0.058371,278 +0.060246,278 +0.062742,278 +0.058916,278 +0.059371,278 +0.059822,278 +0.060244,278 +0.062157,278 +0.063462,278 +0.066566,278 +0.068093,278 +0.071604,278 +0.073728,278 +0.069347,278 +0.070758,278 +0.070580,278 +0.062849,278 +0.065264,278 +0.058941,278 +0.058012,278 +0.063789,278 +0.066193,278 +0.072972,278 +0.069772,278 +0.065957,278 +0.070013,278 +0.067595,278 +0.073879,278 +0.063638,278 +0.067512,278 +0.068782,278 +0.070986,278 +0.076221,278 +0.074177,278 +0.066303,278 +0.062857,278 +0.063683,278 +0.061570,278 +0.062001,278 +0.060927,278 +0.062514,278 +0.059205,278 +0.058478,278 +0.059849,278 +0.063694,278 +0.065171,278 +0.072492,278 +0.065300,278 +0.064288,278 +0.064443,278 +0.063192,278 +0.060911,278 +0.063925,278 +0.059304,278 +0.059943,278 +0.059610,278 +0.057801,278 +0.059888,278 +0.058579,278 +0.059326,278 +0.059327,278 +0.058302,278 +0.063137,278 +0.061572,278 +0.060818,278 +0.059413,278 +0.057830,278 +0.063835,278 +0.057556,278 +0.064423,278 +0.063405,278 +0.058073,278 +0.072706,278 +0.068393,278 +0.068173,278 +0.067488,278 +0.064341,278 +0.065489,278 +0.061618,278 +0.063219,280 +0.060395,280 +0.061169,280 +0.060930,280 +0.057626,280 +0.055814,280 +0.056872,280 +0.056238,280 +0.057810,280 +0.056633,280 +0.056554,280 +0.057295,280 +0.056093,280 +0.056544,280 +0.056032,280 +0.056596,280 +0.056284,280 +0.055857,280 +0.056353,280 +0.055744,280 +0.056309,280 +0.055758,280 +0.056570,280 +0.056137,280 +0.056888,280 +0.056344,280 +0.055935,280 +0.056404,280 +0.055796,280 +0.056614,280 +0.055893,280 +0.056381,280 +0.056788,280 +0.056024,280 +0.056255,280 +0.056147,280 +0.056318,280 +0.055886,280 +0.056246,280 +0.055850,280 +0.056286,280 +0.056400,280 +0.055959,280 +0.056493,280 +0.055887,280 +0.056421,280 +0.056425,280 +0.069027,280 +0.063965,280 +0.062629,280 +0.063214,280 +0.066614,280 +0.061499,280 +0.061985,280 +0.063162,280 +0.065707,280 +0.060343,280 +0.060719,280 +0.063382,280 +0.060085,280 +0.063920,280 +0.062268,280 +0.060334,280 +0.057546,280 +0.066008,280 +0.056917,280 +0.059449,280 +0.061266,280 +0.061639,280 +0.061490,280 +0.061053,280 +0.062394,280 +0.061806,280 +0.066203,280 +0.065063,280 +0.068803,280 +0.073897,280 +0.071415,280 +0.061651,280 +0.062140,280 +0.068908,280 +0.069307,280 +0.067386,280 +0.062752,280 +0.069230,280 +0.070114,280 +0.064809,280 +0.060479,280 +0.061138,280 +0.063538,280 +0.061519,280 +0.058772,280 +0.059980,280 +0.061173,280 +0.061562,280 +0.058449,280 +0.059663,280 +0.071151,280 +0.060882,280 +0.066724,280 +0.072016,282 +0.074860,282 +0.070270,282 +0.073070,282 +0.069344,282 +0.076691,282 +0.086220,282 +0.078314,282 +0.068736,282 +0.066885,282 +0.068434,282 +0.066834,282 +0.066249,282 +0.072824,282 +0.075319,282 +0.071495,282 +0.069390,282 +0.068081,282 +0.067893,282 +0.068946,282 +0.067668,282 +0.068085,282 +0.067531,282 +0.069401,282 +0.076482,282 +0.074109,282 +0.068777,282 +0.070797,282 +0.071662,282 +0.070121,282 +0.097231,282 +0.079167,282 +0.069282,282 +0.069333,282 +0.073691,282 +0.068289,282 +0.072362,282 +0.068569,282 +0.068555,282 +0.069764,282 +0.072091,282 +0.065155,282 +0.064922,282 +0.070280,282 +0.064525,282 +0.066633,282 +0.062893,282 +0.064499,282 +0.062042,282 +0.061602,282 +0.061429,282 +0.061333,282 +0.061341,282 +0.060931,282 +0.061759,282 +0.061270,282 +0.060762,282 +0.061671,282 +0.060706,282 +0.061936,282 +0.065297,282 +0.061463,282 +0.062186,282 +0.061000,282 +0.061329,282 +0.061405,282 +0.062654,282 +0.064562,282 +0.064346,282 +0.064517,282 +0.062018,282 +0.062551,282 +0.063137,282 +0.061378,282 +0.061309,282 +0.061441,282 +0.062240,282 +0.063585,282 +0.070333,282 +0.064389,282 +0.062171,282 +0.065352,282 +0.066117,282 +0.067361,282 +0.064329,282 +0.061419,282 +0.061788,282 +0.061899,282 +0.060952,282 +0.062098,282 +0.064113,282 +0.064734,282 +0.065608,282 +0.062708,282 +0.062502,282 +0.061444,282 +0.062500,282 +0.063233,282 +0.062965,282 +0.062939,282 +0.061046,284 +0.060496,284 +0.060836,284 +0.062635,284 +0.061098,284 +0.062422,284 +0.060454,284 +0.061306,284 +0.060970,284 +0.059322,284 +0.060996,284 +0.059282,284 +0.062343,284 +0.061150,284 +0.059339,284 +0.062270,284 +0.059404,284 +0.060982,284 +0.061201,284 +0.059487,284 +0.061295,284 +0.059402,284 +0.061040,284 +0.061154,284 +0.059433,284 +0.061046,284 +0.059347,284 +0.061015,284 +0.062313,284 +0.060296,284 +0.061069,284 +0.059390,284 +0.061376,284 +0.061045,284 +0.059254,284 +0.061072,284 +0.059390,284 +0.061039,284 +0.060863,284 +0.060137,284 +0.061132,284 +0.059248,284 +0.061549,284 +0.061096,284 +0.059492,284 +0.062208,284 +0.059378,284 +0.064014,284 +0.061461,284 +0.059358,284 +0.062296,284 +0.074642,284 +0.071049,284 +0.066325,284 +0.069245,284 +0.068743,284 +0.070516,284 +0.071255,284 +0.067085,284 +0.065974,284 +0.066825,284 +0.067573,284 +0.068968,284 +0.064459,284 +0.061483,284 +0.075049,284 +0.065255,284 +0.077691,284 +0.090725,284 +0.067188,284 +0.065421,284 +0.070782,284 +0.066749,284 +0.067901,284 +0.065804,284 +0.064306,284 +0.061525,284 +0.060358,284 +0.062015,284 +0.060604,284 +0.060064,284 +0.061275,284 +0.059862,284 +0.061431,284 +0.062032,284 +0.061327,284 +0.061746,284 +0.059494,284 +0.060965,284 +0.060872,284 +0.059400,284 +0.062127,284 +0.059301,284 +0.061337,284 +0.061756,284 +0.059648,284 +0.060987,284 +0.059261,284 +0.061118,284 +0.061140,284 +0.063425,286 +0.064737,286 +0.064355,286 +0.063657,286 +0.064667,286 +0.063042,286 +0.064707,286 +0.065789,286 +0.063100,286 +0.065326,286 +0.066364,286 +0.063675,286 +0.064873,286 +0.064375,286 +0.063434,286 +0.063620,286 +0.063581,286 +0.064280,286 +0.063903,286 +0.063200,286 +0.063643,286 +0.063740,286 +0.063307,286 +0.063884,286 +0.063368,286 +0.063508,286 +0.063826,286 +0.063174,286 +0.063968,286 +0.064779,286 +0.063249,286 +0.065129,286 +0.065503,286 +0.066801,286 +0.065673,286 +0.066431,286 +0.066196,286 +0.065085,286 +0.064430,286 +0.064809,286 +0.063816,286 +0.063359,286 +0.063642,286 +0.063762,286 +0.063233,286 +0.063836,286 +0.063836,286 +0.063249,286 +0.064058,286 +0.063400,286 +0.063894,286 +0.063750,286 +0.063127,286 +0.063740,286 +0.064056,286 +0.063366,286 +0.063874,286 +0.063578,286 +0.063819,286 +0.063598,286 +0.063287,286 +0.063787,286 +0.063828,286 +0.063347,286 +0.064371,286 +0.063440,286 +0.063083,286 +0.063631,286 +0.063373,286 +0.063355,286 +0.063701,286 +0.063124,286 +0.063970,286 +0.063441,286 +0.062995,286 +0.063621,286 +0.063674,286 +0.065323,286 +0.064494,286 +0.067087,286 +0.064575,286 +0.064647,286 +0.063564,286 +0.064806,286 +0.064180,286 +0.063215,286 +0.063833,286 +0.063644,286 +0.063111,286 +0.063867,286 +0.063236,286 +0.063614,286 +0.063930,286 +0.062981,286 +0.063888,286 +0.063725,286 +0.063463,286 +0.063839,286 +0.063619,286 +0.063223,286 +0.064376,288 +0.063707,288 +0.064364,288 +0.064462,288 +0.066459,288 +0.064684,288 +0.065017,288 +0.063947,288 +0.064447,288 +0.064137,288 +0.063646,288 +0.065175,288 +0.070360,288 +0.071598,288 +0.071383,288 +0.070829,288 +0.069477,288 +0.069394,288 +0.068970,288 +0.069672,288 +0.069716,288 +0.071996,288 +0.074610,288 +0.068118,288 +0.065774,288 +0.069773,288 +0.074340,288 +0.070091,288 +0.070158,288 +0.068244,288 +0.067423,288 +0.068650,288 +0.069801,288 +0.070965,288 +0.071539,288 +0.071692,288 +0.070481,288 +0.078654,288 +0.072991,288 +0.067273,288 +0.064580,288 +0.065642,288 +0.067566,288 +0.066009,288 +0.066068,288 +0.068610,288 +0.069114,288 +0.068622,288 +0.065788,288 +0.064485,288 +0.065000,288 +0.066887,288 +0.074228,288 +0.069965,288 +0.077213,288 +0.066733,288 +0.071594,288 +0.069941,288 +0.064325,288 +0.070085,288 +0.065749,288 +0.065430,288 +0.083415,288 +0.071016,288 +0.076565,288 +0.072772,288 +0.069500,288 +0.069351,288 +0.066924,288 +0.066275,288 +0.064787,288 +0.066885,288 +0.064586,288 +0.064665,288 +0.067937,288 +0.069406,288 +0.079028,288 +0.082235,288 +0.071772,288 +0.065477,288 +0.068255,288 +0.070726,288 +0.070777,288 +0.070487,288 +0.066012,288 +0.067938,288 +0.068077,288 +0.073226,288 +0.066543,288 +0.066800,288 +0.065631,288 +0.085718,288 +0.089092,288 +0.087413,288 +0.070510,288 +0.066891,288 +0.066570,288 +0.064278,288 +0.064291,288 +0.066164,288 +0.066856,290 +0.066542,290 +0.066700,290 +0.066331,290 +0.066329,290 +0.066563,290 +0.066186,290 +0.066713,290 +0.066740,290 +0.066146,290 +0.066181,290 +0.066832,290 +0.066045,290 +0.066206,290 +0.066781,290 +0.066178,290 +0.066023,290 +0.066379,290 +0.074327,290 +0.067359,290 +0.066890,290 +0.066038,290 +0.066210,290 +0.066857,290 +0.065996,290 +0.066408,290 +0.066721,290 +0.066083,290 +0.066572,290 +0.066601,290 +0.065704,290 +0.066854,290 +0.066663,290 +0.065723,290 +0.066815,290 +0.066464,290 +0.065716,290 +0.066601,290 +0.066705,290 +0.065860,290 +0.066663,290 +0.066405,290 +0.065973,290 +0.066908,290 +0.066657,290 +0.065943,290 +0.066938,290 +0.066389,290 +0.065999,290 +0.066745,290 +0.066303,290 +0.066258,290 +0.067397,290 +0.066411,290 +0.066299,290 +0.066642,290 +0.066156,290 +0.074817,290 +0.070316,290 +0.068684,290 +0.066628,290 +0.067040,290 +0.066562,290 +0.066173,290 +0.067013,290 +0.066810,290 +0.065973,290 +0.066960,290 +0.066530,290 +0.066101,290 +0.066809,290 +0.066522,290 +0.066021,290 +0.066746,290 +0.066434,290 +0.066097,290 +0.066708,290 +0.066651,290 +0.066335,290 +0.066961,290 +0.066217,290 +0.066568,290 +0.066737,290 +0.065997,290 +0.067041,290 +0.067766,290 +0.065829,290 +0.066719,290 +0.066944,290 +0.065817,290 +0.066878,290 +0.066380,290 +0.066074,290 +0.067010,290 +0.067114,290 +0.065857,290 +0.066773,290 +0.066490,290 +0.065858,290 +0.066554,290 +0.066309,292 +0.065868,292 +0.066050,292 +0.066186,292 +0.067014,292 +0.070358,292 +0.066037,292 +0.066376,292 +0.066464,292 +0.065910,292 +0.067182,292 +0.066370,292 +0.066138,292 +0.066665,292 +0.072453,292 +0.065768,292 +0.065263,292 +0.067144,292 +0.065889,292 +0.065232,292 +0.065898,292 +0.065375,292 +0.065452,292 +0.065864,292 +0.065250,292 +0.065853,292 +0.065723,292 +0.064962,292 +0.066235,292 +0.065645,292 +0.065551,292 +0.066315,292 +0.066393,292 +0.066390,292 +0.066038,292 +0.065460,292 +0.066657,292 +0.066426,292 +0.065633,292 +0.067215,292 +0.066436,292 +0.065902,292 +0.065923,292 +0.066517,292 +0.065837,292 +0.065519,292 +0.066377,292 +0.065731,292 +0.065825,292 +0.066306,292 +0.065418,292 +0.065969,292 +0.066479,292 +0.065072,292 +0.066340,292 +0.065952,292 +0.065452,292 +0.066103,292 +0.066080,292 +0.065526,292 +0.066222,292 +0.065902,292 +0.065540,292 +0.066321,292 +0.065830,292 +0.065732,292 +0.067067,292 +0.066852,292 +0.065767,292 +0.066326,292 +0.066414,292 +0.065622,292 +0.066265,292 +0.066090,292 +0.065993,292 +0.066376,292 +0.065403,292 +0.066079,292 +0.066214,292 +0.065233,292 +0.066158,292 +0.066097,292 +0.065168,292 +0.066237,292 +0.065953,292 +0.065484,292 +0.066720,292 +0.072731,292 +0.076935,292 +0.080018,292 +0.082379,292 +0.080917,292 +0.074605,292 +0.068439,292 +0.069450,292 +0.068890,292 +0.068080,292 +0.068419,292 +0.068819,292 +0.069171,292 +0.076822,294 +0.076086,294 +0.078940,294 +0.074760,294 +0.074426,294 +0.073137,294 +0.072081,294 +0.070823,294 +0.072792,294 +0.072130,294 +0.072409,294 +0.072391,294 +0.072992,294 +0.079275,294 +0.086944,294 +0.083957,294 +0.076999,294 +0.076847,294 +0.078900,294 +0.071525,294 +0.071786,294 +0.072034,294 +0.072026,294 +0.074384,294 +0.074108,294 +0.071156,294 +0.070194,294 +0.070710,294 +0.070922,294 +0.070716,294 +0.070229,294 +0.070987,294 +0.070825,294 +0.069836,294 +0.071088,294 +0.070921,294 +0.070434,294 +0.070411,294 +0.071038,294 +0.070787,294 +0.070330,294 +0.071036,294 +0.070979,294 +0.070156,294 +0.070996,294 +0.070858,294 +0.070398,294 +0.070803,294 +0.071150,294 +0.070646,294 +0.071168,294 +0.071539,294 +0.070709,294 +0.069758,294 +0.071038,294 +0.071165,294 +0.070349,294 +0.073770,294 +0.070953,294 +0.072926,294 +0.069917,294 +0.071281,294 +0.071955,294 +0.071535,294 +0.077098,294 +0.074606,294 +0.074303,294 +0.071320,294 +0.070532,294 +0.070896,294 +0.070341,294 +0.069827,294 +0.070714,294 +0.070326,294 +0.072954,294 +0.074486,294 +0.073188,294 +0.070619,294 +0.070657,294 +0.070815,294 +0.071126,294 +0.074661,294 +0.073268,294 +0.076067,294 +0.083637,294 +0.074073,294 +0.082686,294 +0.077119,294 +0.075453,294 +0.076002,294 +0.071392,294 +0.072592,294 +0.074008,294 +0.069877,294 +0.071344,294 +0.070870,294 +0.071150,294 +0.071804,294 +0.071079,294 +0.071553,294 +0.066974,296 +0.068582,296 +0.068594,296 +0.067236,296 +0.068186,296 +0.068300,296 +0.066251,296 +0.068456,296 +0.068182,296 +0.067526,296 +0.068491,296 +0.069412,296 +0.066596,296 +0.068758,296 +0.068368,296 +0.066651,296 +0.068386,296 +0.068434,296 +0.066997,296 +0.068163,296 +0.068334,296 +0.067285,296 +0.071464,296 +0.072527,296 +0.069374,296 +0.066762,296 +0.069384,296 +0.068125,296 +0.066689,296 +0.072023,296 +0.074263,296 +0.066657,296 +0.068572,296 +0.068314,296 +0.066261,296 +0.068553,296 +0.067026,296 +0.066611,296 +0.067615,296 +0.067246,296 +0.066506,296 +0.067668,296 +0.067284,296 +0.066467,296 +0.067471,296 +0.067280,296 +0.067456,296 +0.068320,296 +0.068635,296 +0.066139,296 +0.068106,296 +0.068149,296 +0.066075,296 +0.068784,296 +0.068268,296 +0.066233,296 +0.069456,296 +0.067947,296 +0.066422,296 +0.067812,296 +0.068153,296 +0.066867,296 +0.067462,296 +0.068132,296 +0.067164,296 +0.067326,296 +0.068220,296 +0.067258,296 +0.067231,296 +0.068053,296 +0.068183,296 +0.067775,296 +0.068161,296 +0.067675,296 +0.067005,296 +0.068616,296 +0.067729,296 +0.066907,296 +0.068243,296 +0.067927,296 +0.066670,296 +0.068298,296 +0.067857,296 +0.067380,296 +0.068326,296 +0.068842,296 +0.067039,296 +0.068302,296 +0.068213,296 +0.066634,296 +0.068386,296 +0.067673,296 +0.066894,296 +0.068327,296 +0.066926,296 +0.066740,296 +0.067472,296 +0.066996,296 +0.066620,296 +0.067563,296 +0.074082,298 +0.072820,298 +0.073513,298 +0.073754,298 +0.074084,298 +0.073198,298 +0.073715,298 +0.073480,298 +0.073005,298 +0.073204,298 +0.073714,298 +0.073746,298 +0.072662,298 +0.073693,298 +0.073421,298 +0.073221,298 +0.072732,298 +0.073666,298 +0.073410,298 +0.072768,298 +0.073171,298 +0.073607,298 +0.072946,298 +0.072686,298 +0.073423,298 +0.073634,298 +0.074629,298 +0.072765,298 +0.073651,298 +0.073395,298 +0.072872,298 +0.073192,298 +0.073592,298 +0.073454,298 +0.072587,298 +0.073284,298 +0.073709,298 +0.073488,298 +0.072771,298 +0.073605,298 +0.073534,298 +0.073027,298 +0.073515,298 +0.073689,298 +0.073708,298 +0.072601,298 +0.073632,298 +0.073809,298 +0.073004,298 +0.073058,298 +0.073719,298 +0.073876,298 +0.073224,298 +0.073554,298 +0.073837,298 +0.073483,298 +0.073045,298 +0.073656,298 +0.073569,298 +0.073026,298 +0.075732,298 +0.079497,298 +0.077026,298 +0.076725,298 +0.075296,298 +0.074288,298 +0.075321,298 +0.077556,298 +0.077182,298 +0.080477,298 +0.079437,298 +0.079661,298 +0.079812,298 +0.075677,298 +0.074235,298 +0.073422,298 +0.073126,298 +0.072768,298 +0.073769,298 +0.074062,298 +0.073833,298 +0.074786,298 +0.074297,298 +0.073377,298 +0.072905,298 +0.076307,298 +0.078593,298 +0.074184,298 +0.073057,298 +0.073524,298 +0.073492,298 +0.073582,298 +0.072937,298 +0.073603,298 +0.073564,298 +0.072902,298 +0.073522,298 +0.079887,298 +0.083117,298 +0.075722,298 diff --git a/buch/papers/multiplikation/code/meas/test/blas.txt b/buch/papers/multiplikation/code/meas/test/blas.txt new file mode 100644 index 0000000..7b0a9d1 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/test/blas.txt @@ -0,0 +1,14900 @@ +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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +0.000000,6 +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.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.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.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.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.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.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.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.000001,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000010,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.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.000000,8 +0.000000,8 +0.000000,8 +0.000000,8 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000010,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000010,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000010,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000010,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000001,10 +0.000002,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000001,12 +0.000003,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000013,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000002,14 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000003,16 +0.000005,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000006,18 +0.000007,18 +0.000007,18 +0.000007,18 +0.000006,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000013,18 +0.000004,18 +0.000014,18 +0.000004,18 +0.000014,18 +0.000004,18 +0.000014,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000004,18 +0.000007,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000005,20 +0.000008,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000011,22 +0.000012,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000016,22 +0.000007,22 +0.000016,22 +0.000007,22 +0.000016,22 +0.000016,22 +0.000016,22 +0.000007,22 +0.000016,22 +0.000016,22 +0.000016,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000016,22 +0.000007,22 +0.000016,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000006,22 +0.000010,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000010,24 +0.000018,24 +0.000018,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000008,24 +0.000013,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000020,26 +0.000011,26 +0.000020,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000020,26 +0.000020,26 +0.000021,26 +0.000031,26 +0.000011,26 +0.000019,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000020,26 +0.000020,26 +0.000020,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000010,26 +0.000015,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000022,28 +0.000022,28 +0.000021,28 +0.000022,28 +0.000021,28 +0.000023,28 +0.000022,28 +0.000023,28 +0.000022,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000024,28 +0.000024,28 +0.000025,28 +0.000035,28 +0.000048,28 +0.000055,28 +0.000045,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000026,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000023,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000020,28 +0.000025,28 +0.000025,28 +0.000025,28 +0.000024,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000013,28 +0.000025,28 +0.000032,30 +0.000031,30 +0.000030,30 +0.000031,30 +0.000030,30 +0.000030,30 +0.000073,30 +0.000030,30 +0.000030,30 +0.000031,30 +0.000017,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000019,30 +0.000030,30 +0.000030,30 +0.000030,30 +0.000030,30 +0.000030,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000026,30 +0.000029,30 +0.000040,30 +0.000041,30 +0.000041,30 +0.000040,30 +0.000038,30 +0.000042,30 +0.000023,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000027,30 +0.000030,30 +0.000030,30 +0.000040,30 +0.000040,30 +0.000031,30 +0.000028,30 +0.000028,30 +0.000024,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000015,30 +0.000021,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000021,32 +0.000025,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000028,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000029,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000028,32 +0.000039,32 +0.000043,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000022,32 +0.000028,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000040,32 +0.000038,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000019,32 +0.000043,32 +0.000047,32 +0.000031,32 +0.000047,34 +0.000039,34 +0.000035,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000022,34 +0.000027,34 +0.000050,34 +0.000023,34 +0.000023,34 +0.000023,34 +0.000023,34 +0.000023,34 +0.000033,34 +0.000023,34 +0.000042,36 +0.000028,36 +0.000037,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000037,36 +0.000036,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000043,36 +0.000050,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000027,36 +0.000037,36 +0.000036,36 +0.000037,36 +0.000059,36 +0.000049,36 +0.000027,36 +0.000037,36 +0.000057,36 +0.000048,36 +0.000046,36 +0.000047,36 +0.000027,36 +0.000046,36 +0.000027,36 +0.000027,36 +0.000035,38 +0.000036,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000051,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000042,38 +0.000041,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000051,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000031,38 +0.000044,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000086,40 +0.000090,40 +0.000051,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000058,40 +0.000062,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000042,40 +0.000053,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000059,42 +0.000077,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000068,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000068,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000064,42 +0.000058,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000048,42 +0.000058,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000078,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000078,44 +0.000095,44 +0.000073,44 +0.000096,44 +0.000097,44 +0.000085,44 +0.000064,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000065,44 +0.000064,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000075,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000054,44 +0.000068,46 +0.000062,46 +0.000078,46 +0.000083,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000085,46 +0.000072,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000081,46 +0.000133,46 +0.000080,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000097,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000061,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000062,46 +0.000073,48 +0.000069,48 +0.000108,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000090,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000089,48 +0.000069,48 +0.000069,48 +0.000095,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000088,48 +0.000079,48 +0.000099,48 +0.000141,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000091,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000069,48 +0.000085,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000092,50 +0.000138,50 +0.000097,50 +0.000151,50 +0.000117,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000098,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000099,50 +0.000077,50 +0.000078,50 +0.000078,50 +0.000078,50 +0.000117,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000150,50 +0.000111,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000078,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000100,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000077,50 +0.000089,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000131,52 +0.000106,52 +0.000147,52 +0.000130,52 +0.000105,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000123,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000106,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000110,52 +0.000128,52 +0.000153,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000110,52 +0.000095,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000086,52 +0.000099,54 +0.000116,54 +0.000161,54 +0.000169,54 +0.000144,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000153,54 +0.000096,54 +0.000096,54 +0.000115,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000114,54 +0.000115,54 +0.000170,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000106,54 +0.000196,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000131,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000139,54 +0.000096,54 +0.000130,54 +0.000096,54 +0.000096,54 +0.000120,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000096,54 +0.000110,56 +0.000125,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000133,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000136,56 +0.000159,56 +0.000159,56 +0.000143,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000126,56 +0.000106,56 +0.000106,56 +0.000125,56 +0.000106,56 +0.000130,56 +0.000135,56 +0.000183,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000172,56 +0.000149,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000106,56 +0.000119,56 +0.000115,56 +0.000123,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000129,58 +0.000127,58 +0.000117,58 +0.000117,58 +0.000156,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000136,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000136,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000152,58 +0.000138,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000117,58 +0.000134,58 +0.000153,60 +0.000178,60 +0.000226,60 +0.000188,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000148,60 +0.000128,60 +0.000128,60 +0.000149,60 +0.000142,60 +0.000132,60 +0.000132,60 +0.000157,60 +0.000190,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000153,60 +0.000132,60 +0.000161,60 +0.000132,60 +0.000132,60 +0.000132,60 +0.000142,60 +0.000180,60 +0.000141,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000212,60 +0.000390,60 +0.000275,60 +0.000261,60 +0.000269,60 +0.000234,60 +0.000272,60 +0.000241,60 +0.000238,60 +0.000326,60 +0.000245,60 +0.000182,60 +0.000150,60 +0.000167,60 +0.000153,60 +0.000138,60 +0.000128,60 +0.000159,60 +0.000249,60 +0.000157,60 +0.000128,60 +0.000164,60 +0.000165,60 +0.000128,60 +0.000128,60 +0.000230,60 +0.000176,60 +0.000244,60 +0.000238,60 +0.000162,60 +0.000128,60 +0.000128,60 +0.000170,60 +0.000148,60 +0.000129,60 +0.000142,60 +0.000128,60 +0.000128,60 +0.000128,60 +0.000180,60 +0.000212,60 +0.000189,60 +0.000191,60 +0.000161,60 +0.000143,60 +0.000166,60 +0.000135,60 +0.000135,60 +0.000135,60 +0.000135,60 +0.000135,60 +0.000135,60 +0.000135,60 +0.000142,60 +0.000169,60 +0.000128,60 +0.000128,60 +0.000144,62 +0.000141,62 +0.000141,62 +0.000188,62 +0.000215,62 +0.000213,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000161,62 +0.000141,62 +0.000161,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000167,62 +0.000145,62 +0.000184,62 +0.000145,62 +0.000223,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000165,62 +0.000165,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000178,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000165,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000178,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000145,62 +0.000150,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000141,62 +0.000156,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000198,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000248,64 +0.000255,64 +0.000163,64 +0.000154,64 +0.000154,64 +0.000174,64 +0.000154,64 +0.000174,64 +0.000153,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000190,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000195,64 +0.000192,64 +0.000154,64 +0.000164,64 +0.000216,64 +0.000164,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000168,64 +0.000173,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000173,64 +0.000173,64 +0.000154,64 +0.000154,64 +0.000173,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000173,64 +0.000189,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000173,64 +0.000174,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000154,64 +0.000172,66 +0.000169,66 +0.000169,66 +0.000194,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000240,66 +0.000283,66 +0.000188,66 +0.000169,66 +0.000169,66 +0.000188,66 +0.000169,66 +0.000189,66 +0.000169,66 +0.000196,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000179,66 +0.000227,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000191,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000179,66 +0.000198,66 +0.000169,66 +0.000169,66 +0.000189,66 +0.000207,66 +0.000169,66 +0.000169,66 +0.000188,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000191,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000169,66 +0.000186,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000198,68 +0.000307,68 +0.000251,68 +0.000183,68 +0.000183,68 +0.000209,68 +0.000223,68 +0.000345,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000303,68 +0.000331,68 +0.000331,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000255,68 +0.000283,68 +0.000183,68 +0.000201,68 +0.000203,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000215,68 +0.000223,68 +0.000183,68 +0.000203,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000203,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000355,68 +0.000196,68 +0.000183,68 +0.000221,68 +0.000183,68 +0.000256,68 +0.000184,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000183,68 +0.000246,68 +0.000312,68 +0.000193,68 +0.000183,68 +0.000183,68 +0.000203,68 +0.000203,68 +0.000218,70 +0.000355,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000237,70 +0.000342,70 +0.000334,70 +0.000339,70 +0.000351,70 +0.000373,70 +0.000355,70 +0.000281,70 +0.000363,70 +0.000341,70 +0.000323,70 +0.000200,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000233,70 +0.000348,70 +0.000199,70 +0.000242,70 +0.000199,70 +0.000199,70 +0.000238,70 +0.000199,70 +0.000210,70 +0.000208,70 +0.000199,70 +0.000199,70 +0.000219,70 +0.000199,70 +0.000378,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000326,70 +0.000209,70 +0.000199,70 +0.000239,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000200,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000341,70 +0.000229,70 +0.000199,70 +0.000291,70 +0.000325,70 +0.000303,70 +0.000199,70 +0.000214,70 +0.000210,70 +0.000210,70 +0.000210,70 +0.000210,70 +0.000214,70 +0.000205,70 +0.000205,70 +0.000210,70 +0.000199,70 +0.000375,70 +0.000347,70 +0.000410,70 +0.000361,70 +0.000362,70 +0.000371,70 +0.000203,70 +0.000199,70 +0.000199,70 +0.000199,70 +0.000382,70 +0.000200,70 +0.000210,70 +0.000345,70 +0.000490,70 +0.000247,70 +0.000255,70 +0.000199,70 +0.000199,70 +0.000359,70 +0.000230,70 +0.000281,70 +0.000210,70 +0.000251,70 +0.000311,72 +0.000259,72 +0.000226,72 +0.000215,72 +0.000235,72 +0.000215,72 +0.000235,72 +0.000367,72 +0.000451,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000250,72 +0.000215,72 +0.000215,72 +0.000393,72 +0.000215,72 +0.000215,72 +0.000293,72 +0.000309,72 +0.000215,72 +0.000304,72 +0.000325,72 +0.000221,72 +0.000221,72 +0.000221,72 +0.000374,72 +0.000227,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000244,72 +0.000356,72 +0.000545,72 +0.000385,72 +0.000391,72 +0.000216,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000420,72 +0.000388,72 +0.000393,72 +0.000223,72 +0.000215,72 +0.000233,72 +0.000270,72 +0.000348,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000254,72 +0.000220,72 +0.000390,72 +0.000215,72 +0.000215,72 +0.000257,72 +0.000308,72 +0.000215,72 +0.000235,72 +0.000301,72 +0.000279,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000215,72 +0.000230,72 +0.000351,72 +0.000215,72 +0.000257,72 +0.000314,72 +0.000254,72 +0.000215,72 +0.000215,72 +0.000281,72 +0.000317,72 +0.000390,72 +0.000292,72 +0.000227,72 +0.000234,72 +0.000221,72 +0.000247,72 +0.000250,72 +0.000227,72 +0.000215,72 +0.000344,74 +0.000473,74 +0.000451,74 +0.000574,74 +0.000248,74 +0.000357,74 +0.000234,74 +0.000233,74 +0.000233,74 +0.000350,74 +0.000234,74 +0.000233,74 +0.000312,74 +0.000311,74 +0.000233,74 +0.000233,74 +0.000314,74 +0.000265,74 +0.000233,74 +0.000234,74 +0.000346,74 +0.000273,74 +0.000234,74 +0.000287,74 +0.000351,74 +0.000234,74 +0.000293,74 +0.000363,74 +0.000233,74 +0.000233,74 +0.000239,74 +0.000348,74 +0.000234,74 +0.000234,74 +0.000302,74 +0.000282,74 +0.000234,74 +0.000234,74 +0.000338,74 +0.000243,74 +0.000233,74 +0.000260,74 +0.000344,74 +0.000234,74 +0.000233,74 +0.000238,74 +0.000346,74 +0.000233,74 +0.000233,74 +0.000299,74 +0.000465,74 +0.000260,74 +0.000274,74 +0.000246,74 +0.000246,74 +0.000287,74 +0.000351,74 +0.000233,74 +0.000233,74 +0.000233,74 +0.000460,74 +0.000435,74 +0.000513,74 +0.000318,74 +0.000234,74 +0.000354,74 +0.000234,74 +0.000233,74 +0.000299,74 +0.000326,74 +0.000233,74 +0.000233,74 +0.000316,74 +0.000256,74 +0.000233,74 +0.000234,74 +0.000351,74 +0.000234,74 +0.000233,74 +0.000234,74 +0.000376,74 +0.000233,74 +0.000253,74 +0.000364,74 +0.000276,74 +0.000234,74 +0.000234,74 +0.000362,74 +0.000234,74 +0.000233,74 +0.000238,74 +0.000346,74 +0.000233,74 +0.000233,74 +0.000313,74 +0.000270,74 +0.000233,74 +0.000269,74 +0.000347,74 +0.000233,74 +0.000260,76 +0.000270,76 +0.000352,76 +0.000252,76 +0.000251,76 +0.000368,76 +0.000251,76 +0.000286,76 +0.000487,76 +0.000252,76 +0.000315,76 +0.000396,76 +0.000262,76 +0.000251,76 +0.000269,76 +0.000351,76 +0.000251,76 +0.000251,76 +0.000444,76 +0.000423,76 +0.000509,76 +0.000443,76 +0.000575,76 +0.000445,76 +0.000520,76 +0.000373,76 +0.000252,76 +0.000372,76 +0.000251,76 +0.000251,76 +0.000279,76 +0.000341,76 +0.000251,76 +0.000312,76 +0.000423,76 +0.000252,76 +0.000251,76 +0.000366,76 +0.000252,76 +0.000251,76 +0.000256,76 +0.000356,76 +0.000252,76 +0.000251,76 +0.000361,76 +0.000251,76 +0.000251,76 +0.000316,76 +0.000334,76 +0.000252,76 +0.000251,76 +0.000362,76 +0.000252,76 +0.000251,76 +0.000268,76 +0.000343,76 +0.000252,76 +0.000251,76 +0.000360,76 +0.000346,76 +0.000320,76 +0.000341,76 +0.000279,76 +0.000296,76 +0.000336,76 +0.000273,76 +0.000251,76 +0.000251,76 +0.000470,76 +0.000439,76 +0.000464,76 +0.000459,76 +0.000586,76 +0.000261,76 +0.000258,76 +0.000345,76 +0.000258,76 +0.000258,76 +0.000283,76 +0.000318,76 +0.000258,76 +0.000258,76 +0.000258,76 +0.000258,76 +0.000258,76 +0.000295,76 +0.000420,76 +0.000291,76 +0.000251,76 +0.000284,76 +0.000251,76 +0.000251,76 +0.000276,76 +0.000405,76 +0.000251,76 +0.000251,76 +0.000251,76 +0.000251,76 +0.000251,76 +0.000287,76 +0.000432,78 +0.000271,78 +0.000271,78 +0.000406,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000420,78 +0.000271,78 +0.000313,78 +0.000500,78 +0.000325,78 +0.000278,78 +0.000298,78 +0.000308,78 +0.000271,78 +0.000427,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000382,78 +0.000539,78 +0.000500,78 +0.000324,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000400,78 +0.000311,78 +0.000305,78 +0.000360,78 +0.000283,78 +0.000292,78 +0.000281,78 +0.000313,78 +0.000316,78 +0.000280,78 +0.000294,78 +0.000292,78 +0.000295,78 +0.000284,78 +0.000282,78 +0.000271,78 +0.000320,78 +0.000271,78 +0.000347,78 +0.000315,78 +0.000271,78 +0.000271,78 +0.000308,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000306,78 +0.000271,78 +0.000271,78 +0.000341,78 +0.000384,78 +0.000271,78 +0.000291,78 +0.000291,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000391,78 +0.000474,78 +0.000490,78 +0.000437,78 +0.000272,78 +0.000271,78 +0.000271,78 +0.000282,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000309,78 +0.000272,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000271,78 +0.000310,78 +0.000271,78 +0.000315,78 +0.000293,80 +0.000310,80 +0.000290,80 +0.000290,80 +0.000323,80 +0.000290,80 +0.000291,80 +0.000290,80 +0.000291,80 +0.000290,80 +0.000290,80 +0.000291,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000330,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000474,80 +0.000291,80 +0.000310,80 +0.000311,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000328,80 +0.000290,80 +0.000290,80 +0.000450,80 +0.000537,80 +0.000440,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000332,80 +0.000291,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000330,80 +0.000290,80 +0.000313,80 +0.000290,80 +0.000314,80 +0.000290,80 +0.000290,80 +0.000291,80 +0.000291,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000301,80 +0.000333,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000310,80 +0.000454,80 +0.000291,80 +0.000448,80 +0.000310,80 +0.000335,80 +0.000291,80 +0.000290,80 +0.000291,80 +0.000291,80 +0.000337,80 +0.000592,80 +0.000518,80 +0.000362,80 +0.000290,80 +0.000290,80 +0.000290,80 +0.000317,80 +0.000291,80 +0.000290,80 +0.000290,80 +0.000291,80 +0.000291,80 +0.000290,80 +0.000324,82 +0.000313,82 +0.000313,82 +0.000473,82 +0.000313,82 +0.000366,82 +0.000313,82 +0.000352,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000469,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000353,82 +0.000464,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000472,82 +0.000333,82 +0.000323,82 +0.000526,82 +0.000313,82 +0.000312,82 +0.000312,82 +0.000476,82 +0.000555,82 +0.000576,82 +0.000616,82 +0.000313,82 +0.000356,82 +0.000313,82 +0.000386,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000393,82 +0.000392,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000343,82 +0.000332,82 +0.000336,82 +0.000313,82 +0.000503,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000352,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000468,82 +0.000313,82 +0.000313,82 +0.000424,82 +0.000313,82 +0.000314,82 +0.000421,82 +0.000461,82 +0.000313,82 +0.000332,82 +0.000354,82 +0.000313,82 +0.000313,82 +0.000313,82 +0.000484,82 +0.000571,82 +0.000426,82 +0.000313,82 +0.000353,82 +0.000476,82 +0.000312,82 +0.000367,82 +0.000362,82 +0.000312,82 +0.000312,82 +0.000312,82 +0.000312,82 +0.000353,82 +0.000410,82 +0.000312,82 +0.000348,82 +0.000314,82 +0.000352,82 +0.000454,82 +0.000326,82 +0.000377,84 +0.000335,84 +0.000336,84 +0.000340,84 +0.000470,84 +0.000336,84 +0.000376,84 +0.000335,84 +0.000336,84 +0.000492,84 +0.000336,84 +0.000336,84 +0.000336,84 +0.000336,84 +0.000359,84 +0.000449,84 +0.000375,84 +0.000438,84 +0.000415,84 +0.000430,84 +0.000406,84 +0.000336,84 +0.000335,84 +0.000336,84 +0.000343,84 +0.000608,84 +0.000601,84 +0.000591,84 +0.000681,84 +0.000572,84 +0.000592,84 +0.000335,84 +0.000335,84 +0.000335,84 +0.000389,84 +0.000549,84 +0.000385,84 +0.000390,84 +0.000335,84 +0.000375,84 +0.000360,84 +0.000399,84 +0.000399,84 +0.000348,84 +0.000383,84 +0.000377,84 +0.000349,84 +0.000488,84 +0.000384,84 +0.000335,84 +0.000442,84 +0.000337,84 +0.000336,84 +0.000336,84 +0.000336,84 +0.000451,84 +0.000413,84 +0.000463,84 +0.000488,84 +0.000388,84 +0.000385,84 +0.000336,84 +0.000335,84 +0.000624,84 +0.000716,84 +0.000602,84 +0.000619,84 +0.000336,84 +0.000479,84 +0.000336,84 +0.000336,84 +0.000335,84 +0.000336,84 +0.000445,84 +0.000424,84 +0.000336,84 +0.000446,84 +0.000336,84 +0.000373,84 +0.000336,84 +0.000356,84 +0.000335,84 +0.000372,84 +0.000336,84 +0.000522,84 +0.000336,84 +0.000341,84 +0.000438,84 +0.000336,84 +0.000444,84 +0.000336,84 +0.000336,84 +0.000336,84 +0.000335,84 +0.000375,84 +0.000489,84 +0.000336,84 +0.000335,84 +0.000359,84 +0.000494,84 +0.000477,86 +0.000420,86 +0.000358,86 +0.000358,86 +0.000406,86 +0.000458,86 +0.000697,86 +0.000648,86 +0.000407,86 +0.000369,86 +0.000358,86 +0.000499,86 +0.000358,86 +0.000526,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000395,86 +0.000379,86 +0.000358,86 +0.000434,86 +0.000358,86 +0.000358,86 +0.000489,86 +0.000388,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000387,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000532,86 +0.000368,86 +0.000378,86 +0.000379,86 +0.000393,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000472,86 +0.000666,86 +0.000555,86 +0.000358,86 +0.000358,86 +0.000391,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000393,86 +0.000407,86 +0.000358,86 +0.000392,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000384,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000401,86 +0.000502,86 +0.000358,86 +0.000434,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000610,86 +0.000596,86 +0.000358,86 +0.000444,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000358,86 +0.000393,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000452,88 +0.000402,88 +0.000382,88 +0.000416,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000381,88 +0.000412,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000434,88 +0.000480,88 +0.000382,88 +0.000421,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000426,88 +0.000730,88 +0.000542,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000417,88 +0.000382,88 +0.000416,88 +0.000382,88 +0.000402,88 +0.000382,88 +0.000415,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000431,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000381,88 +0.000382,88 +0.000382,88 +0.000381,88 +0.000382,88 +0.000456,88 +0.000544,88 +0.000403,88 +0.000414,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000381,88 +0.000442,88 +0.000729,88 +0.000707,88 +0.000537,88 +0.000382,88 +0.000382,88 +0.000381,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000628,88 +0.000746,88 +0.000518,88 +0.000409,88 +0.000569,88 +0.000488,88 +0.000509,88 +0.000535,88 +0.000407,88 +0.000392,88 +0.000466,88 +0.000425,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000382,88 +0.000458,90 +0.000408,90 +0.000408,90 +0.000590,90 +0.000408,90 +0.000488,90 +0.000408,90 +0.000428,90 +0.000408,90 +0.000447,90 +0.000408,90 +0.000447,90 +0.000510,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000450,90 +0.000408,90 +0.000409,90 +0.000408,90 +0.000408,90 +0.000448,90 +0.000428,90 +0.000408,90 +0.000444,90 +0.000446,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000446,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000582,90 +0.000417,90 +0.000428,90 +0.000428,90 +0.000408,90 +0.000440,90 +0.000408,90 +0.000408,90 +0.000438,90 +0.000569,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000444,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000442,90 +0.000418,90 +0.000420,90 +0.000475,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000446,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000534,90 +0.000467,90 +0.000427,90 +0.000429,90 +0.000440,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000418,90 +0.000500,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000441,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000408,90 +0.000445,92 +0.000435,92 +0.000466,92 +0.000452,92 +0.000476,92 +0.000467,92 +0.000435,92 +0.000435,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000470,92 +0.000444,92 +0.000435,92 +0.000434,92 +0.000435,92 +0.000463,92 +0.000532,92 +0.000593,92 +0.000465,92 +0.000486,92 +0.000435,92 +0.000435,92 +0.000435,92 +0.000435,92 +0.000484,92 +0.000526,92 +0.000434,92 +0.000434,92 +0.000457,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000435,92 +0.000435,92 +0.000434,92 +0.000537,92 +0.000475,92 +0.000434,92 +0.000503,92 +0.000435,92 +0.000435,92 +0.000434,92 +0.000434,92 +0.000465,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000579,92 +0.000434,92 +0.000474,92 +0.000434,92 +0.000435,92 +0.000434,92 +0.000434,92 +0.000435,92 +0.000537,92 +0.000470,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000454,92 +0.000434,92 +0.000470,92 +0.000434,92 +0.000468,92 +0.000478,92 +0.000435,92 +0.000466,92 +0.000434,92 +0.000454,92 +0.000434,92 +0.000473,92 +0.000446,92 +0.000451,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000482,92 +0.000619,92 +0.000445,92 +0.000463,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000434,92 +0.000484,94 +0.000565,94 +0.000493,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000507,94 +0.000740,94 +0.000755,94 +0.000503,94 +0.000684,94 +0.000541,94 +0.000739,94 +0.000463,94 +0.000472,94 +0.000596,94 +0.000465,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000496,94 +0.000463,94 +0.000580,94 +0.000588,94 +0.000511,94 +0.000507,94 +0.000462,94 +0.000482,94 +0.000495,94 +0.000502,94 +0.000566,94 +0.000463,94 +0.000478,94 +0.000475,94 +0.000477,94 +0.000462,94 +0.000487,94 +0.000463,94 +0.000462,94 +0.000462,94 +0.000463,94 +0.000530,94 +0.000508,94 +0.000463,94 +0.000538,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000463,94 +0.000496,94 +0.000475,94 +0.000478,94 +0.000526,94 +0.000581,94 +0.000483,94 +0.000487,94 +0.000462,94 +0.000494,94 +0.000463,94 +0.000463,94 +0.000565,94 +0.000606,94 +0.000495,94 +0.000463,94 +0.000563,94 +0.000500,94 +0.000657,94 +0.000624,94 +0.000506,94 +0.000488,94 +0.000515,94 +0.000580,94 +0.000657,94 +0.000534,94 +0.000529,94 +0.000533,94 +0.000540,94 +0.000562,94 +0.000494,94 +0.000537,94 +0.000565,94 +0.000878,94 +0.000931,94 +0.000894,94 +0.000959,94 +0.000763,94 +0.000537,94 +0.000584,94 +0.000978,94 +0.001019,94 +0.001073,94 +0.000778,94 +0.000477,94 +0.000535,96 +0.000582,96 +0.000641,96 +0.000605,96 +0.000597,96 +0.000584,96 +0.000516,96 +0.000534,96 +0.000892,96 +0.000842,96 +0.000522,96 +0.000502,96 +0.000502,96 +0.000609,96 +0.000636,96 +0.000555,96 +0.000502,96 +0.000502,96 +0.000502,96 +0.000502,96 +0.000514,96 +0.000489,96 +0.000504,96 +0.000564,96 +0.000502,96 +0.000707,96 +0.000916,96 +0.000739,96 +0.000601,96 +0.000697,96 +0.000612,96 +0.000552,96 +0.000490,96 +0.000489,96 +0.000489,96 +0.000489,96 +0.000530,96 +0.000490,96 +0.000490,96 +0.000490,96 +0.000490,96 +0.000490,96 +0.000489,96 +0.000560,96 +0.000598,96 +0.000510,96 +0.000529,96 +0.000489,96 +0.000490,96 +0.000490,96 +0.000498,96 +0.000504,96 +0.000568,96 +0.000502,96 +0.000509,96 +0.000977,96 +0.000834,96 +0.000513,96 +0.000615,96 +0.000572,96 +0.000549,96 +0.000577,96 +0.000508,96 +0.000490,96 +0.000490,96 +0.000527,96 +0.000489,96 +0.000498,96 +0.000502,96 +0.000510,96 +0.000490,96 +0.000489,96 +0.000490,96 +0.000549,96 +0.000661,96 +0.000490,96 +0.000534,96 +0.000490,96 +0.000490,96 +0.000490,96 +0.000498,96 +0.000546,96 +0.000549,96 +0.000550,96 +0.000503,96 +0.000772,96 +0.000877,96 +0.000647,96 +0.000529,96 +0.001050,96 +0.000608,96 +0.000727,96 +0.000565,96 +0.000638,96 +0.000607,96 +0.000500,96 +0.000668,96 +0.000520,96 +0.000490,96 +0.000490,96 +0.000576,98 +0.000523,98 +0.000704,98 +0.000562,98 +0.000563,98 +0.000523,98 +0.000523,98 +0.000564,98 +0.000581,98 +0.000601,98 +0.000634,98 +0.000532,98 +0.000543,98 +0.000626,98 +0.000597,98 +0.000598,98 +0.000631,98 +0.000684,98 +0.000586,98 +0.000643,98 +0.000603,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000555,98 +0.000523,98 +0.000523,98 +0.000663,98 +0.000564,98 +0.000582,98 +0.000538,98 +0.000563,98 +0.000523,98 +0.000563,98 +0.000601,98 +0.000588,98 +0.000581,98 +0.000543,98 +0.000586,98 +0.000556,98 +0.000582,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000725,98 +0.000686,98 +0.000551,98 +0.000551,98 +0.000562,98 +0.000550,98 +0.000536,98 +0.000536,98 +0.000567,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000533,98 +0.000722,98 +0.000543,98 +0.000594,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000562,98 +0.000543,98 +0.000605,98 +0.000593,98 +0.000553,98 +0.000562,98 +0.000701,98 +0.000523,98 +0.000763,98 +0.000631,98 +0.000759,98 +0.000582,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000565,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000523,98 +0.000702,98 +0.000568,98 +0.000563,98 +0.000523,98 +0.000523,98 +0.000552,98 +0.000552,98 +0.000722,98 +0.000579,98 +0.000602,98 +0.000600,100 +0.000567,100 +0.000610,100 +0.000552,100 +0.000695,100 +0.000765,100 +0.000756,100 +0.000605,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000591,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000663,100 +0.000571,100 +0.000591,100 +0.000552,100 +0.000552,100 +0.000592,100 +0.000620,100 +0.000613,100 +0.000572,100 +0.000716,100 +0.000567,100 +0.000675,100 +0.000552,100 +0.000552,100 +0.000766,100 +0.000738,100 +0.000699,100 +0.000611,100 +0.000552,100 +0.000552,100 +0.000598,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000643,100 +0.000704,100 +0.000612,100 +0.000552,100 +0.000552,100 +0.000552,100 +0.000591,100 +0.000704,100 +0.000632,100 +0.000552,100 +0.000711,100 +0.000567,100 +0.000650,100 +0.000635,100 +0.000670,100 +0.001211,100 +0.000648,100 +0.000753,100 +0.000768,100 +0.000696,100 +0.000578,100 +0.000625,100 +0.000567,100 +0.000567,100 +0.000603,100 +0.000567,100 +0.000627,100 +0.000567,100 +0.000593,100 +0.000567,100 +0.000567,100 +0.000594,100 +0.000573,100 +0.000749,100 +0.000572,100 +0.000587,100 +0.000678,100 +0.000579,100 +0.000580,100 +0.000552,100 +0.000642,100 +0.000743,100 +0.000706,100 +0.000611,100 +0.000592,100 +0.000553,100 +0.000552,100 +0.000552,100 +0.000553,100 +0.000552,100 +0.000553,100 +0.000595,100 +0.000553,100 +0.000553,100 +0.000752,100 +0.000619,102 +0.000624,102 +0.000599,102 +0.000604,102 +0.000623,102 +0.000663,102 +0.000725,102 +0.000620,102 +0.000668,102 +0.000805,102 +0.000604,102 +0.000584,102 +0.000627,102 +0.000769,102 +0.000735,102 +0.000616,102 +0.000610,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000622,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000741,102 +0.000642,102 +0.000647,102 +0.000604,102 +0.000584,102 +0.000623,102 +0.000662,102 +0.000776,102 +0.000644,102 +0.000625,102 +0.000584,102 +0.000585,102 +0.000584,102 +0.000584,102 +0.000739,102 +0.000766,102 +0.000677,102 +0.000624,102 +0.000585,102 +0.000584,102 +0.000584,102 +0.000620,102 +0.000585,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000606,102 +0.000776,102 +0.000668,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000624,102 +0.000783,102 +0.000739,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000660,102 +0.000688,102 +0.000643,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000618,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000584,102 +0.000674,102 +0.000626,102 +0.000731,102 +0.000665,102 +0.000584,102 +0.000623,102 +0.000663,102 +0.000700,102 +0.000696,102 +0.000584,102 +0.000584,102 +0.000585,102 +0.000595,102 +0.000630,102 +0.000584,102 +0.000623,102 +0.000604,102 +0.000623,102 +0.000585,102 +0.000584,102 +0.000627,102 +0.000584,102 +0.000631,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000663,104 +0.000839,104 +0.000650,104 +0.000641,104 +0.000617,104 +0.000617,104 +0.000691,104 +0.000753,104 +0.000980,104 +0.000890,104 +0.000617,104 +0.000650,104 +0.000626,104 +0.000617,104 +0.001098,104 +0.000670,104 +0.000933,104 +0.000782,104 +0.000709,104 +0.000728,104 +0.000733,104 +0.000617,104 +0.000644,104 +0.000617,104 +0.000784,104 +0.000660,104 +0.000646,104 +0.000617,104 +0.000648,104 +0.000784,104 +0.000789,104 +0.000865,104 +0.000654,104 +0.000633,104 +0.000655,104 +0.000617,104 +0.000618,104 +0.000638,104 +0.000656,104 +0.000617,104 +0.000698,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000653,104 +0.000617,104 +0.000617,104 +0.000808,104 +0.000636,104 +0.000657,104 +0.000654,104 +0.000617,104 +0.000794,104 +0.000804,104 +0.000651,104 +0.000640,104 +0.000643,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000656,104 +0.000681,104 +0.000656,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000642,104 +0.000617,104 +0.000617,104 +0.000680,104 +0.000785,104 +0.000661,104 +0.000648,104 +0.000617,104 +0.000656,104 +0.000754,104 +0.000617,104 +0.000617,104 +0.000644,104 +0.000617,104 +0.000633,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000685,104 +0.000637,104 +0.000656,104 +0.000617,104 +0.000617,104 +0.000617,104 +0.000630,104 +0.000679,106 +0.000652,106 +0.000652,106 +0.000651,106 +0.000836,106 +0.000702,106 +0.000674,106 +0.000691,106 +0.000803,106 +0.000652,106 +0.000652,106 +0.000696,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000681,106 +0.000691,106 +0.000671,106 +0.000690,106 +0.000651,106 +0.000653,106 +0.000679,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000744,106 +0.000651,106 +0.000652,106 +0.000651,106 +0.000652,106 +0.000652,106 +0.000656,106 +0.000654,106 +0.000652,106 +0.000651,106 +0.000652,106 +0.000652,106 +0.000654,106 +0.000652,106 +0.000691,106 +0.000652,106 +0.000691,106 +0.000651,106 +0.000656,106 +0.000652,106 +0.000651,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000654,106 +0.000711,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000656,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000656,106 +0.000654,106 +0.000652,106 +0.000652,106 +0.001086,106 +0.000704,106 +0.000987,106 +0.000778,106 +0.000766,106 +0.000692,106 +0.000831,106 +0.000699,106 +0.000692,106 +0.000752,106 +0.000652,106 +0.000651,106 +0.000652,106 +0.000652,106 +0.000685,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000652,106 +0.000690,106 +0.000652,106 +0.000652,106 +0.000651,106 +0.000691,106 +0.000652,106 +0.000696,106 +0.000652,106 +0.000652,106 +0.000651,106 +0.000652,106 +0.000652,106 +0.000730,108 +0.000690,108 +0.000752,108 +0.000689,108 +0.000689,108 +0.000726,108 +0.000690,108 +0.000689,108 +0.000690,108 +0.000690,108 +0.000769,108 +0.000729,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000728,108 +0.000711,108 +0.000728,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000694,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000753,108 +0.000709,108 +0.000715,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000696,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000700,108 +0.000721,108 +0.000728,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000694,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000752,108 +0.000692,108 +0.000690,108 +0.000690,108 +0.000689,108 +0.000690,108 +0.000689,108 +0.000694,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000690,108 +0.000689,108 +0.000731,108 +0.000690,108 +0.000729,108 +0.000690,108 +0.000690,108 +0.000694,108 +0.000689,108 +0.000689,108 +0.000690,108 +0.000689,108 +0.000690,108 +0.000711,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000693,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000691,108 +0.000721,108 +0.000698,108 +0.000728,108 +0.000689,108 +0.000694,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000689,108 +0.000691,108 +0.000689,108 +0.000689,108 +0.000739,110 +0.000726,110 +0.000726,110 +0.000731,110 +0.000726,110 +0.000785,110 +0.000726,110 +0.000726,110 +0.000729,110 +0.000727,110 +0.000726,110 +0.000765,110 +0.000726,110 +0.000767,110 +0.000882,110 +0.000767,110 +0.000752,110 +0.000763,110 +0.000796,110 +0.000783,110 +0.000819,110 +0.000881,110 +0.000726,110 +0.000726,110 +0.000764,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000761,110 +0.000780,110 +0.000726,110 +0.000748,110 +0.000757,110 +0.000757,110 +0.000772,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000764,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000772,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000729,110 +0.000788,110 +0.000890,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000769,110 +0.000754,110 +0.000767,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000749,110 +0.000726,110 +0.000728,110 +0.000737,110 +0.000922,110 +0.000800,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000749,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000766,110 +0.000746,110 +0.000765,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000763,110 +0.000729,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000765,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000749,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000726,110 +0.000751,110 +0.000817,112 +0.000763,112 +0.000803,112 +0.000764,112 +0.000766,112 +0.000763,112 +0.000764,112 +0.000763,112 +0.000763,112 +0.000809,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000765,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000768,112 +0.000763,112 +0.000802,112 +0.000802,112 +0.000763,112 +0.000766,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000767,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000767,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000767,112 +0.000763,112 +0.000802,112 +0.000763,112 +0.000895,112 +0.000818,112 +0.000801,112 +0.000821,112 +0.000797,112 +0.000868,112 +0.000816,112 +0.000763,112 +0.000783,112 +0.000763,112 +0.000763,112 +0.000786,112 +0.000764,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000788,112 +0.000764,112 +0.000763,112 +0.000802,112 +0.000763,112 +0.000825,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000857,112 +0.000764,112 +0.000764,112 +0.000763,112 +0.000763,112 +0.000788,112 +0.000764,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000801,112 +0.000822,112 +0.000946,112 +0.000824,112 +0.000814,112 +0.000841,112 +0.000804,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000800,112 +0.000763,112 +0.000763,112 +0.000837,112 +0.000916,112 +0.000820,112 +0.000763,112 +0.000763,112 +0.000763,112 +0.000827,114 +0.000849,114 +0.000812,114 +0.000811,114 +0.000812,114 +0.000811,114 +0.000885,114 +0.000831,114 +0.000851,114 +0.000812,114 +0.000812,114 +0.000850,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000836,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000847,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000874,114 +0.000811,114 +0.000851,114 +0.000812,114 +0.000839,114 +0.000811,114 +0.000812,114 +0.000811,114 +0.000811,114 +0.000834,114 +0.000812,114 +0.000811,114 +0.000811,114 +0.000862,114 +0.000836,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000812,114 +0.000839,114 +0.000812,114 +0.000851,114 +0.000851,114 +0.000812,114 +0.000837,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000839,114 +0.000812,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000816,114 +0.000812,114 +0.000812,114 +0.000811,114 +0.000864,114 +0.000812,114 +0.000812,114 +0.000850,114 +0.000812,114 +0.000858,114 +0.000978,114 +0.000837,114 +0.000856,114 +0.000860,114 +0.000867,114 +0.000872,114 +0.000832,114 +0.000812,114 +0.000812,114 +0.000847,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000835,114 +0.000811,114 +0.000812,114 +0.000811,114 +0.000851,114 +0.000876,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000845,114 +0.000814,114 +0.000811,114 +0.000811,114 +0.000811,114 +0.000816,114 +0.000811,114 +0.000870,116 +0.000850,116 +0.000850,116 +0.000932,116 +0.000851,116 +0.000850,116 +0.000850,116 +0.000925,116 +0.000890,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000852,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000854,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000931,116 +0.000851,116 +0.000851,116 +0.000850,116 +0.000850,116 +0.000920,116 +0.000850,116 +0.000889,116 +0.000850,116 +0.000850,116 +0.000873,116 +0.000851,116 +0.000850,116 +0.000851,116 +0.000855,116 +0.000851,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000853,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000855,116 +0.000890,116 +0.000889,116 +0.000850,116 +0.000852,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000854,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000852,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000855,116 +0.000850,116 +0.000890,116 +0.000850,116 +0.000889,116 +0.000853,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000856,116 +0.000851,116 +0.000850,116 +0.000865,116 +0.000855,116 +0.000851,116 +0.000850,116 +0.000851,116 +0.000850,116 +0.000857,116 +0.000850,116 +0.000870,116 +0.000875,116 +0.000889,116 +0.000852,116 +0.000897,116 +0.000883,116 +0.000907,116 +0.000925,116 +0.000870,116 +0.000907,116 +0.000859,116 +0.000850,116 +0.000873,116 +0.000850,116 +0.000850,116 +0.000850,116 +0.000932,118 +0.000889,118 +0.000890,118 +0.000928,118 +0.000889,118 +0.000951,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000925,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000891,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000919,118 +0.000971,118 +0.000889,118 +0.000889,118 +0.000950,118 +0.000928,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000894,118 +0.000889,118 +0.000890,118 +0.000889,118 +0.000891,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000894,118 +0.000889,118 +0.000890,118 +0.000889,118 +0.000951,118 +0.000889,118 +0.000929,118 +0.000889,118 +0.000889,118 +0.000893,118 +0.000889,118 +0.000913,118 +0.000889,118 +0.000897,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000897,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000895,118 +0.000928,118 +0.000889,118 +0.000928,118 +0.000895,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000895,118 +0.000889,118 +0.000889,118 +0.000906,118 +0.000898,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000900,118 +0.000889,118 +0.000928,118 +0.000928,118 +0.000891,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000893,118 +0.000889,118 +0.000888,118 +0.000889,118 +0.000891,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000889,118 +0.000894,118 +0.000889,118 +0.000933,118 +0.000889,118 +0.000930,118 +0.000889,118 +0.000995,120 +0.000992,120 +0.001008,120 +0.000973,120 +0.000965,120 +0.001004,120 +0.000957,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000964,120 +0.000935,120 +0.000937,120 +0.000974,120 +0.001011,120 +0.000935,120 +0.000937,120 +0.000935,120 +0.000958,120 +0.000935,120 +0.000936,120 +0.000935,120 +0.000940,120 +0.000936,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000973,120 +0.001014,120 +0.000936,120 +0.000975,120 +0.000969,120 +0.000974,120 +0.000936,120 +0.000935,120 +0.000969,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000940,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000958,120 +0.000935,120 +0.000935,120 +0.000965,120 +0.000935,120 +0.001004,120 +0.000975,120 +0.000935,120 +0.000935,120 +0.000997,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000941,120 +0.000935,120 +0.000937,120 +0.000935,120 +0.000937,120 +0.000935,120 +0.000937,120 +0.000935,120 +0.000935,120 +0.000937,120 +0.000974,120 +0.000974,120 +0.000935,120 +0.000940,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000937,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000940,120 +0.000935,120 +0.000935,120 +0.000935,120 +0.000934,120 +0.000937,120 +0.000974,120 +0.000935,120 +0.000974,120 +0.000940,120 +0.000935,120 +0.000961,120 +0.000936,120 +0.000941,120 +0.000938,120 +0.000935,120 +0.000938,120 +0.000941,120 +0.000936,120 +0.000936,120 +0.000995,120 +0.000941,120 +0.001005,122 +0.000983,122 +0.001022,122 +0.001049,122 +0.000983,122 +0.000983,122 +0.001040,122 +0.001136,122 +0.001051,122 +0.001031,122 +0.001070,122 +0.001012,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.001006,122 +0.000983,122 +0.000984,122 +0.001022,122 +0.001019,122 +0.001012,122 +0.000983,122 +0.000983,122 +0.001006,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000988,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.001006,122 +0.001090,122 +0.001003,122 +0.000983,122 +0.001051,122 +0.001022,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000988,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.001027,122 +0.001022,122 +0.000983,122 +0.000987,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000987,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.001022,122 +0.001022,122 +0.000988,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000990,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.001009,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000986,122 +0.001022,122 +0.000983,122 +0.001022,122 +0.000989,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.000985,122 +0.000983,122 +0.000983,122 +0.000983,122 +0.001059,124 +0.001033,124 +0.001073,124 +0.001073,124 +0.001036,124 +0.001033,124 +0.001033,124 +0.001158,124 +0.001078,124 +0.001099,124 +0.001071,124 +0.001124,124 +0.001057,124 +0.001033,124 +0.001033,124 +0.001057,124 +0.001034,124 +0.001034,124 +0.001072,124 +0.001098,124 +0.001034,124 +0.001034,124 +0.001057,124 +0.001034,124 +0.001034,124 +0.001034,124 +0.001038,124 +0.001034,124 +0.001034,124 +0.001034,124 +0.001068,124 +0.001092,124 +0.001033,124 +0.001033,124 +0.001109,124 +0.001073,124 +0.001033,124 +0.001033,124 +0.001036,124 +0.001033,124 +0.001033,124 +0.001033,124 +0.001038,124 +0.001033,124 +0.001033,124 +0.001036,124 +0.001034,124 +0.001033,124 +0.001033,124 +0.001038,124 +0.001072,124 +0.001072,124 +0.001034,124 +0.001036,124 +0.001034,124 +0.001034,124 +0.001034,124 +0.001038,124 +0.001034,124 +0.001034,124 +0.001034,124 +0.001036,124 +0.001033,124 +0.001034,124 +0.001034,124 +0.001038,124 +0.001073,124 +0.001073,124 +0.001036,124 +0.001034,124 +0.001034,124 +0.001034,124 +0.001061,124 +0.001033,124 +0.001033,124 +0.001033,124 +0.001036,124 +0.001033,124 +0.001033,124 +0.001033,124 +0.001059,124 +0.001033,124 +0.001073,124 +0.001072,124 +0.001067,124 +0.001033,124 +0.001033,124 +0.001033,124 +0.001038,124 +0.001033,124 +0.001033,124 +0.001036,124 +0.001033,124 +0.001033,124 +0.001033,124 +0.001038,124 +0.001033,124 +0.001033,124 +0.001073,124 +0.001075,124 +0.001105,126 +0.001084,126 +0.001175,126 +0.001258,126 +0.001130,126 +0.001150,126 +0.001208,126 +0.001215,126 +0.001107,126 +0.001083,126 +0.001121,126 +0.001168,126 +0.001122,126 +0.001185,126 +0.001123,126 +0.001111,126 +0.001149,126 +0.001120,126 +0.001168,126 +0.001139,126 +0.001147,126 +0.001169,126 +0.001084,126 +0.001149,126 +0.001201,126 +0.001249,126 +0.001189,126 +0.001217,126 +0.001123,126 +0.001168,126 +0.001228,126 +0.001204,126 +0.001151,126 +0.001149,126 +0.001206,126 +0.001173,126 +0.001381,126 +0.001185,126 +0.001208,126 +0.001172,126 +0.001250,126 +0.001249,126 +0.001187,126 +0.001148,126 +0.001207,126 +0.001239,126 +0.001200,126 +0.001223,126 +0.001148,126 +0.001199,126 +0.001234,126 +0.001242,126 +0.001171,126 +0.001173,126 +0.001230,126 +0.001272,126 +0.001191,126 +0.001209,126 +0.001169,126 +0.001210,126 +0.001245,126 +0.001253,126 +0.001148,126 +0.001197,126 +0.001235,126 +0.001149,126 +0.001150,126 +0.001207,126 +0.001209,126 +0.001245,126 +0.001266,126 +0.001189,126 +0.001210,126 +0.001300,126 +0.001375,126 +0.001252,126 +0.001221,126 +0.001355,126 +0.001453,126 +0.001288,126 +0.001281,126 +0.001253,126 +0.001228,126 +0.001283,126 +0.001296,126 +0.001215,126 +0.001245,126 +0.001442,126 +0.001202,126 +0.001205,126 +0.001170,126 +0.001228,126 +0.001194,126 +0.001167,126 +0.001169,126 +0.001238,126 +0.001135,126 +0.001112,126 +0.001131,126 +0.001218,126 +0.001382,128 +0.001331,128 +0.001270,128 +0.001313,128 +0.001256,128 +0.001326,128 +0.001293,128 +0.001140,128 +0.001395,128 +0.001199,128 +0.001249,128 +0.001276,128 +0.001238,128 +0.001316,128 +0.001350,128 +0.001339,128 +0.001203,128 +0.001262,128 +0.001302,128 +0.001210,128 +0.001162,128 +0.001297,128 +0.001271,128 +0.001223,128 +0.001257,128 +0.001159,128 +0.001138,128 +0.001228,128 +0.001189,128 +0.001330,128 +0.001185,128 +0.001196,128 +0.001140,128 +0.001139,128 +0.001293,128 +0.001178,128 +0.001178,128 +0.001178,128 +0.001139,128 +0.001138,128 +0.001139,128 +0.001262,128 +0.001179,128 +0.001139,128 +0.001172,128 +0.001140,128 +0.001139,128 +0.001139,128 +0.001178,128 +0.001179,128 +0.001158,128 +0.001211,128 +0.001139,128 +0.001139,128 +0.001139,128 +0.001175,128 +0.001139,128 +0.001140,128 +0.001161,128 +0.001139,128 +0.001139,128 +0.001138,128 +0.001183,128 +0.001139,128 +0.001178,128 +0.001173,128 +0.001139,128 +0.001240,128 +0.001419,128 +0.001814,128 +0.001751,128 +0.001291,128 +0.001630,128 +0.001826,128 +0.001257,128 +0.001138,128 +0.001217,128 +0.001177,128 +0.001138,128 +0.001137,128 +0.001177,128 +0.001278,128 +0.001591,128 +0.001900,128 +0.001170,128 +0.001295,128 +0.001161,128 +0.001207,128 +0.001140,128 +0.001270,128 +0.001356,128 +0.001140,128 +0.001186,128 +0.001140,128 +0.001188,128 +0.001189,128 +0.001161,128 +0.001139,128 +0.001160,128 +0.001239,128 +0.001271,130 +0.001282,130 +0.001341,130 +0.001218,130 +0.001237,130 +0.001244,130 +0.001288,130 +0.001208,130 +0.001301,130 +0.001274,130 +0.001237,130 +0.001239,130 +0.001224,130 +0.001258,130 +0.001198,130 +0.001244,130 +0.001263,130 +0.001237,130 +0.001243,130 +0.001323,130 +0.001227,130 +0.001264,130 +0.001210,130 +0.001232,130 +0.001414,130 +0.001217,130 +0.001218,130 +0.001241,130 +0.001198,130 +0.001239,130 +0.001235,130 +0.001243,130 +0.001323,130 +0.001197,130 +0.001231,130 +0.001198,130 +0.001264,130 +0.001457,130 +0.001198,130 +0.001198,130 +0.001387,130 +0.001198,130 +0.001232,130 +0.001277,130 +0.001321,130 +0.001276,130 +0.001322,130 +0.001198,130 +0.001198,130 +0.001263,130 +0.001405,130 +0.001230,130 +0.001230,130 +0.001298,130 +0.001347,130 +0.001305,130 +0.001444,130 +0.001218,130 +0.001217,130 +0.001365,130 +0.001294,130 +0.001370,130 +0.001236,130 +0.001350,130 +0.001473,130 +0.001258,130 +0.001375,130 +0.001332,130 +0.001422,130 +0.001261,130 +0.001310,130 +0.001338,130 +0.001298,130 +0.001352,130 +0.001393,130 +0.001251,130 +0.001344,130 +0.001407,130 +0.001295,130 +0.001275,130 +0.001400,130 +0.001198,130 +0.001439,130 +0.001305,130 +0.001198,130 +0.001288,130 +0.001342,130 +0.001197,130 +0.001290,130 +0.001473,130 +0.001198,130 +0.001307,130 +0.001305,130 +0.001238,130 +0.001395,130 +0.001226,130 +0.001198,130 +0.001313,130 +0.001309,130 +0.001307,130 +0.001281,132 +0.001541,132 +0.001270,132 +0.001248,132 +0.001384,132 +0.001249,132 +0.001442,132 +0.001331,132 +0.001250,132 +0.001361,132 +0.001277,132 +0.001374,132 +0.001268,132 +0.001442,132 +0.001249,132 +0.001249,132 +0.001248,132 +0.001292,132 +0.001249,132 +0.001328,132 +0.001322,132 +0.001249,132 +0.001248,132 +0.001282,132 +0.001376,132 +0.001268,132 +0.001433,132 +0.001352,132 +0.001316,132 +0.001407,132 +0.001313,132 +0.001351,132 +0.001462,132 +0.001270,132 +0.001269,132 +0.001285,132 +0.001357,132 +0.001288,132 +0.001282,132 +0.001390,132 +0.001249,132 +0.001288,132 +0.001248,132 +0.001332,132 +0.001302,132 +0.001329,132 +0.001249,132 +0.001287,132 +0.001249,132 +0.001353,132 +0.001323,132 +0.001249,132 +0.001250,132 +0.001285,132 +0.001249,132 +0.001249,132 +0.001282,132 +0.001268,132 +0.001332,132 +0.001249,132 +0.001284,132 +0.001248,132 +0.001249,132 +0.001282,132 +0.001249,132 +0.001250,132 +0.001276,132 +0.001249,132 +0.001249,132 +0.001272,132 +0.001268,132 +0.001288,132 +0.001274,132 +0.001249,132 +0.001249,132 +0.001271,132 +0.001249,132 +0.001248,132 +0.001249,132 +0.001254,132 +0.001248,132 +0.001249,132 +0.001272,132 +0.001249,132 +0.001268,132 +0.001338,132 +0.001249,132 +0.001248,132 +0.001272,132 +0.001249,132 +0.001249,132 +0.001254,132 +0.001249,132 +0.001249,132 +0.001251,132 +0.001249,132 +0.001249,132 +0.001268,132 +0.001313,132 +0.001249,132 +0.001338,134 +0.001311,134 +0.001308,134 +0.001308,134 +0.001524,134 +0.001376,134 +0.001356,134 +0.001469,134 +0.001308,134 +0.001395,134 +0.001349,134 +0.001330,134 +0.001510,134 +0.001382,134 +0.001308,134 +0.001352,134 +0.001347,134 +0.001410,134 +0.001334,134 +0.001391,134 +0.001308,134 +0.001364,134 +0.001347,134 +0.001308,134 +0.001433,134 +0.001308,134 +0.001411,134 +0.001380,134 +0.001308,134 +0.001411,134 +0.001345,134 +0.001361,134 +0.001307,134 +0.001344,134 +0.001372,134 +0.001346,134 +0.001334,134 +0.001307,134 +0.001413,134 +0.001371,134 +0.001308,134 +0.001404,134 +0.001348,134 +0.001328,134 +0.001308,134 +0.001344,134 +0.001359,134 +0.001355,134 +0.001334,134 +0.001307,134 +0.001307,134 +0.001416,134 +0.001328,134 +0.001409,134 +0.001343,134 +0.001365,134 +0.001308,134 +0.001346,134 +0.001327,134 +0.001388,134 +0.001335,134 +0.001308,134 +0.001308,134 +0.001449,134 +0.001348,134 +0.001340,134 +0.001449,134 +0.001307,134 +0.001322,134 +0.001437,134 +0.001322,134 +0.001406,134 +0.001347,134 +0.001307,134 +0.001464,134 +0.001407,134 +0.001348,134 +0.001368,134 +0.001487,134 +0.001438,134 +0.001416,134 +0.001460,134 +0.001642,134 +0.001396,134 +0.001350,134 +0.001414,134 +0.001494,134 +0.001531,134 +0.001366,134 +0.001430,134 +0.001381,134 +0.001490,134 +0.001450,134 +0.001369,134 +0.001503,134 +0.001601,134 +0.001517,134 +0.001411,134 +0.001652,134 +0.001479,134 +0.001538,136 +0.001451,136 +0.001496,136 +0.001529,136 +0.001574,136 +0.001464,136 +0.001494,136 +0.001499,136 +0.001571,136 +0.001559,136 +0.001518,136 +0.001445,136 +0.001431,136 +0.001540,136 +0.001456,136 +0.001468,136 +0.001405,136 +0.001430,136 +0.001429,136 +0.001392,136 +0.001369,136 +0.001417,136 +0.001369,136 +0.001514,136 +0.001561,136 +0.001406,136 +0.001490,136 +0.001528,136 +0.001512,136 +0.001735,136 +0.001451,136 +0.001446,136 +0.001588,136 +0.001405,136 +0.001478,136 +0.001445,136 +0.001426,136 +0.001501,136 +0.001555,136 +0.001631,136 +0.001559,136 +0.001444,136 +0.001439,136 +0.001472,136 +0.001405,136 +0.002002,136 +0.001684,136 +0.001495,136 +0.001602,136 +0.001464,136 +0.001550,136 +0.001497,136 +0.001465,136 +0.001462,136 +0.001777,136 +0.002520,136 +0.002108,136 +0.001403,136 +0.001556,136 +0.001532,136 +0.001485,136 +0.001530,136 +0.001473,136 +0.001464,136 +0.001452,136 +0.001369,136 +0.002016,136 +0.001433,136 +0.001533,136 +0.001503,136 +0.001523,136 +0.001506,136 +0.001492,136 +0.001368,136 +0.001444,136 +0.001471,136 +0.001368,136 +0.001980,136 +0.001405,136 +0.001533,136 +0.001496,136 +0.001527,136 +0.001513,136 +0.001481,136 +0.001369,136 +0.001475,136 +0.001472,136 +0.001369,136 +0.002042,136 +0.001405,136 +0.001531,136 +0.001522,136 +0.001476,136 +0.001575,136 +0.001431,136 +0.001369,136 +0.001482,136 +0.001431,136 +0.001368,136 +0.002021,136 +0.001514,138 +0.001650,138 +0.001551,138 +0.001637,138 +0.001606,138 +0.001429,138 +0.001473,138 +0.001531,138 +0.001468,138 +0.001802,138 +0.001543,138 +0.001567,138 +0.001600,138 +0.001570,138 +0.001761,138 +0.001498,138 +0.001508,138 +0.001505,138 +0.001777,138 +0.002262,138 +0.001464,138 +0.001616,138 +0.001670,138 +0.001590,138 +0.001705,138 +0.001457,138 +0.001458,138 +0.001426,138 +0.001721,138 +0.001468,138 +0.001848,138 +0.001652,138 +0.001651,138 +0.001635,138 +0.001545,138 +0.001519,138 +0.001486,138 +0.001428,138 +0.001640,138 +0.001514,138 +0.001677,138 +0.001697,138 +0.001626,138 +0.001468,138 +0.001502,138 +0.001592,138 +0.001525,138 +0.001428,138 +0.001428,138 +0.001586,138 +0.001448,138 +0.001775,138 +0.001582,138 +0.001572,138 +0.001489,138 +0.001526,138 +0.001542,138 +0.001500,138 +0.001429,138 +0.001462,138 +0.001708,138 +0.001428,138 +0.001802,138 +0.001744,138 +0.001468,138 +0.001454,138 +0.001551,138 +0.001566,138 +0.001428,138 +0.001448,138 +0.001684,138 +0.001488,138 +0.001535,138 +0.001780,138 +0.001649,138 +0.001484,138 +0.001455,138 +0.001677,138 +0.001542,138 +0.001429,138 +0.001722,138 +0.001618,138 +0.001505,138 +0.001809,138 +0.001637,138 +0.001648,138 +0.001510,138 +0.001488,138 +0.001589,138 +0.001429,138 +0.001472,138 +0.001452,138 +0.001738,138 +0.001428,138 +0.001784,138 +0.001685,138 +0.001426,138 +0.001426,138 +0.001519,138 +0.001512,138 +0.001563,140 +0.001492,140 +0.001726,140 +0.001577,140 +0.001791,140 +0.001657,140 +0.001654,140 +0.001508,140 +0.001534,140 +0.001586,140 +0.001572,140 +0.001492,140 +0.001492,140 +0.001694,140 +0.001491,140 +0.001866,140 +0.001774,140 +0.001491,140 +0.001550,140 +0.001545,140 +0.001579,140 +0.001511,140 +0.001491,140 +0.001779,140 +0.001515,140 +0.001853,140 +0.001671,140 +0.001677,140 +0.001491,140 +0.001491,140 +0.001635,140 +0.001491,140 +0.001491,140 +0.001702,140 +0.001624,140 +0.001690,140 +0.001754,140 +0.001662,140 +0.001551,140 +0.001553,140 +0.001698,140 +0.001552,140 +0.001530,140 +0.001492,140 +0.001767,140 +0.001529,140 +0.001832,140 +0.001804,140 +0.001491,140 +0.001536,140 +0.001573,140 +0.001594,140 +0.001522,140 +0.001492,140 +0.001757,140 +0.001588,140 +0.001795,140 +0.001798,140 +0.001491,140 +0.001553,140 +0.001522,140 +0.001627,140 +0.001520,140 +0.001492,140 +0.001721,140 +0.001573,140 +0.001679,140 +0.001630,140 +0.001491,140 +0.001491,140 +0.001515,140 +0.001663,140 +0.001605,140 +0.001488,140 +0.001488,140 +0.001664,140 +0.001777,140 +0.001624,140 +0.001492,140 +0.001653,140 +0.001681,140 +0.001615,140 +0.001893,140 +0.001503,140 +0.001758,140 +0.001751,140 +0.001726,140 +0.001625,140 +0.001786,140 +0.001747,140 +0.001649,140 +0.001676,140 +0.001830,140 +0.001711,140 +0.001648,140 +0.001767,140 +0.001934,140 +0.002862,140 +0.002059,140 +0.001580,140 +0.001746,142 +0.001996,142 +0.001840,142 +0.001968,142 +0.002185,142 +0.002980,142 +0.001803,142 +0.001790,142 +0.001804,142 +0.001690,142 +0.001770,142 +0.001839,142 +0.001808,142 +0.002382,142 +0.002844,142 +0.001718,142 +0.001732,142 +0.001741,142 +0.001729,142 +0.001723,142 +0.001685,142 +0.001658,142 +0.002594,142 +0.002747,142 +0.001830,142 +0.001847,142 +0.001883,142 +0.001670,142 +0.001867,142 +0.001723,142 +0.002894,142 +0.002569,142 +0.001765,142 +0.001787,142 +0.001901,142 +0.001879,142 +0.002013,142 +0.001895,142 +0.001922,142 +0.002034,142 +0.001923,142 +0.001942,142 +0.001998,142 +0.002005,142 +0.002019,142 +0.001986,142 +0.001897,142 +0.001892,142 +0.001736,142 +0.001796,142 +0.001669,142 +0.001709,142 +0.001752,142 +0.001864,142 +0.001761,142 +0.002032,142 +0.001679,142 +0.001722,142 +0.001687,142 +0.001759,142 +0.001791,142 +0.001981,142 +0.002008,142 +0.002015,142 +0.002084,142 +0.002184,142 +0.002038,142 +0.002001,142 +0.002046,142 +0.002055,142 +0.002038,142 +0.001952,142 +0.001788,142 +0.002505,142 +0.001885,142 +0.001688,142 +0.001738,142 +0.001726,142 +0.001853,142 +0.001762,142 +0.001856,142 +0.001809,142 +0.002486,142 +0.001766,142 +0.001758,142 +0.001725,142 +0.001789,142 +0.001824,142 +0.001703,142 +0.001824,142 +0.001721,142 +0.002387,142 +0.001682,142 +0.001762,142 +0.001794,142 +0.001795,142 +0.001745,142 +0.001700,142 +0.001879,142 +0.001720,142 +0.001862,144 +0.001783,144 +0.001818,144 +0.001788,144 +0.001835,144 +0.001743,144 +0.001714,144 +0.001984,144 +0.001873,144 +0.002296,144 +0.001929,144 +0.001804,144 +0.001860,144 +0.001873,144 +0.002026,144 +0.001922,144 +0.001990,144 +0.001850,144 +0.001841,144 +0.001818,144 +0.001828,144 +0.001869,144 +0.001881,144 +0.001881,144 +0.001819,144 +0.001855,144 +0.001772,144 +0.001820,144 +0.001894,144 +0.001840,144 +0.001848,144 +0.001992,144 +0.001875,144 +0.001749,144 +0.001878,144 +0.001840,144 +0.001868,144 +0.001814,144 +0.001870,144 +0.001820,144 +0.001867,144 +0.001851,144 +0.001843,144 +0.001905,144 +0.001859,144 +0.001851,144 +0.001825,144 +0.001843,144 +0.001842,144 +0.001934,144 +0.001805,144 +0.001837,144 +0.001922,144 +0.001871,144 +0.001777,144 +0.001845,144 +0.001885,144 +0.001735,144 +0.001769,144 +0.001764,144 +0.001813,144 +0.001879,144 +0.001738,144 +0.001768,144 +0.001809,144 +0.001720,144 +0.001778,144 +0.001797,144 +0.001730,144 +0.001760,144 +0.001766,144 +0.001806,144 +0.001822,144 +0.001879,144 +0.001857,144 +0.001858,144 +0.001913,144 +0.002014,144 +0.001948,144 +0.001844,144 +0.001948,144 +0.001865,144 +0.001881,144 +0.001819,144 +0.001908,144 +0.001920,144 +0.002060,144 +0.001885,144 +0.002011,144 +0.001915,144 +0.001939,144 +0.001870,144 +0.001824,144 +0.001755,144 +0.001816,144 +0.001959,144 +0.001760,144 +0.001881,144 +0.001774,144 +0.001748,144 +0.001905,146 +0.001885,146 +0.001791,146 +0.001961,146 +0.001898,146 +0.001862,146 +0.001960,146 +0.001887,146 +0.001832,146 +0.001839,146 +0.001875,146 +0.001855,146 +0.001900,146 +0.001870,146 +0.001909,146 +0.001862,146 +0.001840,146 +0.001859,146 +0.001834,146 +0.001819,146 +0.001862,146 +0.002148,146 +0.002027,146 +0.001807,146 +0.001939,146 +0.001817,146 +0.001863,146 +0.001835,146 +0.001857,146 +0.001835,146 +0.001915,146 +0.001869,146 +0.001875,146 +0.001886,146 +0.001841,146 +0.001889,146 +0.001834,146 +0.001888,146 +0.001857,146 +0.001886,146 +0.001835,146 +0.001885,146 +0.001837,146 +0.001852,146 +0.001886,146 +0.001918,146 +0.001821,146 +0.001919,146 +0.001934,146 +0.001846,146 +0.001958,146 +0.001918,146 +0.001878,146 +0.001852,146 +0.001881,146 +0.001852,146 +0.001906,146 +0.001880,146 +0.001850,146 +0.001868,146 +0.001860,146 +0.001854,146 +0.001806,146 +0.001794,146 +0.001779,146 +0.001919,146 +0.001855,146 +0.001830,146 +0.002055,146 +0.001954,146 +0.002077,146 +0.001872,146 +0.001821,146 +0.001880,146 +0.001840,146 +0.001889,146 +0.001818,146 +0.001952,146 +0.001826,146 +0.001766,146 +0.001839,146 +0.001794,146 +0.001780,146 +0.001905,146 +0.002034,146 +0.001896,146 +0.001952,146 +0.001833,146 +0.001926,146 +0.002057,146 +0.001924,146 +0.001887,146 +0.001996,146 +0.001829,146 +0.001916,146 +0.001874,146 +0.001916,146 +0.001858,146 +0.001760,146 +0.001866,146 +0.001911,148 +0.001937,148 +0.001896,148 +0.001991,148 +0.001954,148 +0.001922,148 +0.001847,148 +0.001874,148 +0.001895,148 +0.001870,148 +0.001988,148 +0.002018,148 +0.001926,148 +0.001982,148 +0.001928,148 +0.001948,148 +0.001908,148 +0.001924,148 +0.001959,148 +0.001879,148 +0.001966,148 +0.002189,148 +0.001985,148 +0.001938,148 +0.001946,148 +0.001902,148 +0.002000,148 +0.001996,148 +0.001961,148 +0.002127,148 +0.002068,148 +0.001933,148 +0.001979,148 +0.001960,148 +0.002116,148 +0.001997,148 +0.001877,148 +0.002011,148 +0.001897,148 +0.001895,148 +0.001912,148 +0.001844,148 +0.001869,148 +0.001946,148 +0.002006,148 +0.001886,148 +0.001975,148 +0.001852,148 +0.001875,148 +0.001893,148 +0.001875,148 +0.001826,148 +0.001950,148 +0.001973,148 +0.001922,148 +0.001887,148 +0.001872,148 +0.001906,148 +0.001862,148 +0.001892,148 +0.001886,148 +0.002109,148 +0.002104,148 +0.002171,148 +0.002114,148 +0.002102,148 +0.002161,148 +0.002132,148 +0.001975,148 +0.001950,148 +0.001905,148 +0.001915,148 +0.002150,148 +0.001955,148 +0.001946,148 +0.001897,148 +0.001895,148 +0.001987,148 +0.001925,148 +0.001853,148 +0.001973,148 +0.001946,148 +0.001916,148 +0.001968,148 +0.001909,148 +0.001935,148 +0.002010,148 +0.002004,148 +0.001991,148 +0.002028,148 +0.001887,148 +0.001935,148 +0.001936,148 +0.001911,148 +0.001951,148 +0.002074,148 +0.001929,148 +0.001922,148 +0.001936,148 +0.001940,148 +0.002027,150 +0.002057,150 +0.001981,150 +0.002110,150 +0.002039,150 +0.002057,150 +0.002001,150 +0.002028,150 +0.002001,150 +0.002032,150 +0.001992,150 +0.002110,150 +0.001971,150 +0.002019,150 +0.001990,150 +0.002015,150 +0.001988,150 +0.002021,150 +0.001989,150 +0.002062,150 +0.002077,150 +0.001940,150 +0.001878,150 +0.002521,150 +0.002403,150 +0.002418,150 +0.002415,150 +0.002567,150 +0.002108,150 +0.002078,150 +0.002005,150 +0.001971,150 +0.002000,150 +0.001971,150 +0.001997,150 +0.002000,150 +0.002029,150 +0.002118,150 +0.002058,150 +0.002057,150 +0.002034,150 +0.002066,150 +0.002027,150 +0.002163,150 +0.002074,150 +0.002055,150 +0.002094,150 +0.002064,150 +0.002016,150 +0.002077,150 +0.002030,150 +0.002068,150 +0.002005,150 +0.002058,150 +0.002059,150 +0.002117,150 +0.001977,150 +0.001992,150 +0.001878,150 +0.002084,150 +0.001979,150 +0.001900,150 +0.001888,150 +0.002066,150 +0.001897,150 +0.001901,150 +0.001878,150 +0.002055,150 +0.002006,150 +0.001984,150 +0.001986,150 +0.001984,150 +0.002203,150 +0.002178,150 +0.002021,150 +0.001956,150 +0.002305,150 +0.002120,150 +0.002166,150 +0.002037,150 +0.001950,150 +0.002068,150 +0.002040,150 +0.002059,150 +0.002266,150 +0.002048,150 +0.002175,150 +0.002061,150 +0.002094,150 +0.002019,150 +0.002019,150 +0.001992,150 +0.002071,150 +0.001998,150 +0.002128,150 +0.001998,150 +0.002015,150 +0.001990,150 +0.002015,150 +0.001970,150 +0.002200,152 +0.002076,152 +0.002105,152 +0.002039,152 +0.002095,152 +0.002090,152 +0.002091,152 +0.002069,152 +0.002131,152 +0.002110,152 +0.002183,152 +0.002061,152 +0.002054,152 +0.002089,152 +0.002094,152 +0.002085,152 +0.002159,152 +0.002121,152 +0.002076,152 +0.002097,152 +0.002164,152 +0.002036,152 +0.002078,152 +0.002105,152 +0.002139,152 +0.002058,152 +0.002102,152 +0.002118,152 +0.002106,152 +0.002109,152 +0.002084,152 +0.002113,152 +0.002190,152 +0.002055,152 +0.002096,152 +0.002005,152 +0.002036,152 +0.002107,152 +0.002181,152 +0.002116,152 +0.002285,152 +0.002039,152 +0.002262,152 +0.002090,152 +0.002231,152 +0.002144,152 +0.002184,152 +0.002273,152 +0.002246,152 +0.002231,152 +0.002192,152 +0.002114,152 +0.002050,152 +0.002106,152 +0.002111,152 +0.002076,152 +0.002286,152 +0.002248,152 +0.002134,152 +0.002184,152 +0.002176,152 +0.002189,152 +0.002162,152 +0.002302,152 +0.002142,152 +0.002109,152 +0.002065,152 +0.002287,152 +0.002049,152 +0.002108,152 +0.002177,152 +0.002280,152 +0.002104,152 +0.002209,152 +0.002108,152 +0.002147,152 +0.002118,152 +0.002184,152 +0.002196,152 +0.002164,152 +0.002194,152 +0.002148,152 +0.002143,152 +0.002141,152 +0.002147,152 +0.002101,152 +0.002256,152 +0.002117,152 +0.002181,152 +0.002088,152 +0.002180,152 +0.002101,152 +0.002134,152 +0.002111,152 +0.002216,152 +0.002035,152 +0.002099,152 +0.002077,152 +0.002105,152 +0.002024,152 +0.002205,154 +0.002190,154 +0.002186,154 +0.002065,154 +0.002048,154 +0.002059,154 +0.002026,154 +0.002009,154 +0.001975,154 +0.002009,154 +0.002163,154 +0.002015,154 +0.002106,154 +0.002094,154 +0.001976,154 +0.002104,154 +0.002224,154 +0.002124,154 +0.002059,154 +0.002012,154 +0.002226,154 +0.001976,154 +0.001998,154 +0.001976,154 +0.001989,154 +0.001985,154 +0.002102,154 +0.001976,154 +0.002004,154 +0.001975,154 +0.001980,154 +0.001975,154 +0.001976,154 +0.001998,154 +0.001995,154 +0.002019,154 +0.002007,154 +0.002143,154 +0.001982,154 +0.001975,154 +0.001977,154 +0.001975,154 +0.002017,154 +0.002015,154 +0.001980,154 +0.001975,154 +0.001978,154 +0.001976,154 +0.001975,154 +0.001980,154 +0.001976,154 +0.002051,154 +0.002339,154 +0.002092,154 +0.002002,154 +0.002347,154 +0.002136,154 +0.001975,154 +0.002238,154 +0.002441,154 +0.002197,154 +0.002141,154 +0.002148,154 +0.002398,154 +0.002253,154 +0.002308,154 +0.002461,154 +0.002718,154 +0.002731,154 +0.002189,154 +0.002179,154 +0.002139,154 +0.002173,154 +0.002120,154 +0.002183,154 +0.002250,154 +0.002336,154 +0.002298,154 +0.002206,154 +0.002207,154 +0.002210,154 +0.002277,154 +0.002222,154 +0.002231,154 +0.002267,154 +0.002106,154 +0.002195,154 +0.002223,154 +0.002300,154 +0.002120,154 +0.002334,154 +0.002182,154 +0.002288,154 +0.002189,154 +0.002181,154 +0.002210,154 +0.002194,154 +0.002154,154 +0.002150,154 +0.002142,154 +0.002376,156 +0.002262,156 +0.002311,156 +0.002263,156 +0.002213,156 +0.002254,156 +0.002220,156 +0.002106,156 +0.002391,156 +0.002241,156 +0.002224,156 +0.002339,156 +0.002249,156 +0.002301,156 +0.002222,156 +0.002229,156 +0.002243,156 +0.002346,156 +0.002434,156 +0.002223,156 +0.002353,156 +0.002201,156 +0.002275,156 +0.002206,156 +0.002239,156 +0.002356,156 +0.002366,156 +0.002641,156 +0.002381,156 +0.002473,156 +0.002343,156 +0.002298,156 +0.002497,156 +0.002293,156 +0.002359,156 +0.002295,156 +0.002125,156 +0.002263,156 +0.002106,156 +0.002339,156 +0.002133,156 +0.002147,156 +0.002106,156 +0.002135,156 +0.002081,156 +0.002091,156 +0.002085,156 +0.002130,156 +0.002126,156 +0.002204,156 +0.002221,156 +0.002126,156 +0.002280,156 +0.002198,156 +0.002085,156 +0.002255,156 +0.002091,156 +0.002327,156 +0.002051,156 +0.002094,156 +0.002051,156 +0.002077,156 +0.002052,156 +0.002180,156 +0.002051,156 +0.002089,156 +0.002052,156 +0.002074,156 +0.002052,156 +0.002077,156 +0.002051,156 +0.002152,156 +0.002051,156 +0.002076,156 +0.002104,156 +0.002080,156 +0.002051,156 +0.002227,156 +0.002463,156 +0.002595,156 +0.002532,156 +0.003101,156 +0.002759,156 +0.002161,156 +0.002417,156 +0.002332,156 +0.002852,156 +0.002693,156 +0.002307,156 +0.002412,156 +0.002374,156 +0.002192,156 +0.002388,156 +0.002278,156 +0.003178,156 +0.002101,156 +0.002126,156 +0.002054,156 +0.002092,156 +0.002539,156 +0.002303,158 +0.002466,158 +0.002339,158 +0.002641,158 +0.002272,158 +0.002744,158 +0.003238,158 +0.002335,158 +0.002136,158 +0.002323,158 +0.002201,158 +0.002193,158 +0.002135,158 +0.002461,158 +0.002361,158 +0.002260,158 +0.003240,158 +0.002305,158 +0.002172,158 +0.002209,158 +0.002263,158 +0.002313,158 +0.002137,158 +0.002317,158 +0.002133,158 +0.002175,158 +0.002191,158 +0.002377,158 +0.002175,158 +0.002267,158 +0.002179,158 +0.002133,158 +0.002176,158 +0.002133,158 +0.002209,158 +0.002266,158 +0.002210,158 +0.002161,158 +0.002142,158 +0.002178,158 +0.002133,158 +0.002160,158 +0.002271,158 +0.002217,158 +0.002173,158 +0.002162,158 +0.002133,158 +0.002167,158 +0.002149,158 +0.002142,158 +0.002248,158 +0.002133,158 +0.002205,158 +0.002133,158 +0.002195,158 +0.002154,158 +0.002170,158 +0.002215,158 +0.002360,158 +0.002375,158 +0.002395,158 +0.002297,158 +0.002173,158 +0.002307,158 +0.002133,158 +0.002237,158 +0.002158,158 +0.002175,158 +0.002201,158 +0.002134,158 +0.002160,158 +0.002134,158 +0.002178,158 +0.002211,158 +0.002206,158 +0.002133,158 +0.002575,158 +0.002161,158 +0.002392,158 +0.002265,158 +0.002695,158 +0.002399,158 +0.002348,158 +0.002369,158 +0.002395,158 +0.002360,158 +0.002311,158 +0.002464,158 +0.002301,158 +0.002392,158 +0.002272,158 +0.002316,158 +0.002278,158 +0.002309,158 +0.002581,158 +0.002331,158 +0.002421,158 +0.002307,158 +0.002320,158 +0.002327,158 +0.002463,160 +0.002505,160 +0.002359,160 +0.002524,160 +0.002461,160 +0.002479,160 +0.002418,160 +0.002422,160 +0.002452,160 +0.002601,160 +0.002474,160 +0.002475,160 +0.002478,160 +0.002396,160 +0.002523,160 +0.002472,160 +0.002613,160 +0.002480,160 +0.002518,160 +0.002428,160 +0.002499,160 +0.002458,160 +0.002499,160 +0.002613,160 +0.002459,160 +0.002426,160 +0.002437,160 +0.002506,160 +0.002578,160 +0.002446,160 +0.002623,160 +0.002540,160 +0.002366,160 +0.002348,160 +0.002400,160 +0.002920,160 +0.004547,160 +0.004423,160 +0.003569,160 +0.003106,160 +0.003154,160 +0.003011,160 +0.003072,160 +0.002556,160 +0.002439,160 +0.002655,160 +0.002619,160 +0.002688,160 +0.002485,160 +0.002435,160 +0.002441,160 +0.002513,160 +0.002632,160 +0.002688,160 +0.003292,160 +0.002384,160 +0.002356,160 +0.002372,160 +0.002708,160 +0.002480,160 +0.002963,160 +0.002525,160 +0.002414,160 +0.002482,160 +0.002506,160 +0.003104,160 +0.002652,160 +0.002795,160 +0.002947,160 +0.002402,160 +0.003490,160 +0.004557,160 +0.004375,160 +0.002576,160 +0.002360,160 +0.002570,160 +0.002459,160 +0.002533,160 +0.002415,160 +0.002338,160 +0.002298,160 +0.002332,160 +0.002609,160 +0.002467,160 +0.002602,160 +0.002552,160 +0.002393,160 +0.002369,160 +0.002540,160 +0.002677,160 +0.002618,160 +0.002612,160 +0.002328,160 +0.002444,160 +0.002353,160 +0.002467,160 +0.002377,160 +0.002676,160 +0.002682,160 +0.002423,160 +0.002458,162 +0.002465,162 +0.002565,162 +0.002438,162 +0.002644,162 +0.002481,162 +0.002587,162 +0.002390,162 +0.002430,162 +0.002528,162 +0.002642,162 +0.002521,162 +0.002361,162 +0.002344,162 +0.002378,162 +0.002534,162 +0.002318,162 +0.003067,162 +0.002505,162 +0.002380,162 +0.002328,162 +0.002320,162 +0.002513,162 +0.002474,162 +0.002453,162 +0.002954,162 +0.002338,162 +0.002295,162 +0.002423,162 +0.002627,162 +0.002587,162 +0.002435,162 +0.002342,162 +0.002335,162 +0.002330,162 +0.002354,162 +0.002589,162 +0.002554,162 +0.002455,162 +0.002357,162 +0.002449,162 +0.002420,162 +0.002573,162 +0.002431,162 +0.002588,162 +0.002398,162 +0.002329,162 +0.002333,162 +0.002294,162 +0.002598,162 +0.002323,162 +0.002690,162 +0.002464,162 +0.002294,162 +0.002771,162 +0.002616,162 +0.002931,162 +0.003634,162 +0.002846,162 +0.002458,162 +0.002573,162 +0.002642,162 +0.002514,162 +0.003737,162 +0.003512,162 +0.003035,162 +0.003066,162 +0.002736,162 +0.002737,162 +0.002603,162 +0.002509,162 +0.002611,162 +0.002552,162 +0.002661,162 +0.002711,162 +0.002889,162 +0.003110,162 +0.002515,162 +0.002469,162 +0.002588,162 +0.002489,162 +0.002732,162 +0.002544,162 +0.002478,162 +0.002470,162 +0.002426,162 +0.002709,162 +0.002556,162 +0.003016,162 +0.002833,162 +0.002612,162 +0.002586,162 +0.003024,162 +0.003874,162 +0.003492,162 +0.002413,162 +0.002456,162 +0.002437,162 +0.002531,162 +0.002685,162 +0.002841,164 +0.002593,164 +0.002665,164 +0.002604,164 +0.002649,164 +0.002738,164 +0.003488,164 +0.002777,164 +0.002709,164 +0.002529,164 +0.002603,164 +0.002617,164 +0.003292,164 +0.002670,164 +0.002666,164 +0.002505,164 +0.002738,164 +0.002864,164 +0.003250,164 +0.002514,164 +0.002488,164 +0.002493,164 +0.002708,164 +0.002615,164 +0.002986,164 +0.002846,164 +0.002503,164 +0.002438,164 +0.002594,164 +0.002479,164 +0.002857,164 +0.002583,164 +0.002393,164 +0.002433,164 +0.002428,164 +0.002610,164 +0.002759,164 +0.002656,164 +0.002452,164 +0.002440,164 +0.002392,164 +0.002609,164 +0.002540,164 +0.002820,164 +0.002591,164 +0.002432,164 +0.002392,164 +0.002440,164 +0.002621,164 +0.002605,164 +0.002709,164 +0.002562,164 +0.002392,164 +0.002479,164 +0.002531,164 +0.002717,164 +0.002825,164 +0.002509,164 +0.002443,164 +0.002438,164 +0.002413,164 +0.002588,164 +0.002580,164 +0.002837,164 +0.002538,164 +0.002570,164 +0.002403,164 +0.002497,164 +0.002969,164 +0.004485,164 +0.003401,164 +0.002712,164 +0.002849,164 +0.002621,164 +0.003173,164 +0.002910,164 +0.002450,164 +0.002395,164 +0.002477,164 +0.002771,164 +0.002645,164 +0.003699,164 +0.003640,164 +0.002623,164 +0.002579,164 +0.002465,164 +0.002700,164 +0.003043,164 +0.002441,164 +0.002434,164 +0.002557,164 +0.002601,164 +0.002718,164 +0.002494,164 +0.002504,164 +0.002392,164 +0.002434,164 +0.002742,164 +0.002516,164 +0.002553,164 +0.002738,166 +0.002476,166 +0.002514,166 +0.002703,166 +0.002657,166 +0.002698,166 +0.003604,166 +0.002634,166 +0.002706,166 +0.002551,166 +0.002656,166 +0.002929,166 +0.002677,166 +0.002507,166 +0.002471,166 +0.002623,166 +0.002824,166 +0.002874,166 +0.002632,166 +0.002579,166 +0.002471,166 +0.002507,166 +0.002705,166 +0.002622,166 +0.002675,166 +0.002678,166 +0.002513,166 +0.002505,166 +0.002617,166 +0.002702,166 +0.002998,166 +0.002612,166 +0.002503,166 +0.002504,166 +0.002470,166 +0.002719,166 +0.002926,166 +0.002678,166 +0.002527,166 +0.002514,166 +0.002471,166 +0.002740,166 +0.002619,166 +0.002670,166 +0.002584,166 +0.002524,166 +0.002471,166 +0.002555,166 +0.002610,166 +0.002841,166 +0.002664,166 +0.002538,166 +0.002503,166 +0.002506,166 +0.002670,166 +0.002847,166 +0.002579,166 +0.002567,166 +0.002508,166 +0.002510,166 +0.002541,166 +0.002613,166 +0.002932,166 +0.002606,166 +0.002507,166 +0.002521,166 +0.002587,166 +0.002757,166 +0.002953,166 +0.002857,166 +0.002527,166 +0.002512,166 +0.002471,166 +0.002696,166 +0.002884,166 +0.002576,166 +0.002886,166 +0.002597,166 +0.002490,166 +0.002935,166 +0.003359,166 +0.003268,166 +0.002690,166 +0.002614,166 +0.002847,166 +0.002813,166 +0.002894,166 +0.002733,166 +0.002573,166 +0.002665,166 +0.002583,166 +0.002776,166 +0.002903,166 +0.002703,166 +0.002711,166 +0.002610,166 +0.002714,166 +0.002732,166 +0.002941,166 +0.002962,166 +0.002736,168 +0.002825,168 +0.002639,168 +0.002875,168 +0.002828,168 +0.002788,168 +0.002643,168 +0.002624,168 +0.002544,168 +0.002716,168 +0.002653,168 +0.002544,168 +0.002551,168 +0.002544,168 +0.002881,168 +0.002690,168 +0.002870,168 +0.002913,168 +0.002768,168 +0.002799,168 +0.002712,168 +0.002900,168 +0.002896,168 +0.002720,168 +0.002800,168 +0.002811,168 +0.002858,168 +0.002821,168 +0.002969,168 +0.002816,168 +0.002808,168 +0.002847,168 +0.002900,168 +0.002948,168 +0.002776,168 +0.002771,168 +0.003002,168 +0.003304,168 +0.002708,168 +0.002777,168 +0.002802,168 +0.002781,168 +0.002704,168 +0.002751,168 +0.002722,168 +0.003114,168 +0.002848,168 +0.002933,168 +0.002750,168 +0.002655,168 +0.002786,168 +0.002758,168 +0.002819,168 +0.002703,168 +0.002546,168 +0.002857,168 +0.002661,168 +0.003118,168 +0.002598,168 +0.002592,168 +0.002546,168 +0.002840,168 +0.002623,168 +0.002816,168 +0.002566,168 +0.002572,168 +0.002546,168 +0.002573,168 +0.002557,168 +0.002585,168 +0.002585,168 +0.002764,168 +0.002634,168 +0.002619,168 +0.002578,168 +0.002627,168 +0.002832,168 +0.002795,168 +0.002843,168 +0.002642,168 +0.002729,168 +0.002546,168 +0.002848,168 +0.002600,168 +0.002840,168 +0.002853,168 +0.002670,168 +0.002753,168 +0.003022,168 +0.002839,168 +0.002700,168 +0.002935,168 +0.002957,168 +0.002801,168 +0.002843,168 +0.002698,168 +0.002752,168 +0.002640,168 +0.002613,168 +0.002647,168 +0.003061,170 +0.002651,170 +0.002658,170 +0.002652,170 +0.002647,170 +0.002654,170 +0.002785,170 +0.002689,170 +0.002653,170 +0.002655,170 +0.002646,170 +0.002654,170 +0.002727,170 +0.002850,170 +0.002827,170 +0.002848,170 +0.002685,170 +0.002646,170 +0.002706,170 +0.002687,170 +0.002646,170 +0.002678,170 +0.002681,170 +0.002695,170 +0.002732,170 +0.002667,170 +0.002646,170 +0.002651,170 +0.002661,170 +0.002646,170 +0.002715,170 +0.002683,170 +0.002646,170 +0.002788,170 +0.002699,170 +0.002647,170 +0.002671,170 +0.002750,170 +0.002646,170 +0.002657,170 +0.003080,170 +0.002791,170 +0.002717,170 +0.003166,170 +0.002987,170 +0.002883,170 +0.002937,170 +0.002889,170 +0.002878,170 +0.002980,170 +0.003034,170 +0.003052,170 +0.002931,170 +0.002900,170 +0.003430,170 +0.004351,170 +0.003347,170 +0.002914,170 +0.002895,170 +0.002961,170 +0.003166,170 +0.002951,170 +0.002805,170 +0.002811,170 +0.002858,170 +0.002897,170 +0.003924,170 +0.003026,170 +0.003066,170 +0.003075,170 +0.003396,170 +0.002965,170 +0.002926,170 +0.002870,170 +0.002842,170 +0.002817,170 +0.002862,170 +0.002790,170 +0.002856,170 +0.002864,170 +0.002897,170 +0.002913,170 +0.002899,170 +0.002927,170 +0.002776,170 +0.002737,170 +0.002863,170 +0.003196,170 +0.003169,170 +0.003174,170 +0.002972,170 +0.002853,170 +0.002820,170 +0.002859,170 +0.003361,170 +0.003052,170 +0.002939,170 +0.002847,170 +0.002919,170 +0.003103,170 +0.003902,172 +0.003090,172 +0.003185,172 +0.003100,172 +0.003481,172 +0.003511,172 +0.002919,172 +0.002885,172 +0.002846,172 +0.002990,172 +0.003973,172 +0.003140,172 +0.003148,172 +0.003481,172 +0.004020,172 +0.003712,172 +0.003309,172 +0.004044,172 +0.003654,172 +0.003374,172 +0.003559,172 +0.003092,172 +0.003741,172 +0.003325,172 +0.003688,172 +0.003125,172 +0.002883,172 +0.002962,172 +0.003089,172 +0.003673,172 +0.003146,172 +0.002918,172 +0.002874,172 +0.003277,172 +0.003582,172 +0.003203,172 +0.002840,172 +0.002826,172 +0.002969,172 +0.002873,172 +0.003742,172 +0.002978,172 +0.002747,172 +0.002790,172 +0.002956,172 +0.003446,172 +0.003046,172 +0.003076,172 +0.002815,172 +0.002822,172 +0.003267,172 +0.003442,172 +0.003169,172 +0.002880,172 +0.003011,172 +0.002947,172 +0.003491,172 +0.003078,172 +0.003057,172 +0.002833,172 +0.002914,172 +0.003242,172 +0.003967,172 +0.003268,172 +0.003196,172 +0.003737,172 +0.003576,172 +0.003445,172 +0.003383,172 +0.003298,172 +0.003517,172 +0.003472,172 +0.003764,172 +0.003244,172 +0.003295,172 +0.003393,172 +0.004356,172 +0.002991,172 +0.003097,172 +0.002999,172 +0.003230,172 +0.003457,172 +0.003304,172 +0.003088,172 +0.003121,172 +0.003199,172 +0.003288,172 +0.003158,172 +0.003051,172 +0.003034,172 +0.003097,172 +0.003490,172 +0.003527,172 +0.003157,172 +0.003086,172 +0.003062,172 +0.003758,172 +0.003198,172 +0.003024,172 +0.003026,172 +0.003241,174 +0.003326,174 +0.003523,174 +0.003166,174 +0.003049,174 +0.002951,174 +0.003015,174 +0.003492,174 +0.003125,174 +0.003071,174 +0.002934,174 +0.003152,174 +0.003262,174 +0.003171,174 +0.002934,174 +0.002902,174 +0.002950,174 +0.003223,174 +0.003100,174 +0.003020,174 +0.002920,174 +0.002898,174 +0.003007,174 +0.003383,174 +0.003026,174 +0.002891,174 +0.002854,174 +0.002931,174 +0.003208,174 +0.003114,174 +0.003021,174 +0.002915,174 +0.002917,174 +0.003070,174 +0.003445,174 +0.003060,174 +0.002881,174 +0.002894,174 +0.002915,174 +0.003362,174 +0.003250,174 +0.003025,174 +0.003080,174 +0.002871,174 +0.003250,174 +0.003490,174 +0.003080,174 +0.002888,174 +0.002854,174 +0.003048,174 +0.003322,174 +0.003161,174 +0.002920,174 +0.002912,174 +0.002892,174 +0.003085,174 +0.003400,174 +0.003015,174 +0.002890,174 +0.002886,174 +0.003020,174 +0.003468,174 +0.003093,174 +0.002877,174 +0.002899,174 +0.002854,174 +0.003218,174 +0.002946,174 +0.003106,174 +0.002854,174 +0.002877,174 +0.002981,174 +0.003005,174 +0.003079,174 +0.003046,174 +0.003034,174 +0.002933,174 +0.003010,174 +0.003004,174 +0.002890,174 +0.002854,174 +0.002896,174 +0.002927,174 +0.003026,174 +0.002854,174 +0.002879,174 +0.002907,174 +0.002924,174 +0.002894,174 +0.002987,174 +0.002896,174 +0.002855,174 +0.002856,174 +0.002856,174 +0.002995,174 +0.002946,174 +0.004948,174 +0.002848,174 +0.002884,174 +0.002914,174 +0.003203,176 +0.003099,176 +0.002981,176 +0.003032,176 +0.002989,176 +0.003070,176 +0.003019,176 +0.003216,176 +0.003142,176 +0.002963,176 +0.003031,176 +0.003067,176 +0.002967,176 +0.002943,176 +0.002967,176 +0.002990,176 +0.003060,176 +0.002943,176 +0.002949,176 +0.002953,176 +0.002950,176 +0.002994,176 +0.003031,176 +0.002969,176 +0.002945,176 +0.002943,176 +0.002947,176 +0.003173,176 +0.002968,176 +0.002944,176 +0.002946,176 +0.002950,176 +0.002985,176 +0.003058,176 +0.002969,176 +0.002945,176 +0.002946,176 +0.002943,176 +0.002997,176 +0.003061,176 +0.003302,176 +0.003073,176 +0.003229,176 +0.003052,176 +0.003085,176 +0.002981,176 +0.002943,176 +0.002989,176 +0.002990,176 +0.003089,176 +0.002975,176 +0.002985,176 +0.002972,176 +0.002969,176 +0.002983,176 +0.003100,176 +0.002970,176 +0.002974,176 +0.002973,176 +0.002974,176 +0.003029,176 +0.003057,176 +0.002944,176 +0.002946,176 +0.002946,176 +0.002983,176 +0.003064,176 +0.002967,176 +0.002949,176 +0.002943,176 +0.002946,176 +0.003116,176 +0.003328,176 +0.003176,176 +0.003190,176 +0.003030,176 +0.003068,176 +0.003127,176 +0.002944,176 +0.002978,176 +0.002968,176 +0.002979,176 +0.002988,176 +0.003028,176 +0.002983,176 +0.002976,176 +0.002943,176 +0.003021,176 +0.003105,176 +0.002970,176 +0.003105,176 +0.002968,176 +0.002970,176 +0.003030,176 +0.003230,176 +0.002944,176 +0.002966,176 +0.002977,176 +0.002982,176 +0.003142,176 +0.003227,178 +0.003164,178 +0.003159,178 +0.003164,178 +0.003305,178 +0.003147,178 +0.003396,178 +0.003352,178 +0.003144,178 +0.003265,178 +0.003232,178 +0.003124,178 +0.003167,178 +0.003149,178 +0.003172,178 +0.003259,178 +0.003167,178 +0.003154,178 +0.003137,178 +0.003170,178 +0.003277,178 +0.003146,178 +0.003123,178 +0.003121,178 +0.003156,178 +0.003296,178 +0.003127,178 +0.003123,178 +0.003121,178 +0.003126,178 +0.003172,178 +0.003277,178 +0.003134,178 +0.003121,178 +0.003148,178 +0.003178,178 +0.003252,178 +0.003293,178 +0.003244,178 +0.003292,178 +0.003203,178 +0.003303,178 +0.003163,178 +0.003120,178 +0.003144,178 +0.003205,178 +0.003268,178 +0.003182,178 +0.003121,178 +0.003144,178 +0.003146,178 +0.003319,178 +0.003147,178 +0.003180,178 +0.003282,178 +0.003147,178 +0.003277,178 +0.003407,178 +0.003121,178 +0.003155,178 +0.003144,178 +0.003228,178 +0.003333,178 +0.003121,178 +0.003161,178 +0.003155,178 +0.003195,178 +0.003336,178 +0.003121,178 +0.003438,178 +0.003315,178 +0.003203,178 +0.003288,178 +0.003128,178 +0.003120,178 +0.003143,178 +0.003150,178 +0.003320,178 +0.003161,178 +0.003120,178 +0.003125,178 +0.003127,178 +0.003172,178 +0.003242,178 +0.003126,178 +0.003123,178 +0.003132,178 +0.003182,178 +0.003343,178 +0.003130,178 +0.003122,178 +0.003124,178 +0.003168,178 +0.003281,178 +0.003143,178 +0.003134,178 +0.003125,178 +0.003134,178 +0.003321,178 +0.003504,178 +0.003532,180 +0.003527,180 +0.003495,180 +0.004005,180 +0.003884,180 +0.003513,180 +0.003805,180 +0.004142,180 +0.003700,180 +0.003624,180 +0.003559,180 +0.003563,180 +0.004337,180 +0.003487,180 +0.003685,180 +0.003598,180 +0.003867,180 +0.003445,180 +0.003491,180 +0.003522,180 +0.003481,180 +0.003945,180 +0.003953,180 +0.004146,180 +0.004174,180 +0.004212,180 +0.004009,180 +0.003485,180 +0.003538,180 +0.003646,180 +0.003549,180 +0.003461,180 +0.003395,180 +0.003463,180 +0.003542,180 +0.003426,180 +0.003518,180 +0.003413,180 +0.003602,180 +0.003509,180 +0.003408,180 +0.003412,180 +0.003377,180 +0.003336,180 +0.003671,180 +0.003293,180 +0.003453,180 +0.003358,180 +0.003344,180 +0.003603,180 +0.003481,180 +0.003429,180 +0.003489,180 +0.003376,180 +0.003597,180 +0.003199,180 +0.006071,180 +0.004131,180 +0.003369,180 +0.003196,180 +0.003210,180 +0.003194,180 +0.003199,180 +0.003336,180 +0.003196,180 +0.003194,180 +0.003187,180 +0.003171,180 +0.003301,180 +0.003201,180 +0.003163,180 +0.003162,180 +0.003171,180 +0.003267,180 +0.003166,180 +0.003167,180 +0.003166,180 +0.003159,180 +0.003270,180 +0.003200,180 +0.003164,180 +0.003162,180 +0.003159,180 +0.003192,180 +0.003267,180 +0.003193,180 +0.005630,180 +0.004376,180 +0.003275,180 +0.003530,180 +0.003186,180 +0.003178,180 +0.003557,180 +0.003336,180 +0.003194,180 +0.003186,180 +0.003168,180 +0.003224,180 +0.003370,180 +0.003219,180 +0.003419,182 +0.003360,182 +0.003445,182 +0.003421,182 +0.003299,182 +0.003305,182 +0.003301,182 +0.003343,182 +0.003424,182 +0.003325,182 +0.003298,182 +0.003322,182 +0.003373,182 +0.003489,182 +0.003304,182 +0.005269,182 +0.005044,182 +0.003425,182 +0.003322,182 +0.003903,182 +0.003365,182 +0.003537,182 +0.003340,182 +0.003298,182 +0.003336,182 +0.003341,182 +0.003955,182 +0.003324,182 +0.003321,182 +0.003531,182 +0.003343,182 +0.003573,182 +0.003330,182 +0.003325,182 +0.003301,182 +0.003342,182 +0.003532,182 +0.003298,182 +0.003303,182 +0.003549,182 +0.003413,182 +0.003438,182 +0.003696,182 +0.003524,182 +0.003702,182 +0.003760,182 +0.003347,182 +0.003355,182 +0.003342,182 +0.003384,182 +0.003610,182 +0.003367,182 +0.003298,182 +0.003330,182 +0.003324,182 +0.003480,182 +0.003303,182 +0.003301,182 +0.003298,182 +0.003307,182 +0.003458,182 +0.003303,182 +0.003301,182 +0.003303,182 +0.003298,182 +0.003439,182 +0.003310,182 +0.003300,182 +0.003303,182 +0.003300,182 +0.003435,182 +0.003303,182 +0.003391,182 +0.003518,182 +0.003521,182 +0.003498,182 +0.003325,182 +0.003298,182 +0.003301,182 +0.003323,182 +0.003512,182 +0.003333,182 +0.003322,182 +0.003591,182 +0.003476,182 +0.004173,182 +0.003645,182 +0.003635,182 +0.003644,182 +0.003882,182 +0.003617,182 +0.003687,182 +0.003340,182 +0.003958,182 +0.003804,182 +0.003327,182 +0.003628,182 +0.003332,182 +0.003860,182 +0.003440,182 +0.003478,184 +0.003872,184 +0.003574,184 +0.003834,184 +0.003615,184 +0.003471,184 +0.003375,184 +0.003846,184 +0.003612,184 +0.003411,184 +0.003410,184 +0.003546,184 +0.003638,184 +0.003450,184 +0.003373,184 +0.003526,184 +0.003471,184 +0.003868,184 +0.003409,184 +0.003431,184 +0.003712,184 +0.003757,184 +0.003919,184 +0.003743,184 +0.003877,184 +0.004446,184 +0.003781,184 +0.003494,184 +0.003574,184 +0.003515,184 +0.003843,184 +0.003487,184 +0.003726,184 +0.003475,184 +0.003640,184 +0.003964,184 +0.003477,184 +0.003568,184 +0.003411,184 +0.003638,184 +0.003699,184 +0.003571,184 +0.003672,184 +0.003516,184 +0.004054,184 +0.003407,184 +0.003674,184 +0.003867,184 +0.003679,184 +0.003599,184 +0.003693,184 +0.003736,184 +0.003553,184 +0.003677,184 +0.003643,184 +0.003409,184 +0.003831,184 +0.003547,184 +0.003797,184 +0.003437,184 +0.003663,184 +0.003375,184 +0.003873,184 +0.003873,184 +0.003577,184 +0.003461,184 +0.003798,184 +0.003677,184 +0.003596,184 +0.003566,184 +0.003559,184 +0.003469,184 +0.003993,184 +0.003479,184 +0.003687,184 +0.003701,184 +0.003874,184 +0.003523,184 +0.003456,184 +0.003757,184 +0.003408,184 +0.003917,184 +0.003623,184 +0.003624,184 +0.003523,184 +0.003855,184 +0.003613,184 +0.003494,184 +0.003663,184 +0.003490,184 +0.003807,184 +0.003417,184 +0.003416,184 +0.003683,184 +0.003648,184 +0.003582,184 +0.003410,184 +0.003647,184 +0.003441,184 +0.003741,184 +0.003845,186 +0.003610,186 +0.003840,186 +0.003755,186 +0.003996,186 +0.003626,186 +0.003662,186 +0.003616,186 +0.003837,186 +0.003807,186 +0.003575,186 +0.003698,186 +0.003855,186 +0.004090,186 +0.003746,186 +0.003654,186 +0.003662,186 +0.003753,186 +0.003679,186 +0.003729,186 +0.003555,186 +0.004084,186 +0.003842,186 +0.004042,186 +0.003867,186 +0.003646,186 +0.004074,186 +0.003782,186 +0.003805,186 +0.003689,186 +0.004057,186 +0.003623,186 +0.003747,186 +0.003948,186 +0.003816,186 +0.003689,186 +0.003701,186 +0.004021,186 +0.003745,186 +0.004078,186 +0.003749,186 +0.003831,186 +0.003884,186 +0.003938,186 +0.003788,186 +0.003805,186 +0.003843,186 +0.003815,186 +0.004775,186 +0.003963,186 +0.003874,186 +0.003864,186 +0.003969,186 +0.003972,186 +0.003923,186 +0.003896,186 +0.003969,186 +0.003879,186 +0.003893,186 +0.003916,186 +0.004147,186 +0.003865,186 +0.004189,186 +0.004018,186 +0.003830,186 +0.004140,186 +0.003803,186 +0.003855,186 +0.003847,186 +0.003834,186 +0.003831,186 +0.003836,186 +0.003793,186 +0.003835,186 +0.003768,186 +0.003816,186 +0.003799,186 +0.003921,186 +0.003870,186 +0.004070,186 +0.003696,186 +0.003704,186 +0.003752,186 +0.003701,186 +0.003696,186 +0.003698,186 +0.003802,186 +0.003829,186 +0.003843,186 +0.003912,186 +0.003834,186 +0.003880,186 +0.003977,186 +0.003990,186 +0.003975,186 +0.004196,186 +0.003918,186 +0.003972,186 +0.003786,186 +0.003989,186 +0.004024,188 +0.003897,188 +0.004031,188 +0.004214,188 +0.004064,188 +0.004241,188 +0.004052,188 +0.004212,188 +0.003884,188 +0.003797,188 +0.003846,188 +0.004174,188 +0.003773,188 +0.003844,188 +0.003915,188 +0.003933,188 +0.003868,188 +0.004128,188 +0.003906,188 +0.003799,188 +0.004139,188 +0.003761,188 +0.003768,188 +0.003649,188 +0.004111,188 +0.003630,188 +0.003623,188 +0.003623,188 +0.004186,188 +0.003697,188 +0.003625,188 +0.003631,188 +0.003623,188 +0.003940,188 +0.003590,188 +0.003624,188 +0.003612,188 +0.004065,188 +0.003658,188 +0.003619,188 +0.004117,188 +0.003771,188 +0.003812,188 +0.004109,188 +0.004308,188 +0.004025,188 +0.004218,188 +0.004310,188 +0.004067,188 +0.004055,188 +0.004184,188 +0.003942,188 +0.003944,188 +0.003933,188 +0.004197,188 +0.003830,188 +0.003792,188 +0.003786,188 +0.003824,188 +0.003799,188 +0.004284,188 +0.004693,188 +0.004667,188 +0.004699,188 +0.004437,188 +0.004234,188 +0.004512,188 +0.004764,188 +0.003925,188 +0.003896,188 +0.003828,188 +0.003627,188 +0.003622,188 +0.004032,188 +0.003930,188 +0.003808,188 +0.003687,188 +0.003625,188 +0.004004,188 +0.004522,188 +0.003834,188 +0.003986,188 +0.003676,188 +0.004082,188 +0.003910,188 +0.003707,188 +0.004000,188 +0.003937,188 +0.003630,188 +0.003981,188 +0.004197,188 +0.004261,188 +0.004293,188 +0.003882,188 +0.003632,188 +0.003609,188 +0.003895,188 +0.003628,188 +0.003638,188 +0.003625,188 +0.004031,190 +0.003732,190 +0.003713,190 +0.004069,190 +0.003967,190 +0.003814,190 +0.003748,190 +0.003742,190 +0.003794,190 +0.003921,190 +0.003743,190 +0.003948,190 +0.003822,190 +0.003917,190 +0.004039,190 +0.003837,190 +0.003886,190 +0.004334,190 +0.004670,190 +0.003918,190 +0.003767,190 +0.003926,190 +0.004045,190 +0.003812,190 +0.003883,190 +0.004148,190 +0.003789,190 +0.003733,190 +0.003982,190 +0.003831,190 +0.004218,190 +0.003887,190 +0.004065,190 +0.003829,190 +0.004073,190 +0.003854,190 +0.003864,190 +0.004040,190 +0.003908,190 +0.003708,190 +0.003750,190 +0.003847,190 +0.003919,190 +0.004953,190 +0.003872,190 +0.003915,190 +0.003805,190 +0.003935,190 +0.003760,190 +0.003736,190 +0.003736,190 +0.003952,190 +0.003751,190 +0.003966,190 +0.003744,190 +0.004105,190 +0.004057,190 +0.003848,190 +0.004103,190 +0.004007,190 +0.003991,190 +0.003958,190 +0.003858,190 +0.003898,190 +0.004309,190 +0.003779,190 +0.004400,190 +0.003842,190 +0.004690,190 +0.004212,190 +0.003952,190 +0.003825,190 +0.004132,190 +0.003949,190 +0.003970,190 +0.003901,190 +0.004336,190 +0.004022,190 +0.004203,190 +0.004286,190 +0.004137,190 +0.003975,190 +0.004159,190 +0.004018,190 +0.004249,190 +0.003971,190 +0.004063,190 +0.004069,190 +0.004161,190 +0.004036,190 +0.004065,190 +0.004090,190 +0.004051,190 +0.005002,190 +0.004184,190 +0.004001,190 +0.004155,190 +0.004062,190 +0.004114,190 +0.003998,190 +0.004504,192 +0.004226,192 +0.004231,192 +0.004154,192 +0.004391,192 +0.004256,192 +0.004164,192 +0.004621,192 +0.004542,192 +0.004177,192 +0.004269,192 +0.004290,192 +0.004861,192 +0.004628,192 +0.004849,192 +0.004740,192 +0.005128,192 +0.004511,192 +0.004285,192 +0.004344,192 +0.004368,192 +0.004324,192 +0.004270,192 +0.004247,192 +0.004214,192 +0.004177,192 +0.004196,192 +0.004271,192 +0.004291,192 +0.004231,192 +0.004307,192 +0.004301,192 +0.004323,192 +0.004325,192 +0.004395,192 +0.004233,192 +0.004210,192 +0.004187,192 +0.004353,192 +0.004866,192 +0.004385,192 +0.004047,192 +0.004525,192 +0.003945,192 +0.004156,192 +0.004179,192 +0.004386,192 +0.003930,192 +0.004117,192 +0.004327,192 +0.004368,192 +0.004014,192 +0.003910,192 +0.003904,192 +0.004190,192 +0.003906,192 +0.003925,192 +0.004126,192 +0.004216,192 +0.003886,192 +0.004132,192 +0.003998,192 +0.004251,192 +0.004098,192 +0.004112,192 +0.004504,192 +0.004272,192 +0.003909,192 +0.004141,192 +0.003941,192 +0.004337,192 +0.003940,192 +0.004117,192 +0.003910,192 +0.004424,192 +0.003919,192 +0.003898,192 +0.003902,192 +0.004022,192 +0.004072,192 +0.004431,192 +0.003967,192 +0.003941,192 +0.004591,192 +0.003937,192 +0.003917,192 +0.004209,192 +0.004130,192 +0.004293,192 +0.004051,192 +0.003910,192 +0.004307,192 +0.004201,192 +0.004005,192 +0.003908,192 +0.004203,192 +0.003900,192 +0.003901,192 +0.003943,192 +0.004501,192 +0.004094,194 +0.003974,194 +0.003975,194 +0.004121,194 +0.003976,194 +0.003980,194 +0.004015,194 +0.004034,194 +0.003976,194 +0.003973,194 +0.004004,194 +0.004086,194 +0.004075,194 +0.004420,194 +0.004343,194 +0.004312,194 +0.004001,194 +0.004387,194 +0.004344,194 +0.004544,194 +0.004207,194 +0.004339,194 +0.004008,194 +0.004578,194 +0.004317,194 +0.004009,194 +0.004012,194 +0.004546,194 +0.004054,194 +0.004310,194 +0.004004,194 +0.004506,194 +0.004113,194 +0.004008,194 +0.004088,194 +0.004520,194 +0.004227,194 +0.004167,194 +0.004084,194 +0.004735,194 +0.004056,194 +0.004024,194 +0.004008,194 +0.004922,194 +0.004059,194 +0.004162,194 +0.004479,194 +0.004472,194 +0.004063,194 +0.004017,194 +0.004182,194 +0.004476,194 +0.004032,194 +0.004005,194 +0.004184,194 +0.004252,194 +0.004021,194 +0.004021,194 +0.004307,194 +0.004103,194 +0.004144,194 +0.004259,194 +0.004192,194 +0.004050,194 +0.003998,194 +0.004037,194 +0.004022,194 +0.004178,194 +0.003980,194 +0.003993,194 +0.003995,194 +0.004106,194 +0.004053,194 +0.003975,194 +0.003972,194 +0.004192,194 +0.003993,194 +0.004004,194 +0.003973,194 +0.004068,194 +0.003973,194 +0.003975,194 +0.003972,194 +0.004128,194 +0.003974,194 +0.004098,194 +0.004575,194 +0.004296,194 +0.004130,194 +0.004183,194 +0.004120,194 +0.004470,194 +0.004030,194 +0.004261,194 +0.004005,194 +0.004232,194 +0.004353,194 +0.004020,194 +0.004014,194 +0.004370,194 +0.004545,196 +0.004109,196 +0.004114,196 +0.004780,196 +0.004173,196 +0.004120,196 +0.004174,196 +0.004525,196 +0.004153,196 +0.004320,196 +0.004240,196 +0.004641,196 +0.004273,196 +0.004153,196 +0.004230,196 +0.005091,196 +0.004129,196 +0.004116,196 +0.004529,196 +0.004654,196 +0.004161,196 +0.004103,196 +0.004477,196 +0.004167,196 +0.004105,196 +0.004087,196 +0.004363,196 +0.004107,196 +0.004086,196 +0.004084,196 +0.004302,196 +0.004159,196 +0.004212,196 +0.004335,196 +0.004361,196 +0.004112,196 +0.004103,196 +0.004086,196 +0.004496,196 +0.004112,196 +0.004112,196 +0.004083,196 +0.004287,196 +0.004234,196 +0.004107,196 +0.004129,196 +0.004353,196 +0.004115,196 +0.004112,196 +0.004107,196 +0.004223,196 +0.004106,196 +0.004081,196 +0.004080,196 +0.004291,196 +0.004178,196 +0.004245,196 +0.004458,196 +0.004203,196 +0.004119,196 +0.004101,196 +0.004108,196 +0.004204,196 +0.004112,196 +0.004143,196 +0.004096,196 +0.004264,196 +0.004084,196 +0.004080,196 +0.004083,196 +0.004164,196 +0.004152,196 +0.004085,196 +0.004126,196 +0.004152,196 +0.004085,196 +0.004088,196 +0.004084,196 +0.004290,196 +0.004087,196 +0.004122,196 +0.004348,196 +0.004431,196 +0.004117,196 +0.004116,196 +0.004105,196 +0.004325,196 +0.004107,196 +0.004109,196 +0.004101,196 +0.004195,196 +0.004197,196 +0.004107,196 +0.004083,196 +0.004143,196 +0.004084,196 +0.004081,196 +0.004082,196 +0.004170,196 +0.004112,196 +0.004318,198 +0.004213,198 +0.004337,198 +0.004214,198 +0.004221,198 +0.004428,198 +0.004661,198 +0.004246,198 +0.004222,198 +0.004220,198 +0.004276,198 +0.004216,198 +0.004216,198 +0.004216,198 +0.004276,198 +0.004217,198 +0.004213,198 +0.004215,198 +0.004296,198 +0.004217,198 +0.004212,198 +0.004212,198 +0.004280,198 +0.004213,198 +0.004212,198 +0.004426,198 +0.004250,198 +0.004213,198 +0.004275,198 +0.004559,198 +0.004351,198 +0.004217,198 +0.004215,198 +0.004253,198 +0.004269,198 +0.004281,198 +0.004236,198 +0.004277,198 +0.004218,198 +0.004223,198 +0.004214,198 +0.004282,198 +0.004261,198 +0.004236,198 +0.004212,198 +0.004287,198 +0.004214,198 +0.004212,198 +0.004216,198 +0.004355,198 +0.004310,198 +0.004226,198 +0.004401,198 +0.004622,198 +0.004228,198 +0.004243,198 +0.004255,198 +0.004280,198 +0.004212,198 +0.004213,198 +0.004215,198 +0.004380,198 +0.004283,198 +0.004212,198 +0.004255,198 +0.004258,198 +0.004219,198 +0.004212,198 +0.004250,198 +0.004269,198 +0.004219,198 +0.004212,198 +0.004329,198 +0.004275,198 +0.004237,198 +0.004275,198 +0.004463,198 +0.004471,198 +0.004213,198 +0.004217,198 +0.004276,198 +0.004217,198 +0.004242,198 +0.004213,198 +0.004380,198 +0.004281,198 +0.004233,198 +0.004236,198 +0.004297,198 +0.004251,198 +0.004215,198 +0.004216,198 +0.004283,198 +0.004217,198 +0.004213,198 +0.004256,198 +0.004317,198 +0.004218,198 +0.004213,198 +0.004384,198 +0.004875,200 +0.004366,200 +0.004361,200 +0.004399,200 +0.004415,200 +0.004386,200 +0.004407,200 +0.004432,200 +0.004415,200 +0.004395,200 +0.004359,200 +0.004429,200 +0.004360,200 +0.004360,200 +0.004363,200 +0.004422,200 +0.004364,200 +0.004360,200 +0.004365,200 +0.004492,200 +0.004363,200 +0.004359,200 +0.004645,200 +0.004694,200 +0.004384,200 +0.004401,200 +0.004458,200 +0.004390,200 +0.004361,200 +0.004362,200 +0.004420,200 +0.004363,200 +0.004360,200 +0.004362,200 +0.004421,200 +0.004365,200 +0.004360,200 +0.004395,200 +0.004394,200 +0.004364,200 +0.004419,200 +0.004473,200 +0.004394,200 +0.004363,200 +0.004360,200 +0.004659,200 +0.004696,200 +0.004363,200 +0.004363,200 +0.004435,200 +0.004360,200 +0.004365,200 +0.004362,200 +0.004423,200 +0.004365,200 +0.004360,200 +0.004391,200 +0.004401,200 +0.004360,200 +0.004360,200 +0.004427,200 +0.004361,200 +0.004364,200 +0.004360,200 +0.004512,200 +0.004462,200 +0.004412,200 +0.004441,200 +0.004719,200 +0.004610,200 +0.004381,200 +0.004391,200 +0.004394,200 +0.004364,200 +0.004359,200 +0.004427,200 +0.004363,200 +0.004368,200 +0.004362,200 +0.004423,200 +0.004364,200 +0.004360,200 +0.004360,200 +0.004427,200 +0.004361,200 +0.004359,200 +0.004365,200 +0.004485,200 +0.004360,200 +0.004359,200 +0.004434,200 +0.004607,200 +0.004493,200 +0.004360,200 +0.004424,200 +0.004388,200 +0.004379,200 +0.004362,200 +0.004463,200 +0.004364,200 +0.004613,202 +0.004510,202 +0.004569,202 +0.004569,202 +0.004556,202 +0.004572,202 +0.004568,202 +0.004506,202 +0.004510,202 +0.004647,202 +0.004511,202 +0.004512,202 +0.004506,202 +0.004837,202 +0.004759,202 +0.004527,202 +0.004569,202 +0.004513,202 +0.004506,202 +0.004507,202 +0.004567,202 +0.004573,202 +0.004506,202 +0.004505,202 +0.004572,202 +0.004508,202 +0.004508,202 +0.004534,202 +0.004607,202 +0.004505,202 +0.004505,202 +0.004670,202 +0.004512,202 +0.004506,202 +0.004507,202 +0.004731,202 +0.004904,202 +0.004541,202 +0.004570,202 +0.004554,202 +0.004550,202 +0.004508,202 +0.004588,202 +0.004510,202 +0.004506,202 +0.004534,202 +0.004548,202 +0.004505,202 +0.004509,202 +0.004566,202 +0.004510,202 +0.004506,202 +0.004505,202 +0.004651,202 +0.004515,202 +0.004506,202 +0.004507,202 +0.004745,202 +0.004779,202 +0.004541,202 +0.005156,202 +0.004703,202 +0.004594,202 +0.004549,202 +0.004622,202 +0.004536,202 +0.004507,202 +0.004540,202 +0.004541,202 +0.004506,202 +0.004577,202 +0.004567,202 +0.004510,202 +0.004508,202 +0.004508,202 +0.004650,202 +0.004569,202 +0.004506,202 +0.004534,202 +0.004766,202 +0.004821,202 +0.004531,202 +0.004595,202 +0.004530,202 +0.004506,202 +0.004537,202 +0.004541,202 +0.004552,202 +0.004505,202 +0.004571,202 +0.004506,202 +0.004541,202 +0.004512,202 +0.004737,202 +0.004575,202 +0.005103,202 +0.004676,202 +0.004671,202 +0.004511,202 +0.004506,202 +0.005009,204 +0.004842,204 +0.004876,204 +0.004731,204 +0.004710,204 +0.004678,204 +0.004683,204 +0.004779,204 +0.004634,204 +0.004630,204 +0.004762,204 +0.004729,204 +0.004662,204 +0.004660,204 +0.004727,204 +0.004658,204 +0.004705,204 +0.004630,204 +0.004776,204 +0.004630,204 +0.004630,204 +0.004693,204 +0.004734,204 +0.004899,204 +0.004656,204 +0.004711,204 +0.004653,204 +0.004658,204 +0.004669,204 +0.004662,204 +0.004720,204 +0.004629,204 +0.004696,204 +0.004633,204 +0.004635,204 +0.004657,204 +0.004666,204 +0.004630,204 +0.004630,204 +0.004703,204 +0.004710,204 +0.004629,204 +0.004632,204 +0.004732,204 +0.004913,204 +0.004954,204 +0.004754,204 +0.004660,204 +0.004650,204 +0.004663,204 +0.004727,204 +0.004678,204 +0.004629,204 +0.004697,204 +0.004631,204 +0.004630,204 +0.004633,204 +0.004696,204 +0.004629,204 +0.004630,204 +0.004660,204 +0.004747,204 +0.004632,204 +0.004634,204 +0.004871,204 +0.004808,204 +0.004954,204 +0.004905,204 +0.004718,204 +0.004630,204 +0.004633,204 +0.004883,204 +0.004657,204 +0.004652,204 +0.004680,204 +0.004664,204 +0.004670,204 +0.004635,204 +0.004735,204 +0.004636,204 +0.004629,204 +0.004642,204 +0.004760,204 +0.004714,204 +0.004629,204 +0.004696,204 +0.004633,204 +0.004911,204 +0.004861,204 +0.004721,204 +0.004634,204 +0.004653,204 +0.004802,204 +0.004630,204 +0.004630,204 +0.004633,204 +0.004692,204 +0.004636,204 +0.004629,204 +0.004660,204 +0.004924,206 +0.004774,206 +0.004782,206 +0.004954,206 +0.004774,206 +0.004768,206 +0.004833,206 +0.004776,206 +0.005023,206 +0.005055,206 +0.004881,206 +0.004827,206 +0.004799,206 +0.004937,206 +0.004790,206 +0.004772,206 +0.004799,206 +0.004842,206 +0.004774,206 +0.004841,206 +0.004854,206 +0.004783,206 +0.004769,206 +0.004809,206 +0.004883,206 +0.004772,206 +0.004780,206 +0.004834,206 +0.004769,206 +0.005048,206 +0.005067,206 +0.004833,206 +0.004809,206 +0.004795,206 +0.004867,206 +0.004885,206 +0.004772,206 +0.004829,206 +0.004773,206 +0.004769,206 +0.004774,206 +0.004830,206 +0.004772,206 +0.004769,206 +0.004840,206 +0.004875,206 +0.004769,206 +0.004771,206 +0.004831,206 +0.004773,206 +0.005113,206 +0.007995,206 +0.008452,206 +0.008079,206 +0.004899,206 +0.004804,206 +0.004890,206 +0.004867,206 +0.004817,206 +0.004849,206 +0.004793,206 +0.004769,206 +0.004773,206 +0.004853,206 +0.004848,206 +0.004771,206 +0.004855,206 +0.004816,206 +0.004872,206 +0.005138,206 +0.004869,206 +0.004817,206 +0.004909,206 +0.004867,206 +0.004769,206 +0.004772,206 +0.004822,206 +0.004817,206 +0.004771,206 +0.004769,206 +0.004853,206 +0.004775,206 +0.004769,206 +0.004810,206 +0.004889,206 +0.004830,206 +0.004773,206 +0.004847,206 +0.004771,206 +0.004953,206 +0.005091,206 +0.004828,206 +0.004772,206 +0.004789,206 +0.004878,206 +0.004794,206 +0.004769,206 +0.004853,206 +0.004769,206 +0.004771,206 +0.005036,208 +0.005039,208 +0.004925,208 +0.004919,208 +0.005021,208 +0.005021,208 +0.004919,208 +0.004978,208 +0.004968,208 +0.004918,208 +0.005219,208 +0.005136,208 +0.004977,208 +0.005095,208 +0.005023,208 +0.004945,208 +0.004943,208 +0.005017,208 +0.004997,208 +0.004923,208 +0.004930,208 +0.005022,208 +0.004922,208 +0.004961,208 +0.004998,208 +0.004979,208 +0.004918,208 +0.004960,208 +0.004986,208 +0.004919,208 +0.005191,208 +0.005119,208 +0.004947,208 +0.004944,208 +0.004981,208 +0.004919,208 +0.005006,208 +0.004949,208 +0.004951,208 +0.004922,208 +0.004920,208 +0.004983,208 +0.004919,208 +0.004918,208 +0.004981,208 +0.005008,208 +0.004927,208 +0.004949,208 +0.004953,208 +0.004924,208 +0.005130,208 +0.005277,208 +0.004958,208 +0.004919,208 +0.005014,208 +0.004946,208 +0.004918,208 +0.004952,208 +0.004955,208 +0.004919,208 +0.004920,208 +0.004986,208 +0.004918,208 +0.004918,208 +0.004971,208 +0.004995,208 +0.004938,208 +0.005102,208 +0.005016,208 +0.004951,208 +0.005049,208 +0.005315,208 +0.004940,208 +0.004971,208 +0.005001,208 +0.004947,208 +0.004945,208 +0.004969,208 +0.005006,208 +0.004923,208 +0.004919,208 +0.004984,208 +0.004922,208 +0.004919,208 +0.004948,208 +0.005040,208 +0.005027,208 +0.004921,208 +0.004980,208 +0.004925,208 +0.004918,208 +0.005315,208 +0.005033,208 +0.004925,208 +0.004946,208 +0.004956,208 +0.004919,208 +0.004922,208 +0.004980,208 +0.004922,208 +0.005214,210 +0.005162,210 +0.005099,210 +0.005105,210 +0.005186,210 +0.005162,210 +0.005276,210 +0.005236,210 +0.005176,210 +0.005095,210 +0.005244,210 +0.005476,210 +0.005100,210 +0.005196,210 +0.005180,210 +0.005102,210 +0.005095,210 +0.005179,210 +0.005141,210 +0.005170,210 +0.005148,210 +0.005152,210 +0.005102,210 +0.005099,210 +0.005162,210 +0.005164,210 +0.005137,210 +0.005179,210 +0.005100,210 +0.005098,210 +0.005395,210 +0.005238,210 +0.005161,210 +0.005177,210 +0.005125,210 +0.005229,210 +0.005146,210 +0.005129,210 +0.005099,210 +0.005098,210 +0.005160,210 +0.005096,210 +0.005100,210 +0.005157,210 +0.005181,210 +0.005095,210 +0.005163,210 +0.005100,210 +0.005097,210 +0.005175,210 +0.005415,210 +0.005359,210 +0.005202,210 +0.005224,210 +0.005125,210 +0.005177,210 +0.005315,210 +0.005119,210 +0.005096,210 +0.005162,210 +0.005102,210 +0.005095,210 +0.005125,210 +0.005134,210 +0.005175,210 +0.005097,210 +0.005196,210 +0.005098,210 +0.005097,210 +0.005353,210 +0.005342,210 +0.005119,210 +0.005177,210 +0.005102,210 +0.005146,210 +0.005160,210 +0.005101,210 +0.005107,210 +0.005126,210 +0.005128,210 +0.005100,210 +0.005098,210 +0.005166,210 +0.005230,210 +0.005131,210 +0.005158,210 +0.005099,210 +0.005097,210 +0.005200,210 +0.005421,210 +0.005113,210 +0.005148,210 +0.005129,210 +0.005099,210 +0.005100,210 +0.005155,210 +0.005172,210 +0.005104,210 +0.005160,210 +0.005100,210 +0.005338,212 +0.005299,212 +0.005295,212 +0.005210,212 +0.005338,212 +0.005213,212 +0.005208,212 +0.005261,212 +0.005489,212 +0.005501,212 +0.005398,212 +0.005309,212 +0.005229,212 +0.005254,212 +0.005347,212 +0.005216,212 +0.005218,212 +0.005280,212 +0.005212,212 +0.005255,212 +0.005271,212 +0.005316,212 +0.005210,212 +0.005294,212 +0.005210,212 +0.005210,212 +0.005296,212 +0.005481,212 +0.005432,212 +0.005325,212 +0.005243,212 +0.005295,212 +0.005212,212 +0.005296,212 +0.005209,212 +0.005213,212 +0.005270,212 +0.005212,212 +0.005210,212 +0.005275,212 +0.005297,212 +0.005215,212 +0.005271,212 +0.005213,212 +0.005209,212 +0.005241,212 +0.005435,212 +0.005482,212 +0.005306,212 +0.005241,212 +0.005210,212 +0.005216,212 +0.005293,212 +0.005209,212 +0.005214,212 +0.005270,212 +0.005212,212 +0.005214,212 +0.005270,212 +0.005257,212 +0.005216,212 +0.005388,212 +0.005245,212 +0.005221,212 +0.005250,212 +0.005424,212 +0.005478,212 +0.005264,212 +0.005265,212 +0.005257,212 +0.005250,212 +0.005272,212 +0.005208,212 +0.005213,212 +0.005271,212 +0.005214,212 +0.005270,212 +0.005321,212 +0.005319,212 +0.005250,212 +0.005280,212 +0.005211,212 +0.005216,212 +0.005238,212 +0.005358,212 +0.005522,212 +0.005261,212 +0.005268,212 +0.005213,212 +0.005252,212 +0.005271,212 +0.005213,212 +0.005221,212 +0.005293,212 +0.005210,212 +0.005214,212 +0.005291,212 +0.005254,212 +0.005251,212 +0.005415,212 +0.005511,214 +0.005377,214 +0.005431,214 +0.005497,214 +0.005634,214 +0.005582,214 +0.005380,214 +0.005369,214 +0.005434,214 +0.005454,214 +0.005416,214 +0.005450,214 +0.005415,214 +0.005371,214 +0.005402,214 +0.005410,214 +0.005471,214 +0.005407,214 +0.005401,214 +0.005369,214 +0.005376,214 +0.005434,214 +0.005608,214 +0.005504,214 +0.005458,214 +0.005459,214 +0.005456,214 +0.005460,214 +0.005475,214 +0.005412,214 +0.005440,214 +0.005371,214 +0.005371,214 +0.005431,214 +0.005435,214 +0.005369,214 +0.005473,214 +0.005393,214 +0.005372,214 +0.005430,214 +0.005473,214 +0.005797,214 +0.005643,214 +0.005410,214 +0.005420,214 +0.005513,214 +0.005400,214 +0.005405,214 +0.005477,214 +0.005369,214 +0.005369,214 +0.005436,214 +0.005374,214 +0.005494,214 +0.005534,214 +0.005442,214 +0.005402,214 +0.005645,214 +0.005529,214 +0.005776,214 +0.005501,214 +0.005429,214 +0.005412,214 +0.005443,214 +0.005445,214 +0.005392,214 +0.005399,214 +0.005408,214 +0.005370,214 +0.005399,214 +0.005412,214 +0.005515,214 +0.005474,214 +0.005406,214 +0.005369,214 +0.005374,214 +0.005431,214 +0.005568,214 +0.005725,214 +0.005470,214 +0.005413,214 +0.005427,214 +0.005471,214 +0.005412,214 +0.005399,214 +0.005446,214 +0.005378,214 +0.005411,214 +0.005457,214 +0.005401,214 +0.005452,214 +0.005452,214 +0.005376,214 +0.005369,214 +0.005473,214 +0.005397,214 +0.005785,214 +0.005732,214 +0.005391,214 +0.005625,214 +0.006151,216 +0.005788,216 +0.006171,216 +0.006296,216 +0.006094,216 +0.006567,216 +0.008187,216 +0.006341,216 +0.006257,216 +0.006222,216 +0.006249,216 +0.006635,216 +0.007265,216 +0.006322,216 +0.006406,216 +0.006345,216 +0.006161,216 +0.006079,216 +0.007007,216 +0.006613,216 +0.006141,216 +0.006247,216 +0.006074,216 +0.007351,216 +0.005990,216 +0.006103,216 +0.007244,216 +0.007006,216 +0.008089,216 +0.006477,216 +0.007051,216 +0.007433,216 +0.007063,216 +0.006501,216 +0.006232,216 +0.006415,216 +0.006916,216 +0.007117,216 +0.007403,216 +0.006350,216 +0.007760,216 +0.006184,216 +0.005968,216 +0.007188,216 +0.006074,216 +0.007077,216 +0.005790,216 +0.006115,216 +0.008246,216 +0.007490,216 +0.007457,216 +0.005645,216 +0.006889,216 +0.006281,216 +0.006042,216 +0.006582,216 +0.006166,216 +0.006802,216 +0.006558,216 +0.006041,216 +0.006568,216 +0.006179,216 +0.006179,216 +0.006787,216 +0.007046,216 +0.008044,216 +0.006161,216 +0.006380,216 +0.006220,216 +0.005972,216 +0.007988,216 +0.006318,216 +0.007219,216 +0.007577,216 +0.007820,216 +0.006773,216 +0.006201,216 +0.006750,216 +0.006430,216 +0.006074,216 +0.006347,216 +0.005806,216 +0.006344,216 +0.006285,216 +0.006094,216 +0.006686,216 +0.005977,216 +0.005836,216 +0.006300,216 +0.007047,216 +0.006276,216 +0.006208,216 +0.005685,216 +0.006487,216 +0.006019,216 +0.005781,216 +0.007648,216 +0.005997,216 +0.007177,216 +0.006766,216 +0.006210,218 +0.007256,218 +0.005898,218 +0.006264,218 +0.009736,218 +0.005934,218 +0.006642,218 +0.005758,218 +0.006376,218 +0.006204,218 +0.005705,218 +0.006358,218 +0.005827,218 +0.005790,218 +0.006412,218 +0.005781,218 +0.006085,218 +0.006048,218 +0.005698,218 +0.006003,218 +0.006033,218 +0.005719,218 +0.005811,218 +0.005729,218 +0.005720,218 +0.005784,218 +0.005733,218 +0.005670,218 +0.005820,218 +0.005687,218 +0.005769,218 +0.005788,218 +0.005663,218 +0.005668,218 +0.005807,218 +0.005668,218 +0.005742,218 +0.006086,218 +0.005812,218 +0.005815,218 +0.005765,218 +0.005701,218 +0.005771,218 +0.005702,218 +0.005669,218 +0.005714,218 +0.005747,218 +0.005663,218 +0.005804,218 +0.005729,218 +0.005664,218 +0.005859,218 +0.005708,218 +0.005690,218 +0.005978,218 +0.006048,218 +0.005702,218 +0.005724,218 +0.005713,218 +0.005784,218 +0.006000,218 +0.005901,218 +0.005784,218 +0.006205,218 +0.005706,218 +0.005842,218 +0.005730,218 +0.005667,218 +0.005869,218 +0.005789,218 +0.005679,218 +0.005993,218 +0.006072,218 +0.005793,218 +0.005816,218 +0.006076,218 +0.005689,218 +0.005872,218 +0.006006,218 +0.005817,218 +0.005734,218 +0.005828,218 +0.005804,218 +0.005768,218 +0.005742,218 +0.005726,218 +0.005716,218 +0.005692,218 +0.005666,218 +0.006121,218 +0.005762,218 +0.005669,218 +0.005726,218 +0.005705,218 +0.005708,218 +0.005705,218 +0.005665,218 +0.005668,218 +0.005781,218 +0.005691,218 +0.006165,220 +0.005818,220 +0.005839,220 +0.005879,220 +0.005838,220 +0.005813,220 +0.006274,220 +0.005964,220 +0.005843,220 +0.005911,220 +0.005859,220 +0.005875,220 +0.005888,220 +0.005807,220 +0.005817,220 +0.005982,220 +0.005889,220 +0.006092,220 +0.005858,220 +0.005828,220 +0.005898,220 +0.005814,220 +0.005815,220 +0.006025,220 +0.005997,220 +0.005881,220 +0.005914,220 +0.005823,220 +0.005818,220 +0.005881,220 +0.005815,220 +0.005816,220 +0.005895,220 +0.005814,220 +0.005960,220 +0.005851,220 +0.005817,220 +0.005895,220 +0.005836,220 +0.005965,220 +0.006084,220 +0.005981,220 +0.005879,220 +0.005960,220 +0.005945,220 +0.005819,220 +0.005910,220 +0.005815,220 +0.006064,220 +0.005851,220 +0.005837,220 +0.006360,220 +0.005851,220 +0.005961,220 +0.006022,220 +0.005815,220 +0.005884,220 +0.006152,220 +0.006042,220 +0.005933,220 +0.005918,220 +0.005819,220 +0.005834,220 +0.005856,220 +0.005812,220 +0.005853,220 +0.005851,220 +0.005817,220 +0.005985,220 +0.005819,220 +0.005813,220 +0.005885,220 +0.005815,220 +0.005817,220 +0.006085,220 +0.006280,220 +0.005859,220 +0.005925,220 +0.005816,220 +0.005828,220 +0.005856,220 +0.005813,220 +0.005826,220 +0.005852,220 +0.005817,220 +0.005921,220 +0.005824,220 +0.005839,220 +0.005873,220 +0.005821,220 +0.005856,220 +0.006110,220 +0.006147,220 +0.005837,220 +0.005921,220 +0.005834,220 +0.005838,220 +0.005865,220 +0.005813,220 +0.005827,220 +0.006199,222 +0.006047,222 +0.006113,222 +0.005991,222 +0.005998,222 +0.006044,222 +0.005992,222 +0.005992,222 +0.006332,222 +0.006240,222 +0.006050,222 +0.006050,222 +0.006035,222 +0.006060,222 +0.006039,222 +0.006035,222 +0.006087,222 +0.005991,222 +0.006057,222 +0.006044,222 +0.005994,222 +0.006002,222 +0.006035,222 +0.006061,222 +0.006153,222 +0.006487,222 +0.006039,222 +0.006085,222 +0.006020,222 +0.006097,222 +0.006120,222 +0.006067,222 +0.006035,222 +0.006069,222 +0.005991,222 +0.006187,222 +0.005994,222 +0.005995,222 +0.006040,222 +0.005995,222 +0.005993,222 +0.006250,222 +0.006297,222 +0.006125,222 +0.006036,222 +0.006073,222 +0.006072,222 +0.005997,222 +0.005991,222 +0.006043,222 +0.005993,222 +0.006054,222 +0.006039,222 +0.005995,222 +0.006002,222 +0.006036,222 +0.005991,222 +0.006044,222 +0.006302,222 +0.006241,222 +0.006090,222 +0.006012,222 +0.006042,222 +0.006062,222 +0.005993,222 +0.006003,222 +0.006059,222 +0.005991,222 +0.006520,222 +0.005994,222 +0.006099,222 +0.006051,222 +0.006056,222 +0.006015,222 +0.006136,222 +0.006390,222 +0.006093,222 +0.006011,222 +0.006018,222 +0.006080,222 +0.006039,222 +0.006015,222 +0.006043,222 +0.005996,222 +0.006123,222 +0.006034,222 +0.005996,222 +0.006089,222 +0.005991,222 +0.005995,222 +0.006039,222 +0.006226,222 +0.006255,222 +0.006094,222 +0.006012,222 +0.006004,222 +0.006030,222 +0.005996,222 +0.006041,222 +0.005995,222 +0.006544,224 +0.006214,224 +0.006159,224 +0.006201,224 +0.006209,224 +0.006269,224 +0.006196,224 +0.006284,224 +0.006576,224 +0.006228,224 +0.006259,224 +0.006181,224 +0.006204,224 +0.006160,224 +0.006206,224 +0.006182,224 +0.006215,224 +0.006209,224 +0.006159,224 +0.006160,224 +0.006209,224 +0.006219,224 +0.006184,224 +0.006200,224 +0.006813,224 +0.006231,224 +0.006438,224 +0.006208,224 +0.006394,224 +0.006190,224 +0.006206,224 +0.006190,224 +0.006220,224 +0.006259,224 +0.006164,224 +0.006159,224 +0.006209,224 +0.006155,224 +0.006170,224 +0.006197,224 +0.006456,224 +0.006614,224 +0.006198,224 +0.006202,224 +0.006229,224 +0.006181,224 +0.006217,224 +0.006183,224 +0.006216,224 +0.006229,224 +0.006287,224 +0.006185,224 +0.006209,224 +0.006493,224 +0.006197,224 +0.006170,224 +0.006525,224 +0.006446,224 +0.006177,224 +0.006217,224 +0.006214,224 +0.006162,224 +0.006206,224 +0.006165,224 +0.006261,224 +0.006237,224 +0.006162,224 +0.006220,224 +0.006216,224 +0.006155,224 +0.006170,224 +0.006198,224 +0.006455,224 +0.006439,224 +0.006188,224 +0.006182,224 +0.006247,224 +0.006160,224 +0.006166,224 +0.006200,224 +0.006179,224 +0.006269,224 +0.006159,224 +0.006158,224 +0.006210,224 +0.006179,224 +0.006262,224 +0.006195,224 +0.006400,224 +0.006445,224 +0.006241,224 +0.006192,224 +0.006266,224 +0.006244,224 +0.006168,224 +0.006225,224 +0.006156,224 +0.006312,224 +0.006159,224 +0.006161,224 +0.006549,226 +0.006319,226 +0.006334,226 +0.006360,226 +0.006602,226 +0.006872,226 +0.006318,226 +0.006371,226 +0.006378,226 +0.006344,226 +0.006397,226 +0.006370,226 +0.006379,226 +0.006397,226 +0.006319,226 +0.006400,226 +0.006359,226 +0.006319,226 +0.006389,226 +0.006320,226 +0.006569,226 +0.006630,226 +0.006340,226 +0.006420,226 +0.006365,226 +0.006322,226 +0.006366,226 +0.006323,226 +0.006906,226 +0.006387,226 +0.006637,226 +0.006371,226 +0.006345,226 +0.006332,226 +0.006357,226 +0.006324,226 +0.006945,226 +0.006377,226 +0.006349,226 +0.006376,226 +0.006559,226 +0.006351,226 +0.006320,226 +0.006376,226 +0.006434,226 +0.006335,226 +0.006330,226 +0.006359,226 +0.006322,226 +0.006369,226 +0.006323,226 +0.006419,226 +0.006789,226 +0.006450,226 +0.006401,226 +0.006351,226 +0.006318,226 +0.006375,226 +0.006323,226 +0.006379,226 +0.006371,226 +0.006317,226 +0.006370,226 +0.006323,226 +0.006361,226 +0.006372,226 +0.006318,226 +0.006571,226 +0.006741,226 +0.006366,226 +0.006431,226 +0.006340,226 +0.006364,226 +0.006402,226 +0.006318,226 +0.006461,226 +0.006320,226 +0.006319,226 +0.006371,226 +0.006320,226 +0.006330,226 +0.006366,226 +0.006392,226 +0.006721,226 +0.006562,226 +0.006344,226 +0.006403,226 +0.006320,226 +0.006370,226 +0.006322,226 +0.006342,226 +0.006452,226 +0.006320,226 +0.006332,226 +0.006359,226 +0.006359,226 +0.006367,226 +0.006324,226 +0.006318,226 +0.006649,226 +0.007106,228 +0.006580,228 +0.006485,228 +0.006484,228 +0.006534,228 +0.006483,228 +0.006636,228 +0.006547,228 +0.006541,228 +0.006579,228 +0.006543,228 +0.006496,228 +0.006526,228 +0.006482,228 +0.006787,228 +0.006789,228 +0.006515,228 +0.006587,228 +0.006502,228 +0.006544,228 +0.006491,228 +0.006656,228 +0.006526,228 +0.006488,228 +0.006556,228 +0.006483,228 +0.006483,228 +0.006536,228 +0.006488,228 +0.006665,228 +0.006857,228 +0.006545,228 +0.006555,228 +0.006531,228 +0.006544,228 +0.006483,228 +0.006527,228 +0.006643,228 +0.006481,228 +0.006529,228 +0.006496,228 +0.006636,228 +0.006586,228 +0.006502,228 +0.006495,228 +0.007019,228 +0.006552,228 +0.006599,228 +0.006554,228 +0.006495,228 +0.006529,228 +0.006485,228 +0.006610,228 +0.006486,228 +0.006483,228 +0.006535,228 +0.006484,228 +0.006531,228 +0.006488,228 +0.006585,228 +0.006792,228 +0.006762,228 +0.006576,228 +0.006481,228 +0.006486,228 +0.006535,228 +0.006481,228 +0.006615,228 +0.006484,228 +0.006499,228 +0.006538,228 +0.006495,228 +0.006501,228 +0.006530,228 +0.006481,228 +0.006686,228 +0.006840,228 +0.006519,228 +0.006612,228 +0.006503,228 +0.006565,228 +0.006530,228 +0.006877,228 +0.006551,228 +0.006489,228 +0.006533,228 +0.006620,228 +0.006507,228 +0.006530,228 +0.006486,228 +0.006534,228 +0.006951,228 +0.006530,228 +0.006585,228 +0.006482,228 +0.006564,228 +0.006488,228 +0.006579,228 +0.006645,228 +0.006481,228 +0.006906,230 +0.006664,230 +0.006654,230 +0.006708,230 +0.006732,230 +0.007061,230 +0.007030,230 +0.007347,230 +0.007360,230 +0.007459,230 +0.007354,230 +0.007573,230 +0.007686,230 +0.007985,230 +0.007109,230 +0.007216,230 +0.007353,230 +0.008097,230 +0.009631,230 +0.007771,230 +0.009133,230 +0.007343,230 +0.008509,230 +0.007966,230 +0.007210,230 +0.008854,230 +0.008231,230 +0.007544,230 +0.008028,230 +0.007625,230 +0.007927,230 +0.008986,230 +0.008489,230 +0.009163,230 +0.011969,230 +0.011834,230 +0.008479,230 +0.007426,230 +0.007346,230 +0.008399,230 +0.008797,230 +0.007532,230 +0.007414,230 +0.006996,230 +0.007756,230 +0.006975,230 +0.007077,230 +0.007386,230 +0.007467,230 +0.007776,230 +0.007609,230 +0.007568,230 +0.007361,230 +0.007952,230 +0.007071,230 +0.008761,230 +0.007205,230 +0.008618,230 +0.007297,230 +0.007950,230 +0.007024,230 +0.008121,230 +0.007081,230 +0.007821,230 +0.007059,230 +0.006998,230 +0.007775,230 +0.007005,230 +0.008090,230 +0.007026,230 +0.007915,230 +0.007400,230 +0.007968,230 +0.007076,230 +0.006918,230 +0.007954,230 +0.006799,230 +0.008414,230 +0.006951,230 +0.008150,230 +0.007105,230 +0.008124,230 +0.006950,230 +0.006990,230 +0.008277,230 +0.006900,230 +0.007570,230 +0.007040,230 +0.007710,230 +0.007099,230 +0.006936,230 +0.007400,230 +0.006832,230 +0.006759,230 +0.006929,230 +0.006787,230 +0.006863,230 +0.006921,230 +0.007279,230 +0.008303,230 +0.007663,232 +0.008658,232 +0.006971,232 +0.007331,232 +0.007265,232 +0.007715,232 +0.008007,232 +0.007884,232 +0.007827,232 +0.008317,232 +0.007851,232 +0.008945,232 +0.008069,232 +0.008027,232 +0.008219,232 +0.010375,232 +0.009157,232 +0.007510,232 +0.008506,232 +0.007659,232 +0.007794,232 +0.008050,232 +0.007744,232 +0.008130,232 +0.008074,232 +0.009084,232 +0.007656,232 +0.007832,232 +0.007544,232 +0.007925,232 +0.007558,232 +0.008052,232 +0.007596,232 +0.007857,232 +0.007764,232 +0.008353,232 +0.007662,232 +0.007970,232 +0.007488,232 +0.007856,232 +0.007517,232 +0.007807,232 +0.007618,232 +0.007640,232 +0.007767,232 +0.007442,232 +0.008778,232 +0.008466,232 +0.009341,232 +0.007269,232 +0.007878,232 +0.007136,232 +0.007985,232 +0.007516,232 +0.008181,232 +0.007519,232 +0.007891,232 +0.007465,232 +0.008925,232 +0.007472,232 +0.007641,232 +0.008206,232 +0.007339,232 +0.008165,232 +0.007036,232 +0.008310,232 +0.007241,232 +0.007607,232 +0.007111,232 +0.007456,232 +0.007123,232 +0.007018,232 +0.007113,232 +0.006921,232 +0.007212,232 +0.007295,232 +0.006936,232 +0.006939,232 +0.007001,232 +0.006917,232 +0.006998,232 +0.006892,232 +0.006963,232 +0.006877,232 +0.006901,232 +0.006871,232 +0.006835,232 +0.006900,232 +0.006971,232 +0.007192,232 +0.006898,232 +0.006905,232 +0.006866,232 +0.006936,232 +0.007135,232 +0.006877,232 +0.006894,232 +0.006838,232 +0.006897,232 +0.006900,232 +0.007237,234 +0.007229,234 +0.007226,234 +0.007570,234 +0.007112,234 +0.007043,234 +0.007135,234 +0.007101,234 +0.007239,234 +0.007078,234 +0.007109,234 +0.007069,234 +0.007125,234 +0.007131,234 +0.007047,234 +0.007088,234 +0.007028,234 +0.007460,234 +0.007143,234 +0.007030,234 +0.007112,234 +0.007027,234 +0.007208,234 +0.007024,234 +0.007050,234 +0.007111,234 +0.007026,234 +0.007117,234 +0.007020,234 +0.007249,234 +0.007210,234 +0.007394,234 +0.007278,234 +0.007165,234 +0.007221,234 +0.007963,234 +0.009203,234 +0.008000,234 +0.007206,234 +0.007376,234 +0.007202,234 +0.007165,234 +0.007109,234 +0.007178,234 +0.007352,234 +0.007577,234 +0.007112,234 +0.007174,234 +0.007093,234 +0.007694,234 +0.007190,234 +0.007050,234 +0.007141,234 +0.007084,234 +0.007142,234 +0.007064,234 +0.007727,234 +0.007223,234 +0.007325,234 +0.007454,234 +0.007197,234 +0.007191,234 +0.007104,234 +0.007222,234 +0.007170,234 +0.007125,234 +0.007088,234 +0.007044,234 +0.007124,234 +0.007086,234 +0.007128,234 +0.007025,234 +0.007278,234 +0.007411,234 +0.007062,234 +0.007125,234 +0.007030,234 +0.007122,234 +0.007101,234 +0.007102,234 +0.007911,234 +0.007742,234 +0.008329,234 +0.010380,234 +0.008026,234 +0.008500,234 +0.008256,234 +0.008138,234 +0.008184,234 +0.008851,234 +0.008628,234 +0.009289,234 +0.008313,234 +0.007911,234 +0.007843,234 +0.008029,234 +0.007784,234 +0.007991,234 +0.008368,234 +0.008967,234 +0.008834,236 +0.008266,236 +0.008228,236 +0.008136,236 +0.007759,236 +0.007821,236 +0.007737,236 +0.008175,236 +0.007579,236 +0.007759,236 +0.007853,236 +0.008212,236 +0.007521,236 +0.007879,236 +0.007829,236 +0.008431,236 +0.007612,236 +0.007583,236 +0.007709,236 +0.007579,236 +0.007473,236 +0.007549,236 +0.007520,236 +0.007821,236 +0.007461,236 +0.007356,236 +0.007291,236 +0.007332,236 +0.007349,236 +0.007236,236 +0.007218,236 +0.007238,236 +0.007243,236 +0.007231,236 +0.007609,236 +0.007350,236 +0.007396,236 +0.007753,236 +0.007261,236 +0.007650,236 +0.007419,236 +0.007379,236 +0.007389,236 +0.007298,236 +0.007704,236 +0.007321,236 +0.007505,236 +0.007313,236 +0.007608,236 +0.007351,236 +0.007657,236 +0.007536,236 +0.007321,236 +0.008096,236 +0.007385,236 +0.007427,236 +0.007215,236 +0.007849,236 +0.007234,236 +0.007367,236 +0.007348,236 +0.007299,236 +0.007194,236 +0.007443,236 +0.007902,236 +0.007590,236 +0.007554,236 +0.007431,236 +0.007748,236 +0.007674,236 +0.007683,236 +0.007500,236 +0.007520,236 +0.007672,236 +0.007701,236 +0.007689,236 +0.007781,236 +0.007872,236 +0.007630,236 +0.007828,236 +0.007667,236 +0.008095,236 +0.008005,236 +0.007886,236 +0.011243,236 +0.008679,236 +0.007297,236 +0.007512,236 +0.007207,236 +0.007647,236 +0.007748,236 +0.007369,236 +0.007605,236 +0.007382,236 +0.008036,236 +0.007378,236 +0.007765,236 +0.007261,236 +0.008214,236 +0.007343,236 +0.008624,238 +0.007429,238 +0.008038,238 +0.007670,238 +0.007491,238 +0.007370,238 +0.007469,238 +0.007570,238 +0.007449,238 +0.007586,238 +0.007496,238 +0.007464,238 +0.007847,238 +0.007520,238 +0.007370,238 +0.007655,238 +0.007782,238 +0.007511,238 +0.007451,238 +0.007444,238 +0.007455,238 +0.007374,238 +0.007449,238 +0.007378,238 +0.007449,238 +0.007370,238 +0.007508,238 +0.007370,238 +0.007410,238 +0.007805,238 +0.007561,238 +0.007425,238 +0.007431,238 +0.007451,238 +0.007467,238 +0.007449,238 +0.007414,238 +0.007432,238 +0.007401,238 +0.007409,238 +0.007371,238 +0.007368,238 +0.007521,238 +0.007874,238 +0.007490,238 +0.007442,238 +0.007476,238 +0.007785,238 +0.007454,238 +0.007751,238 +0.007405,238 +0.007598,238 +0.007370,238 +0.007409,238 +0.007369,238 +0.007427,238 +0.008021,238 +0.007421,238 +0.007365,238 +0.007567,238 +0.008946,238 +0.008478,238 +0.010571,238 +0.009349,238 +0.011127,238 +0.009461,238 +0.008439,238 +0.008230,238 +0.008482,238 +0.009090,238 +0.008313,238 +0.008916,238 +0.009600,238 +0.009170,238 +0.008555,238 +0.008817,238 +0.008428,238 +0.008248,238 +0.008378,238 +0.008190,238 +0.008983,238 +0.010074,238 +0.009864,238 +0.009125,238 +0.008735,238 +0.007859,238 +0.007874,238 +0.007669,238 +0.007687,238 +0.007573,238 +0.008210,238 +0.008295,238 +0.008358,238 +0.007898,238 +0.008410,238 +0.007990,238 +0.007957,238 +0.008097,238 +0.008056,238 +0.007972,238 +0.008653,240 +0.008411,240 +0.009443,240 +0.010387,240 +0.009186,240 +0.009200,240 +0.008355,240 +0.008307,240 +0.008691,240 +0.009048,240 +0.009448,240 +0.008462,240 +0.010544,240 +0.009193,240 +0.010076,240 +0.008931,240 +0.008495,240 +0.008309,240 +0.008280,240 +0.008282,240 +0.008086,240 +0.008305,240 +0.008257,240 +0.008537,240 +0.007775,240 +0.008803,240 +0.008156,240 +0.008703,240 +0.007829,240 +0.009971,240 +0.010236,240 +0.011200,240 +0.008115,240 +0.009301,240 +0.007973,240 +0.008482,240 +0.007937,240 +0.008784,240 +0.013206,240 +0.008126,240 +0.008587,240 +0.008093,240 +0.008492,240 +0.007942,240 +0.008638,240 +0.007867,240 +0.008002,240 +0.007985,240 +0.008097,240 +0.008768,240 +0.008668,240 +0.007959,240 +0.008045,240 +0.007915,240 +0.007964,240 +0.009017,240 +0.010591,240 +0.010042,240 +0.011167,240 +0.010816,240 +0.008555,240 +0.010858,240 +0.009223,240 +0.010121,240 +0.008837,240 +0.008203,240 +0.008618,240 +0.008413,240 +0.008477,240 +0.008723,240 +0.008598,240 +0.008431,240 +0.008652,240 +0.008653,240 +0.008365,240 +0.008711,240 +0.008385,240 +0.008926,240 +0.008361,240 +0.008319,240 +0.008091,240 +0.008054,240 +0.008121,240 +0.008434,240 +0.010000,240 +0.011078,240 +0.009180,240 +0.008554,240 +0.008533,240 +0.008538,240 +0.008345,240 +0.008361,240 +0.009772,240 +0.009039,240 +0.008347,240 +0.010383,240 +0.011302,240 +0.009205,240 +0.012062,240 +0.009639,240 +0.010181,242 +0.009269,242 +0.009006,242 +0.009717,242 +0.008504,242 +0.010585,242 +0.008997,242 +0.011064,242 +0.010893,242 +0.009848,242 +0.010563,242 +0.009299,242 +0.010176,242 +0.009776,242 +0.013347,242 +0.009719,242 +0.009009,242 +0.009491,242 +0.009756,242 +0.008917,242 +0.009300,242 +0.008440,242 +0.009133,242 +0.008241,242 +0.008374,242 +0.008364,242 +0.008505,242 +0.008798,242 +0.008924,242 +0.009366,242 +0.009250,242 +0.008463,242 +0.008386,242 +0.009386,242 +0.008959,242 +0.008696,242 +0.008675,242 +0.009764,242 +0.008470,242 +0.008959,242 +0.008126,242 +0.008964,242 +0.007957,242 +0.008368,242 +0.007936,242 +0.008271,242 +0.007890,242 +0.008236,242 +0.008135,242 +0.008964,242 +0.007986,242 +0.008580,242 +0.008036,242 +0.008817,242 +0.007993,242 +0.008811,242 +0.008000,242 +0.008834,242 +0.007999,242 +0.008670,242 +0.008321,242 +0.008742,242 +0.008018,242 +0.008544,242 +0.007957,242 +0.008447,242 +0.008035,242 +0.008698,242 +0.007998,242 +0.009916,242 +0.008943,242 +0.008820,242 +0.008849,242 +0.008685,242 +0.009261,242 +0.010206,242 +0.009261,242 +0.008096,242 +0.008463,242 +0.007979,242 +0.008195,242 +0.007949,242 +0.008773,242 +0.008035,242 +0.009100,242 +0.008042,242 +0.008596,242 +0.008102,242 +0.008360,242 +0.008007,242 +0.008242,242 +0.007991,242 +0.008185,242 +0.007931,242 +0.008300,242 +0.007946,242 +0.009118,242 +0.008265,242 +0.008771,242 +0.008246,242 +0.008730,244 +0.008402,244 +0.009118,244 +0.008417,244 +0.009298,244 +0.008481,244 +0.009313,244 +0.008668,244 +0.008875,244 +0.008600,244 +0.008772,244 +0.009428,244 +0.008755,244 +0.009235,244 +0.009010,244 +0.010082,244 +0.008771,244 +0.010093,244 +0.008906,244 +0.009613,244 +0.009461,244 +0.009210,244 +0.010194,244 +0.009208,244 +0.011270,244 +0.009555,244 +0.009779,244 +0.010409,244 +0.009468,244 +0.009655,244 +0.008584,244 +0.008506,244 +0.008732,244 +0.008071,244 +0.008374,244 +0.008024,244 +0.008208,244 +0.008216,244 +0.008539,244 +0.008170,244 +0.008311,244 +0.009333,244 +0.010456,244 +0.009038,244 +0.009488,244 +0.008646,244 +0.008772,244 +0.008282,244 +0.008996,244 +0.013515,244 +0.011108,244 +0.009122,244 +0.009141,244 +0.010592,244 +0.012973,244 +0.010900,244 +0.008776,244 +0.008599,244 +0.008271,244 +0.008535,244 +0.008380,244 +0.008547,244 +0.008541,244 +0.009122,244 +0.009425,244 +0.009985,244 +0.008869,244 +0.009671,244 +0.008826,244 +0.009167,244 +0.009475,244 +0.010463,244 +0.008845,244 +0.009068,244 +0.009923,244 +0.008686,244 +0.009351,244 +0.008841,244 +0.009443,244 +0.009230,244 +0.009117,244 +0.009444,244 +0.008598,244 +0.011855,244 +0.013583,244 +0.009072,244 +0.009092,244 +0.009185,244 +0.014677,244 +0.011672,244 +0.009429,244 +0.008713,244 +0.008714,244 +0.009273,244 +0.010116,244 +0.009393,244 +0.010491,244 +0.008408,244 +0.009318,244 +0.008508,244 +0.009858,246 +0.009395,246 +0.008938,246 +0.011050,246 +0.008977,246 +0.009164,246 +0.009213,246 +0.009397,246 +0.009276,246 +0.009221,246 +0.009539,246 +0.008873,246 +0.009992,246 +0.009103,246 +0.009691,246 +0.010062,246 +0.009052,246 +0.009601,246 +0.009269,246 +0.009436,246 +0.008698,246 +0.008780,246 +0.008658,246 +0.008635,246 +0.009383,246 +0.008811,246 +0.009192,246 +0.008760,246 +0.009154,246 +0.008547,246 +0.009660,246 +0.010609,246 +0.009080,246 +0.009131,246 +0.009144,246 +0.009341,246 +0.013315,246 +0.009230,246 +0.009309,246 +0.009871,246 +0.008865,246 +0.008572,246 +0.010704,246 +0.008672,246 +0.009686,246 +0.011265,246 +0.009018,246 +0.009531,246 +0.008655,246 +0.010740,246 +0.008935,246 +0.008863,246 +0.008870,246 +0.009304,246 +0.009020,246 +0.008978,246 +0.009087,246 +0.008751,246 +0.009580,246 +0.008960,246 +0.009217,246 +0.008830,246 +0.009173,246 +0.008646,246 +0.009105,246 +0.009314,246 +0.008384,246 +0.009238,246 +0.008834,246 +0.009322,246 +0.008750,246 +0.009035,246 +0.008676,246 +0.009955,246 +0.008648,246 +0.009108,246 +0.008685,246 +0.008831,246 +0.009185,246 +0.009365,246 +0.009642,246 +0.008500,246 +0.009377,246 +0.008589,246 +0.008932,246 +0.008653,246 +0.008815,246 +0.008795,246 +0.009015,246 +0.008711,246 +0.009558,246 +0.009287,246 +0.008655,246 +0.008782,246 +0.008563,246 +0.010632,246 +0.008627,246 +0.009575,246 +0.008599,246 +0.009215,246 +0.009130,248 +0.009244,248 +0.009282,248 +0.008789,248 +0.009308,248 +0.008727,248 +0.009762,248 +0.008719,248 +0.008883,248 +0.008873,248 +0.008978,248 +0.008867,248 +0.010259,248 +0.009395,248 +0.008633,248 +0.009338,248 +0.008758,248 +0.009328,248 +0.009498,248 +0.008909,248 +0.009063,248 +0.009817,248 +0.009740,248 +0.009207,248 +0.009438,248 +0.012479,248 +0.010154,248 +0.009249,248 +0.009299,248 +0.010087,248 +0.009723,248 +0.009695,248 +0.010362,248 +0.010546,248 +0.010629,248 +0.010528,248 +0.015329,248 +0.012274,248 +0.011152,248 +0.009396,248 +0.009280,248 +0.009034,248 +0.012744,248 +0.015582,248 +0.015658,248 +0.015078,248 +0.010024,248 +0.009239,248 +0.009943,248 +0.009773,248 +0.014537,248 +0.017530,248 +0.015920,248 +0.011957,248 +0.009105,248 +0.009083,248 +0.009202,248 +0.009940,248 +0.010099,248 +0.009476,248 +0.009598,248 +0.010707,248 +0.009195,248 +0.009424,248 +0.008605,248 +0.009276,248 +0.008892,248 +0.009204,248 +0.008877,248 +0.009213,248 +0.011625,248 +0.009214,248 +0.009382,248 +0.009043,248 +0.009214,248 +0.008909,248 +0.010248,248 +0.009246,248 +0.009236,248 +0.009438,248 +0.008784,248 +0.011077,248 +0.010114,248 +0.009304,248 +0.009221,248 +0.008766,248 +0.009307,248 +0.008864,248 +0.009873,248 +0.008852,248 +0.009311,248 +0.008867,248 +0.009239,248 +0.009388,248 +0.009156,248 +0.009197,248 +0.008510,248 +0.009130,248 +0.008669,248 +0.009244,248 +0.009025,250 +0.009350,250 +0.008872,250 +0.009456,250 +0.009317,250 +0.008936,250 +0.009422,250 +0.008982,250 +0.009744,250 +0.008988,250 +0.009696,250 +0.009359,250 +0.009167,250 +0.012349,250 +0.009517,250 +0.009812,250 +0.009119,250 +0.009061,250 +0.009260,250 +0.009456,250 +0.009952,250 +0.008818,250 +0.009474,250 +0.008798,250 +0.009091,250 +0.009133,250 +0.009540,250 +0.009433,250 +0.009249,250 +0.010214,250 +0.008713,250 +0.010148,250 +0.008962,250 +0.009849,250 +0.009456,250 +0.009602,250 +0.009677,250 +0.008792,250 +0.009677,250 +0.008841,250 +0.009685,250 +0.009485,250 +0.008924,250 +0.009592,250 +0.008825,250 +0.009603,250 +0.009132,250 +0.009784,250 +0.009045,250 +0.009499,250 +0.009518,250 +0.009109,250 +0.009879,250 +0.008919,250 +0.009706,250 +0.008915,250 +0.009780,250 +0.009812,250 +0.009038,250 +0.009642,250 +0.009030,250 +0.009746,250 +0.008882,250 +0.009732,250 +0.009126,250 +0.009544,250 +0.009785,250 +0.009096,250 +0.009853,250 +0.008885,250 +0.009660,250 +0.009002,250 +0.009631,250 +0.009679,250 +0.008955,250 +0.009704,250 +0.008887,250 +0.013027,250 +0.010948,250 +0.008987,250 +0.009630,250 +0.008881,250 +0.009727,250 +0.009298,250 +0.009833,250 +0.009567,250 +0.009455,250 +0.010065,250 +0.009454,250 +0.010091,250 +0.009412,250 +0.009077,250 +0.009636,250 +0.009303,250 +0.009526,250 +0.008877,250 +0.009605,250 +0.009191,250 +0.010011,250 +0.009709,250 +0.010231,252 +0.012990,252 +0.009854,252 +0.010859,252 +0.014675,252 +0.015726,252 +0.012810,252 +0.014456,252 +0.009736,252 +0.010464,252 +0.010532,252 +0.012710,252 +0.010361,252 +0.009999,252 +0.009827,252 +0.013812,252 +0.010463,252 +0.010301,252 +0.009966,252 +0.009810,252 +0.009776,252 +0.009550,252 +0.009727,252 +0.009798,252 +0.009014,252 +0.011330,252 +0.010802,252 +0.009600,252 +0.010121,252 +0.011557,252 +0.009966,252 +0.010390,252 +0.009430,252 +0.009848,252 +0.010062,252 +0.012363,252 +0.012036,252 +0.009869,252 +0.009844,252 +0.010969,252 +0.011726,252 +0.011246,252 +0.011567,252 +0.009282,252 +0.010693,252 +0.010142,252 +0.009920,252 +0.012229,252 +0.010075,252 +0.009732,252 +0.010298,252 +0.009082,252 +0.010190,252 +0.009417,252 +0.009715,252 +0.015873,252 +0.016372,252 +0.016583,252 +0.015830,252 +0.016000,252 +0.011421,252 +0.010158,252 +0.010739,252 +0.009456,252 +0.012964,252 +0.012191,252 +0.012941,252 +0.011451,252 +0.011859,252 +0.013485,252 +0.011426,252 +0.011688,252 +0.016568,252 +0.016182,252 +0.016828,252 +0.016195,252 +0.016573,252 +0.016100,252 +0.010000,252 +0.009507,252 +0.010536,252 +0.010492,252 +0.009154,252 +0.013518,252 +0.010619,252 +0.012216,252 +0.010740,252 +0.009764,252 +0.009365,252 +0.009776,252 +0.010528,252 +0.009679,252 +0.009761,252 +0.009547,252 +0.010305,252 +0.012599,252 +0.011673,252 +0.009893,252 +0.010159,252 +0.009324,252 +0.010555,254 +0.009937,254 +0.010597,254 +0.010326,254 +0.009800,254 +0.010106,254 +0.009499,254 +0.010620,254 +0.010066,254 +0.009924,254 +0.011003,254 +0.009747,254 +0.009786,254 +0.009392,254 +0.010399,254 +0.011080,254 +0.009258,254 +0.010474,254 +0.009610,254 +0.010054,254 +0.011508,254 +0.009480,254 +0.009833,254 +0.009961,254 +0.009436,254 +0.012692,254 +0.009641,254 +0.010464,254 +0.011081,254 +0.009649,254 +0.010144,254 +0.010091,254 +0.009405,254 +0.009991,254 +0.010172,254 +0.010449,254 +0.010108,254 +0.010207,254 +0.010032,254 +0.009369,254 +0.010225,254 +0.009678,254 +0.016870,254 +0.016472,254 +0.010452,254 +0.011093,254 +0.010473,254 +0.009599,254 +0.014770,254 +0.016677,254 +0.017813,254 +0.017380,254 +0.016409,254 +0.017041,254 +0.016572,254 +0.016370,254 +0.016605,254 +0.016964,254 +0.017444,254 +0.017205,254 +0.016628,254 +0.013205,254 +0.010322,254 +0.009270,254 +0.009769,254 +0.009492,254 +0.009941,254 +0.010107,254 +0.010101,254 +0.010084,254 +0.010374,254 +0.012121,254 +0.012037,254 +0.009778,254 +0.010571,254 +0.009853,254 +0.009496,254 +0.009743,254 +0.009096,254 +0.009745,254 +0.009021,254 +0.010155,254 +0.010309,254 +0.009889,254 +0.011350,254 +0.010828,254 +0.010240,254 +0.009932,254 +0.009917,254 +0.010543,254 +0.010089,254 +0.013366,254 +0.016995,254 +0.017477,254 +0.016690,254 +0.016894,254 +0.018866,254 +0.014139,254 +0.010406,254 +0.009661,254 +0.009779,256 +0.010680,256 +0.010421,256 +0.010054,256 +0.010939,256 +0.009451,256 +0.013862,256 +0.010243,256 +0.009519,256 +0.010374,256 +0.009982,256 +0.010124,256 +0.011400,256 +0.010499,256 +0.009763,256 +0.010973,256 +0.009887,256 +0.010968,256 +0.011389,256 +0.013785,256 +0.009945,256 +0.010088,256 +0.010515,256 +0.010346,256 +0.010209,256 +0.009981,256 +0.010826,256 +0.009649,256 +0.011957,256 +0.010635,256 +0.009541,256 +0.010679,256 +0.010541,256 +0.009604,256 +0.010616,256 +0.009487,256 +0.010491,256 +0.010836,256 +0.013541,256 +0.017591,256 +0.014169,256 +0.012726,256 +0.013956,256 +0.011220,256 +0.010190,256 +0.011644,256 +0.010571,256 +0.010247,256 +0.010495,256 +0.010289,256 +0.010695,256 +0.010168,256 +0.009805,256 +0.011205,256 +0.010342,256 +0.010553,256 +0.010728,256 +0.009985,256 +0.010386,256 +0.010392,256 +0.010682,256 +0.011283,256 +0.011353,256 +0.010878,256 +0.015319,256 +0.015399,256 +0.010297,256 +0.010587,256 +0.017157,256 +0.017762,256 +0.017091,256 +0.017641,256 +0.013289,256 +0.011448,256 +0.011872,256 +0.011224,256 +0.010420,256 +0.011012,256 +0.011475,256 +0.015462,256 +0.012049,256 +0.011826,256 +0.011497,256 +0.011092,256 +0.011921,256 +0.011552,256 +0.011640,256 +0.010822,256 +0.011117,256 +0.010751,256 +0.010827,256 +0.010403,256 +0.009689,256 +0.011013,256 +0.012598,256 +0.009945,256 +0.010082,256 +0.014993,256 +0.009717,256 +0.009882,256 +0.010107,258 +0.009770,258 +0.009796,258 +0.009472,258 +0.009749,258 +0.009416,258 +0.010430,258 +0.009918,258 +0.009482,258 +0.009579,258 +0.009374,258 +0.009683,258 +0.009468,258 +0.009405,258 +0.009450,258 +0.009404,258 +0.009560,258 +0.009866,258 +0.009767,258 +0.009467,258 +0.009433,258 +0.009574,258 +0.009596,258 +0.009561,258 +0.009546,258 +0.009753,258 +0.009619,258 +0.009744,258 +0.010196,258 +0.010095,258 +0.010383,258 +0.010210,258 +0.010262,258 +0.010389,258 +0.010256,258 +0.009983,258 +0.009761,258 +0.009582,258 +0.010053,258 +0.009413,258 +0.009532,258 +0.009446,258 +0.009426,258 +0.009423,258 +0.009346,258 +0.009422,258 +0.009347,258 +0.009394,258 +0.009674,258 +0.009704,258 +0.009396,258 +0.009351,258 +0.009391,258 +0.009346,258 +0.009475,258 +0.009598,258 +0.010080,258 +0.010452,258 +0.010871,258 +0.010423,258 +0.010513,258 +0.010116,258 +0.010210,258 +0.009958,258 +0.009968,258 +0.010047,258 +0.010058,258 +0.010037,258 +0.010153,258 +0.011575,258 +0.012614,258 +0.010947,258 +0.009669,258 +0.009714,258 +0.009688,258 +0.010026,258 +0.009516,258 +0.009797,258 +0.009955,258 +0.010176,258 +0.009922,258 +0.010324,258 +0.010263,258 +0.009942,258 +0.010075,258 +0.010010,258 +0.010313,258 +0.010602,258 +0.010260,258 +0.010234,258 +0.010394,258 +0.010284,258 +0.013337,258 +0.010676,258 +0.010417,258 +0.010114,258 +0.010350,258 +0.012891,258 +0.013548,258 +0.010766,258 +0.011532,260 +0.010968,260 +0.010756,260 +0.010761,260 +0.010170,260 +0.010459,260 +0.013812,260 +0.011390,260 +0.009759,260 +0.010005,260 +0.009683,260 +0.009912,260 +0.009788,260 +0.009833,260 +0.012760,260 +0.019698,260 +0.018735,260 +0.018137,260 +0.018051,260 +0.018126,260 +0.016454,260 +0.010452,260 +0.009917,260 +0.009712,260 +0.010646,260 +0.010046,260 +0.010721,260 +0.010848,260 +0.010831,260 +0.011017,260 +0.010318,260 +0.010154,260 +0.009890,260 +0.009848,260 +0.010152,260 +0.009949,260 +0.009642,260 +0.009848,260 +0.010376,260 +0.010758,260 +0.011059,260 +0.010853,260 +0.012435,260 +0.010276,260 +0.010300,260 +0.012000,260 +0.013294,260 +0.012111,260 +0.011801,260 +0.010755,260 +0.011994,260 +0.011919,260 +0.010789,260 +0.012048,260 +0.011977,260 +0.012300,260 +0.012509,260 +0.012142,260 +0.010451,260 +0.010635,260 +0.010448,260 +0.010917,260 +0.010891,260 +0.010783,260 +0.010708,260 +0.010749,260 +0.010585,260 +0.010855,260 +0.011117,260 +0.010729,260 +0.010794,260 +0.010692,260 +0.010542,260 +0.010503,260 +0.010549,260 +0.010460,260 +0.010503,260 +0.010593,260 +0.010516,260 +0.010728,260 +0.010585,260 +0.010632,260 +0.010700,260 +0.013832,260 +0.011336,260 +0.010597,260 +0.010557,260 +0.010810,260 +0.011117,260 +0.011006,260 +0.011358,260 +0.010412,260 +0.010276,260 +0.011562,260 +0.012203,260 +0.015970,260 +0.009911,260 +0.011294,260 +0.011579,260 +0.012378,260 +0.011885,262 +0.011688,262 +0.012098,262 +0.017249,262 +0.012328,262 +0.017765,262 +0.022648,262 +0.018523,262 +0.011370,262 +0.012250,262 +0.011140,262 +0.010837,262 +0.010156,262 +0.010665,262 +0.010573,262 +0.012050,262 +0.011725,262 +0.011434,262 +0.011467,262 +0.011308,262 +0.012422,262 +0.010747,262 +0.011455,262 +0.012212,262 +0.010871,262 +0.011883,262 +0.011414,262 +0.011060,262 +0.011012,262 +0.011690,262 +0.013613,262 +0.010994,262 +0.011202,262 +0.013261,262 +0.012546,262 +0.013007,262 +0.011315,262 +0.011240,262 +0.010581,262 +0.012079,262 +0.011860,262 +0.011337,262 +0.011544,262 +0.013034,262 +0.011081,262 +0.010664,262 +0.010906,262 +0.012053,262 +0.010731,262 +0.014121,262 +0.011711,262 +0.013684,262 +0.012036,262 +0.012383,262 +0.011715,262 +0.010776,262 +0.011244,262 +0.011810,262 +0.010253,262 +0.010740,262 +0.010743,262 +0.011492,262 +0.011037,262 +0.011238,262 +0.010825,262 +0.011052,262 +0.011090,262 +0.010108,262 +0.011135,262 +0.011111,262 +0.011944,262 +0.011301,262 +0.011062,262 +0.010266,262 +0.012399,262 +0.011177,262 +0.009959,262 +0.010554,262 +0.010458,262 +0.010451,262 +0.010572,262 +0.010284,262 +0.011125,262 +0.011215,262 +0.010490,262 +0.011294,262 +0.010950,262 +0.010181,262 +0.010554,262 +0.010798,262 +0.010588,262 +0.010938,262 +0.011195,262 +0.010304,262 +0.016095,262 +0.013226,262 +0.010853,262 +0.010454,262 +0.010427,262 +0.010101,262 +0.010794,264 +0.011579,264 +0.011372,264 +0.013671,264 +0.012693,264 +0.012298,264 +0.011387,264 +0.010932,264 +0.012185,264 +0.012093,264 +0.010862,264 +0.013355,264 +0.013758,264 +0.012014,264 +0.010772,264 +0.013846,264 +0.010442,264 +0.010146,264 +0.010189,264 +0.010453,264 +0.010165,264 +0.010202,264 +0.010154,264 +0.010184,264 +0.016234,264 +0.010232,264 +0.010653,264 +0.010957,264 +0.010317,264 +0.010160,264 +0.010207,264 +0.010154,264 +0.010074,264 +0.015739,264 +0.010218,264 +0.010167,264 +0.010198,264 +0.010039,264 +0.011495,264 +0.010973,264 +0.010209,264 +0.010213,264 +0.010392,264 +0.010206,264 +0.010219,264 +0.010150,264 +0.010204,264 +0.010077,264 +0.010029,264 +0.010081,264 +0.010087,264 +0.010062,264 +0.010284,264 +0.010231,264 +0.010156,264 +0.010122,264 +0.010094,264 +0.010179,264 +0.009974,264 +0.010217,264 +0.010331,264 +0.010127,264 +0.010511,264 +0.010212,264 +0.010175,264 +0.010099,264 +0.010354,264 +0.010094,264 +0.010020,264 +0.010053,264 +0.010128,264 +0.010016,264 +0.010424,264 +0.010017,264 +0.010142,264 +0.010322,264 +0.009975,264 +0.011610,264 +0.010608,264 +0.010153,264 +0.010441,264 +0.010130,264 +0.010610,264 +0.010203,264 +0.010101,264 +0.010052,264 +0.010070,264 +0.010221,264 +0.010127,264 +0.010209,264 +0.010113,264 +0.010248,264 +0.010656,264 +0.010227,264 +0.010537,264 +0.010463,264 +0.010206,264 +0.009976,264 +0.010978,264 +0.012841,264 +0.011457,266 +0.011325,266 +0.012660,266 +0.011298,266 +0.010768,266 +0.011054,266 +0.010783,266 +0.010563,266 +0.010470,266 +0.010377,266 +0.010594,266 +0.010372,266 +0.010286,266 +0.010322,266 +0.010281,266 +0.010319,266 +0.010380,266 +0.010277,266 +0.010316,266 +0.010538,266 +0.010632,266 +0.010314,266 +0.010246,266 +0.010298,266 +0.010313,266 +0.010222,266 +0.010392,266 +0.010303,266 +0.010258,266 +0.011083,266 +0.011373,266 +0.011394,266 +0.011423,266 +0.011494,266 +0.011362,266 +0.011225,266 +0.011327,266 +0.011162,266 +0.011533,266 +0.012106,266 +0.011551,266 +0.011496,266 +0.012078,266 +0.010990,266 +0.011217,266 +0.011571,266 +0.011147,266 +0.010625,266 +0.011689,266 +0.012289,266 +0.011349,266 +0.012935,266 +0.012327,266 +0.011804,266 +0.011409,266 +0.011983,266 +0.011368,266 +0.011151,266 +0.011225,266 +0.010653,266 +0.010704,266 +0.011275,266 +0.011230,266 +0.011698,266 +0.013166,266 +0.015349,266 +0.018412,266 +0.017065,266 +0.013121,266 +0.011527,266 +0.010822,266 +0.011982,266 +0.011018,266 +0.010638,266 +0.011363,266 +0.012734,266 +0.010482,266 +0.010728,266 +0.010993,266 +0.011482,266 +0.011666,266 +0.011318,266 +0.011667,266 +0.011474,266 +0.012265,266 +0.012166,266 +0.011736,266 +0.012148,266 +0.012070,266 +0.011598,266 +0.013895,266 +0.012129,266 +0.014653,266 +0.012137,266 +0.014748,266 +0.015828,266 +0.013458,266 +0.014819,266 +0.012846,266 +0.016506,266 +0.012439,268 +0.011157,268 +0.012181,268 +0.012792,268 +0.018302,268 +0.012486,268 +0.011053,268 +0.011819,268 +0.012515,268 +0.014427,268 +0.018408,268 +0.021454,268 +0.012570,268 +0.011423,268 +0.011239,268 +0.011432,268 +0.011399,268 +0.011265,268 +0.012256,268 +0.011688,268 +0.011787,268 +0.011798,268 +0.011951,268 +0.011667,268 +0.011537,268 +0.012007,268 +0.010827,268 +0.011254,268 +0.011534,268 +0.011232,268 +0.010853,268 +0.011462,268 +0.011062,268 +0.010949,268 +0.011541,268 +0.011058,268 +0.011035,268 +0.011518,268 +0.011622,268 +0.010679,268 +0.011386,268 +0.012035,268 +0.014004,268 +0.011193,268 +0.012148,268 +0.011543,268 +0.012519,268 +0.011213,268 +0.014361,268 +0.013364,268 +0.013924,268 +0.012259,268 +0.013628,268 +0.012660,268 +0.012574,268 +0.012317,268 +0.012326,268 +0.011779,268 +0.012059,268 +0.011431,268 +0.011946,268 +0.013517,268 +0.015301,268 +0.014987,268 +0.012013,268 +0.012194,268 +0.011377,268 +0.011686,268 +0.011386,268 +0.012465,268 +0.015420,268 +0.020418,268 +0.015497,268 +0.012483,268 +0.011771,268 +0.013726,268 +0.012621,268 +0.012090,268 +0.010986,268 +0.012368,268 +0.011458,268 +0.011811,268 +0.011334,268 +0.017564,268 +0.014490,268 +0.016207,268 +0.013307,268 +0.012526,268 +0.011412,268 +0.012655,268 +0.011794,268 +0.011151,268 +0.012182,268 +0.012015,268 +0.011588,268 +0.011319,268 +0.011843,268 +0.011518,268 +0.013115,268 +0.011957,268 +0.013827,270 +0.011480,270 +0.011624,270 +0.011960,270 +0.013117,270 +0.013719,270 +0.012665,270 +0.014312,270 +0.018070,270 +0.012840,270 +0.013579,270 +0.013749,270 +0.011697,270 +0.011351,270 +0.012223,270 +0.017580,270 +0.011414,270 +0.011318,270 +0.011599,270 +0.011700,270 +0.012627,270 +0.011451,270 +0.011609,270 +0.011333,270 +0.011392,270 +0.010944,270 +0.010892,270 +0.011558,270 +0.011820,270 +0.011908,270 +0.011294,270 +0.011460,270 +0.013014,270 +0.014360,270 +0.011905,270 +0.011698,270 +0.011326,270 +0.011469,270 +0.011072,270 +0.011061,270 +0.012363,270 +0.011825,270 +0.012339,270 +0.011823,270 +0.014907,270 +0.011328,270 +0.011481,270 +0.011953,270 +0.014402,270 +0.014933,270 +0.011434,270 +0.011730,270 +0.011142,270 +0.011680,270 +0.011440,270 +0.011634,270 +0.011048,270 +0.012270,270 +0.011313,270 +0.011724,270 +0.011649,270 +0.014341,270 +0.017158,270 +0.013464,270 +0.011567,270 +0.011611,270 +0.011913,270 +0.013445,270 +0.011918,270 +0.015169,270 +0.014472,270 +0.011883,270 +0.012696,270 +0.012013,270 +0.011942,270 +0.011916,270 +0.011145,270 +0.013960,270 +0.012014,270 +0.011429,270 +0.011623,270 +0.013834,270 +0.011994,270 +0.011362,270 +0.010976,270 +0.011128,270 +0.010985,270 +0.011327,270 +0.011608,270 +0.013648,270 +0.011881,270 +0.011458,270 +0.011348,270 +0.011615,270 +0.012125,270 +0.011188,270 +0.013129,270 +0.011223,270 +0.011644,270 +0.011201,270 +0.011853,272 +0.012187,272 +0.012305,272 +0.013455,272 +0.012277,272 +0.012017,272 +0.015585,272 +0.012174,272 +0.011242,272 +0.011910,272 +0.011257,272 +0.011207,272 +0.011918,272 +0.011065,272 +0.011464,272 +0.012213,272 +0.011118,272 +0.011124,272 +0.011316,272 +0.011282,272 +0.011464,272 +0.011202,272 +0.011479,272 +0.011615,272 +0.011943,272 +0.011892,272 +0.011300,272 +0.013015,272 +0.011799,272 +0.012453,272 +0.011830,272 +0.015279,272 +0.013138,272 +0.011969,272 +0.012412,272 +0.013635,272 +0.011874,272 +0.012776,272 +0.012803,272 +0.012065,272 +0.012143,272 +0.011485,272 +0.011841,272 +0.012257,272 +0.012161,272 +0.011664,272 +0.012727,272 +0.012390,272 +0.011519,272 +0.012903,272 +0.012968,272 +0.011564,272 +0.011474,272 +0.012503,272 +0.013555,272 +0.011861,272 +0.017892,272 +0.012202,272 +0.011796,272 +0.011900,272 +0.011608,272 +0.011639,272 +0.012110,272 +0.011517,272 +0.011523,272 +0.011379,272 +0.011210,272 +0.011205,272 +0.011195,272 +0.011060,272 +0.011284,272 +0.011000,272 +0.011011,272 +0.011319,272 +0.010966,272 +0.011012,272 +0.011026,272 +0.010966,272 +0.010985,272 +0.011140,272 +0.010966,272 +0.011092,272 +0.011223,272 +0.010995,272 +0.011014,272 +0.010989,272 +0.010997,272 +0.010986,272 +0.011621,272 +0.010976,272 +0.011770,272 +0.011894,272 +0.012049,272 +0.012264,272 +0.012022,272 +0.011747,272 +0.012237,272 +0.012840,272 +0.012496,272 +0.018836,272 +0.012484,274 +0.011528,274 +0.011521,274 +0.011412,274 +0.011490,274 +0.011426,274 +0.011435,274 +0.017460,274 +0.011924,274 +0.011255,274 +0.011323,274 +0.011351,274 +0.011352,274 +0.011390,274 +0.011604,274 +0.014364,274 +0.014529,274 +0.011399,274 +0.011264,274 +0.011219,274 +0.011388,274 +0.011373,274 +0.011226,274 +0.011304,274 +0.017376,274 +0.011361,274 +0.011385,274 +0.011204,274 +0.011264,274 +0.011887,274 +0.011308,274 +0.011339,274 +0.017406,274 +0.013205,274 +0.012187,274 +0.011445,274 +0.011474,274 +0.011793,274 +0.011532,274 +0.011725,274 +0.017909,274 +0.011546,274 +0.012766,274 +0.011466,274 +0.011593,274 +0.011637,274 +0.011641,274 +0.013013,274 +0.018135,274 +0.013629,274 +0.011539,274 +0.012274,274 +0.012491,274 +0.011918,274 +0.012186,274 +0.011985,274 +0.017766,274 +0.011750,274 +0.011517,274 +0.011799,274 +0.011707,274 +0.011869,274 +0.012377,274 +0.012414,274 +0.011907,274 +0.012177,274 +0.011493,274 +0.011761,274 +0.012167,274 +0.012437,274 +0.011576,274 +0.011602,274 +0.012961,274 +0.011365,274 +0.011398,274 +0.011277,274 +0.011328,274 +0.011243,274 +0.011415,274 +0.011370,274 +0.011262,274 +0.013047,274 +0.011328,274 +0.011282,274 +0.011300,274 +0.011189,274 +0.011350,274 +0.011451,274 +0.011256,274 +0.011985,274 +0.012333,274 +0.011306,274 +0.011182,274 +0.011293,274 +0.011283,274 +0.011312,274 +0.011405,274 +0.011258,274 +0.012624,274 +0.011732,274 +0.011626,276 +0.011830,276 +0.011472,276 +0.011444,276 +0.012230,276 +0.011908,276 +0.011449,276 +0.013251,276 +0.011545,276 +0.011906,276 +0.011556,276 +0.011654,276 +0.011653,276 +0.011543,276 +0.011620,276 +0.014764,276 +0.012550,276 +0.011524,276 +0.011551,276 +0.011626,276 +0.011757,276 +0.012318,276 +0.011735,276 +0.012132,276 +0.012866,276 +0.011526,276 +0.011551,276 +0.011645,276 +0.011461,276 +0.011700,276 +0.011646,276 +0.011464,276 +0.013195,276 +0.011691,276 +0.011567,276 +0.011444,276 +0.011548,276 +0.011577,276 +0.011507,276 +0.011613,276 +0.011945,276 +0.013265,276 +0.011492,276 +0.011523,276 +0.011529,276 +0.011488,276 +0.011626,276 +0.011577,276 +0.011430,276 +0.013222,276 +0.011690,276 +0.011585,276 +0.011442,276 +0.011534,276 +0.011572,276 +0.011527,276 +0.011698,276 +0.011460,276 +0.013457,276 +0.011480,276 +0.011521,276 +0.011593,276 +0.011477,276 +0.011625,276 +0.011618,276 +0.011504,276 +0.013268,276 +0.011676,276 +0.011595,276 +0.011449,276 +0.011510,276 +0.011694,276 +0.011560,276 +0.011675,276 +0.011486,276 +0.013421,276 +0.011482,276 +0.011500,276 +0.011549,276 +0.011423,276 +0.011618,276 +0.011554,276 +0.011484,276 +0.013115,276 +0.011791,276 +0.011593,276 +0.011446,276 +0.011472,276 +0.011623,276 +0.011769,276 +0.011809,276 +0.011456,276 +0.013300,276 +0.011511,276 +0.011486,276 +0.011532,276 +0.011444,276 +0.011601,276 +0.011573,276 +0.011466,276 +0.014016,278 +0.012821,278 +0.011816,278 +0.011791,278 +0.011814,278 +0.011808,278 +0.011876,278 +0.011704,278 +0.012423,278 +0.013013,278 +0.011796,278 +0.011863,278 +0.011816,278 +0.012011,278 +0.011901,278 +0.011876,278 +0.011801,278 +0.013614,278 +0.012472,278 +0.011975,278 +0.011879,278 +0.011779,278 +0.011925,278 +0.011799,278 +0.011921,278 +0.013394,278 +0.012003,278 +0.011716,278 +0.011783,278 +0.011709,278 +0.011817,278 +0.011915,278 +0.011706,278 +0.012678,278 +0.012789,278 +0.011801,278 +0.011737,278 +0.011810,278 +0.011883,278 +0.011786,278 +0.011824,278 +0.011753,278 +0.013593,278 +0.011803,278 +0.011789,278 +0.011834,278 +0.011888,278 +0.011825,278 +0.011847,278 +0.011877,278 +0.013396,278 +0.011984,278 +0.011737,278 +0.011921,278 +0.011703,278 +0.011848,278 +0.012008,278 +0.012461,278 +0.013065,278 +0.015012,278 +0.011799,278 +0.011843,278 +0.011725,278 +0.011822,278 +0.011867,278 +0.011685,278 +0.012549,278 +0.017619,278 +0.012041,278 +0.011872,278 +0.011734,278 +0.011846,278 +0.011907,278 +0.011726,278 +0.013490,278 +0.016518,278 +0.012111,278 +0.011972,278 +0.011709,278 +0.011893,278 +0.011847,278 +0.011849,278 +0.013321,278 +0.017125,278 +0.011849,278 +0.012183,278 +0.011838,278 +0.011931,278 +0.011931,278 +0.011880,278 +0.016327,278 +0.013564,278 +0.011901,278 +0.011785,278 +0.012227,278 +0.012016,278 +0.015415,278 +0.012437,278 +0.018601,278 +0.011967,278 +0.012358,280 +0.012528,280 +0.012497,280 +0.012089,280 +0.012103,280 +0.013682,280 +0.016582,280 +0.011985,280 +0.012008,280 +0.012124,280 +0.012076,280 +0.012043,280 +0.012039,280 +0.015314,280 +0.015128,280 +0.011979,280 +0.012000,280 +0.012176,280 +0.012002,280 +0.012048,280 +0.011957,280 +0.017007,280 +0.013269,280 +0.011976,280 +0.012094,280 +0.012067,280 +0.012082,280 +0.012120,280 +0.011987,280 +0.018353,280 +0.012012,280 +0.012067,280 +0.011959,280 +0.012076,280 +0.012149,280 +0.011906,280 +0.012002,280 +0.018332,280 +0.012014,280 +0.012062,280 +0.011926,280 +0.012084,280 +0.012065,280 +0.012078,280 +0.011952,280 +0.018367,280 +0.012072,280 +0.011984,280 +0.012042,280 +0.012131,280 +0.012037,280 +0.012020,280 +0.011885,280 +0.018517,280 +0.012033,280 +0.011994,280 +0.012136,280 +0.012023,280 +0.012108,280 +0.012008,280 +0.012312,280 +0.019490,280 +0.012129,280 +0.012053,280 +0.012023,280 +0.012058,280 +0.011982,280 +0.012002,280 +0.015990,280 +0.014953,280 +0.012328,280 +0.012194,280 +0.012157,280 +0.012081,280 +0.012064,280 +0.011945,280 +0.018334,280 +0.012104,280 +0.011964,280 +0.012029,280 +0.012046,280 +0.012069,280 +0.012067,280 +0.012037,280 +0.018357,280 +0.011993,280 +0.012012,280 +0.012035,280 +0.012176,280 +0.011944,280 +0.011945,280 +0.012023,280 +0.018378,280 +0.012070,280 +0.011964,280 +0.012046,280 +0.012120,280 +0.011925,280 +0.011982,280 +0.012008,280 +0.018777,282 +0.012455,282 +0.012229,282 +0.012423,282 +0.012639,282 +0.012323,282 +0.012197,282 +0.017554,282 +0.013383,282 +0.012235,282 +0.012296,282 +0.012469,282 +0.012245,282 +0.012271,282 +0.012269,282 +0.018619,282 +0.012279,282 +0.012240,282 +0.012295,282 +0.012357,282 +0.012275,282 +0.012292,282 +0.012448,282 +0.018508,282 +0.012233,282 +0.012294,282 +0.012277,282 +0.012265,282 +0.012279,282 +0.012284,282 +0.016910,282 +0.014048,282 +0.012333,282 +0.012298,282 +0.012427,282 +0.012202,282 +0.012237,282 +0.012336,282 +0.019885,282 +0.012457,282 +0.012339,282 +0.012278,282 +0.012321,282 +0.012412,282 +0.012197,282 +0.015114,282 +0.016011,282 +0.012308,282 +0.012356,282 +0.012507,282 +0.012255,282 +0.012235,282 +0.012698,282 +0.019801,282 +0.013296,282 +0.013066,282 +0.012764,282 +0.012640,282 +0.012618,282 +0.012736,282 +0.016990,282 +0.014150,282 +0.012346,282 +0.012283,282 +0.012471,282 +0.012238,282 +0.012256,282 +0.012278,282 +0.018771,282 +0.012374,282 +0.012408,282 +0.012287,282 +0.012941,282 +0.012385,282 +0.012293,282 +0.014701,282 +0.016269,282 +0.012355,282 +0.012353,282 +0.012427,282 +0.012444,282 +0.012636,282 +0.013100,282 +0.020059,282 +0.013754,282 +0.015306,282 +0.013966,282 +0.013118,282 +0.013573,282 +0.013209,282 +0.013211,282 +0.013682,282 +0.013451,282 +0.013830,282 +0.016563,282 +0.014275,282 +0.013191,282 +0.014931,282 +0.013361,282 +0.013060,282 +0.013946,284 +0.013994,284 +0.013735,284 +0.013689,284 +0.015005,284 +0.013579,284 +0.013733,284 +0.013731,284 +0.014022,284 +0.013994,284 +0.013784,284 +0.013775,284 +0.013650,284 +0.013812,284 +0.013409,284 +0.013660,284 +0.013485,284 +0.013261,284 +0.012729,284 +0.013414,284 +0.012799,284 +0.012514,284 +0.012703,284 +0.012598,284 +0.012822,284 +0.012455,284 +0.012624,284 +0.012976,284 +0.012607,284 +0.012557,284 +0.012518,284 +0.012584,284 +0.012541,284 +0.013689,284 +0.013699,284 +0.013100,284 +0.013475,284 +0.012920,284 +0.013383,284 +0.014202,284 +0.014666,284 +0.014012,284 +0.013489,284 +0.013736,284 +0.013426,284 +0.013414,284 +0.013479,284 +0.013610,284 +0.013781,284 +0.013853,284 +0.014394,284 +0.013401,284 +0.013368,284 +0.013851,284 +0.013561,284 +0.013997,284 +0.013764,284 +0.015446,284 +0.013561,284 +0.013659,284 +0.013920,284 +0.013185,284 +0.013524,284 +0.013365,284 +0.015054,284 +0.014309,284 +0.013730,284 +0.013936,284 +0.013663,284 +0.013726,284 +0.013492,284 +0.014247,284 +0.013913,284 +0.013512,284 +0.013265,284 +0.013152,284 +0.012955,284 +0.012899,284 +0.012563,284 +0.012663,284 +0.012529,284 +0.012587,284 +0.012622,284 +0.012544,284 +0.012493,284 +0.012484,284 +0.012470,284 +0.012798,284 +0.012542,284 +0.012523,284 +0.012628,284 +0.012525,284 +0.012440,284 +0.012487,284 +0.012466,284 +0.012660,284 +0.012507,284 +0.012504,284 +0.012633,284 +0.012492,284 +0.012885,286 +0.012740,286 +0.012743,286 +0.012959,286 +0.012753,286 +0.012818,286 +0.012940,286 +0.012742,286 +0.012681,286 +0.012706,286 +0.012818,286 +0.013008,286 +0.012674,286 +0.012738,286 +0.013173,286 +0.012881,286 +0.012797,286 +0.013203,286 +0.013836,286 +0.013470,286 +0.013405,286 +0.013145,286 +0.013560,286 +0.013173,286 +0.012748,286 +0.012981,286 +0.013443,286 +0.013051,286 +0.012730,286 +0.012914,286 +0.012685,286 +0.012631,286 +0.012703,286 +0.012712,286 +0.013049,286 +0.012640,286 +0.012690,286 +0.012926,286 +0.012703,286 +0.012614,286 +0.012685,286 +0.012711,286 +0.013000,286 +0.012728,286 +0.012750,286 +0.012863,286 +0.012725,286 +0.012820,286 +0.012615,286 +0.012768,286 +0.012977,286 +0.012775,286 +0.012779,286 +0.012877,286 +0.012749,286 +0.012727,286 +0.012663,286 +0.012842,286 +0.012997,286 +0.012824,286 +0.012818,286 +0.012674,286 +0.012758,286 +0.012853,286 +0.012863,286 +0.012864,286 +0.012988,286 +0.012823,286 +0.012866,286 +0.012704,286 +0.012687,286 +0.012745,286 +0.012806,286 +0.013069,286 +0.012840,286 +0.012767,286 +0.012968,286 +0.012784,286 +0.012612,286 +0.012711,286 +0.012723,286 +0.013276,286 +0.012728,286 +0.012752,286 +0.012881,286 +0.012702,286 +0.012743,286 +0.012612,286 +0.012753,286 +0.013214,286 +0.012757,286 +0.012776,286 +0.012821,286 +0.012775,286 +0.012750,286 +0.012712,286 +0.012857,286 +0.013142,286 +0.012788,286 +0.012879,286 +0.013201,288 +0.012976,288 +0.013002,288 +0.012988,288 +0.013214,288 +0.013187,288 +0.013072,288 +0.013409,288 +0.013022,288 +0.012897,288 +0.013063,288 +0.012993,288 +0.013472,288 +0.013100,288 +0.012897,288 +0.013178,288 +0.013025,288 +0.013024,288 +0.013205,288 +0.013200,288 +0.013378,288 +0.013053,288 +0.013097,288 +0.014063,288 +0.013531,288 +0.013111,288 +0.012972,288 +0.013326,288 +0.013193,288 +0.013007,288 +0.013126,288 +0.013079,288 +0.013020,288 +0.013074,288 +0.013201,288 +0.013680,288 +0.013155,288 +0.013164,288 +0.013608,288 +0.013087,288 +0.013348,288 +0.013029,288 +0.013178,288 +0.013346,288 +0.013070,288 +0.013138,288 +0.013156,288 +0.013135,288 +0.013054,288 +0.013051,288 +0.013585,288 +0.014019,288 +0.013054,288 +0.013111,288 +0.013063,288 +0.013061,288 +0.013035,288 +0.013075,288 +0.013358,288 +0.013098,288 +0.013045,288 +0.013083,288 +0.012938,288 +0.012982,288 +0.013000,288 +0.013198,288 +0.013349,288 +0.013032,288 +0.013157,288 +0.013035,288 +0.013016,288 +0.012915,288 +0.013047,288 +0.013452,288 +0.013033,288 +0.012995,288 +0.012971,288 +0.013044,288 +0.013024,288 +0.012997,288 +0.013056,288 +0.013446,288 +0.013038,288 +0.013153,288 +0.013140,288 +0.012877,288 +0.012974,288 +0.013012,288 +0.013184,288 +0.013406,288 +0.012904,288 +0.013190,288 +0.013045,288 +0.013018,288 +0.012908,288 +0.012955,288 +0.013446,288 +0.013057,288 +0.013114,288 +0.012941,288 +0.013481,290 +0.013334,290 +0.013320,290 +0.013323,290 +0.013687,290 +0.013270,290 +0.013456,290 +0.013301,290 +0.013286,290 +0.013170,290 +0.013281,290 +0.013732,290 +0.013544,290 +0.013473,290 +0.014077,290 +0.013593,290 +0.013379,290 +0.013369,290 +0.013526,290 +0.013858,290 +0.013238,290 +0.013551,290 +0.013339,290 +0.013329,290 +0.013351,290 +0.013180,290 +0.013894,290 +0.013400,290 +0.013488,290 +0.013460,290 +0.013149,290 +0.013432,290 +0.014937,290 +0.013927,290 +0.013685,290 +0.013380,290 +0.013409,290 +0.013391,290 +0.013376,290 +0.013751,290 +0.013292,290 +0.013819,290 +0.013339,290 +0.013473,290 +0.013314,290 +0.013291,290 +0.013173,290 +0.013790,290 +0.013684,290 +0.013551,290 +0.013448,290 +0.013325,290 +0.013243,290 +0.013352,290 +0.013321,290 +0.013306,290 +0.013955,290 +0.013242,290 +0.013509,290 +0.013295,290 +0.013302,290 +0.013305,290 +0.013144,290 +0.013688,290 +0.013629,290 +0.013456,290 +0.013424,290 +0.013146,290 +0.013349,290 +0.013292,290 +0.013466,290 +0.013820,290 +0.013269,290 +0.013694,290 +0.013465,290 +0.013425,290 +0.013293,290 +0.013317,290 +0.013721,290 +0.013529,290 +0.013479,290 +0.013367,290 +0.013148,290 +0.013268,290 +0.013541,290 +0.013400,290 +0.013686,290 +0.013212,290 +0.013478,290 +0.013329,290 +0.013299,290 +0.013286,290 +0.013170,290 +0.013637,290 +0.013704,290 +0.013489,290 +0.013450,290 +0.013332,290 +0.013141,290 +0.013324,290 +0.014173,292 +0.013964,292 +0.013706,292 +0.013608,292 +0.013528,292 +0.013538,292 +0.013556,292 +0.013539,292 +0.014056,292 +0.013518,292 +0.013774,292 +0.013569,292 +0.013601,292 +0.013535,292 +0.013463,292 +0.013851,292 +0.013804,292 +0.013714,292 +0.013679,292 +0.013573,292 +0.013422,292 +0.013563,292 +0.013673,292 +0.013962,292 +0.013572,292 +0.013598,292 +0.013531,292 +0.013587,292 +0.013540,292 +0.013535,292 +0.013977,292 +0.013441,292 +0.013751,292 +0.013548,292 +0.013621,292 +0.013551,292 +0.013401,292 +0.013880,292 +0.013904,292 +0.013742,292 +0.013665,292 +0.013593,292 +0.013414,292 +0.013546,292 +0.013682,292 +0.014659,292 +0.014596,292 +0.014658,292 +0.013872,292 +0.014497,292 +0.014095,292 +0.014564,292 +0.014594,292 +0.015230,292 +0.014673,292 +0.014149,292 +0.014151,292 +0.014572,292 +0.014287,292 +0.014656,292 +0.014418,292 +0.014275,292 +0.013836,292 +0.013588,292 +0.013943,292 +0.014227,292 +0.014491,292 +0.014003,292 +0.013849,292 +0.013481,292 +0.014047,292 +0.013839,292 +0.013693,292 +0.014099,292 +0.015242,292 +0.014441,292 +0.014667,292 +0.015529,292 +0.016512,292 +0.016460,292 +0.015420,292 +0.016760,292 +0.014867,292 +0.014562,292 +0.014597,292 +0.014859,292 +0.014662,292 +0.014812,292 +0.015283,292 +0.015188,292 +0.014670,292 +0.014191,292 +0.014242,292 +0.014280,292 +0.014270,292 +0.014309,292 +0.013729,292 +0.013819,292 +0.014126,292 +0.013795,292 +0.014795,294 +0.014027,294 +0.013913,294 +0.013824,294 +0.015135,294 +0.016026,294 +0.015641,294 +0.015718,294 +0.015860,294 +0.015509,294 +0.015591,294 +0.014985,294 +0.015005,294 +0.016038,294 +0.016855,294 +0.016140,294 +0.015329,294 +0.015619,294 +0.015057,294 +0.014654,294 +0.015085,294 +0.015368,294 +0.015454,294 +0.015917,294 +0.015275,294 +0.015016,294 +0.015117,294 +0.015881,294 +0.017002,294 +0.016115,294 +0.016410,294 +0.015987,294 +0.014855,294 +0.015974,294 +0.014814,294 +0.015446,294 +0.015848,294 +0.015758,294 +0.014875,294 +0.014658,294 +0.014860,294 +0.015297,294 +0.016768,294 +0.015180,294 +0.014770,294 +0.015168,294 +0.015061,294 +0.015951,294 +0.017409,294 +0.017436,294 +0.017312,294 +0.015754,294 +0.016206,294 +0.016827,294 +0.016502,294 +0.016044,294 +0.015842,294 +0.018897,294 +0.019509,294 +0.018065,294 +0.019213,294 +0.015811,294 +0.015241,294 +0.014296,294 +0.015615,294 +0.017037,294 +0.017171,294 +0.015242,294 +0.015142,294 +0.015733,294 +0.016041,294 +0.015273,294 +0.015189,294 +0.015082,294 +0.015422,294 +0.016060,294 +0.016130,294 +0.016446,294 +0.017918,294 +0.016325,294 +0.016780,294 +0.015085,294 +0.014598,294 +0.015548,294 +0.018661,294 +0.018239,294 +0.015832,294 +0.015122,294 +0.018574,294 +0.017859,294 +0.016707,294 +0.014995,294 +0.015211,294 +0.014929,294 +0.015035,294 +0.014774,294 +0.014655,294 +0.015027,294 +0.015038,294 +0.015198,294 +0.014681,296 +0.014288,296 +0.015142,296 +0.015681,296 +0.015230,296 +0.015222,296 +0.015204,296 +0.015051,296 +0.015135,296 +0.015832,296 +0.016320,296 +0.015317,296 +0.015174,296 +0.014283,296 +0.016614,296 +0.016972,296 +0.014858,296 +0.014459,296 +0.014602,296 +0.014277,296 +0.015539,296 +0.015612,296 +0.016112,296 +0.015737,296 +0.015104,296 +0.014696,296 +0.015561,296 +0.015715,296 +0.015489,296 +0.015198,296 +0.015239,296 +0.015045,296 +0.015285,296 +0.015164,296 +0.014412,296 +0.014795,296 +0.014220,296 +0.014082,296 +0.013997,296 +0.014116,296 +0.014535,296 +0.014673,296 +0.015166,296 +0.015054,296 +0.014801,296 +0.016423,296 +0.019121,296 +0.016707,296 +0.017321,296 +0.015645,296 +0.015656,296 +0.014643,296 +0.014348,296 +0.014928,296 +0.015420,296 +0.015165,296 +0.015154,296 +0.014837,296 +0.015405,296 +0.015458,296 +0.023828,296 +0.024815,296 +0.016970,296 +0.017982,296 +0.015732,296 +0.016239,296 +0.015299,296 +0.014810,296 +0.014520,296 +0.014830,296 +0.015901,296 +0.015074,296 +0.015274,296 +0.016604,296 +0.015285,296 +0.014779,296 +0.015344,296 +0.015064,296 +0.014944,296 +0.016107,296 +0.015013,296 +0.014853,296 +0.014481,296 +0.015386,296 +0.014975,296 +0.015724,296 +0.014866,296 +0.015657,296 +0.014461,296 +0.014291,296 +0.014056,296 +0.014826,296 +0.014428,296 +0.015374,296 +0.014666,296 +0.015026,296 +0.014345,296 +0.014619,296 +0.015102,296 +0.014787,296 +0.015666,298 +0.014854,298 +0.015187,298 +0.015992,298 +0.016170,298 +0.015382,298 +0.016049,298 +0.015758,298 +0.016153,298 +0.015938,298 +0.016403,298 +0.016760,298 +0.016727,298 +0.017336,298 +0.015007,298 +0.015812,298 +0.016600,298 +0.017088,298 +0.021346,298 +0.016721,298 +0.018078,298 +0.016002,298 +0.015634,298 +0.016869,298 +0.015550,298 +0.015720,298 +0.015011,298 +0.015664,298 +0.015481,298 +0.015510,298 +0.018328,298 +0.020421,298 +0.015091,298 +0.014703,298 +0.014954,298 +0.014855,298 +0.016252,298 +0.017516,298 +0.018290,298 +0.017556,298 +0.016717,298 +0.019328,298 +0.018002,298 +0.017207,298 +0.017260,298 +0.016040,298 +0.015982,298 +0.015778,298 +0.016230,298 +0.017668,298 +0.016499,298 +0.017272,298 +0.015800,298 +0.015261,298 +0.015103,298 +0.015956,298 +0.016004,298 +0.016785,298 +0.016497,298 +0.015962,298 +0.015830,298 +0.017555,298 +0.016003,298 +0.016073,298 +0.016233,298 +0.016343,298 +0.015528,298 +0.017081,298 +0.015666,298 +0.015200,298 +0.015575,298 +0.014971,298 +0.015492,298 +0.016195,298 +0.016266,298 +0.015414,298 +0.015653,298 +0.015342,298 +0.015384,298 +0.015154,298 +0.017177,298 +0.016570,298 +0.017330,298 +0.016724,298 +0.018397,298 +0.021554,298 +0.025023,298 +0.016175,298 +0.017001,298 +0.016864,298 +0.016334,298 +0.016042,298 +0.015923,298 +0.017484,298 +0.016283,298 +0.014971,298 +0.015364,298 +0.016135,298 +0.016538,298 +0.015348,298 diff --git a/buch/papers/multiplikation/code/meas/test/winograd.txt b/buch/papers/multiplikation/code/meas/test/winograd.txt new file mode 100644 index 0000000..d01fefd --- /dev/null +++ b/buch/papers/multiplikation/code/meas/test/winograd.txt @@ -0,0 +1,14900 @@ +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.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.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.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.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.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.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.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.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.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.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.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.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.000000,4 +0.000010,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.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.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.000000,4 +0.000010,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.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.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.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,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000010,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000011,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000010,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +0.000001,6 +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.000012,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.000002,8 +0.000011,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000012,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000011,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000014,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000011,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000015,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000011,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.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,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.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.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000011,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000002,8 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000013,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000012,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000013,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000005,10 +0.000005,10 +0.000005,10 +0.000014,10 +0.000004,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000003,10 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000015,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000014,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000005,12 +0.000008,14 +0.000008,14 +0.000018,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000017,14 +0.000012,14 +0.000013,14 +0.000009,14 +0.000011,14 +0.000014,14 +0.000010,14 +0.000008,14 +0.000008,14 +0.000014,14 +0.000013,14 +0.000010,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000015,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000012,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000009,14 +0.000010,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000017,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000008,14 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000022,16 +0.000011,16 +0.000011,16 +0.000020,16 +0.000011,16 +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.000020,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000011,16 +0.000016,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000027,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000015,18 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000026,20 +0.000028,20 +0.000031,20 +0.000031,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000031,20 +0.000052,20 +0.000021,20 +0.000021,20 +0.000030,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000028,20 +0.000025,20 +0.000032,20 +0.000036,20 +0.000031,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000021,20 +0.000031,20 +0.000021,20 +0.000030,20 +0.000031,20 +0.000048,22 +0.000038,22 +0.000028,22 +0.000037,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000035,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000035,22 +0.000037,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000029,22 +0.000042,22 +0.000042,22 +0.000036,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000027,22 +0.000036,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000052,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000047,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000048,24 +0.000070,24 +0.000045,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000046,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000035,24 +0.000043,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000034,24 +0.000044,26 +0.000043,26 +0.000052,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000044,26 +0.000057,26 +0.000045,26 +0.000044,26 +0.000044,26 +0.000052,26 +0.000043,26 +0.000043,26 +0.000084,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000061,26 +0.000062,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000053,26 +0.000053,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000067,26 +0.000073,26 +0.000044,26 +0.000072,26 +0.000074,26 +0.000053,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000061,26 +0.000057,26 +0.000053,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000043,26 +0.000065,26 +0.000091,26 +0.000047,26 +0.000044,26 +0.000044,26 +0.000048,26 +0.000044,26 +0.000044,26 +0.000049,26 +0.000048,26 +0.000053,26 +0.000043,26 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000084,28 +0.000084,28 +0.000098,28 +0.000063,28 +0.000054,28 +0.000054,28 +0.000064,28 +0.000084,28 +0.000064,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000081,28 +0.000063,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000064,28 +0.000074,28 +0.000085,28 +0.000095,28 +0.000063,28 +0.000054,28 +0.000064,28 +0.000073,28 +0.000085,28 +0.000064,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000053,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000062,28 +0.000092,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000054,28 +0.000067,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000066,30 +0.000065,30 +0.000098,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000065,30 +0.000066,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000104,30 +0.000077,30 +0.000127,30 +0.000075,30 +0.000065,30 +0.000066,30 +0.000095,30 +0.000086,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000076,30 +0.000087,30 +0.000140,30 +0.000075,30 +0.000066,30 +0.000085,30 +0.000106,30 +0.000076,30 +0.000066,30 +0.000065,30 +0.000066,30 +0.000101,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000065,30 +0.000066,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000074,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000067,30 +0.000098,30 +0.000108,30 +0.000075,30 +0.000065,30 +0.000085,30 +0.000106,30 +0.000076,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000066,30 +0.000065,30 +0.000065,30 +0.000076,30 +0.000081,30 +0.000103,30 +0.000096,30 +0.000069,30 +0.000091,30 +0.000080,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000090,32 +0.000089,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000110,32 +0.000138,32 +0.000099,32 +0.000079,32 +0.000099,32 +0.000120,32 +0.000089,32 +0.000079,32 +0.000119,32 +0.000121,32 +0.000081,32 +0.000085,32 +0.000086,32 +0.000093,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000114,32 +0.000110,32 +0.000155,32 +0.000089,32 +0.000079,32 +0.000090,32 +0.000120,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000109,32 +0.000112,32 +0.000132,32 +0.000079,32 +0.000079,32 +0.000121,32 +0.000089,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000105,32 +0.000089,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000079,32 +0.000103,32 +0.000089,32 +0.000096,34 +0.000094,34 +0.000094,34 +0.000125,34 +0.000139,34 +0.000115,34 +0.000114,34 +0.000136,34 +0.000104,34 +0.000094,34 +0.000104,34 +0.000119,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000126,34 +0.000168,34 +0.000104,34 +0.000115,34 +0.000136,34 +0.000105,34 +0.000095,34 +0.000139,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000106,34 +0.000159,34 +0.000134,34 +0.000095,34 +0.000125,34 +0.000116,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000131,34 +0.000095,34 +0.000095,34 +0.000125,34 +0.000165,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000095,34 +0.000125,34 +0.000143,34 +0.000149,34 +0.000095,34 +0.000115,34 +0.000136,34 +0.000104,34 +0.000095,34 +0.000105,34 +0.000133,34 +0.000152,34 +0.000095,34 +0.000105,34 +0.000135,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000094,34 +0.000095,34 +0.000112,36 +0.000123,36 +0.000175,36 +0.000120,36 +0.000146,36 +0.000125,36 +0.000115,36 +0.000115,36 +0.000131,36 +0.000124,36 +0.000124,36 +0.000124,36 +0.000124,36 +0.000140,36 +0.000129,36 +0.000124,36 +0.000159,36 +0.000135,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000114,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000115,36 +0.000150,36 +0.000122,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000133,36 +0.000151,36 +0.000163,36 +0.000153,36 +0.000152,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000145,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000152,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000123,36 +0.000148,36 +0.000127,36 +0.000123,36 +0.000163,36 +0.000121,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000132,36 +0.000111,36 +0.000112,36 +0.000112,36 +0.000112,36 +0.000133,38 +0.000131,38 +0.000131,38 +0.000173,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000141,38 +0.000189,38 +0.000178,38 +0.000140,38 +0.000182,38 +0.000141,38 +0.000131,38 +0.000138,38 +0.000181,38 +0.000175,38 +0.000181,38 +0.000162,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000146,38 +0.000174,38 +0.000230,38 +0.000194,38 +0.000195,38 +0.000222,38 +0.000131,38 +0.000134,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000132,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000132,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000132,38 +0.000131,38 +0.000175,38 +0.000197,38 +0.000144,38 +0.000176,38 +0.000175,38 +0.000134,38 +0.000135,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000182,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000152,38 +0.000131,38 +0.000141,38 +0.000189,38 +0.000179,38 +0.000172,38 +0.000171,38 +0.000131,38 +0.000169,38 +0.000131,38 +0.000141,38 +0.000140,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000131,38 +0.000177,38 +0.000163,38 +0.000161,38 +0.000182,38 +0.000131,38 +0.000131,38 +0.000149,38 +0.000209,40 +0.000172,40 +0.000213,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000192,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000153,40 +0.000217,40 +0.000162,40 +0.000203,40 +0.000209,40 +0.000152,40 +0.000152,40 +0.000152,40 +0.000174,40 +0.000152,40 +0.000152,40 +0.000163,40 +0.000179,40 +0.000210,40 +0.000172,40 +0.000225,40 +0.000160,40 +0.000200,40 +0.000195,40 +0.000184,40 +0.000167,40 +0.000154,40 +0.000174,40 +0.000181,40 +0.000166,40 +0.000162,40 +0.000153,40 +0.000165,40 +0.000165,40 +0.000153,40 +0.000164,40 +0.000157,40 +0.000157,40 +0.000157,40 +0.000157,40 +0.000157,40 +0.000163,40 +0.000153,40 +0.000153,40 +0.000153,40 +0.000164,40 +0.000195,40 +0.000158,40 +0.000153,40 +0.000185,40 +0.000165,40 +0.000153,40 +0.000153,40 +0.000163,40 +0.000165,40 +0.000152,40 +0.000153,40 +0.000153,40 +0.000153,40 +0.000169,40 +0.000272,40 +0.000177,40 +0.000195,40 +0.000196,40 +0.000162,40 +0.000210,40 +0.000177,40 +0.000166,40 +0.000176,40 +0.000258,40 +0.000241,40 +0.000176,40 +0.000166,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000156,40 +0.000184,40 +0.000184,40 +0.000198,40 +0.000158,40 +0.000158,40 +0.000158,40 +0.000158,40 +0.000184,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000238,42 +0.000302,42 +0.000215,42 +0.000192,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000206,42 +0.000199,42 +0.000188,42 +0.000203,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000206,42 +0.000309,42 +0.000182,42 +0.000222,42 +0.000182,42 +0.000219,42 +0.000280,42 +0.000212,42 +0.000225,42 +0.000187,42 +0.000187,42 +0.000187,42 +0.000191,42 +0.000187,42 +0.000187,42 +0.000305,42 +0.000270,42 +0.000180,42 +0.000204,42 +0.000298,42 +0.000289,42 +0.000190,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000201,42 +0.000314,42 +0.000307,42 +0.000314,42 +0.000338,42 +0.000333,42 +0.000327,42 +0.000317,42 +0.000329,42 +0.000328,42 +0.000363,42 +0.000331,42 +0.000323,42 +0.000311,42 +0.000269,42 +0.000233,42 +0.000212,42 +0.000217,42 +0.000272,42 +0.000322,42 +0.000341,42 +0.000225,42 +0.000195,42 +0.000182,42 +0.000182,42 +0.000207,42 +0.000273,42 +0.000187,42 +0.000187,42 +0.000187,42 +0.000187,42 +0.000193,42 +0.000182,42 +0.000182,42 +0.000182,42 +0.000215,42 +0.000220,42 +0.000202,42 +0.000191,42 +0.000208,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000180,42 +0.000209,44 +0.000207,44 +0.000207,44 +0.000285,44 +0.000239,44 +0.000239,44 +0.000247,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000253,44 +0.000235,44 +0.000246,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000221,44 +0.000212,44 +0.000212,44 +0.000263,44 +0.000250,44 +0.000227,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000226,44 +0.000207,44 +0.000207,44 +0.000257,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000246,44 +0.000249,44 +0.000217,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000244,44 +0.000239,44 +0.000207,44 +0.000207,44 +0.000231,44 +0.000240,44 +0.000247,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000273,44 +0.000237,44 +0.000216,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000224,44 +0.000245,44 +0.000262,44 +0.000227,44 +0.000207,44 +0.000207,44 +0.000212,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000226,44 +0.000271,44 +0.000272,44 +0.000212,44 +0.000217,44 +0.000212,44 +0.000212,44 +0.000212,44 +0.000212,44 +0.000212,44 +0.000245,44 +0.000227,44 +0.000207,44 +0.000207,44 +0.000210,44 +0.000249,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000207,44 +0.000237,46 +0.000261,46 +0.000249,46 +0.000236,46 +0.000236,46 +0.000255,46 +0.000240,46 +0.000281,46 +0.000263,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000235,46 +0.000236,46 +0.000274,46 +0.000241,46 +0.000274,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000259,46 +0.000357,46 +0.000296,46 +0.000256,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000255,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000255,46 +0.000248,46 +0.000269,46 +0.000253,46 +0.000229,46 +0.000324,46 +0.000286,46 +0.000245,46 +0.000240,46 +0.000282,46 +0.000265,46 +0.000230,46 +0.000230,46 +0.000230,46 +0.000230,46 +0.000283,46 +0.000302,46 +0.000239,46 +0.000230,46 +0.000230,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000230,46 +0.000230,46 +0.000229,46 +0.000230,46 +0.000280,46 +0.000230,46 +0.000230,46 +0.000229,46 +0.000229,46 +0.000322,46 +0.000386,46 +0.000279,46 +0.000242,46 +0.000242,46 +0.000242,46 +0.000267,46 +0.000236,46 +0.000236,46 +0.000235,46 +0.000236,46 +0.000260,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000235,46 +0.000236,46 +0.000236,46 +0.000236,46 +0.000242,46 +0.000265,46 +0.000372,46 +0.000339,48 +0.000281,48 +0.000438,48 +0.000286,48 +0.000281,48 +0.000260,48 +0.000276,48 +0.000333,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000293,48 +0.000363,48 +0.000319,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000299,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000371,48 +0.000476,48 +0.000272,48 +0.000263,48 +0.000304,48 +0.000263,48 +0.000309,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000300,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000352,48 +0.000466,48 +0.000337,48 +0.000263,48 +0.000263,48 +0.000263,48 +0.000378,48 +0.000471,48 +0.000335,48 +0.000260,48 +0.000260,48 +0.000260,48 +0.000358,48 +0.000337,48 +0.000293,48 +0.000260,48 +0.000274,48 +0.000271,48 +0.000274,48 +0.000271,48 +0.000273,48 +0.000271,48 +0.000282,48 +0.000283,48 +0.000260,48 +0.000260,48 +0.000285,48 +0.000260,48 +0.000284,48 +0.000260,48 +0.000272,48 +0.000272,48 +0.000260,48 +0.000331,48 +0.000461,48 +0.000328,48 +0.000291,48 +0.000325,48 +0.000402,48 +0.000333,48 +0.000284,48 +0.000300,50 +0.000316,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000533,50 +0.000402,50 +0.000340,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000400,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000301,50 +0.000506,50 +0.000445,50 +0.000294,50 +0.000309,50 +0.000424,50 +0.000302,50 +0.000304,50 +0.000304,50 +0.000310,50 +0.000294,50 +0.000294,50 +0.000344,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000355,50 +0.000308,50 +0.000333,50 +0.000294,50 +0.000333,50 +0.000465,50 +0.000440,50 +0.000349,50 +0.000508,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000341,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000313,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000374,50 +0.000299,50 +0.000294,50 +0.000344,50 +0.000294,50 +0.000300,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000572,50 +0.000427,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000332,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000297,50 +0.000461,50 +0.000454,50 +0.000376,50 +0.000313,50 +0.000294,50 +0.000294,50 +0.000294,50 +0.000354,50 +0.000294,50 +0.000588,52 +0.000370,52 +0.000333,52 +0.000333,52 +0.000378,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000415,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000655,52 +0.000353,52 +0.000591,52 +0.000396,52 +0.000367,52 +0.000341,52 +0.000375,52 +0.000330,52 +0.000330,52 +0.000378,52 +0.000591,52 +0.000334,52 +0.000333,52 +0.000333,52 +0.000333,52 +0.000333,52 +0.000333,52 +0.000375,52 +0.000330,52 +0.000369,52 +0.000330,52 +0.000330,52 +0.000336,52 +0.000493,52 +0.000479,52 +0.000333,52 +0.000333,52 +0.000333,52 +0.000378,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000494,52 +0.000468,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000376,52 +0.000408,52 +0.000376,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000575,52 +0.000368,52 +0.000330,52 +0.000340,52 +0.000405,52 +0.000378,52 +0.000339,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000600,52 +0.000340,52 +0.000330,52 +0.000330,52 +0.000345,52 +0.000349,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000390,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000382,52 +0.000589,52 +0.000369,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000329,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000330,52 +0.000372,54 +0.000369,54 +0.000369,54 +0.000579,54 +0.000500,54 +0.000471,54 +0.000378,54 +0.000369,54 +0.000379,54 +0.000378,54 +0.000443,54 +0.000369,54 +0.000410,54 +0.000515,54 +0.000437,54 +0.000546,54 +0.000378,54 +0.000377,54 +0.000369,54 +0.000380,54 +0.000588,54 +0.000405,54 +0.000368,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000431,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000410,54 +0.000413,54 +0.000369,54 +0.000369,54 +0.000651,54 +0.000382,54 +0.000373,54 +0.000373,54 +0.000373,54 +0.000373,54 +0.000373,54 +0.000416,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000400,54 +0.000459,54 +0.000369,54 +0.000369,54 +0.000381,54 +0.000378,54 +0.000402,54 +0.000379,54 +0.000411,54 +0.000527,54 +0.000369,54 +0.000379,54 +0.000408,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000404,54 +0.000369,54 +0.000409,54 +0.000369,54 +0.000369,54 +0.000389,54 +0.000369,54 +0.000459,54 +0.000376,54 +0.000438,54 +0.000442,54 +0.000378,54 +0.000369,54 +0.000369,54 +0.000541,54 +0.000588,54 +0.000392,54 +0.000389,54 +0.000389,54 +0.000403,54 +0.000378,54 +0.000378,54 +0.000378,54 +0.000379,54 +0.000378,54 +0.000378,54 +0.000434,54 +0.000369,54 +0.000369,54 +0.000369,54 +0.000406,54 +0.000368,54 +0.000369,54 +0.000369,54 +0.000454,54 +0.000443,54 +0.000395,54 +0.000369,54 +0.000412,56 +0.000410,56 +0.000452,56 +0.000410,56 +0.000411,56 +0.000410,56 +0.000411,56 +0.000411,56 +0.000410,56 +0.000411,56 +0.000451,56 +0.000455,56 +0.000490,56 +0.000466,56 +0.000411,56 +0.000410,56 +0.000411,56 +0.000411,56 +0.000410,56 +0.000410,56 +0.000411,56 +0.000447,56 +0.000410,56 +0.000410,56 +0.000411,56 +0.000411,56 +0.000411,56 +0.000430,56 +0.000486,56 +0.000467,56 +0.000448,56 +0.000411,56 +0.000410,56 +0.000498,56 +0.000450,56 +0.000491,56 +0.000471,56 +0.000411,56 +0.000410,56 +0.000443,56 +0.000410,56 +0.000410,56 +0.000411,56 +0.000411,56 +0.000410,56 +0.000410,56 +0.000411,56 +0.000410,56 +0.000412,56 +0.000528,56 +0.000454,56 +0.000411,56 +0.000451,56 +0.000411,56 +0.000410,56 +0.000410,56 +0.000517,56 +0.000489,56 +0.000410,56 +0.000410,56 +0.000498,56 +0.000450,56 +0.000410,56 +0.000410,56 +0.000411,56 +0.000431,56 +0.000437,56 +0.000479,56 +0.000411,56 +0.000411,56 +0.000430,56 +0.000442,56 +0.000662,56 +0.000483,56 +0.000445,56 +0.000454,56 +0.000410,56 +0.000410,56 +0.000410,56 +0.000410,56 +0.000597,56 +0.000603,56 +0.000460,56 +0.000458,56 +0.000709,56 +0.000501,56 +0.000462,56 +0.000453,56 +0.000433,56 +0.000421,56 +0.000421,56 +0.000421,56 +0.000449,56 +0.000411,56 +0.000411,56 +0.000679,56 +0.000441,56 +0.000421,56 +0.000421,56 +0.000421,56 +0.000469,58 +0.000832,58 +0.000624,58 +0.000507,58 +0.000506,58 +0.000455,58 +0.000455,58 +0.000538,58 +0.000739,58 +0.000536,58 +0.000467,58 +0.000467,58 +0.000468,58 +0.000487,58 +0.000554,58 +0.000495,58 +0.000467,58 +0.000467,58 +0.000559,58 +0.000508,58 +0.000480,58 +0.000480,58 +0.000582,58 +0.000483,58 +0.000480,58 +0.000480,58 +0.000480,58 +0.000480,58 +0.000506,58 +0.000477,58 +0.000467,58 +0.000467,58 +0.000499,58 +0.000455,58 +0.000697,58 +0.000636,58 +0.000502,58 +0.000472,58 +0.000514,58 +0.000506,58 +0.000566,58 +0.000465,58 +0.000455,58 +0.000515,58 +0.000707,58 +0.000478,58 +0.000487,58 +0.000519,58 +0.000490,58 +0.000467,58 +0.000467,58 +0.000522,58 +0.000483,58 +0.000467,58 +0.000488,58 +0.000477,58 +0.000467,58 +0.000467,58 +0.000467,58 +0.000478,58 +0.000642,58 +0.000498,58 +0.000483,58 +0.000472,58 +0.000467,58 +0.000467,58 +0.000467,58 +0.000502,58 +0.000533,58 +0.000473,58 +0.000467,58 +0.000480,58 +0.000455,58 +0.000498,58 +0.000544,58 +0.000455,58 +0.000632,58 +0.000488,58 +0.000500,58 +0.000507,58 +0.000468,58 +0.000486,58 +0.000499,58 +0.000455,58 +0.000480,58 +0.000493,58 +0.000467,58 +0.000530,58 +0.000557,58 +0.000495,58 +0.000518,58 +0.000539,58 +0.000572,58 +0.000487,58 +0.000467,58 +0.000495,58 +0.000467,58 +0.000498,58 +0.000613,58 +0.000513,58 +0.000605,60 +0.000517,60 +0.000526,60 +0.000540,60 +0.000503,60 +0.000504,60 +0.000648,60 +0.000701,60 +0.000610,60 +0.000554,60 +0.000532,60 +0.000517,60 +0.000645,60 +0.000517,60 +0.000516,60 +0.000517,60 +0.000531,60 +0.000638,60 +0.000557,60 +0.000517,60 +0.000517,60 +0.000517,60 +0.000517,60 +0.000517,60 +0.000563,60 +0.000653,60 +0.000517,60 +0.000517,60 +0.000565,60 +0.000560,60 +0.000555,60 +0.000548,60 +0.000517,60 +0.000525,60 +0.000650,60 +0.000613,60 +0.000596,60 +0.000517,60 +0.000547,60 +0.000614,60 +0.000526,60 +0.000517,60 +0.000556,60 +0.000551,60 +0.000517,60 +0.000517,60 +0.000670,60 +0.000537,60 +0.000517,60 +0.000531,60 +0.000517,60 +0.000517,60 +0.000613,60 +0.000547,60 +0.000517,60 +0.000585,60 +0.000543,60 +0.000517,60 +0.000517,60 +0.000552,60 +0.000550,60 +0.000553,60 +0.000528,60 +0.000559,60 +0.000517,60 +0.000517,60 +0.000684,60 +0.000583,60 +0.000526,60 +0.000517,60 +0.000604,60 +0.000517,60 +0.000517,60 +0.000517,60 +0.000517,60 +0.000588,60 +0.000538,60 +0.000610,60 +0.000534,60 +0.000622,60 +0.000517,60 +0.000517,60 +0.000596,60 +0.000558,60 +0.000544,60 +0.000564,60 +0.000545,60 +0.000537,60 +0.000517,60 +0.000542,60 +0.000586,60 +0.000582,60 +0.000579,60 +0.000522,60 +0.000517,60 +0.000554,60 +0.000558,60 +0.000604,60 +0.000526,60 +0.000563,60 +0.000599,62 +0.000611,62 +0.000569,62 +0.000601,62 +0.000648,62 +0.000579,62 +0.000605,62 +0.000607,62 +0.000613,62 +0.000570,62 +0.000654,62 +0.000610,62 +0.000637,62 +0.000569,62 +0.000569,62 +0.000596,62 +0.000611,62 +0.000664,62 +0.000569,62 +0.000598,62 +0.000570,62 +0.000575,62 +0.000639,62 +0.000654,62 +0.000661,62 +0.000570,62 +0.000569,62 +0.000671,62 +0.000625,62 +0.000630,62 +0.000595,62 +0.000580,62 +0.000695,62 +0.000584,62 +0.000569,62 +0.000719,62 +0.000616,62 +0.000569,62 +0.000644,62 +0.000610,62 +0.000615,62 +0.000605,62 +0.000626,62 +0.000580,62 +0.000580,62 +0.000659,62 +0.000601,62 +0.000570,62 +0.000675,62 +0.000597,62 +0.000570,62 +0.000735,62 +0.000596,62 +0.000570,62 +0.000569,62 +0.000609,62 +0.000749,62 +0.000793,62 +0.000687,62 +0.000570,62 +0.000785,62 +0.000754,62 +0.000608,62 +0.000626,62 +0.000628,62 +0.000734,62 +0.000564,62 +0.000593,62 +0.000564,62 +0.000598,62 +0.000848,62 +0.000569,62 +0.000602,62 +0.000569,62 +0.000781,62 +0.000628,62 +0.000621,62 +0.000570,62 +0.000569,62 +0.000689,62 +0.000595,62 +0.000598,62 +0.000650,62 +0.000576,62 +0.000569,62 +0.000627,62 +0.000617,62 +0.000649,62 +0.000590,62 +0.000579,62 +0.000569,62 +0.000569,62 +0.000569,62 +0.000587,62 +0.000582,62 +0.000569,62 +0.000570,62 +0.000570,62 +0.000555,62 +0.000779,62 +0.000785,64 +0.000667,64 +0.000626,64 +0.000672,64 +0.000706,64 +0.000632,64 +0.000670,64 +0.000610,64 +0.000609,64 +0.000704,64 +0.000675,64 +0.000625,64 +0.000799,64 +0.000684,64 +0.000636,64 +0.000636,64 +0.000610,64 +0.000610,64 +0.000652,64 +0.000610,64 +0.000609,64 +0.000621,64 +0.000832,64 +0.000626,64 +0.000740,64 +0.000707,64 +0.000636,64 +0.000626,64 +0.000626,64 +0.000677,64 +0.000675,64 +0.000680,64 +0.000849,64 +0.000617,64 +0.000616,64 +0.000617,64 +0.000655,64 +0.000617,64 +0.000894,64 +0.000675,64 +0.000660,64 +0.000877,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000630,64 +0.000630,64 +0.000610,64 +0.000822,64 +0.000718,64 +0.000626,64 +0.000816,64 +0.000610,64 +0.000732,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000803,64 +0.000667,64 +0.000646,64 +0.000626,64 +0.000640,64 +0.000626,64 +0.000650,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000646,64 +0.000610,64 +0.000610,64 +0.000755,64 +0.000610,64 +0.000610,64 +0.000630,64 +0.000767,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000653,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000650,64 +0.000610,64 +0.000658,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000610,64 +0.000643,64 +0.000610,64 +0.000701,66 +0.000736,66 +0.000701,66 +0.000695,66 +0.000757,66 +0.000892,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000794,66 +0.000719,66 +0.000730,66 +0.000720,66 +0.000768,66 +0.000752,66 +0.000803,66 +0.000695,66 +0.000803,66 +0.000817,66 +0.000695,66 +0.000730,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000730,66 +0.000695,66 +0.000695,66 +0.000714,66 +0.000695,66 +0.000695,66 +0.000733,66 +0.000735,66 +0.000877,66 +0.000695,66 +0.000695,66 +0.000788,66 +0.000696,66 +0.000707,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000736,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000696,66 +0.000695,66 +0.000730,66 +0.000830,66 +0.001033,66 +0.000793,66 +0.000776,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000695,66 +0.000734,66 +0.000734,66 +0.000695,66 +0.000705,66 +0.000695,66 +0.000695,66 +0.000723,66 +0.000735,66 +0.000887,66 +0.000839,66 +0.001128,66 +0.000973,66 +0.000763,66 +0.000749,66 +0.000970,66 +0.000838,66 +0.000749,66 +0.000845,66 +0.000848,66 +0.000736,66 +0.001027,66 +0.001168,66 +0.001270,66 +0.000751,66 +0.000812,66 +0.000766,66 +0.000714,66 +0.000796,66 +0.000723,66 +0.000749,66 +0.000777,66 +0.000744,66 +0.000703,66 +0.000795,66 +0.000938,66 +0.000951,66 +0.001383,66 +0.000888,66 +0.000774,66 +0.000845,66 +0.001012,66 +0.000972,66 +0.000907,68 +0.001312,68 +0.001344,68 +0.001450,68 +0.001564,68 +0.001454,68 +0.001484,68 +0.001321,68 +0.001172,68 +0.000795,68 +0.000780,68 +0.000896,68 +0.000932,68 +0.000758,68 +0.000793,68 +0.000760,68 +0.000781,68 +0.000796,68 +0.000750,68 +0.000798,68 +0.000770,68 +0.000750,68 +0.000815,68 +0.000750,68 +0.000768,68 +0.000752,68 +0.000890,68 +0.000791,68 +0.000766,68 +0.000730,68 +0.000794,68 +0.000783,68 +0.000771,68 +0.000731,68 +0.000795,68 +0.000825,68 +0.000740,68 +0.000731,68 +0.000730,68 +0.000730,68 +0.000773,68 +0.000730,68 +0.000749,68 +0.000730,68 +0.000829,68 +0.000801,68 +0.000730,68 +0.000872,68 +0.000770,68 +0.000843,68 +0.000796,68 +0.000978,68 +0.000765,68 +0.000857,68 +0.000780,68 +0.000829,68 +0.000744,68 +0.000778,68 +0.000767,68 +0.000777,68 +0.000798,68 +0.000741,68 +0.000730,68 +0.000799,68 +0.000816,68 +0.000816,68 +0.000731,68 +0.000730,68 +0.000800,68 +0.000808,68 +0.000837,68 +0.000731,68 +0.000770,68 +0.000770,68 +0.000832,68 +0.000751,68 +0.000831,68 +0.000730,68 +0.000792,68 +0.000730,68 +0.000751,68 +0.000774,68 +0.000730,68 +0.000730,68 +0.000730,68 +0.000730,68 +0.000830,68 +0.000773,68 +0.000881,68 +0.000797,68 +0.000875,68 +0.000819,68 +0.000830,68 +0.000844,68 +0.000806,68 +0.000879,68 +0.000793,68 +0.000781,68 +0.000763,68 +0.000952,68 +0.000825,70 +0.000867,70 +0.000921,70 +0.000877,70 +0.000817,70 +0.000908,70 +0.000816,70 +0.000816,70 +0.000816,70 +0.000817,70 +0.000928,70 +0.000842,70 +0.000823,70 +0.000836,70 +0.000795,70 +0.000836,70 +0.000795,70 +0.000834,70 +0.000795,70 +0.000835,70 +0.000830,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000841,70 +0.000815,70 +0.000795,70 +0.000795,70 +0.000889,70 +0.000954,70 +0.000795,70 +0.000795,70 +0.000820,70 +0.000839,70 +0.000795,70 +0.000795,70 +0.000835,70 +0.000795,70 +0.000842,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000818,70 +0.000795,70 +0.000795,70 +0.000796,70 +0.000795,70 +0.000822,70 +0.000835,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000840,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000835,70 +0.000804,70 +0.000835,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000797,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000797,70 +0.000795,70 +0.000835,70 +0.000795,70 +0.000795,70 +0.000842,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000819,70 +0.000835,70 +0.000795,70 +0.000795,70 +0.000795,70 +0.000801,70 +0.000795,70 +0.000819,70 +0.000814,70 +0.000795,70 +0.000797,70 +0.000984,70 +0.000963,70 +0.000832,70 +0.000852,70 +0.000813,70 +0.000854,70 +0.000875,70 +0.000834,70 +0.001028,70 +0.000839,70 +0.000928,72 +0.000914,72 +0.000922,72 +0.000943,72 +0.001004,72 +0.000911,72 +0.000916,72 +0.000949,72 +0.000974,72 +0.001009,72 +0.001021,72 +0.000943,72 +0.000939,72 +0.001050,72 +0.001369,72 +0.000906,72 +0.000931,72 +0.000939,72 +0.001310,72 +0.001418,72 +0.001016,72 +0.000865,72 +0.000924,72 +0.000993,72 +0.000865,72 +0.001087,72 +0.001341,72 +0.000912,72 +0.000969,72 +0.000912,72 +0.000910,72 +0.000887,72 +0.001002,72 +0.000927,72 +0.000911,72 +0.000972,72 +0.001009,72 +0.000945,72 +0.000917,72 +0.000887,72 +0.000948,72 +0.001074,72 +0.000913,72 +0.001173,72 +0.000888,72 +0.001074,72 +0.000951,72 +0.001027,72 +0.000887,72 +0.000908,72 +0.000988,72 +0.000917,72 +0.000887,72 +0.000888,72 +0.000888,72 +0.000912,72 +0.001002,72 +0.000969,72 +0.000928,72 +0.000915,72 +0.001005,72 +0.001022,72 +0.000888,72 +0.000914,72 +0.001134,72 +0.000888,72 +0.000888,72 +0.000908,72 +0.000944,72 +0.001175,72 +0.000911,72 +0.000897,72 +0.000915,72 +0.000887,72 +0.000887,72 +0.000951,72 +0.000912,72 +0.000887,72 +0.000907,72 +0.000887,72 +0.001062,72 +0.000899,72 +0.000865,72 +0.000865,72 +0.000865,72 +0.000925,72 +0.000875,72 +0.000894,72 +0.000865,72 +0.000900,72 +0.000865,72 +0.001257,72 +0.000972,72 +0.000991,72 +0.001001,72 +0.000906,72 +0.000978,72 +0.000865,72 +0.000907,72 +0.000898,72 +0.000985,74 +0.001021,74 +0.000988,74 +0.001000,74 +0.001000,74 +0.001176,74 +0.000992,74 +0.000938,74 +0.000938,74 +0.000938,74 +0.001051,74 +0.000978,74 +0.001045,74 +0.000988,74 +0.001011,74 +0.001138,74 +0.001130,74 +0.001041,74 +0.000939,74 +0.001171,74 +0.001081,74 +0.001145,74 +0.001003,74 +0.000959,74 +0.000938,74 +0.000974,74 +0.001038,74 +0.001237,74 +0.001027,74 +0.001068,74 +0.000938,74 +0.000938,74 +0.000938,74 +0.000975,74 +0.000938,74 +0.000978,74 +0.000965,74 +0.001030,74 +0.000938,74 +0.000938,74 +0.001065,74 +0.001153,74 +0.000963,74 +0.000998,74 +0.000958,74 +0.001040,74 +0.000952,74 +0.000938,74 +0.000999,74 +0.001004,74 +0.000938,74 +0.000938,74 +0.000977,74 +0.001011,74 +0.000938,74 +0.000978,74 +0.001126,74 +0.001096,74 +0.001035,74 +0.000964,74 +0.000978,74 +0.000970,74 +0.001084,74 +0.000958,74 +0.000958,74 +0.001020,74 +0.000938,74 +0.000938,74 +0.000939,74 +0.001004,74 +0.000978,74 +0.000938,74 +0.000938,74 +0.000938,74 +0.000961,74 +0.000938,74 +0.000938,74 +0.000958,74 +0.000963,74 +0.000938,74 +0.001061,74 +0.000938,74 +0.000966,74 +0.000938,74 +0.000938,74 +0.000938,74 +0.000988,74 +0.000938,74 +0.000978,74 +0.000938,74 +0.000961,74 +0.000938,74 +0.000938,74 +0.000938,74 +0.000943,74 +0.000938,74 +0.000938,74 +0.000959,74 +0.000938,74 +0.000963,74 +0.001054,76 +0.001051,76 +0.001090,76 +0.001150,76 +0.001072,76 +0.001172,76 +0.001086,76 +0.001111,76 +0.001071,76 +0.001152,76 +0.001089,76 +0.001051,76 +0.001051,76 +0.001086,76 +0.001061,76 +0.001051,76 +0.001051,76 +0.001075,76 +0.001051,76 +0.001091,76 +0.001112,76 +0.001086,76 +0.001051,76 +0.001071,76 +0.001051,76 +0.001055,76 +0.001051,76 +0.001051,76 +0.001055,76 +0.001051,76 +0.001051,76 +0.001051,76 +0.001053,76 +0.001051,76 +0.001091,76 +0.001051,76 +0.001094,76 +0.001051,76 +0.001051,76 +0.001090,76 +0.001055,76 +0.001052,76 +0.001051,76 +0.001051,76 +0.001118,76 +0.001051,76 +0.001051,76 +0.001183,76 +0.001303,76 +0.001051,76 +0.001112,76 +0.001124,76 +0.001051,76 +0.001051,76 +0.001075,76 +0.001051,76 +0.001553,76 +0.001176,76 +0.001095,76 +0.001416,76 +0.001071,76 +0.001087,76 +0.001051,76 +0.001051,76 +0.001091,76 +0.001083,76 +0.001102,76 +0.001051,76 +0.001092,76 +0.001051,76 +0.001051,76 +0.001071,76 +0.001075,76 +0.001051,76 +0.001216,76 +0.001051,76 +0.001080,76 +0.001051,76 +0.001051,76 +0.001051,76 +0.001114,76 +0.001090,76 +0.001051,76 +0.001053,76 +0.001051,76 +0.001051,76 +0.001051,76 +0.001055,76 +0.001052,76 +0.001094,76 +0.001051,76 +0.001053,76 +0.001051,76 +0.001051,76 +0.001051,76 +0.001115,76 +0.001051,76 +0.001091,76 +0.001053,76 +0.001051,76 +0.001100,78 +0.001097,78 +0.001101,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001099,78 +0.001097,78 +0.001097,78 +0.001122,78 +0.001097,78 +0.001136,78 +0.001156,78 +0.001120,78 +0.001097,78 +0.001097,78 +0.001125,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001099,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001101,78 +0.001097,78 +0.001136,78 +0.001138,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001101,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001119,78 +0.001147,78 +0.001097,78 +0.001167,78 +0.001097,78 +0.001097,78 +0.001136,78 +0.001140,78 +0.001097,78 +0.001097,78 +0.001099,78 +0.001097,78 +0.001097,78 +0.001141,78 +0.001167,78 +0.001148,78 +0.001130,78 +0.001170,78 +0.001122,78 +0.001332,78 +0.001157,78 +0.001139,78 +0.001136,78 +0.001097,78 +0.001121,78 +0.001196,78 +0.001097,78 +0.001096,78 +0.001127,78 +0.001097,78 +0.001097,78 +0.001119,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001160,78 +0.001117,78 +0.001116,78 +0.001097,78 +0.001125,78 +0.001097,78 +0.001097,78 +0.001119,78 +0.001097,78 +0.001097,78 +0.001096,78 +0.001122,78 +0.001097,78 +0.001097,78 +0.001121,78 +0.001136,78 +0.001097,78 +0.001136,78 +0.001128,78 +0.001097,78 +0.001171,78 +0.001097,78 +0.001103,78 +0.001097,78 +0.001117,78 +0.001106,78 +0.001097,78 +0.001097,78 +0.001097,78 +0.001100,78 +0.001264,80 +0.001262,80 +0.001225,80 +0.001223,80 +0.001223,80 +0.001227,80 +0.001223,80 +0.001223,80 +0.001223,80 +0.001225,80 +0.001223,80 +0.001223,80 +0.001227,80 +0.001223,80 +0.001262,80 +0.001283,80 +0.001223,80 +0.001223,80 +0.001227,80 +0.001223,80 +0.001223,80 +0.001223,80 +0.001225,80 +0.001282,80 +0.001223,80 +0.001227,80 +0.001223,80 +0.001712,80 +0.001329,80 +0.001264,80 +0.001255,80 +0.001251,80 +0.001223,80 +0.001599,80 +0.001299,80 +0.001271,80 +0.001335,80 +0.001309,80 +0.001575,80 +0.001408,80 +0.001299,80 +0.001467,80 +0.001480,80 +0.001317,80 +0.001264,80 +0.001394,80 +0.001587,80 +0.001334,80 +0.001425,80 +0.001378,80 +0.001411,80 +0.001429,80 +0.001355,80 +0.001371,80 +0.001385,80 +0.001368,80 +0.001379,80 +0.001418,80 +0.001370,80 +0.001374,80 +0.001350,80 +0.001364,80 +0.001342,80 +0.001407,80 +0.001450,80 +0.001360,80 +0.001466,80 +0.001275,80 +0.001433,80 +0.001438,80 +0.001355,80 +0.001501,80 +0.001334,80 +0.001378,80 +0.001397,80 +0.001461,80 +0.001453,80 +0.001389,80 +0.001323,80 +0.001326,80 +0.001358,80 +0.001449,80 +0.001381,80 +0.001467,80 +0.001347,80 +0.001351,80 +0.001440,80 +0.001414,80 +0.001330,80 +0.001410,80 +0.001383,80 +0.001459,80 +0.001375,80 +0.001542,80 +0.001452,80 +0.001452,80 +0.001384,80 +0.001366,80 +0.001429,80 +0.001353,80 +0.001473,82 +0.001418,82 +0.001347,82 +0.001387,82 +0.001345,82 +0.001437,82 +0.001763,82 +0.001388,82 +0.001389,82 +0.001345,82 +0.001426,82 +0.001455,82 +0.001466,82 +0.001407,82 +0.001468,82 +0.001408,82 +0.001475,82 +0.001458,82 +0.001405,82 +0.001397,82 +0.001423,82 +0.001519,82 +0.001587,82 +0.001440,82 +0.001367,82 +0.001421,82 +0.001491,82 +0.001387,82 +0.002170,82 +0.001483,82 +0.001421,82 +0.001546,82 +0.001426,82 +0.001630,82 +0.001557,82 +0.001396,82 +0.001408,82 +0.001490,82 +0.001365,82 +0.001479,82 +0.001402,82 +0.001574,82 +0.001383,82 +0.001400,82 +0.001366,82 +0.001451,82 +0.001437,82 +0.001522,82 +0.001670,82 +0.001963,82 +0.002133,82 +0.001533,82 +0.001973,82 +0.001660,82 +0.001853,82 +0.001586,82 +0.001375,82 +0.001368,82 +0.001519,82 +0.001350,82 +0.001552,82 +0.001479,82 +0.001522,82 +0.001393,82 +0.001417,82 +0.001377,82 +0.001486,82 +0.001379,82 +0.001348,82 +0.001396,82 +0.001349,82 +0.001388,82 +0.001407,82 +0.001410,82 +0.001679,82 +0.001334,82 +0.001647,82 +0.001530,82 +0.001803,82 +0.001343,82 +0.001370,82 +0.001336,82 +0.001697,82 +0.001429,82 +0.001737,82 +0.001503,82 +0.001345,82 +0.001364,82 +0.001308,82 +0.001612,82 +0.001366,82 +0.001341,82 +0.001347,82 +0.001424,82 +0.001590,82 +0.001366,82 +0.001375,82 +0.001321,82 +0.001353,82 +0.001294,82 +0.001669,84 +0.001526,84 +0.001538,84 +0.001411,84 +0.001462,84 +0.001597,84 +0.001472,84 +0.001640,84 +0.001412,84 +0.001575,84 +0.001458,84 +0.001693,84 +0.001625,84 +0.001592,84 +0.001543,84 +0.001544,84 +0.001556,84 +0.001714,84 +0.001522,84 +0.001623,84 +0.001591,84 +0.001423,84 +0.001478,84 +0.001554,84 +0.001472,84 +0.001471,84 +0.001495,84 +0.001573,84 +0.001593,84 +0.001494,84 +0.001552,84 +0.001578,84 +0.001505,84 +0.001621,84 +0.001543,84 +0.001499,84 +0.001560,84 +0.001557,84 +0.001518,84 +0.001988,84 +0.001971,84 +0.001965,84 +0.001966,84 +0.001569,84 +0.001649,84 +0.001778,84 +0.001657,84 +0.001753,84 +0.001536,84 +0.001505,84 +0.001472,84 +0.001468,84 +0.001448,84 +0.001509,84 +0.001477,84 +0.001544,84 +0.001528,84 +0.001538,84 +0.001554,84 +0.001537,84 +0.001515,84 +0.001594,84 +0.001543,84 +0.001528,84 +0.001484,84 +0.001527,84 +0.001571,84 +0.001508,84 +0.001607,84 +0.001540,84 +0.001538,84 +0.001628,84 +0.001552,84 +0.001569,84 +0.001489,84 +0.001556,84 +0.001618,84 +0.001560,84 +0.001519,84 +0.001590,84 +0.001533,84 +0.001639,84 +0.001880,84 +0.001776,84 +0.001651,84 +0.001795,84 +0.001832,84 +0.001781,84 +0.001668,84 +0.001819,84 +0.001829,84 +0.001789,84 +0.001550,84 +0.001519,84 +0.001526,84 +0.001636,84 +0.001549,84 +0.001489,84 +0.001573,84 +0.001508,84 +0.001689,86 +0.001727,86 +0.001814,86 +0.001746,86 +0.001651,86 +0.001581,86 +0.002784,86 +0.002020,86 +0.001751,86 +0.001838,86 +0.001704,86 +0.001713,86 +0.002233,86 +0.001671,86 +0.001552,86 +0.001590,86 +0.001488,86 +0.001489,86 +0.001621,86 +0.001542,86 +0.001672,86 +0.002154,86 +0.001683,86 +0.001518,86 +0.001719,86 +0.001589,86 +0.001469,86 +0.001469,86 +0.001507,86 +0.001609,86 +0.001761,86 +0.001685,86 +0.001559,86 +0.001546,86 +0.001493,86 +0.001549,86 +0.001502,86 +0.001508,86 +0.001536,86 +0.001624,86 +0.001597,86 +0.001576,86 +0.001566,86 +0.001572,86 +0.001469,86 +0.001510,86 +0.001543,86 +0.001469,86 +0.001513,86 +0.001469,86 +0.001572,86 +0.001678,86 +0.001723,86 +0.001591,86 +0.001565,86 +0.001511,86 +0.001586,86 +0.001469,86 +0.001469,86 +0.001552,86 +0.001868,86 +0.002483,86 +0.002891,86 +0.002797,86 +0.002861,86 +0.002462,86 +0.001964,86 +0.001836,86 +0.001599,86 +0.001622,86 +0.001578,86 +0.001706,86 +0.001705,86 +0.001788,86 +0.001986,86 +0.001600,86 +0.001528,86 +0.001697,86 +0.001970,86 +0.002888,86 +0.002401,86 +0.001572,86 +0.001520,86 +0.001580,86 +0.001508,86 +0.001532,86 +0.001548,86 +0.001624,86 +0.001765,86 +0.001488,86 +0.001627,86 +0.001469,86 +0.001530,86 +0.001525,86 +0.001469,86 +0.001469,86 +0.001512,86 +0.001666,86 +0.001702,86 +0.001659,86 +0.001687,88 +0.001593,88 +0.001635,88 +0.001608,88 +0.001574,88 +0.001612,88 +0.001613,88 +0.001802,88 +0.001868,88 +0.001818,88 +0.001712,88 +0.001593,88 +0.001653,88 +0.001897,88 +0.001593,88 +0.001613,88 +0.001574,88 +0.001771,88 +0.001871,88 +0.001981,88 +0.001962,88 +0.001625,88 +0.001635,88 +0.002564,88 +0.002989,88 +0.002923,88 +0.002775,88 +0.001774,88 +0.001841,88 +0.001674,88 +0.001592,88 +0.001612,88 +0.001573,88 +0.001729,88 +0.001627,88 +0.001949,88 +0.001631,88 +0.001706,88 +0.001599,88 +0.001656,88 +0.001611,88 +0.001573,88 +0.001574,88 +0.001757,88 +0.001927,88 +0.001673,88 +0.001680,88 +0.001703,88 +0.001627,88 +0.001689,88 +0.001610,88 +0.001880,88 +0.001652,88 +0.001959,88 +0.001833,88 +0.001758,88 +0.001791,88 +0.001764,88 +0.001767,88 +0.001668,88 +0.001744,88 +0.001651,88 +0.001574,88 +0.002012,88 +0.001927,88 +0.001750,88 +0.001866,88 +0.001627,88 +0.001799,88 +0.001638,88 +0.001658,88 +0.001789,88 +0.001902,88 +0.001845,88 +0.001852,88 +0.001896,88 +0.001632,88 +0.001619,88 +0.001929,88 +0.002279,88 +0.001912,88 +0.001828,88 +0.001703,88 +0.001683,88 +0.001792,88 +0.001699,88 +0.001671,88 +0.001785,88 +0.001695,88 +0.001674,88 +0.001746,88 +0.001835,88 +0.001816,88 +0.002181,88 +0.002106,88 +0.001822,88 +0.002063,88 +0.001751,88 +0.002060,88 +0.001953,88 +0.002506,90 +0.002729,90 +0.002557,90 +0.002289,90 +0.002198,90 +0.002215,90 +0.002222,90 +0.002952,90 +0.002940,90 +0.002199,90 +0.002351,90 +0.002141,90 +0.001943,90 +0.002165,90 +0.002890,90 +0.002427,90 +0.002257,90 +0.002644,90 +0.002190,90 +0.002735,90 +0.002083,90 +0.002364,90 +0.002731,90 +0.003146,90 +0.002302,90 +0.002487,90 +0.002181,90 +0.002008,90 +0.002087,90 +0.001829,90 +0.001937,90 +0.002182,90 +0.002111,90 +0.002008,90 +0.001927,90 +0.001947,90 +0.002299,90 +0.002398,90 +0.001884,90 +0.001889,90 +0.002031,90 +0.001808,90 +0.001882,90 +0.001899,90 +0.002200,90 +0.002058,90 +0.001909,90 +0.001916,90 +0.001905,90 +0.001876,90 +0.001885,90 +0.001819,90 +0.002004,90 +0.002309,90 +0.002066,90 +0.001904,90 +0.001882,90 +0.001827,90 +0.001815,90 +0.001880,90 +0.001880,90 +0.002356,90 +0.002548,90 +0.001877,90 +0.001901,90 +0.001806,90 +0.001802,90 +0.001874,90 +0.001893,90 +0.002230,90 +0.002034,90 +0.002065,90 +0.001932,90 +0.001997,90 +0.001898,90 +0.002424,90 +0.003206,90 +0.003277,90 +0.003128,90 +0.002408,90 +0.002066,90 +0.002048,90 +0.002269,90 +0.002389,90 +0.002295,90 +0.002206,90 +0.002143,90 +0.002052,90 +0.002010,90 +0.001989,90 +0.002045,90 +0.002232,90 +0.002216,90 +0.002354,90 +0.002202,90 +0.002418,90 +0.002099,90 +0.002110,90 +0.002142,90 +0.002166,90 +0.002204,92 +0.002298,92 +0.002207,92 +0.002173,92 +0.002178,92 +0.002327,92 +0.002337,92 +0.002156,92 +0.002237,92 +0.002421,92 +0.002156,92 +0.002213,92 +0.002182,92 +0.002491,92 +0.002323,92 +0.002225,92 +0.002425,92 +0.002284,92 +0.002338,92 +0.003061,92 +0.003377,92 +0.003534,92 +0.003016,92 +0.002268,92 +0.002223,92 +0.002220,92 +0.002490,92 +0.002097,92 +0.002016,92 +0.002111,92 +0.002131,92 +0.002017,92 +0.001990,92 +0.002122,92 +0.001988,92 +0.001986,92 +0.002012,92 +0.002017,92 +0.001991,92 +0.002005,92 +0.001974,92 +0.002031,92 +0.002031,92 +0.002045,92 +0.002075,92 +0.002085,92 +0.002380,92 +0.002281,92 +0.002188,92 +0.002187,92 +0.002204,92 +0.002148,92 +0.002144,92 +0.002126,92 +0.002146,92 +0.002135,92 +0.002182,92 +0.002274,92 +0.002168,92 +0.002217,92 +0.002235,92 +0.002338,92 +0.002226,92 +0.002195,92 +0.003377,92 +0.003636,92 +0.003556,92 +0.002944,92 +0.002353,92 +0.002290,92 +0.002484,92 +0.002277,92 +0.002147,92 +0.002483,92 +0.002218,92 +0.002122,92 +0.002113,92 +0.002255,92 +0.002275,92 +0.002155,92 +0.002152,92 +0.002163,92 +0.002218,92 +0.002204,92 +0.002177,92 +0.002174,92 +0.002196,92 +0.002190,92 +0.002202,92 +0.002230,92 +0.002163,92 +0.002154,92 +0.002150,92 +0.002293,92 +0.002182,92 +0.002219,92 +0.002143,92 +0.002209,92 +0.002253,92 +0.002173,92 +0.002319,94 +0.002370,94 +0.002364,94 +0.002271,94 +0.002365,94 +0.002355,94 +0.002271,94 +0.003291,94 +0.003712,94 +0.003714,94 +0.003034,94 +0.002388,94 +0.002673,94 +0.002384,94 +0.002423,94 +0.002168,94 +0.002159,94 +0.002336,94 +0.002190,94 +0.002172,94 +0.002268,94 +0.002195,94 +0.002355,94 +0.002301,94 +0.002343,94 +0.002207,94 +0.002375,94 +0.002346,94 +0.002500,94 +0.002342,94 +0.002345,94 +0.002385,94 +0.002242,94 +0.002254,94 +0.002465,94 +0.002337,94 +0.002118,94 +0.002088,94 +0.002141,94 +0.002053,94 +0.002127,94 +0.002154,94 +0.002742,94 +0.002204,94 +0.002145,94 +0.002119,94 +0.002109,94 +0.002133,94 +0.002150,94 +0.002110,94 +0.002025,94 +0.002053,94 +0.002768,94 +0.002178,94 +0.002147,94 +0.002126,94 +0.002086,94 +0.002378,94 +0.002387,94 +0.002090,94 +0.002102,94 +0.002120,94 +0.002158,94 +0.002133,94 +0.002197,94 +0.002690,94 +0.002092,94 +0.002132,94 +0.002095,94 +0.002105,94 +0.002079,94 +0.002148,94 +0.002127,94 +0.002543,94 +0.002073,94 +0.002065,94 +0.002016,94 +0.002084,94 +0.002091,94 +0.001971,94 +0.002219,94 +0.002043,94 +0.002093,94 +0.002011,94 +0.002007,94 +0.001957,94 +0.001953,94 +0.001918,94 +0.002061,94 +0.002174,94 +0.001999,94 +0.001918,94 +0.002002,94 +0.001957,94 +0.001952,94 +0.001918,94 +0.001996,94 +0.002121,94 +0.002045,94 +0.001991,94 +0.002271,96 +0.002186,96 +0.002124,96 +0.002056,96 +0.002083,96 +0.002061,96 +0.002075,96 +0.002041,96 +0.002082,96 +0.002100,96 +0.002065,96 +0.002071,96 +0.002041,96 +0.002045,96 +0.002042,96 +0.002046,96 +0.002042,96 +0.002122,96 +0.002041,96 +0.002087,96 +0.002101,96 +0.002043,96 +0.002041,96 +0.002043,96 +0.002041,96 +0.002128,96 +0.002041,96 +0.002063,96 +0.002041,96 +0.002045,96 +0.002372,96 +0.002088,96 +0.002136,96 +0.002389,96 +0.002162,96 +0.002095,96 +0.002505,96 +0.002663,96 +0.002072,96 +0.002533,96 +0.002530,96 +0.002976,96 +0.003597,96 +0.002478,96 +0.002308,96 +0.002326,96 +0.002289,96 +0.002277,96 +0.002227,96 +0.002305,96 +0.002198,96 +0.002152,96 +0.002522,96 +0.002326,96 +0.002328,96 +0.002126,96 +0.002330,96 +0.002453,96 +0.002437,96 +0.002298,96 +0.002287,96 +0.002595,96 +0.002550,96 +0.002598,96 +0.002488,96 +0.002446,96 +0.002734,96 +0.002717,96 +0.002524,96 +0.002335,96 +0.002321,96 +0.002189,96 +0.002176,96 +0.002150,96 +0.002250,96 +0.002277,96 +0.002221,96 +0.002236,96 +0.002231,96 +0.002248,96 +0.002288,96 +0.002260,96 +0.002340,96 +0.002302,96 +0.002257,96 +0.002349,96 +0.002321,96 +0.002243,96 +0.002259,96 +0.002285,96 +0.002158,96 +0.002152,96 +0.002160,96 +0.002265,96 +0.002317,96 +0.002278,96 +0.002304,96 +0.002213,96 +0.002157,96 +0.002183,96 +0.002445,98 +0.002454,98 +0.002461,98 +0.002463,98 +0.002556,98 +0.002383,98 +0.002484,98 +0.002539,98 +0.002351,98 +0.002377,98 +0.002374,98 +0.002373,98 +0.002304,98 +0.002409,98 +0.002439,98 +0.002416,98 +0.002296,98 +0.002313,98 +0.002352,98 +0.002399,98 +0.002295,98 +0.002355,98 +0.002379,98 +0.002352,98 +0.002363,98 +0.002364,98 +0.002298,98 +0.002357,98 +0.002371,98 +0.002279,98 +0.002246,98 +0.002735,98 +0.002591,98 +0.002416,98 +0.002642,98 +0.002502,98 +0.002411,98 +0.002420,98 +0.002512,98 +0.002377,98 +0.002522,98 +0.002426,98 +0.002718,98 +0.002724,98 +0.002641,98 +0.002545,98 +0.002366,98 +0.002431,98 +0.002570,98 +0.002433,98 +0.002428,98 +0.002452,98 +0.002455,98 +0.002421,98 +0.002828,98 +0.002920,98 +0.003138,98 +0.003385,98 +0.003285,98 +0.002902,98 +0.003023,98 +0.002947,98 +0.002916,98 +0.002957,98 +0.002793,98 +0.003201,98 +0.002843,98 +0.002986,98 +0.002336,98 +0.003146,98 +0.002695,98 +0.002431,98 +0.002494,98 +0.002348,98 +0.002304,98 +0.002355,98 +0.002373,98 +0.002362,98 +0.002358,98 +0.002454,98 +0.002325,98 +0.002288,98 +0.002278,98 +0.002257,98 +0.002223,98 +0.002179,98 +0.002391,98 +0.002197,98 +0.002214,98 +0.002179,98 +0.002314,98 +0.002227,98 +0.002189,98 +0.002274,98 +0.002424,98 +0.002317,98 +0.002325,98 +0.002287,98 +0.002440,98 +0.002235,98 +0.002631,100 +0.003587,100 +0.003203,100 +0.002856,100 +0.002599,100 +0.002795,100 +0.003222,100 +0.002630,100 +0.002563,100 +0.002547,100 +0.002723,100 +0.002813,100 +0.002615,100 +0.002694,100 +0.002470,100 +0.002390,100 +0.002378,100 +0.002357,100 +0.002366,100 +0.002859,100 +0.002374,100 +0.002423,100 +0.002399,100 +0.002359,100 +0.002351,100 +0.002440,100 +0.002509,100 +0.002368,100 +0.002309,100 +0.002358,100 +0.002390,100 +0.002361,100 +0.002445,100 +0.002447,100 +0.002343,100 +0.002413,100 +0.002403,100 +0.002494,100 +0.002308,100 +0.002389,100 +0.002390,100 +0.002425,100 +0.002337,100 +0.002404,100 +0.002424,100 +0.002375,100 +0.002355,100 +0.003358,100 +0.004333,100 +0.004395,100 +0.002452,100 +0.002391,100 +0.002436,100 +0.002365,100 +0.002428,100 +0.002455,100 +0.002320,100 +0.002347,100 +0.002438,100 +0.002372,100 +0.002368,100 +0.002329,100 +0.002793,100 +0.002615,100 +0.002933,100 +0.003123,100 +0.002914,100 +0.002838,100 +0.003154,100 +0.002967,100 +0.003166,100 +0.003947,100 +0.003279,100 +0.003344,100 +0.002560,100 +0.002644,100 +0.003361,100 +0.002568,100 +0.002543,100 +0.002499,100 +0.002502,100 +0.002419,100 +0.002838,100 +0.004438,100 +0.004333,100 +0.003139,100 +0.002395,100 +0.002680,100 +0.002382,100 +0.002357,100 +0.002347,100 +0.002398,100 +0.002343,100 +0.002342,100 +0.002576,100 +0.002307,100 +0.002332,100 +0.002468,100 +0.002346,100 +0.002337,100 +0.002496,102 +0.002542,102 +0.002490,102 +0.002453,102 +0.002558,102 +0.002461,102 +0.002476,102 +0.002542,102 +0.002453,102 +0.002459,102 +0.002561,102 +0.002531,102 +0.002735,102 +0.002487,102 +0.002580,102 +0.002558,102 +0.002536,102 +0.002528,102 +0.002747,102 +0.002652,102 +0.002880,102 +0.002657,102 +0.002634,102 +0.002690,102 +0.002908,102 +0.002496,102 +0.002894,102 +0.002579,102 +0.002784,102 +0.002583,102 +0.002614,102 +0.002550,102 +0.002555,102 +0.002724,102 +0.002518,102 +0.002594,102 +0.002585,102 +0.002763,102 +0.002479,102 +0.002635,102 +0.002453,102 +0.002732,102 +0.002579,102 +0.002501,102 +0.002537,102 +0.002552,102 +0.002534,102 +0.002491,102 +0.002521,102 +0.002630,102 +0.002478,102 +0.002453,102 +0.002599,102 +0.002474,102 +0.002485,102 +0.002490,102 +0.002544,102 +0.002462,102 +0.002457,102 +0.002535,102 +0.002597,102 +0.002591,102 +0.002620,102 +0.002619,102 +0.002475,102 +0.002493,102 +0.002487,102 +0.002495,102 +0.002473,102 +0.002588,102 +0.002487,102 +0.002486,102 +0.002559,102 +0.002453,102 +0.002496,102 +0.002492,102 +0.002496,102 +0.002455,102 +0.002453,102 +0.002457,102 +0.002455,102 +0.002454,102 +0.002496,102 +0.002492,102 +0.002455,102 +0.002457,102 +0.002452,102 +0.002455,102 +0.002617,102 +0.002530,102 +0.002455,102 +0.002492,102 +0.002455,102 +0.002458,102 +0.002453,102 +0.002455,102 +0.002530,102 +0.002486,102 +0.002476,102 +0.002453,102 +0.002644,104 +0.002914,104 +0.002769,104 +0.002818,104 +0.003162,104 +0.002768,104 +0.002623,104 +0.002629,104 +0.002696,104 +0.002602,104 +0.002633,104 +0.002769,104 +0.002594,104 +0.002641,104 +0.002669,104 +0.002631,104 +0.002635,104 +0.002638,104 +0.002594,104 +0.002596,104 +0.002593,104 +0.002675,104 +0.002601,104 +0.002594,104 +0.002599,104 +0.002614,104 +0.002682,104 +0.002697,104 +0.002606,104 +0.002593,104 +0.002598,104 +0.002596,104 +0.002827,104 +0.002739,104 +0.002733,104 +0.002605,104 +0.002660,104 +0.002610,104 +0.002770,104 +0.002754,104 +0.002903,104 +0.002616,104 +0.002653,104 +0.002636,104 +0.002594,104 +0.002617,104 +0.002683,104 +0.002593,104 +0.002621,104 +0.002694,104 +0.002593,104 +0.002931,104 +0.002687,104 +0.002611,104 +0.002615,104 +0.002731,104 +0.002594,104 +0.002599,104 +0.002743,104 +0.002827,104 +0.002593,104 +0.002853,104 +0.002641,104 +0.002677,104 +0.002846,104 +0.002660,104 +0.002593,104 +0.002880,104 +0.002618,104 +0.002593,104 +0.002888,104 +0.002700,104 +0.002593,104 +0.002697,104 +0.002763,104 +0.002742,104 +0.002744,104 +0.002944,104 +0.002612,104 +0.002875,104 +0.002688,104 +0.002594,104 +0.002825,104 +0.002811,104 +0.002790,104 +0.002676,104 +0.002923,104 +0.002650,104 +0.002593,104 +0.002882,104 +0.002773,104 +0.002749,104 +0.002754,104 +0.002698,104 +0.002613,104 +0.002846,104 +0.002832,104 +0.002777,104 +0.002671,104 +0.002618,104 +0.002861,106 +0.002804,106 +0.002767,106 +0.002771,106 +0.002765,106 +0.002768,106 +0.002816,106 +0.003076,106 +0.002747,106 +0.002774,106 +0.002827,106 +0.002822,106 +0.002887,106 +0.003106,106 +0.002937,106 +0.002827,106 +0.002802,106 +0.002752,106 +0.002786,106 +0.002772,106 +0.002751,106 +0.002766,106 +0.002749,106 +0.002751,106 +0.002757,106 +0.002778,106 +0.002750,106 +0.002749,106 +0.002746,106 +0.002751,106 +0.002749,106 +0.002808,106 +0.002755,106 +0.002766,106 +0.002747,106 +0.002748,106 +0.002812,106 +0.003042,106 +0.002754,106 +0.002816,106 +0.002796,106 +0.002796,106 +0.002974,106 +0.002886,106 +0.002746,106 +0.002830,106 +0.002770,106 +0.002814,106 +0.002845,106 +0.002852,106 +0.002921,106 +0.002764,106 +0.002799,106 +0.002937,106 +0.002828,106 +0.002919,106 +0.002782,106 +0.002887,106 +0.002747,106 +0.002781,106 +0.002797,106 +0.002784,106 +0.002768,106 +0.002771,106 +0.002777,106 +0.002746,106 +0.002824,106 +0.002789,106 +0.002930,106 +0.003093,106 +0.002806,106 +0.002859,106 +0.002835,106 +0.002773,106 +0.003069,106 +0.002904,106 +0.002781,106 +0.002778,106 +0.003197,106 +0.002853,106 +0.002909,106 +0.002748,106 +0.003053,106 +0.003029,106 +0.002944,106 +0.003028,106 +0.002922,106 +0.002943,106 +0.002805,106 +0.002842,106 +0.003043,106 +0.002790,106 +0.002891,106 +0.003061,106 +0.002766,106 +0.002845,106 +0.003088,106 +0.002893,106 +0.002975,106 +0.002841,106 +0.003258,108 +0.003219,108 +0.003353,108 +0.003234,108 +0.003371,108 +0.003265,108 +0.003275,108 +0.003025,108 +0.003320,108 +0.003132,108 +0.003040,108 +0.003275,108 +0.003107,108 +0.003192,108 +0.002982,108 +0.002944,108 +0.003102,108 +0.003042,108 +0.003119,108 +0.003389,108 +0.002972,108 +0.002947,108 +0.002959,108 +0.002946,108 +0.003023,108 +0.003080,108 +0.002959,108 +0.003009,108 +0.002963,108 +0.002908,108 +0.003800,108 +0.002959,108 +0.002980,108 +0.002962,108 +0.002907,108 +0.003076,108 +0.003053,108 +0.003043,108 +0.002974,108 +0.002942,108 +0.002948,108 +0.003255,108 +0.003202,108 +0.002996,108 +0.002961,108 +0.002941,108 +0.003798,108 +0.003248,108 +0.003472,108 +0.003765,108 +0.003114,108 +0.003797,108 +0.003137,108 +0.002941,108 +0.003015,108 +0.002948,108 +0.003830,108 +0.003539,108 +0.003319,108 +0.003370,108 +0.003390,108 +0.003863,108 +0.003414,108 +0.003166,108 +0.003177,108 +0.002997,108 +0.004755,108 +0.003511,108 +0.003067,108 +0.003015,108 +0.003014,108 +0.004106,108 +0.003278,108 +0.002963,108 +0.003018,108 +0.003021,108 +0.003756,108 +0.003218,108 +0.004016,108 +0.003551,108 +0.003735,108 +0.003652,108 +0.002973,108 +0.003049,108 +0.003021,108 +0.003233,108 +0.003566,108 +0.003014,108 +0.002982,108 +0.003015,108 +0.002909,108 +0.003506,108 +0.003099,108 +0.003016,108 +0.002987,108 +0.003012,108 +0.003344,108 +0.003108,108 +0.003036,108 +0.002986,108 +0.003121,110 +0.003308,110 +0.003645,110 +0.003130,110 +0.003139,110 +0.003119,110 +0.003193,110 +0.003599,110 +0.003218,110 +0.003943,110 +0.003833,110 +0.004163,110 +0.003342,110 +0.003072,110 +0.003193,110 +0.003109,110 +0.003806,110 +0.003317,110 +0.003172,110 +0.003261,110 +0.003104,110 +0.004003,110 +0.003298,110 +0.003116,110 +0.003148,110 +0.003104,110 +0.003832,110 +0.003439,110 +0.003874,110 +0.003440,110 +0.005118,110 +0.004115,110 +0.003377,110 +0.003371,110 +0.003585,110 +0.004081,110 +0.003263,110 +0.003363,110 +0.005218,110 +0.004327,110 +0.003541,110 +0.003458,110 +0.003406,110 +0.003481,110 +0.004168,110 +0.003612,110 +0.004007,110 +0.003247,110 +0.003406,110 +0.003569,110 +0.003616,110 +0.003771,110 +0.003692,110 +0.003914,110 +0.004257,110 +0.003764,110 +0.003408,110 +0.003849,110 +0.004592,110 +0.003795,110 +0.003294,110 +0.004595,110 +0.005149,110 +0.004321,110 +0.003406,110 +0.004178,110 +0.005475,110 +0.005511,110 +0.003782,110 +0.003560,110 +0.004343,110 +0.003608,110 +0.003263,110 +0.004953,110 +0.004977,110 +0.006301,110 +0.005646,110 +0.004369,110 +0.004527,110 +0.005416,110 +0.004751,110 +0.003676,110 +0.003736,110 +0.003644,110 +0.005144,110 +0.004847,110 +0.005405,110 +0.003992,110 +0.003676,110 +0.004584,110 +0.003187,110 +0.003931,110 +0.004963,110 +0.004742,110 +0.004872,110 +0.003628,110 +0.003541,110 +0.003228,110 +0.003850,110 +0.005009,110 +0.005836,112 +0.006242,112 +0.006106,112 +0.003673,112 +0.003781,112 +0.003425,112 +0.003692,112 +0.004829,112 +0.003334,112 +0.004316,112 +0.004068,112 +0.006432,112 +0.004738,112 +0.003701,112 +0.003584,112 +0.003472,112 +0.003439,112 +0.004773,112 +0.004372,112 +0.004500,112 +0.003843,112 +0.003317,112 +0.004180,112 +0.003587,112 +0.004891,112 +0.003355,112 +0.004367,112 +0.005543,112 +0.004212,112 +0.003753,112 +0.005279,112 +0.006208,112 +0.006200,112 +0.005718,112 +0.004388,112 +0.003853,112 +0.004592,112 +0.005675,112 +0.005520,112 +0.004401,112 +0.004859,112 +0.006026,112 +0.005075,112 +0.004250,112 +0.004091,112 +0.003717,112 +0.003554,112 +0.003785,112 +0.003421,112 +0.003694,112 +0.003385,112 +0.003369,112 +0.003600,112 +0.003460,112 +0.003418,112 +0.005473,112 +0.006749,112 +0.004214,112 +0.003674,112 +0.004082,112 +0.003621,112 +0.003577,112 +0.003567,112 +0.003612,112 +0.004367,112 +0.003855,112 +0.004755,112 +0.004980,112 +0.004530,112 +0.004115,112 +0.004447,112 +0.003744,112 +0.003871,112 +0.003347,112 +0.003526,112 +0.004476,112 +0.005915,112 +0.006213,112 +0.005642,112 +0.003939,112 +0.004915,112 +0.003862,112 +0.003666,112 +0.005661,112 +0.004728,112 +0.004609,112 +0.004075,112 +0.003584,112 +0.003461,112 +0.003718,112 +0.003806,112 +0.004843,112 +0.003594,112 +0.003614,112 +0.003549,112 +0.004039,112 +0.003723,112 +0.003414,112 +0.003796,112 +0.003973,112 +0.004787,114 +0.004136,114 +0.003698,114 +0.003936,114 +0.004186,114 +0.003469,114 +0.003586,114 +0.003563,114 +0.004120,114 +0.003981,114 +0.003613,114 +0.003603,114 +0.004202,114 +0.003610,114 +0.003615,114 +0.003970,114 +0.003713,114 +0.004594,114 +0.003967,114 +0.003705,114 +0.003533,114 +0.005343,114 +0.003616,114 +0.003937,114 +0.003666,114 +0.004701,114 +0.004117,114 +0.003791,114 +0.003927,114 +0.004133,114 +0.003919,114 +0.003650,114 +0.003989,114 +0.005745,114 +0.004907,114 +0.004419,114 +0.006310,114 +0.004878,114 +0.005730,114 +0.004555,114 +0.004293,114 +0.004167,114 +0.003760,114 +0.003707,114 +0.004708,114 +0.004830,114 +0.004394,114 +0.004506,114 +0.004576,114 +0.003709,114 +0.003710,114 +0.003735,114 +0.003963,114 +0.003603,114 +0.003639,114 +0.003622,114 +0.003918,114 +0.003500,114 +0.003536,114 +0.003496,114 +0.003747,114 +0.004614,114 +0.003626,114 +0.003560,114 +0.004132,114 +0.003929,114 +0.003513,114 +0.003639,114 +0.003501,114 +0.004693,114 +0.003638,114 +0.003510,114 +0.003523,114 +0.005249,114 +0.003929,114 +0.003533,114 +0.003540,114 +0.003679,114 +0.004028,114 +0.003837,114 +0.004211,114 +0.004641,114 +0.003909,114 +0.003980,114 +0.003944,114 +0.003978,114 +0.003950,114 +0.003711,114 +0.004290,114 +0.004783,114 +0.003931,114 +0.003651,114 +0.003681,114 +0.003937,114 +0.004409,114 +0.004043,114 +0.004928,114 +0.004647,114 +0.004604,114 +0.004061,114 +0.003837,116 +0.003813,116 +0.003887,116 +0.004217,116 +0.003743,116 +0.003736,116 +0.004412,116 +0.003754,116 +0.003727,116 +0.003773,116 +0.004102,116 +0.004182,116 +0.003631,116 +0.003809,116 +0.003794,116 +0.004108,116 +0.003639,116 +0.003756,116 +0.003689,116 +0.004026,116 +0.003754,116 +0.003671,116 +0.003682,116 +0.003978,116 +0.003798,116 +0.003636,116 +0.003711,116 +0.004586,116 +0.004441,116 +0.004037,116 +0.003830,116 +0.003782,116 +0.004104,116 +0.003632,116 +0.003748,116 +0.003665,116 +0.004122,116 +0.003719,116 +0.003682,116 +0.003697,116 +0.003930,116 +0.003940,116 +0.003639,116 +0.003774,116 +0.003674,116 +0.004208,116 +0.003627,116 +0.003687,116 +0.003675,116 +0.004086,116 +0.003825,116 +0.003594,116 +0.003723,116 +0.004457,116 +0.004397,116 +0.003899,116 +0.003694,116 +0.003790,116 +0.004091,116 +0.003629,116 +0.004212,116 +0.003711,116 +0.004105,116 +0.003695,116 +0.003939,116 +0.003718,116 +0.004045,116 +0.004201,116 +0.003629,116 +0.003789,116 +0.003828,116 +0.004067,116 +0.003635,116 +0.003762,116 +0.003638,116 +0.004158,116 +0.003709,116 +0.003672,116 +0.003669,116 +0.003834,116 +0.003983,116 +0.004511,116 +0.003747,116 +0.003918,116 +0.003984,116 +0.003632,116 +0.003687,116 +0.003700,116 +0.004324,116 +0.003912,116 +0.004117,116 +0.004163,116 +0.004294,116 +0.003923,116 +0.003681,116 +0.003711,116 +0.004289,116 +0.004412,116 +0.003677,116 +0.003650,116 +0.004346,118 +0.003991,118 +0.003824,118 +0.003865,118 +0.003964,118 +0.004073,118 +0.004120,118 +0.003890,118 +0.003943,118 +0.004015,118 +0.003822,118 +0.003899,118 +0.003838,118 +0.004025,118 +0.003836,118 +0.003853,118 +0.003892,118 +0.003903,118 +0.003821,118 +0.003811,118 +0.003981,118 +0.003875,118 +0.003817,118 +0.003806,118 +0.003877,118 +0.003795,118 +0.003856,118 +0.003790,118 +0.003831,118 +0.003843,118 +0.004057,118 +0.004039,118 +0.003847,118 +0.003866,118 +0.003882,118 +0.003810,118 +0.003817,118 +0.003938,118 +0.003862,118 +0.003835,118 +0.003787,118 +0.003868,118 +0.003877,118 +0.003898,118 +0.003814,118 +0.003827,118 +0.003906,118 +0.003855,118 +0.003836,118 +0.003836,118 +0.003881,118 +0.003875,118 +0.003795,118 +0.003789,118 +0.003846,118 +0.003810,118 +0.004143,118 +0.004031,118 +0.003871,118 +0.003842,118 +0.003850,118 +0.003794,118 +0.003790,118 +0.003881,118 +0.003891,118 +0.003850,118 +0.003791,118 +0.003886,118 +0.004017,118 +0.003790,118 +0.003787,118 +0.003825,118 +0.003930,118 +0.003822,118 +0.003789,118 +0.003793,118 +0.003874,118 +0.003793,118 +0.003789,118 +0.003789,118 +0.003855,118 +0.003809,118 +0.004019,118 +0.004125,118 +0.003866,118 +0.003863,118 +0.003847,118 +0.003883,118 +0.003818,118 +0.003886,118 +0.003990,118 +0.003835,118 +0.003814,118 +0.003876,118 +0.003837,118 +0.003814,118 +0.003791,118 +0.003847,118 +0.003900,118 +0.003798,118 +0.004000,120 +0.004003,120 +0.004077,120 +0.003994,120 +0.003974,120 +0.003978,120 +0.004037,120 +0.003980,120 +0.004235,120 +0.004179,120 +0.004089,120 +0.003979,120 +0.003974,120 +0.004010,120 +0.004069,120 +0.003998,120 +0.003995,120 +0.003976,120 +0.004063,120 +0.004007,120 +0.004009,120 +0.003985,120 +0.004014,120 +0.004230,120 +0.003977,120 +0.003984,120 +0.004036,120 +0.004071,120 +0.003974,120 +0.004011,120 +0.004010,120 +0.004069,120 +0.003974,120 +0.004183,120 +0.004231,120 +0.004194,120 +0.003994,120 +0.004074,120 +0.004010,120 +0.004118,120 +0.004167,120 +0.004004,120 +0.003977,120 +0.004067,120 +0.003977,120 +0.003979,120 +0.003978,120 +0.004116,120 +0.004197,120 +0.003985,120 +0.003974,120 +0.004189,120 +0.004266,120 +0.004054,120 +0.004065,120 +0.004118,120 +0.004036,120 +0.004116,120 +0.004106,120 +0.004314,120 +0.003997,120 +0.004074,120 +0.004018,120 +0.004176,120 +0.004099,120 +0.004020,120 +0.004015,120 +0.004070,120 +0.004088,120 +0.004059,120 +0.003995,120 +0.004057,120 +0.004145,120 +0.004015,120 +0.003982,120 +0.004031,120 +0.004070,120 +0.004034,120 +0.003996,120 +0.003981,120 +0.004161,120 +0.004040,120 +0.004191,120 +0.004170,120 +0.004290,120 +0.004079,120 +0.004132,120 +0.004137,120 +0.004106,120 +0.004235,120 +0.004068,120 +0.004007,120 +0.004126,120 +0.004024,120 +0.004011,120 +0.003998,120 +0.004253,120 +0.004004,120 +0.003992,120 +0.003978,120 +0.004298,122 +0.004239,122 +0.004193,122 +0.004273,122 +0.004511,122 +0.004250,122 +0.004320,122 +0.004322,122 +0.004460,122 +0.004300,122 +0.004190,122 +0.004215,122 +0.004357,122 +0.004246,122 +0.004205,122 +0.004235,122 +0.004389,122 +0.004201,122 +0.004194,122 +0.004306,122 +0.004595,122 +0.004326,122 +0.004256,122 +0.004449,122 +0.004713,122 +0.004423,122 +0.004446,122 +0.006128,122 +0.004411,122 +0.004457,122 +0.004512,122 +0.004526,122 +0.004402,122 +0.004343,122 +0.004366,122 +0.004230,122 +0.004355,122 +0.004229,122 +0.004364,122 +0.004227,122 +0.004440,122 +0.004216,122 +0.004329,122 +0.004527,122 +0.004341,122 +0.004345,122 +0.004381,122 +0.004347,122 +0.004344,122 +0.004340,122 +0.004348,122 +0.004345,122 +0.004357,122 +0.004451,122 +0.004466,122 +0.004447,122 +0.004343,122 +0.004389,122 +0.004335,122 +0.004316,122 +0.004315,122 +0.004398,122 +0.004329,122 +0.004331,122 +0.004306,122 +0.004485,122 +0.004364,122 +0.004366,122 +0.004397,122 +0.004434,122 +0.004343,122 +0.004308,122 +0.004346,122 +0.004389,122 +0.004326,122 +0.004366,122 +0.004459,122 +0.004491,122 +0.004347,122 +0.004341,122 +0.004427,122 +0.004351,122 +0.004329,122 +0.004334,122 +0.004406,122 +0.004350,122 +0.004357,122 +0.004361,122 +0.004495,122 +0.004339,122 +0.004342,122 +0.004354,122 +0.004483,122 +0.004325,122 +0.004302,122 +0.004377,122 +0.004309,122 +0.004324,122 +0.004372,122 +0.004457,122 +0.004703,124 +0.004598,124 +0.004443,124 +0.004476,124 +0.004466,124 +0.004408,124 +0.004476,124 +0.004529,124 +0.004481,124 +0.004412,124 +0.004553,124 +0.004512,124 +0.004408,124 +0.004450,124 +0.004573,124 +0.004461,124 +0.007765,124 +0.005173,124 +0.004744,124 +0.004438,124 +0.004704,124 +0.004726,124 +0.004482,124 +0.004423,124 +0.004644,124 +0.004437,124 +0.004417,124 +0.004424,124 +0.004531,124 +0.004459,124 +0.004431,124 +0.004436,124 +0.004615,124 +0.004449,124 +0.004406,124 +0.004666,124 +0.004435,124 +0.004412,124 +0.004413,124 +0.004490,124 +0.004397,124 +0.004397,124 +0.004487,124 +0.004666,124 +0.004561,124 +0.004433,124 +0.004493,124 +0.004520,124 +0.004441,124 +0.004409,124 +0.004517,124 +0.004419,124 +0.004487,124 +0.004420,124 +0.004562,124 +0.004588,124 +0.004433,124 +0.004631,124 +0.004484,124 +0.004458,124 +0.004426,124 +0.004541,124 +0.004425,124 +0.004432,124 +0.004439,124 +0.004638,124 +0.004596,124 +0.004526,124 +0.004487,124 +0.004598,124 +0.004609,124 +0.004424,124 +0.004537,124 +0.004436,124 +0.004412,124 +0.004425,124 +0.004503,124 +0.004560,124 +0.004420,124 +0.004558,124 +0.004533,124 +0.004439,124 +0.004428,124 +0.004719,124 +0.004512,124 +0.004412,124 +0.004443,124 +0.004649,124 +0.004616,124 +0.004498,124 +0.004453,124 +0.004595,124 +0.004456,124 +0.004447,124 +0.004518,124 +0.004489,124 +0.004441,124 +0.004410,124 +0.004513,124 +0.004580,124 +0.004662,126 +0.004719,126 +0.004843,126 +0.004653,126 +0.004644,126 +0.004688,126 +0.004709,126 +0.004654,126 +0.004646,126 +0.004866,126 +0.004883,126 +0.004728,126 +0.004737,126 +0.004719,126 +0.004731,126 +0.004628,126 +0.004735,126 +0.004633,126 +0.004650,126 +0.004696,126 +0.004805,126 +0.004666,126 +0.004765,126 +0.004727,126 +0.004697,126 +0.004747,126 +0.004852,126 +0.004697,126 +0.004709,126 +0.004681,126 +0.004790,126 +0.004838,126 +0.004740,126 +0.004898,126 +0.004784,126 +0.004648,126 +0.004651,126 +0.004750,126 +0.004659,126 +0.004632,126 +0.004671,126 +0.004750,126 +0.004914,126 +0.004887,126 +0.004847,126 +0.004825,126 +0.004675,126 +0.004664,126 +0.004737,126 +0.004657,126 +0.004647,126 +0.004924,126 +0.004950,126 +0.004737,126 +0.004776,126 +0.004728,126 +0.004695,126 +0.004665,126 +0.004781,126 +0.004666,126 +0.004647,126 +0.004690,126 +0.004912,126 +0.004696,126 +0.004686,126 +0.004803,126 +0.004740,126 +0.004676,126 +0.004654,126 +0.004776,126 +0.004657,126 +0.004629,126 +0.004816,126 +0.005045,126 +0.004844,126 +0.004628,126 +0.004776,126 +0.004704,126 +0.004647,126 +0.004736,126 +0.004655,126 +0.004628,126 +0.004640,126 +0.004790,126 +0.004961,126 +0.004783,126 +0.004804,126 +0.004800,126 +0.004720,126 +0.004644,126 +0.004755,126 +0.004661,126 +0.004621,126 +0.004692,126 +0.005043,126 +0.004882,126 +0.004638,126 +0.004839,126 +0.004672,126 +0.004690,126 +0.005225,128 +0.005116,128 +0.005117,128 +0.005175,128 +0.005454,128 +0.005123,128 +0.005107,128 +0.005244,128 +0.005112,128 +0.005123,128 +0.005198,128 +0.005114,128 +0.005077,128 +0.005257,128 +0.005528,128 +0.005315,128 +0.005355,128 +0.005147,128 +0.005106,128 +0.005195,128 +0.005178,128 +0.005105,128 +0.005101,128 +0.005230,128 +0.005409,128 +0.005327,128 +0.005247,128 +0.005288,128 +0.005124,128 +0.005236,128 +0.005127,128 +0.005086,128 +0.005232,128 +0.005578,128 +0.005388,128 +0.005298,128 +0.005190,128 +0.005099,128 +0.005194,128 +0.005261,128 +0.005117,128 +0.005080,128 +0.005250,128 +0.005435,128 +0.005136,128 +0.005334,128 +0.005132,128 +0.005104,128 +0.005230,128 +0.005121,128 +0.005105,128 +0.005130,128 +0.005415,128 +0.005546,128 +0.005168,128 +0.005223,128 +0.005133,128 +0.005122,128 +0.005209,128 +0.005182,128 +0.005085,128 +0.005205,128 +0.005457,128 +0.005141,128 +0.005219,128 +0.005170,128 +0.005112,128 +0.005161,128 +0.005167,128 +0.005112,128 +0.005090,128 +0.005313,128 +0.005500,128 +0.005229,128 +0.005250,128 +0.005178,128 +0.005094,128 +0.005220,128 +0.005137,128 +0.005098,128 +0.005203,128 +0.005323,128 +0.005221,128 +0.005148,128 +0.005209,128 +0.005150,128 +0.005138,128 +0.005215,128 +0.005138,128 +0.005098,128 +0.005285,128 +0.005508,128 +0.005329,128 +0.005309,128 +0.005242,128 +0.005208,128 +0.005242,128 +0.005098,128 +0.005136,128 +0.005154,128 +0.005345,130 +0.005109,130 +0.005101,130 +0.005213,130 +0.005168,130 +0.005101,130 +0.005221,130 +0.005093,130 +0.005125,130 +0.005204,130 +0.005441,130 +0.005309,130 +0.005259,130 +0.005137,130 +0.005116,130 +0.005168,130 +0.005155,130 +0.005108,130 +0.005112,130 +0.005368,130 +0.005092,130 +0.005176,130 +0.005233,130 +0.005154,130 +0.005104,130 +0.005250,130 +0.005092,130 +0.005104,130 +0.005175,130 +0.005286,130 +0.005459,130 +0.005212,130 +0.005176,130 +0.005118,130 +0.005108,130 +0.005281,130 +0.005082,130 +0.005103,130 +0.005340,130 +0.005336,130 +0.005093,130 +0.005294,130 +0.005209,130 +0.005164,130 +0.005152,130 +0.005189,130 +0.005329,130 +0.005140,130 +0.005263,130 +0.005501,130 +0.005242,130 +0.005252,130 +0.005155,130 +0.005076,130 +0.005336,130 +0.005101,130 +0.005096,130 +0.005204,130 +0.005323,130 +0.005099,130 +0.005217,130 +0.005142,130 +0.005118,130 +0.005215,130 +0.005208,130 +0.005089,130 +0.005125,130 +0.005244,130 +0.005430,130 +0.005506,130 +0.005299,130 +0.005211,130 +0.005093,130 +0.005205,130 +0.005145,130 +0.005165,130 +0.005192,130 +0.005181,130 +0.005061,130 +0.005089,130 +0.005094,130 +0.005067,130 +0.005056,130 +0.005117,130 +0.005075,130 +0.005056,130 +0.005119,130 +0.005140,130 +0.005332,130 +0.005271,130 +0.005136,130 +0.005077,130 +0.005105,130 +0.005112,130 +0.005063,130 +0.005056,130 +0.005156,130 +0.005151,130 +0.005054,130 +0.005122,130 +0.005310,132 +0.005291,132 +0.005352,132 +0.005298,132 +0.005291,132 +0.005321,132 +0.005322,132 +0.005535,132 +0.005626,132 +0.005791,132 +0.005476,132 +0.005464,132 +0.005361,132 +0.005298,132 +0.005315,132 +0.005324,132 +0.005383,132 +0.005287,132 +0.005357,132 +0.005293,132 +0.005288,132 +0.005351,132 +0.005338,132 +0.005285,132 +0.005348,132 +0.005316,132 +0.005635,132 +0.005557,132 +0.005343,132 +0.005305,132 +0.005344,132 +0.005322,132 +0.005313,132 +0.005343,132 +0.005423,132 +0.005314,132 +0.005394,132 +0.005388,132 +0.005292,132 +0.005315,132 +0.005354,132 +0.005294,132 +0.005286,132 +0.005360,132 +0.005639,132 +0.005569,132 +0.006009,132 +0.005312,132 +0.005299,132 +0.005374,132 +0.005315,132 +0.005288,132 +0.005413,132 +0.005389,132 +0.005398,132 +0.005396,132 +0.005329,132 +0.005370,132 +0.005364,132 +0.005331,132 +0.005289,132 +0.005350,132 +0.005295,132 +0.005458,132 +0.005831,132 +0.005349,132 +0.005310,132 +0.005362,132 +0.005319,132 +0.005291,132 +0.005315,132 +0.005331,132 +0.005644,132 +0.005542,132 +0.005394,132 +0.005322,132 +0.005315,132 +0.005354,132 +0.005291,132 +0.005286,132 +0.005589,132 +0.005461,132 +0.005522,132 +0.005612,132 +0.005323,132 +0.005350,132 +0.005379,132 +0.005328,132 +0.005358,132 +0.005373,132 +0.005383,132 +0.005312,132 +0.005371,132 +0.005300,132 +0.005297,132 +0.005343,132 +0.005318,132 +0.005354,132 +0.005344,132 +0.005297,132 +0.005727,134 +0.006001,134 +0.005604,134 +0.005544,134 +0.005591,134 +0.005575,134 +0.005543,134 +0.005602,134 +0.005628,134 +0.005538,134 +0.005601,134 +0.005582,134 +0.005604,134 +0.005593,134 +0.005555,134 +0.005542,134 +0.005612,134 +0.005551,134 +0.005696,134 +0.005928,134 +0.005598,134 +0.005536,134 +0.005602,134 +0.005548,134 +0.005540,134 +0.005598,134 +0.005626,134 +0.005551,134 +0.005602,134 +0.005581,134 +0.005547,134 +0.005591,134 +0.005553,134 +0.005532,134 +0.005735,134 +0.006111,134 +0.006117,134 +0.006362,134 +0.006082,134 +0.006000,134 +0.006281,134 +0.006361,134 +0.006285,134 +0.006281,134 +0.005964,134 +0.006317,134 +0.005929,134 +0.006001,134 +0.006070,134 +0.006045,134 +0.006063,134 +0.006067,134 +0.006021,134 +0.006119,134 +0.006383,134 +0.006022,134 +0.006130,134 +0.006054,134 +0.006025,134 +0.006338,134 +0.006325,134 +0.006297,134 +0.006315,134 +0.005940,134 +0.006068,134 +0.006203,134 +0.006115,134 +0.006111,134 +0.006095,134 +0.006063,134 +0.006335,134 +0.006279,134 +0.006346,134 +0.006127,134 +0.006091,134 +0.006185,134 +0.006060,134 +0.005912,134 +0.006329,134 +0.006379,134 +0.006502,134 +0.006095,134 +0.005933,134 +0.006228,134 +0.005815,134 +0.005759,134 +0.005961,134 +0.005614,134 +0.005607,134 +0.005765,134 +0.005981,134 +0.005591,134 +0.005644,134 +0.005614,134 +0.005600,134 +0.005722,134 +0.005538,134 +0.005589,134 +0.005558,134 +0.005544,134 +0.005834,136 +0.005784,136 +0.005778,136 +0.006098,136 +0.006070,136 +0.005775,136 +0.005948,136 +0.006690,136 +0.005806,136 +0.006403,136 +0.006005,136 +0.006340,136 +0.006973,136 +0.006158,136 +0.006490,136 +0.006354,136 +0.005946,136 +0.006281,136 +0.006280,136 +0.006033,136 +0.006958,136 +0.005882,136 +0.006158,136 +0.006321,136 +0.005967,136 +0.006395,136 +0.006145,136 +0.005931,136 +0.006476,136 +0.006284,136 +0.006077,136 +0.006248,136 +0.006011,136 +0.006106,136 +0.006188,136 +0.005986,136 +0.006076,136 +0.006000,136 +0.005937,136 +0.005843,136 +0.005895,136 +0.005877,136 +0.005874,136 +0.005772,136 +0.005883,136 +0.005784,136 +0.005777,136 +0.005908,136 +0.005777,136 +0.005814,136 +0.005822,136 +0.005816,136 +0.005897,136 +0.006165,136 +0.005819,136 +0.005870,136 +0.005808,136 +0.005839,136 +0.005863,136 +0.005844,136 +0.005773,136 +0.005864,136 +0.005783,136 +0.005776,136 +0.005863,136 +0.005780,136 +0.005784,136 +0.005877,136 +0.005782,136 +0.005913,136 +0.006143,136 +0.005873,136 +0.005858,136 +0.005805,136 +0.005825,136 +0.005900,136 +0.005794,136 +0.005851,136 +0.005868,136 +0.005780,136 +0.005806,136 +0.005853,136 +0.005777,136 +0.005772,136 +0.005847,136 +0.005780,136 +0.005777,136 +0.006138,136 +0.005983,136 +0.005805,136 +0.005818,136 +0.005781,136 +0.005883,136 +0.005782,136 +0.005879,136 +0.005866,136 +0.005825,136 +0.005798,136 +0.005845,136 +0.005789,136 +0.006144,138 +0.006206,138 +0.006050,138 +0.006082,138 +0.006384,138 +0.006272,138 +0.006127,138 +0.006058,138 +0.006054,138 +0.006137,138 +0.006182,138 +0.006050,138 +0.006651,138 +0.006438,138 +0.006146,138 +0.006533,138 +0.006085,138 +0.006288,138 +0.006086,138 +0.006083,138 +0.006998,138 +0.006314,138 +0.006406,138 +0.006107,138 +0.006110,138 +0.006393,138 +0.006200,138 +0.006092,138 +0.006353,138 +0.006054,138 +0.006401,138 +0.006207,138 +0.006265,138 +0.006150,138 +0.006073,138 +0.006086,138 +0.006353,138 +0.006384,138 +0.006190,138 +0.006075,138 +0.006109,138 +0.006160,138 +0.006171,138 +0.006062,138 +0.006181,138 +0.006079,138 +0.006195,138 +0.006082,138 +0.006056,138 +0.006119,138 +0.006057,138 +0.006043,138 +0.006311,138 +0.006433,138 +0.006132,138 +0.006261,138 +0.006091,138 +0.006167,138 +0.006054,138 +0.006126,138 +0.006143,138 +0.006052,138 +0.006045,138 +0.006127,138 +0.006047,138 +0.006085,138 +0.006126,138 +0.006050,138 +0.006128,138 +0.006386,138 +0.006225,138 +0.006126,138 +0.006080,138 +0.006061,138 +0.006171,138 +0.006165,138 +0.006168,138 +0.006123,138 +0.006081,138 +0.006128,138 +0.006048,138 +0.006047,138 +0.006126,138 +0.006076,138 +0.006082,138 +0.006268,138 +0.006333,138 +0.006179,138 +0.006075,138 +0.006054,138 +0.006144,138 +0.006149,138 +0.006059,138 +0.006157,138 +0.006082,138 +0.006094,138 +0.006091,138 +0.006047,138 +0.006129,138 +0.006050,138 +0.006337,140 +0.006400,140 +0.006574,140 +0.006676,140 +0.006315,140 +0.006319,140 +0.006404,140 +0.006336,140 +0.006425,140 +0.006379,140 +0.006310,140 +0.006384,140 +0.006309,140 +0.006344,140 +0.006387,140 +0.006314,140 +0.006349,140 +0.006525,140 +0.006626,140 +0.006451,140 +0.006317,140 +0.006307,140 +0.006405,140 +0.006402,140 +0.006386,140 +0.006310,140 +0.006303,140 +0.006385,140 +0.006305,140 +0.006345,140 +0.006347,140 +0.006308,140 +0.006397,140 +0.006469,140 +0.006585,140 +0.006423,140 +0.006313,140 +0.006412,140 +0.006308,140 +0.006395,140 +0.006382,140 +0.006307,140 +0.006343,140 +0.006368,140 +0.006309,140 +0.006386,140 +0.006307,140 +0.006304,140 +0.006382,140 +0.006535,140 +0.006571,140 +0.006345,140 +0.006319,140 +0.006407,140 +0.006317,140 +0.006471,140 +0.006446,140 +0.006339,140 +0.006411,140 +0.006311,140 +0.006303,140 +0.006465,140 +0.006307,140 +0.006342,140 +0.006347,140 +0.006552,140 +0.006571,140 +0.006321,140 +0.006361,140 +0.006429,140 +0.006384,140 +0.006402,140 +0.006311,140 +0.006303,140 +0.006386,140 +0.006306,140 +0.006354,140 +0.006357,140 +0.006309,140 +0.006384,140 +0.006307,140 +0.006558,140 +0.006513,140 +0.006311,140 +0.006354,140 +0.006346,140 +0.006407,140 +0.006385,140 +0.006308,140 +0.006305,140 +0.006381,140 +0.006309,140 +0.006383,140 +0.006312,140 +0.006313,140 +0.006383,140 +0.006480,140 +0.006622,140 +0.006399,140 +0.006320,140 +0.006685,142 +0.006591,142 +0.006702,142 +0.006625,142 +0.006589,142 +0.006665,142 +0.006586,142 +0.006584,142 +0.006666,142 +0.006587,142 +0.006679,142 +0.006590,142 +0.006811,142 +0.006806,142 +0.006596,142 +0.006669,142 +0.006599,142 +0.006663,142 +0.006728,142 +0.006585,142 +0.007004,142 +0.007236,142 +0.007073,142 +0.007474,142 +0.006630,142 +0.006928,142 +0.006732,142 +0.007071,142 +0.006601,142 +0.006587,142 +0.006673,142 +0.006685,142 +0.006709,142 +0.006656,142 +0.006584,142 +0.006663,142 +0.006588,142 +0.006665,142 +0.006650,142 +0.006594,142 +0.006675,142 +0.006671,142 +0.007029,142 +0.006622,142 +0.006624,142 +0.006750,142 +0.007873,142 +0.006733,142 +0.006849,142 +0.006880,142 +0.006839,142 +0.006767,142 +0.006828,142 +0.006757,142 +0.006806,142 +0.006630,142 +0.006778,142 +0.007067,142 +0.006704,142 +0.006746,142 +0.006644,142 +0.006692,142 +0.006747,142 +0.006707,142 +0.006716,142 +0.006660,142 +0.006632,142 +0.006743,142 +0.007173,142 +0.006932,142 +0.006678,142 +0.006988,142 +0.006903,142 +0.006596,142 +0.006914,142 +0.006590,142 +0.007036,142 +0.006830,142 +0.006713,142 +0.006756,142 +0.006656,142 +0.006650,142 +0.006702,142 +0.006673,142 +0.006853,142 +0.006643,142 +0.006941,142 +0.006973,142 +0.006675,142 +0.006820,142 +0.006726,142 +0.006739,142 +0.006694,142 +0.006696,142 +0.006955,142 +0.006669,142 +0.006780,142 +0.006669,142 +0.006774,142 +0.006784,142 +0.006946,144 +0.007180,144 +0.007175,144 +0.006981,144 +0.007011,144 +0.006981,144 +0.007058,144 +0.006979,144 +0.007020,144 +0.006891,144 +0.006974,144 +0.007013,144 +0.007064,144 +0.007010,144 +0.006935,144 +0.007171,144 +0.007264,144 +0.006881,144 +0.007101,144 +0.007048,144 +0.007135,144 +0.006928,144 +0.006969,144 +0.006954,144 +0.006935,144 +0.007018,144 +0.007033,144 +0.007058,144 +0.006911,144 +0.006959,144 +0.007164,144 +0.007034,144 +0.007004,144 +0.006925,144 +0.007048,144 +0.006911,144 +0.006925,144 +0.006982,144 +0.007009,144 +0.006980,144 +0.007044,144 +0.006942,144 +0.007042,144 +0.007044,144 +0.007140,144 +0.007128,144 +0.006992,144 +0.006979,144 +0.006992,144 +0.007026,144 +0.006894,144 +0.006992,144 +0.006908,144 +0.006913,144 +0.007092,144 +0.006903,144 +0.007016,144 +0.006961,144 +0.007095,144 +0.007097,144 +0.007115,144 +0.007031,144 +0.006934,144 +0.007039,144 +0.006954,144 +0.007028,144 +0.006887,144 +0.006999,144 +0.007085,144 +0.006888,144 +0.007021,144 +0.006992,144 +0.007038,144 +0.007296,144 +0.007040,144 +0.007109,144 +0.006944,144 +0.007045,144 +0.006961,144 +0.006940,144 +0.006953,144 +0.006940,144 +0.007063,144 +0.006913,144 +0.007011,144 +0.006932,144 +0.006881,144 +0.007184,144 +0.007128,144 +0.007072,144 +0.006937,144 +0.007065,144 +0.006980,144 +0.006957,144 +0.007054,144 +0.006988,144 +0.007102,144 +0.006926,144 +0.006940,144 +0.007007,144 +0.007310,146 +0.007503,146 +0.007518,146 +0.007639,146 +0.007285,146 +0.007494,146 +0.007291,146 +0.007312,146 +0.007408,146 +0.007292,146 +0.007390,146 +0.007326,146 +0.007384,146 +0.007387,146 +0.007313,146 +0.007532,146 +0.007562,146 +0.007357,146 +0.007306,146 +0.007373,146 +0.007276,146 +0.007394,146 +0.007270,146 +0.007294,146 +0.007332,146 +0.007257,146 +0.007375,146 +0.007292,146 +0.007418,146 +0.007439,146 +0.007513,146 +0.007323,146 +0.007384,146 +0.007416,146 +0.007336,146 +0.007373,146 +0.007230,146 +0.007855,146 +0.007391,146 +0.007525,146 +0.007321,146 +0.007766,146 +0.007705,146 +0.008125,146 +0.007839,146 +0.008005,146 +0.008066,146 +0.007611,146 +0.007603,146 +0.007924,146 +0.007917,146 +0.008697,146 +0.007902,146 +0.008156,146 +0.007777,146 +0.007991,146 +0.007792,146 +0.007690,146 +0.008070,146 +0.007532,146 +0.007425,146 +0.007711,146 +0.007342,146 +0.007745,146 +0.007388,146 +0.007762,146 +0.007380,146 +0.007572,146 +0.008872,146 +0.007442,146 +0.007244,146 +0.007486,146 +0.007478,146 +0.007317,146 +0.007404,146 +0.007255,146 +0.007393,146 +0.007261,146 +0.007373,146 +0.007560,146 +0.007425,146 +0.008690,146 +0.007781,146 +0.007627,146 +0.007529,146 +0.007442,146 +0.007458,146 +0.007404,146 +0.007270,146 +0.007425,146 +0.007276,146 +0.007546,146 +0.007440,146 +0.007283,146 +0.007965,146 +0.008321,146 +0.007419,146 +0.007291,146 +0.007481,146 +0.007402,146 +0.007778,148 +0.007615,148 +0.007758,148 +0.007670,148 +0.007914,148 +0.007726,148 +0.007688,148 +0.008380,148 +0.008756,148 +0.007832,148 +0.007708,148 +0.007808,148 +0.007701,148 +0.007684,148 +0.007601,148 +0.007729,148 +0.007646,148 +0.010019,148 +0.010566,148 +0.008456,148 +0.008756,148 +0.008002,148 +0.007720,148 +0.008182,148 +0.007676,148 +0.007769,148 +0.007617,148 +0.007762,148 +0.007616,148 +0.007896,148 +0.007661,148 +0.008434,148 +0.007774,148 +0.007898,148 +0.007938,148 +0.007794,148 +0.007770,148 +0.007682,148 +0.007740,148 +0.007658,148 +0.007811,148 +0.007639,148 +0.007765,148 +0.008333,148 +0.007766,148 +0.007792,148 +0.008049,148 +0.007656,148 +0.007810,148 +0.007844,148 +0.007735,148 +0.007690,148 +0.007637,148 +0.007724,148 +0.007651,148 +0.007805,148 +0.007719,148 +0.007757,148 +0.007824,148 +0.008019,148 +0.007648,148 +0.007793,148 +0.007652,148 +0.007700,148 +0.007683,148 +0.007605,148 +0.007735,148 +0.007639,148 +0.007750,148 +0.007703,148 +0.007735,148 +0.007821,148 +0.008072,148 +0.007652,148 +0.007801,148 +0.007742,148 +0.007765,148 +0.007639,148 +0.008044,148 +0.008433,148 +0.007989,148 +0.008329,148 +0.008245,148 +0.008221,148 +0.008322,148 +0.008063,148 +0.007857,148 +0.007852,148 +0.007735,148 +0.008152,148 +0.008043,148 +0.008220,148 +0.007921,148 +0.008088,148 +0.008168,148 +0.008056,148 +0.008000,148 +0.008362,148 +0.007909,148 +0.009064,148 +0.008346,150 +0.008128,150 +0.007978,150 +0.007981,150 +0.007997,150 +0.008024,150 +0.008138,150 +0.008056,150 +0.008012,150 +0.008554,150 +0.007982,150 +0.008079,150 +0.008173,150 +0.008247,150 +0.007963,150 +0.007973,150 +0.007973,150 +0.007978,150 +0.007963,150 +0.007982,150 +0.007996,150 +0.008331,150 +0.008317,150 +0.008052,150 +0.008038,150 +0.007984,150 +0.008001,150 +0.008107,150 +0.007991,150 +0.007992,150 +0.008025,150 +0.007979,150 +0.008018,150 +0.008062,150 +0.008459,150 +0.008003,150 +0.008107,150 +0.008063,150 +0.007981,150 +0.007958,150 +0.008063,150 +0.007984,150 +0.008013,150 +0.007974,150 +0.008009,150 +0.008056,150 +0.008926,150 +0.008235,150 +0.008700,150 +0.008811,150 +0.008310,150 +0.008023,150 +0.008036,150 +0.007984,150 +0.008003,150 +0.008007,150 +0.008060,150 +0.007973,150 +0.008231,150 +0.008441,150 +0.008058,150 +0.008011,150 +0.007978,150 +0.008027,150 +0.007937,150 +0.008053,150 +0.007993,150 +0.008003,150 +0.008118,150 +0.008002,150 +0.007976,150 +0.008652,150 +0.008004,150 +0.008149,150 +0.008675,150 +0.008305,150 +0.008023,150 +0.008031,150 +0.007990,150 +0.007980,150 +0.007962,150 +0.008021,150 +0.007980,150 +0.008286,150 +0.008263,150 +0.008098,150 +0.008096,150 +0.008071,150 +0.007968,150 +0.007976,150 +0.007980,150 +0.008035,150 +0.007977,150 +0.008001,150 +0.007974,150 +0.008073,150 +0.008516,150 +0.007981,150 +0.008411,150 +0.008241,150 +0.008650,152 +0.008546,152 +0.008398,152 +0.008301,152 +0.008325,152 +0.008319,152 +0.008371,152 +0.008372,152 +0.008826,152 +0.008335,152 +0.008408,152 +0.008364,152 +0.008326,152 +0.008344,152 +0.008336,152 +0.008302,152 +0.008316,152 +0.008305,152 +0.008350,152 +0.008368,152 +0.008856,152 +0.008355,152 +0.008551,152 +0.008376,152 +0.008291,152 +0.008303,152 +0.008329,152 +0.008321,152 +0.008396,152 +0.008476,152 +0.008333,152 +0.008421,152 +0.009212,152 +0.008451,152 +0.008314,152 +0.008375,152 +0.008240,152 +0.008306,152 +0.008367,152 +0.008485,152 +0.008341,152 +0.008528,152 +0.008268,152 +0.008497,152 +0.008824,152 +0.008429,152 +0.008309,152 +0.008354,152 +0.008250,152 +0.008309,152 +0.008308,152 +0.008352,152 +0.008268,152 +0.008575,152 +0.008266,152 +0.008708,152 +0.008738,152 +0.008758,152 +0.008415,152 +0.008447,152 +0.008256,152 +0.008588,152 +0.008314,152 +0.008504,152 +0.008304,152 +0.008422,152 +0.008275,152 +0.008529,152 +0.008792,152 +0.008401,152 +0.008369,152 +0.008584,152 +0.008314,152 +0.008303,152 +0.008326,152 +0.008382,152 +0.008319,152 +0.008334,152 +0.008260,152 +0.008533,152 +0.008883,152 +0.008571,152 +0.008472,152 +0.008538,152 +0.008479,152 +0.008707,152 +0.008450,152 +0.008625,152 +0.008442,152 +0.008723,152 +0.009167,152 +0.009004,152 +0.009271,152 +0.009005,152 +0.010127,152 +0.010188,152 +0.011063,152 +0.009559,152 +0.009838,152 +0.009961,152 +0.009792,154 +0.009499,154 +0.009653,154 +0.009494,154 +0.009772,154 +0.009646,154 +0.009619,154 +0.009178,154 +0.009863,154 +0.009757,154 +0.009511,154 +0.009677,154 +0.009544,154 +0.009983,154 +0.009500,154 +0.009243,154 +0.009506,154 +0.009279,154 +0.009287,154 +0.009049,154 +0.008765,154 +0.008746,154 +0.008860,154 +0.008931,154 +0.008970,154 +0.008748,154 +0.008955,154 +0.009060,154 +0.009114,154 +0.009070,154 +0.009268,154 +0.009261,154 +0.009288,154 +0.009213,154 +0.009292,154 +0.009037,154 +0.009542,154 +0.009994,154 +0.009146,154 +0.009390,154 +0.009094,154 +0.008783,154 +0.008926,154 +0.008703,154 +0.008679,154 +0.009198,154 +0.008700,154 +0.008618,154 +0.008616,154 +0.008538,154 +0.008603,154 +0.008568,154 +0.008587,154 +0.008565,154 +0.008594,154 +0.008616,154 +0.008779,154 +0.008935,154 +0.008574,154 +0.008673,154 +0.008572,154 +0.008687,154 +0.008556,154 +0.008651,154 +0.008531,154 +0.008601,154 +0.008538,154 +0.008599,154 +0.009100,154 +0.008690,154 +0.008595,154 +0.008651,154 +0.008587,154 +0.008598,154 +0.008538,154 +0.008612,154 +0.008553,154 +0.008637,154 +0.008539,154 +0.008770,154 +0.010257,154 +0.008723,154 +0.008869,154 +0.008579,154 +0.008621,154 +0.008552,154 +0.008607,154 +0.008537,154 +0.008603,154 +0.008534,154 +0.008603,154 +0.008690,154 +0.009026,154 +0.008675,154 +0.009593,154 +0.008742,154 +0.008727,154 +0.008825,154 +0.008665,154 +0.008692,154 +0.008984,156 +0.008931,156 +0.011467,156 +0.011223,156 +0.009128,156 +0.008904,156 +0.008958,156 +0.008882,156 +0.008937,156 +0.009507,156 +0.010447,156 +0.009244,156 +0.009419,156 +0.009403,156 +0.009228,156 +0.009477,156 +0.009392,156 +0.009371,156 +0.009207,156 +0.009178,156 +0.009348,156 +0.009250,156 +0.009315,156 +0.009246,156 +0.009537,156 +0.009041,156 +0.009492,156 +0.009271,156 +0.009272,156 +0.009327,156 +0.009955,156 +0.011658,156 +0.009964,156 +0.011695,156 +0.012714,156 +0.011539,156 +0.010104,156 +0.011475,156 +0.009902,156 +0.009919,156 +0.011891,156 +0.011584,156 +0.010316,156 +0.010424,156 +0.009976,156 +0.011155,156 +0.009782,156 +0.010686,156 +0.013995,156 +0.011084,156 +0.009411,156 +0.010324,156 +0.015872,156 +0.011228,156 +0.009864,156 +0.010520,156 +0.009239,156 +0.010670,156 +0.009977,156 +0.009525,156 +0.009844,156 +0.009151,156 +0.009747,156 +0.009790,156 +0.009815,156 +0.010218,156 +0.010520,156 +0.012190,156 +0.015521,156 +0.009509,156 +0.009140,156 +0.012884,156 +0.009942,156 +0.009681,156 +0.009923,156 +0.009139,156 +0.009531,156 +0.008975,156 +0.009821,156 +0.009291,156 +0.010210,156 +0.009505,156 +0.010075,156 +0.009369,156 +0.008945,156 +0.010025,156 +0.009424,156 +0.009071,156 +0.009673,156 +0.009162,156 +0.009764,156 +0.009041,156 +0.011949,156 +0.009617,156 +0.009074,156 +0.009598,156 +0.009052,156 +0.009570,156 +0.009098,156 +0.010041,156 +0.009708,158 +0.010064,158 +0.009928,158 +0.009806,158 +0.010372,158 +0.009740,158 +0.010422,158 +0.009990,158 +0.012470,158 +0.011446,158 +0.011016,158 +0.013338,158 +0.014195,158 +0.011668,158 +0.011490,158 +0.012130,158 +0.019081,158 +0.015487,158 +0.009681,158 +0.012794,158 +0.010850,158 +0.011093,158 +0.010817,158 +0.011067,158 +0.010525,158 +0.012347,158 +0.013523,158 +0.015113,158 +0.011413,158 +0.011253,158 +0.010759,158 +0.015331,158 +0.016442,158 +0.015369,158 +0.018370,158 +0.018265,158 +0.011872,158 +0.009907,158 +0.011238,158 +0.010150,158 +0.010105,158 +0.010182,158 +0.010156,158 +0.010646,158 +0.010022,158 +0.011163,158 +0.011613,158 +0.012204,158 +0.010184,158 +0.010941,158 +0.009729,158 +0.010241,158 +0.011784,158 +0.012669,158 +0.010926,158 +0.010744,158 +0.009868,158 +0.010450,158 +0.010083,158 +0.009632,158 +0.011187,158 +0.010271,158 +0.010291,158 +0.010722,158 +0.010145,158 +0.010388,158 +0.010175,158 +0.009634,158 +0.010690,158 +0.010194,158 +0.010933,158 +0.010413,158 +0.010111,158 +0.009954,158 +0.009935,158 +0.009513,158 +0.010208,158 +0.009461,158 +0.010033,158 +0.009768,158 +0.009675,158 +0.009992,158 +0.015378,158 +0.009805,158 +0.009962,158 +0.009615,158 +0.009814,158 +0.009782,158 +0.009562,158 +0.009641,158 +0.009396,158 +0.009651,158 +0.009703,158 +0.009545,158 +0.009404,158 +0.009308,158 +0.009399,158 +0.009599,158 +0.009542,158 +0.009624,158 +0.009764,160 +0.009766,160 +0.010419,160 +0.009815,160 +0.009659,160 +0.009766,160 +0.009896,160 +0.009800,160 +0.009621,160 +0.009634,160 +0.009769,160 +0.009709,160 +0.010182,160 +0.010103,160 +0.009729,160 +0.016327,160 +0.018110,160 +0.009952,160 +0.009734,160 +0.009748,160 +0.009848,160 +0.010281,160 +0.009908,160 +0.009824,160 +0.009719,160 +0.009832,160 +0.009633,160 +0.009759,160 +0.009556,160 +0.009787,160 +0.009659,160 +0.010176,160 +0.010140,160 +0.009638,160 +0.010102,160 +0.009776,160 +0.009687,160 +0.009705,160 +0.009597,160 +0.009634,160 +0.009557,160 +0.009941,160 +0.015949,160 +0.018097,160 +0.018372,160 +0.017274,160 +0.017383,160 +0.017845,160 +0.017787,160 +0.017123,160 +0.009852,160 +0.009752,160 +0.009764,160 +0.009808,160 +0.009696,160 +0.009943,160 +0.010198,160 +0.009885,160 +0.009826,160 +0.009636,160 +0.009895,160 +0.009603,160 +0.012460,160 +0.009786,160 +0.009703,160 +0.009974,160 +0.010484,160 +0.009772,160 +0.009750,160 +0.009698,160 +0.009840,160 +0.009727,160 +0.009810,160 +0.009745,160 +0.009768,160 +0.009757,160 +0.012811,160 +0.009725,160 +0.009802,160 +0.009732,160 +0.009781,160 +0.009819,160 +0.009776,160 +0.009768,160 +0.009759,160 +0.009821,160 +0.011373,160 +0.009787,160 +0.009738,160 +0.009744,160 +0.009732,160 +0.009770,160 +0.009758,160 +0.009691,160 +0.009695,160 +0.009737,160 +0.011340,160 +0.009818,160 +0.009742,160 +0.009665,160 +0.010148,162 +0.010251,162 +0.010111,162 +0.010181,162 +0.010023,162 +0.010160,162 +0.011832,162 +0.010147,162 +0.010344,162 +0.009981,162 +0.010106,162 +0.010133,162 +0.010074,162 +0.010133,162 +0.010118,162 +0.010709,162 +0.011354,162 +0.010097,162 +0.010123,162 +0.010064,162 +0.010051,162 +0.010191,162 +0.009993,162 +0.010145,162 +0.010079,162 +0.011254,162 +0.010817,162 +0.010116,162 +0.010152,162 +0.010225,162 +0.010111,162 +0.010227,162 +0.010041,162 +0.010084,162 +0.010101,162 +0.011673,162 +0.010321,162 +0.010229,162 +0.010453,162 +0.010441,162 +0.010382,162 +0.010084,162 +0.010164,162 +0.010015,162 +0.010080,162 +0.011790,162 +0.010053,162 +0.010139,162 +0.010015,162 +0.010101,162 +0.010225,162 +0.009966,162 +0.010188,162 +0.010130,162 +0.010811,162 +0.011149,162 +0.010074,162 +0.010151,162 +0.010192,162 +0.009983,162 +0.010172,162 +0.010086,162 +0.010313,162 +0.010065,162 +0.011288,162 +0.010595,162 +0.010108,162 +0.010117,162 +0.010081,162 +0.010025,162 +0.010051,162 +0.010062,162 +0.009960,162 +0.010127,162 +0.012434,162 +0.010552,162 +0.010108,162 +0.010048,162 +0.010067,162 +0.010161,162 +0.010022,162 +0.010066,162 +0.009953,162 +0.010138,162 +0.011683,162 +0.010006,162 +0.010122,162 +0.010041,162 +0.010038,162 +0.010052,162 +0.009980,162 +0.010051,162 +0.010021,162 +0.010381,162 +0.011370,162 +0.010045,162 +0.010075,162 +0.010103,162 +0.010161,162 +0.010138,162 +0.010413,164 +0.010478,164 +0.010468,164 +0.011700,164 +0.011035,164 +0.010514,164 +0.010441,164 +0.010456,164 +0.010483,164 +0.010397,164 +0.010585,164 +0.010424,164 +0.010495,164 +0.012097,164 +0.010512,164 +0.010464,164 +0.010491,164 +0.010400,164 +0.010487,164 +0.010544,164 +0.010423,164 +0.010437,164 +0.012053,164 +0.010544,164 +0.010522,164 +0.010433,164 +0.010460,164 +0.010495,164 +0.010396,164 +0.010457,164 +0.010480,164 +0.010995,164 +0.011689,164 +0.010565,164 +0.010388,164 +0.010465,164 +0.010401,164 +0.010423,164 +0.010470,164 +0.010378,164 +0.010484,164 +0.012143,164 +0.010831,164 +0.010480,164 +0.010462,164 +0.010407,164 +0.010435,164 +0.010439,164 +0.010430,164 +0.010510,164 +0.011330,164 +0.011362,164 +0.010723,164 +0.010432,164 +0.010464,164 +0.010741,164 +0.010533,164 +0.010585,164 +0.010826,164 +0.010397,164 +0.011904,164 +0.010379,164 +0.010397,164 +0.010446,164 +0.010295,164 +0.010390,164 +0.010363,164 +0.010311,164 +0.010359,164 +0.012203,164 +0.011248,164 +0.010458,164 +0.010732,164 +0.010783,164 +0.010587,164 +0.010392,164 +0.010336,164 +0.010346,164 +0.010453,164 +0.011919,164 +0.010390,164 +0.010326,164 +0.010369,164 +0.010723,164 +0.010331,164 +0.010576,164 +0.010334,164 +0.010446,164 +0.011779,164 +0.010543,164 +0.010437,164 +0.010399,164 +0.010404,164 +0.010340,164 +0.010328,164 +0.010594,164 +0.010360,164 +0.010354,164 +0.012024,164 +0.010405,164 +0.010744,166 +0.010745,166 +0.010723,166 +0.010712,166 +0.010866,166 +0.010727,166 +0.010759,166 +0.012288,166 +0.010952,166 +0.010841,166 +0.010858,166 +0.010729,166 +0.010668,166 +0.010714,166 +0.010732,166 +0.010707,166 +0.012446,166 +0.010702,166 +0.010806,166 +0.010861,166 +0.010752,166 +0.010744,166 +0.010715,166 +0.010670,166 +0.010739,166 +0.011991,166 +0.010997,166 +0.010792,166 +0.010768,166 +0.010704,166 +0.010760,166 +0.010717,166 +0.010701,166 +0.010783,166 +0.011691,166 +0.011293,166 +0.010739,166 +0.010756,166 +0.010708,166 +0.010774,166 +0.010693,166 +0.010799,166 +0.010777,166 +0.010820,166 +0.012218,166 +0.010780,166 +0.010711,166 +0.010703,166 +0.010750,166 +0.010693,166 +0.012657,166 +0.010827,166 +0.011021,166 +0.012073,166 +0.010826,166 +0.010750,166 +0.010721,166 +0.010735,166 +0.010689,166 +0.010798,166 +0.010740,166 +0.010746,166 +0.013313,166 +0.010825,166 +0.010754,166 +0.010796,166 +0.010818,166 +0.010668,166 +0.010738,166 +0.010805,166 +0.010845,166 +0.012153,166 +0.010795,166 +0.010743,166 +0.010758,166 +0.010742,166 +0.010670,166 +0.010774,166 +0.010884,166 +0.010697,166 +0.012186,166 +0.010813,166 +0.010782,166 +0.010716,166 +0.010772,166 +0.010932,166 +0.010732,166 +0.010799,166 +0.010905,166 +0.012334,166 +0.011287,166 +0.010728,166 +0.010781,166 +0.010719,166 +0.010703,166 +0.010891,166 +0.010675,166 +0.010746,166 +0.011915,166 +0.011197,166 +0.011188,168 +0.011176,168 +0.011134,168 +0.011091,168 +0.011122,168 +0.011091,168 +0.011333,168 +0.012676,168 +0.011323,168 +0.011132,168 +0.011158,168 +0.011182,168 +0.011040,168 +0.011103,168 +0.011119,168 +0.011032,168 +0.012494,168 +0.011247,168 +0.011090,168 +0.011127,168 +0.011116,168 +0.011033,168 +0.011132,168 +0.011111,168 +0.011323,168 +0.012560,168 +0.011198,168 +0.011052,168 +0.011112,168 +0.011170,168 +0.011056,168 +0.011182,168 +0.011106,168 +0.011096,168 +0.012608,168 +0.011202,168 +0.011168,168 +0.011096,168 +0.011665,168 +0.011273,168 +0.011239,168 +0.011162,168 +0.011810,168 +0.013018,168 +0.011296,168 +0.013346,168 +0.011301,168 +0.011328,168 +0.011371,168 +0.011118,168 +0.011642,168 +0.013363,168 +0.012294,168 +0.011239,168 +0.011365,168 +0.011286,168 +0.011206,168 +0.011182,168 +0.011193,168 +0.011358,168 +0.012980,168 +0.011323,168 +0.011290,168 +0.011096,168 +0.011324,168 +0.011231,168 +0.011120,168 +0.011345,168 +0.011328,168 +0.013012,168 +0.011295,168 +0.011217,168 +0.011203,168 +0.011287,168 +0.011296,168 +0.011253,168 +0.011104,168 +0.012233,168 +0.012366,168 +0.011131,168 +0.011286,168 +0.011339,168 +0.011209,168 +0.011334,168 +0.011235,168 +0.011186,168 +0.012163,168 +0.011562,168 +0.011245,168 +0.011236,168 +0.011327,168 +0.011180,168 +0.011227,168 +0.011246,168 +0.011389,168 +0.011467,168 +0.011451,168 +0.011252,168 +0.011184,168 +0.011440,168 +0.011803,170 +0.011633,170 +0.011754,170 +0.011733,170 +0.012118,170 +0.011671,170 +0.011704,170 +0.011708,170 +0.011543,170 +0.011757,170 +0.011879,170 +0.012707,170 +0.012234,170 +0.012154,170 +0.012029,170 +0.011819,170 +0.011794,170 +0.011707,170 +0.011739,170 +0.011616,170 +0.011782,170 +0.011894,170 +0.011620,170 +0.011676,170 +0.011737,170 +0.011665,170 +0.013483,170 +0.011864,170 +0.011862,170 +0.011783,170 +0.011887,170 +0.011690,170 +0.011598,170 +0.011614,170 +0.011786,170 +0.011668,170 +0.011574,170 +0.011753,170 +0.012154,170 +0.011741,170 +0.011661,170 +0.011731,170 +0.011587,170 +0.011728,170 +0.011885,170 +0.012014,170 +0.011749,170 +0.012165,170 +0.011731,170 +0.011691,170 +0.011632,170 +0.011787,170 +0.011654,170 +0.011534,170 +0.011671,170 +0.012229,170 +0.011720,170 +0.011710,170 +0.011681,170 +0.011628,170 +0.011850,170 +0.012076,170 +0.012006,170 +0.011998,170 +0.012166,170 +0.011650,170 +0.011619,170 +0.013339,170 +0.011921,170 +0.011944,170 +0.011613,170 +0.012039,170 +0.012333,170 +0.011874,170 +0.011528,170 +0.011718,170 +0.012276,170 +0.011680,170 +0.011720,170 +0.011750,170 +0.011871,170 +0.011891,170 +0.011765,170 +0.011748,170 +0.012251,170 +0.012336,170 +0.011824,170 +0.011639,170 +0.011552,170 +0.012302,170 +0.011869,170 +0.011699,170 +0.011653,170 +0.011691,170 +0.011702,170 +0.011613,170 +0.011693,170 +0.011867,170 +0.011884,170 +0.011810,170 +0.012074,172 +0.011974,172 +0.012033,172 +0.012139,172 +0.012091,172 +0.012195,172 +0.012515,172 +0.012144,172 +0.012095,172 +0.011989,172 +0.012052,172 +0.012197,172 +0.011944,172 +0.012017,172 +0.012634,172 +0.012185,172 +0.012032,172 +0.011984,172 +0.011944,172 +0.011948,172 +0.012013,172 +0.012059,172 +0.012414,172 +0.012556,172 +0.012083,172 +0.012123,172 +0.012035,172 +0.011958,172 +0.012100,172 +0.012146,172 +0.012187,172 +0.012415,172 +0.012021,172 +0.012361,172 +0.012271,172 +0.012159,172 +0.012322,172 +0.012592,172 +0.012602,172 +0.017974,172 +0.012685,172 +0.012590,172 +0.012584,172 +0.013232,172 +0.012474,172 +0.013220,172 +0.012502,172 +0.013119,172 +0.014392,172 +0.013448,172 +0.013295,172 +0.012219,172 +0.013097,172 +0.012303,172 +0.012687,172 +0.012114,172 +0.012033,172 +0.012130,172 +0.012114,172 +0.012187,172 +0.012298,172 +0.012147,172 +0.013105,172 +0.012013,172 +0.012057,172 +0.011979,172 +0.011942,172 +0.011856,172 +0.011861,172 +0.011924,172 +0.012072,172 +0.012259,172 +0.011844,172 +0.011881,172 +0.011843,172 +0.011926,172 +0.011862,172 +0.012586,172 +0.012893,172 +0.012599,172 +0.012343,172 +0.012339,172 +0.012494,172 +0.013816,172 +0.013387,172 +0.012774,172 +0.012310,172 +0.012798,172 +0.012672,172 +0.012516,172 +0.013154,172 +0.013189,172 +0.013596,172 +0.013207,172 +0.012189,172 +0.012599,172 +0.012129,172 +0.011997,172 +0.011920,172 +0.011909,172 +0.012384,174 +0.012414,174 +0.012323,174 +0.012920,174 +0.012416,174 +0.012512,174 +0.012308,174 +0.012340,174 +0.012355,174 +0.012403,174 +0.012300,174 +0.012744,174 +0.012276,174 +0.012355,174 +0.012279,174 +0.012386,174 +0.012333,174 +0.012360,174 +0.012270,174 +0.012730,174 +0.012328,174 +0.012354,174 +0.012453,174 +0.012383,174 +0.012623,174 +0.012689,174 +0.012315,174 +0.012723,174 +0.012302,174 +0.012564,174 +0.012282,174 +0.012302,174 +0.012277,174 +0.012412,174 +0.012272,174 +0.012768,174 +0.012377,174 +0.012371,174 +0.012361,174 +0.013034,174 +0.012987,174 +0.012628,174 +0.013998,174 +0.013698,174 +0.014008,174 +0.013889,174 +0.013980,174 +0.013791,174 +0.013426,174 +0.013223,174 +0.013151,174 +0.013028,174 +0.012541,174 +0.012331,174 +0.012293,174 +0.012333,174 +0.012407,174 +0.012313,174 +0.012564,174 +0.012576,174 +0.012471,174 +0.012335,174 +0.012304,174 +0.012388,174 +0.012524,174 +0.012404,174 +0.012559,174 +0.012668,174 +0.012388,174 +0.012343,174 +0.012292,174 +0.012377,174 +0.012352,174 +0.012424,174 +0.012519,174 +0.012774,174 +0.012341,174 +0.012310,174 +0.012281,174 +0.012314,174 +0.012306,174 +0.012409,174 +0.012421,174 +0.012911,174 +0.012366,174 +0.012398,174 +0.012284,174 +0.012317,174 +0.012333,174 +0.012430,174 +0.012790,174 +0.012808,174 +0.012425,174 +0.012461,174 +0.012323,174 +0.012311,174 +0.012329,174 +0.012341,174 +0.012318,174 +0.012892,174 +0.012960,176 +0.012683,176 +0.012958,176 +0.012756,176 +0.012903,176 +0.015272,176 +0.013608,176 +0.013179,176 +0.012783,176 +0.012762,176 +0.012756,176 +0.013141,176 +0.012996,176 +0.012790,176 +0.013298,176 +0.012712,176 +0.012703,176 +0.012714,176 +0.012706,176 +0.012737,176 +0.012772,176 +0.012755,176 +0.013546,176 +0.013366,176 +0.013516,176 +0.012994,176 +0.012751,176 +0.013049,176 +0.013413,176 +0.012935,176 +0.013297,176 +0.012956,176 +0.012993,176 +0.012823,176 +0.012865,176 +0.012933,176 +0.012857,176 +0.013186,176 +0.013147,176 +0.012913,176 +0.012906,176 +0.012921,176 +0.013084,176 +0.012999,176 +0.012901,176 +0.013274,176 +0.013093,176 +0.013013,176 +0.013214,176 +0.013072,176 +0.013100,176 +0.012980,176 +0.012936,176 +0.013306,176 +0.012931,176 +0.012915,176 +0.012792,176 +0.012953,176 +0.013011,176 +0.012916,176 +0.013064,176 +0.013292,176 +0.013001,176 +0.012893,176 +0.013025,176 +0.015394,176 +0.012886,176 +0.013035,176 +0.013505,176 +0.012926,176 +0.012864,176 +0.012822,176 +0.012955,176 +0.013117,176 +0.013025,176 +0.012799,176 +0.013449,176 +0.012980,176 +0.012970,176 +0.013047,176 +0.013065,176 +0.014701,176 +0.014472,176 +0.013191,176 +0.012983,176 +0.012964,176 +0.012861,176 +0.012866,176 +0.012829,176 +0.012984,176 +0.012747,176 +0.013213,176 +0.012899,176 +0.013713,176 +0.024383,176 +0.023947,176 +0.023787,176 +0.024533,176 +0.020622,176 +0.012850,176 +0.013423,178 +0.013214,178 +0.013369,178 +0.013415,178 +0.013215,178 +0.013210,178 +0.013217,178 +0.013262,178 +0.013397,178 +0.013134,178 +0.013471,178 +0.013426,178 +0.013207,178 +0.013239,178 +0.013152,178 +0.013520,178 +0.013238,178 +0.013340,178 +0.013517,178 +0.013335,178 +0.013132,178 +0.013216,178 +0.013238,178 +0.013494,178 +0.013076,178 +0.013547,178 +0.013249,178 +0.013361,178 +0.013213,178 +0.013097,178 +0.013363,178 +0.013336,178 +0.013284,178 +0.013659,178 +0.013276,178 +0.013364,178 +0.013297,178 +0.013291,178 +0.013249,178 +0.013256,178 +0.013445,178 +0.013561,178 +0.013437,178 +0.013181,178 +0.013125,178 +0.013279,178 +0.013336,178 +0.013215,178 +0.014821,178 +0.013188,178 +0.013328,178 +0.013293,178 +0.013606,178 +0.013379,178 +0.013260,178 +0.014431,178 +0.013638,178 +0.013395,178 +0.013212,178 +0.013191,178 +0.013361,178 +0.013519,178 +0.013701,178 +0.014332,178 +0.013212,178 +0.013294,178 +0.013222,178 +0.013290,178 +0.013266,178 +0.013418,178 +0.014835,178 +0.013408,178 +0.013361,178 +0.013201,178 +0.013219,178 +0.013530,178 +0.013478,178 +0.014482,178 +0.014100,178 +0.013266,178 +0.013233,178 +0.013167,178 +0.013363,178 +0.013241,178 +0.013262,178 +0.014768,178 +0.013224,178 +0.013219,178 +0.013202,178 +0.013827,178 +0.013347,178 +0.013195,178 +0.014322,178 +0.013850,178 +0.013280,178 +0.013235,178 +0.013249,178 +0.013219,178 +0.013212,178 +0.013230,178 +0.015233,180 +0.013626,180 +0.013766,180 +0.013514,180 +0.013690,180 +0.013639,180 +0.013634,180 +0.016223,180 +0.014035,180 +0.013553,180 +0.013603,180 +0.013822,180 +0.013851,180 +0.013732,180 +0.015221,180 +0.013563,180 +0.013429,180 +0.013443,180 +0.013436,180 +0.013512,180 +0.013390,180 +0.014203,180 +0.014348,180 +0.013512,180 +0.013476,180 +0.013443,180 +0.013712,180 +0.013452,180 +0.013452,180 +0.015234,180 +0.013533,180 +0.013496,180 +0.013369,180 +0.013502,180 +0.013443,180 +0.013460,180 +0.014897,180 +0.013679,180 +0.013442,180 +0.013460,180 +0.013442,180 +0.013522,180 +0.013461,180 +0.013933,180 +0.014692,180 +0.013510,180 +0.013534,180 +0.013457,180 +0.013455,180 +0.013410,180 +0.013439,180 +0.015126,180 +0.013476,180 +0.013476,180 +0.013371,180 +0.013891,180 +0.013455,180 +0.013458,180 +0.014949,180 +0.013609,180 +0.013448,180 +0.013444,180 +0.013600,180 +0.013514,180 +0.013525,180 +0.013936,180 +0.014586,180 +0.013585,180 +0.013459,180 +0.013418,180 +0.013584,180 +0.013392,180 +0.013459,180 +0.015049,180 +0.013426,180 +0.013406,180 +0.013403,180 +0.013465,180 +0.013494,180 +0.013467,180 +0.015478,180 +0.014293,180 +0.013425,180 +0.013365,180 +0.013495,180 +0.013476,180 +0.013442,180 +0.013944,180 +0.014480,180 +0.013447,180 +0.013480,180 +0.013425,180 +0.013722,180 +0.013414,180 +0.013474,180 +0.015276,180 +0.013472,180 +0.013435,180 +0.013424,180 +0.013643,180 +0.013902,182 +0.013907,182 +0.015443,182 +0.014029,182 +0.013959,182 +0.013974,182 +0.014015,182 +0.013872,182 +0.013870,182 +0.015263,182 +0.014036,182 +0.013872,182 +0.013946,182 +0.013903,182 +0.014017,182 +0.013900,182 +0.015056,182 +0.017820,182 +0.014901,182 +0.013865,182 +0.013997,182 +0.013866,182 +0.014549,182 +0.019217,182 +0.013981,182 +0.013916,182 +0.013907,182 +0.013986,182 +0.013927,182 +0.013883,182 +0.019150,182 +0.013907,182 +0.013926,182 +0.013915,182 +0.013980,182 +0.013910,182 +0.013977,182 +0.020017,182 +0.014346,182 +0.013972,182 +0.013997,182 +0.013899,182 +0.013899,182 +0.014963,182 +0.018291,182 +0.013958,182 +0.013986,182 +0.013974,182 +0.013918,182 +0.013935,182 +0.016002,182 +0.017890,182 +0.014267,182 +0.014013,182 +0.014023,182 +0.013904,182 +0.013822,182 +0.019177,182 +0.014132,182 +0.013980,182 +0.014011,182 +0.014188,182 +0.013923,182 +0.013921,182 +0.020269,182 +0.014097,182 +0.014227,182 +0.014711,182 +0.014058,182 +0.013927,182 +0.014158,182 +0.019033,182 +0.013974,182 +0.013980,182 +0.013983,182 +0.013825,182 +0.013902,182 +0.016214,182 +0.017030,182 +0.013948,182 +0.013924,182 +0.014053,182 +0.013955,182 +0.013969,182 +0.018330,182 +0.014625,182 +0.013950,182 +0.013899,182 +0.013992,182 +0.013903,182 +0.013896,182 +0.019139,182 +0.014123,182 +0.013892,182 +0.014028,182 +0.013953,182 +0.013911,182 +0.013905,182 +0.019032,182 +0.013962,182 +0.014479,184 +0.014455,184 +0.014369,184 +0.014412,184 +0.014929,184 +0.019210,184 +0.014443,184 +0.014334,184 +0.014386,184 +0.014356,184 +0.014315,184 +0.019437,184 +0.014461,184 +0.014292,184 +0.014367,184 +0.014483,184 +0.014369,184 +0.014329,184 +0.020059,184 +0.014497,184 +0.014341,184 +0.014386,184 +0.014289,184 +0.014306,184 +0.016362,184 +0.017521,184 +0.014389,184 +0.014344,184 +0.014387,184 +0.014368,184 +0.014352,184 +0.019472,184 +0.014474,184 +0.014347,184 +0.015075,184 +0.014360,184 +0.014348,184 +0.014399,184 +0.019423,184 +0.014507,184 +0.014438,184 +0.014416,184 +0.014332,184 +0.015185,184 +0.019410,184 +0.016408,184 +0.015864,184 +0.015536,184 +0.014972,184 +0.015582,184 +0.027270,184 +0.018104,184 +0.015220,184 +0.016124,184 +0.014965,184 +0.014821,184 +0.014793,184 +0.014504,184 +0.014466,184 +0.014458,184 +0.014914,184 +0.014509,184 +0.014484,184 +0.014877,184 +0.014463,184 +0.014389,184 +0.014486,184 +0.014340,184 +0.014570,184 +0.014492,184 +0.014879,184 +0.014335,184 +0.014371,184 +0.014412,184 +0.014258,184 +0.015139,184 +0.014796,184 +0.015086,184 +0.015209,184 +0.014670,184 +0.014514,184 +0.014402,184 +0.014345,184 +0.014389,184 +0.015136,184 +0.014319,184 +0.014330,184 +0.014358,184 +0.014303,184 +0.014298,184 +0.014372,184 +0.014798,184 +0.014356,184 +0.014343,184 +0.014388,184 +0.014325,184 +0.014326,184 +0.014415,184 +0.014743,184 +0.014389,184 +0.015259,186 +0.015109,186 +0.014963,186 +0.015024,186 +0.015551,186 +0.015172,186 +0.015104,186 +0.015000,186 +0.014967,186 +0.014994,186 +0.015068,186 +0.025382,186 +0.029037,186 +0.015744,186 +0.022137,186 +0.015311,186 +0.015295,186 +0.014945,186 +0.014972,186 +0.015185,186 +0.015195,186 +0.014981,186 +0.015459,186 +0.014972,186 +0.014958,186 +0.015054,186 +0.014974,186 +0.014953,186 +0.014940,186 +0.015495,186 +0.015012,186 +0.015054,186 +0.015140,186 +0.015008,186 +0.015085,186 +0.015402,186 +0.015411,186 +0.015059,186 +0.015014,186 +0.015397,186 +0.015012,186 +0.014989,186 +0.015490,186 +0.015117,186 +0.015029,186 +0.015152,186 +0.015804,186 +0.014965,186 +0.015016,186 +0.015574,186 +0.014951,186 +0.014957,186 +0.015062,186 +0.015000,186 +0.015073,186 +0.015221,186 +0.015300,186 +0.014961,186 +0.015027,186 +0.014961,186 +0.014952,186 +0.014975,186 +0.015491,186 +0.015028,186 +0.015032,186 +0.015069,186 +0.014967,186 +0.014969,186 +0.015113,186 +0.015516,186 +0.014974,186 +0.014906,186 +0.015022,186 +0.014984,186 +0.014992,186 +0.015205,186 +0.015358,186 +0.014973,186 +0.015069,186 +0.015046,186 +0.014976,186 +0.015026,186 +0.015461,186 +0.014995,186 +0.014958,186 +0.015029,186 +0.015035,186 +0.014989,186 +0.014946,186 +0.015537,186 +0.018234,186 +0.016711,186 +0.015068,186 +0.015017,186 +0.015000,186 +0.015504,186 +0.014981,186 +0.015016,186 +0.015108,186 +0.015070,186 +0.015702,188 +0.015573,188 +0.016011,188 +0.015475,188 +0.015665,188 +0.015472,188 +0.015559,188 +0.015475,188 +0.015965,188 +0.015482,188 +0.015496,188 +0.015608,188 +0.015600,188 +0.015478,188 +0.015600,188 +0.016119,188 +0.015570,188 +0.015585,188 +0.015472,188 +0.015473,188 +0.015478,188 +0.016057,188 +0.015521,188 +0.015449,188 +0.015591,188 +0.015474,188 +0.015849,188 +0.021293,188 +0.029933,188 +0.029273,188 +0.029209,188 +0.029517,188 +0.029054,188 +0.029225,188 +0.029937,188 +0.029164,188 +0.028743,188 +0.028933,188 +0.029663,188 +0.028790,188 +0.029312,188 +0.029178,188 +0.029934,188 +0.029684,188 +0.029071,188 +0.029666,188 +0.029133,188 +0.029237,188 +0.029800,188 +0.029108,188 +0.029052,188 +0.029270,188 +0.029256,188 +0.029173,188 +0.029406,188 +0.029462,188 +0.029302,188 +0.029582,188 +0.032099,188 +0.029381,188 +0.029352,188 +0.030201,188 +0.025227,188 +0.017845,188 +0.016191,188 +0.016249,188 +0.016641,188 +0.017521,188 +0.016085,188 +0.016326,188 +0.016309,188 +0.016209,188 +0.016283,188 +0.021234,188 +0.015879,188 +0.015915,188 +0.015630,188 +0.015712,188 +0.015935,188 +0.020878,188 +0.016506,188 +0.015879,188 +0.015805,188 +0.015917,188 +0.015749,188 +0.020783,188 +0.015975,188 +0.015752,188 +0.015739,188 +0.015889,188 +0.015739,188 +0.020795,188 +0.015937,188 +0.015899,188 +0.015682,188 +0.017630,188 +0.015786,188 +0.016189,188 +0.015989,188 +0.015832,188 +0.016330,190 +0.016433,190 +0.016326,190 +0.016356,190 +0.016731,190 +0.016684,190 +0.016410,190 +0.016675,190 +0.016609,190 +0.016545,190 +0.016663,190 +0.016281,190 +0.016178,190 +0.016171,190 +0.016348,190 +0.016273,190 +0.016541,190 +0.016366,190 +0.016309,190 +0.016257,190 +0.016565,190 +0.016389,190 +0.016721,190 +0.016352,190 +0.016311,190 +0.016366,190 +0.016356,190 +0.016395,190 +0.016891,190 +0.016458,190 +0.016458,190 +0.016651,190 +0.016730,190 +0.016754,190 +0.017093,190 +0.016874,190 +0.016853,190 +0.017064,190 +0.017028,190 +0.023721,190 +0.018242,190 +0.017103,190 +0.017085,190 +0.016747,190 +0.016366,190 +0.016701,190 +0.016568,190 +0.016367,190 +0.016247,190 +0.016355,190 +0.016363,190 +0.016749,190 +0.016560,190 +0.016463,190 +0.016335,190 +0.016366,190 +0.016223,190 +0.016496,190 +0.016825,190 +0.016327,190 +0.016257,190 +0.016236,190 +0.016298,190 +0.016230,190 +0.016841,190 +0.016357,190 +0.016425,190 +0.016208,190 +0.016314,190 +0.016231,190 +0.016985,190 +0.016357,190 +0.016317,190 +0.016216,190 +0.016243,190 +0.016221,190 +0.016878,190 +0.016325,190 +0.016272,190 +0.016287,190 +0.016271,190 +0.016204,190 +0.017171,190 +0.016317,190 +0.016377,190 +0.016395,190 +0.016442,190 +0.016784,190 +0.017779,190 +0.016077,190 +0.016126,190 +0.016031,190 +0.015989,190 +0.016613,190 +0.016412,190 +0.016562,190 +0.016252,190 +0.016061,190 +0.016037,190 +0.016055,190 +0.017758,192 +0.018130,192 +0.017835,192 +0.017625,192 +0.017569,192 +0.017560,192 +0.018093,192 +0.017590,192 +0.017646,192 +0.017595,192 +0.017589,192 +0.017593,192 +0.018053,192 +0.017857,192 +0.017576,192 +0.018595,192 +0.018000,192 +0.017856,192 +0.017902,192 +0.017668,192 +0.017556,192 +0.017600,192 +0.017589,192 +0.018096,192 +0.017726,192 +0.017848,192 +0.018263,192 +0.018465,192 +0.018469,192 +0.019493,192 +0.019087,192 +0.018881,192 +0.019300,192 +0.018882,192 +0.020475,192 +0.018907,192 +0.018425,192 +0.018675,192 +0.018796,192 +0.019180,192 +0.018455,192 +0.018796,192 +0.019406,192 +0.018863,192 +0.019209,192 +0.019241,192 +0.018335,192 +0.018386,192 +0.018598,192 +0.021133,192 +0.019768,192 +0.019792,192 +0.019381,192 +0.019887,192 +0.019157,192 +0.019405,192 +0.019352,192 +0.018494,192 +0.018213,192 +0.018221,192 +0.018205,192 +0.018568,192 +0.018134,192 +0.017751,192 +0.017784,192 +0.017656,192 +0.018212,192 +0.017853,192 +0.017730,192 +0.017663,192 +0.017586,192 +0.017701,192 +0.017985,192 +0.017648,192 +0.017545,192 +0.017614,192 +0.017532,192 +0.018059,192 +0.017754,192 +0.017547,192 +0.018010,192 +0.017615,192 +0.017596,192 +0.018172,192 +0.017703,192 +0.017613,192 +0.017505,192 +0.017577,192 +0.017640,192 +0.018077,192 +0.017675,192 +0.017876,192 +0.017800,192 +0.017545,192 +0.018172,192 +0.017663,192 +0.017645,192 +0.017551,192 +0.017570,192 +0.017639,192 +0.017723,194 +0.017201,194 +0.017217,194 +0.017284,194 +0.017187,194 +0.017117,194 +0.017673,194 +0.017179,194 +0.017058,194 +0.017121,194 +0.017032,194 +0.017173,194 +0.017470,194 +0.017173,194 +0.017038,194 +0.017035,194 +0.017031,194 +0.017312,194 +0.017448,194 +0.017117,194 +0.017095,194 +0.017161,194 +0.017030,194 +0.017458,194 +0.017410,194 +0.017029,194 +0.017090,194 +0.017150,194 +0.017056,194 +0.017628,194 +0.017249,194 +0.017056,194 +0.017107,194 +0.017040,194 +0.017043,194 +0.017798,194 +0.017358,194 +0.018198,194 +0.018354,194 +0.018124,194 +0.019318,194 +0.019823,194 +0.018403,194 +0.018274,194 +0.017861,194 +0.017662,194 +0.017762,194 +0.017314,194 +0.017294,194 +0.017188,194 +0.017390,194 +0.017211,194 +0.017584,194 +0.017199,194 +0.017207,194 +0.017087,194 +0.017136,194 +0.017488,194 +0.017390,194 +0.017213,194 +0.017064,194 +0.017075,194 +0.017029,194 +0.017756,194 +0.018961,194 +0.017272,194 +0.017127,194 +0.017087,194 +0.017077,194 +0.017945,194 +0.017222,194 +0.017054,194 +0.017034,194 +0.017032,194 +0.017027,194 +0.017971,194 +0.017141,194 +0.017032,194 +0.017031,194 +0.017031,194 +0.017108,194 +0.017596,194 +0.017183,194 +0.017266,194 +0.017126,194 +0.017049,194 +0.017203,194 +0.017470,194 +0.017219,194 +0.017033,194 +0.017059,194 +0.017057,194 +0.017218,194 +0.017503,194 +0.017104,194 +0.017073,194 +0.017095,194 +0.017032,194 +0.017256,194 +0.017648,194 +0.017649,196 +0.017528,196 +0.017527,196 +0.017525,196 +0.017969,196 +0.017686,196 +0.017538,196 +0.017524,196 +0.017531,196 +0.019247,196 +0.020003,196 +0.019093,196 +0.018780,196 +0.018794,196 +0.017793,196 +0.018126,196 +0.017694,196 +0.017561,196 +0.017558,196 +0.017488,196 +0.017509,196 +0.018199,196 +0.017556,196 +0.017535,196 +0.017544,196 +0.017471,196 +0.017794,196 +0.017866,196 +0.017479,196 +0.017464,196 +0.017628,196 +0.017493,196 +0.018101,196 +0.017621,196 +0.017466,196 +0.017535,196 +0.017462,196 +0.017503,196 +0.018121,196 +0.017712,196 +0.017655,196 +0.017517,196 +0.017495,196 +0.017710,196 +0.017903,196 +0.017532,196 +0.017483,196 +0.017467,196 +0.017495,196 +0.018009,196 +0.017698,196 +0.017549,196 +0.017547,196 +0.017500,196 +0.017464,196 +0.018189,196 +0.017632,196 +0.017809,196 +0.017598,196 +0.017607,196 +0.017754,196 +0.017993,196 +0.017522,196 +0.017505,196 +0.017483,196 +0.017663,196 +0.018069,196 +0.017601,196 +0.017471,196 +0.017477,196 +0.017527,196 +0.017463,196 +0.018090,196 +0.017821,196 +0.017606,196 +0.017499,196 +0.017503,196 +0.017560,196 +0.018135,196 +0.017621,196 +0.017612,196 +0.017501,196 +0.017469,196 +0.018569,196 +0.017776,196 +0.017502,196 +0.017464,196 +0.017463,196 +0.017467,196 +0.018028,196 +0.017664,196 +0.018535,196 +0.020325,196 +0.018020,196 +0.018523,196 +0.018185,196 +0.017650,196 +0.017807,196 +0.019012,196 +0.019560,196 +0.021297,198 +0.018879,198 +0.019415,198 +0.018237,198 +0.018151,198 +0.018833,198 +0.018286,198 +0.018125,198 +0.018174,198 +0.018090,198 +0.018107,198 +0.018952,198 +0.018206,198 +0.018143,198 +0.018094,198 +0.018124,198 +0.023542,198 +0.018220,198 +0.018218,198 +0.018148,198 +0.018384,198 +0.022983,198 +0.018703,198 +0.018196,198 +0.018158,198 +0.018113,198 +0.019203,198 +0.022723,198 +0.018422,198 +0.018436,198 +0.018288,198 +0.018514,198 +0.023999,198 +0.018266,198 +0.018654,198 +0.018360,198 +0.018278,198 +0.023968,198 +0.018381,198 +0.018400,198 +0.018328,198 +0.018368,198 +0.024078,198 +0.018356,198 +0.018515,198 +0.018419,198 +0.018498,198 +0.024293,198 +0.020207,198 +0.018954,198 +0.018380,198 +0.018465,198 +0.024021,198 +0.018793,198 +0.018296,198 +0.018294,198 +0.018455,198 +0.021622,198 +0.025022,198 +0.019093,198 +0.018406,198 +0.018466,198 +0.020783,198 +0.022209,198 +0.018543,198 +0.018451,198 +0.018320,198 +0.020868,198 +0.021467,198 +0.018890,198 +0.018451,198 +0.018416,198 +0.018991,198 +0.023501,198 +0.018466,198 +0.018396,198 +0.018622,198 +0.018818,198 +0.019036,198 +0.018999,198 +0.018954,198 +0.018368,198 +0.018850,198 +0.019231,198 +0.018180,198 +0.018262,198 +0.018089,198 +0.018069,198 +0.018296,198 +0.018660,198 +0.018183,198 +0.018072,198 +0.018069,198 +0.018087,198 +0.018824,198 +0.018486,198 +0.018444,198 +0.018565,198 +0.018482,198 +0.018686,198 +0.019614,200 +0.018985,200 +0.018951,200 +0.019013,200 +0.018900,200 +0.019752,200 +0.018977,200 +0.018916,200 +0.019042,200 +0.019185,200 +0.019620,200 +0.019126,200 +0.019041,200 +0.019046,200 +0.019005,200 +0.019648,200 +0.019398,200 +0.018984,200 +0.018921,200 +0.019097,200 +0.019108,200 +0.019361,200 +0.018982,200 +0.018946,200 +0.018984,200 +0.019093,200 +0.019620,200 +0.018948,200 +0.018868,200 +0.018854,200 +0.018931,200 +0.019449,200 +0.019022,200 +0.019014,200 +0.018844,200 +0.018885,200 +0.019446,200 +0.019151,200 +0.019011,200 +0.018906,200 +0.018898,200 +0.018926,200 +0.019673,200 +0.018902,200 +0.018821,200 +0.018833,200 +0.018963,200 +0.019687,200 +0.019112,200 +0.019051,200 +0.018897,200 +0.019042,200 +0.019607,200 +0.019062,200 +0.018903,200 +0.018925,200 +0.018920,200 +0.019317,200 +0.019451,200 +0.018919,200 +0.019014,200 +0.018887,200 +0.019028,200 +0.020660,200 +0.019032,200 +0.018857,200 +0.019030,200 +0.019124,200 +0.022260,200 +0.019522,200 +0.019082,200 +0.019479,200 +0.018689,200 +0.020167,200 +0.018665,200 +0.018714,200 +0.019436,200 +0.018740,200 +0.020238,200 +0.018807,200 +0.018606,200 +0.018601,200 +0.018634,200 +0.019663,200 +0.019381,200 +0.018664,200 +0.018644,200 +0.018625,200 +0.018611,200 +0.020134,200 +0.018772,200 +0.018611,200 +0.018597,200 +0.018606,200 +0.020143,200 +0.018630,200 +0.018587,200 +0.018580,200 +0.018601,200 +0.019625,200 +0.019955,202 +0.019270,202 +0.019276,202 +0.019466,202 +0.020023,202 +0.020513,202 +0.019293,202 +0.019209,202 +0.019191,202 +0.019206,202 +0.020959,202 +0.019258,202 +0.019271,202 +0.019220,202 +0.019201,202 +0.020855,202 +0.019424,202 +0.019376,202 +0.019329,202 +0.019204,202 +0.022095,202 +0.019331,202 +0.019276,202 +0.019260,202 +0.019274,202 +0.020895,202 +0.019298,202 +0.019362,202 +0.019265,202 +0.019339,202 +0.020935,202 +0.019314,202 +0.019344,202 +0.019257,202 +0.019289,202 +0.020819,202 +0.019280,202 +0.019256,202 +0.019269,202 +0.019241,202 +0.020638,202 +0.019632,202 +0.019357,202 +0.019642,202 +0.019539,202 +0.020262,202 +0.020131,202 +0.019248,202 +0.019233,202 +0.019343,202 +0.019285,202 +0.020917,202 +0.019276,202 +0.019215,202 +0.019297,202 +0.019431,202 +0.021968,202 +0.019440,202 +0.019328,202 +0.019243,202 +0.019206,202 +0.019737,202 +0.019363,202 +0.019230,202 +0.019292,202 +0.019199,202 +0.020305,202 +0.019640,202 +0.019347,202 +0.019220,202 +0.019197,202 +0.019628,202 +0.019511,202 +0.019280,202 +0.019240,202 +0.019250,202 +0.019447,202 +0.020550,202 +0.019445,202 +0.019274,202 +0.019406,202 +0.019407,202 +0.019588,202 +0.019275,202 +0.019281,202 +0.019254,202 +0.019371,202 +0.019940,202 +0.019374,202 +0.019312,202 +0.019333,202 +0.019288,202 +0.019764,202 +0.019403,202 +0.019297,202 +0.019224,202 +0.019246,202 +0.019714,202 +0.019373,202 +0.019290,202 +0.020346,204 +0.019918,204 +0.020338,204 +0.019947,204 +0.019849,204 +0.019833,204 +0.020035,204 +0.020295,204 +0.019921,204 +0.019865,204 +0.019769,204 +0.019774,204 +0.020104,204 +0.020178,204 +0.019959,204 +0.019820,204 +0.019834,204 +0.020111,204 +0.020052,204 +0.019878,204 +0.019775,204 +0.019783,204 +0.020072,204 +0.020188,204 +0.019887,204 +0.019811,204 +0.019828,204 +0.020040,204 +0.020067,204 +0.020056,204 +0.019794,204 +0.019855,204 +0.020051,204 +0.020079,204 +0.019893,204 +0.019762,204 +0.019778,204 +0.019882,204 +0.020157,204 +0.019869,204 +0.020606,204 +0.020034,204 +0.020459,204 +0.020252,204 +0.019838,204 +0.019776,204 +0.019760,204 +0.019930,204 +0.020156,204 +0.019840,204 +0.019778,204 +0.019795,204 +0.019914,204 +0.020118,204 +0.019836,204 +0.019809,204 +0.019894,204 +0.019863,204 +0.020166,204 +0.019825,204 +0.019781,204 +0.019731,204 +0.019851,204 +0.020210,204 +0.019788,204 +0.019774,204 +0.019908,204 +0.019780,204 +0.020163,204 +0.019885,204 +0.019818,204 +0.019725,204 +0.019835,204 +0.020265,204 +0.019733,204 +0.019779,204 +0.019784,204 +0.019784,204 +0.020236,204 +0.020084,204 +0.019783,204 +0.019811,204 +0.019831,204 +0.020212,204 +0.019767,204 +0.019805,204 +0.019774,204 +0.019814,204 +0.020358,204 +0.019773,204 +0.019830,204 +0.019771,204 +0.019804,204 +0.020233,204 +0.019854,204 +0.019767,204 +0.019772,204 +0.019890,204 +0.020138,204 +0.019739,204 +0.020474,206 +0.021390,206 +0.020503,206 +0.020879,206 +0.020554,206 +0.020528,206 +0.020522,206 +0.020726,206 +0.020909,206 +0.020593,206 +0.020475,206 +0.020340,206 +0.020749,206 +0.021044,206 +0.020424,206 +0.020461,206 +0.020456,206 +0.020496,206 +0.020875,206 +0.020437,206 +0.020355,206 +0.020425,206 +0.020503,206 +0.020988,206 +0.020476,206 +0.020374,206 +0.020402,206 +0.020521,206 +0.020866,206 +0.020498,206 +0.020491,206 +0.020461,206 +0.020494,206 +0.020731,206 +0.020377,206 +0.020408,206 +0.020478,206 +0.020558,206 +0.020627,206 +0.020435,206 +0.020376,206 +0.020436,206 +0.020589,206 +0.020674,206 +0.020367,206 +0.020386,206 +0.020430,206 +0.020825,206 +0.020477,206 +0.020425,206 +0.020371,206 +0.020455,206 +0.020832,206 +0.020454,206 +0.020433,206 +0.020450,206 +0.020546,206 +0.020845,206 +0.020509,206 +0.020404,206 +0.020361,206 +0.020545,206 +0.020790,206 +0.020547,206 +0.020483,206 +0.020445,206 +0.020497,206 +0.021000,206 +0.020620,206 +0.020432,206 +0.020507,206 +0.020377,206 +0.021019,206 +0.020574,206 +0.020587,206 +0.020427,206 +0.020517,206 +0.021153,206 +0.020512,206 +0.021221,206 +0.020608,206 +0.020599,206 +0.020907,206 +0.020395,206 +0.020442,206 +0.020490,206 +0.020755,206 +0.020848,206 +0.020516,206 +0.020425,206 +0.020515,206 +0.021067,206 +0.020579,206 +0.020578,206 +0.020460,206 +0.020519,206 +0.020952,206 +0.020452,206 +0.020415,206 +0.020555,206 +0.020937,208 +0.021447,208 +0.021110,208 +0.021063,208 +0.021080,208 +0.021059,208 +0.021476,208 +0.021106,208 +0.020988,208 +0.021031,208 +0.021058,208 +0.021473,208 +0.020970,208 +0.020922,208 +0.021063,208 +0.021414,208 +0.021251,208 +0.020921,208 +0.021078,208 +0.020971,208 +0.021575,208 +0.021036,208 +0.021007,208 +0.021015,208 +0.021137,208 +0.021794,208 +0.021007,208 +0.021026,208 +0.021033,208 +0.021063,208 +0.021563,208 +0.021013,208 +0.020908,208 +0.021028,208 +0.021103,208 +0.021375,208 +0.020978,208 +0.021054,208 +0.020989,208 +0.021518,208 +0.020965,208 +0.020957,208 +0.020970,208 +0.020899,208 +0.021561,208 +0.021345,208 +0.020959,208 +0.021026,208 +0.021020,208 +0.021515,208 +0.020916,208 +0.021116,208 +0.021035,208 +0.021011,208 +0.021544,208 +0.020938,208 +0.020971,208 +0.020993,208 +0.021331,208 +0.021146,208 +0.020975,208 +0.021000,208 +0.020880,208 +0.021581,208 +0.020919,208 +0.020933,208 +0.021065,208 +0.021079,208 +0.021627,208 +0.020984,208 +0.021031,208 +0.021143,208 +0.021434,208 +0.021466,208 +0.021069,208 +0.021036,208 +0.020908,208 +0.021261,208 +0.021241,208 +0.020960,208 +0.020993,208 +0.020928,208 +0.021676,208 +0.021072,208 +0.020921,208 +0.021194,208 +0.020953,208 +0.021478,208 +0.020900,208 +0.020952,208 +0.021031,208 +0.020963,208 +0.021564,208 +0.020987,208 +0.021018,208 +0.020997,208 +0.021287,208 +0.021463,208 +0.020961,208 +0.021010,208 +0.021837,210 +0.022359,210 +0.021703,210 +0.021722,210 +0.021748,210 +0.021800,210 +0.022293,210 +0.021726,210 +0.021681,210 +0.021713,210 +0.022189,210 +0.021968,210 +0.021695,210 +0.021828,210 +0.021751,210 +0.022327,210 +0.021710,210 +0.021823,210 +0.021882,210 +0.024530,210 +0.023167,210 +0.021845,210 +0.021955,210 +0.021629,210 +0.022300,210 +0.021750,210 +0.021700,210 +0.021613,210 +0.021707,210 +0.022299,210 +0.021728,210 +0.021733,210 +0.021715,210 +0.022258,210 +0.021667,210 +0.021689,210 +0.021675,210 +0.021617,210 +0.022322,210 +0.021623,210 +0.021723,210 +0.021755,210 +0.021899,210 +0.022125,210 +0.021792,210 +0.021803,210 +0.021650,210 +0.022226,210 +0.021704,210 +0.021738,210 +0.021623,210 +0.021700,210 +0.022291,210 +0.021647,210 +0.021842,210 +0.021684,210 +0.022042,210 +0.021837,210 +0.021654,210 +0.021712,210 +0.021604,210 +0.022472,210 +0.021726,210 +0.021741,210 +0.021754,210 +0.023545,210 +0.022155,210 +0.021975,210 +0.021686,210 +0.021615,210 +0.022360,210 +0.021625,210 +0.022446,210 +0.022446,210 +0.022270,210 +0.022792,210 +0.021866,210 +0.021678,210 +0.021673,210 +0.022255,210 +0.021645,210 +0.021740,210 +0.021689,210 +0.021647,210 +0.022128,210 +0.021689,210 +0.021829,210 +0.021827,210 +0.021905,210 +0.022211,210 +0.021896,210 +0.021644,210 +0.021800,210 +0.022196,210 +0.021754,210 +0.021831,210 +0.021608,210 +0.021701,210 +0.022241,210 +0.021665,210 +0.022333,212 +0.022289,212 +0.022824,212 +0.022219,212 +0.022375,212 +0.022238,212 +0.022223,212 +0.022961,212 +0.022227,212 +0.022258,212 +0.022534,212 +0.022837,212 +0.022326,212 +0.022341,212 +0.022220,212 +0.022228,212 +0.022974,212 +0.022232,212 +0.022573,212 +0.022355,212 +0.022848,212 +0.022325,212 +0.022381,212 +0.022277,212 +0.022785,212 +0.022947,212 +0.022319,212 +0.022236,212 +0.022260,212 +0.022802,212 +0.022282,212 +0.022393,212 +0.022251,212 +0.022384,212 +0.022750,212 +0.022347,212 +0.022354,212 +0.022219,212 +0.022789,212 +0.022340,212 +0.022302,212 +0.022216,212 +0.022453,212 +0.022677,212 +0.022374,212 +0.022228,212 +0.022263,212 +0.022823,212 +0.022218,212 +0.022228,212 +0.022198,212 +0.022395,212 +0.022869,212 +0.022323,212 +0.022361,212 +0.022268,212 +0.022801,212 +0.022334,212 +0.022253,212 +0.022175,212 +0.022361,212 +0.022652,212 +0.022286,212 +0.022231,212 +0.022339,212 +0.023049,212 +0.022210,212 +0.022239,212 +0.022321,212 +0.022345,212 +0.022578,212 +0.022393,212 +0.022224,212 +0.022156,212 +0.022832,212 +0.022247,212 +0.022352,212 +0.022454,212 +0.022399,212 +0.022739,212 +0.022451,212 +0.022183,212 +0.022177,212 +0.022833,212 +0.022297,212 +0.023886,212 +0.022259,212 +0.022521,212 +0.022645,212 +0.022403,212 +0.022249,212 +0.022298,212 +0.022748,212 +0.022594,212 +0.022305,212 +0.022199,212 +0.022525,212 +0.022699,212 +0.022429,212 +0.022883,212 +0.023026,214 +0.023601,214 +0.022894,214 +0.022924,214 +0.022801,214 +0.023424,214 +0.022784,214 +0.022958,214 +0.022937,214 +0.023036,214 +0.023292,214 +0.022977,214 +0.022910,214 +0.022914,214 +0.023308,214 +0.022945,214 +0.022868,214 +0.022820,214 +0.023361,214 +0.022903,214 +0.022967,214 +0.023011,214 +0.022831,214 +0.023594,214 +0.022994,214 +0.022835,214 +0.022873,214 +0.023355,214 +0.023009,214 +0.022910,214 +0.022801,214 +0.023142,214 +0.023126,214 +0.022873,214 +0.022995,214 +0.022831,214 +0.023499,214 +0.022909,214 +0.022804,214 +0.022903,214 +0.023405,214 +0.023121,214 +0.023190,214 +0.023021,214 +0.023059,214 +0.023475,214 +0.022920,214 +0.022871,214 +0.023039,214 +0.023400,214 +0.022957,214 +0.022797,214 +0.022976,214 +0.023346,214 +0.023228,214 +0.022894,214 +0.023023,214 +0.022950,214 +0.023304,214 +0.022880,214 +0.022979,214 +0.022820,214 +0.023251,214 +0.022990,214 +0.022892,214 +0.022999,214 +0.023206,214 +0.023043,214 +0.022884,214 +0.022835,214 +0.022819,214 +0.023492,214 +0.022915,214 +0.022874,214 +0.022853,214 +0.023394,214 +0.022965,214 +0.022915,214 +0.022892,214 +0.023037,214 +0.023072,214 +0.022953,214 +0.022892,214 +0.022866,214 +0.023559,214 +0.022908,214 +0.023742,214 +0.022807,214 +0.023526,214 +0.023016,214 +0.022789,214 +0.023650,214 +0.023282,214 +0.023171,214 +0.022981,214 +0.022893,214 +0.022843,214 +0.023337,214 +0.022931,214 +0.022935,214 +0.023484,216 +0.023960,216 +0.023784,216 +0.023437,216 +0.023560,216 +0.023767,216 +0.023759,216 +0.023548,216 +0.023554,216 +0.023648,216 +0.023907,216 +0.023504,216 +0.023411,216 +0.023361,216 +0.023976,216 +0.023612,216 +0.023527,216 +0.023568,216 +0.024065,216 +0.023642,216 +0.023505,216 +0.023500,216 +0.023761,216 +0.023708,216 +0.023398,216 +0.023390,216 +0.023527,216 +0.023995,216 +0.023649,216 +0.023565,216 +0.023520,216 +0.024105,216 +0.023535,216 +0.023515,216 +0.023435,216 +0.024056,216 +0.023549,216 +0.023436,216 +0.023527,216 +0.023797,216 +0.024015,216 +0.023496,216 +0.023743,216 +0.023574,216 +0.023869,216 +0.023564,216 +0.023412,216 +0.023448,216 +0.024012,216 +0.023638,216 +0.023633,216 +0.023510,216 +0.024206,216 +0.023510,216 +0.023539,216 +0.023430,216 +0.023712,216 +0.023728,216 +0.023420,216 +0.023466,216 +0.023403,216 +0.023832,216 +0.023598,216 +0.023477,216 +0.023488,216 +0.023875,216 +0.023622,216 +0.023453,216 +0.023399,216 +0.024021,216 +0.023578,216 +0.023585,216 +0.023475,216 +0.024381,216 +0.024930,216 +0.023957,216 +0.024402,216 +0.023838,216 +0.024771,216 +0.023503,216 +0.023520,216 +0.023429,216 +0.025026,216 +0.023553,216 +0.023468,216 +0.023556,216 +0.024949,216 +0.023713,216 +0.023406,216 +0.023559,216 +0.024893,216 +0.023608,216 +0.023511,216 +0.023548,216 +0.025018,216 +0.023749,216 +0.023568,216 +0.023493,216 +0.023500,216 +0.025098,216 +0.024321,218 +0.024253,218 +0.024154,218 +0.025959,218 +0.024192,218 +0.024190,218 +0.024139,218 +0.025750,218 +0.024191,218 +0.024242,218 +0.024402,218 +0.030602,218 +0.024774,218 +0.024360,218 +0.024410,218 +0.024888,218 +0.024177,218 +0.024285,218 +0.024374,218 +0.024681,218 +0.024682,218 +0.024262,218 +0.024223,218 +0.024665,218 +0.024532,218 +0.024227,218 +0.024309,218 +0.024826,218 +0.024397,218 +0.024196,218 +0.024256,218 +0.024776,218 +0.024537,218 +0.024244,218 +0.024336,218 +0.024614,218 +0.024646,218 +0.024301,218 +0.024200,218 +0.024366,218 +0.024733,218 +0.024201,218 +0.024230,218 +0.024197,218 +0.024804,218 +0.024310,218 +0.024180,218 +0.024274,218 +0.024824,218 +0.024214,218 +0.024201,218 +0.024154,218 +0.025116,218 +0.024334,218 +0.024319,218 +0.024365,218 +0.024794,218 +0.024186,218 +0.024323,218 +0.024177,218 +0.024657,218 +0.024300,218 +0.024207,218 +0.024112,218 +0.024419,218 +0.024600,218 +0.024227,218 +0.024217,218 +0.024233,218 +0.024734,218 +0.024214,218 +0.025253,218 +0.024190,218 +0.024788,218 +0.024715,218 +0.024626,218 +0.024456,218 +0.024755,218 +0.024196,218 +0.024166,218 +0.024235,218 +0.024681,218 +0.024260,218 +0.024331,218 +0.024221,218 +0.024686,218 +0.024356,218 +0.024330,218 +0.024253,218 +0.024664,218 +0.024319,218 +0.024420,218 +0.025809,218 +0.024817,218 +0.024451,218 +0.024223,218 +0.024401,218 +0.024759,218 +0.024375,218 +0.024219,218 +0.024873,220 +0.025108,220 +0.025061,220 +0.024885,220 +0.024765,220 +0.025074,220 +0.025367,220 +0.024839,220 +0.024765,220 +0.025052,220 +0.025111,220 +0.024817,220 +0.024792,220 +0.025239,220 +0.025257,220 +0.025068,220 +0.024841,220 +0.025115,220 +0.025180,220 +0.024913,220 +0.024890,220 +0.025050,220 +0.025184,220 +0.024911,220 +0.024798,220 +0.025013,220 +0.025192,220 +0.024926,220 +0.024795,220 +0.024976,220 +0.025252,220 +0.024912,220 +0.024793,220 +0.024958,220 +0.025602,220 +0.024894,220 +0.024824,220 +0.024999,220 +0.025398,220 +0.024906,220 +0.024775,220 +0.024963,220 +0.025427,220 +0.024907,220 +0.024832,220 +0.024869,220 +0.025427,220 +0.025238,220 +0.024822,220 +0.024873,220 +0.025321,220 +0.024911,220 +0.024858,220 +0.024902,220 +0.025402,220 +0.024943,220 +0.024956,220 +0.024943,220 +0.025503,220 +0.024872,220 +0.024849,220 +0.024872,220 +0.025515,220 +0.024940,220 +0.024794,220 +0.024854,220 +0.025468,220 +0.025027,220 +0.024804,220 +0.024812,220 +0.025526,220 +0.024885,220 +0.024797,220 +0.024926,220 +0.025620,220 +0.024928,220 +0.024839,220 +0.024926,220 +0.025429,220 +0.025009,220 +0.024797,220 +0.024856,220 +0.025474,220 +0.024913,220 +0.024784,220 +0.024895,220 +0.025441,220 +0.025252,220 +0.024798,220 +0.024784,220 +0.025461,220 +0.024823,220 +0.024757,220 +0.025039,220 +0.026051,220 +0.025156,220 +0.026092,220 +0.024877,220 +0.025423,220 +0.024875,220 +0.025803,222 +0.025612,222 +0.026133,222 +0.025814,222 +0.026533,222 +0.025811,222 +0.026799,222 +0.028307,222 +0.026128,222 +0.026274,222 +0.026490,222 +0.025989,222 +0.025987,222 +0.027747,222 +0.026207,222 +0.025834,222 +0.026027,222 +0.027656,222 +0.025946,222 +0.025867,222 +0.025983,222 +0.027567,222 +0.025950,222 +0.025924,222 +0.025934,222 +0.027547,222 +0.025963,222 +0.025842,222 +0.026992,222 +0.026363,222 +0.025988,222 +0.025937,222 +0.027749,222 +0.025962,222 +0.026520,222 +0.026097,222 +0.027628,222 +0.025700,222 +0.026003,222 +0.025730,222 +0.027521,222 +0.025729,222 +0.026208,222 +0.025815,222 +0.027381,222 +0.025782,222 +0.025681,222 +0.025890,222 +0.027240,222 +0.025703,222 +0.026188,222 +0.028180,222 +0.026576,222 +0.025724,222 +0.025760,222 +0.027488,222 +0.026379,222 +0.026555,222 +0.027810,222 +0.029167,222 +0.026614,222 +0.027743,222 +0.027495,222 +0.029081,222 +0.028671,222 +0.027525,222 +0.026388,222 +0.026126,222 +0.026361,222 +0.026159,222 +0.027152,222 +0.026343,222 +0.026092,222 +0.026325,222 +0.026569,222 +0.026080,222 +0.026654,222 +0.026354,222 +0.026697,222 +0.026229,222 +0.026825,222 +0.027730,222 +0.028674,222 +0.027830,222 +0.028155,222 +0.028284,222 +0.028044,222 +0.026559,222 +0.028011,222 +0.033725,222 +0.027623,222 +0.028418,222 +0.031350,222 +0.028729,222 +0.026083,222 +0.026010,222 +0.032434,222 +0.027779,222 +0.026996,222 +0.028396,222 +0.028949,224 +0.027685,224 +0.026853,224 +0.027342,224 +0.026836,224 +0.026846,224 +0.027353,224 +0.027514,224 +0.035273,224 +0.032047,224 +0.027517,224 +0.026843,224 +0.026461,224 +0.026823,224 +0.026482,224 +0.026429,224 +0.026592,224 +0.026880,224 +0.026321,224 +0.026325,224 +0.026351,224 +0.026876,224 +0.026249,224 +0.026443,224 +0.026446,224 +0.026957,224 +0.026337,224 +0.026385,224 +0.026553,224 +0.026630,224 +0.026286,224 +0.026370,224 +0.026752,224 +0.026410,224 +0.026253,224 +0.026425,224 +0.027212,224 +0.026683,224 +0.026352,224 +0.026306,224 +0.026796,224 +0.026319,224 +0.026409,224 +0.027414,224 +0.027239,224 +0.026580,224 +0.026598,224 +0.026857,224 +0.026380,224 +0.026298,224 +0.026425,224 +0.026794,224 +0.026301,224 +0.026350,224 +0.026489,224 +0.027160,224 +0.026314,224 +0.026349,224 +0.026421,224 +0.026793,224 +0.026374,224 +0.026456,224 +0.026503,224 +0.026953,224 +0.026346,224 +0.026434,224 +0.026791,224 +0.026370,224 +0.026421,224 +0.026372,224 +0.026847,224 +0.026371,224 +0.026353,224 +0.026352,224 +0.026915,224 +0.026435,224 +0.026356,224 +0.026417,224 +0.026870,224 +0.026376,224 +0.026433,224 +0.026624,224 +0.027409,224 +0.026897,224 +0.026468,224 +0.026801,224 +0.026327,224 +0.026391,224 +0.026394,224 +0.026912,224 +0.026554,224 +0.026577,224 +0.026535,224 +0.026772,224 +0.026386,224 +0.026433,224 +0.026597,224 +0.026615,224 +0.026654,224 +0.026921,224 +0.028603,226 +0.027266,226 +0.027135,226 +0.027072,226 +0.027474,226 +0.027131,226 +0.027086,226 +0.027116,226 +0.027478,226 +0.027045,226 +0.027091,226 +0.027592,226 +0.027407,226 +0.027063,226 +0.027063,226 +0.027425,226 +0.027157,226 +0.027344,226 +0.027210,226 +0.027718,226 +0.027114,226 +0.027143,226 +0.027466,226 +0.027005,226 +0.027020,226 +0.026995,226 +0.027437,226 +0.027026,226 +0.026995,226 +0.027142,226 +0.027541,226 +0.026967,226 +0.027073,226 +0.027470,226 +0.026976,226 +0.027179,226 +0.027682,226 +0.027688,226 +0.027113,226 +0.027033,226 +0.027071,226 +0.027531,226 +0.026931,226 +0.027160,226 +0.027355,226 +0.027081,226 +0.026994,226 +0.027038,226 +0.027578,226 +0.027147,226 +0.027222,226 +0.027132,226 +0.027484,226 +0.026990,226 +0.027118,226 +0.027287,226 +0.027333,226 +0.027106,226 +0.027130,226 +0.027430,226 +0.027058,226 +0.026931,226 +0.027072,226 +0.027519,226 +0.027034,226 +0.027094,226 +0.027110,226 +0.027528,226 +0.027124,226 +0.027042,226 +0.027476,226 +0.027152,226 +0.027089,226 +0.027805,226 +0.027947,226 +0.027093,226 +0.027021,226 +0.026933,226 +0.027671,226 +0.027016,226 +0.026995,226 +0.027477,226 +0.027034,226 +0.027993,226 +0.027066,226 +0.027560,226 +0.027294,226 +0.027060,226 +0.027045,226 +0.027400,226 +0.027050,226 +0.026985,226 +0.027514,226 +0.027799,226 +0.027884,226 +0.027555,226 +0.027529,226 +0.026994,226 +0.027625,226 +0.027030,226 +0.028396,228 +0.027789,228 +0.027706,228 +0.028292,228 +0.027713,228 +0.027641,228 +0.027753,228 +0.028166,228 +0.027764,228 +0.027839,228 +0.027917,228 +0.028371,228 +0.027708,228 +0.027819,228 +0.028142,228 +0.027675,228 +0.027806,228 +0.027774,228 +0.028090,228 +0.027691,228 +0.028016,228 +0.028347,228 +0.027715,228 +0.027710,228 +0.027669,228 +0.028135,228 +0.027709,228 +0.027739,228 +0.028289,228 +0.027917,228 +0.027731,228 +0.027709,228 +0.028199,228 +0.027688,228 +0.027750,228 +0.027957,228 +0.028081,228 +0.027754,228 +0.027762,228 +0.028137,228 +0.027730,228 +0.027760,228 +0.027624,228 +0.028232,228 +0.027763,228 +0.027841,228 +0.027998,228 +0.028292,228 +0.027739,228 +0.027804,228 +0.028145,228 +0.027705,228 +0.027735,228 +0.027768,228 +0.028157,228 +0.027802,228 +0.027793,228 +0.028159,228 +0.027800,228 +0.027955,228 +0.027726,228 +0.028202,228 +0.027815,228 +0.027765,228 +0.027927,228 +0.028082,228 +0.027911,228 +0.028507,228 +0.029761,228 +0.029541,228 +0.030357,228 +0.029105,228 +0.030264,228 +0.030174,228 +0.028764,228 +0.028345,228 +0.028749,228 +0.028297,228 +0.031972,228 +0.027970,228 +0.028245,228 +0.027927,228 +0.033471,228 +0.029183,228 +0.030954,228 +0.030335,228 +0.029571,228 +0.029664,228 +0.029525,228 +0.029456,228 +0.029034,228 +0.028302,228 +0.028582,228 +0.027869,228 +0.027958,228 +0.032860,228 +0.054217,228 +0.055905,228 +0.032124,228 +0.030037,228 +0.031212,230 +0.031446,230 +0.029493,230 +0.028981,230 +0.029714,230 +0.029217,230 +0.029330,230 +0.029472,230 +0.028810,230 +0.028966,230 +0.028912,230 +0.029368,230 +0.029060,230 +0.028714,230 +0.029201,230 +0.028925,230 +0.029145,230 +0.029026,230 +0.029022,230 +0.028966,230 +0.028870,230 +0.029391,230 +0.028822,230 +0.029057,230 +0.029450,230 +0.028822,230 +0.029209,230 +0.029746,230 +0.029454,230 +0.028988,230 +0.029127,230 +0.029064,230 +0.029241,230 +0.029435,230 +0.029081,230 +0.031390,230 +0.029498,230 +0.029355,230 +0.029553,230 +0.028982,230 +0.028996,230 +0.028980,230 +0.029188,230 +0.029060,230 +0.028818,230 +0.029422,230 +0.029067,230 +0.028992,230 +0.029280,230 +0.029486,230 +0.029258,230 +0.029168,230 +0.029584,230 +0.029309,230 +0.029174,230 +0.029294,230 +0.028859,230 +0.029155,230 +0.028960,230 +0.029254,230 +0.029074,230 +0.030576,230 +0.030232,230 +0.029177,230 +0.029131,230 +0.030245,230 +0.029385,230 +0.028945,230 +0.028784,230 +0.029233,230 +0.029134,230 +0.029420,230 +0.029514,230 +0.028832,230 +0.028563,230 +0.028667,230 +0.029067,230 +0.028526,230 +0.028438,230 +0.028899,230 +0.029096,230 +0.028589,230 +0.028424,230 +0.029054,230 +0.028619,230 +0.028536,230 +0.028929,230 +0.028593,230 +0.029794,230 +0.038274,230 +0.028631,230 +0.028745,230 +0.028442,230 +0.028873,230 +0.028448,230 +0.028783,230 +0.028461,230 +0.028953,230 +0.028479,230 +0.028411,230 +0.029688,232 +0.029182,232 +0.029007,232 +0.029212,232 +0.030177,232 +0.029792,232 +0.030598,232 +0.033744,232 +0.033655,232 +0.030829,232 +0.032066,232 +0.032223,232 +0.031038,232 +0.030659,232 +0.030033,232 +0.029460,232 +0.029567,232 +0.029924,232 +0.029216,232 +0.029134,232 +0.029829,232 +0.029198,232 +0.029112,232 +0.029550,232 +0.029096,232 +0.029180,232 +0.029056,232 +0.029627,232 +0.029195,232 +0.029088,232 +0.029468,232 +0.029486,232 +0.030023,232 +0.029728,232 +0.029768,232 +0.029106,232 +0.029068,232 +0.029595,232 +0.029140,232 +0.029497,232 +0.029585,232 +0.029460,232 +0.029183,232 +0.029034,232 +0.029641,232 +0.029115,232 +0.029208,232 +0.029817,232 +0.029447,232 +0.029239,232 +0.029114,232 +0.029866,232 +0.029166,232 +0.029146,232 +0.029593,232 +0.029066,232 +0.029145,232 +0.029049,232 +0.029621,232 +0.029042,232 +0.029041,232 +0.029647,232 +0.029164,232 +0.029283,232 +0.029343,232 +0.029674,232 +0.029265,232 +0.029332,232 +0.029687,232 +0.029218,232 +0.029087,232 +0.029494,232 +0.029337,232 +0.029189,232 +0.029091,232 +0.029642,232 +0.029189,232 +0.029207,232 +0.029540,232 +0.029594,232 +0.029035,232 +0.029327,232 +0.032385,232 +0.030660,232 +0.029237,232 +0.029852,232 +0.029299,232 +0.029156,232 +0.029341,232 +0.029562,232 +0.029221,232 +0.029107,232 +0.029742,232 +0.029237,232 +0.029049,232 +0.029655,232 +0.029219,232 +0.029072,232 +0.029165,232 +0.029762,232 +0.030358,234 +0.030127,234 +0.030604,234 +0.030153,234 +0.030130,234 +0.030406,234 +0.030486,234 +0.030233,234 +0.030003,234 +0.030490,234 +0.030202,234 +0.030074,234 +0.030438,234 +0.030215,234 +0.030018,234 +0.031065,234 +0.032074,234 +0.030253,234 +0.030099,234 +0.030677,234 +0.031515,234 +0.031204,234 +0.033240,234 +0.031116,234 +0.030199,234 +0.030712,234 +0.030225,234 +0.030108,234 +0.030597,234 +0.030284,234 +0.030132,234 +0.030359,234 +0.030782,234 +0.030082,234 +0.030109,234 +0.030729,234 +0.030159,234 +0.030105,234 +0.030472,234 +0.030409,234 +0.030108,234 +0.030038,234 +0.030701,234 +0.030097,234 +0.032153,234 +0.032187,234 +0.030610,234 +0.030178,234 +0.030790,234 +0.030180,234 +0.030011,234 +0.030187,234 +0.030570,234 +0.030096,234 +0.030133,234 +0.031568,234 +0.030319,234 +0.030084,234 +0.030822,234 +0.030645,234 +0.030130,234 +0.030539,234 +0.031045,234 +0.030107,234 +0.030286,234 +0.030675,234 +0.030380,234 +0.030718,234 +0.031886,234 +0.032856,234 +0.033020,234 +0.032307,234 +0.031610,234 +0.032002,234 +0.032058,234 +0.031528,234 +0.030505,234 +0.030506,234 +0.030780,234 +0.030169,234 +0.030483,234 +0.030792,234 +0.030206,234 +0.030239,234 +0.031256,234 +0.030443,234 +0.030501,234 +0.030984,234 +0.030521,234 +0.030428,234 +0.030373,234 +0.030966,234 +0.030462,234 +0.030669,234 +0.030869,234 +0.030494,234 +0.030628,234 +0.031014,234 +0.031166,234 +0.033034,234 +0.033777,236 +0.033994,236 +0.033944,236 +0.034148,236 +0.031757,236 +0.030948,236 +0.032556,236 +0.031320,236 +0.031032,236 +0.031013,236 +0.032891,236 +0.032434,236 +0.032233,236 +0.034586,236 +0.033126,236 +0.033744,236 +0.034739,236 +0.031994,236 +0.031318,236 +0.033039,236 +0.031272,236 +0.031136,236 +0.032828,236 +0.031334,236 +0.031468,236 +0.032985,236 +0.031576,236 +0.031285,236 +0.033451,236 +0.035104,236 +0.034135,236 +0.032739,236 +0.032981,236 +0.032480,236 +0.032441,236 +0.032488,236 +0.033266,236 +0.031990,236 +0.031856,236 +0.031373,236 +0.031471,236 +0.031751,236 +0.032149,236 +0.031541,236 +0.031784,236 +0.031390,236 +0.031234,236 +0.031803,236 +0.031537,236 +0.031533,236 +0.032068,236 +0.031771,236 +0.031798,236 +0.031953,236 +0.031569,236 +0.031234,236 +0.031939,236 +0.031545,236 +0.031601,236 +0.031578,236 +0.031932,236 +0.031237,236 +0.031325,236 +0.031721,236 +0.031366,236 +0.031220,236 +0.031750,236 +0.031240,236 +0.032455,236 +0.033766,236 +0.031280,236 +0.030793,236 +0.031328,236 +0.030853,236 +0.030771,236 +0.031968,236 +0.031074,236 +0.030757,236 +0.030916,236 +0.032139,236 +0.032433,236 +0.034592,236 +0.033978,236 +0.032397,236 +0.032334,236 +0.031628,236 +0.031247,236 +0.031339,236 +0.031525,236 +0.032272,236 +0.034320,236 +0.035302,236 +0.033631,236 +0.032443,236 +0.031868,236 +0.036478,236 +0.032029,236 +0.031947,236 +0.030840,236 +0.030834,236 +0.032290,238 +0.031663,238 +0.031577,238 +0.033485,238 +0.033872,238 +0.035361,238 +0.035761,238 +0.032871,238 +0.032131,238 +0.032473,238 +0.031940,238 +0.031745,238 +0.032728,238 +0.032135,238 +0.031720,238 +0.032094,238 +0.033397,238 +0.032657,238 +0.034607,238 +0.034474,238 +0.034204,238 +0.038265,238 +0.033422,238 +0.032119,238 +0.032749,238 +0.032330,238 +0.033634,238 +0.034926,238 +0.036489,238 +0.034506,238 +0.033690,238 +0.032542,238 +0.032052,238 +0.032223,238 +0.033186,238 +0.034131,238 +0.034831,238 +0.034710,238 +0.033838,238 +0.032466,238 +0.032274,238 +0.032050,238 +0.031949,238 +0.032542,238 +0.031693,238 +0.031649,238 +0.032263,238 +0.031716,238 +0.031614,238 +0.032194,238 +0.033197,238 +0.035426,238 +0.035452,238 +0.033799,238 +0.034757,238 +0.033376,238 +0.032357,238 +0.032370,238 +0.033924,238 +0.031932,238 +0.031730,238 +0.033355,238 +0.031602,238 +0.032070,238 +0.033182,238 +0.031728,238 +0.031650,238 +0.033281,238 +0.031678,238 +0.031882,238 +0.034564,238 +0.031760,238 +0.031552,238 +0.033319,238 +0.031600,238 +0.031533,238 +0.032823,238 +0.032028,238 +0.031525,238 +0.031993,238 +0.032756,238 +0.031828,238 +0.031746,238 +0.033238,238 +0.031641,238 +0.031616,238 +0.033137,238 +0.031554,238 +0.031585,238 +0.033085,238 +0.031562,238 +0.031473,238 +0.033401,238 +0.031639,238 +0.031512,238 +0.033092,238 +0.031949,238 +0.031735,238 +0.033181,238 +0.031755,238 +0.032343,240 +0.033862,240 +0.034092,240 +0.032217,240 +0.033336,240 +0.032581,240 +0.032189,240 +0.032208,240 +0.033655,240 +0.032166,240 +0.032460,240 +0.033617,240 +0.032209,240 +0.032333,240 +0.033738,240 +0.032283,240 +0.032250,240 +0.033561,240 +0.033114,240 +0.034166,240 +0.035387,240 +0.034878,240 +0.034778,240 +0.035309,240 +0.032956,240 +0.032670,240 +0.034152,240 +0.032453,240 +0.032523,240 +0.033747,240 +0.032219,240 +0.032256,240 +0.034852,240 +0.032188,240 +0.032216,240 +0.033476,240 +0.032083,240 +0.033007,240 +0.034557,240 +0.032568,240 +0.032249,240 +0.033585,240 +0.032223,240 +0.032403,240 +0.033472,240 +0.032224,240 +0.032070,240 +0.032631,240 +0.032187,240 +0.032076,240 +0.032691,240 +0.032156,240 +0.032070,240 +0.032641,240 +0.032126,240 +0.032065,240 +0.032322,240 +0.032443,240 +0.032428,240 +0.032233,240 +0.032845,240 +0.032217,240 +0.032185,240 +0.032981,240 +0.032174,240 +0.032270,240 +0.032766,240 +0.032613,240 +0.032274,240 +0.032744,240 +0.032155,240 +0.032178,240 +0.032682,240 +0.032216,240 +0.032185,240 +0.032755,240 +0.032373,240 +0.032354,240 +0.032655,240 +0.032702,240 +0.032727,240 +0.033254,240 +0.032606,240 +0.032792,240 +0.033288,240 +0.032707,240 +0.032698,240 +0.032970,240 +0.033131,240 +0.032702,240 +0.032809,240 +0.032904,240 +0.032723,240 +0.032811,240 +0.033252,240 +0.032700,240 +0.032779,240 +0.033331,240 +0.032580,240 +0.032634,240 +0.034677,242 +0.034333,242 +0.035353,242 +0.037132,242 +0.035416,242 +0.035410,242 +0.034834,242 +0.033790,242 +0.034383,242 +0.033788,242 +0.033457,242 +0.034437,242 +0.035468,242 +0.036031,242 +0.038102,242 +0.036129,242 +0.036671,242 +0.038472,242 +0.034601,242 +0.034189,242 +0.036864,242 +0.036533,242 +0.036482,242 +0.037213,242 +0.036504,242 +0.038268,242 +0.036324,242 +0.038244,242 +0.035677,242 +0.035634,242 +0.034792,242 +0.036135,242 +0.036817,242 +0.037817,242 +0.037462,242 +0.036281,242 +0.036753,242 +0.036863,242 +0.035234,242 +0.034721,242 +0.034226,242 +0.034461,242 +0.035540,242 +0.036877,242 +0.036143,242 +0.036095,242 +0.035628,242 +0.034672,242 +0.034271,242 +0.034081,242 +0.034506,242 +0.035000,242 +0.035985,242 +0.035727,242 +0.036704,242 +0.037648,242 +0.035403,242 +0.034006,242 +0.033905,242 +0.034223,242 +0.036224,242 +0.036299,242 +0.038138,242 +0.036845,242 +0.036640,242 +0.036335,242 +0.036843,242 +0.034545,242 +0.033487,242 +0.036115,242 +0.036344,242 +0.036293,242 +0.035307,242 +0.038131,242 +0.045884,242 +0.042915,242 +0.035826,242 +0.036449,242 +0.035700,242 +0.036295,242 +0.039672,242 +0.035614,242 +0.035382,242 +0.034891,242 +0.033864,242 +0.034920,242 +0.035236,242 +0.036033,242 +0.037853,242 +0.036326,242 +0.036606,242 +0.035340,242 +0.038935,242 +0.033753,242 +0.033520,242 +0.038138,242 +0.035472,242 +0.035660,242 +0.035369,242 +0.034935,242 +0.035351,244 +0.035871,244 +0.035230,244 +0.035925,244 +0.038724,244 +0.040129,244 +0.039379,244 +0.038537,244 +0.040497,244 +0.036633,244 +0.035343,244 +0.038747,244 +0.038757,244 +0.045130,244 +0.036858,244 +0.041927,244 +0.039854,244 +0.037641,244 +0.038082,244 +0.043394,244 +0.039307,244 +0.038785,244 +0.037869,244 +0.037780,244 +0.035217,244 +0.034456,244 +0.036203,244 +0.037800,244 +0.040150,244 +0.050008,244 +0.049812,244 +0.041325,244 +0.045832,244 +0.052610,244 +0.052008,244 +0.042045,244 +0.067749,244 +0.072703,244 +0.072166,244 +0.046886,244 +0.038491,244 +0.039296,244 +0.037777,244 +0.049037,244 +0.036943,244 +0.036475,244 +0.036480,244 +0.036279,244 +0.036979,244 +0.035601,244 +0.037431,244 +0.035981,244 +0.035024,244 +0.035396,244 +0.035535,244 +0.035078,244 +0.035980,244 +0.035874,244 +0.035106,244 +0.034888,244 +0.034206,244 +0.034227,244 +0.034895,244 +0.038662,244 +0.034279,244 +0.039300,244 +0.035010,244 +0.034118,244 +0.034979,244 +0.034239,244 +0.034100,244 +0.047447,244 +0.034204,244 +0.034705,244 +0.034445,244 +0.034354,244 +0.034837,244 +0.034082,244 +0.034278,244 +0.034973,244 +0.034284,244 +0.034085,244 +0.034760,244 +0.034259,244 +0.034188,244 +0.034593,244 +0.034133,244 +0.034105,244 +0.034614,244 +0.034142,244 +0.034141,244 +0.034646,244 +0.034292,244 +0.034239,244 +0.034943,244 +0.034119,244 +0.034072,244 +0.034719,244 +0.034357,244 +0.034145,244 +0.035788,246 +0.035212,246 +0.035194,246 +0.035476,246 +0.035298,246 +0.036709,246 +0.035462,246 +0.035223,246 +0.035805,246 +0.035209,246 +0.035165,246 +0.035768,246 +0.035274,246 +0.035219,246 +0.035662,246 +0.035250,246 +0.035914,246 +0.036826,246 +0.038206,246 +0.044112,246 +0.041421,246 +0.043092,246 +0.042983,246 +0.036796,246 +0.039207,246 +0.038178,246 +0.037697,246 +0.039172,246 +0.038369,246 +0.038217,246 +0.037788,246 +0.039724,246 +0.043731,246 +0.039567,246 +0.039280,246 +0.036046,246 +0.035558,246 +0.037500,246 +0.037027,246 +0.037366,246 +0.038814,246 +0.037329,246 +0.036223,246 +0.036504,246 +0.035596,246 +0.036479,246 +0.037131,246 +0.035821,246 +0.036483,246 +0.035860,246 +0.035607,246 +0.036814,246 +0.035801,246 +0.035939,246 +0.036605,246 +0.036062,246 +0.036307,246 +0.035925,246 +0.036517,246 +0.037065,246 +0.036557,246 +0.035529,246 +0.036068,246 +0.036164,246 +0.035511,246 +0.036099,246 +0.035529,246 +0.035457,246 +0.036358,246 +0.035706,246 +0.035986,246 +0.037572,246 +0.035684,246 +0.036861,246 +0.035794,246 +0.035796,246 +0.036792,246 +0.035434,246 +0.035464,246 +0.036024,246 +0.035524,246 +0.035594,246 +0.036032,246 +0.035576,246 +0.036133,246 +0.035656,246 +0.035641,246 +0.036242,246 +0.035668,246 +0.035511,246 +0.036249,246 +0.035679,246 +0.035835,246 +0.036350,246 +0.035769,246 +0.035779,246 +0.036081,246 +0.035742,246 +0.036305,246 +0.035666,246 +0.036538,248 +0.036950,248 +0.036891,248 +0.037282,248 +0.037122,248 +0.035963,248 +0.035966,248 +0.036533,248 +0.035865,248 +0.036491,248 +0.036088,248 +0.035918,248 +0.036324,248 +0.036204,248 +0.036010,248 +0.036408,248 +0.036022,248 +0.035875,248 +0.036484,248 +0.035847,248 +0.035988,248 +0.036638,248 +0.035939,248 +0.036479,248 +0.036101,248 +0.035841,248 +0.037387,248 +0.035967,248 +0.036096,248 +0.036605,248 +0.037319,248 +0.036080,248 +0.036739,248 +0.035905,248 +0.036373,248 +0.036001,248 +0.035857,248 +0.036426,248 +0.036060,248 +0.036116,248 +0.036435,248 +0.036006,248 +0.035934,248 +0.036601,248 +0.036661,248 +0.038456,248 +0.037034,248 +0.036383,248 +0.037245,248 +0.036645,248 +0.036301,248 +0.036790,248 +0.036420,248 +0.036386,248 +0.039304,248 +0.037737,248 +0.036706,248 +0.037622,248 +0.039952,248 +0.039045,248 +0.039536,248 +0.038979,248 +0.037102,248 +0.040524,248 +0.047871,248 +0.039514,248 +0.038784,248 +0.036877,248 +0.036276,248 +0.036576,248 +0.036445,248 +0.036307,248 +0.038011,248 +0.036560,248 +0.036393,248 +0.039587,248 +0.037070,248 +0.038024,248 +0.036550,248 +0.036464,248 +0.039896,248 +0.040696,248 +0.039671,248 +0.037722,248 +0.037045,248 +0.037030,248 +0.036760,248 +0.036654,248 +0.036918,248 +0.036292,248 +0.036506,248 +0.036907,248 +0.036397,248 +0.036666,248 +0.037172,248 +0.036737,248 +0.037231,248 +0.036764,248 +0.037268,248 +0.037170,248 +0.038086,250 +0.038827,250 +0.038990,250 +0.037656,250 +0.039527,250 +0.037633,250 +0.037549,250 +0.038221,250 +0.037844,250 +0.038290,250 +0.037835,250 +0.037638,250 +0.038288,250 +0.037639,250 +0.037595,250 +0.038418,250 +0.037800,250 +0.038053,250 +0.037847,250 +0.037909,250 +0.038100,250 +0.037897,250 +0.037869,250 +0.038147,250 +0.037684,250 +0.038149,250 +0.038995,250 +0.043489,250 +0.045378,250 +0.039512,250 +0.043945,250 +0.041917,250 +0.046253,250 +0.051930,250 +0.061852,250 +0.060873,250 +0.055203,250 +0.056209,250 +0.049196,250 +0.052504,250 +0.054557,250 +0.049361,250 +0.055008,250 +0.048738,250 +0.048519,250 +0.040005,250 +0.052799,250 +0.053327,250 +0.043411,250 +0.044696,250 +0.042284,250 +0.040053,250 +0.043783,250 +0.040671,250 +0.043014,250 +0.041375,250 +0.039464,250 +0.038793,250 +0.037435,250 +0.037281,250 +0.037981,250 +0.037245,250 +0.037327,250 +0.037564,250 +0.037241,250 +0.037451,250 +0.039258,250 +0.037382,250 +0.037922,250 +0.037268,250 +0.037188,250 +0.037485,250 +0.037387,250 +0.038525,250 +0.038325,250 +0.038383,250 +0.038073,250 +0.040982,250 +0.074718,250 +0.038744,250 +0.038323,250 +0.038145,250 +0.037754,250 +0.039391,250 +0.037818,250 +0.038091,250 +0.038323,250 +0.037743,250 +0.038526,250 +0.037601,250 +0.037652,250 +0.038597,250 +0.037943,250 +0.038059,250 +0.037976,250 +0.037702,250 +0.038592,250 +0.037895,250 +0.037840,250 +0.038815,250 +0.038699,252 +0.039045,252 +0.038515,252 +0.038525,252 +0.039196,252 +0.038629,252 +0.038606,252 +0.039003,252 +0.038791,252 +0.039151,252 +0.038370,252 +0.038741,252 +0.039158,252 +0.038488,252 +0.039305,252 +0.038434,252 +0.038216,252 +0.039576,252 +0.038537,252 +0.038717,252 +0.038729,252 +0.038565,252 +0.039139,252 +0.038482,252 +0.038509,252 +0.039110,252 +0.038557,252 +0.039360,252 +0.038386,252 +0.038276,252 +0.039334,252 +0.038254,252 +0.038748,252 +0.038706,252 +0.038297,252 +0.039110,252 +0.038381,252 +0.038306,252 +0.038858,252 +0.038423,252 +0.039294,252 +0.038163,252 +0.037901,252 +0.038654,252 +0.037990,252 +0.038164,252 +0.038542,252 +0.037878,252 +0.038594,252 +0.038343,252 +0.038125,252 +0.038493,252 +0.037896,252 +0.038614,252 +0.038042,252 +0.037831,252 +0.038678,252 +0.038131,252 +0.038024,252 +0.038536,252 +0.042861,252 +0.038422,252 +0.037953,252 +0.037943,252 +0.038348,252 +0.037991,252 +0.038721,252 +0.038117,252 +0.037917,252 +0.038919,252 +0.037938,252 +0.038027,252 +0.039191,252 +0.037861,252 +0.038955,252 +0.040984,252 +0.038092,252 +0.040819,252 +0.038052,252 +0.039542,252 +0.037981,252 +0.037802,252 +0.039468,252 +0.037887,252 +0.037890,252 +0.038429,252 +0.037804,252 +0.038395,252 +0.038648,252 +0.037949,252 +0.038276,252 +0.037851,252 +0.038169,252 +0.039792,252 +0.042231,252 +0.039571,252 +0.038210,252 +0.038467,252 +0.038717,252 +0.038249,252 +0.039936,254 +0.039465,254 +0.039334,254 +0.040065,254 +0.039383,254 +0.040090,254 +0.039435,254 +0.039177,254 +0.040657,254 +0.039187,254 +0.040312,254 +0.039448,254 +0.039488,254 +0.040645,254 +0.040085,254 +0.041609,254 +0.039331,254 +0.039357,254 +0.041614,254 +0.039211,254 +0.041913,254 +0.039449,254 +0.039495,254 +0.041637,254 +0.039478,254 +0.041623,254 +0.039509,254 +0.039517,254 +0.043351,254 +0.039365,254 +0.041827,254 +0.039644,254 +0.039558,254 +0.041600,254 +0.039541,254 +0.041388,254 +0.039354,254 +0.039592,254 +0.041203,254 +0.039634,254 +0.041391,254 +0.039556,254 +0.039549,254 +0.041227,254 +0.039462,254 +0.041692,254 +0.039581,254 +0.039455,254 +0.041425,254 +0.039442,254 +0.041406,254 +0.039491,254 +0.039306,254 +0.042753,254 +0.039219,254 +0.041637,254 +0.039697,254 +0.039207,254 +0.043401,254 +0.039485,254 +0.041004,254 +0.038971,254 +0.039117,254 +0.041379,254 +0.038966,254 +0.040863,254 +0.038944,254 +0.038962,254 +0.042000,254 +0.039254,254 +0.039711,254 +0.039101,254 +0.038850,254 +0.040741,254 +0.039132,254 +0.039386,254 +0.039018,254 +0.038897,254 +0.039604,254 +0.039720,254 +0.039484,254 +0.039226,254 +0.039947,254 +0.039878,254 +0.039104,254 +0.039400,254 +0.040058,254 +0.039104,254 +0.039540,254 +0.039171,254 +0.039434,254 +0.039560,254 +0.039144,254 +0.039675,254 +0.039228,254 +0.039316,254 +0.039891,254 +0.038911,254 +0.039681,254 +0.039048,254 +0.045297,256 +0.045849,256 +0.045395,256 +0.046163,256 +0.045344,256 +0.046896,256 +0.045613,256 +0.048069,256 +0.045930,256 +0.046376,256 +0.045710,256 +0.046088,256 +0.047383,256 +0.045935,256 +0.047501,256 +0.045963,256 +0.047293,256 +0.046090,256 +0.047512,256 +0.045820,256 +0.047847,256 +0.045723,256 +0.047504,256 +0.045714,256 +0.046280,256 +0.048077,256 +0.045847,256 +0.047505,256 +0.045955,256 +0.047295,256 +0.045545,256 +0.047311,256 +0.045926,256 +0.047432,256 +0.045836,256 +0.047683,256 +0.045752,256 +0.047709,256 +0.046274,256 +0.046592,256 +0.047855,256 +0.050953,256 +0.047916,256 +0.045931,256 +0.047817,256 +0.046053,256 +0.049004,256 +0.046315,256 +0.048031,256 +0.046460,256 +0.048593,256 +0.046224,256 +0.047719,256 +0.045832,256 +0.047828,256 +0.046105,256 +0.045767,256 +0.047757,256 +0.045915,256 +0.048175,256 +0.046601,256 +0.047080,256 +0.045218,256 +0.046985,256 +0.045308,256 +0.046867,256 +0.045136,256 +0.047985,256 +0.045647,256 +0.045707,256 +0.046499,256 +0.045497,256 +0.047160,256 +0.045219,256 +0.047095,256 +0.045170,256 +0.046713,256 +0.045684,256 +0.046960,256 +0.045355,256 +0.046547,256 +0.045593,256 +0.045185,256 +0.046832,256 +0.045076,256 +0.047068,256 +0.045091,256 +0.046798,256 +0.045298,256 +0.048013,256 +0.045422,256 +0.046954,256 +0.045552,256 +0.046425,256 +0.046089,256 +0.045377,256 +0.045881,256 +0.045229,256 +0.045887,256 +0.045230,256 +0.042081,258 +0.042614,258 +0.041833,258 +0.042086,258 +0.041492,258 +0.043070,258 +0.042303,258 +0.042069,258 +0.042106,258 +0.041970,258 +0.042518,258 +0.041982,258 +0.042699,258 +0.041835,258 +0.042066,258 +0.042568,258 +0.042002,258 +0.042405,258 +0.042074,258 +0.042611,258 +0.042106,258 +0.041835,258 +0.042608,258 +0.041898,258 +0.042480,258 +0.042001,258 +0.041909,258 +0.042463,258 +0.045149,258 +0.043737,258 +0.042288,258 +0.042411,258 +0.041625,258 +0.042247,258 +0.042165,258 +0.041585,258 +0.042754,258 +0.041842,258 +0.043590,258 +0.041990,258 +0.043031,258 +0.044013,258 +0.041785,258 +0.043605,258 +0.041802,258 +0.043916,258 +0.041727,258 +0.041861,258 +0.043481,258 +0.042282,258 +0.043696,258 +0.042073,258 +0.043473,258 +0.041695,258 +0.041836,258 +0.043509,258 +0.041741,258 +0.043380,258 +0.042463,258 +0.041709,258 +0.042632,258 +0.042106,258 +0.042620,258 +0.042544,258 +0.045255,258 +0.043871,258 +0.041508,258 +0.041967,258 +0.041501,258 +0.041899,258 +0.041971,258 +0.041960,258 +0.041676,258 +0.041295,258 +0.042285,258 +0.041558,258 +0.042110,258 +0.041293,258 +0.041305,258 +0.042215,258 +0.041494,258 +0.041830,258 +0.041343,258 +0.041394,258 +0.042209,258 +0.041295,258 +0.042063,258 +0.043349,258 +0.045494,258 +0.043548,258 +0.041453,258 +0.046725,258 +0.041732,258 +0.046617,258 +0.041177,258 +0.046633,258 +0.041518,258 +0.045840,258 +0.042901,258 +0.041345,258 +0.048255,260 +0.042324,260 +0.047944,260 +0.042678,260 +0.047935,260 +0.042694,260 +0.044666,260 +0.046949,260 +0.042397,260 +0.048135,260 +0.042603,260 +0.047941,260 +0.042574,260 +0.048251,260 +0.042447,260 +0.047803,260 +0.042785,260 +0.042291,260 +0.048307,260 +0.042330,260 +0.048392,260 +0.042397,260 +0.048226,260 +0.042667,260 +0.047873,260 +0.042525,260 +0.042523,260 +0.048155,260 +0.042379,260 +0.049098,260 +0.042286,260 +0.048006,260 +0.042583,260 +0.047957,260 +0.042498,260 +0.043690,260 +0.046701,260 +0.042336,260 +0.048451,260 +0.042400,260 +0.048644,260 +0.042495,260 +0.048564,260 +0.042649,260 +0.045546,260 +0.045037,260 +0.042463,260 +0.048389,260 +0.042364,260 +0.047973,260 +0.042311,260 +0.048661,260 +0.042668,260 +0.047775,260 +0.043000,260 +0.042421,260 +0.049528,260 +0.042978,260 +0.048586,260 +0.042669,260 +0.048119,260 +0.042438,260 +0.048009,260 +0.042556,260 +0.043498,260 +0.047218,260 +0.042378,260 +0.048384,260 +0.042388,260 +0.048305,260 +0.042455,260 +0.048446,260 +0.042351,260 +0.044113,260 +0.047139,260 +0.042322,260 +0.048408,260 +0.042434,260 +0.048234,260 +0.042494,260 +0.048293,260 +0.042480,260 +0.047994,260 +0.042675,260 +0.042313,260 +0.048334,260 +0.042412,260 +0.048358,260 +0.042306,260 +0.048182,260 +0.042543,260 +0.048056,260 +0.042424,260 +0.042349,260 +0.048096,260 +0.042478,260 +0.049024,260 +0.042525,260 +0.048152,260 +0.042303,260 +0.051544,262 +0.045612,262 +0.050535,262 +0.045288,262 +0.048709,262 +0.047252,262 +0.045144,262 +0.051457,262 +0.045062,262 +0.051046,262 +0.045063,262 +0.050513,262 +0.045180,262 +0.051306,262 +0.045181,262 +0.050392,262 +0.045029,262 +0.051435,262 +0.045635,262 +0.050680,262 +0.045062,262 +0.050670,262 +0.045119,262 +0.050427,262 +0.045001,262 +0.046788,262 +0.049032,262 +0.045134,262 +0.050543,262 +0.045412,262 +0.051262,262 +0.045004,262 +0.050438,262 +0.045083,262 +0.051226,262 +0.045002,262 +0.050308,262 +0.045029,262 +0.052155,262 +0.045088,262 +0.050504,262 +0.045078,262 +0.050475,262 +0.045118,262 +0.050361,262 +0.046407,262 +0.045584,262 +0.050035,262 +0.045313,262 +0.051202,262 +0.045060,262 +0.051355,262 +0.045182,262 +0.051282,262 +0.049080,262 +0.046642,262 +0.045015,262 +0.045746,262 +0.045166,262 +0.045918,262 +0.045070,262 +0.045495,262 +0.045338,262 +0.045044,262 +0.045700,262 +0.045056,262 +0.045916,262 +0.045165,262 +0.045669,262 +0.045212,262 +0.045766,262 +0.045216,262 +0.045616,262 +0.045724,262 +0.045022,262 +0.045808,262 +0.045308,262 +0.047476,262 +0.045366,262 +0.045937,262 +0.045114,262 +0.045810,262 +0.045430,262 +0.045258,262 +0.045845,262 +0.045254,262 +0.045789,262 +0.045173,262 +0.045872,262 +0.045020,262 +0.045713,262 +0.045355,262 +0.045629,262 +0.045504,262 +0.045357,262 +0.045746,262 +0.045122,262 +0.045805,262 +0.045116,262 +0.045932,262 +0.045572,264 +0.045377,264 +0.044911,264 +0.045498,264 +0.045480,264 +0.045013,264 +0.045361,264 +0.044835,264 +0.045345,264 +0.044850,264 +0.045363,264 +0.044819,264 +0.045119,264 +0.045038,264 +0.044929,264 +0.045277,264 +0.045018,264 +0.045337,264 +0.044766,264 +0.045071,264 +0.045004,264 +0.045191,264 +0.044777,264 +0.044833,264 +0.045091,264 +0.044788,264 +0.045319,264 +0.044897,264 +0.045363,264 +0.045009,264 +0.045403,264 +0.044783,264 +0.044908,264 +0.045218,264 +0.044848,264 +0.045603,264 +0.044800,264 +0.045850,264 +0.047181,264 +0.045717,264 +0.044871,264 +0.045471,264 +0.044947,264 +0.044940,264 +0.045371,264 +0.044852,264 +0.045318,264 +0.044823,264 +0.045581,264 +0.044927,264 +0.045449,264 +0.045173,264 +0.044880,264 +0.045276,264 +0.045357,264 +0.045468,264 +0.044777,264 +0.045276,264 +0.044682,264 +0.047804,264 +0.046794,264 +0.046725,264 +0.044823,264 +0.044911,264 +0.049118,264 +0.045572,264 +0.045130,264 +0.045017,264 +0.045110,264 +0.044772,264 +0.045407,264 +0.045054,264 +0.045183,264 +0.045040,264 +0.044867,264 +0.045725,264 +0.044958,264 +0.045318,264 +0.044947,264 +0.045226,264 +0.044847,264 +0.045403,264 +0.045587,264 +0.045449,264 +0.045266,264 +0.044929,264 +0.045318,264 +0.044923,264 +0.045372,264 +0.045250,264 +0.045429,264 +0.044795,264 +0.044988,264 +0.045278,264 +0.045132,264 +0.045579,264 +0.044765,264 +0.045500,264 +0.044827,264 +0.045411,264 +0.048093,266 +0.048554,266 +0.047857,266 +0.048832,266 +0.048130,266 +0.048065,266 +0.048130,266 +0.047908,266 +0.048489,266 +0.048060,266 +0.048360,266 +0.047964,266 +0.048440,266 +0.047902,266 +0.048555,266 +0.048409,266 +0.048603,266 +0.047875,266 +0.048451,266 +0.047899,266 +0.048415,266 +0.047878,266 +0.048513,266 +0.048003,266 +0.048460,266 +0.048109,266 +0.048418,266 +0.047827,266 +0.048355,266 +0.048271,266 +0.048101,266 +0.048250,266 +0.047861,266 +0.048418,266 +0.047947,266 +0.048736,266 +0.047898,266 +0.048680,266 +0.047957,266 +0.048521,266 +0.048046,266 +0.048546,266 +0.048040,266 +0.049049,266 +0.047991,266 +0.048726,266 +0.048007,266 +0.048397,266 +0.047939,266 +0.048432,266 +0.047919,266 +0.048511,266 +0.048066,266 +0.048158,266 +0.048293,266 +0.048010,266 +0.048770,266 +0.048032,266 +0.048726,266 +0.047981,266 +0.048417,266 +0.048049,266 +0.048393,266 +0.048031,266 +0.048320,266 +0.048281,266 +0.049239,266 +0.047884,266 +0.048425,266 +0.047931,266 +0.048400,266 +0.047844,266 +0.048448,266 +0.048015,266 +0.048546,266 +0.048001,266 +0.048574,266 +0.048322,266 +0.048336,266 +0.048125,266 +0.048212,266 +0.048421,266 +0.048035,266 +0.048492,266 +0.047906,266 +0.048542,266 +0.048039,266 +0.048647,266 +0.047852,266 +0.048421,266 +0.047796,266 +0.048576,266 +0.047807,266 +0.048873,266 +0.047809,266 +0.048401,266 +0.047913,266 +0.048670,266 +0.048133,266 +0.048864,266 +0.048275,268 +0.048696,268 +0.048144,268 +0.048465,268 +0.048125,268 +0.048255,268 +0.048431,268 +0.048170,268 +0.048705,268 +0.048052,268 +0.048540,268 +0.048015,268 +0.048595,268 +0.048046,268 +0.048586,268 +0.048002,268 +0.049067,268 +0.048110,268 +0.048884,268 +0.048117,268 +0.048584,268 +0.048039,268 +0.048778,268 +0.048048,268 +0.048461,268 +0.048128,268 +0.048589,268 +0.048218,268 +0.048745,268 +0.048078,268 +0.048564,268 +0.048037,268 +0.048153,268 +0.048413,268 +0.047985,268 +0.048706,268 +0.048094,268 +0.048498,268 +0.048325,268 +0.048784,268 +0.048145,268 +0.048614,268 +0.048069,268 +0.048603,268 +0.048081,268 +0.048666,268 +0.048397,268 +0.048522,268 +0.048516,268 +0.048846,268 +0.048086,268 +0.048523,268 +0.048044,268 +0.048577,268 +0.048127,268 +0.048515,268 +0.048060,268 +0.048525,268 +0.048301,268 +0.048229,268 +0.048670,268 +0.048532,268 +0.048557,268 +0.048008,268 +0.048688,268 +0.048004,268 +0.048554,268 +0.048121,268 +0.048588,268 +0.048915,268 +0.048832,268 +0.048046,268 +0.048471,268 +0.048041,268 +0.048648,268 +0.048166,268 +0.048498,268 +0.048032,268 +0.048534,268 +0.048124,268 +0.048592,268 +0.048203,268 +0.048449,268 +0.048046,268 +0.048568,268 +0.048168,268 +0.048328,268 +0.048358,268 +0.048142,268 +0.048514,268 +0.048489,268 +0.048674,268 +0.048018,268 +0.048568,268 +0.048246,268 +0.048617,268 +0.048178,268 +0.048707,268 +0.048113,268 +0.048557,268 +0.051342,270 +0.051541,270 +0.051119,270 +0.051441,270 +0.051187,270 +0.051469,270 +0.050958,270 +0.051311,270 +0.051083,270 +0.051505,270 +0.051255,270 +0.051646,270 +0.050894,270 +0.051497,270 +0.050975,270 +0.051511,270 +0.050891,270 +0.051461,270 +0.051058,270 +0.051288,270 +0.051191,270 +0.051547,270 +0.051195,270 +0.051279,270 +0.051556,270 +0.051011,270 +0.051468,270 +0.050985,270 +0.051403,270 +0.051001,270 +0.051945,270 +0.050997,270 +0.051442,270 +0.051165,270 +0.051447,270 +0.051047,270 +0.051476,270 +0.051056,270 +0.051486,270 +0.051006,270 +0.051561,270 +0.051181,270 +0.051743,270 +0.051012,270 +0.051433,270 +0.050948,270 +0.051489,270 +0.051084,270 +0.051561,270 +0.051276,270 +0.051648,270 +0.050909,270 +0.051372,270 +0.051003,270 +0.051535,270 +0.050986,270 +0.051464,270 +0.050818,270 +0.051522,270 +0.050939,270 +0.051597,270 +0.050956,270 +0.051504,270 +0.050854,270 +0.051526,270 +0.050830,270 +0.051485,270 +0.050898,270 +0.051404,270 +0.056755,270 +0.052415,270 +0.051187,270 +0.051174,270 +0.051398,270 +0.050898,270 +0.051421,270 +0.051019,270 +0.051525,270 +0.050984,270 +0.051634,270 +0.051033,270 +0.051498,270 +0.050999,270 +0.051528,270 +0.050991,270 +0.051460,270 +0.050919,270 +0.051540,270 +0.051221,270 +0.051615,270 +0.050929,270 +0.051637,270 +0.051243,270 +0.051707,270 +0.051443,270 +0.051519,270 +0.050925,270 +0.051655,270 +0.051174,270 +0.051755,270 +0.049435,272 +0.049712,272 +0.049166,272 +0.049631,272 +0.049171,272 +0.049689,272 +0.049117,272 +0.049701,272 +0.049306,272 +0.049876,272 +0.049086,272 +0.049662,272 +0.049139,272 +0.049734,272 +0.049166,272 +0.049868,272 +0.049411,272 +0.049673,272 +0.049128,272 +0.049832,272 +0.049201,272 +0.049724,272 +0.051215,272 +0.050721,272 +0.049178,272 +0.050670,272 +0.049205,272 +0.050658,272 +0.049243,272 +0.050589,272 +0.049139,272 +0.050582,272 +0.049158,272 +0.050957,272 +0.049261,272 +0.050503,272 +0.049055,272 +0.050749,272 +0.049715,272 +0.051716,272 +0.049319,272 +0.050582,272 +0.049194,272 +0.050733,272 +0.049297,272 +0.051079,272 +0.049202,272 +0.050302,272 +0.049431,272 +0.050735,272 +0.049148,272 +0.050486,272 +0.049299,272 +0.050421,272 +0.049318,272 +0.050266,272 +0.049265,272 +0.050209,272 +0.049803,272 +0.051081,272 +0.049932,272 +0.050271,272 +0.049587,272 +0.050158,272 +0.049592,272 +0.050020,272 +0.049635,272 +0.050008,272 +0.050422,272 +0.049948,272 +0.049773,272 +0.049773,272 +0.050027,272 +0.049700,272 +0.050082,272 +0.049474,272 +0.050181,272 +0.049382,272 +0.050677,272 +0.049202,272 +0.052091,272 +0.049543,272 +0.050200,272 +0.049158,272 +0.050576,272 +0.049119,272 +0.050529,272 +0.049232,272 +0.050573,272 +0.049112,272 +0.050611,272 +0.049247,272 +0.050781,272 +0.049196,272 +0.050974,272 +0.049342,272 +0.050484,272 +0.049243,272 +0.050431,272 +0.049244,272 +0.055936,274 +0.053476,274 +0.053482,274 +0.054314,274 +0.052765,274 +0.054135,274 +0.052769,274 +0.054386,274 +0.053011,274 +0.054183,274 +0.052823,274 +0.054154,274 +0.052873,274 +0.054188,274 +0.052746,274 +0.054069,274 +0.052887,274 +0.054350,274 +0.054909,274 +0.053474,274 +0.053989,274 +0.052878,274 +0.054203,274 +0.052980,274 +0.054277,274 +0.052768,274 +0.054341,274 +0.052917,274 +0.054331,274 +0.052932,274 +0.054125,274 +0.052855,274 +0.054084,274 +0.053899,274 +0.053103,274 +0.054212,274 +0.052839,274 +0.055637,274 +0.053230,274 +0.054193,274 +0.052798,274 +0.054121,274 +0.052883,274 +0.054491,274 +0.053176,274 +0.054155,274 +0.052861,274 +0.054216,274 +0.053711,274 +0.053177,274 +0.054143,274 +0.052794,274 +0.054244,274 +0.052822,274 +0.054396,274 +0.052789,274 +0.055424,274 +0.052788,274 +0.054105,274 +0.052730,274 +0.054005,274 +0.052820,274 +0.054166,274 +0.053538,274 +0.053382,274 +0.054193,274 +0.053835,274 +0.055035,274 +0.055093,274 +0.055100,274 +0.054008,274 +0.055025,274 +0.053819,274 +0.054744,274 +0.053556,274 +0.056024,274 +0.054414,274 +0.053970,274 +0.055162,274 +0.053304,274 +0.055780,274 +0.053383,274 +0.055202,274 +0.053354,274 +0.054638,274 +0.053250,274 +0.054771,274 +0.053860,274 +0.054538,274 +0.054270,274 +0.053734,274 +0.054906,274 +0.053493,274 +0.055184,274 +0.053665,274 +0.053948,274 +0.053557,274 +0.054322,274 +0.053787,274 +0.053672,274 +0.054128,276 +0.054896,276 +0.054354,276 +0.054290,276 +0.054894,276 +0.053618,276 +0.054930,276 +0.053730,276 +0.054892,276 +0.054017,276 +0.056243,276 +0.054117,276 +0.056417,276 +0.054062,276 +0.055307,276 +0.055088,276 +0.054532,276 +0.054670,276 +0.053246,276 +0.054359,276 +0.053118,276 +0.054349,276 +0.053165,276 +0.054354,276 +0.053115,276 +0.054216,276 +0.053150,276 +0.054336,276 +0.054530,276 +0.053243,276 +0.055437,276 +0.053164,276 +0.054328,276 +0.053144,276 +0.054764,276 +0.054260,276 +0.054312,276 +0.056166,276 +0.055131,276 +0.053252,276 +0.053969,276 +0.054267,276 +0.053053,276 +0.054094,276 +0.053045,276 +0.053980,276 +0.053225,276 +0.055082,276 +0.053120,276 +0.053623,276 +0.053141,276 +0.054539,276 +0.053074,276 +0.053560,276 +0.053681,276 +0.053762,276 +0.055634,276 +0.053254,276 +0.053405,276 +0.054822,276 +0.054325,276 +0.053122,276 +0.053438,276 +0.053207,276 +0.053634,276 +0.053511,276 +0.053607,276 +0.053119,276 +0.053694,276 +0.053250,276 +0.053541,276 +0.053725,276 +0.053152,276 +0.053525,276 +0.053539,276 +0.053485,276 +0.053115,276 +0.053708,276 +0.053342,276 +0.053600,276 +0.053844,276 +0.053480,276 +0.053116,276 +0.053744,276 +0.053231,276 +0.053467,276 +0.053083,276 +0.053788,276 +0.053221,276 +0.053674,276 +0.053589,276 +0.053146,276 +0.053575,276 +0.053412,276 +0.053608,276 +0.053061,276 +0.053592,276 +0.053129,276 +0.053909,276 +0.052992,276 +0.056686,278 +0.056121,278 +0.056500,278 +0.056478,278 +0.055945,278 +0.056477,278 +0.055941,278 +0.056564,278 +0.055995,278 +0.056528,278 +0.056414,278 +0.056325,278 +0.056512,278 +0.056066,278 +0.056793,278 +0.056123,278 +0.056582,278 +0.055945,278 +0.056602,278 +0.056426,278 +0.056327,278 +0.056475,278 +0.056034,278 +0.056723,278 +0.056029,278 +0.056717,278 +0.056075,278 +0.056660,278 +0.056743,278 +0.056300,278 +0.056511,278 +0.055932,278 +0.056550,278 +0.056184,278 +0.056580,278 +0.056058,278 +0.056266,278 +0.056487,278 +0.056185,278 +0.056611,278 +0.055784,278 +0.056613,278 +0.056066,278 +0.056499,278 +0.056814,278 +0.055931,278 +0.056476,278 +0.056853,278 +0.056435,278 +0.055918,278 +0.056794,278 +0.057376,278 +0.056570,278 +0.056438,278 +0.055998,278 +0.056864,278 +0.056111,278 +0.056630,278 +0.055871,278 +0.056763,278 +0.056253,278 +0.056417,278 +0.056558,278 +0.055982,278 +0.056670,278 +0.055937,278 +0.056469,278 +0.055934,278 +0.056489,278 +0.056263,278 +0.056659,278 +0.056447,278 +0.056029,278 +0.056709,278 +0.056107,278 +0.056422,278 +0.055829,278 +0.056632,278 +0.056431,278 +0.055938,278 +0.056483,278 +0.055816,278 +0.056627,278 +0.055849,278 +0.056359,278 +0.055843,278 +0.057168,278 +0.056457,278 +0.055904,278 +0.056399,278 +0.055899,278 +0.057277,278 +0.055828,278 +0.056306,278 +0.055929,278 +0.056550,278 +0.056387,278 +0.055821,278 +0.056925,278 +0.056030,278 +0.056039,280 +0.054997,280 +0.056157,280 +0.055203,280 +0.055545,280 +0.055597,280 +0.055629,280 +0.055476,280 +0.055143,280 +0.055797,280 +0.055150,280 +0.055650,280 +0.055104,280 +0.055887,280 +0.055714,280 +0.055130,280 +0.055771,280 +0.055378,280 +0.055863,280 +0.055104,280 +0.055756,280 +0.055104,280 +0.055971,280 +0.055739,280 +0.055151,280 +0.055592,280 +0.055293,280 +0.055854,280 +0.055124,280 +0.055650,280 +0.055182,280 +0.055857,280 +0.055306,280 +0.055486,280 +0.055568,280 +0.055182,280 +0.055911,280 +0.055098,280 +0.055473,280 +0.055237,280 +0.055612,280 +0.055152,280 +0.055658,280 +0.055459,280 +0.055312,280 +0.055762,280 +0.055169,280 +0.055615,280 +0.055152,280 +0.055908,280 +0.055204,280 +0.055705,280 +0.055386,280 +0.055221,280 +0.056019,280 +0.055110,280 +0.055731,280 +0.055292,280 +0.056103,280 +0.055521,280 +0.055667,280 +0.055302,280 +0.055408,280 +0.055828,280 +0.055129,280 +0.055558,280 +0.055119,280 +0.055847,280 +0.055210,280 +0.055756,280 +0.055195,280 +0.055800,280 +0.055859,280 +0.055122,280 +0.055436,280 +0.055093,280 +0.055607,280 +0.055062,280 +0.055480,280 +0.055228,280 +0.055440,280 +0.055857,280 +0.055213,280 +0.055463,280 +0.055038,280 +0.055800,280 +0.055128,280 +0.055669,280 +0.055285,280 +0.055366,280 +0.055615,280 +0.055130,280 +0.055400,280 +0.055457,280 +0.055801,280 +0.056098,280 +0.055713,280 +0.055297,280 +0.055464,280 +0.055897,280 +0.061178,282 +0.060940,282 +0.060385,282 +0.061193,282 +0.060907,282 +0.060585,282 +0.060973,282 +0.061083,282 +0.060710,282 +0.060792,282 +0.060495,282 +0.060994,282 +0.060557,282 +0.060853,282 +0.060833,282 +0.060674,282 +0.061016,282 +0.060525,282 +0.060771,282 +0.060985,282 +0.060689,282 +0.060932,282 +0.060415,282 +0.060865,282 +0.065272,282 +0.060795,282 +0.060861,282 +0.060535,282 +0.060739,282 +0.060891,282 +0.060540,282 +0.060519,282 +0.060961,282 +0.060622,282 +0.060677,282 +0.060447,282 +0.060994,282 +0.060663,282 +0.060750,282 +0.060640,282 +0.060824,282 +0.061117,282 +0.060853,282 +0.060488,282 +0.061053,282 +0.060691,282 +0.060881,282 +0.060800,282 +0.060519,282 +0.060955,282 +0.060484,282 +0.060771,282 +0.061039,282 +0.060620,282 +0.061179,282 +0.060412,282 +0.060860,282 +0.061263,282 +0.060412,282 +0.060798,282 +0.060409,282 +0.061082,282 +0.060783,282 +0.060369,282 +0.060791,282 +0.060680,282 +0.060823,282 +0.060749,282 +0.060454,282 +0.060993,282 +0.060702,282 +0.060723,282 +0.060732,282 +0.060771,282 +0.060674,282 +0.060352,282 +0.060997,282 +0.060970,282 +0.060575,282 +0.060690,282 +0.060320,282 +0.061755,282 +0.060964,282 +0.060513,282 +0.060540,282 +0.060371,282 +0.060994,282 +0.061590,282 +0.060600,282 +0.061419,282 +0.060636,282 +0.060621,282 +0.060998,282 +0.060314,282 +0.060860,282 +0.060558,282 +0.060567,282 +0.060689,282 +0.060647,282 +0.060750,282 +0.058921,284 +0.058936,284 +0.059176,284 +0.058603,284 +0.059371,284 +0.058771,284 +0.060202,284 +0.059112,284 +0.058822,284 +0.059130,284 +0.058993,284 +0.059290,284 +0.059066,284 +0.058856,284 +0.059348,284 +0.059093,284 +0.059185,284 +0.058805,284 +0.059290,284 +0.059479,284 +0.059320,284 +0.059182,284 +0.058853,284 +0.059464,284 +0.059027,284 +0.058661,284 +0.058992,284 +0.058628,284 +0.060052,284 +0.058768,284 +0.058889,284 +0.058936,284 +0.058981,284 +0.059222,284 +0.058769,284 +0.059221,284 +0.059170,284 +0.059063,284 +0.059002,284 +0.058687,284 +0.059421,284 +0.058926,284 +0.058686,284 +0.059023,284 +0.058684,284 +0.059015,284 +0.058624,284 +0.059053,284 +0.059106,284 +0.058753,284 +0.059009,284 +0.058660,284 +0.059045,284 +0.058886,284 +0.059208,284 +0.058953,284 +0.058749,284 +0.059335,284 +0.058585,284 +0.059025,284 +0.059127,284 +0.058718,284 +0.059328,284 +0.058785,284 +0.059074,284 +0.059040,284 +0.059038,284 +0.059060,284 +0.058690,284 +0.059024,284 +0.058809,284 +0.062781,284 +0.062612,284 +0.059017,284 +0.062422,284 +0.061937,284 +0.058787,284 +0.062778,284 +0.058929,284 +0.062076,284 +0.062005,284 +0.058849,284 +0.062248,284 +0.058850,284 +0.061965,284 +0.061794,284 +0.060139,284 +0.063142,284 +0.059049,284 +0.061887,284 +0.061915,284 +0.058789,284 +0.061870,284 +0.058607,284 +0.061869,284 +0.062020,284 +0.058899,284 +0.061880,284 +0.058643,284 +0.062002,284 +0.065981,286 +0.063085,286 +0.065705,286 +0.066395,286 +0.063186,286 +0.065908,286 +0.065949,286 +0.062979,286 +0.065761,286 +0.063785,286 +0.064798,286 +0.064375,286 +0.062746,286 +0.063914,286 +0.063989,286 +0.062908,286 +0.064041,286 +0.063173,286 +0.062956,286 +0.063980,286 +0.063076,286 +0.063271,286 +0.063561,286 +0.062711,286 +0.063212,286 +0.063110,286 +0.063045,286 +0.063386,286 +0.062728,286 +0.063221,286 +0.063484,286 +0.063042,286 +0.063231,286 +0.063095,286 +0.062986,286 +0.063989,286 +0.062867,286 +0.063241,286 +0.063624,286 +0.062800,286 +0.063251,286 +0.063172,286 +0.062871,286 +0.063358,286 +0.062740,286 +0.063326,286 +0.063316,286 +0.062790,286 +0.063419,286 +0.063193,286 +0.062935,286 +0.063784,286 +0.063122,286 +0.064094,286 +0.067483,286 +0.062756,286 +0.063161,286 +0.063158,286 +0.062857,286 +0.063157,286 +0.063145,286 +0.062850,286 +0.063292,286 +0.062744,286 +0.063340,286 +0.063324,286 +0.062920,286 +0.063674,286 +0.063221,286 +0.064689,286 +0.063610,286 +0.062748,286 +0.064264,286 +0.063843,286 +0.062842,286 +0.063239,286 +0.063366,286 +0.063586,286 +0.063319,286 +0.063017,286 +0.063736,286 +0.063332,286 +0.062838,286 +0.063847,286 +0.063231,286 +0.063415,286 +0.063301,286 +0.063123,286 +0.062875,286 +0.063330,286 +0.063156,286 +0.063569,286 +0.063378,286 +0.063101,286 +0.063237,286 +0.063325,286 +0.062859,286 +0.063421,286 +0.062976,286 +0.063373,286 +0.065231,288 +0.065049,288 +0.065202,288 +0.065060,288 +0.064777,288 +0.065043,288 +0.064091,288 +0.063515,288 +0.064231,288 +0.064605,288 +0.063848,288 +0.064219,288 +0.063622,288 +0.063975,288 +0.064850,288 +0.064732,288 +0.065307,288 +0.065324,288 +0.064693,288 +0.065179,288 +0.065310,288 +0.064844,288 +0.065290,288 +0.064943,288 +0.065224,288 +0.065342,288 +0.064823,288 +0.065187,288 +0.063950,288 +0.063716,288 +0.064065,288 +0.064224,288 +0.063697,288 +0.064055,288 +0.063800,288 +0.063614,288 +0.064130,288 +0.063993,288 +0.063986,288 +0.064079,288 +0.063585,288 +0.064072,288 +0.065238,288 +0.065154,288 +0.065189,288 +0.065756,288 +0.064803,288 +0.065795,288 +0.065136,288 +0.064741,288 +0.065112,288 +0.064663,288 +0.065022,288 +0.065250,288 +0.064910,288 +0.065307,288 +0.065144,288 +0.064645,288 +0.065135,288 +0.065097,288 +0.064721,288 +0.065196,288 +0.065120,288 +0.064938,288 +0.065088,288 +0.064598,288 +0.065139,288 +0.065346,288 +0.064673,288 +0.065012,288 +0.065111,288 +0.064899,288 +0.064962,288 +0.065290,288 +0.064877,288 +0.065087,288 +0.065402,288 +0.064656,288 +0.065058,288 +0.064950,288 +0.064708,288 +0.064946,288 +0.064646,288 +0.064967,288 +0.065059,288 +0.064819,288 +0.064989,288 +0.065037,288 +0.064656,288 +0.065418,288 +0.065141,288 +0.065037,288 +0.064033,288 +0.063644,288 +0.063892,288 +0.063866,288 +0.064388,288 +0.065006,288 +0.065188,288 +0.064741,288 +0.066894,290 +0.066439,290 +0.065936,290 +0.066189,290 +0.066283,290 +0.065873,290 +0.066252,290 +0.066334,290 +0.066409,290 +0.066338,290 +0.066291,290 +0.065812,290 +0.066247,290 +0.066345,290 +0.065786,290 +0.066483,290 +0.066503,290 +0.066027,290 +0.065965,290 +0.066054,290 +0.066133,290 +0.066230,290 +0.065766,290 +0.066377,290 +0.066257,290 +0.065813,290 +0.066228,290 +0.066223,290 +0.065864,290 +0.066141,290 +0.066147,290 +0.065878,290 +0.066227,290 +0.066032,290 +0.065745,290 +0.066243,290 +0.066123,290 +0.066314,290 +0.066257,290 +0.066300,290 +0.065877,290 +0.066223,290 +0.066203,290 +0.066044,290 +0.066232,290 +0.066328,290 +0.065944,290 +0.066421,290 +0.066077,290 +0.066266,290 +0.066172,290 +0.066210,290 +0.065911,290 +0.066374,290 +0.065973,290 +0.066060,290 +0.066242,290 +0.065823,290 +0.066221,290 +0.066933,290 +0.065836,290 +0.066934,290 +0.066470,290 +0.065773,290 +0.066684,290 +0.066227,290 +0.065889,290 +0.066280,290 +0.066238,290 +0.065969,290 +0.066354,290 +0.066274,290 +0.065947,290 +0.066260,290 +0.066301,290 +0.065937,290 +0.066530,290 +0.066418,290 +0.066328,290 +0.066159,290 +0.066282,290 +0.065979,290 +0.066425,290 +0.066258,290 +0.066737,290 +0.066388,290 +0.066281,290 +0.065948,290 +0.066293,290 +0.066228,290 +0.066327,290 +0.066376,290 +0.066135,290 +0.066085,290 +0.066672,290 +0.066038,290 +0.066262,290 +0.066243,290 +0.065868,290 +0.067703,290 +0.068319,292 +0.065282,292 +0.066127,292 +0.066207,292 +0.065202,292 +0.065459,292 +0.065341,292 +0.065483,292 +0.065563,292 +0.065269,292 +0.065137,292 +0.065553,292 +0.066180,292 +0.065189,292 +0.065532,292 +0.065671,292 +0.065080,292 +0.065441,292 +0.065277,292 +0.066142,292 +0.065382,292 +0.065143,292 +0.065610,292 +0.065445,292 +0.064946,292 +0.065470,292 +0.065479,292 +0.065502,292 +0.065399,292 +0.065523,292 +0.065342,292 +0.065557,292 +0.065380,292 +0.065116,292 +0.065437,292 +0.065276,292 +0.065088,292 +0.065440,292 +0.065563,292 +0.065113,292 +0.065422,292 +0.067850,292 +0.065228,292 +0.065730,292 +0.065117,292 +0.065829,292 +0.065496,292 +0.065036,292 +0.065513,292 +0.065588,292 +0.065061,292 +0.065361,292 +0.065541,292 +0.065403,292 +0.065816,292 +0.065784,292 +0.065190,292 +0.065547,292 +0.065565,292 +0.065511,292 +0.066175,292 +0.065516,292 +0.065099,292 +0.065469,292 +0.065223,292 +0.065155,292 +0.065435,292 +0.065118,292 +0.065490,292 +0.065777,292 +0.064977,292 +0.065431,292 +0.065489,292 +0.065406,292 +0.065351,292 +0.065495,292 +0.067420,292 +0.065514,292 +0.065273,292 +0.065096,292 +0.065467,292 +0.065280,292 +0.065053,292 +0.065718,292 +0.065420,292 +0.065287,292 +0.065960,292 +0.065394,292 +0.065229,292 +0.066330,292 +0.065249,292 +0.065580,292 +0.065533,292 +0.065008,292 +0.065597,292 +0.065550,292 +0.065213,292 +0.065404,292 +0.065527,292 +0.065221,292 +0.070272,294 +0.069894,294 +0.069447,294 +0.069989,294 +0.070190,294 +0.069640,294 +0.069925,294 +0.069958,294 +0.069810,294 +0.069592,294 +0.070002,294 +0.069833,294 +0.069407,294 +0.070111,294 +0.070008,294 +0.069346,294 +0.069899,294 +0.070334,294 +0.074104,294 +0.069582,294 +0.073152,294 +0.072409,294 +0.069674,294 +0.073156,294 +0.072663,294 +0.072446,294 +0.069788,294 +0.072631,294 +0.073153,294 +0.069503,294 +0.072394,294 +0.072529,294 +0.072809,294 +0.069747,294 +0.073212,294 +0.072429,294 +0.069558,294 +0.072261,294 +0.072765,294 +0.072226,294 +0.069624,294 +0.073477,294 +0.072357,294 +0.069487,294 +0.072482,294 +0.072561,294 +0.072795,294 +0.069543,294 +0.073329,294 +0.072326,294 +0.069506,294 +0.072625,294 +0.072249,294 +0.072306,294 +0.069604,294 +0.072639,294 +0.072928,294 +0.069496,294 +0.072464,294 +0.072455,294 +0.104865,294 +0.123952,294 +0.086093,294 +0.070427,294 +0.070317,294 +0.071085,294 +0.070397,294 +0.070592,294 +0.070531,294 +0.070553,294 +0.070144,294 +0.070019,294 +0.070232,294 +0.070128,294 +0.069989,294 +0.070661,294 +0.070622,294 +0.070228,294 +0.070136,294 +0.070735,294 +0.071010,294 +0.070106,294 +0.072252,294 +0.070903,294 +0.070173,294 +0.071147,294 +0.070767,294 +0.070937,294 +0.070518,294 +0.071030,294 +0.070945,294 +0.070058,294 +0.070628,294 +0.070684,294 +0.070469,294 +0.070892,294 +0.070566,294 +0.070380,294 +0.069266,294 +0.070158,294 +0.066924,296 +0.065989,296 +0.066792,296 +0.071059,296 +0.066570,296 +0.066726,296 +0.066726,296 +0.065890,296 +0.066737,296 +0.066712,296 +0.065697,296 +0.067572,296 +0.066782,296 +0.065651,296 +0.066919,296 +0.066653,296 +0.065605,296 +0.066935,296 +0.069359,296 +0.065816,296 +0.066748,296 +0.069562,296 +0.065701,296 +0.066538,296 +0.066545,296 +0.065713,296 +0.066771,296 +0.066588,296 +0.065797,296 +0.066558,296 +0.066710,296 +0.065667,296 +0.066725,296 +0.067926,296 +0.066058,296 +0.067089,296 +0.066650,296 +0.066134,296 +0.067048,296 +0.066233,296 +0.066122,296 +0.066731,296 +0.065608,296 +0.066676,296 +0.066550,296 +0.065618,296 +0.066656,296 +0.066657,296 +0.065731,296 +0.067849,296 +0.066753,296 +0.065648,296 +0.066515,296 +0.066662,296 +0.065703,296 +0.066702,296 +0.066753,296 +0.065804,296 +0.066577,296 +0.066754,296 +0.065707,296 +0.066704,296 +0.066666,296 +0.065873,296 +0.068169,296 +0.066783,296 +0.065783,296 +0.066619,296 +0.066828,296 +0.065808,296 +0.066684,296 +0.066990,296 +0.065875,296 +0.066807,296 +0.065919,296 +0.065617,296 +0.065887,296 +0.065956,296 +0.066141,296 +0.065855,296 +0.065801,296 +0.065621,296 +0.066005,296 +0.067027,296 +0.065780,296 +0.065900,296 +0.065676,296 +0.065972,296 +0.066076,296 +0.065811,296 +0.065789,296 +0.078423,296 +0.070391,296 +0.088537,296 +0.083934,296 +0.074624,296 +0.074875,296 +0.074878,296 +0.072253,296 +0.072570,296 +0.081909,298 +0.079450,298 +0.073185,298 +0.072747,298 +0.072461,298 +0.072164,298 +0.072826,298 +0.072595,298 +0.072652,298 +0.072581,298 +0.072825,298 +0.078690,298 +0.080412,298 +0.079329,298 +0.080308,298 +0.079911,298 +0.077494,298 +0.073448,298 +0.077835,298 +0.073131,298 +0.081008,298 +0.079288,298 +0.080261,298 +0.076548,298 +0.075494,298 +0.079484,298 +0.082832,298 +0.078936,298 +0.079092,298 +0.078865,298 +0.075786,298 +0.079212,298 +0.077011,298 +0.074678,298 +0.074451,298 +0.072372,298 +0.073247,298 +0.072424,298 +0.074625,298 +0.074462,298 +0.076295,298 +0.073360,298 +0.072790,298 +0.073887,298 +0.074409,298 +0.073295,298 +0.072906,298 +0.073051,298 +0.072361,298 +0.072727,298 +0.072425,298 +0.073496,298 +0.072491,298 +0.072717,298 +0.072248,298 +0.073342,298 +0.072399,298 +0.072332,298 +0.072550,298 +0.072592,298 +0.072652,298 +0.073236,298 +0.076327,298 +0.074498,298 +0.073960,298 +0.072665,298 +0.072811,298 +0.073851,298 +0.078967,298 +0.077097,298 +0.076110,298 +0.075197,298 +0.075843,298 +0.075148,298 +0.076042,298 +0.074501,298 +0.075122,298 +0.073719,298 +0.074472,298 +0.074512,298 +0.073973,298 +0.074826,298 +0.073913,298 +0.073266,298 +0.072438,298 +0.073866,298 +0.073519,298 +0.074649,298 +0.072506,298 +0.073378,298 +0.073498,298 +0.072656,298 +0.073167,298 +0.074034,298 +0.073469,298 +0.072580,298 +0.073423,298 +0.073679,298 +0.078404,298 +0.079920,298 diff --git a/buch/papers/multiplikation/code/meas/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt new file mode 100644 index 0000000..3a4d88b --- /dev/null +++ b/buch/papers/multiplikation/code/meas/winograd.txt @@ -0,0 +1,11 @@ +0.000000,2 +0.000001,4 +0.000002,8 +0.000011,16 +0.000091,32 +0.000663,64 +0.005182,128 +0.046038,256 +0.533429,512 +4.257458,1024 +130.378038,2048 diff --git a/buch/papers/multiplikation/code/meas_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf new file mode 100644 index 0000000..fd0a108 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/code/meas_1024.txt b/buch/papers/multiplikation/code/meas_1024.txt new file mode 100644 index 0000000..c5ce619 --- /dev/null +++ b/buch/papers/multiplikation/code/meas_1024.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 5.120000000000000000e+02 1.024000000000000000e+03 +1.502037048339843750e-05 6.628036499023437500e-05 4.780292510986328125e-04 2.713203430175781250e-03 2.115225791931152344e-02 1.758832931518554688e-01 1.338865518569946289e+00 1.009106445312500000e+01 8.192077994346618652e+01 7.835870332717895508e+02 +6.675720214843750000e-06 7.200241088867187500e-05 5.540847778320312500e-04 3.144979476928710938e-03 2.545046806335449219e-02 2.083067893981933594e-01 1.659256219863891602e+00 1.319160294532775879e+01 1.046767003536224365e+02 9.679818902015686035e+02 +1.668930053710937500e-05 1.628398895263671875e-04 7.648468017578125000e-04 4.426956176757812500e-03 2.922415733337402344e-02 1.800994873046875000e-01 1.286747694015502930e+00 9.412034273147583008e+00 6.263725924491882324e+01 4.427414393424987793e+02 +2.408027648925781250e-05 8.463859558105468750e-05 4.761219024658203125e-04 2.339839935302734375e-03 1.682758331298828125e-02 1.299476623535156250e-01 1.048770904541015625e+00 8.114667415618896484e+00 6.373566389083862305e+01 6.489995403289794922e+02 +1.573562622070312500e-05 7.152557373046875000e-06 7.152557373046875000e-06 2.074241638183593750e-05 5.388259887695312500e-05 6.365776062011718750e-05 3.257751464843750000e-03 1.396179199218750000e-03 3.274917602539062500e-03 2.186250686645507812e-02 diff --git a/buch/papers/multiplikation/code/meas_128.pdf b/buch/papers/multiplikation/code/meas_128.pdf new file mode 100644 index 0000000..ed1ec63 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_128.pdf differ diff --git a/buch/papers/multiplikation/code/meas_128.txt b/buch/papers/multiplikation/code/meas_128.txt new file mode 100644 index 0000000..976bbdf --- /dev/null +++ b/buch/papers/multiplikation/code/meas_128.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 +1.978874206542968750e-05 1.134872436523437500e-04 4.298686981201171875e-04 2.815246582031250000e-03 2.616596221923828125e-02 1.767718791961669922e-01 1.293319463729858398e+00 +6.675720214843750000e-06 1.251697540283203125e-04 4.818439483642578125e-04 3.490447998046875000e-03 2.465796470642089844e-02 2.014584541320800781e-01 1.630620479583740234e+00 +2.408027648925781250e-05 2.126693725585937500e-04 1.172780990600585938e-03 4.364490509033203125e-03 3.148293495178222656e-02 2.010228633880615234e-01 1.429297924041748047e+00 +2.932548522949218750e-05 1.466274261474609375e-04 4.270076751708984375e-04 2.837419509887695312e-03 1.723575592041015625e-02 1.308519840240478516e-01 1.015527009963989258e+00 +3.337860107421875000e-05 1.096725463867187500e-05 9.536743164062500000e-06 3.600120544433593750e-05 2.837181091308593750e-05 5.912780761718750000e-05 1.981019973754882812e-03 diff --git a/buch/papers/multiplikation/code/meas_16.pdf b/buch/papers/multiplikation/code/meas_16.pdf new file mode 100644 index 0000000..c2c3834 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_16.pdf differ diff --git a/buch/papers/multiplikation/code/meas_16.txt b/buch/papers/multiplikation/code/meas_16.txt new file mode 100644 index 0000000..69f85bd --- /dev/null +++ b/buch/papers/multiplikation/code/meas_16.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 +1.549720764160156250e-05 6.914138793945312500e-05 5.259513854980468750e-04 2.841711044311523438e-03 +6.914138793945312500e-06 7.557868957519531250e-05 4.496574401855468750e-04 3.437519073486328125e-03 +1.883506774902343750e-05 1.499652862548828125e-04 8.952617645263671875e-04 4.348516464233398438e-03 +2.694129943847656250e-05 1.082420349121093750e-04 4.131793975830078125e-04 2.580165863037109375e-03 +1.621246337890625000e-05 1.120567321777343750e-05 9.298324584960937500e-06 1.239776611328125000e-05 diff --git a/buch/papers/multiplikation/code/meas_256.pdf b/buch/papers/multiplikation/code/meas_256.pdf new file mode 100644 index 0000000..5f049dc Binary files /dev/null and b/buch/papers/multiplikation/code/meas_256.pdf differ diff --git a/buch/papers/multiplikation/code/meas_256.txt b/buch/papers/multiplikation/code/meas_256.txt new file mode 100644 index 0000000..15035c6 --- /dev/null +++ b/buch/papers/multiplikation/code/meas_256.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 +1.049041748046875000e-05 5.340576171875000000e-05 5.936622619628906250e-04 2.707719802856445312e-03 2.246093750000000000e-02 1.631326675415039062e-01 1.335460901260375977e+00 1.052024245262145996e+01 +4.768371582031250000e-06 5.531311035156250000e-05 8.208751678466796875e-04 3.099203109741210938e-03 2.490711212158203125e-02 2.070860862731933594e-01 1.739669799804687500e+00 1.384817218780517578e+01 +1.478195190429687500e-05 1.132488250732421875e-04 5.970001220703125000e-04 3.906726837158203125e-03 3.041696548461914062e-02 2.000186443328857422e-01 1.392681598663330078e+00 9.388872385025024414e+00 +1.716613769531250000e-05 6.866455078125000000e-05 5.314350128173828125e-04 2.688407897949218750e-03 1.695108413696289062e-02 1.297233104705810547e-01 1.087257385253906250e+00 8.699601650238037109e+00 +2.336502075195312500e-05 4.529953002929687500e-06 8.106231689453125000e-06 4.291534423828125000e-05 6.008148193359375000e-05 8.988380432128906250e-05 1.647472381591796875e-04 4.460811614990234375e-04 diff --git a/buch/papers/multiplikation/code/meas_32.pdf b/buch/papers/multiplikation/code/meas_32.pdf new file mode 100644 index 0000000..94c3731 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_32.pdf differ diff --git a/buch/papers/multiplikation/code/meas_32.txt b/buch/papers/multiplikation/code/meas_32.txt new file mode 100644 index 0000000..afdb6d5 --- /dev/null +++ b/buch/papers/multiplikation/code/meas_32.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 +1.215934753417968750e-05 5.459785461425781250e-05 3.700256347656250000e-04 3.249406814575195312e-03 1.996850967407226562e-02 +4.529953002929687500e-06 5.650520324707031250e-05 4.577636718750000000e-04 4.029273986816406250e-03 2.444481849670410156e-02 +1.311302185058593750e-05 1.165866851806640625e-04 6.275177001953125000e-04 4.323244094848632812e-03 2.624726295471191406e-02 +1.835823059082031250e-05 6.890296936035156250e-05 3.914833068847656250e-04 2.423048019409179688e-03 1.761770248413085938e-02 +1.263618469238281250e-05 5.006790161132812500e-06 5.960464477539062500e-06 1.144409179687500000e-05 3.600120544433593750e-05 diff --git a/buch/papers/multiplikation/code/meas_512.pdf b/buch/papers/multiplikation/code/meas_512.pdf new file mode 100644 index 0000000..4d8f04b Binary files /dev/null and b/buch/papers/multiplikation/code/meas_512.pdf differ diff --git a/buch/papers/multiplikation/code/meas_512.txt b/buch/papers/multiplikation/code/meas_512.txt new file mode 100644 index 0000000..1b2089d --- /dev/null +++ b/buch/papers/multiplikation/code/meas_512.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 5.120000000000000000e+02 +1.358985900878906250e-05 5.817413330078125000e-05 4.582405090332031250e-04 3.082036972045898438e-03 2.020335197448730469e-02 1.636352539062500000e-01 1.280331134796142578e+00 1.093638324737548828e+01 8.666778349876403809e+01 +6.198883056640625000e-06 6.270408630371093750e-05 4.820823669433593750e-04 3.279924392700195312e-03 2.462601661682128906e-02 2.034928798675537109e-01 1.630282878875732422e+00 1.372955965995788574e+01 1.104150602817535400e+02 +1.621246337890625000e-05 1.292228698730468750e-04 6.661415100097656250e-04 4.615545272827148438e-03 2.836179733276367188e-02 1.843333244323730469e-01 1.310264825820922852e+00 9.937873125076293945e+00 6.667592120170593262e+01 +2.217292785644531250e-05 7.486343383789062500e-05 4.060268402099609375e-04 2.455949783325195312e-03 1.685857772827148438e-02 1.299629211425781250e-01 1.173750638961791992e+00 8.648802757263183594e+00 6.876212453842163086e+01 +2.431869506835937500e-05 5.006790161132812500e-06 6.914138793945312500e-06 8.106231689453125000e-06 2.717971801757812500e-05 6.461143493652343750e-05 1.480579376220703125e-04 5.280971527099609375e-04 3.390312194824218750e-03 diff --git a/buch/papers/multiplikation/code/meas_64.pdf b/buch/papers/multiplikation/code/meas_64.pdf new file mode 100644 index 0000000..3a90949 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_64.pdf differ diff --git a/buch/papers/multiplikation/code/meas_64.txt b/buch/papers/multiplikation/code/meas_64.txt new file mode 100644 index 0000000..ae6ff9b --- /dev/null +++ b/buch/papers/multiplikation/code/meas_64.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 +1.645088195800781250e-05 7.295608520507812500e-05 3.807544708251953125e-04 2.672195434570312500e-03 2.010774612426757812e-02 1.662156581878662109e-01 +7.390975952148437500e-06 7.843971252441406250e-05 4.265308380126953125e-04 3.107070922851562500e-03 2.457642555236816406e-02 2.122807502746582031e-01 +1.931190490722656250e-05 1.568794250488281250e-04 7.593631744384765625e-04 3.937005996704101562e-03 3.596329689025878906e-02 2.131938934326171875e-01 +2.622604370117187500e-05 9.226799011230468750e-05 3.504753112792968750e-04 2.469539642333984375e-03 1.652932167053222656e-02 1.281068325042724609e-01 +1.788139343261718750e-05 7.152557373046875000e-06 6.914138793945312500e-06 1.120567321777343750e-05 2.884864807128906250e-05 6.914138793945312500e-05 diff --git a/buch/papers/multiplikation/code/meas_8.pdf b/buch/papers/multiplikation/code/meas_8.pdf new file mode 100644 index 0000000..16d177d Binary files /dev/null and b/buch/papers/multiplikation/code/meas_8.pdf differ diff --git a/buch/papers/multiplikation/code/meas_8.txt b/buch/papers/multiplikation/code/meas_8.txt new file mode 100644 index 0000000..6cf6515 --- /dev/null +++ b/buch/papers/multiplikation/code/meas_8.txt @@ -0,0 +1,6 @@ +2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 +1.144409179687500000e-05 5.412101745605468750e-05 3.845691680908203125e-04 +4.768371582031250000e-06 5.698204040527343750e-05 5.209445953369140625e-04 +1.382827758789062500e-05 1.180171966552734375e-04 6.978511810302734375e-04 +1.859664916992187500e-05 7.033348083496093750e-05 3.886222839355468750e-04 +1.525878906250000000e-05 4.529953002929687500e-06 7.390975952148437500e-06 diff --git a/buch/papers/multiplikation/code/test.tex b/buch/papers/multiplikation/code/test.tex new file mode 100644 index 0000000..40ea239 --- /dev/null +++ b/buch/papers/multiplikation/code/test.tex @@ -0,0 +1,92 @@ +% This file was created by tikzplotlib v0.9.8. +\begin{tikzpicture} + +\definecolor{color0}{rgb}{0.886274509803922,0.290196078431373,0.2} +\definecolor{color1}{rgb}{0.203921568627451,0.541176470588235,0.741176470588235} +\definecolor{color2}{rgb}{0.596078431372549,0.556862745098039,0.835294117647059} +\definecolor{color3}{rgb}{0.984313725490196,0.756862745098039,0.368627450980392} + +\begin{axis}[ +axis background/.style={fill=white!89.8039215686275!black}, +axis line style={white}, +legend cell align={left}, +legend style={ + fill opacity=0.8, + draw opacity=1, + text opacity=1, + at={(0.03,0.97)}, + anchor=north west, + draw=white!80!black, + fill=white!89.8039215686275!black +}, +tick align=outside, +tick pos=left, +x grid style={white}, +xlabel={n}, +xmajorgrids, +xmin=-4.3, xmax=134.3, +xtick style={color=white!33.3333333333333!black}, +y grid style={white}, +ylabel={time (s)}, +ymajorgrids, +ymin=-0.0834965705871582, ymax=1.75356960296631, +ytick style={color=white!33.3333333333333!black} +] +\addplot [line width=2pt, color0] +table {% +2 1.57356262207031e-05 +4 5.96046447753906e-05 +8 0.000428915023803711 +16 0.00276041030883789 +32 0.0217020511627197 +64 0.160412073135376 +128 1.3419406414032 +}; +\addlegendentry{Standard MM} +\addplot [line width=2pt, color1] +table {% +2 6.43730163574219e-06 +4 6.69956207275391e-05 +8 0.00048065185546875 +16 0.00336766242980957 +32 0.0257236957550049 +64 0.231612205505371 +128 1.67006659507751 +}; +\addlegendentry{Divide and conquer MM} +\addplot [line width=2pt, color2] +table {% +2 2.90870666503906e-05 +4 0.000133275985717773 +8 0.000703096389770508 +16 0.00453472137451172 +32 0.0282893180847168 +64 0.181003332138062 +128 1.40816903114319 +}; +\addlegendentry{Strassen MM} +\addplot [line width=2pt, white!46.6666666666667!black] +table {% +2 2.19345092773438e-05 +4 9.01222229003906e-05 +8 0.000406503677368164 +16 0.00258469581604004 +32 0.0171687602996826 +64 0.126588344573975 +128 1.02698183059692 +}; +\addlegendentry{Winograd MM} +\addplot [line width=2pt, color3] +table {% +2 1.45435333251953e-05 +4 1.1444091796875e-05 +8 7.39097595214844e-06 +16 1.28746032714844e-05 +32 2.83718109130859e-05 +64 0.000111103057861328 +128 0.000159025192260742 +}; +\addlegendentry{np MM} +\end{axis} + +\end{tikzpicture} diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex new file mode 100755 index 0000000..bc4bfcf --- /dev/null +++ b/buch/papers/multiplikation/einlteung.tex @@ -0,0 +1,52 @@ +% +% einleitung.tex -- Beispiel-File für die Einleitung +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Einleitung \label{multiplikation:section:einleitung}} +\rhead{Einleitung} + +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 (\textcolor{blue} {Kein Hyperlink zu einer Definition?)}: + +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 +Koeffizienten +\begin{equation} +c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}. +\label{multiplikation:eq:MM} +\end{equation} +Grafisch kann die Matrizenmultiplikation $AB=C$ wie in \ref{multiplikation:fig:mm_viz} visualisiert werden. +\begin{figure} + \center + \includegraphics[]{papers/multiplikation/images/mm_visualisation} + \caption{Matrizen Multiplikation} + \label{multiplikation:fig:mm_viz} +\end{figure} +Im Fall einer Matrizengr\"osse von $2\times 2$ +\begin{equation} + \begin{bmatrix} +A_{11} & A_{12}\\ +A_{21} & A_{22} +\end{bmatrix} +\begin{bmatrix} +B_{11} & B_{12}\\ +B_{21} & B_{22} +\end{bmatrix} += +\begin{bmatrix} +C_{11} & C_{12}\\ +C_{21} & C_{22} +\end{bmatrix} +\end{equation} +kann die Gleichung der einzelnen Terme +\begin{equation} \label{multiplikation:eq:MM_exp} +\begin{split} +C_{11} &= A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ +C_{12} &= A_{11} \cdot B_{12} + A_{12} \cdot B_{22}\\ +C_{21} &= A_{21} \cdot B_{11} + A_{22} \cdot B_{21}\\ +C_{22} &= A_{21} \cdot B_{12} + A_{22} \cdot B_{22} +\end{split} +\end{equation} +explizit geschrieben werden. diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf new file mode 100644 index 0000000..dfa2ba4 Binary files /dev/null and b/buch/papers/multiplikation/images/bigo.pdf differ diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex new file mode 100644 index 0000000..e3293e4 --- /dev/null +++ b/buch/papers/multiplikation/images/bigo.tex @@ -0,0 +1,107 @@ +\documentclass[border=10pt,varwidth]{standalone} +\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{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{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{tikzpicture} +\begin{axis}[ + axis lines = left, + xlabel = $n$ (Data Input), + ylabel = {$t$ (time)}, + legend pos=north east, + very thick, + ymax = 500, + yticklabels=\empty, + xticklabels=\empty, + scale only axis=true, + width=12cm, height=6cm, + ] +\addplot [ + domain= 1:20, + samples=100, + color=red, +] +{1}; +\addlegendentry{$\mathcal{O}(1)$} +\addplot [ + domain= 1:20, + samples=100, + color=green, +] +{x}; +\addlegendentry{$\mathcal{O}(n)$} +\addplot [ + domain= 1:20, + samples=100, + color=blue, +] +{x^2}; +\addlegendentry{$\mathcal{O}(n^2)$} +\addplot [ + domain= 1:10, + samples=100, + color=purple, +] +{x^3}; +\addlegendentry{$\mathcal{O}(n^3)$} +\addplot [ + domain= 1:10, + samples=100, + color=black, +] +{exp(x)}; +\addlegendentry{$\mathcal{O}(e^n)$} +\addplot [ + domain= 1:20, + samples=100, + color=orange, +] +{log2(x)}; +\addlegendentry{$\mathcal{O}(\log n)$} + +\addplot [ + domain= 1:20, + samples=100, + color=gray, +] +{x*log2(x)}; +\addlegendentry{$\mathcal{O}(n \log n)$} +\end{axis} +\end{tikzpicture} + +\end{document} diff --git a/buch/papers/multiplikation/images/mm_visualisation.pdf b/buch/papers/multiplikation/images/mm_visualisation.pdf new file mode 100644 index 0000000..9309df1 Binary files /dev/null and b/buch/papers/multiplikation/images/mm_visualisation.pdf differ diff --git a/buch/papers/multiplikation/images/mm_visualisation.tex b/buch/papers/multiplikation/images/mm_visualisation.tex new file mode 100644 index 0000000..6e8f789 --- /dev/null +++ b/buch/papers/multiplikation/images/mm_visualisation.tex @@ -0,0 +1,45 @@ + + \begin{tikzpicture}[ampersand replacement=\&] + + \matrix (A)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (0,0) + { + A_{1,1} \& \cdots \& A_{1,k} \& \cdots \& A_{1,n} \\ + \vdots \& \& \vdots \& \& \vdots \\ + A_{i,1} \& \cdots \& A_{i,k} \& \cdots \& A_{i,n} \\ + \vdots \& \& \vdots \& \& \vdots \\ + A_{m,1} \& \cdots \& A_{m,k} \& \cdots \& A_{m,n} \\ + }; + + \node [right=0.1 of A] (mul) {$\cdot$}; + + + \matrix (B)[right=0.1 of mul, matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] + { + B_{1,1} \& \cdots \& B_{1,j} \& \cdots \& B_{1,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + B_{k,1} \& \cdots \& B_{k,j} \& \cdots \& B_{k,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + B_{n,1} \& \cdots \& B_{n,j} \& \cdots \& B_{n,p} \\ + }; + + \node [right=0.1 of B] (eq) {$=$}; + + \matrix (C)[right=0.1 of eq, matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] + { + C_{1,1} \& \cdots \& C_{1,j} \& \cdots \& C_{1,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + C_{i,1} \& \cdots \& C_{i,j} \& \cdots \& C_{i,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + C_{m,1} \& \cdots \& C_{m,j} \& \cdots \& C_{m,p} \\ + }; + + + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=green, fit=(A-3-1)(A-3-5)] {}; + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=blue, fit=(B-1-3)(B-5-3)] {}; + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=red, fit=(C-3-3)] {}; + + + \end{tikzpicture} + +\end{document} + diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf new file mode 100644 index 0000000..9899dcb Binary files /dev/null and b/buch/papers/multiplikation/images/strassen.pdf differ diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex new file mode 100644 index 0000000..797772b --- /dev/null +++ b/buch/papers/multiplikation/images/strassen.tex @@ -0,0 +1,140 @@ +\documentclass[border=10pt]{standalone} +\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{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{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{tikzpicture}[ampersand replacement=\&] + +\foreach \i in {1,...,4} +{ + \small{ + \matrix (X\i)[matrix of math nodes,nodes in empty cells, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (0,-\i*5) + { + A_{11}B_{11} \& A_{12}B_{11} \& A_{21}B_{11} \& A_{22}B_{11} \\ + A_{11}B_{21} \& A_{12}B_{21} \& A_{21}B_{21} \& A_{22}B_{21} \\ + 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, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (\j*5,-\i*5) + { + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + }; + } +} + +\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) {I}; + \node at (10,-2) {II}; + \node at (15,-2) {III}; + \node at (20,-2) {IV}; + \node at (25,-2) {V}; + \node at (30,-2) {VI}; + \node at (35,-2) {VII}; +} + + +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-1-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-2-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-3-1)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-4-2)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-1-3)] {}; +\node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-2-4)] {}; +\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)] {}; + +\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=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=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)] {}; +\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)] {}; +\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)] {}; +\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)] {}; +\end{tikzpicture} + +\end{document} diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex new file mode 100755 index 0000000..83be814 --- /dev/null +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -0,0 +1,309 @@ +% +% teil2.tex -- Beispiel-File für teil2 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% + +\section{L\"osungsmethoden} +\rhead{L\"osungsmethoden} + +In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Libraries zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt. + +\subsection{Standard Algorithmus} + +Der Standard Methode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden. +Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. +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}\caption{Matrix Multiplication} + \label{multiplikation:alg:smm} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{MM}{$\textbf{A}, \textbf{B}$} + \State $sum \gets 0$ + \State $n \gets columns(\textbf{A}) == rows(\textbf{B})$ + \State $m \gets rows(\textbf{A})$ + \State $p \gets columns(\textbf{B})$ + \State $\textbf{C} \gets zeros(m,p)$ + \For{$i = 0,1,2 \dots,m-1$} + \For{$j = 0,1,2 \dots,p-1$} + \State $sum \gets 0$ + \For{$k = 0,1,2 \dots,n-1$} + \State $sum \gets sum + \textbf{A}[i][k] \cdot \textbf{B}[k][j]$ + \EndFor + \State $\textbf{C}[i][j] \gets sum $ + \EndFor + \EndFor + \State \textbf{return} $\textbf{C}$ + \EndFunction + \end{algorithmic} +\end{algorithm} + +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 zu markant besseren Laufzeiten. +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}$ +\begin{equation} +\mathbf{A}\mathbf{B}= +\begin{bmatrix} +\mathbf{A}_{11} & \mathbf{A}_{12}\\ +\mathbf{A}_{21} & \mathbf{A}_{22} +\end{bmatrix} +\begin{bmatrix} +\mathbf{B}_{11} & \mathbf{B}_{12}\\ +\mathbf{B}_{21} & \mathbf{B}_{22} +\end{bmatrix} += +\begin{bmatrix} +\mathbf{C}_{11} & \mathbf{C}_{12}\\ +\mathbf{C}_{21} & \mathbf{C}_{22} +\end{bmatrix} +\end{equation} +aufgeteilt. +Die Berechnung +\begin{equation} +\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj} +\label{multiplikation:eq:MM_block} +\end{equation} +ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, wobei hier f\"ur die Multiplikation die Matrizenmultiplikation verwendet wird. + +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. +Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ durchgef\"uhrt. +\begin{algorithm}\caption{Divide and Conquer Matrix Multiplication} + \setlength{\lineskip}{7pt} + \label{multiplikation:alg:devide_mm} + \begin{algorithmic} + \Function{MM}{$\textbf{A}, \textbf{B}, n$} + \If{$n = 2$} + \State $ \mathbf{C} \gets zeros(n, n)$ + \State $C[0, 0] \gets A[0][0]\cdot B[0][0]+A[0][1]\cdot B[1][0]$ + \State $C[0, 1] \gets A[0][0]\cdot B[0][1]+A[0][1]\cdot B[1][1]$ + \State $C[1, 0] \gets A[1][0]\cdot B[0][0]+A[1][1]\cdot B[1][0]$ + \State $C[1, 1] \gets A[1][0]\cdot B[0][1]+A[1][1]\cdot B[1][1]$ + \Else + \State $ m \gets n/2$ + \State $\mathbf{A11}, \mathbf{A12}, \mathbf{A21}, \mathbf{A22} \gets \mathbf{A}[:m][:m], \mathbf{A}[:m][m:], \mathbf{A}[m:][:m], \mathbf{A}[m:][m:]$ + \State $\mathbf{B11}, \mathbf{B12}, \mathbf{B21}, \mathbf{B22} \gets \mathbf{B}[:m][:m], \mathbf{B}[:m][m:], \mathbf{B}[m:][:m], \mathbf{B}[m:][m:]$ + + \State $\mathbf{C11} \gets \text{MM}(\mathbf{A11}, \mathbf{B11},n) + \text{MM}(\mathbf{A12}, \mathbf{B21},n)$ + \State $\mathbf{C12} \gets \text{MM}(\mathbf{A11},\mathbf{B12},n) + \text{MM}(\mathbf{A12}, \mathbf{B22},n)$ + \State $\mathbf{C21} \gets \text{MM}(\mathbf{A21}, \mathbf{B11},n) + \text{MM}(\mathbf{A22}, \mathbf{B21},n)$ + \State $\mathbf{C22} \gets \text{MM}(\mathbf{A21}, \mathbf{B12},n) + \text{MM}(\mathbf{A22}, \mathbf{B22},n)$ + \State $ C \gets vstack(hstack(C11, C12), hstack(C21, C22))$ + + \EndIf + \State \textbf{return} $\textbf{C}$ + + \EndFunction + \end{algorithmic} +\end{algorithm} + +Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} berechnet werden. +Ohne auf diesen vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe der Funktion die Laufzeit. +In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt +\begin{equation} \label{multiplikation:eq:laufzeitdac} + \mathcal{T}(n) = + \begin{cases} + 1 & \text{if } n \leq 2\\ + 8 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 + \end{cases} = \mathcal{O}(n^{\log_2 8}) = \mathcal{O}(n^{3}) +\end{equation} +zu 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. + + +\subsection{Strassen's Algorithmus} + +Strassen's Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen. +Die Grundlegenden Terme +\begin{equation} \label{multiplikation:eq:strassen} +\begin{split} +\text{\textbf{P}} &= (\mathbf{A}_{11} + \mathbf{A}_{22}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{22}) \\ +\text{\textbf{Q}} &= (\mathbf{A}_{21} + \mathbf{A}_{22}) \cdot \mathbf{B}_{11} \\ +\text{\textbf{R}} &= \mathbf{A}_{11} \cdot (\mathbf{B}_{12}-\mathbf{B}_{22}) \\ +\text{\textbf{S}} &= \mathbf{A}_{22} \cdot (-\mathbf{B}_{11}+\mathbf{B}_{21}) \\ +\text{\textbf{T}} &= (\mathbf{A}_{11} + \mathbf{A}_{12}) \cdot \mathbf{B}_{22} \\ +\text{\textbf{U}} &= (-\mathbf{A}_{11} + \mathbf{A}_{21}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{12}) \\ +\text{\textbf{V}} &= (\mathbf{A}_{12} - \mathbf{A}_{22}) \cdot (\mathbf{B}_{21} + \mathbf{B}_{22}) +\end{split} +\end{equation} +aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Matrix $\mathbf{C}$ +\begin{equation} \label{multiplikation:eq:strassen2} +\begin{split} +\mathbf{C}_{11} &= \text{\textbf{P}} + \text{\textbf{S}} - \text{\textbf{T}} + \text{\textbf{V}} \\ +\mathbf{C}_{21} &= \text{\textbf{R}} + \text{\textbf{T}} \\ +\mathbf{C}_{12} &= \text{\textbf{Q}} + \text{\textbf{S}}\\ +\mathbf{C}_{22} &= \text{\textbf{P}} + \text{\textbf{R}} - \text{\textbf{Q}} + \text{\textbf{U}} +\end{split} +\end{equation} +gebraucht. +\begin{algorithm}\caption{Strassen Matrix Multiplication} + \label{multiplikation:alg:strassen} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{strassen}{$\textbf{A}, \textbf{B}, n$} + \If{$n = 2$} + \State $ \mathbf{C} \gets zeros((n, n))$ + \State $P \gets (A[0][0]+A[1][1])\cdot( B[0][0]+B[1][1])$ + \State $Q \gets (A[1][0]+A[1][1])\cdot B[0][0]$ + \State $R \gets A[0][0]\cdot (B[0][1]-B[1][1])$ + \State $S \gets A[1][1]\cdot (B[1][0]-B[0][0])$ + \State $T \gets (A[0][0]+A[0][1])\cdot B[1][1]$ + \State $U \gets (A[1][0]-A[0][0])\cdot (B[0][0]+B[0][1])$ + \State $V \gets (A[0][1]-A[1][1])\cdot (B[1][0]+B[1][1])$ + \State $C[0][0] \gets P+S-T+V$ + \State $C[0][1] \gets R+T$ + \State $C[1][0] \gets Q+S$ + \State $C[1][1] \gets P+R-Q+U$ + \Else + \State $ m \gets n/2$ + \State $\mathbf{A11}, \mathbf{A12}, \mathbf{A21}, \mathbf{A22} \gets \mathbf{A}[:m][:m], \mathbf{A}[:m][m:], \mathbf{A}[m:][:m], \mathbf{A}[m:][m:]$ + \State $\mathbf{B11}, \mathbf{B12}, \mathbf{B21}, \mathbf{B22} \gets \mathbf{B}[:m][:m], \mathbf{B}[:m][m:], \mathbf{B}[m:][:m], \mathbf{B}[m:][m:]$ + + \State $ \mathbf{P} \gets \text{strassen}((\mathbf{A11}+ \mathbf{A22}),(\mathbf{B11}+\mathbf{B22}), m)$ + \State $ \mathbf{Q} \gets \text{strassen}((\mathbf{A21}+ \mathbf{A22}), \mathbf{B11},m)$ + \State $ \mathbf{R} \gets \text{strassen}( \mathbf{A11},(\mathbf{B12}- \mathbf{B22}),m)$ + \State $ \mathbf{S} \gets \text{strassen}( \mathbf{A22},(\mathbf{B21}- \mathbf{B11}),m)$ + \State $ \mathbf{T} \gets \text{strassen}((\mathbf{A11}+ \mathbf{A12}), \mathbf{B22},m)$ + \State $ \mathbf{U} \gets \text{strassen}((\mathbf{A21}- \mathbf{A11}),(\mathbf{B11}+\mathbf{B12}),m)$ + \State $ \mathbf{V} \gets \text{strassen}((\mathbf{A12}- \mathbf{A22}),(\mathbf{B21}+\mathbf{B22}),m)$ + + + + \State $\mathbf{C11} \gets \mathbf{P+S-T+V}$ + \State $\mathbf{C12} \gets \mathbf{R+T}$ + \State $\mathbf{C21} \gets \mathbf{Q+S}$ + \State $\mathbf{C22} \gets \mathbf{P+R-Q+U}$ + \State $ C \gets vstack(hstack(C11, C12), hstack(C21, C22))$ + + \EndIf + \State \textbf{return} $\textbf{C}$ + + \EndFunction + \end{algorithmic} +\end{algorithm} +Strassens's Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt. +\begin{figure} + \center + \includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf} + \caption{Strassen's Algorithmus} + \label{multiplikation:fig:strassen} +\end{figure} + +Die Funktion wird sieben mal rekursiv aufgerufen. +Dies f\"uhrt zu einer Laufzeit von +\begin{equation} \label{multiplikation:eq:laufzeitstrassen} +\mathcal{T}(n) = +\begin{cases} +1 & \text{if } n \leq 2\\ +7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 +\end{cases} = \mathcal{O}(n^{\log_2 7}) = \mathcal{O}(n^{2.8074}) +\end{equation} +und ist somit schneller als die Standard Methode. + +\subsection{Winograd's Algorithmus} + +Ein weiterer Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}. +Er zeigte einen neuen Algorithmus f\"ur das +\begin{equation} + \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i +\end{equation} +Skalarprodukt. +F\"ur jeden Vektor berechne +\begin{equation} + \xi = \sum_{j=1}^{ \lfloor n/2 \rfloor} x_{2j-1} \cdot x_{2j} +\end{equation} +und +\begin{equation} + \eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j}. +\end{equation} +Das Skalarprodukt ist nun geben mit +\begin{equation} + \langle x,y \rangle = + \begin{cases} + \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{if $n$ is even}\\ + \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{if $n$ is odd}. + \end{cases} +\end{equation} + +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. +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 Standard Methode nur die H\"alfte ist. +Die Implementation kann im Algorithmus \ref{multiplikation:alg:winograd} entnommen werden. + +\begin{algorithm}\caption{Winograd Matrix Multiplication} + \setlength{\lineskip}{7pt} + \label{multiplikation:alg:winograd} + \begin{algorithmic} + \Function{Winograd}{$\textbf{A}, \textbf{B}, n$} + \State $ m \gets rows(\mathbf{A})$ + \State $ n \gets columns(\mathbf{A}) == rows(\mathbf{B})$ + \State $ p \gets columns(\mathbf{B})$ + \State $ \mathbf{\xi} \gets zeros(m)$ + \State $ \mathbf{\eta} \gets zeros(p)$ + + + \For{$i = 0,1,2 \dots,m-1$} + \For{$j = 0,1,2 \dots,\lfloor n/2 \rfloor-1$} + \State $\xi[i] \gets \xi[i]+A[i,2 j]A[i,2 j+1]$ + \EndFor + \EndFor + + \For{$i = 0,1,2 \dots,p-1$} + \For{$j = 0,1,2 \dots,\lfloor n/2 \rfloor-1$} + \State $\eta[i] \gets \eta[i]+B[2 j,i]B[2 j+1,i]$ + \EndFor + \EndFor + + \If{$n \% 2 == 0$} + \For{$i = 0,1,2 \dots,m-1$} + \For{$j = 0,1,2 \dots,p-1$} + \State $ab \gets 0$ + \For{$k = 0,1,2 \dots,\lfloor n/2 \rfloor-1$} + \State $ab \gets ab + (A[i,2k]+B[2k+1,j])(A[i,2k+1]+B[2k,j])$ + \EndFor + \State $C[i,j] \gets ab-\eta[j]-\xi[i]$ + \EndFor + \EndFor + \Else + \For{$i = 0,1,2 \dots,n-1$} + \For{$j = 0,1,2 \dots,n-1$} + \State $ab \gets 0$ + \For{$k = 0,1,2 \dots,\lfloor n/2 \rfloor-1$} + \State $ab \gets ab + (A[i,2k]+B[2k+1,j])(A[i,2k+1]+B[2k,j])$ + \EndFor + \State $C[i,j] \gets ab-\eta[j]-\xi[i]+A[i,-1]B[-1,j]$ + \EndFor + \EndFor + \EndIf + \State \textbf{return} $\textbf{C}$ + + \EndFunction + \end{algorithmic} +\end{algorithm} + +\subsection{Weitere Algorithmen} + +\textcolor{red}{TODO: BLAS} + +\section{Implementation} +\rhead{Implementation} +\textcolor{red}{TODO: messresultate} + +\section{Fazit} +\rhead{Fazit} diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex old mode 100644 new mode 100755 index 42f2768..8d0a8df --- a/buch/papers/multiplikation/main.tex +++ b/buch/papers/multiplikation/main.tex @@ -1,36 +1,18 @@ +% !TEX root = ../../buch.tex % % main.tex -- Paper zum Thema % -% (c) 2020 Hochschule Rapperswil +% (c) 2021 Hochschule Rapperswil % -\chapter{Thema\label{chapter:multiplikation}} -\lhead{Thema} +\chapter{Schnelle Matrizen Multiplikation\label{chapter:multiplikation}} +\lhead{FMM} \begin{refsection} -\chapterauthor{Hans Muster} +\chapterauthor{Michael Schmid} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} -\input{papers/multiplikation/teil0.tex} -\input{papers/multiplikation/teil1.tex} -\input{papers/multiplikation/teil2.tex} -\input{papers/multiplikation/teil3.tex} +\input{papers/multiplikation/einlteung.tex} +\input{papers/multiplikation/problemstellung.tex} +\input{papers/multiplikation/loesungsmethoden.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/multiplikation/packages.tex b/buch/papers/multiplikation/packages.tex old mode 100644 new mode 100755 diff --git a/buch/papers/multiplikation/papers/Strassen_GPU.pdf b/buch/papers/multiplikation/papers/Strassen_GPU.pdf new file mode 100755 index 0000000..4ce7625 Binary files /dev/null and b/buch/papers/multiplikation/papers/Strassen_GPU.pdf differ diff --git a/buch/papers/multiplikation/papers/Strassen_original_1969.pdf b/buch/papers/multiplikation/papers/Strassen_original_1969.pdf new file mode 100755 index 0000000..b647fc0 Binary files /dev/null and b/buch/papers/multiplikation/papers/Strassen_original_1969.pdf differ diff --git a/buch/papers/multiplikation/papers/assay_fast_MM.pdf b/buch/papers/multiplikation/papers/assay_fast_MM.pdf new file mode 100755 index 0000000..3cd6b63 Binary files /dev/null and b/buch/papers/multiplikation/papers/assay_fast_MM.pdf differ diff --git a/buch/papers/multiplikation/papers/strassen_video.txt b/buch/papers/multiplikation/papers/strassen_video.txt new file mode 100755 index 0000000..f84122c --- /dev/null +++ b/buch/papers/multiplikation/papers/strassen_video.txt @@ -0,0 +1 @@ +https://www.youtube.com/watch?v=0oJyNmEbS4w diff --git a/buch/papers/multiplikation/papers/winograd_original.pdf b/buch/papers/multiplikation/papers/winograd_original.pdf new file mode 100755 index 0000000..a7aba36 Binary files /dev/null and b/buch/papers/multiplikation/papers/winograd_original.pdf differ diff --git a/buch/papers/multiplikation/presentation/common.tex b/buch/papers/multiplikation/presentation/common.tex new file mode 100644 index 0000000..200d244 --- /dev/null +++ b/buch/papers/multiplikation/presentation/common.tex @@ -0,0 +1,79 @@ +% +% common.tex -- gemeinsame Definitionen +% +% (c) 2021 Michael Schmid, OST Campus Rapperswil +% +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{epic} +\usepackage{color} +\usepackage{array} +\usepackage{algorithm} +\usepackage{ifthen} +\usepackage{adjustbox} +\usepackage[noend]{algpseudocode} +\usepackage{neuralnetwork} +\usepackage{amsmath} +\usepackage{lmodern} +\usepackage{tikz} +\usetikzlibrary{decorations.text} +\usetikzlibrary{arrows,matrix,positioning} +\usetikzlibrary{overlay-beamer-styles} +\usetikzlibrary{matrix.skeleton} +\usepackage{pgfplots} +\usepackage{listings} +\usepackage{svg} + +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\definecolor{ost}{rgb}{164,0,136} + +\lstdefinestyle{mystyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=2pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} + +\usetikzlibrary{fit} +\tikzset{% + highlight/.style={rectangle,rounded corners,fill=red!15,draw,fill opacity=0.5,inner sep=0pt} +} +\newcommand{\tikzmark}[2]{\tikz[overlay,remember picture,baseline=(#1.base)] \node (#1) {#2};} +% +\newcommand{\Highlight}[1][submatrix]{% + \tikz[overlay,remember picture]{ + \node[highlight,fit=(left.north west) (right.south east)] (#1) {};} +} + + +\lstset{style=mystyle} +\lstdefinestyle{mystyle}{ + morekeywords={cwt,contourf,datetick} +} + + +\usetikzlibrary{shapes.geometric} +\mode{% +\usetheme[]{Frankfurt}} +\beamertemplatenavigationsymbolsempty +\title[]{Fast Matrix Multiplication} +\author[]{Michael Schmid} +\usecolortheme[named=ost]{structure} + +\date[]{31.05.2021} +\newboolean{presentation} diff --git a/buch/papers/multiplikation/presentation/presentation.nav b/buch/papers/multiplikation/presentation/presentation.nav new file mode 100644 index 0000000..2a01568 --- /dev/null +++ b/buch/papers/multiplikation/presentation/presentation.nav @@ -0,0 +1,59 @@ +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} +\headcommand {\beamer@framepages {1}{1}} +\headcommand {\beamer@sectionpages {1}{1}} +\headcommand {\beamer@subsectionpages {1}{1}} +\headcommand {\sectionentry {1}{Big $\mathcal {O}$}{2}{Big $\mathcal {O}$}{0}} +\headcommand {\slideentry {1}{0}{1}{2/4}{}{0}} +\headcommand {\beamer@framepages {2}{4}} +\headcommand {\slideentry {1}{0}{2}{5/6}{}{0}} +\headcommand {\beamer@framepages {5}{6}} +\headcommand {\slideentry {1}{0}{3}{7/8}{}{0}} +\headcommand {\beamer@framepages {7}{8}} +\headcommand {\slideentry {1}{0}{4}{9/10}{}{0}} +\headcommand {\beamer@framepages {9}{10}} +\headcommand {\slideentry {1}{0}{5}{11/12}{}{0}} +\headcommand {\beamer@framepages {11}{12}} +\headcommand {\slideentry {1}{0}{6}{13/13}{}{0}} +\headcommand {\beamer@framepages {13}{13}} +\headcommand {\slideentry {1}{0}{7}{14/14}{}{0}} +\headcommand {\beamer@framepages {14}{14}} +\headcommand {\beamer@sectionpages {2}{14}} +\headcommand {\beamer@subsectionpages {2}{14}} +\headcommand {\sectionentry {2}{Strassen's Algorithm}{15}{Strassen's Algorithm}{0}} +\headcommand {\slideentry {2}{0}{1}{15/15}{}{0}} +\headcommand {\beamer@framepages {15}{15}} +\headcommand {\slideentry {2}{0}{2}{16/18}{}{0}} +\headcommand {\beamer@framepages {16}{18}} +\headcommand {\slideentry {2}{0}{3}{19/19}{}{0}} +\headcommand {\beamer@framepages {19}{19}} +\headcommand {\slideentry {2}{0}{4}{20/20}{}{0}} +\headcommand {\beamer@framepages {20}{20}} +\headcommand {\slideentry {2}{0}{5}{21/23}{}{0}} +\headcommand {\beamer@framepages {21}{23}} +\headcommand {\slideentry {2}{0}{6}{24/24}{}{0}} +\headcommand {\beamer@framepages {24}{24}} +\headcommand {\slideentry {2}{0}{7}{25/25}{}{0}} +\headcommand {\beamer@framepages {25}{25}} +\headcommand {\slideentry {2}{0}{8}{26/26}{}{0}} +\headcommand {\beamer@framepages {26}{26}} +\headcommand {\slideentry {2}{0}{9}{27/29}{}{0}} +\headcommand {\beamer@framepages {27}{29}} +\headcommand {\slideentry {2}{0}{10}{30/32}{}{0}} +\headcommand {\beamer@framepages {30}{32}} +\headcommand {\beamer@sectionpages {15}{32}} +\headcommand {\beamer@subsectionpages {15}{32}} +\headcommand {\sectionentry {3}{Measurements}{33}{Measurements}{0}} +\headcommand {\slideentry {3}{0}{1}{33/40}{}{0}} +\headcommand {\beamer@framepages {33}{40}} +\headcommand {\slideentry {3}{0}{2}{41/49}{}{0}} +\headcommand {\beamer@framepages {41}{49}} +\headcommand {\beamer@sectionpages {33}{49}} +\headcommand {\beamer@subsectionpages {33}{49}} +\headcommand {\sectionentry {4}{How To Matrix Multiply}{50}{How To Matrix Multiply}{0}} +\headcommand {\slideentry {4}{0}{1}{50/50}{}{0}} +\headcommand {\beamer@framepages {50}{50}} +\headcommand {\beamer@partpages {1}{50}} +\headcommand {\beamer@subsectionpages {50}{50}} +\headcommand {\beamer@sectionpages {50}{50}} +\headcommand {\beamer@documentpages {50}} +\headcommand {\gdef \inserttotalframenumber {21}} diff --git a/buch/papers/multiplikation/presentation/presentation.pdf b/buch/papers/multiplikation/presentation/presentation.pdf new file mode 100644 index 0000000..842e68c Binary files /dev/null and b/buch/papers/multiplikation/presentation/presentation.pdf differ diff --git a/buch/papers/multiplikation/presentation/presentation.snm b/buch/papers/multiplikation/presentation/presentation.snm new file mode 100644 index 0000000..e69de29 diff --git a/buch/papers/multiplikation/presentation/presentation.tex b/buch/papers/multiplikation/presentation/presentation.tex new file mode 100644 index 0000000..2a4af45 --- /dev/null +++ b/buch/papers/multiplikation/presentation/presentation.tex @@ -0,0 +1,12 @@ +% +% MathSem-yyy-xxx.tex -- Präsentation +% +% (c) 2021 Michael Schmid, OST campus Rapperswil +% + +\documentclass[aspectratio=169]{beamer} +\input{common.tex} +%\setboolean{presentation}{true} +\begin{document} +\input{slides/slides.tex} +\end{document} diff --git a/buch/papers/multiplikation/presentation/slides/algo.tex b/buch/papers/multiplikation/presentation/slides/algo.tex new file mode 100644 index 0000000..0c3d130 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/algo.tex @@ -0,0 +1,111 @@ +\begin{frame} + \frametitle{Algorithm} + \begin{columns} + \begin{column}{0.6\textwidth} + \begin{algorithm}[H]\caption{Square Matrix Multiplication} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{MM}{$\textbf{A}, \textbf{B}, \textbf{C}$} + \State $sum \gets 0$ + \State $n \gets columns(\textbf{A}) == rows(\textbf{B})$ + \State $m \gets rows(\textbf{A})$ + \State $p \gets columns(\textbf{B})$ + + \For{$i = 0,1,2 \dots,m-1$} + \For{$j = 0,1,2 \dots,p-1$} + \State $sum \gets 0$ + \For{$k = 0,1,2 \dots,n-1$} + \State $sum \gets sum + \textbf{A}[i][k] \cdot \textbf{B}[k][j]$ + \EndFor + \State $\textbf{C}[i][j] \gets sum $ + \EndFor + \EndFor + \State \textbf{return} $\textbf{C}$ + \EndFunction + \end{algorithmic} + \end{algorithm} +\end{column} +\begin{column}{0.4\textwidth} + \scalebox{0.6}{\parbox{\linewidth}{ + + \begin{tikzpicture}[ampersand replacement=\&,remember picture,overlay] + + \matrix (A)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (2,-2.8) + { + A_{1,1} \& \cdots \& A_{1,k} \& \cdots \& A_{1,n} \\ + \vdots \& \& \vdots \& \& \vdots \\ + A_{i,1} \& \cdots \& A_{i,k} \& \cdots \& A_{i,n} \\ + \vdots \& \& \vdots \& \& \vdots \\ + A_{m,1} \& \cdots \& A_{m,k} \& \cdots \& A_{m,n} \\ + }; + + \matrix (B)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (7.5,1.2) + { + B_{1,1} \& \cdots \& B_{1,j} \& \cdots \& B_{1,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + B_{k,1} \& \cdots \& B_{k,j} \& \cdots \& B_{k,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + B_{n,1} \& \cdots \& B_{n,j} \& \cdots \& B_{n,p} \\ + }; + + \matrix (C)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (7.5,-2.8) + { + C_{1,1} \& \cdots \& C_{1,j} \& \cdots \& C_{1,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + C_{i,1} \& \cdots \& C_{i,j} \& \cdots \& C_{i,p} \\ + \vdots \& \& \vdots \& \& \vdots \\ + C_{m,1} \& \cdots \& C_{m,j} \& \cdots \& C_{m,p} \\ + }; + + + \begin{scope}[on background layer] + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=green, fit=(A-3-1)(A-3-5)] {}; + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=blue, fit=(B-1-3)(B-5-3)] {}; + \node[opacity=0.5, rounded corners=2pt, inner sep=-1pt, fill=red, fit=(C-3-3)] {}; + + \end{scope} + + + + + \end{tikzpicture} + }} + \end{column} +\end{columns} +\end{frame} + + +\begin{frame} + \frametitle{Algorithm} + +\begin{columns} + \begin{column}{0.6\textwidth} +\begin{algorithm}[H]\caption{Square Matrix Multiplication} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{MM}{$\textbf{A}, \textbf{B}, \textbf{C}$} + \State $sum \gets 0$ + \State $n \gets columns(\textbf{A}) == rows(\textbf{B})$ + \State $m \gets rows(\textbf{A})$ + \State $p \gets columns(\textbf{B})$ + + \For{$i = 0,1,2 \dots,m-1$} + \For{$j = 0,1,2 \dots,p-1$} + \State $sum \gets 0$ + \For{$k = 0,1,2 \dots,n-1$} + \State $sum \gets sum + \textbf{A}[i][k] \cdot \textbf{B}[k][j]$ + \EndFor + \State $\textbf{C}[i][j] \gets sum $ + \EndFor + \EndFor + \State \textbf{return} $\textbf{C}$ + \EndFunction + \end{algorithmic} +\end{algorithm} +\end{column} +\begin{column}{0.4\textwidth} +\Huge$\mathcal{O}(n^3)$ +\end{column} +\end{columns} + +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/bigO.tex b/buch/papers/multiplikation/presentation/slides/bigO.tex new file mode 100644 index 0000000..d425da8 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/bigO.tex @@ -0,0 +1,251 @@ + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} +\begin{itemize} + \item <1-> Time complexity of an algorithm + \item <2-> How many multiplications in a function + \item <3-> Drop Constants +\end{itemize} +\end{frame} + + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} + \onslide<1->{ + + \begin{algorithm}[H]\caption{Foo 1} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{foo}{$a, b$} + \State \textbf{return} $a+b$ + \EndFunction + \end{algorithmic} + \end{algorithm} +} +\onslide<2->{ +$\mathcal{O}(1)$ + } +\end{frame} + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} + \onslide<1->{ + + \begin{algorithm}[H]\caption{Foo 2} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{foo}{$a, b$} + \State $ x \gets a+b $ + \State $ y \gets a \cdot b $ + \State \textbf{return} $x+y$ + \EndFunction + \end{algorithmic} + \end{algorithm} +} +\onslide<2->{ +$\mathcal{O}(1) + \mathcal{O}(1) = 2\mathcal{O}(1) = \mathcal{O}(1) $ + } +\end{frame} + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} + \onslide<1->{ + + \begin{algorithm}[H]\caption{Foo 3} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{foo}{$\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} +} +\onslide<2->{ +$\mathcal{O}(n)$ + } +\end{frame} + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} + \onslide<1->{ + + \begin{algorithm}[H]\caption{Foo 4} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{foo}{$\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} +} +\onslide<2->{ +$\mathcal{O}(n^2)$ + } +\end{frame} + +% \begin{frame} +% \frametitle{Big $\mathcal{O}$ notation} +% \onslide<1->{ +% +% \begin{algorithm}[H]\caption{Fibonacci} +% \setlength{\lineskip}{7pt} +% \begin{algorithmic}[1] +% \Function{fib}{$n$} +% \If{$n <= 1$} +% \State \textbf{return} $1$ +% \Else +% \State \textbf{return} fib($n-1$) + fib($n-2$) +% \EndIf +% +% \EndFunction +% \end{algorithmic} +% \end{algorithm} +% } +% \onslide<2->{ +% \[ +% \langle x,y \rangle = +% \begin{cases} +% \displaystyle $\mathcal{O}(1)$ & \text{if $n \leq 2$}\\ +% \displaystyle $ 2 \mathcal{T}(\frac{n}{2})$ & \text{if $n > 2$} +% \end{cases} +% \] } +% \end{frame} + + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} +\begin{tikzpicture} +\begin{axis}[ + axis lines = left, + xlabel = $n$ (Data Input), + ylabel = {$t$ (time)}, + legend pos=north east, + very thick, + ymax = 20, + yticklabels=\empty, + xticklabels=\empty, + scale only axis=true, + width=12cm, height=6cm, + ] +%Below the red parabola is defined +\addplot [ + domain= 1:6, + samples=100, + color=red, +] +{1}; +\addlegendentry{$\mathcal{O}(1)$} +%Here the blue parabloa is defined +\addplot [ + domain= 1:6, + samples=100, + color=green, +] +{x}; +\addlegendentry{$\mathcal{O}(n)$} +\addplot [ + domain= 1:6, + samples=100, + color=blue, +] +{x^2}; +\addlegendentry{$\mathcal{O}(n^2)$} +\addplot [ + domain= 1:6, + samples=100, + color=purple, +] +{x^3}; +\addlegendentry{$\mathcal{O}(n^3)$} +\addplot [ + domain= 1:3, + samples=100, + color=black, +] +{exp(x)}; +\addlegendentry{$\mathcal{O}(e^n)$} +\addplot [ + domain= 1:6, + samples=100, + color=orange, +] +{log2(x)}; +\addlegendentry{$\mathcal{O}(\log n)$} +\end{axis} +\end{tikzpicture} + +\end{frame} + +\begin{frame} + \frametitle{Big $\mathcal{O}$ notation} +\begin{tikzpicture} +\begin{axis}[ + axis lines = left, + xlabel = $n$ (Data Input), + ylabel = {$t$ (time)}, + legend pos=north east, + very thick, + ymax = 500, + yticklabels=\empty, + xticklabels=\empty, + scale only axis=true, + width=12cm, height=6cm, + ] +\addplot [ + domain= 1:20, + samples=100, + color=red, +] +{1}; +\addlegendentry{$\mathcal{O}(1)$} +\addplot [ + domain= 1:20, + samples=100, + color=green, +] +{x}; +\addlegendentry{$\mathcal{O}(n)$} +\addplot [ + domain= 1:20, + samples=100, + color=blue, +] +{x^2}; +\addlegendentry{$\mathcal{O}(n^2)$} +\addplot [ + domain= 1:10, + samples=100, + color=purple, +] +{x^3}; +\addlegendentry{$\mathcal{O}(n^3)$} +\addplot [ + domain= 1:10, + samples=100, + color=black, +] +{exp(x)}; +\addlegendentry{$\mathcal{O}(e^n)$} +\addplot [ + domain= 1:20, + samples=100, + color=orange, +] +{log2(x)}; +\addlegendentry{$\mathcal{O}(\log n)$} +\end{axis} +\end{tikzpicture} + +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/blas.tex b/buch/papers/multiplikation/presentation/slides/blas.tex new file mode 100644 index 0000000..ed498a3 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/blas.tex @@ -0,0 +1,18 @@ +\begin{frame} +\frametitle{BLAS, LAPACK} +\begin{itemize} + \item Basic Linear Algebra Subprograms + \begin{itemize} + \item $\mathbf{y} = \alpha \mathbf{x}+\mathbf{y}$ + \item $\mathbf{y} = \alpha \mathbf{A}\mathbf{x}+ \beta \mathbf{y}$ + \item $\mathbf{C} = \alpha \mathbf{A}\mathbf{B}+ \beta \mathbf{C}$ + + \end{itemize} + \item Linear Algebra Package + \begin{itemize} + \item QR decomposition + \item Singular value decomposition + \item Eigenvalues + \end{itemize} +\end{itemize} +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/conclusuion.tex b/buch/papers/multiplikation/presentation/slides/conclusuion.tex new file mode 100644 index 0000000..e69de29 diff --git a/buch/papers/multiplikation/presentation/slides/logo.pdf b/buch/papers/multiplikation/presentation/slides/logo.pdf new file mode 100644 index 0000000..d78ca88 Binary files /dev/null and b/buch/papers/multiplikation/presentation/slides/logo.pdf differ diff --git a/buch/papers/multiplikation/presentation/slides/meas.tex b/buch/papers/multiplikation/presentation/slides/meas.tex new file mode 100644 index 0000000..489c010 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/meas.tex @@ -0,0 +1,42 @@ +\begin{frame} + \frametitle{Measurements Python} + \only<1>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_8.pdf}} + \only<2>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_16.pdf}} + \only<3>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_32.pdf}} + \only<4>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_64.pdf}} + \only<5>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_128.pdf}} + \only<6>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_256.pdf}} + \only<7>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_512.pdf}} + \only<8>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/meas_1024.pdf}} +\end{frame} + + +\begin{frame} + \frametitle{Measurements C} + \only<1>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_8.pdf}} + \only<2>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_16.pdf}} + \only<3>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_32.pdf}} + \only<4>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_64.pdf}} + \only<5>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_128.pdf}} + \only<6>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_256.pdf}} + \only<7>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_512.pdf}} + \only<8>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_1024.pdf}} + \only<9>{ + \includegraphics[width=\textwidth,height=0.9\textheight,keepaspectratio]{../code/c_meas_2048.pdf}} +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/nn.tex b/buch/papers/multiplikation/presentation/slides/nn.tex new file mode 100644 index 0000000..e74e970 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/nn.tex @@ -0,0 +1,97 @@ + +\begin{frame} + \frametitle{Neural Network} + \centering +\newcommand{\inputnum}{4} + +% Hidden layer neurons'number +\newcommand{\hiddennumA}{5} +\newcommand{\hiddennumB}{6} + +% Output layer neurons'number +\newcommand{\outputnum}{4} + +\begin{tikzpicture} + + +% Input Layer +\foreach \i in {1,...,\inputnum} +{ + \node[circle, + minimum size = 6mm, + fill=blue!30] (Input-\i) at (0,-\i) {}; +} + +% Hidden Layer1 +\foreach \i in {1,...,\hiddennumA} +{ + \node[circle, + minimum size = 6mm, + fill=red!50, + yshift=(\hiddennumA-\inputnum)*5 mm + ] (Hidden1-\i) at (2.5,-\i) {}; +} + +% Hidden Layer2 +\foreach \i in {1,...,\hiddennumB} +{ + \node[circle, + minimum size = 6mm, + fill=red!50, + yshift=(\hiddennumB-\inputnum)*5 mm + ] (Hidden2-\i) at (5,-\i) {}; +} + +% Output Layer +\foreach \i in {1,...,\outputnum} +{ + \node[circle, + minimum size = 6mm, + fill=green!50, + yshift=(\outputnum-\inputnum)*5 mm + ] (Output-\i) at (7.5,-\i) {}; +} + +% Connect neurons In-Hidden +\foreach \i in {1,...,\inputnum} +{ + \foreach \j in {1,...,\hiddennumA} + { + \draw[->, shorten >=1pt] (Input-\i) -- (Hidden1-\j); + } +} + +% Connect neurons In-Hidden +\foreach \i in {1,...,\hiddennumA} +{ + \foreach \j in {1,...,\hiddennumB} + { + \draw[->, shorten >=1pt] (Hidden1-\i) -- (Hidden2-\j); + } +} + +% Connect neurons Hidden-Out +\foreach \i in {1,...,\hiddennumB} +{ + \foreach \j in {1,...,\outputnum} + { + \draw[->, shorten >=1pt] (Hidden2-\i) -- (Output-\j); + } +} + +% Inputs +\foreach \i in {1,...,\inputnum} +{ + \draw[<-, shorten <=1pt] (Input-\i) -- ++(-1,0) + node[left]{\LARGE{$x_{\i}$}}; +} + +% Outputs +\foreach \i in {1,...,\outputnum} +{ + \draw[->, shorten <=1pt] (Output-\i) -- ++(1,0) + node[right]{\LARGE{$y_{\i}$}}; +} + +\end{tikzpicture} +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/parcomp.tex b/buch/papers/multiplikation/presentation/slides/parcomp.tex new file mode 100644 index 0000000..1ba39ee --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/parcomp.tex @@ -0,0 +1,66 @@ +% !TEX root = presentation.tex + +\begin{frame} + \frametitle{Vector-Matrix Multiplication} +\center{ + \begin{tikzpicture}[ampersand replacement=\&] + + \matrix (A)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] + { + A_{1,1} \& A_{1,2} \& A_{1,3} \& A_{1,4} \\ + }; + + \matrix (B)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (5,-0.95) + { + B_{1,1} \& B_{1,2} \& B_{1,3} \& B_{1,4} \& B_{1,5} \\ + B_{2,1} \& B_{2,2} \& B_{2,3} \& B_{2,4} \& B_{2,5} \\ + B_{3,1} \& B_{3,2} \& B_{3,3} \& B_{3,4} \& B_{3,5} \\ + B_{4,1} \& B_{4,2} \& B_{4,3} \& B_{4,4} \& B_{4,5} \\ + }; + + \matrix (C)[matrix of math nodes, label skeleton, left delimiter=[,right delimiter={]}] at (5,-3) + { + C_{1,1} \& C_{1,2} \& C_{1,3} \& C_{1,4} \& C_{1,5}\\ + }; + + \foreach \i in {1,...,4} + { + \pgfmathtruncatemacro{\ii}{\i+1} + \onslide<\ii>{ + + \foreach \j in {1,...,5} + { + \draw[thick] (A-1-\i.south) to [out=-90,in=135]node[visible on=<\i->, anchor=north]{} (B-\i-\j.center); + + } + } + } + + + \end{tikzpicture} +} +\end{frame} + + +\begin{frame} + \frametitle{DSP Architecture} +\scalebox{2}{ + \begin{tikzpicture} + \node (mul) at (0,0) [circle,draw=black,inner sep=0pt,minimum size=0.5cm] {X}; + \node (mac) at (2,0) [circle,draw=black,inner sep=0pt,minimum size=0.5cm] {\textbf{+}}; + + \node at (-2,0.3) {$A[n]$}; + \node at (0.4,2) {$B[n]$}; + \node at (4,0.3) {$C[n]$}; + + \draw[thick, ->] (-2,0) --++ (mul); + \draw[thick, ->] (0,2) --++ (mul); + \draw[thick, ->] (mul) -- (mac); + \draw[thick] (mac) --++ (1,0) node (i) {}; + \draw[thick, ->] (i.center) --++ (0,1) --++ (-1,0) -- (mac); + \draw[thick, ->] (i.center) --++ (1,0); + + + \end{tikzpicture} + } +\end{frame} diff --git a/buch/papers/multiplikation/presentation/slides/slides.tex b/buch/papers/multiplikation/presentation/slides/slides.tex new file mode 100644 index 0000000..64edb86 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/slides.tex @@ -0,0 +1,15 @@ +% !TEX root = presentation.tex +\begin{frame} +\titlepage +\end{frame} +% +\section{Big $\mathcal{O}$} +\input{slides/BigO.tex} +\section{Strassen's Algorithm} +\input{slides/strassen.tex} +% \input{slides/nn.tex} +\section{Measurements} +\input{slides/meas.tex} +% \input{slides/parcomp.tex} +\section{How To Matrix Multiply} +\input{slides/blas.tex} diff --git a/buch/papers/multiplikation/presentation/slides/strassen.tex b/buch/papers/multiplikation/presentation/slides/strassen.tex new file mode 100644 index 0000000..c3398d5 --- /dev/null +++ b/buch/papers/multiplikation/presentation/slides/strassen.tex @@ -0,0 +1,429 @@ +\begin{frame} + \frametitle{Strassen's Algorithm} + \includegraphics[page=1,width=\textwidth,height=0.8\textheight,keepaspectratio]{../papers/Strassen_original_1969.pdf} + \includegraphics[page=2,width=\textwidth,height=0.8\textheight,keepaspectratio]{../papers/Strassen_original_1969.pdf} \includegraphics[page=3,width=\textwidth,height=0.8\textheight,keepaspectratio]{../papers/Strassen_original_1969.pdf} + \end{frame} + +\begin{frame} + \frametitle{Strassen's Algorithm} + \centering + \large +\onslide<1->{ + $ + \mathbf{A B = C} + $ +} + +\onslide<2->{ + + +\medskip + $ + \begin{bmatrix} + A_{11} & A_{12}\\ + A_{21} & A_{22} + \end{bmatrix} + \begin{bmatrix} + B_{11} & B_{12}\\ + B_{21} & B_{22} + \end{bmatrix} + = + \begin{bmatrix} + C_{11} & C_{12}\\ + C_{21} & C_{22} + \end{bmatrix} + $ + } + + + \onslide<3->{ + +\medskip +$ +C_{11} = A_{11} \cdot B_{11} + A_{12} \cdot B_{21} +$ + +$ +C_{12} = A_{11} \cdot B_{12} + A_{12} \cdot B_{22} +$ + +$ +C_{21} = A_{21} \cdot B_{11} + A_{22} \cdot B_{21} +$ + +$ +C_{22} = A_{21} \cdot B_{12} + A_{22} \cdot B_{22} +$ +} +\end{frame} + +\input{slides/algo.tex} + + + +\begin{frame} + \frametitle{Strassen's Algorithm} + \begin{columns} + \begin{column}{0.5\textwidth} + \onslide<1->{ + \large + \begin{math} + \begin{aligned} + \text{I} &= (A_{11} + A_{22}) \cdot (B_{11} + B_{22}) \\ + \text{II} &= (A_{21} + A_{22}) \cdot B_{11} \\ + \text{III} &= A_{11} \cdot (B_{12}-B_{22}) \\ + \text{IV} &= A_{22} \cdot (-B_{11}+B_{21}) \\ + \text{V} &= (A_{11} + A_{12}) \cdot B_{22} \\ + \text{VI} &= (-A_{11} + A_{21}) \cdot (B_{11} + B_{12}) \\ + \text{VII} &= (A_{12} - A_{22}) \cdot (B_{21} + B_{22}) \\ + \end{aligned} + \end{math} + } + \end{column} + + \begin{column}{0.5\textwidth} + \onslide<2->{ + \large + \begin{math} + \begin{aligned} + C_{11} &= \text{I} + \text{IV} - \text{V} + \text{VII} \\ + C_{21} &= \text{II} + \text{IV} \\ + C_{12} &= \text{III} + \text{V}\\ + C_{22} &= \text{I} + \text{III} - \text{II} + \text{VI} \\ + \end{aligned} + \end{math} + } + \end{column} +\end{columns} + +\onslide<3->{ + +\bigskip +\centering +\tiny +\begin{math} +\begin{aligned} + C_{11} &= (A_{11} + A_{22}) \cdot (B_{11} + B_{22}) + A_{22} \cdot (-B_{11}+B_{21}) - (A_{11} + A_{12}) \cdot B_{22} + (A_{12} - A_{22}) \cdot (B_{21} + B_{22}) \\ + C_{11} &= A_{11}B_{11} + A_{11}B_{22} + A_{22}B_{11} + A_{22}B_{22} -A_{22}B_{11}+A_{22}B_{21} - A_{11}B_{22} - A_{12}B_{22}+ A_{12}B_{21} + A_{12}B_{22} - A_{22}B_{21} - A_{22}B_{22} \\ + C_{11} &= A_{11}B_{11} + A_{12}B_{21} +\end{aligned} +\end{math} +} + +\end{frame} + + +\begin{frame} +\begin{adjustbox}{width=\textwidth} +\begin{tikzpicture}[ampersand replacement=\&] + + \foreach \i in {1,...,4} + { + \small{ + \matrix (X\i)[matrix of math nodes,nodes in empty cells, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (0,-\i*5) + { + A_{11}B_{11} \& A_{12}B_{11} \& A_{21}B_{11} \& A_{22}B_{11} \\ + A_{11}B_{21} \& A_{12}B_{21} \& A_{21}B_{21} \& A_{22}B_{21} \\ + 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, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (\j*5,-\i*5) + { + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + }; + } + } + +\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) {I}; + \node at (10,-2) {II}; + \node at (15,-2) {III}; + \node at (20,-2) {IV}; + \node at (25,-2) {V}; + \node at (30,-2) {VI}; + \node at (35,-2) {VII}; + } + + + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-1-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-2-2)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-3-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-4-2)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-1-3)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-2-4)] {}; + \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)] {}; + + \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=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=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)] {}; + \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)] {}; + \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)] {}; + \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)] {}; +\end{tikzpicture} +\end{adjustbox} +\end{frame} + + +\begin{frame} + \frametitle{Strassen's Algorithm} + \begin{columns} + \begin{column}{0.5\textwidth} + \large + \begin{math} + \begin{aligned} + \text{I} &= (A_{11} + A_{22}) \cdot (B_{11} + B_{22}) \\ + \text{II} &= (A_{21} + A_{22}) \cdot B_{11} \\ + \text{III} &= A_{11} \cdot (B_{12}-B_{22}) \\ + \text{IV} &= A_{22} \cdot (-B_{11}+B_{21}) \\ + \text{V} &= (A_{11} + A_{12}) \cdot B_{22} \\ + \text{VI} &= (-A_{11} + A_{21}) \cdot (B_{11} + B_{12}) \\ + \text{VII} &= (A_{12} - A_{22}) \cdot (B_{21} + B_{22}) \\ + \end{aligned} + \end{math} + + \end{column} + + \begin{column}{0.5\textwidth} + \large + \begin{math} + \begin{aligned} + C_{11} &= \text{I} + \text{IV} - \text{V} + \text{VII} \\ + C_{21} &= \text{II} + \text{IV} \\ + C_{12} &= \text{III} + \text{V}\\ + C_{22} &= \text{I} + \text{III} - \text{II} + \text{VI} \\ + \end{aligned} + \end{math} + + \end{column} +\end{columns} +\end{frame} + + + +\begin{frame} + \frametitle{Strassen's Algorithm} + +\begin{columns} + \begin{column}{0.5\textwidth} +\large +\begin{math} +\begin{aligned} +\text{\textbf{I}} &= (\mathbf{A_{11}} + \mathbf{A_{22}}) \cdot (\mathbf{B_{11}} + \mathbf{B_{22}}) \\ +\text{\textbf{II}} &= (\mathbf{A_{21}} + \mathbf{A_{22}}) \cdot \mathbf{B_{11}} \\ +\text{\textbf{III}} &= \mathbf{A_{11}} \cdot (\mathbf{B_{12}}-\mathbf{B_{22}}) \\ +\text{\textbf{IV}} &= \mathbf{A_{22}} \cdot (-\mathbf{B_{11}}+\mathbf{B_{21}}) \\ +\text{\textbf{V}} &= (\mathbf{A_{11}} + \mathbf{A_{12}}) \cdot \mathbf{B_{22}} \\ +\text{\textbf{VI}} &= (-\mathbf{A_{11}} + \mathbf{A_{21}}) \cdot (\mathbf{B_{11}} + \mathbf{B_{12}}) \\ +\text{\textbf{VII}} &= (\mathbf{A_{12}} - \mathbf{A_{22}}) \cdot (\mathbf{B_{21}} + \mathbf{B_{22}}) \\ +\end{aligned} +\end{math} + +\end{column} + +\begin{column}{0.5\textwidth} + \large + \begin{math} + \begin{aligned} + \mathbf{C_{11}} &= \text{\textbf{I}} + \text{\textbf{IV}} - \text{\textbf{V}} + \text{\textbf{VII}} \\ + \mathbf{C_{21}} &= \text{\textbf{II}} + \text{\textbf{IV}} \\ + \mathbf{C_{12}} &= \text{\textbf{III}} + \text{\textbf{V}}\\ + \mathbf{C_{22}} &= \text{\textbf{I}} + \text{\textbf{III}} - \text{\textbf{II}} + \text{\textbf{VI}} \\ + \end{aligned} + \end{math} + +\end{column} +\end{columns} + +\end{frame} + +\begin{frame} + \frametitle{Algorithm} + \onslide<1->{ + + \scalebox{0.45}{\parbox{\linewidth}{ + \begin{algorithm}[H]\caption{Strassen Matrix Multiplication} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{strassen}{$\textbf{A}, \textbf{B}, n$} + \If{$n = 2$} + \State $ \mathbf{C} \gets zeros((n, n))$ + \State $P \gets (A[0][0]+A[1][1])\cdot( B[0][0]+B[1][1])$ + \State $Q \gets (A[1][0]+A[1][1])\cdot B[0][0]$ + \State $R \gets A[0][0]\cdot (B[0][1]-B[1][1])$ + \State $S \gets A[1][1]\cdot (B[1][0]-B[0][0])$ + \State $T \gets (A[0][0]+A[0][1])\cdot B[1][1]$ + \State $U \gets (A[1][0]-A[0][0])\cdot (B[0][0]+B[0][1])$ + \State $V \gets (A[0][1]-A[1][1])\cdot (B[1][0]+B[1][1])$ + \State $C[0][0] \gets P+S-T+V$ + \State $C[0][1] \gets R+T$ + \State $C[1][0] \gets Q+S$ + \State $C[1][1] \gets P+R-Q+U$ + \Else + \State $ m \gets n/2$ + \State $\mathbf{A11}, \mathbf{A12}, \mathbf{A21}, \mathbf{A22} \gets \mathbf{A}[:m][:m], \mathbf{A}[:m][m:], \mathbf{A}[m:][:m], \mathbf{A}[m:][m:]$ + \State $\mathbf{B11}, \mathbf{B12}, \mathbf{B21}, \mathbf{B22} \gets \mathbf{B}[:m][:m], \mathbf{B}[:m][m:], \mathbf{B}[m:][:m], \mathbf{B}[m:][m:]$ + + \State $ \mathbf{P} \gets \text{strassen}((\mathbf{A11}+ \mathbf{A22}),(\mathbf{B11}+\mathbf{B22}), m)$ + \State $ \mathbf{Q} \gets \text{strassen}((\mathbf{A21}+ \mathbf{A22}), \mathbf{B11},m)$ + \State $ \mathbf{R} \gets \text{strassen}( \mathbf{A11},(\mathbf{B12}- \mathbf{B22}),m)$ + \State $ \mathbf{S} \gets \text{strassen}( \mathbf{A22},(\mathbf{B21}- \mathbf{B11}),m)$ + \State $ \mathbf{T} \gets \text{strassen}((\mathbf{A11}+ \mathbf{A12}), \mathbf{B22},m)$ + \State $ \mathbf{U} \gets \text{strassen}((\mathbf{A21}- \mathbf{A11}),(\mathbf{B11}+\mathbf{B12}),m)$ + \State $ \mathbf{V} \gets \text{strassen}((\mathbf{A12}- \mathbf{A22}),(\mathbf{B21}+\mathbf{B22}),m)$ + + + + \State $\mathbf{C11} \gets \mathbf{P+S-T+V}$ + \State $\mathbf{C12} \gets \mathbf{R+T}$ + \State $\mathbf{C21} \gets \mathbf{Q+S}$ + \State $\mathbf{C22} \gets \mathbf{P+R-Q+U}$ + \State $ C \gets vstack((hstack((C11, C12)), hstack((C21, C22))))$ + + \EndIf + \State \textbf{return} $\textbf{C}$ + + \EndFunction + \end{algorithmic} + \end{algorithm} + }}} +% \[ +% \mathcal{T}(n) = \left\{\begin{array}{lr} +% 1, & \text{if} n \leq 2\\ +% 7 \mathcal{T}(\frac{n}{2}) + n^2, & \text{if} n > 2\\ +% \end{array}\right\} +% \] +\only<2>{ + $ + \mathcal{T}(n) = + \begin{cases} + 1 & \text{if } n \leq 2\\ + 7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 + \end{cases} = \mathcal{O}(n^{\log_2 7})$ + +} +\only<3>{ + $ + \mathcal{T}(n) = + \begin{cases} + 1 & \text{if } n \leq 2\\ + 7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 + \end{cases} = \mathcal{O}(n^{2.81})$ + +} + +\end{frame} + +\begin{frame} + \frametitle{Algorithm} + \onslide<1->{ + + \scalebox{0.45}{\parbox{\linewidth}{ + \begin{algorithm}[H]\caption{Strassen Matrix Multiplication} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{MM}{$\textbf{A}, \textbf{B}, n$} + \If{$n = 2$} + \State $ \mathbf{C} \gets zeros((n, n))$ + \State $C[0, 0] \gets A[0][0]*B[0][0]+A[0][1]*B[1][0]$ + \State $C[0, 1] \gets A[0][0]*B[0][1]+A[0][1]*B[1][1]$ + \State $C[1, 0] \gets A[1][0]*B[0][0]+A[1][1]*B[1][0]$ + \State $C[1, 1] \gets A[1][0]*B[0][1]+A[1][1]*B[1][1]$ + \Else + \State $ m \gets n/2$ + \State $\mathbf{A11}, \mathbf{A12}, \mathbf{A21}, \mathbf{A22} \gets \mathbf{A}[:m][:m], \mathbf{A}[:m][m:], \mathbf{A}[m:][:m], \mathbf{A}[m:][m:]$ + \State $\mathbf{B11}, \mathbf{B12}, \mathbf{B21}, \mathbf{B22} \gets \mathbf{B}[:m][:m], \mathbf{B}[:m][m:], \mathbf{B}[m:][:m], \mathbf{B}[m:][m:]$ + + \State $\mathbf{C11} \gets \text{MM}(\mathbf{A11}, \mathbf{B11}) + \text{MM}(\mathbf{A12}, \mathbf{B21})$ + \State $\mathbf{C12} \gets \text{MM}(\mathbf{A11},\mathbf{B12}) + \text{MM}(\mathbf{A12},\mathbf{B22})$ + \State $\mathbf{C21} \gets \text{MM}(\mathbf{A21}, \mathbf{B11}) + \text{MM}(\mathbf{A22}, \mathbf{B21})$ + \State $\mathbf{C22} \gets \text{MM}(\mathbf{A21}, \mathbf{B12}) + \text{MM}(\mathbf{A22}, \mathbf{B22})$ + \State $ C \gets vstack((hstack((C11, C12)), hstack((C21, C22))))$ + + \EndIf + \State \textbf{return} $\textbf{C}$ + + \EndFunction + \end{algorithmic} + \end{algorithm} + \bigskip + \bigskip + \bigskip + \bigskip + \bigskip + }}} + +\only<2>{ + + + $ + \mathcal{T}(n) = + \begin{cases} + 1 & \text{if } n \leq 2\\ + 8 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 + \end{cases} = \mathcal{O}(n^{\log_2 8})$ + +} +\only<3>{ + $ + \mathcal{T}(n) = + \begin{cases} + 1 & \text{if } n \leq 2\\ + 8 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 + \end{cases} = \mathcal{O}(n^{3})$ + +} + +\end{frame} diff --git a/buch/papers/multiplikation/presentation/tikz/algo.pdf b/buch/papers/multiplikation/presentation/tikz/algo.pdf new file mode 100644 index 0000000..752f42e Binary files /dev/null and b/buch/papers/multiplikation/presentation/tikz/algo.pdf differ diff --git a/buch/papers/multiplikation/presentation/tikz/algo.tex b/buch/papers/multiplikation/presentation/tikz/algo.tex new file mode 100644 index 0000000..0b2c567 --- /dev/null +++ b/buch/papers/multiplikation/presentation/tikz/algo.tex @@ -0,0 +1,52 @@ +\documentclass[border=10pt]{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{mathrsfs} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{lipsum} +\usepackage{amscd} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{textcomp} +\usepackage{txfonts} +\usepackage[all]{xy} +\usepackage{paralist} +\usepackage[colorlinks=true]{hyperref} +\usepackage{array} +\usepackage{tikz} +\usepackage{slashed} +\usepackage{pdfpages} +\usepackage{cite} +\usepackage{url} +\usepackage{algorithm} +\usepackage[noend]{algpseudocode} +\usepackage{listings} +\usepackage{multirow} +\usepackage{color} + +\begin{document} + +\begin{algorithm}[H]\caption{Square Matrix Multiplication} + \setlength{\lineskip}{7pt} + \begin{algorithmic}[1] + \Function{MM}{$\textbf{A}, \textbf{B}, \textbf{C}, n$} + \State $sum \gets 0$ + \For{$i = 0,1,2 \dots,n-1$} + \For{$j = 0,1,2 \dots,n-1$} + \State $sum \gets 0$ + \For{$k = 0,1,2 \dots,n-1$} + \State $sum \gets sum + \textbf{A}[i][k] \cdot \textbf{B}[k][j]$ + \EndFor + \State $\textbf{C}[i][j] \gets sum $ + \EndFor + \EndFor + \EndFunction + \end{algorithmic} +\end{algorithm} +\end{document} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex new file mode 100755 index 0000000..b20a791 --- /dev/null +++ b/buch/papers/multiplikation/problemstellung.tex @@ -0,0 +1,104 @@ +% +% teil1.tex -- Beispiel-File für das Paper +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Problemstellung} +\rhead{Problemstellung} +Dank der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. +Das Ziel dieses Papers ist verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. +Wobei gezielt auf Algorithmen, welche das Problem schneller als der Standard Algorithmus L\"osen eingegangen wird. + +\subsection{Big $\mathcal{O}$ Notation} +Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus \cite{multiplikation:bigo}. +$f(x) \in \mathcal{O}(g(x))$ besagt das die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$. +Vereinfacht werden f\"ur Algorithmen die folgende Notation 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}(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}(e^n) \rightarrow f$ w\"achst exponentiell + \item usw. +\end{itemize} + +In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die Verschiedenen Laufzeiten miteinander verglichen werden. + +\begin{figure} + \center + \includegraphics[]{papers/multiplikation/images/bigo} + \caption{Verschiedene Laufzeiten} + \label{multiplikation:fig:bigo} +\end{figure} + +\subsubsection{Beispiel Algorithmen} +\paragraph{Beschr\"ankter Algorithmus} + +Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmus \ref{multiplikation:alg:b1} entnommen werden. + +\begin{algorithm}\caption{} + \label{multiplikation:alg:b1} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \Function{B1}{$a, b$} + \State \textbf{return} $a+b$ + \EndFunction + \end{algorithmic} +\end{algorithm} + +Wobei Konstanten nicht beachtet werden, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. + +\begin{algorithm}\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} + +\paragraph{Linearer Algorithmus} + +Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares $\mathcal{O}(n)$ Verhalten. + +\begin{algorithm}\caption{} + \setlength{\lineskip}{7pt} + \begin{algorithmic} + \label{multiplikation:alg:l1} + \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} + +\paragraph{Quadratischer Algorithmus} + +Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches $\mathcal{O}(n^2)$ Verhalten. + +\begin{algorithm}[H]\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} + + diff --git a/buch/papers/multiplikation/references.bib b/buch/papers/multiplikation/references.bib old mode 100644 new mode 100755 index 7149fb1..9d76e8e --- a/buch/papers/multiplikation/references.bib +++ b/buch/papers/multiplikation/references.bib @@ -33,3 +33,33 @@ url = {https://doi.org/10.1016/j.acha.2017.11.004} } +@article{multiplikation:winograd_1968, + title={A New Algorithm for Inner Product}, + volume={C-17}, + DOI={10.1109/tc.1968.227420}, + number={7}, + journal={IEEE Transactions on Computers}, + author={Winograd, S.}, + year={1968}, + pages={693–694} +} + +@article{multiplikation:strassen_1969, + title={Gaussian elimination is not optimal}, + volume={13}, + DOI={10.1007/bf02165411}, + number={4}, + journal={Numerische Mathematik}, + author={Strassen, Volker}, + year={1969}, + pages={354–356} +} + +@online{multiplikation:bigo, + title = {Big O notation}, + url = {https://en.wikipedia.org/wiki/Big_O_notation}, + date = {2021-07-27}, + year = {2021}, + month = {7}, + day = {27} +} diff --git a/buch/papers/multiplikation/teil0.tex b/buch/papers/multiplikation/teil0.tex deleted file mode 100644 index 082b7f5..0000000 --- a/buch/papers/multiplikation/teil0.tex +++ /dev/null @@ -1,22 +0,0 @@ -% -% einleitung.tex -- Beispiel-File für die Einleitung -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 0\label{multiplikation:section:teil0}} -\rhead{Teil 0} -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua \cite{multiplikation:bibtex}. -At vero eos et accusam et justo duo dolores et ea rebum. -Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum -dolor sit amet. - -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua. -At vero eos et accusam et justo duo dolores et ea rebum. Stet clita -kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit -amet. - - diff --git a/buch/papers/multiplikation/teil1.tex b/buch/papers/multiplikation/teil1.tex deleted file mode 100644 index 0a6903a..0000000 --- a/buch/papers/multiplikation/teil1.tex +++ /dev/null @@ -1,55 +0,0 @@ -% -% teil1.tex -- Beispiel-File für das Paper -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 1 -\label{multiplikation:section:teil1}} -\rhead{Problemstellung} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. -Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit -aut fugit, sed quia consequuntur magni dolores eos qui ratione -voluptatem sequi nesciunt -\begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{multiplikation:equation1} -\end{equation} -Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, -consectetur, adipisci velit, sed quia non numquam eius modi tempora -incidunt ut labore et dolore magnam aliquam quaerat voluptatem. - -Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis -suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? -Quis autem vel eum iure reprehenderit qui in ea voluptate velit -esse quam nihil molestiae consequatur, vel illum qui dolorem eum -fugiat quo voluptas nulla pariatur? - -\subsection{De finibus bonorum et malorum -\label{multiplikation:subsection:finibus}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. - -Et harum quidem rerum facilis est et expedita distinctio -\ref{multiplikation:section:loesung}. -Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil -impedit quo minus id quod maxime placeat facere possimus, omnis -voluptas assumenda est, omnis dolor repellendus -\ref{multiplikation:section:folgerung}. -Temporibus autem quibusdam et aut officiis debitis aut rerum -necessitatibus saepe eveniet ut et voluptates repudiandae sint et -molestiae non recusandae. -Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis -voluptatibus maiores alias consequatur aut perferendis doloribus -asperiores repellat. - - diff --git a/buch/papers/multiplikation/teil2.tex b/buch/papers/multiplikation/teil2.tex deleted file mode 100644 index efbf31a..0000000 --- a/buch/papers/multiplikation/teil2.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil2.tex -- Beispiel-File für teil2 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 2 -\label{multiplikation:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{multiplikation:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - diff --git a/buch/papers/multiplikation/teil3.tex b/buch/papers/multiplikation/teil3.tex deleted file mode 100644 index f58508b..0000000 --- a/buch/papers/multiplikation/teil3.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil3.tex -- Beispiel-File für Teil 3 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 3 -\label{multiplikation:section:teil3}} -\rhead{Teil 3} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{multiplikation:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - diff --git a/buch/papers/multiplikation/tikz_formulas/algo.fdb_latexmk b/buch/papers/multiplikation/tikz_formulas/algo.fdb_latexmk new file mode 100644 index 0000000..5f14129 --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo.fdb_latexmk @@ -0,0 +1,254 @@ +# Fdb version 3 +["pdflatex"] 1620305767 "algo.tex" "algo.pdf" "algo" 1621586452 + "/dev/null" 1621583990 0 d41d8cd98f00b204e9800998ecf8427e "" + "/etc/texmf/web2c/texmf.cnf" 1619433543 475 c0e671620eb5563b2130f56340a5fde8 "" + "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" + "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm" 1229303445 688 37338d6ab346c2f1466b29e195316aa4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm" 1229303445 684 3a51bd4fd9600428d5264cf25f04bb9a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs7.tfm" 1229303445 692 1b6510779f0f05e9cbf03e0f6c8361e6 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxb.tfm" 1136768653 1020 c53143d3e3747b5c1149bd9a5ecd7b55 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm" 1136768653 1056 e2202af076e43d03fc17f87e104021b0 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmb.tfm" 1136768653 4572 2c370d27bbb031f7592de9d41dc8cfca "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm" 1136768653 4452 0fd0a792eaab7113e4d4f1b941ff0367 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm" 1136768653 4640 ce59980bcbe9e6236fab46d0b5212c7e "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm" 1136768653 1004 c0e991f864f31f017ea4ff9e451b76d4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xb.tfm" 1136768653 6892 772bf8e6c154137db8568fa8a47a6ceb "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm" 1136768653 6716 6d25a377562601272906e3bfe6b2817a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm" 1136768653 1080 b674b4ba143004461509a754a0984b67 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm" 1136768653 688 f56006d6e56f46e63d9f63252958b828 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm" 1136768653 2584 cf4a6a7c2a518d47468fe29ef0913ba0 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm" 1232065820 1944 f854e259cb2839e49d4aa2949544a6e1 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm" 1136768653 1180 72784d0ee5a983fba99a0986b31b0493 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm" 1136768653 2408 aec793a3c45e495f7ad15b227c91f508 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm" 1136768653 1268 1d124f224979493f8fd017a7597ea1cd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm" 1136768653 972 2c9ffac4bbd20f91c01aaef9bf3f8710 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm" 1136768653 988 098ca7e8cc5647b9ac21b82dbdce1f01 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm" 1136768653 1084 75e807e9e71f7a312e4e1187dce5e93b "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyatip10.tfm" 1381187214 608 50246cc71b0635b0ba0a5c10a0bf4257 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybsql10.tfm" 1381187214 608 4db60f15ea23b4ec2d796c6d568a63fa "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybtip10.tfm" 1381187214 608 50246cc71b0635b0ba0a5c10a0bf4257 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycirc10.tfm" 1381187214 844 3393210079fb4ed9347e214b3bfd7c1a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmat10.tfm" 1381187214 608 f124f78ed50a1817738d2adb190cf2bd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmbt10.tfm" 1381187214 608 f124f78ed50a1817738d2adb190cf2bd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xydash10.tfm" 1381187214 984 5c01c46b93e3ba8369f3f8edc6e62aef "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyluat10.tfm" 1381187214 608 a3a3bc08980c5126ff2a7a68fb5a64ff "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xylubt10.tfm" 1381187214 608 a3a3bc08980c5126ff2a7a68fb5a64ff "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxmi.pfb" 1232065820 13806 49b888f4605a088e66b9eb4fee320a6e "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxr.pfb" 1136849748 6339 e2b78706efdc360ee6aec9b6e20211a7 "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txex.pfb" 1136849748 17531 c91f2d6943f51d7c46d6b7b9cedd50ba "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txsy.pfb" 1136849748 20336 69267d8a81bca8b24c9b42694a4a28f9 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb" 1136849748 44729 811d6c62865936705a31c797a1d5dada "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb" 1136849748 46026 6dab18b61c907687b520c72847215a68 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb" 1136849748 45458 a3faba884469519614ca56ba5f6b1de1 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xb.vf" 1136768653 2144 bab2875eda5b2344ea7b1db74ccc03a4 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xr.vf" 1136768653 2140 99e5b3a34695df6221a167ffa8b498d6 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf" 1232065820 960 cfcc9d587b40b769f64408b3ca115941 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf" 1136768653 904 e582cae2d8ae3f48a0a520440ebcdb51 "" + "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" + "/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b "" + "/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" + "/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b "" + "/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty" 1572645307 492 1994775aa15b0d1289725a0b1bbc2d4c "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty" 1572645307 480 5778104efadad304ced77548ca2184b1 "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1573336935 6902 30fdaf7dc5636b8e3afa306210c45cae "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb "" + "/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed "" + "/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1576624944 13807 952b0226d4efca026f0e19dd266dcc22 "" + "/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1576624883 18552 1e1cc7b75da0dfaacce7cdcb27d306bf "" + "/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1557692582 992 fb3cda354707a54fda62787a411c7c22 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1546728038 43820 bc6cf5aa959817914ace33f5c6232161 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1557692582 19324 c9a64402f22bd8d81821141a357af653 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1546728038 6038 d639d02574be9a72f3c602c2a3510e02 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1546728038 6948 284bbe3c9a7ca0a826c1c03895e69b9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1546728038 4883 a6f3eb1f71d8c4affaf43a169828b043 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1546728038 2544 3b1b198fd49f01e328adc9162a07b213 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1576793519 44189 1fd6229dad4c898883516c032f2ca5d2 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1546728038 17311 3092579be20ef0f229c42ad3f09da85c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1546728038 21302 d6c4b340248adbe650ebf6ca76bdccca "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1562964315 9690 7585efa5a591822837f837bc5bc35621 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1576793519 33335 942ccafe284041918d36e54696b98aa7 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1546728038 2965 502761b60f43ab2de5ecb2f4625163ae "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1546728038 5196 f8c5c775d4d6e2cb050392127cabda72 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1576793519 20726 ed6ec1d6f0f35e7a93de4e79af83dbce "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1557692582 35249 144a6b9c4df4644618bb3a0a40472608 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1546728038 21989 266e83c51fe41eb8b8d5e6896dc71cc1 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1546728038 8842 5cc856e132fac404805c6da091779283 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex" 1546728038 319 8fc6edce901e074ba09de320a8fc686b "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex" 1546728038 3986 c962be8d57437fcaf853d2babd8ed403 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex" 1546728038 4572 980c82f01c0e3983edadbbc373d304cb "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex" 1546728038 3643 4a4bd51bd85886cc39d4073af8cf77a9 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex" 1546728038 4202 e655aa2657da1088ec7745ece2876c4c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex" 1546728038 3937 20cd45386ca23052ce976464f0ada984 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex" 1546728038 919 da625675781832f2b61a7048a51ef656 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex" 1576793519 11544 2a5d66a3270abf4ef673e8a0b7734a90 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex" 1576967981 187592 7922ceab1864698dec4c84978d5b182f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex" 1546728038 31874 d843d507175f2bdfa3abf01f0349dac8 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex" 1546728038 32995 a4d54c043ae5274ceaaddeb36ad43a6f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex" 1546728038 62281 fd68e6d2c2dc178611c8f4d2d86e79ae "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1557692582 3063 8c415c68a0f3394e45cfeca0b65f6ee6 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1557692582 521 c70cf6ad609de83a27ee7929eb356332 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1557692582 13391 933cab19c6d27039dbfc487330d1005a "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1557692582 104938 15f2d8bdabd6bf9ca70f62cd8e3d4940 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1557692582 10157 218d58ab074e5bd0d027de45ec64cc00 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1576793519 28176 568b081ec39645f2db1a29fbd0c635e2 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1562964315 9054 388d21239a1b6df2cc8beaae31c976b0 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1557692582 3865 cddf7ddc80f018587c55afdcc79fc333 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1557692582 3177 27d85c44fbfe09ff3b2cf2879e3ea434 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1557692582 10925 df50b8a6e5660a585e3a2bf55726dcc8 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1562964315 7787 1750fc3f164703caf31fc8ea9218c67e "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1557692582 3379 cbd0948a550bd7a495a160ca6beee9ed "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1557692582 92405 bba89470858d7b0788a9c09331c39653 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1576793519 36526 453db1f8626a56b5ebb0fad496d6a39f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1576793519 8471 b18959397c76e1e582402ab9f592ed9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex" 1576793519 21201 46a4dded6619f990ac7347f99fbaac9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex" 1557692582 16121 9e240115374a8d489f2f786115df83a9 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex" 1576793519 43259 3e05ba63539916af2eaca603c2eda780 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1578520427 465 1f401ab1e7fc6cb7ede39e96c66531fd "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1557692582 926 70ff613fabeb70f5d1673dc0c93987bd "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1557692582 5546 3586827e6032c95512b2a6682d2979a3 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def" 1562964315 12603 c02869ea216d842c29d52fae8738264e "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1557692582 60269 e86bc0081af83a4ad47e4500ee09a2e4 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1557692582 1896 82c274ff520f9e450ccea4e3ef4edc12 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1557692582 7778 a25a32a10ca820357491d4c7b3ac02ea "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex" 1562964315 23777 cb6c8f02f87d86d621f5cb92c44f4998 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1576793519 36815 f7f1772c398f07af2cb741992963045c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex" 1562964315 37439 bd44d50aef702b03193f731207931834 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1557692582 4494 7e5ace0ccf59408f2cf63219a5d36927 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex" 1557692582 7250 03b2b9fb5fa38e7ca5cc3c45860fb210 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1576793519 28309 488ccc6c701bbdd1bf671f708757aa5c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1562964315 6286 1bd76fc45da9929ab2a64f51cba3ab6f "" + "/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex" 1403829539 2725 fc34ef3ccb37ba15a640e8fca6190bca "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex" 1417732693 19231 26434a5656c684f5ffb1f26f98006baa "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex" 1403829539 7677 6f5ce7c1124cad7ec57d05b2562bd8fe "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty" 1312310545 4692 1e1bcf75c622af1eefd9169948208302 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex" 1381187214 115380 413d5f789929a45aab7d12ce0d0aee7d "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex" 1312310545 1449 24340b6befc66d28ee1ebb657efb5892 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex" 1312310545 22657 990ce136a3cc15728ba417a2e78b25c8 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex" 1312310545 1374 43fb8dc80dd748631d78096701166d76 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex" 1312310545 4586 edd672434f45626662368282c0322160 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex" 1312310545 109670 d412ee1ff259daefee5e927172e2f9a8 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex" 1337903317 24249 186931a828664624939ab0b347e3952c "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex" 1312310545 9619 b7e4d9a6936ba2ad6119a280abde9641 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex" 1312310545 2907 1ee562fde0b53c9cd16f7a604f33fdf0 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex" 1312310545 10928 c3a572983ccc9fc596b4e9ce454d5652 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex" 1312310545 22583 25b1e7edeee41f181ee9733429da4a9c "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex" 1312310545 8442 90cb8a3b00c2081384c1ce988d2ba0a3 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex" 1312310545 39762 25a964ebb390bcfcd35c040f477eef1d "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex" 1312310545 16485 5686b19cc46d046c885428794ed9c114 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex" 1312310545 2619 1a12b316e2132654e44ba2cd21def637 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex" 1312310545 5290 e16fc85c85f64d0a5c04708bf3312d00 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex" 1312310545 18763 e61049d36bdfccb226f22e582d70d368 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex" 1312310545 1391 c8763fc8e281cb6ecf697988b6608e4a "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex" 1312310545 7008 cb768d8d63a12d35607cbb3c4e7ba163 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex" 1381187214 3689 0d51788a4141bc66ab896f7ac63495fd "" + "/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty" 1513722769 12604 3dec726c041422879dc3268237f09026 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1523134290 2211 ca7ce284ab93c8eecdc6029dc5ccbd73 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty" 1523134290 5309 0c9ef5db85b924cdbb316f080dfd826e "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1523134290 4161 7f6eb9092061a11f87d08ed13515b48d "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1580683321 85660 baee036978c7a91f4e2bba43f05e5945 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1523134290 4116 32e6abd27229755a83a8b7f18e583890 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1523134290 2432 8ff93b1137020e8f21930562a874ae66 "" + "/usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex" 1389658833 4047 82a015585c1ef210fb6750d6322afa7f "" + "/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d "" + "/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/article.cls" 1580683321 20023 e427dd9e17e239bf926ef3aab67fe35e "" + "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1581632200 4947 0c2888dd88121ae675fc6e82213623ba "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty" 1580683321 5159 892429808d9e0e2b3548aaefd9a06ed0 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1580683321 5050 8933a39ad74377accd18991c5eb90c58 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1580683321 8446 9874cccac5fee462272c582807dbbf56 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1581112666 2821 2c0928feafd5527387e29a1af774d030 "" + "/usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty" 1137109962 5327 8b3c95b5f71136add36a4a0bb1507594 "" + "/usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty" 1425427964 26218 19edeff8cdc2bcb704e8051dc55eb5a7 "" + "/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce "" + "/usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty" 1526160256 11991 c1669f88e13f8bb6243df144e456b477 "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1548974385 11128 a53805799bebfed6358fc1658a18e41f "" + "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1515537368 17334 520b9b85ad8a2a48eda3f643e27a5179 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1580683321 16932 04729abe63b66ec59ea56edcd722b058 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1580683321 9067 1b996612394a52e1efe89c8bfe8a5892 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty" 1580683321 1753 f80abc75c0e3a4915097779c2649cc98 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1580683321 3976 d7fa7d81d2870d509d25b17d0245e735 "" + "/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1579642962 50630 3d9728faf8630190cf601ce2cbe470d9 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1579642962 238752 60dd338d71b6a4ab2192131f73dc908b "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1579642962 13244 0070bcab7b5a88187847128d22faf4d8 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1579642962 14134 32b36577d311ddb6522413c7581ee968 "" + "/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty" 1137110241 300 12fa6f636b617656f2810ee82cb05015 "" + "/usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd" 1137110241 548 cc4e3557704bfed27c7002773fad6c90 "" + "/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1575152344 22520 c4c2dab203104295e1e618be7e5c0f5b "" + "/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def" 1580854751 25404 9d60f463a00d154207ec0048dee27cf0 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty" 1581719662 4381 04628f3002bdd1d9c43ef984fd60ae18 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty" 1581719662 81717 e93576ac4b24ce6e121ebd6ec6cf2893 "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" + "/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 "" + "/usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex" 1546728170 98047 c6fa29828cc60471827afe275c8bd77f "" + "/usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty" 1546638616 18060 8cf65af2c4529eed91b5d364b50d3ada "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg" 1568236792 1830 bbaba8afaf42cc048ec4d4ff73467521 "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty" 1568236792 80511 830f3f1d3ab7448dd84233e9c2f6462c "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty" 1568236792 77022 32914f01b528131c47be2a1040d3856d "" + "/usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex" 1565039202 19612 007f8469df07e9ef0f680e346cc01945 "" + "/usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex" 1565039202 7267 4d597b08b2429acaa1e526052d9509ed "" + "/usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty" 1177890616 3878 6aa7c08ff2621006e0603349e40a30a8 "" + "/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty" 1559339157 5486 a1d954b09782ba0acd8a8abfd98e1028 "" + "/usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty" 1485124581 14857 82c76ebe8f06becf69ab309565b2a0cb "" + "/usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty" 1575674318 6575 25396d208d8f2b9395d06ef315d5886c "" + "/usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty" 1580249532 54071 88f1e37dc9e1f95352061a066ed07263 "" + "/usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def" 1580249532 6418 197ed301e61ce5b7f446e70345a43a62 "" + "/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty" 1574631863 19963 36fd8e818f9f0f32e2db8413d4970122 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty" 1546728038 1090 d20f587ea9464d1841bd0d13d3ff9856 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1288312291 410 5bf12ea7330e5f12c445332a4fe9a263 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty" 1546728038 21013 e98e1aaaf40d31632787c2bd25d24b57 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty" 1546728038 989 2cf3da8e8ec55131c49389428d565e37 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty" 1203877327 339 592cf35cba3d400082b8a9a5d0199d70 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1393459310 306 0796eafca5e159e6ec2167a6d22d81b1 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1393459310 443 0b2e781830192df35c0fd357cf13e26e "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty" 1393459310 348 8927fde343487e003b01a4c2ca34073b "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1203727794 274 4cad6e665cc93ac2ac979039a94fa1e1 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1203877327 325 2bcd023400636339210573e2b3ee298b "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 "" + "/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" + "/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575674187 9715 b051d5b493d9fe5f4bc251462d039e5f "" + "/usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg" 1522098998 1015 662b4d7ad816b857a598284525f5c75e "" + "/usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls" 1522098998 28890 df75e6d37f47b7e27bff3f37375336b3 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1580683321 12560 ce3f59ceae9d9a27bfe037d6bf1d903c "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty" 1580683321 10216 5efd55f2010055e7b7875afd6a75be82 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty" 1580683321 4120 d1680a5ff60d0aea9c327e07c030f4e9 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd" 1137111002 492 e7f8afe4428797548d4301de03a1b15f "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd" 1137111002 329 6ac7e19535b9f1d64e4d8e3f77dc30a3 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd" 1137111002 312 11fe1916b0a13a81a05234a6fc7f8738 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd" 1137111002 1271 4e3afbd8e832f2f9c7f064894e6e68e4 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd" 1137111002 1242 cbf8a0d4f750f9833a0bfb05fb39f1cb "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty" 1206746551 50381 d367461010070c7a491b1f6979ab2062 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd" 1137111002 310 1b00b0b05685b816e4c6caccce437e0d "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd" 1137111002 334 87436a82076ca2e35cd305f852507afc "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd" 1137111002 310 cee07e4964749ccbc77d84fc49726a79 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd" 1137111002 310 8c5467c8932c259af51b0f116c9734bd "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd" 1137111002 310 4b5d6fe830337242ef847b3bff48ba21 "" + "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" + "/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 "" + "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1463002160 55589 34128738f682d033422ca125f82e5d62 "" + "/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty" 1417732693 4962 9c1069474ff71dbc47d5006555e352d3 "" + "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/usr/share/texmf/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1619433582 4770781 1ed1abab22da9c3e2cc82e4db562318b "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1619433611 8255863 afe1ed795207f6401d11bafd6327aa55 "" + "algo.aux" 1620305767 767 9191aef204e325cc808d7c85cedac35f "pdflatex" + "algo.out" 1620305767 43 8eacde2f35419fc00651f55d16e47ae8 "pdflatex" + "algo.tex" 1621585209 3156 4070ef1cd3442b3ab588aedcc8a306bd "" + (generated) + "algo.aux" + "algo.log" + "algo.pdf" + "algo.out" diff --git a/buch/papers/multiplikation/tikz_formulas/algo.fls b/buch/papers/multiplikation/tikz_formulas/algo.fls new file mode 100644 index 0000000..16d387b --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo.fls @@ -0,0 +1,438 @@ +PWD /home/nunigan/Documents/MSE/FS21/SeminarMatrizen/buch/papers/multiplikation/tikz_formulas +INPUT /etc/texmf/web2c/texmf.cnf +INPUT /usr/share/texmf/web2c/texmf.cnf +INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf +INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt +INPUT algo.tex +OUTPUT algo.log +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex +INPUT /dev/null +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xydash10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyatip10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybtip10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybsql10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycirc10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmat10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmbt10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyluat10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xylubt10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfint.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +INPUT algo.aux +INPUT algo.aux +OUTPUT algo.aux +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT algo.out +INPUT algo.out +INPUT algo.out +INPUT algo.out +OUTPUT algo.pdf +INPUT ./algo.out +INPUT ./algo.out +OUTPUT algo.out +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm +INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xb.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm +INPUT algo.aux +INPUT ./algo.out +INPUT ./algo.out +INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxmi.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxr.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txex.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/txsy.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb diff --git a/buch/papers/multiplikation/tikz_formulas/algo.pdf b/buch/papers/multiplikation/tikz_formulas/algo.pdf new file mode 100644 index 0000000..f711224 Binary files /dev/null and b/buch/papers/multiplikation/tikz_formulas/algo.pdf differ diff --git a/buch/papers/multiplikation/tikz_formulas/algo.tex b/buch/papers/multiplikation/tikz_formulas/algo.tex new file mode 100755 index 0000000..1e437c2 --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo.tex @@ -0,0 +1,131 @@ +\documentclass[border=10pt,varwidth]{standalone} +\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{mathrsfs} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{lipsum} +\usepackage{amscd} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{textcomp} +\usepackage{txfonts} +\usepackage[all]{xy} +\usepackage{paralist} +\usepackage[colorlinks=true]{hyperref} +\usepackage{array} +\usepackage{tikz} +\usepackage{slashed} +\usepackage{pdfpages} +\usepackage{cite} +\usepackage{url} +\usepackage{amsmath,amsfonts,amssymb} +\usepackage{tikz} +\usetikzlibrary{arrows,matrix,positioning} +\usetikzlibrary{overlay-beamer-styles} +\usetikzlibrary{matrix.skeleton} +\usetikzlibrary{automata,positioning} +\usepackage{listings} +\usepackage{multirow} +\usepackage{color} + +\begin{document} + +$ +A= +\begin{bmatrix} +A_{11} & A_{12}\\ +A_{21} & A_{22} +\end{bmatrix}, +B= +\begin{bmatrix} +B_{11} & B_{12}\\ +B_{21} & B_{22} +\end{bmatrix}, +C= +\begin{bmatrix} +C_{11} & C_{12}\\ +C_{21} & C_{22} +\end{bmatrix} +$ + +\medskip +$ +A \cdot B = C +$ + +\medskip +$ +C_{11} = A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ +C_{12} = A_{11} \cdot B_{12} + A_{12} \cdot B_{22}\\ +C_{21} = A_{21} \cdot B_{11} + A_{22} \cdot B_{21}\\ +C_{22} = A_{21} \cdot B_{12} + A_{22} \cdot B_{22} +$ + +\medskip +\begin{math} +\begin{aligned} +\text{I} &= (A_{11} + A_{22}) \cdot (B_{11} + B_{22}) \\ +\text{II} &= (A_{21} + A_{22}) \cdot B_{11} \\ +\text{III} &= A_{11} \cdot (B_{12}-B_{22}) \\ +\text{IV} &= A_{22} \cdot (-B_{11}+B_{21}) \\ +\text{V} &= (A_{11} + A_{12}) \cdot B_{22} \\ +\text{VI} &= (-A_{11} + A_{21}) \cdot (B_{11} + B_{12})) \\ +\text{VII} &= (A_{12} - A_{22}) \cdot (B_{21} + B_{22}) \\ +\end{aligned} +\end{math} + + +\medskip +\begin{math} +\begin{aligned} +C_{11} &= \text{I} + \text{IV} - \text{V} + \text{VII} \\ +C_{21} &= \text{II} + \text{IV} \\ +C_{12} &= \text{III} + \text{V}\\ +C_{22} &= \text{I} + \text{III} - \text{II} + \text{VI} \\ +\end{aligned} +\end{math} + + +\medskip +\begin{math} +\begin{aligned} +C_{11} &= \text{II} + \text{IV} \\ +C_{11} &= (A_{11} + A_{22}) \cdot (B_{11} + B_{22}) + A_{22} \cdot (-B_{11}+B_{21}) - (A_{11} + A_{12}) \cdot B_{22} + (A_{12} - A_{22}) \cdot (B_{21} + B_{22})C_{21} \\ +C_{11} &= A_{11}B_{11} + A_{11}B_{22} + A_{22}B_{11} + A_{22}B_{22} -A_{22}B_{11}+A_{22}B_{21} - A_{11}B_{22} - A_{12}B_{22}+ A_{12}B_{21} + A_{12}B_{22} - A_{22}B_{21} - A_{22}B_{22} \\ +C_{11} &= A_{11}B_{11} + A_{12}B_{21} +\end{aligned} +\end{math} + +\section{Winograd} + +$ +x_1 y_1 + x_2 y_2 = (x_1 +y_2)(y_1 + x_2)-x_1 x_2 - y_1 y_2 +$ + +$ +x = (x_1, \cdots, x_n), y=(y_1, \cdots, y_n) +$ + +\[ +\xi = \sum_{j=1}^{ \lfloor n/2 \rfloor} x_{2j-1} \cdot x_{2j} +\] + +\[ +\eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j} +\] + +\[ +\langle x,y \rangle = +\begin{cases} + \displaystyle \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{if $n$ is even}\\ +\displaystyle \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{if $n$ is odd} +\end{cases} +\] + +\end{document} diff --git a/buch/papers/multiplikation/tikz_formulas/algo_graph.fdb_latexmk b/buch/papers/multiplikation/tikz_formulas/algo_graph.fdb_latexmk new file mode 100644 index 0000000..ddfa880 --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo_graph.fdb_latexmk @@ -0,0 +1,245 @@ +# Fdb version 3 +["pdflatex"] 1621585121 "algo_graph.tex" "algo_graph.pdf" "algo_graph" 1621585184 + "/dev/null" 1621583990 0 d41d8cd98f00b204e9800998ecf8427e "" + "/etc/texmf/web2c/texmf.cnf" 1619433543 475 c0e671620eb5563b2130f56340a5fde8 "" + "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" + "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm" 1229303445 688 37338d6ab346c2f1466b29e195316aa4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm" 1229303445 684 3a51bd4fd9600428d5264cf25f04bb9a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs7.tfm" 1229303445 692 1b6510779f0f05e9cbf03e0f6c8361e6 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm" 1136768653 1056 e2202af076e43d03fc17f87e104021b0 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm" 1136768653 4452 0fd0a792eaab7113e4d4f1b941ff0367 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm" 1136768653 4640 ce59980bcbe9e6236fab46d0b5212c7e "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm" 1136768653 1004 c0e991f864f31f017ea4ff9e451b76d4 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm" 1136768653 6716 6d25a377562601272906e3bfe6b2817a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm" 1136768653 1080 b674b4ba143004461509a754a0984b67 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm" 1136768653 688 f56006d6e56f46e63d9f63252958b828 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm" 1136768653 2584 cf4a6a7c2a518d47468fe29ef0913ba0 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm" 1232065820 1944 f854e259cb2839e49d4aa2949544a6e1 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm" 1136768653 1180 72784d0ee5a983fba99a0986b31b0493 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm" 1136768653 2408 aec793a3c45e495f7ad15b227c91f508 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm" 1136768653 1268 1d124f224979493f8fd017a7597ea1cd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm" 1136768653 972 2c9ffac4bbd20f91c01aaef9bf3f8710 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm" 1136768653 988 098ca7e8cc5647b9ac21b82dbdce1f01 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm" 1136768653 1084 75e807e9e71f7a312e4e1187dce5e93b "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyatip10.tfm" 1381187214 608 50246cc71b0635b0ba0a5c10a0bf4257 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybsql10.tfm" 1381187214 608 4db60f15ea23b4ec2d796c6d568a63fa "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybtip10.tfm" 1381187214 608 50246cc71b0635b0ba0a5c10a0bf4257 "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycirc10.tfm" 1381187214 844 3393210079fb4ed9347e214b3bfd7c1a "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmat10.tfm" 1381187214 608 f124f78ed50a1817738d2adb190cf2bd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmbt10.tfm" 1381187214 608 f124f78ed50a1817738d2adb190cf2bd "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xydash10.tfm" 1381187214 984 5c01c46b93e3ba8369f3f8edc6e62aef "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyluat10.tfm" 1381187214 608 a3a3bc08980c5126ff2a7a68fb5a64ff "" + "/usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xylubt10.tfm" 1381187214 608 a3a3bc08980c5126ff2a7a68fb5a64ff "" + "/usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxr.pfb" 1136849748 6339 e2b78706efdc360ee6aec9b6e20211a7 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb" 1136849748 46026 6dab18b61c907687b520c72847215a68 "" + "/usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb" 1136849748 45458 a3faba884469519614ca56ba5f6b1de1 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xr.vf" 1136768653 2140 99e5b3a34695df6221a167ffa8b498d6 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf" 1232065820 960 cfcc9d587b40b769f64408b3ca115941 "" + "/usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf" 1136768653 904 e582cae2d8ae3f48a0a520440ebcdb51 "" + "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" + "/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b "" + "/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" + "/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b "" + "/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty" 1572645307 492 1994775aa15b0d1289725a0b1bbc2d4c "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty" 1572645307 480 5778104efadad304ced77548ca2184b1 "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1573336935 6902 30fdaf7dc5636b8e3afa306210c45cae "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb "" + "/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed "" + "/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1576624944 13807 952b0226d4efca026f0e19dd266dcc22 "" + "/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1576624883 18552 1e1cc7b75da0dfaacce7cdcb27d306bf "" + "/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex" 1557692582 992 fb3cda354707a54fda62787a411c7c22 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex" 1546728038 43820 bc6cf5aa959817914ace33f5c6232161 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex" 1557692582 19324 c9a64402f22bd8d81821141a357af653 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex" 1546728038 6038 d639d02574be9a72f3c602c2a3510e02 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex" 1546728038 6948 284bbe3c9a7ca0a826c1c03895e69b9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex" 1546728038 4883 a6f3eb1f71d8c4affaf43a169828b043 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex" 1546728038 2544 3b1b198fd49f01e328adc9162a07b213 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex" 1576793519 44189 1fd6229dad4c898883516c032f2ca5d2 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex" 1546728038 17311 3092579be20ef0f229c42ad3f09da85c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex" 1546728038 21302 d6c4b340248adbe650ebf6ca76bdccca "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex" 1562964315 9690 7585efa5a591822837f837bc5bc35621 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex" 1576793519 33335 942ccafe284041918d36e54696b98aa7 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex" 1546728038 2965 502761b60f43ab2de5ecb2f4625163ae "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex" 1546728038 5196 f8c5c775d4d6e2cb050392127cabda72 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex" 1576793519 20726 ed6ec1d6f0f35e7a93de4e79af83dbce "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex" 1557692582 35249 144a6b9c4df4644618bb3a0a40472608 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex" 1546728038 21989 266e83c51fe41eb8b8d5e6896dc71cc1 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex" 1546728038 8842 5cc856e132fac404805c6da091779283 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex" 1546728038 319 8fc6edce901e074ba09de320a8fc686b "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex" 1546728038 3986 c962be8d57437fcaf853d2babd8ed403 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex" 1546728038 4572 980c82f01c0e3983edadbbc373d304cb "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex" 1546728038 3643 4a4bd51bd85886cc39d4073af8cf77a9 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex" 1546728038 4202 e655aa2657da1088ec7745ece2876c4c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex" 1546728038 3937 20cd45386ca23052ce976464f0ada984 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex" 1546728038 919 da625675781832f2b61a7048a51ef656 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex" 1576793519 11544 2a5d66a3270abf4ef673e8a0b7734a90 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex" 1576967981 187592 7922ceab1864698dec4c84978d5b182f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex" 1546728038 31874 d843d507175f2bdfa3abf01f0349dac8 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex" 1546728038 32995 a4d54c043ae5274ceaaddeb36ad43a6f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex" 1546728038 62281 fd68e6d2c2dc178611c8f4d2d86e79ae "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfint.code.tex" 1557692582 3063 8c415c68a0f3394e45cfeca0b65f6ee6 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex" 1557692582 521 c70cf6ad609de83a27ee7929eb356332 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex" 1557692582 13391 933cab19c6d27039dbfc487330d1005a "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex" 1557692582 104938 15f2d8bdabd6bf9ca70f62cd8e3d4940 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex" 1557692582 10157 218d58ab074e5bd0d027de45ec64cc00 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex" 1576793519 28176 568b081ec39645f2db1a29fbd0c635e2 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex" 1562964315 9054 388d21239a1b6df2cc8beaae31c976b0 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex" 1557692582 3865 cddf7ddc80f018587c55afdcc79fc333 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex" 1557692582 3177 27d85c44fbfe09ff3b2cf2879e3ea434 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex" 1557692582 10925 df50b8a6e5660a585e3a2bf55726dcc8 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex" 1562964315 7787 1750fc3f164703caf31fc8ea9218c67e "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex" 1557692582 3379 cbd0948a550bd7a495a160ca6beee9ed "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex" 1557692582 92405 bba89470858d7b0788a9c09331c39653 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex" 1576793519 36526 453db1f8626a56b5ebb0fad496d6a39f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex" 1576793519 8471 b18959397c76e1e582402ab9f592ed9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex" 1576793519 21201 46a4dded6619f990ac7347f99fbaac9f "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex" 1557692582 16121 9e240115374a8d489f2f786115df83a9 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex" 1576793519 43259 3e05ba63539916af2eaca603c2eda780 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex" 1578520427 465 1f401ab1e7fc6cb7ede39e96c66531fd "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg" 1557692582 926 70ff613fabeb70f5d1673dc0c93987bd "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def" 1557692582 5546 3586827e6032c95512b2a6682d2979a3 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def" 1562964315 12603 c02869ea216d842c29d52fae8738264e "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex" 1557692582 60269 e86bc0081af83a4ad47e4500ee09a2e4 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex" 1557692582 1896 82c274ff520f9e450ccea4e3ef4edc12 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex" 1557692582 7778 a25a32a10ca820357491d4c7b3ac02ea "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex" 1562964315 23777 cb6c8f02f87d86d621f5cb92c44f4998 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex" 1576793519 36815 f7f1772c398f07af2cb741992963045c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex" 1562964315 37439 bd44d50aef702b03193f731207931834 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex" 1557692582 4494 7e5ace0ccf59408f2cf63219a5d36927 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex" 1557692582 7250 03b2b9fb5fa38e7ca5cc3c45860fb210 "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex" 1576793519 28309 488ccc6c701bbdd1bf671f708757aa5c "" + "/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def" 1562964315 6286 1bd76fc45da9929ab2a64f51cba3ab6f "" + "/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex" 1403829539 2725 fc34ef3ccb37ba15a640e8fca6190bca "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex" 1417732693 19231 26434a5656c684f5ffb1f26f98006baa "" + "/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex" 1403829539 7677 6f5ce7c1124cad7ec57d05b2562bd8fe "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty" 1312310545 4692 1e1bcf75c622af1eefd9169948208302 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex" 1381187214 115380 413d5f789929a45aab7d12ce0d0aee7d "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex" 1312310545 1449 24340b6befc66d28ee1ebb657efb5892 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex" 1312310545 22657 990ce136a3cc15728ba417a2e78b25c8 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex" 1312310545 1374 43fb8dc80dd748631d78096701166d76 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex" 1312310545 4586 edd672434f45626662368282c0322160 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex" 1312310545 109670 d412ee1ff259daefee5e927172e2f9a8 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex" 1337903317 24249 186931a828664624939ab0b347e3952c "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex" 1312310545 9619 b7e4d9a6936ba2ad6119a280abde9641 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex" 1312310545 2907 1ee562fde0b53c9cd16f7a604f33fdf0 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex" 1312310545 10928 c3a572983ccc9fc596b4e9ce454d5652 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex" 1312310545 22583 25b1e7edeee41f181ee9733429da4a9c "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex" 1312310545 8442 90cb8a3b00c2081384c1ce988d2ba0a3 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex" 1312310545 39762 25a964ebb390bcfcd35c040f477eef1d "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex" 1312310545 16485 5686b19cc46d046c885428794ed9c114 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex" 1312310545 2619 1a12b316e2132654e44ba2cd21def637 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex" 1312310545 5290 e16fc85c85f64d0a5c04708bf3312d00 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex" 1312310545 18763 e61049d36bdfccb226f22e582d70d368 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex" 1312310545 1391 c8763fc8e281cb6ecf697988b6608e4a "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex" 1312310545 7008 cb768d8d63a12d35607cbb3c4e7ba163 "" + "/usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex" 1381187214 3689 0d51788a4141bc66ab896f7ac63495fd "" + "/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty" 1513722769 12604 3dec726c041422879dc3268237f09026 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" + "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1523134290 2211 ca7ce284ab93c8eecdc6029dc5ccbd73 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty" 1523134290 5309 0c9ef5db85b924cdbb316f080dfd826e "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1523134290 4161 7f6eb9092061a11f87d08ed13515b48d "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1580683321 85660 baee036978c7a91f4e2bba43f05e5945 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1523134290 4116 32e6abd27229755a83a8b7f18e583890 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1523134290 2432 8ff93b1137020e8f21930562a874ae66 "" + "/usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex" 1389658833 4047 82a015585c1ef210fb6750d6322afa7f "" + "/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d "" + "/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/article.cls" 1580683321 20023 e427dd9e17e239bf926ef3aab67fe35e "" + "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1581632200 4947 0c2888dd88121ae675fc6e82213623ba "" + "/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty" 1580683321 5159 892429808d9e0e2b3548aaefd9a06ed0 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1580683321 5050 8933a39ad74377accd18991c5eb90c58 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1580683321 8446 9874cccac5fee462272c582807dbbf56 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1581112666 2821 2c0928feafd5527387e29a1af774d030 "" + "/usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty" 1137109962 5327 8b3c95b5f71136add36a4a0bb1507594 "" + "/usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty" 1425427964 26218 19edeff8cdc2bcb704e8051dc55eb5a7 "" + "/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce "" + "/usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty" 1526160256 11991 c1669f88e13f8bb6243df144e456b477 "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1548974385 11128 a53805799bebfed6358fc1658a18e41f "" + "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1515537368 17334 520b9b85ad8a2a48eda3f643e27a5179 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1580683321 16932 04729abe63b66ec59ea56edcd722b058 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1580683321 9067 1b996612394a52e1efe89c8bfe8a5892 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty" 1580683321 1753 f80abc75c0e3a4915097779c2649cc98 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1580683321 3976 d7fa7d81d2870d509d25b17d0245e735 "" + "/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1579642962 50630 3d9728faf8630190cf601ce2cbe470d9 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1579642962 238752 60dd338d71b6a4ab2192131f73dc908b "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1579642962 13244 0070bcab7b5a88187847128d22faf4d8 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1579642962 14134 32b36577d311ddb6522413c7581ee968 "" + "/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty" 1137110241 300 12fa6f636b617656f2810ee82cb05015 "" + "/usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd" 1137110241 548 cc4e3557704bfed27c7002773fad6c90 "" + "/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1575152344 22520 c4c2dab203104295e1e618be7e5c0f5b "" + "/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def" 1580854751 25404 9d60f463a00d154207ec0048dee27cf0 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty" 1581719662 4381 04628f3002bdd1d9c43ef984fd60ae18 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty" 1581719662 81717 e93576ac4b24ce6e121ebd6ec6cf2893 "" + "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" + "/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 "" + "/usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex" 1546728170 98047 c6fa29828cc60471827afe275c8bd77f "" + "/usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty" 1546638616 18060 8cf65af2c4529eed91b5d364b50d3ada "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg" 1568236792 1830 bbaba8afaf42cc048ec4d4ff73467521 "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty" 1568236792 80511 830f3f1d3ab7448dd84233e9c2f6462c "" + "/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty" 1568236792 77022 32914f01b528131c47be2a1040d3856d "" + "/usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex" 1565039202 19612 007f8469df07e9ef0f680e346cc01945 "" + "/usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex" 1565039202 7267 4d597b08b2429acaa1e526052d9509ed "" + "/usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty" 1177890616 3878 6aa7c08ff2621006e0603349e40a30a8 "" + "/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty" 1559339157 5486 a1d954b09782ba0acd8a8abfd98e1028 "" + "/usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty" 1485124581 14857 82c76ebe8f06becf69ab309565b2a0cb "" + "/usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty" 1575674318 6575 25396d208d8f2b9395d06ef315d5886c "" + "/usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty" 1580249532 54071 88f1e37dc9e1f95352061a066ed07263 "" + "/usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def" 1580249532 6418 197ed301e61ce5b7f446e70345a43a62 "" + "/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty" 1574631863 19963 36fd8e818f9f0f32e2db8413d4970122 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty" 1546728038 1090 d20f587ea9464d1841bd0d13d3ff9856 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty" 1288312291 410 5bf12ea7330e5f12c445332a4fe9a263 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty" 1546728038 21013 e98e1aaaf40d31632787c2bd25d24b57 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty" 1546728038 989 2cf3da8e8ec55131c49389428d565e37 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty" 1203877327 339 592cf35cba3d400082b8a9a5d0199d70 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty" 1393459310 306 0796eafca5e159e6ec2167a6d22d81b1 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty" 1393459310 443 0b2e781830192df35c0fd357cf13e26e "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty" 1393459310 348 8927fde343487e003b01a4c2ca34073b "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty" 1203727794 274 4cad6e665cc93ac2ac979039a94fa1e1 "" + "/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty" 1203877327 325 2bcd023400636339210573e2b3ee298b "" + "/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 "" + "/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" + "/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575674187 9715 b051d5b493d9fe5f4bc251462d039e5f "" + "/usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg" 1522098998 1015 662b4d7ad816b857a598284525f5c75e "" + "/usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls" 1522098998 28890 df75e6d37f47b7e27bff3f37375336b3 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1580683321 12560 ce3f59ceae9d9a27bfe037d6bf1d903c "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty" 1580683321 10216 5efd55f2010055e7b7875afd6a75be82 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty" 1580683321 4120 d1680a5ff60d0aea9c327e07c030f4e9 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd" 1137111002 492 e7f8afe4428797548d4301de03a1b15f "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd" 1137111002 329 6ac7e19535b9f1d64e4d8e3f77dc30a3 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd" 1137111002 312 11fe1916b0a13a81a05234a6fc7f8738 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd" 1137111002 1271 4e3afbd8e832f2f9c7f064894e6e68e4 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd" 1137111002 1242 cbf8a0d4f750f9833a0bfb05fb39f1cb "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty" 1206746551 50381 d367461010070c7a491b1f6979ab2062 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd" 1137111002 310 1b00b0b05685b816e4c6caccce437e0d "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd" 1137111002 334 87436a82076ca2e35cd305f852507afc "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd" 1137111002 310 cee07e4964749ccbc77d84fc49726a79 "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd" 1137111002 310 8c5467c8932c259af51b0f116c9734bd "" + "/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd" 1137111002 310 4b5d6fe830337242ef847b3bff48ba21 "" + "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" + "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1463002160 55589 34128738f682d033422ca125f82e5d62 "" + "/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty" 1417732693 4962 9c1069474ff71dbc47d5006555e352d3 "" + "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/usr/share/texmf/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1619433582 4770781 1ed1abab22da9c3e2cc82e4db562318b "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1619433611 8255863 afe1ed795207f6401d11bafd6327aa55 "" + "algo_graph.aux" 1621585123 662 b2b94621371df8d9296b8bf5bec1b851 "pdflatex" + "algo_graph.out" 1621585122 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" + "algo_graph.tex" 1621585144 5895 0e03594e6e25b7f3671b72694de0d3f4 "" + (generated) + "algo_graph.out" + "algo_graph.pdf" + "algo_graph.aux" + "algo_graph.log" diff --git a/buch/papers/multiplikation/tikz_formulas/algo_graph.fls b/buch/papers/multiplikation/tikz_formulas/algo_graph.fls new file mode 100644 index 0000000..bd1c14e --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo_graph.fls @@ -0,0 +1,485 @@ +PWD /home/nunigan/Documents/MSE/FS21/SeminarMatrizen/buch/papers/multiplikation/tikz_formulas +INPUT /etc/texmf/web2c/texmf.cnf +INPUT /usr/share/texmf/web2c/texmf.cnf +INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf +INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt +INPUT algo_graph.tex +OUTPUT algo_graph.log +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/shellesc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex +INPUT /dev/null +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/standalone/standalone.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/article.cls +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amscd.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/txfonts.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xy.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrecat.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyidioms.tex +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xydash10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyatip10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybtip10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xybsql10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycirc10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifpdf.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyall.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycurve.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyframe.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycmtip.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xytips.tex +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmat10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xycmbt10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xyluat10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/xypic/xylubt10.tfm +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyline.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyrotate.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xycolor.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xymatrix.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xyarrow.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xygraph.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-co.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-cu.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-fr.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-li.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/xypic/xypdf-ro.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/paralist/paralist.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/pgf.revision.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfint.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pgf/math/pgfmath.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/carlisle/slashed.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pdfpages.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/eso-pic/eso-pic.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdfpages/pppdftex.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/cite/cite.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/aobs-tikz/tikzlibraryoverlay-beamer-styles.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +INPUT algo_graph.aux +INPUT algo_graph.aux +OUTPUT algo_graph.aux +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omltxmi.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omstxsy.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/omxtxex.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxexa.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/jknapltx/ursfs.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs7.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd +INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT algo_graph.out +INPUT algo_graph.out +INPUT algo_graph.out +INPUT algo_graph.out +INPUT ./algo_graph.out +INPUT ./algo_graph.out +OUTPUT algo_graph.out +OUTPUT algo_graph.pdf +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdflscape/pdflscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/lscape.sty +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs5.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txex.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsya.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyb.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/rsfs/rsfs10.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txmia.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txsyc.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/txexa.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm +INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txmi.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxmi.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmri.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/txr.vf +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/t1xr.vf +INPUT algo_graph.aux +INPUT ./algo_graph.out +INPUT ./algo_graph.out +INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc +INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/txfonts/rtxr.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb +INPUT /usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb diff --git a/buch/papers/multiplikation/tikz_formulas/algo_graph.pdf b/buch/papers/multiplikation/tikz_formulas/algo_graph.pdf new file mode 100755 index 0000000..7f5a984 Binary files /dev/null and b/buch/papers/multiplikation/tikz_formulas/algo_graph.pdf differ diff --git a/buch/papers/multiplikation/tikz_formulas/algo_graph.tex b/buch/papers/multiplikation/tikz_formulas/algo_graph.tex new file mode 100755 index 0000000..ad4228b --- /dev/null +++ b/buch/papers/multiplikation/tikz_formulas/algo_graph.tex @@ -0,0 +1,140 @@ +\documentclass[border=10pt]{standalone} +\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{mathrsfs} +\usepackage{amsfonts} +\usepackage{amsthm} +\usepackage{lipsum} +\usepackage{amscd} +\usepackage{graphicx} +\usepackage{fancyhdr} +\usepackage{textcomp} +\usepackage{txfonts} +\usepackage[all]{xy} +\usepackage{paralist} +\usepackage[colorlinks=true]{hyperref} +\usepackage{array} +\usepackage{tikz} +\usepackage{slashed} +\usepackage{pdfpages} +\usepackage{cite} +\usepackage{url} +\usepackage{amsmath,amsfonts,amssymb} +\usepackage{tikz} +\usetikzlibrary{arrows,matrix,positioning} +\usetikzlibrary{overlay-beamer-styles} +\usetikzlibrary{matrix.skeleton} +\usetikzlibrary{automata,positioning} +\usepackage{listings} +\usepackage{multirow} +\usepackage{color} + +\begin{document} + +\begin{tikzpicture}[ampersand replacement=\&] + + \foreach \i in {1,...,4} + { + \small{ + \matrix (X\i)[matrix of math nodes,nodes in empty cells, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (0,-\i*5) + { + A_{11}B_{11} \& A_{12}B_{11} \& A_{21}B_{11} \& A_{22}B_{11} \\ + A_{11}B_{21} \& A_{12}B_{21} \& A_{21}B_{21} \& A_{22}B_{21} \\ + 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, + nodes = {draw, minimum size=10mm, + anchor=center, + inner sep=0pt, outer sep=0pt}, + column sep=-\pgflinewidth, + row sep=-\pgflinewidth, + ] at (\j*5,-\i*5) + { + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + \& \& \& \\ + }; + } + } + +\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) {I}; + \node at (10,-2) {II}; + \node at (15,-2) {III}; + \node at (20,-2) {IV}; + \node at (25,-2) {V}; + \node at (30,-2) {VI}; + \node at (35,-2) {VII}; + } + + + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-1-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X1-2-2)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-3-1)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X2-4-2)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-1-3)] {}; + \node[opacity=0.5, rounded corners=0pt, inner sep=-1pt, fill=green, fit=(X3-2-4)] {}; + \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)] {}; + + \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=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=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)] {}; + \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)] {}; + \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)] {}; + \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)] {}; +\end{tikzpicture} + + + +\end{document} -- cgit v1.2.1 From 5daff6cc906d9abb2a913569588a0666b4d53b4a Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 28 Jul 2021 17:52:37 +0200 Subject: rewrite some texts --- buch/papers/reedsolomon/dtf.tex | 42 ++++++++----- buch/papers/reedsolomon/figures/polynom2.pdf | Bin 20327 -> 20317 bytes buch/papers/reedsolomon/idee.tex | 73 +++++++++++++--------- buch/papers/reedsolomon/packages.tex | 2 + buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1828186 -> 1835615 bytes buch/papers/reedsolomon/tikz/polynom2.tex | 11 ++-- 6 files changed, 79 insertions(+), 49 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 73d0d12..e9aacfb 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -3,57 +3,65 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Diskrete Fourier Transformation +\section{Übertragung mit hilfe der Diskrete Fourier Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourientransformation. -Dies wird weder eine erklärung der Forientransorfmation noch ein genauer gebrauchfür den Reed-Solomon-Code. +Dies wird weder eine Erklärung der Forientransorfmation, noch ein genauer gebrauch für den Reed-Solomon-Code. Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. wobei sie dann bei späteren Berchnungen ganz nützlich ist. \subsection{Diskrete Fourietransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} -Die Diskrete Fourietransformation ist definiert als +Mit hilfe der Fourietransformation 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. +Nun zur definition der Diskrete Fourietransformation, diese ist definiert als \begin{equation} \hat{c}_{k} = \frac{1}{N} \sum_{n=0}^{N-1} {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} ,\label{reedsolomon:DFT} \end{equation} - wenn man nun \begin{equation} w = e^{-\frac{2\pi j}{N} k} \label{reedsolomon:DFT_summand} \end{equation} - ersetzte, und $N$ konstantbleibt, erhält man \begin{equation} \hat{c}_{k}= \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) \label{reedsolomon:DFT_polynom} \end{equation} - was überaust ähnlich zu unserem Polynomidee ist. -\subsection{Übertragungsabfolge + +\subsection{Beispiel \label{reedsolomon:subsection:Übertragungsabfolge}} -Der Auftrag ist nun 64 Daten zu übertragen und nach 16 Fehler abzusicheren, -16 Fehler erkennen und rekonstruieren. +Der Auftrag ist nun 64 Daten zu übertragen und nach 32 Fehler abzusicheren, +16 Fehler erkennen und rekonstruieren. + Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden. In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für schritt, -und hier werden die einzelne Schritte erklärt. +und hier werden die einzelne Schritte erklärt: \begin{enumerate}[(1)] \item Das Signal hat 64 die Daten, Zahlen welche übertragen werden sollen. Dabei zusätzlich nach 16 Fehler abgesichert, macht insgesamt 96 Übertragungszahlen. -\item Nun wurde mittels der schnellen diskreten Fourientransformation diese 96 codiert. -Das heisst alle information ist in alle Zahlenvorhanden. -\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. -\item Dieses wird nun Empfangen und mittels inversen diskreten Fourientransormation, wieder rücktransformiert. -\item Nun sieht man den Fehler im Decodieren in den Übertragungsstellen 64 bis 96. -\item Nimmt man nun nur diese Stellen 64 bis 96, auch Syndrom genannt, und Transformiert diese. -\item Bekommt man die Fehlerstellen im Locator wieder, zwar nichtso genau, dennoch erkkent man wo die Fehler stattgefunden haben. +(siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}) +Die 32 Fehlerkorrekturstellen werden als Null Übertragen +\item Nun wurde mittels der diskreten Fourientransformation diese 96 codiert. +Das heisst alle Informationen ist in alle Zahlenvorhanden. (Auch die Fehlerkorrekturstellen Null) +\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75.(die Skala ist Rechts) +Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt. +\item Dieses wird nun Empfangen und mittels inversen diskreten Fourientransormation, wieder rücktransformiert.(Iklusive der Fehler) +\item Nun sieht man den Fehler im Decodieren in den Übertragungsstellen 64 bis 96, da es dort nicht mehr Null ist. +\item Nimmt man nun nur diese Stellen 64 bis 96, dies definieren wir als Syndrom, und transformiert nur dieses Syndrom. +\item Bekommt man die Fehlerstellen wieder, zwar nichtso genau, dennoch erkennt man wo die Fehler stattgefunden haben. +Dies definieren wir als Locator. \end{enumerate} +Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert, +jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signal wieder. \begin{figure} \centering diff --git a/buch/papers/reedsolomon/figures/polynom2.pdf b/buch/papers/reedsolomon/figures/polynom2.pdf index dd6cdd3..55a50ac 100644 Binary files a/buch/papers/reedsolomon/figures/polynom2.pdf and b/buch/papers/reedsolomon/figures/polynom2.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 519e642..8ad3d27 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -1,5 +1,5 @@ % -% idee.tex -- Beispiel-File für das Paper +% idee.tex -- Polynom Idee % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % @@ -14,15 +14,19 @@ Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen. Beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, man kann sogar einige Fehler korrigieren. -Der unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage kommt hat es Fehler oder keine, -beim korrigieren muss man den Fehler erkennun und dann zusätzlich noch den original Wert rekonstruieren. -Auch eine variante wäre es die Daten nach einem Fehler einfach nochmals zu senden, was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvolll ist. \ref(reedsolomon:section:anwendung) +Der unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage beantwortet wird mit: Ist die Übertragung fehlerhaft oder nicht? +Beim Korrigieren werden Fehler erkennt und dann zusätzlich noch den original Wert rekonstruieren. +Auch eine Variante wäre es die Daten nach einem Fehler nachdem Fehlerhaften senden, nochmals versenden(auch hier wieder doppelt und dreifach Sendung), +was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. +\externaldocument{papers/reedsolomon/anwendungen} +\ref{reedsolomon:section:anwendung} +\subsection{Polynom-Ansatz +\label{reedsolomon:section:polynomansatz}} \rhead{Polynom-Ansatz} -Eine Idee ist aus den Daten -ein Polynom zu bilden. +Eine Idee ist aus den Daten ein Polynom zu bilden. Diese Polynomfunktion bei bestimmten Werten, ausrechnet und diese Punkte dann überträgt. -Nehmen wir als Beispiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, +\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, welche uns dann das Polynom \begin{equation} p(x) @@ -31,7 +35,8 @@ p(x) \label{reedsolomon:equation1} \end{equation} ergeben. -Übertragen werden nun die Werte dieses Polynomes an den Stellen 1, 2, 3\dots 7 dieses Polynomes. +Übertragen werden nun die \textcolor{darkgreen}{grünen Werte} +dieses \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 dieses Polynomes. Grafisch sieht man dies dann in Abbildung \ref{fig:polynom}, mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, \textcolor{darkgreen}{15}, \textcolor{darkgreen}{26}, @@ -39,9 +44,11 @@ mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, \textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ Wenn ein Fehler sich in die Übertragung eingeschlichen hat, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. +Die Farbe blau brauchen wir für die \textcolor{blue}{Daten} welche wir mit der Farbe grün \textcolor{darkgreen}{Übermitteln}. +\end{beispiel} -\subsection{Beispiel} -Für das Beispiel aus der Gleichung \eqref{reedsolomon:equation1}, +\begin{beispiel} +Aus der Gleichung \eqref{reedsolomon:equation1}, ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. Hat es Fehler in der Übertragunge gegeben,(Bei Abbildung \ref{fig:polynom}\textcolor{red}{roten Punkte}) kann man diese erkennen, da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. @@ -51,29 +58,40 @@ Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, gegenüber dem mit 5 Punkten falsch liegt.\ref{fig:polynom} Werden es mehr Fehler kann nur erkennt werden, dass das Polynom nicht stimmt. Das orginale Polynom kann aber nicht mehr gefunden werden. -Dafür sind mehr übertragene Werte nötig. +Da das Konkurenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleited. +Um das Konkurenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig. +\end{beispiel} \begin{figure} \centering \includegraphics[width=\textwidth]{papers/reedsolomon/figures/polynom2} - %\input{papers/reedsolomon/images/polynom2.tex} - \caption{Polynom $p(x)$ \eqref{reedsolomon:equation1}} + %\input{papers/reedsolomon/tikz/polynom2.tex} + \caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} -\section{Fehlerbestimmung -\label{reedsolomon:section:Fehlerbestimmmung}} -So wird ein Muster indentifiziert, welches genau vorherbestimmen kann, -wie gross das Polynom sein muss und wie viele Übertragungspunkte gegeben werden müssen. -Um zu bestimmen wie viel Fehler erkennt und korriegiert werden können. -Die Anzahl Zahlen (Daten, ab hier verwenden wir das Wort Nutzlast), -die Entschlüsselt werden sollen, brauchen die gleiche Anzahl an Polynomgraden, beginnend bei Grad 0. ( \( k-1 \) ) -Für die Anzahl an Übertragungspunkte, muss bestimmt werden wieviel Fehler erkennt und korrigiert werden sollen. -Mit Hilfe der Tabelle, sieht man das es bei $t$ Fehlern und $k$ Nutzlast Zahlen, -$k+2t$ Punkte übertragen werden müssen. +\section{Fehlerkorekturstellen bestimmen +\label{reedsolomon:section:Fehlerkorrekturstellen}} +Um zu bestimmen wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, die dann Fehler korrigieren, +muss man zuerst Wissen wieviel \textcolor{blue}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. +Die Anzahl \textcolor{blue}{Daten} (ab hier verwenden wir das Wort Nutzlast), die als Polynomkoeffizente $k$ übergeben werden, +brauchen die gleiche Anzahl an Polynomgraden, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. +Für die Anzahl der Fehler $t$, welche korrigiert werden können, gehen wir zum Beispiel. +\begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir 7 \textcolor{darkgreen}{Übertragungspunkte} senden. +Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurenzpolynom, +maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurenzpolynom ist das gleiche wie das Original. +Somit können wir nun bestimmen, dass von den \textcolor{darkgreen}{7 Übertragungspunkten$u$} bis zu 2 Fehler korrigiert werden können und 4 Übertragungspunkte zusätzlich gesendet werden müssen. +\end{beispiel} +Durch das erkennen des Schemas in der Tabelle\ref{tabel:fehlerkorrekturstellen} +\begin{equation} + \frac{\textcolor{darkgreen}{u}-\textcolor{blue}{k}}{\textcolor{red}{t}} + =2 + \label{reedsolomon:equation2} +\end{equation} +zeigt sich das es $k+2t$ Übertragungspunkte braucht. \begin{center} - \begin{tabular}{ c c c } + \begin{tabular}{ c c | c} \hline Nutzlas & Fehler & Übertragen \\ \hline @@ -84,12 +102,11 @@ $k+2t$ Punkte übertragen werden müssen. $k$ & $t$ & $k+2t$ Werte eines Polynoms vom Grad $k-1$ \\ \hline \end{tabular} + Fehlerkorrekturstellen Bestimmung TODO: Tabellenreferenz + \label{tabel:fehlerkorrekturstellen} \end{center} -Ein toller Nebeneffekt ist das dadurch auch $2t$ Fehler erkannt werden. -Um zurück auf unser Beispiel zu kommen, -können von den 7 Übertragungspunkten bis zu $2t = 2\cdot2 = 4 $ Punkten falsch liegen -und es wird kein eindeutiges Polynom zweiten Grades erkannt, und somit die Nutzlast Daten als fehlerhaft deklariert. +Ein Nebeneffekt ist das dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. Um aus den Übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden, doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und Fehleranfällig. diff --git a/buch/papers/reedsolomon/packages.tex b/buch/papers/reedsolomon/packages.tex index b84e228..40c6ea3 100644 --- a/buch/papers/reedsolomon/packages.tex +++ b/buch/papers/reedsolomon/packages.tex @@ -10,3 +10,5 @@ \usepackage{pgfplots} \usepackage{filecontents} +\usepackage{xr} + diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index a984f35..1f2f0b9 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ diff --git a/buch/papers/reedsolomon/tikz/polynom2.tex b/buch/papers/reedsolomon/tikz/polynom2.tex index 456e067..47dc679 100644 --- a/buch/papers/reedsolomon/tikz/polynom2.tex +++ b/buch/papers/reedsolomon/tikz/polynom2.tex @@ -29,9 +29,14 @@ \def\hellpunkt#1{ \fill[color=lightgray] #1 circle[radius=0.08]; - \draw #1 circle[radius=0.07]; + \draw[gray] #1 circle[ radius=0.07]; } + \draw[color=gray,line width=1pt,dashed] + plot[domain=0.5:7, samples=100] + ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); + + \punkt{(1,8/\teiler)} \hellpunkt{(2,15/\teiler)} \hellpunkt{(3,26/\teiler)} @@ -40,9 +45,7 @@ \punkt{(6,83/\teiler)} \punkt{(7,110/\teiler)} - \draw[color=gray,line width=1pt,dashed] - plot[domain=0.5:7, samples=100] - ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); + \def\erpunkt#1{ \fill[color=red] #1 circle[radius=0.08]; -- cgit v1.2.1 From e26cac3a7ed4957e7ed3cfae4f0fc2281e4b1514 Mon Sep 17 00:00:00 2001 From: tim30b Date: Wed, 28 Jul 2021 17:59:59 +0200 Subject: fix intro Kristalle --- buch/papers/punktgruppen/crystals.tex | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 18b8395..88e683f 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -1,9 +1,7 @@ \section{Kristalle} -% TODO: einleitung sollte noch an das ende von der Symmetrie angepasst werden -% TODO: sich jeder => paper sprache -Unter dem Begriff Kristall sollte sich jeder ein Bild machen können. -Wir werden uns aber nicht auf sein Äusseres fokussieren, sondern was ihn im Inneren ausmacht. -Die Innereien eines Kristalles sind glücklicherweise relativ einfach definiert. +Eine nicht allzu häufig gestellte Frage ist, wie ein Kristall definiert ist. +Um zu klären, was ein Kristall mit Symmetrien zu tun hat, ist genau diese Frage äusserst relevant. +Glücklicherweise ist das Innere eines Kristalles relativ einfach definiert. \begin{definition}[Kristall] Ein Kristall besteht aus Atomen, welche sich in einem Muster arrangieren, welches sich in drei Dimensionen periodisch wiederholt. \end{definition} @@ -81,8 +79,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. An der neuen Position \(B\) von \(A'\) muss also auch ein Punkt des Gitters sein, um die Rotationssymmetrie zu erfüllen. \item \(B\) ist unser Name für diesen neuen Punkt. Da auch die Eigenschaften des Kristallgitters periodisch mit dem Gitter sein müssen, dürfen wir \(C_n\) auch auf \(A'\) anwenden. - Also wenden wir \(C_n\) invertiert\footnote{Eine Rotationssymmetrie muss auch in die inverse Richtung funktionieren.} - auch auf \(A'\) an. + Also wenden wir \(C_n^{-1}\) auch auf \(A'\) an. Dies dreht \(A\) auf einen neuen Punkt. \item \(B'\) ist kein zufälliger Name für diesen neuen Punkt, denn wir wissen, dass zwischen allen Punkten eine Translationssymmetrie bestehen muss. Die Translationssymmetrie zwischen \(B\) und \(B'\) ist hier als \(\vec{Q}'\) bezeichnet. -- cgit v1.2.1 From 4d8e9b6051dcd25c34b6270c1fc1938668e7df6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 28 Jul 2021 18:05:37 +0200 Subject: fix files broken by JODBaer pull request --- buch/papers/erdbeben/teil0.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/erdbeben/teil0.tex b/buch/papers/erdbeben/teil0.tex index c099340..c985713 100644 --- a/buch/papers/erdbeben/teil0.tex +++ b/buch/papers/erdbeben/teil0.tex @@ -74,7 +74,7 @@ Dazu wird ein Zustandsvektor definiert: \[ \left(\begin{array}{c} {s_1} \\ {s_2} \\ {f} \end{array}\right). \] -Durch Rücksubstituion ergibt sich uns folgende Systemgleichung in Matrix schreibweise, , wobei $\sot {s_1}= v$ ist: +Durch Rücksubstituion ergibt sich uns folgende Systemgleichung in Matrix schreibweise, , wobei $\dot {s_1}= v$ ist: \begin{equation} \frac{d}{dt} \left(\begin{array}{c} s(t) \\ v(t) \\ f(t) \end{array}\right) = \left( \begin{array}{ccc} -- cgit v1.2.1 From a69eeb70b01b71089c31fb23654d38898ae26f44 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 28 Jul 2021 18:06:44 +0200 Subject: Fix symmetry paragraph and schonflies symbols --- buch/papers/punktgruppen/crystals.tex | 10 +++++----- buch/papers/punktgruppen/symmetry.tex | 7 +++---- 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 88e683f..21c322d 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -88,7 +88,7 @@ solange wir ein unendlich grosses Kristallgitter verschieben. Wir beginnen, indem wir die Länge der Verschiebung \(|\vec{Q}| = Q\) setzen und \(|\vec{Q}'| = Q'\). Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\). Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes Vielfaches von \(\vec{Q}\) sein. - Demnach ist auch die Länge + Demnach auch die Länge \[ Q' = nQ = Q + 2x . \] @@ -140,7 +140,7 @@ Im vorausgegangenen Abschnitt wurde gezeigt, dass in einem zweidimensionalen Kri \subsubsection{Schönflies-Symbolik} -Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schöönflies-Symbol bezeichnet. +Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. @@ -151,10 +151,10 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkass \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. - Wie zum Beispiel ein Inversionszentrum\footnote{Ein Objekt mit Inversionszentrum ist Punktsymmetrisch im Inversionszentrum.} \(i\) oder eine horizontale\footnote{Als Orientierungspunkt wird die Symmetrieachse höchster Ordnung (\(n\)) als vertikal definiert} Spiegelachse \(h\). - \item Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. - \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. + Wie zum Beispiel ein Inversionszentrum \(i\) oder eine horizontale Spiegelachse \(h\). \end{itemize} +Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. + \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index a5b2fe2..0805d8b 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -28,16 +28,15 @@ Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-examp Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - %% TODO - Seien \(g\) und \(h\) umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen. + Seien \(g\) und \(h\) umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen, sogenannte Symmetrieoperationen. Die Komposition \(h\circ g\) definieren wir als die Anwendung der Operationen nacheinander. Alle möglichen Symmetrieoperationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt wird. \end{definition} Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. -\(\mathds{1}\) ist auch äquivalent dazu, eine Operation anzuwenden und sie dann rückgängig zu machen (ihre Inverse anzuwenden). -%% TODO +Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die intuitiv rückgängig macht, was \(g\) getan hat. +Somit ist \(\mathds{1}\) auch äquivalent dazu, eine Operation und dann ihre Inverse anzuwenden. Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, sie wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. Die Verwendung einer multiplikativen Schreibweise ermöglicht es, einige Ausdrücke kompakter zu schreiben, z.B. -- cgit v1.2.1 From 7c0959264d5f9ed56fc50f38fef859aa61671c5b Mon Sep 17 00:00:00 2001 From: tim30b Date: Wed, 28 Jul 2021 18:55:05 +0200 Subject: =?UTF-8?q?rewrite=20sch=C3=B6nflies=20first=20two=20points?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/punktgruppen/crystals.tex | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 21c322d..705dbe5 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -143,13 +143,11 @@ Im vorausgegangenen Abschnitt wurde gezeigt, dass in einem zweidimensionalen Kri Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. - Da nicht alle Symmetriegruppen in Kristallen möglich sind, werden nicht alle Untergruppen von Schönflies verwendet. \begin{itemize} - \item Es ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\). - Für die eindeutige zuweisung in eine Kristallklasse werden noch identifizierende Merkmale als Subskript notiert. - Bei der Untergruppe \(C\) werden beispielsweise die möglichen Rotationssymmetrien gezeigt. - \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. - Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. + \item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden. + Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles. + \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:Kristallkassen} auf \(C\) nur ganz bestimmte Subskripte folgen. Ist im Subskript eine Zahl \(n\) zu finden, symbolisiert \(n\), dass es sich um eine \(n\)-fache Symmetrie handelt. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Wie zum Beispiel ein Inversionszentrum \(i\) oder eine horizontale Spiegelachse \(h\). \end{itemize} -- cgit v1.2.1 From f2fdb2ec6ebef72d604e1919f6fe76b1158a308b Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 28 Jul 2021 18:55:35 +0200 Subject: Wrong schonflies symbol in stereographic projections --- buch/papers/punktgruppen/figures/projections.pdf | Bin 26440 -> 27957 bytes buch/papers/punktgruppen/tikz/projections.tex | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index bc04313..9dc3796 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ diff --git a/buch/papers/punktgruppen/tikz/projections.tex b/buch/papers/punktgruppen/tikz/projections.tex index 64ab468..e8a4a2e 100644 --- a/buch/papers/punktgruppen/tikz/projections.tex +++ b/buch/papers/punktgruppen/tikz/projections.tex @@ -44,7 +44,7 @@ \node[classcirc] (C2h) {} node[classlabel] {\(C_{2h}\)}; & \node[classcirc] (D2) {} node[classlabel] {\(D_{2}\)}; \\ - \node[classcirc] (D3d) {} node[classlabel] {\(D_{3d}\)}; & + \node[classcirc] (D3d) {} node[classlabel] {\(C_{3v}\)}; & \node[classcirc] (C2v) {} node[classlabel] {\(C_{2v}\)}; & \node[classcirc] (D2h) {} node[classlabel] {\(D_{2h}\)}; & \node[classcirc] (D3) {} node[classlabel] {\(D_{3}\)}; & -- cgit v1.2.1 From b7c2d5a19112e5bb5859797bd36c982f1ac2116a Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 28 Jul 2021 18:56:33 +0200 Subject: On subscripts --- buch/papers/punktgruppen/crystals.tex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 21c322d..ae48b0a 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -21,7 +21,7 @@ Die eingezeichneten Vektoren \(\vec{a}_1\) und \(\vec{a}_2\) sind die kleinstmö Wird ein beliebiger grauer Gitterpunkt in \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 \[ - \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i + \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i \] erreicht werden sofern \(n_1,n_2,n_3 \in \mathbb{Z}\) sind. Sind die Vektoren \(\vec{a}_1\), \(\vec{a}_2\), \(\vec{a}_3\) gegeben, ist ein Kristallgitter eindeutig beschrieben, weswegen sie auch als Grundvektoren bekannt sind. @@ -151,7 +151,10 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkass \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso auf \(C\) nur ganz bestimmte Subskripte folgen, weil das Subskript \(n\) von \(C_n\) zeigt, dass es sich um eine \(n\)-fache Rotationssymmetrie handelt. Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} in einem Kristall keine mögliche Rotationssymmetrie ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. - Wie zum Beispiel ein Inversionszentrum \(i\) oder eine horizontale Spiegelachse \(h\). + \begin{itemize} + \item Der Subskript \(h\) bezeichnet eine horizontale Spiegelebene, während \(v\) eine Symmetrieebene. Eine Symmetrieebene ist eine Spiegelebene, die sich mit der Symmetrie dreht. \(C_{3v}\) hat zum Beispiel eine vertikale Spiegelebene, die als 3 Spiegelebenen erscheint, weil es eine 3-fache Drehung gibt. + \item + \end{itemize} \end{itemize} Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. \(C_{3i}\) beschreibt genau das selbe wie \(S_6\), da eine dreifache Rotationssymmetrie mit einem Inversionszentrum einer sechsfachen Drehspiegelsymmetrie entspricht. -- cgit v1.2.1 From 0bf83875f83587d3a36ddfb1e6c1b65c9ccf4855 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 28 Jul 2021 20:03:32 +0200 Subject: Subscripts for schoenflies notation --- buch/papers/punktgruppen/crystals.tex | 26 +++++++++++++++-------- buch/papers/punktgruppen/figures/projections.pdf | Bin 27957 -> 27957 bytes 2 files changed, 17 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index befdb46..ce09063 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -127,7 +127,7 @@ ein. Im vorausgegangenen Abschnitt wurde gezeigt, dass in einem zweidimensionalen Kristallgitter nicht alle Symmetrien möglich sind. Mit weiteren ähnlichen Überlegungen kann gezeigt werden, dass Kristalle im dreidimensionalen Raum nur auf genau 32 Arten rein punktsymmetrische Symmetriegruppen bilden können. Diese 32 möglichen Symmetriegruppen scheinen durchaus relevant zu sein, denn sie werden unter anderem als Kristallklassen bezeichnet. - Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen. + Die 32 möglichen Kristallklassen sind auf Abbildung \ref{fig:punktgruppen:kristallklassen} zu sehen. Die Darstellung von dreidimensionalen Punktsymmetrien wurde mit der stereographischen Projektion ermöglicht (siehe Abbildung \ref{fig:punktgruppen:stereographic-projections}), wobei die gestrichelten Klassen aus Gründen der Überschaubarkeit nicht im Detail gezeichnet wurden. @@ -135,23 +135,31 @@ Im vorausgegangenen Abschnitt wurde gezeigt, dass in einem zweidimensionalen Kri \centering \includegraphics[]{papers/punktgruppen/figures/projections} \caption{Kristallklassen mit zugehörigem Schönflies-Symbol} - \label{fig:punktgruppen:Kristallkassen} + \label{fig:punktgruppen:kristallklassen} \end{figure} \subsubsection{Schönflies-Symbolik} -Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} ist mit ihrem zugehörigen Schönflies-Symbol bezeichnet. +Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:kristallklassen} ist mit ihrem zugehörigen Schönflies-Symbol bezeichnet. Die Schönflies-Symbolik stammt von dem Mathematiker Arthur Moritz Schönflies, welcher sich unter anderem mit der Klasifizierung der Punktgruppen auseinandergesetzt hat. - Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:Kristallkassen} zu sehen sind. + Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:kristallklassen} zu sehen sind. \begin{itemize} \item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden. - Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles. - \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:Kristallkassen} auf \(C\) nur ganz bestimmte Subskripte folgen. Ist im Subskript eine Zahl \(n\) zu finden, symbolisiert \(n\), dass es sich um eine \(n\)-fache Symmetrie handelt. - Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:Kristallkassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. + Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher für uns nicht relevant. + \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. + Ist im Subskript eine Zahl \(n\) zu finden, steht dies für eine \(n\)-fache Symmetrie. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. + Für die folgenden Betrachtungen müssen wir uns Abbildung \ref{fig:punktgruppen:kristallklassen} genauer ansehen. + Dabei ist mit horizontal flach auf dem Papier gemeint. \begin{itemize} - \item Der Subskript \(h\) bezeichnet eine horizontale Spiegelebene, während \(v\) eine Symmetrieebene. Eine Symmetrieebene ist eine Spiegelebene, die sich mit der Symmetrie dreht. \(C_{3v}\) hat zum Beispiel eine vertikale Spiegelebene, die als 3 Spiegelebenen erscheint, weil es eine 3-fache Drehung gibt. - \item + \item[\(h\)] bezeichnet eine horizontale Spiegelebene und + \item[\(v\)] eine Symmetrieebene, was eine Spiegelebene ist, die sich mit der Symmetrie mitdreht. + Zum Beispiel hat \(C_{3v}\) eine vertikale Spiegelebene, die durch die 3-fache Drehsymmetrie als 3 Spiegelebenen erscheinen. + \item[\(s\)] ist ein spezielles Subskript um die beiden Symmetriegruppen \(C_{1v}\) und \(C_{1h}\) zu beschreiben, weil \(C_{1v} = C_{1h}\). + \item[\(d\)] symbolisiert eine diagonale Symmetrieebene. + Es wird ersichtlich wie diagonal gemeint ist, wenn man \(D_2\) zu \(D_{2d}\) vergleicht. + \item[\(i\)] steht für ein Inversionszentrum. Hat eine Symmetriegruppe ein Inversionszentrum, bedeutet dies dass sie im Ursprung punktsymmetrisch ist. \end{itemize} \end{itemize} Zu beachten ist jedoch, dass manche Symmetriegruppen mit mehreren Schönflies-Symbolen beschieben werden können. diff --git a/buch/papers/punktgruppen/figures/projections.pdf b/buch/papers/punktgruppen/figures/projections.pdf index 9dc3796..202fc8d 100644 Binary files a/buch/papers/punktgruppen/figures/projections.pdf and b/buch/papers/punktgruppen/figures/projections.pdf differ -- cgit v1.2.1 From 5c9bc9221d54daecf885b8e66286a5f13406e47b Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Wed, 28 Jul 2021 20:27:50 +0200 Subject: Diverse Anpassungen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Typos - Integration von Formeln in Sätze - \dot zu \dots --- buch/papers/verkehr/section1.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 416e311..6ac86ad 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -84,15 +84,15 @@ Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseina -Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dot n\right\}\end{equation} +Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dots n\right\}\end{equation} Beim PageRank-Algorithmus wird eine abgewandelte Form der Adjazenz-Matrix verwendet. -Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt. -\[ P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \] +Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt: +\( P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \) Anschliessend multipliziert man diese Matrix $P$ mit einem Spaltenvektor $\Vec{r_0}$ mit $n$ Einträgen, für welchen gilt: -\[ \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dot n\right\} \] +\( \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dots n\right\} \) Dieser Vektor stellt ein neutrales Ranking dar. Alle Knoten werden gleich gewichtet. -Dadurch erhält man wiederum einen $n$-zeiligen Spaltenvektor $\Vec{r_1}$, der das ``erste" Ranking darstellt. Durch Multiplikation der ursprünglichen Matrix $P$ mit dem 1. Ranking-Vektor $\Vec{r_1}$ wird auf Basis des ersten Rankings ein zweites erstellt. -\[ \Vec{r_2} = P\cdot\Vec{r_1} = P\cdot(P\cdot\Vec{r_0}) = P^2\cdot\Vec{r_0}\] -somit -\begin{equation} \Vec{r_i} = P^i\cdot\Vec{r_0}\end{equation} +Dadurch erhält man wiederum einen $n$-zeiligen Spaltenvektor $\Vec{r_1}$, der das ``erste'' Ranking darstellt. Durch Multiplikation der ursprünglichen Matrix $P$ mit dem 1. Ranking-Vektor $\Vec{r_1}$ wird auf Basis des ersten Rankings ein zweites erstellt: +\( \Vec{r_2} = P\cdot\Vec{r_1} = P\cdot(P\cdot\Vec{r_0}) = P^2\cdot\Vec{r_0}\) +und somit allgemein: +\( \Vec{r_i} = P^i\cdot\Vec{r_0}\) Der Vektor $\Vec{r_i}$ konvergiert zu einem Eigenvektor von $P$ der das abschliessende Ranking darstellt. -- cgit v1.2.1 From 98e861762b2c70c04209f88222e8d5ff3437eb91 Mon Sep 17 00:00:00 2001 From: tim30b Date: Wed, 28 Jul 2021 22:13:15 +0200 Subject: small adjustments in intro --- buch/papers/punktgruppen/intro.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index b6a72b5..7b3c6e3 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -1,6 +1,6 @@ \section{Einleitung} Es gibt viele Möglichkeiten sich in Kristallen zu verlieren. -Auch wen man nur die mathematischen Betrachtungsweisen berücksichtigt, +Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. Zu Beginn werden wir zeigen was eine Symmetrie ausmacht und @@ -15,9 +15,9 @@ und sich kategorisieren lassen. Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. -Die Piezoelektrizität ist vielleicht noch nicht jedem bekannt, -sie versteckt sich aber in diversen Altagsgegenständen -zum Beispiel sorgen sie in den meisten Feuerzeugen für die Zündung. +Piezoelektrizität ist kein weit verbreiteter Begriff, +jedoch beschreibt er ein Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. +Wie zum Beispiel sorgen er in den allermeisten Feuerzeugen für die Zündung. Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. -- cgit v1.2.1 From a4817013b542cd6aa1a0cd955806c82ac337dca6 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Wed, 28 Jul 2021 22:27:27 +0200 Subject: added corrections from prof mueller --- buch/papers/multiplikation/einlteung.tex | 20 +++--- buch/papers/multiplikation/images/bigo.pdf | Bin 24288 -> 26821 bytes buch/papers/multiplikation/images/bigo.tex | 36 ++++++----- buch/papers/multiplikation/images/strassen.pdf | Bin 15850 -> 19970 bytes buch/papers/multiplikation/images/strassen.tex | 14 ++--- buch/papers/multiplikation/loesungsmethoden.tex | 80 ++++++++++++------------ buch/papers/multiplikation/problemstellung.tex | 27 ++++---- buch/papers/multiplikation/references.bib | 20 ++++++ 8 files changed, 113 insertions(+), 84 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index bc4bfcf..ea71d91 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -17,14 +17,8 @@ Koeffizienten c_{ij} = \sum_{k=1}^n a_{ik} b_{kj}. \label{multiplikation:eq:MM} \end{equation} -Grafisch kann die Matrizenmultiplikation $AB=C$ wie in \ref{multiplikation:fig:mm_viz} visualisiert werden. -\begin{figure} - \center - \includegraphics[]{papers/multiplikation/images/mm_visualisation} - \caption{Matrizen Multiplikation} - \label{multiplikation:fig:mm_viz} -\end{figure} -Im Fall einer Matrizengr\"osse von $2\times 2$ +Grafisch kann die Matrizenmultiplikation $\mathbf{AB}=\mathbf{C}$ wie in \ref{multiplikation:fig:mm_viz} visualisiert werden. +Im Fall einer Matrizengr\"osse von $2\times 2$ kann die Matrixgleichung \begin{equation} \begin{bmatrix} A_{11} & A_{12}\\ @@ -40,7 +34,7 @@ C_{11} & C_{12}\\ C_{21} & C_{22} \end{bmatrix} \end{equation} -kann die Gleichung der einzelnen Terme +explizt als Gleichung \begin{equation} \label{multiplikation:eq:MM_exp} \begin{split} C_{11} &= A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ @@ -49,4 +43,10 @@ C_{21} &= A_{21} \cdot B_{11} + A_{22} \cdot B_{21}\\ C_{22} &= A_{21} \cdot B_{12} + A_{22} \cdot B_{22} \end{split} \end{equation} -explizit geschrieben werden. +der einzelnen Terme geschrieben werden. +\begin{figure} + \center + \includegraphics[]{papers/multiplikation/images/mm_visualisation} + \caption{Matrizen Multiplikation} + \label{multiplikation:fig:mm_viz} +\end{figure} \ No newline at end of file diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf index dfa2ba4..a2599fa 100644 Binary files a/buch/papers/multiplikation/images/bigo.pdf and b/buch/papers/multiplikation/images/bigo.pdf differ diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex index e3293e4..71826f5 100644 --- a/buch/papers/multiplikation/images/bigo.tex +++ b/buch/papers/multiplikation/images/bigo.tex @@ -39,67 +39,73 @@ \begin{document} \begin{tikzpicture} + \begin{axis}[ - axis lines = left, + xmode=log, + ymode=log, + log ticks with fixed point, xlabel = $n$ (Data Input), ylabel = {$t$ (time)}, legend pos=north east, very thick, - ymax = 500, + grid=minor, + ymax = 100000, + ymin = 0.5, + xmin = 1, yticklabels=\empty, xticklabels=\empty, scale only axis=true, width=12cm, height=6cm, ] \addplot [ - domain= 1:20, + domain= 1:50, samples=100, color=red, ] {1}; \addlegendentry{$\mathcal{O}(1)$} \addplot [ - domain= 1:20, + domain= 1:50, samples=100, color=green, ] {x}; \addlegendentry{$\mathcal{O}(n)$} \addplot [ - domain= 1:20, + domain= 1:50, samples=100, color=blue, ] {x^2}; -\addlegendentry{$\mathcal{O}(n^2)$} +\addlegendentry{$\mathcal{O}\left(n^2\right)$} \addplot [ - domain= 1:10, + domain= 1:50, samples=100, color=purple, ] {x^3}; -\addlegendentry{$\mathcal{O}(n^3)$} +\addlegendentry{$\mathcal{O}\left(n^3\right)$} \addplot [ - domain= 1:10, + domain= 1:50, samples=100, color=black, ] -{exp(x)}; -\addlegendentry{$\mathcal{O}(e^n)$} +{exp(x) - 1.7}; +\addlegendentry{$\mathcal{O}\left(e^n\right)$} \addplot [ - domain= 1:20, + domain= 1:50, samples=100, color=orange, ] -{log2(x)}; +{log2(x)+1}; \addlegendentry{$\mathcal{O}(\log n)$} \addplot [ - domain= 1:20, + domain= 1:50, samples=100, color=gray, ] -{x*log2(x)}; +{x*log2(x)+1}; \addlegendentry{$\mathcal{O}(n \log n)$} \end{axis} \end{tikzpicture} diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf index 9899dcb..a30fdaa 100644 Binary files a/buch/papers/multiplikation/images/strassen.pdf and b/buch/papers/multiplikation/images/strassen.pdf differ diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex index 797772b..5cf39b4 100644 --- a/buch/papers/multiplikation/images/strassen.tex +++ b/buch/papers/multiplikation/images/strassen.tex @@ -81,13 +81,13 @@ \node at (-3,-10) {$C_{12}=$} ; \node at (-3,-5) {$C_{11}=$} ; - \node at (5,-2) {I}; - \node at (10,-2) {II}; - \node at (15,-2) {III}; - \node at (20,-2) {IV}; - \node at (25,-2) {V}; - \node at (30,-2) {VI}; - \node at (35,-2) {VII}; + \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}; } diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 83be814..8bdbf2c 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -4,16 +4,16 @@ % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{L\"osungsmethoden} -\rhead{L\"osungsmethoden} +\section{Algorithmen} +\rhead{Algorithmen} In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Libraries zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt. \subsection{Standard Algorithmus} -Der Standard Methode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden. +Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden. Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. -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. +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}\caption{Matrix Multiplication} \label{multiplikation:alg:smm} @@ -39,16 +39,18 @@ Die \texttt{For i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, \end{algorithmic} \end{algorithm} -Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O}(n^3)$ +Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O}\left(n^3\right)$ \subsubsection{Divide and Conquer Methode} -F\"ur gewisse Algorithmen f\"uhren \textit{Divide and Conquer} Ans\"atze zu markant besseren Laufzeiten. -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. +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. 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}$ +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 produklt \begin{equation} \mathbf{A}\mathbf{B}= \begin{bmatrix} @@ -64,11 +66,9 @@ Die Matrizen $\mathbf{A}$ und $\mathbf{B}$ werden in jeweils vier Blockmatrizen \mathbf{C}_{11} & \mathbf{C}_{12}\\ \mathbf{C}_{21} & \mathbf{C}_{22} \end{bmatrix} -\end{equation} -aufgeteilt. -Die Berechnung +\end{equation}, \begin{equation} -\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj} +\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj}. \label{multiplikation:eq:MM_block} \end{equation} ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, wobei hier f\"ur die Multiplikation die Matrizenmultiplikation verwendet wird. @@ -105,15 +105,11 @@ Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ \end{algorithmic} \end{algorithm} -Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} berechnet werden. -Ohne auf diesen vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe der Funktion die Laufzeit. +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 Algortihmen. +Ohne auf dieses vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe der Funktion die Laufzeit. In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt \begin{equation} \label{multiplikation:eq:laufzeitdac} - \mathcal{T}(n) = - \begin{cases} - 1 & \text{if } n \leq 2\\ - 8 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 - \end{cases} = \mathcal{O}(n^{\log_2 8}) = \mathcal{O}(n^{3}) + \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 ) \end{equation} zu 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. @@ -122,20 +118,20 @@ In diesem Fall hat der \textit{Divide and Conquer} Ansatz zu keiner Verbesserung \subsection{Strassen's Algorithmus} -Strassen's Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen. -Die Grundlegenden Terme +Strassen's Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen von Blockmatrizen. +Die grundlegenden Terme \begin{equation} \label{multiplikation:eq:strassen} \begin{split} -\text{\textbf{P}} &= (\mathbf{A}_{11} + \mathbf{A}_{22}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{22}) \\ -\text{\textbf{Q}} &= (\mathbf{A}_{21} + \mathbf{A}_{22}) \cdot \mathbf{B}_{11} \\ -\text{\textbf{R}} &= \mathbf{A}_{11} \cdot (\mathbf{B}_{12}-\mathbf{B}_{22}) \\ -\text{\textbf{S}} &= \mathbf{A}_{22} \cdot (-\mathbf{B}_{11}+\mathbf{B}_{21}) \\ -\text{\textbf{T}} &= (\mathbf{A}_{11} + \mathbf{A}_{12}) \cdot \mathbf{B}_{22} \\ -\text{\textbf{U}} &= (-\mathbf{A}_{11} + \mathbf{A}_{21}) \cdot (\mathbf{B}_{11} + \mathbf{B}_{12}) \\ -\text{\textbf{V}} &= (\mathbf{A}_{12} - \mathbf{A}_{22}) \cdot (\mathbf{B}_{21} + \mathbf{B}_{22}) +\text{\textbf{P}} &= \left(\mathbf{A}_{11} + \mathbf{A}_{22}\right ) \cdot \left(\mathbf{B}_{11} + \mathbf{B}_{22}\right ) \\ +\text{\textbf{Q}} &= \left(\mathbf{A}_{21} + \mathbf{A}_{22}\right ) \cdot \mathbf{B}_{11} \\ +\text{\textbf{R}} &= \mathbf{A}_{11} \cdot \left(\mathbf{B}_{12}-\mathbf{B}_{22}\right ) \\ +\text{\textbf{S}} &= \mathbf{A}_{22} \cdot \left(-\mathbf{B}_{11}+\mathbf{B}_{21}\right ) \\ +\text{\textbf{T}} &= \left(\mathbf{A}_{11} + \mathbf{A}_{12}\right ) \cdot \mathbf{B}_{22} \\ +\text{\textbf{U}} &= \left(-\mathbf{A}_{11} + \mathbf{A}_{21}\right ) \cdot \left(\mathbf{B}_{11} + \mathbf{B}_{12}\right ) \\ +\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 Matrix $\mathbf{C}$ +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}} \\ @@ -144,7 +140,7 @@ aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Matrix $\math \mathbf{C}_{22} &= \text{\textbf{P}} + \text{\textbf{R}} - \text{\textbf{Q}} + \text{\textbf{U}} \end{split} \end{equation} -gebraucht. +der Matrix $\mathbf{C}$ gebraucht. \begin{algorithm}\caption{Strassen Matrix Multiplication} \label{multiplikation:alg:strassen} \setlength{\lineskip}{7pt} @@ -190,7 +186,11 @@ gebraucht. \EndFunction \end{algorithmic} \end{algorithm} -Strassens's Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt. +Strassen's 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}$. +Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf} @@ -202,17 +202,14 @@ Die Funktion wird sieben mal rekursiv aufgerufen. Dies f\"uhrt zu einer Laufzeit von \begin{equation} \label{multiplikation:eq:laufzeitstrassen} \mathcal{T}(n) = -\begin{cases} -1 & \text{if } n \leq 2\\ -7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 & \text{if } n > 2 -\end{cases} = \mathcal{O}(n^{\log_2 7}) = \mathcal{O}(n^{2.8074}) +7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 = \mathcal{O}\left(n^{\log_2 7}\right ) = \mathcal{O}\left(n^{2.8074} \right ) \end{equation} -und ist somit schneller als die Standard Methode. +und ist somit schneller als die Standardmethode. \subsection{Winograd's Algorithmus} -Ein weiterer Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}. -Er zeigte einen neuen Algorithmus f\"ur das +Einen weiteren Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}. +Er beschrieb einen neuen Algorithmus f\"ur das \begin{equation} \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i \end{equation} @@ -236,6 +233,7 @@ Das Skalarprodukt ist nun geben mit 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. + 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} @@ -243,8 +241,8 @@ Dies f\"uhrt zu \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 Standard Methode nur die H\"alfte ist. -Die Implementation kann im Algorithmus \ref{multiplikation:alg:winograd} entnommen werden. +Was im Vergleich zu den $mpn$ Multiplikation der Standardmethode nur die H\"alfte ist. +Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen werden. \begin{algorithm}\caption{Winograd Matrix Multiplication} \setlength{\lineskip}{7pt} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index b20a791..fed6a9f 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -6,24 +6,24 @@ \section{Problemstellung} \rhead{Problemstellung} Dank der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. -Das Ziel dieses Papers ist verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. -Wobei gezielt auf Algorithmen, welche das Problem schneller als der Standard Algorithmus L\"osen eingegangen wird. +Das Ziel dieses Papers ist, verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. +Gezielt werden auf Algorithmen, welche das Problem schneller als der Standard Algorithmus L\"osen eingegangen. \subsection{Big $\mathcal{O}$ Notation} Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus \cite{multiplikation:bigo}. -$f(x) \in \mathcal{O}(g(x))$ besagt das die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$. +$f(x) \in \mathcal{O}(g(x))$ besagt, dass die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$. Vereinfacht werden f\"ur Algorithmen die folgende Notation 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}(n^2) \rightarrow f$ w\"achst quadratisch + \item $f \in \mathcal{O}\left (n^2 \right ) \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}(e^n) \rightarrow f$ w\"achst exponentiell + \item $f \in \mathcal{O}\left (e^n \right ) \rightarrow f$ w\"achst exponentiell \item usw. \end{itemize} -In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die Verschiedenen Laufzeiten miteinander verglichen werden. +In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden. \begin{figure} \center @@ -33,9 +33,11 @@ In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die Verschiedenen Laufze \end{figure} \subsubsection{Beispiel Algorithmen} + +Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklassen geh\"oren. \paragraph{Beschr\"ankter Algorithmus} -Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmus \ref{multiplikation:alg:b1} entnommen werden. +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. \begin{algorithm}\caption{} \label{multiplikation:alg:b1} @@ -47,7 +49,7 @@ Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmu \end{algorithmic} \end{algorithm} -Wobei Konstanten nicht beachtet werden, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. +Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. \begin{algorithm}\caption{} \label{multiplikation:alg:b2} @@ -63,13 +65,14 @@ Wobei Konstanten nicht beachtet werden, der Algorithmus \ref{multiplikation:alg: \paragraph{Linearer Algorithmus} -Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares $\mathcal{O}(n)$ Verhalten. +Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares Verhalten. +Die \texttt{for}-Schleife wird $n$-mal durchgef\"hrt und f\"uhrt deshalb zu $\mathcal{O}(n)$. \begin{algorithm}\caption{} \setlength{\lineskip}{7pt} \begin{algorithmic} \label{multiplikation:alg:l1} - \Function{L}{$\mathbf{A}, \mathbf{B}$,n} + \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] $ @@ -83,7 +86,9 @@ Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares $\mathcal{O}( \paragraph{Quadratischer Algorithmus} -Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches $\mathcal{O}(n^2)$ Verhalten. +Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. +Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchgef\"hrt und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. + \begin{algorithm}[H]\caption{} \label{multiplikation:alg:q1} diff --git a/buch/papers/multiplikation/references.bib b/buch/papers/multiplikation/references.bib index 9d76e8e..63cb976 100755 --- a/buch/papers/multiplikation/references.bib +++ b/buch/papers/multiplikation/references.bib @@ -63,3 +63,23 @@ month = {7}, day = {27} } + +@online{multiplikation:master_theorem, + title = {Master theorem (analysis of algorithms)}, + url = {https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)}, + date = {2021-07-28}, + year = {2021}, + month = {7}, + day = {28} +} + + +@online{multiplikation:DAC, + title = {Divide-and-conquer algorithm}, + url = {https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm}, + date = {2021-07-28}, + year = {2021}, + month = {7}, + day = {28} +} + -- cgit v1.2.1 From c17aee47f007b102c81cafa36cb307069612f185 Mon Sep 17 00:00:00 2001 From: tim30b Date: Thu, 29 Jul 2021 09:41:20 +0200 Subject: small rewrites in Kristalle --- buch/papers/punktgruppen/crystals.tex | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index ce09063..42008e1 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -1,6 +1,6 @@ \section{Kristalle} Eine nicht allzu häufig gestellte Frage ist, wie ein Kristall definiert ist. -Um zu klären, was ein Kristall mit Symmetrien zu tun hat, ist genau diese Frage äusserst relevant. +Um zu klären, was ein Kristall mit Symmetrien zu tun hat, ist jedoch genau diese Frage äusserst relevant. Glücklicherweise ist das Innere eines Kristalles relativ einfach definiert. \begin{definition}[Kristall] Ein Kristall besteht aus Atomen, welche sich in einem Muster arrangieren, welches sich in drei Dimensionen periodisch wiederholt. @@ -36,14 +36,13 @@ Mit anderen Worten: Jedes Kristallgitter $ G $ ist \emph{translationssymmetrisch wobei der Vektor $\vec{a}_i$ ein Grundvektor sein muss. Da die Translationssymmetrie beliebig oft mit allen Grundvektoren angewendet werden kann, können wir auch sagen, dass alle Verschiebungen um eine Linearkombination -der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind oder kurz, um $\vec{r}$. -Verschiebungen um $\vec{r}$ bewirken demnach keine Veränderungen, -solange wir ein unendlich grosses Kristallgitter verschieben. +der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind. +Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich grossen Kristallgittern besteht. \subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen:Translationssymmetrie} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. - Was nicht direkt ersichtlich ist, dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können. - Die geforderte Translationssymmetrie eines Kristalles schränkt weitere Symmetrien deutlich ein. + Was nicht direkt ersichtlich ist, ist dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können. + Dies weil die Translationssymmetrie eines Kristalles weitere Symmetrien deutlich einschränkt. \begin{figure} \centering @@ -145,10 +144,10 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:kristallklas Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:kristallklassen} zu sehen sind. \begin{itemize} \item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden. - Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher für uns nicht relevant. + Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant. \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. Ist im Subskript eine Zahl \(n\) zu finden, steht dies für eine \(n\)-fache Symmetrie. - Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen darf, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Für die folgenden Betrachtungen müssen wir uns Abbildung \ref{fig:punktgruppen:kristallklassen} genauer ansehen. Dabei ist mit horizontal flach auf dem Papier gemeint. -- cgit v1.2.1 From f2fde7d2b5abf7c11cd7dc1535b0db64a2e84ffd Mon Sep 17 00:00:00 2001 From: tim30b Date: Thu, 29 Jul 2021 09:42:42 +0200 Subject: rewrite small things in intro & symmetry --- buch/papers/punktgruppen/intro.tex | 2 +- buch/papers/punktgruppen/symmetry.tex | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index 7b3c6e3..1293234 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -17,7 +17,7 @@ sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. Piezoelektrizität ist kein weit verbreiteter Begriff, jedoch beschreibt er ein Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. -Wie zum Beispiel sorgen er in den allermeisten Feuerzeugen für die Zündung. +Wie zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung. Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 0805d8b..6aeeb85 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -22,20 +22,20 @@ Wie wir jedoch später sehen werden, ist das Konzept der Symmetrie eigentlich vi In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind. Zum Beispiel hat das Quadrat eine Gerade, an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. -Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, der die Form unverändert lassen. +Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. Ein Objekt kann mehr als nur eine Symmetrie aufweisen. Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] - Seien \(g\) und \(h\) umkehrbare Operationen, die ein mathematisches Objekt unverändert lassen, sogenannte Symmetrieoperationen. + Seien \(g\) und \(h\) umkehrbare Operationen, sogenannte Symmetrieoperationen, die ein mathematisches Objekt unverändert lassen. Die Komposition \(h\circ g\) definieren wir als die Anwendung der Operationen nacheinander. Alle möglichen Symmetrieoperationen bilden unter Komposition eine Gruppe, die Symmetriegruppe genannt wird. \end{definition} Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. -Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die intuitiv rückgängig macht, was \(g\) getan hat. +Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die intuitiv rückgängig macht, was \(g\) getan hat. % intuitiv weglassen oder anstelle sinnbildlich Somit ist \(\mathds{1}\) auch äquivalent dazu, eine Operation und dann ihre Inverse anzuwenden. Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, sie wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. @@ -64,15 +64,16 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine In ähnlicher Weise, aber weniger interessant enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). \end{beispiel} -Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystemen +Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystem komplexere Strukturen aufbauen. +%TODO kontroliere alle erzeugendensystem ich glaube es hatt noch en fall fehler ich weiss nicht wie das wort genau definiert ist \begin{definition}[Erzeugendensysteme] Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. - Da es mehrere Erzeuger gibt, müssen auch die sogenannte Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. + Da es mehrere Erzeuger gibt, müssen auch die sogenannten Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls in den Klammern angegeben. - Die erzeugende Elementen zusammen mit der Definitionsgleichungen bauen ein Erzeugendensysteme. + Die erzeugenden Elementen bauen zusammen mit den Definitionsgleichungen ein Erzeugendensysteme. \end{definition} \begin{beispiel} Wir werden nun alle Symmetrien eines \(n\)-Gons beschreiben, was bedeutet, dass wir die Operationen \(r\) und \(\sigma\) kombinieren. -- cgit v1.2.1 From 58cd49c22e5eea9f72bbe648a13e2e149c131ea7 Mon Sep 17 00:00:00 2001 From: tim30b Date: Thu, 29 Jul 2021 10:46:38 +0200 Subject: rewrite minor things in Piezo --- buch/papers/punktgruppen/piezo.tex | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index 67e6214..6ed7ee9 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -12,9 +12,9 @@ Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle ein \subsection{Polarisierung} Piezoelektrizität basiert darauf, dass zwischen den Oberflächen des Kristalles ein Ladungsungleichgewicht entsteht (siehe Abbildung\ref{fig:punktgruppen:basicPiezo}). Dieses Ungleichgewicht resultiert, -weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positiv Ionen näher an die Oberfläche gelangen, -wärend auf der gegenüberliegenden Oberfläche sich mehr negative Ionen sammeln. -Das sich die atomare Struktur eines Kristalles unter Druck genau so verformt ist nicht bei jedem Kristall gegeben. +weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positive Ionen näher an die Oberfläche gelangen, +wärend auf der gegenüberliegenden Seite dasselbe mit negativen Ionen passiert. +Es besitzt jedoch nicht jeder Kristall eine atomare Struktur welche sich unter Druck genau so verformt. Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für die Entstehung dieses Effektes. \begin{figure} @@ -35,35 +35,35 @@ Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für \end{figure} \subsection{Atomarer Aufbau} -Die Polarisation resultiert über eine gesamte Oberfläche eines Kristalles, entscheidend ist aber der atomare Aufbau. +Die Polarisation entsteht an der Oberfläche eines Kristalles, die Erklärung dazu finden wir jedoch im atomaren Aufbau. Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren. In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren. Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. -Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil die mittleren Ladungsträger weiter auseinander gedrückt werden. +Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil die Ladungsträger ganz links und rechts weiter auseinander gedrückt werden. Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. \par -\subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. +Die Struktur \subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unter Druck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, scheint es als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt. -Dies ist aber nicht mehr der Fall, wenn die Struktur sich nach oben und unten periodisch wiederholt. -Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. +Dies ist aber nicht mehr der Fall, wenn sich die Struktur nach oben und unten periodisch wiederholt. \par +Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, -ist dass das entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, +ist, dass die entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}. Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann, -weil die Eigenschaften ändern bei einer \(90^\circ\) Drehung. -Das Fehlen dieser Rotationssymmetrie kann in \subref{fig:punktgruppen:atoms-piezo} beobachtet werden. +weil die Eigenschaften der Struktur sich bei einer \(90^\circ\) Drehung ändern. +Das Fehlen dieser Rotationssymmetrie bestätigt sich auch wenn \subref{fig:punktgruppen:atoms-piezo} als Hexagon betrachtet wird. \subsection{Punktsymmetrie} Piezoelektrische Kristalle können nicht punktsymmetrisch sein. Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden. Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden. -Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles vor Augen führen, +Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles wie \subref{fig:punktgruppen:atoms-piezo} vor Augen führen, welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt. Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen, was der Definition einer Symmetrie deutlich widerspricht. @@ -72,10 +72,10 @@ was der Definition einer Symmetrie deutlich widerspricht. Piezoelektrizität hat durchaus Nutzen im Alltag. Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, sonder ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität. -Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu eine konfigurierten Spannung. -Wird vom Nutzenden weiter gedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, -welchen auf das Piezoelement aufschlägt. +Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu einer konfigurierten Spannung. +Wird vom Nutzenden fester zugedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, +welcher auf das Piezoelement aufschlägt. Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung. Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden. -Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass einer eine Punktsymmetrie aufweist, empfiehlt es sich mit die anderen zu versuchen. +Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich am anderen zu versuchen. -- cgit v1.2.1 From caea2650f150ddafa73b86885bcc9d759dded9a8 Mon Sep 17 00:00:00 2001 From: tim30b Date: Thu, 29 Jul 2021 10:51:51 +0200 Subject: fix? Erzeugendensystem --- buch/papers/punktgruppen/symmetry.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 6aeeb85..2067663 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -67,13 +67,13 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystem komplexere Strukturen aufbauen. -%TODO kontroliere alle erzeugendensystem ich glaube es hatt noch en fall fehler ich weiss nicht wie das wort genau definiert ist -\begin{definition}[Erzeugendensysteme] +%@Naoki Are you ok with my grammar fixes I'm not 101% shore how to use the word Erzeugendensystem? +\begin{definition}[Erzeugendensystem] Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. Da es mehrere Erzeuger gibt, müssen auch die sogenannten Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls in den Klammern angegeben. - Die erzeugenden Elementen bauen zusammen mit den Definitionsgleichungen ein Erzeugendensysteme. + Die erzeugenden Elementen bauen zusammen mit den Definitionsgleichungen ein Erzeugendensystem. \end{definition} \begin{beispiel} Wir werden nun alle Symmetrien eines \(n\)-Gons beschreiben, was bedeutet, dass wir die Operationen \(r\) und \(\sigma\) kombinieren. -- cgit v1.2.1 From 8cc6ee76118ec1b446a732b9b7e06147737957d1 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Thu, 29 Jul 2021 16:54:19 +0200 Subject: save typos --- buch/papers/reedsolomon/dtf.tex | 57 +++++++++++++++++-------------- buch/papers/reedsolomon/idee.tex | 56 +++++++++++++++--------------- buch/papers/reedsolomon/tikz/polynom2.tex | 2 +- 3 files changed, 60 insertions(+), 55 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index e9aacfb..e9717c8 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -9,35 +9,15 @@ Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourientransformation. Dies wird weder eine Erklärung der Forientransorfmation, noch ein genauer gebrauch für den Reed-Solomon-Code. Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. -wobei sie dann bei späteren Berchnungen ganz nützlich ist. +Das ganze zeigen wir mit einem Beispiel einer Übertragung von Zahlen mit Hilfe der Fourientransformation. \subsection{Diskrete Fourietransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} Mit hilfe der Fourietransformation 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. -Nun zur definition der Diskrete Fourietransformation, diese ist definiert als -\begin{equation} - \hat{c}_{k} - = \frac{1}{N} \sum_{n=0}^{N-1} - {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} - ,\label{reedsolomon:DFT} -\end{equation} -wenn man nun -\begin{equation} - w = - e^{-\frac{2\pi j}{N} k} - \label{reedsolomon:DFT_summand} -\end{equation} -ersetzte, und $N$ konstantbleibt, erhält man -\begin{equation} - \hat{c}_{k}= - \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) - \label{reedsolomon:DFT_polynom} -\end{equation} -was überaust ähnlich zu unserem Polynomidee ist. -\subsection{Beispiel +\subsubsection{Beispiel einer Übertragung mit Fourientransformation \label{reedsolomon:subsection:Übertragungsabfolge}} Der Auftrag ist nun 64 Daten zu übertragen und nach 32 Fehler abzusicheren, 16 Fehler erkennen und rekonstruieren. @@ -51,8 +31,8 @@ Dabei zusätzlich nach 16 Fehler abgesichert, macht insgesamt 96 Übertragungsza (siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}) Die 32 Fehlerkorrekturstellen werden als Null Übertragen \item Nun wurde mittels der diskreten Fourientransformation diese 96 codiert. -Das heisst alle Informationen ist in alle Zahlenvorhanden. (Auch die Fehlerkorrekturstellen Null) -\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75.(die Skala ist Rechts) +Das heisst alle Informationen ist in alle Zahlenvorhanden. Auch die Fehlerkorrekturstellen Null. +\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt. \item Dieses wird nun Empfangen und mittels inversen diskreten Fourientransormation, wieder rücktransformiert.(Iklusive der Fehler) \item Nun sieht man den Fehler im Decodieren in den Übertragungsstellen 64 bis 96, da es dort nicht mehr Null ist. @@ -71,4 +51,31 @@ jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signa } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} -\end{figure} \ No newline at end of file +\end{figure} + +Nun zur definition der Diskrete Fourietransformation, diese ist definiert als +\begin{equation} + \hat{c}_{k} + = \frac{1}{N} \sum_{n=0}^{N-1} + {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn}. + ,\label{reedsolomon:DFT} +\end{equation} +Wenn man nun +\begin{equation} + w = + e^{-\frac{2\pi j}{N} k} + \label{reedsolomon:DFT_summand} +\end{equation} +ersetzte, und $N$ konstantbleibt, erhält man +\begin{equation} + \hat{c}_{k}= + \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) + \label{reedsolomon:DFT_polynom} +\end{equation} +was überaust ähnlich zu unserem Polynomidee ist. +Die Polynominterpolation und die Fourientransformation rechnen beide mit reelen Zahlen. +Wenn die Fehlerabweichung sehr sehr klein ist, erkennt man diese irgendwann nicht mehr. +Zusätzlich muss mann immer Grenzen bestimmen auf wieviel Stellen gerechnet wird und wie die Fehler erkannt werden im Locator. +Deshalb haben Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, +dies wird nun im nächsten Abschnitt genauer erklärt. + diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 8ad3d27..d8b8a93 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -14,9 +14,9 @@ Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen. Beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, man kann sogar einige Fehler korrigieren. -Der unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur die Frage beantwortet wird mit: Ist die Übertragung fehlerhaft oder nicht? -Beim Korrigieren werden Fehler erkennt und dann zusätzlich noch den original Wert rekonstruieren. -Auch eine Variante wäre es die Daten nach einem Fehler nachdem Fehlerhaften senden, nochmals versenden(auch hier wieder doppelt und dreifach Sendung), +Der Unterschied des Fehler erkennen und korrigiren, 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 den original Wert rekonstruieren. +Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wieder doppelt und dreifach Sendung), was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} @@ -24,8 +24,8 @@ was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. \subsection{Polynom-Ansatz \label{reedsolomon:section:polynomansatz}} \rhead{Polynom-Ansatz} -Eine Idee ist aus den Daten ein Polynom zu bilden. -Diese Polynomfunktion bei bestimmten Werten, ausrechnet und diese Punkte dann überträgt. +Eine Idee ist, aus den Daten ein Polynom zu bilden. +Diese Polynomfunktion bei bestimmten Werten errechnet und diese Punkte dann überträgt. \begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, welche uns dann das Polynom \begin{equation} @@ -48,18 +48,17 @@ Die Farbe blau brauchen wir für die \textcolor{blue}{Daten} welche wir mit der \end{beispiel} \begin{beispiel} -Aus der Gleichung \eqref{reedsolomon:equation1}, -ist ein Polynome zweiten Grades durch drei Punkte eindeutig bestimmbar. -Hat es Fehler in der Übertragunge gegeben,(Bei Abbildung \ref{fig:polynom}\textcolor{red}{roten Punkte}) kann man diese erkennen, -da alle Punkte, die korrekt sind, auf dem Polynom liegen müssen. -(Bei Abbildung \ref{fig:polynom}\textcolor{darkgreen}{grünen Punkte}) +Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. +Hat es Fehler in der Übertragunge gegeben,(Bei Abb. \ref{fig:polynom} \textcolor{red}{roten Punkte}), +kann man diese erkennen, da alle Punkte, die korrekt sind, auf der Parabel liegen müssen. +(Bei Abb. \ref{fig:polynom} \textcolor{darkgreen}{grünen Punkte}) Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, -gegenüber dem mit 5 Punkten falsch liegt.\ref{fig:polynom} -Werden es mehr Fehler kann nur erkennt werden, dass das Polynom nicht stimmt. +gegenüber dem mit 5 Punkten falsch liegt. \ref{fig:polynom} +Werden es mehr Fehler kann nur erkannt werden, dass das Polynom nicht stimmt. Das orginale Polynom kann aber nicht mehr gefunden werden. -Da das Konkurenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleited. -Um das Konkurenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig. +Da das Konkurrenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleitet. +Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig. \end{beispiel} \begin{figure} @@ -72,25 +71,25 @@ Um das Konkurenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übe \section{Fehlerkorekturstellen bestimmen \label{reedsolomon:section:Fehlerkorrekturstellen}} -Um zu bestimmen wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, die dann Fehler korrigieren, -muss man zuerst Wissen wieviel \textcolor{blue}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. +Um zu bestimmen wieviel zusätzliche \textcolor{darkgreen}{Übertragungspunkte} notwendig sind, um die Fehler zu korrigieren, +muss man zuerst wissen, wieviel \textcolor{blue}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. Die Anzahl \textcolor{blue}{Daten} (ab hier verwenden wir das Wort Nutzlast), die als Polynomkoeffizente $k$ übergeben werden, -brauchen die gleiche Anzahl an Polynomgraden, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. +brauchen die gleiche Anzahl an Polynomkoeffizententräger, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. Für die Anzahl der Fehler $t$, welche korrigiert werden können, gehen wir zum Beispiel. -\begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir 7 \textcolor{darkgreen}{Übertragungspunkte} senden. -Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurenzpolynom, -maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurenzpolynom ist das gleiche wie das Original. +\begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir \textcolor{darkgreen}{7 Übertragungspunkte} senden. +Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurrenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurrenzpolynom, +maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurrenzpolynom ist das gleiche wie das Original. Somit können wir nun bestimmen, dass von den \textcolor{darkgreen}{7 Übertragungspunkten$u$} bis zu 2 Fehler korrigiert werden können und 4 Übertragungspunkte zusätzlich gesendet werden müssen. \end{beispiel} -Durch das erkennen des Schemas in der Tabelle\ref{tabel:fehlerkorrekturstellen} +Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, doch mit dieser Gleichung \begin{equation} \frac{\textcolor{darkgreen}{u}-\textcolor{blue}{k}}{\textcolor{red}{t}} =2 \label{reedsolomon:equation2} \end{equation} -zeigt sich das es $k+2t$ Übertragungspunkte braucht. +zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. -\begin{center} +\begin{table} \begin{tabular}{ c c | c} \hline Nutzlas & Fehler & Übertragen \\ @@ -102,11 +101,10 @@ zeigt sich das es $k+2t$ Übertragungspunkte braucht. $k$ & $t$ & $k+2t$ Werte eines Polynoms vom Grad $k-1$ \\ \hline \end{tabular} - Fehlerkorrekturstellen Bestimmung TODO: Tabellenreferenz - \label{tabel:fehlerkorrekturstellen} -\end{center} + \caption{\label{tab:fehlerkorrekturstellen} Fehlerkorrekturstellen Bestimmung.} +\end{table} -Ein Nebeneffekt ist das dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. -Um aus den Übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden, -doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und Fehleranfällig. +Ein Nebeneffekt ist, dass dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. +Um aus den übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden, +doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und fehleranfällig. diff --git a/buch/papers/reedsolomon/tikz/polynom2.tex b/buch/papers/reedsolomon/tikz/polynom2.tex index 47dc679..80557fb 100644 --- a/buch/papers/reedsolomon/tikz/polynom2.tex +++ b/buch/papers/reedsolomon/tikz/polynom2.tex @@ -14,7 +14,7 @@ %////////////////////////////////////// -\begin{tikzpicture}[>=latex,thick] +\begin{tikzpicture}[>=latex,thick,] \draw[color=blue, line width=1.4pt] plot[domain=0:8, samples=100] ({\x},{(2*\x^2+1*\x+5)/\teiler}); -- cgit v1.2.1 From a310c9290f64d938e87226db84d524a7a817ec68 Mon Sep 17 00:00:00 2001 From: Reto Date: Thu, 29 Jul 2021 23:07:18 +0200 Subject: reorganized files, started work on Einleitung, Aufbau --- buch/papers/mceliece/Makefile.inc | 8 +- buch/papers/mceliece/aufbau.tex | 128 ++++++++++++++++++++++++++++++++ buch/papers/mceliece/einleitung.tex | 14 ++++ buch/papers/mceliece/fazit.tex | 40 ++++++++++ buch/papers/mceliece/funktionsweise.tex | 40 ++++++++++ buch/papers/mceliece/main.tex | 27 +------ buch/papers/mceliece/references.bib | 22 ++++-- buch/papers/mceliece/teil0.tex | 22 ------ buch/papers/mceliece/teil1.tex | 55 -------------- buch/papers/mceliece/teil2.tex | 40 ---------- buch/papers/mceliece/teil3.tex | 40 ---------- 11 files changed, 245 insertions(+), 191 deletions(-) create mode 100644 buch/papers/mceliece/aufbau.tex create mode 100644 buch/papers/mceliece/einleitung.tex create mode 100644 buch/papers/mceliece/fazit.tex create mode 100644 buch/papers/mceliece/funktionsweise.tex delete mode 100644 buch/papers/mceliece/teil0.tex delete mode 100644 buch/papers/mceliece/teil1.tex delete mode 100644 buch/papers/mceliece/teil2.tex delete mode 100644 buch/papers/mceliece/teil3.tex (limited to 'buch/papers') diff --git a/buch/papers/mceliece/Makefile.inc b/buch/papers/mceliece/Makefile.inc index ed1affa..53ecf7a 100644 --- a/buch/papers/mceliece/Makefile.inc +++ b/buch/papers/mceliece/Makefile.inc @@ -7,8 +7,8 @@ dependencies-mceliece = \ papers/mceliece/packages.tex \ papers/mceliece/main.tex \ papers/mceliece/references.bib \ - papers/mceliece/teil0.tex \ - papers/mceliece/teil1.tex \ - papers/mceliece/teil2.tex \ - papers/mceliece/teil3.tex + papers/mceliece/einleitung.tex \ + papers/mceliece/aufbau.tex \ + papers/mceliece/funktionsweise.tex \ + papers/mceliece/fazit.tex diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex new file mode 100644 index 0000000..08ef037 --- /dev/null +++ b/buch/papers/mceliece/aufbau.tex @@ -0,0 +1,128 @@ +% +% einleitung.tex -- Beispiel-File für die Einleitung +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Aufbau\label{mceliece:section:Aufbau}} +\rhead{Aufbau} +Das McEliece-Kryptosystem besteht aus folgenden Elementen: + +\subsection{Datenvektor $d_k$ +\label{mceliece:subsection:d_k}} +In diesem Vektor der Länge $k$ sind die zu verschlüsselnden Daten enthalten. +Beispielsweise +\[d_4= +\begin{pmatrix} + 1\\ + 1\\ + 1\\ + 0 +\end{pmatrix} +\] + +\subsection{Binäre Zufallsmatrix $S_k$ +\label{mceliece:subsection:s_k}} +$S_k$ ist eine Binäre Zufallsmatrix der Grösse $k \times k$. +Auch muss diese Matrix in $\mathbb{F}_2$ invertierbar sein. +Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert werden, +wobei danach mithilfe des Gauss-Algorythmusses deren Inverse bestimmt werden kann. +Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden. +Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. +Beispielsweise +\[S_4= +\begin{pmatrix} + 0 & 1 & 1 & 1\\ + 0 & 1 & 1 & 0\\ + 0 & 0 & 1 & 1\\ + 1 & 0 & 0 & 1 +\end{pmatrix} +\] + +\[ + S_4^{-1}= + \begin{pmatrix} + 1 & 0 & 1 & 0\\ + 1 & 1 & 0 & 1\\ + 1 & 1 & 1 & 0\\ + 1 & 1 & 0 & 0 + \end{pmatrix} +\] + +\subsection{Linear-Code-Generatormatrix $G_{n,k}$ +\label{mceliece:subsection:g_m}} +Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code, +der in der Lage ist, $t$ Fehler zu korrigieren. +Im Zusammenhang mit McEliece werden dabei meist Goppa-Codes verwendet, +es können prinzipiell auch andere Codes wie beispielsweise Reed-Solomin verwendet werden, +jedoch besitzen einige Codes Schwachstellen \cite{mceliece:lorenz}. +Das Codieren mit diesem linearen Code kann mithilfe dessen Generatormatrix $G_{n,k}$ erfolgen. +Da es sich um einen fehlerkorrigierenden Code handelt, +wird das Codewort länger als das Datenwort, +es wird also Redundanz hinzugefügt, +um die Fehlerkorrektur möglich zu machen. + +Beispiel +\[ + G_{7,4}= + \begin{pmatrix} + 1 & 0 & 0 & 0\\ + 1 & 1 & 0 & 0\\ + 0 & 1 & 1 & 0\\ + 1 & 0 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 0 & 1 & 0\\ + 0 & 0 & 0 & 1 + \end{pmatrix} +\] + +\subsection{Permutations-Matrix $P_n$ +\label{mceliece:subsection:p_m}} +Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. +Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. +Beispiel +\[ + P_7= + \begin{pmatrix} + 0 & 1 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1\\ + 0 & 0 & 0 & 0 & 0 & 1 & 0\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0\\ + 1 & 0 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0 + \end{pmatrix} +\] +, +\[ + P_7^{-1}=P_7^t= + \begin{pmatrix} + 0 & 0 & 0 & 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 0 & 0 & 0 & 0\\ + 0 & 0 & 0 & 1 & 0 & 0 & 0\\ + 0 & 0 & 0 & 0 & 1 & 0 & 0\\ + 0 & 0 & 0 & 0 & 0 & 0 & 1\\ + 0 & 0 & 1 & 0 & 0 & 0 & 0\\ + 0 & 1 & 0 & 0 & 0 & 0 & 0 + \end{pmatrix} +\] + +\subsection{Fehler-Vektor $e_n$ +\label{mceliece:subsection:p_m}} +Dieser Vektor der Länge $n$ besteht aus $t$ Einsen, welche zufällig innerhalb des Vektors angeordnet sind, +alle anderen Einträge sind Null. +Dieser Fehlervektor besitzt also gleich viele Einer, +wie die Anzahl Fehler, die der Linearcode zu korrigieren vermag. + +Beispiel +\[ + E_7= + \begin{pmatrix} + 0\\ + 0\\ + 1\\ + 0\\ + 0\\ + 0\\ + 0 + \end{pmatrix} +\] diff --git a/buch/papers/mceliece/einleitung.tex b/buch/papers/mceliece/einleitung.tex new file mode 100644 index 0000000..48b55b0 --- /dev/null +++ b/buch/papers/mceliece/einleitung.tex @@ -0,0 +1,14 @@ +% +% teil1.tex -- Beispiel-File für das Paper +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Einleitung +\label{mceliece:section:einleitung}} +\rhead{Einleitung} +Das McEliece-Kryptosystem ist eine Variante zum Austausch +von Schlüsselpaaren über ein Netzwerk analog dem Diffie-Hellman-Schlüsseltausch \ref{buch:subsection:diffie-hellman}, +wobei das McEliece-System als Quantencomputerresistent gilt. +Das Verschlüsseln/Entschlüsseln von Nachrichten wird bei diesem System hauptsächlich mit Matrizenoperationen durchgeführt. + + diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex new file mode 100644 index 0000000..37152bf --- /dev/null +++ b/buch/papers/mceliece/fazit.tex @@ -0,0 +1,40 @@ +% +% teil3.tex -- Beispiel-File für Teil 3 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Fazit +\label{mceliece:section:fazit}} +\rhead{Fazit} +Sed ut perspiciatis unde omnis iste natus error sit voluptatem +accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +quae ab illo inventore veritatis et quasi architecto beatae vitae +dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +velit, sed quia non numquam eius modi tempora incidunt ut labore +et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +reprehenderit qui in ea voluptate velit esse quam nihil molestiae +consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +pariatur? + +\subsection{De finibus bonorum et malorum +\label{mceliece:subsection:malorum}} +At vero eos et accusamus et iusto odio dignissimos ducimus qui +blanditiis praesentium voluptatum deleniti atque corrupti quos +dolores et quas molestias excepturi sint occaecati cupiditate non +provident, similique sunt in culpa qui officia deserunt mollitia +animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +est et expedita distinctio. Nam libero tempore, cum soluta nobis +est eligendi optio cumque nihil impedit quo minus id quod maxime +placeat facere possimus, omnis voluptas assumenda est, omnis dolor +repellendus. Temporibus autem quibusdam et aut officiis debitis aut +rerum necessitatibus saepe eveniet ut et voluptates repudiandae +sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +sapiente delectus, ut aut reiciendis voluptatibus maiores alias +consequatur aut perferendis doloribus asperiores repellat. + + diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex new file mode 100644 index 0000000..0e2ed1b --- /dev/null +++ b/buch/papers/mceliece/funktionsweise.tex @@ -0,0 +1,40 @@ +% +% teil2.tex -- Beispiel-File für teil2 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{Funktionsweise +\label{mceliece:section:funktionsweise}} +\rhead{Funktionsweise} +Sed ut perspiciatis unde omnis iste natus error sit voluptatem +accusantium doloremque laudantium, totam rem aperiam, eaque ipsa +quae ab illo inventore veritatis et quasi architecto beatae vitae +dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit +aspernatur aut odit aut fugit, sed quia consequuntur magni dolores +eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam +est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci +velit, sed quia non numquam eius modi tempora incidunt ut labore +et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima +veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, +nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure +reprehenderit qui in ea voluptate velit esse quam nihil molestiae +consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla +pariatur? + +\subsection{De finibus bonorum et malorum +\label{mceliece:subsection:bonorum}} +At vero eos et accusamus et iusto odio dignissimos ducimus qui +blanditiis praesentium voluptatum deleniti atque corrupti quos +dolores et quas molestias excepturi sint occaecati cupiditate non +provident, similique sunt in culpa qui officia deserunt mollitia +animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis +est et expedita distinctio. Nam libero tempore, cum soluta nobis +est eligendi optio cumque nihil impedit quo minus id quod maxime +placeat facere possimus, omnis voluptas assumenda est, omnis dolor +repellendus. Temporibus autem quibusdam et aut officiis debitis aut +rerum necessitatibus saepe eveniet ut et voluptates repudiandae +sint et molestiae non recusandae. Itaque earum rerum hic tenetur a +sapiente delectus, ut aut reiciendis voluptatibus maiores alias +consequatur aut perferendis doloribus asperiores repellat. + + diff --git a/buch/papers/mceliece/main.tex b/buch/papers/mceliece/main.tex index dbbaaac..352a6be 100644 --- a/buch/papers/mceliece/main.tex +++ b/buch/papers/mceliece/main.tex @@ -8,29 +8,10 @@ \begin{refsection} \chapterauthor{Reto Fritsche} -Ein paar Hinweise für die korrekte Formatierung des Textes -\begin{itemize} -\item -Absätze werden gebildet, indem man eine Leerzeile einfügt. -Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet. -\item -Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende -Optionen werden gelöscht. -Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen. -\item -Beginnen Sie jeden Satz auf einer neuen Zeile. -Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen -in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt -anzuwenden. -\item -Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren -Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern. -\end{itemize} - -\input{papers/mceliece/teil0.tex} -\input{papers/mceliece/teil1.tex} -\input{papers/mceliece/teil2.tex} -\input{papers/mceliece/teil3.tex} +\input{papers/mceliece/einleitung.tex} +\input{papers/mceliece/aufbau.tex} +\input{papers/mceliece/funktionsweise.tex} +\input{papers/mceliece/fazit.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib index 47798d3..56f2d19 100644 --- a/buch/papers/mceliece/references.bib +++ b/buch/papers/mceliece/references.bib @@ -4,13 +4,13 @@ % (c) 2020 Autor, Hochschule Rapperswil % -@online{mceliece:bibtex, - title = {BibTeX}, - url = {https://de.wikipedia.org/wiki/BibTeX}, - date = {2020-02-06}, - year = {2020}, - month = {2}, - day = {6} +@online{mceliece:GenerationRandMatrix, + title = {Efficient Generation of Random Nonsingular Matrices}, + url = {https://www.researchgate.net/publication/2729950_Efficient_Generation_of_Random_Nonsingular_Matrices}, + date = {Januar 1993}, + year = {2021}, + month = {7}, + day = {29} } @book{mceliece:numerical-analysis, @@ -33,3 +33,11 @@ url = {https://doi.org/10.1016/j.acha.2017.11.004} } +@online{mceliece:lorenz, + title = {Cryptography based on error correcting codes}, + url = {https://algo.epfl.ch/_media/en/projects/lorenz_thesis.pdf}, + date = {2007-07-27}, + year = {2021}, + month = {7}, + day = {29} +} \ No newline at end of file diff --git a/buch/papers/mceliece/teil0.tex b/buch/papers/mceliece/teil0.tex deleted file mode 100644 index b98f8be..0000000 --- a/buch/papers/mceliece/teil0.tex +++ /dev/null @@ -1,22 +0,0 @@ -% -% einleitung.tex -- Beispiel-File für die Einleitung -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 0\label{mceliece:section:teil0}} -\rhead{Teil 0} -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua \cite{mceliece:bibtex}. -At vero eos et accusam et justo duo dolores et ea rebum. -Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum -dolor sit amet. - -Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam -nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam -erat, sed diam voluptua. -At vero eos et accusam et justo duo dolores et ea rebum. Stet clita -kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit -amet. - - diff --git a/buch/papers/mceliece/teil1.tex b/buch/papers/mceliece/teil1.tex deleted file mode 100644 index 06035a6..0000000 --- a/buch/papers/mceliece/teil1.tex +++ /dev/null @@ -1,55 +0,0 @@ -% -% teil1.tex -- Beispiel-File für das Paper -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 1 -\label{mceliece:section:teil1}} -\rhead{Problemstellung} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. -Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit -aut fugit, sed quia consequuntur magni dolores eos qui ratione -voluptatem sequi nesciunt -\begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{mceliece:equation1} -\end{equation} -Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, -consectetur, adipisci velit, sed quia non numquam eius modi tempora -incidunt ut labore et dolore magnam aliquam quaerat voluptatem. - -Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis -suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? -Quis autem vel eum iure reprehenderit qui in ea voluptate velit -esse quam nihil molestiae consequatur, vel illum qui dolorem eum -fugiat quo voluptas nulla pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:finibus}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}. - -Et harum quidem rerum facilis est et expedita distinctio -\ref{mceliece:section:loesung}. -Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil -impedit quo minus id quod maxime placeat facere possimus, omnis -voluptas assumenda est, omnis dolor repellendus -\ref{mceliece:section:folgerung}. -Temporibus autem quibusdam et aut officiis debitis aut rerum -necessitatibus saepe eveniet ut et voluptates repudiandae sint et -molestiae non recusandae. -Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis -voluptatibus maiores alias consequatur aut perferendis doloribus -asperiores repellat. - - diff --git a/buch/papers/mceliece/teil2.tex b/buch/papers/mceliece/teil2.tex deleted file mode 100644 index fd247c7..0000000 --- a/buch/papers/mceliece/teil2.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil2.tex -- Beispiel-File für teil2 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 2 -\label{mceliece:section:teil2}} -\rhead{Teil 2} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - diff --git a/buch/papers/mceliece/teil3.tex b/buch/papers/mceliece/teil3.tex deleted file mode 100644 index 421b331..0000000 --- a/buch/papers/mceliece/teil3.tex +++ /dev/null @@ -1,40 +0,0 @@ -% -% teil3.tex -- Beispiel-File für Teil 3 -% -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Teil 3 -\label{mceliece:section:teil3}} -\rhead{Teil 3} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. - - -- cgit v1.2.1 From 8cc40f152c49a8fe039e78bb6355fb077b932117 Mon Sep 17 00:00:00 2001 From: tim30b Date: Fri, 30 Jul 2021 10:57:58 +0200 Subject: add crystal video source --- buch/papers/punktgruppen/references.bib | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib index a29640c..b669036 100644 --- a/buch/papers/punktgruppen/references.bib +++ b/buch/papers/punktgruppen/references.bib @@ -42,3 +42,12 @@ url = {http://archive.today/2021.07.22-083802/http://xrayweb.chem.ou.edu/notes/symmetry.html}, urldate = {2021-07-22}, } + +@online{punktgruppen:restriction, + title = {Structure of Materials}, + author = {Silvija Gradecak-Garaj}, + year = {2020}, + month = {4}, + day = {9}, + url = {https://www.youtube.com/watch?v=Ia2eHF1ZKoI}, + urldate = {2021-07-30}, \ No newline at end of file -- cgit v1.2.1 From c8e34520177223dee18e92c3c12334b68faef360 Mon Sep 17 00:00:00 2001 From: tim30b Date: Fri, 30 Jul 2021 11:04:11 +0200 Subject: add restriction citation to main but does still not work! --- buch/papers/punktgruppen/main.tex | 1 + 1 file changed, 1 insertion(+) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/main.tex b/buch/papers/punktgruppen/main.tex index ea19421..556fc2b 100644 --- a/buch/papers/punktgruppen/main.tex +++ b/buch/papers/punktgruppen/main.tex @@ -19,6 +19,7 @@ \nocite{punktgruppen:sands-crystal} \nocite{punktgruppen:lang-elt2} \nocite{punktgruppen:ouchem} +\nocite{punktgruppen:restriction} \printbibliography[heading=subbibliography] \end{refsection} -- cgit v1.2.1 From 34a84dc4897d19d29fcf4a3ddb82ce4528d5dbec Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 30 Jul 2021 11:08:48 +0200 Subject: Fix missing } in references.bib --- buch/papers/punktgruppen/references.bib | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib index b669036..43125ad 100644 --- a/buch/papers/punktgruppen/references.bib +++ b/buch/papers/punktgruppen/references.bib @@ -50,4 +50,5 @@ month = {4}, day = {9}, url = {https://www.youtube.com/watch?v=Ia2eHF1ZKoI}, - urldate = {2021-07-30}, \ No newline at end of file + urldate = {2021-07-30}, +} -- cgit v1.2.1 From a36ac5a29b664e802f57ac2a965056f1f5dd1a41 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 30 Jul 2021 11:18:28 +0200 Subject: Fix commas and details in references.bib --- buch/papers/punktgruppen/references.bib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib index 43125ad..05c803f 100644 --- a/buch/papers/punktgruppen/references.bib +++ b/buch/papers/punktgruppen/references.bib @@ -26,7 +26,7 @@ @book{punktgruppen:lang-elt2, title = {Elektrotechnik 2}, - author = {Hans-Dieter Lang}, + author = {Prof. Hans-Dieter Lang Ph.D}, publisher = {Fachhochschule Ostschweiz Rapperswil}, year = {2020}, month = {2}, @@ -35,7 +35,7 @@ @online{punktgruppen:ouchem, title = {Symmetry in Crystallography}, - author = {Dept. of Chemistry \& Biochemistry, Chemical Crystallography Laboratory, University of Oklahoma}, + author = {Dept. of Chemistry \& Biochemistry{,} Chemical Crystallography Laboratory{,} University of Oklahoma}, year = {2019}, month = {11}, day = {17}, @@ -44,8 +44,8 @@ } @online{punktgruppen:restriction, - title = {Structure of Materials}, - author = {Silvija Gradecak-Garaj}, + title = {Structure of Materials: Allowed Rotational Symmetry in Crystals}, + author = {Prof. Silvija Gradecak-Garaj{,} Massachusetts Institute of Technology (MIT)}, year = {2020}, month = {4}, day = {9}, -- cgit v1.2.1 From 903d9bf106456b14f7e5046410d512ed343d28a4 Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Fri, 30 Jul 2021 11:39:21 +0200 Subject: =?UTF-8?q?Verbesserungsvorschl=C3=A4ge=20in=20Kapitel=20Spieglung?= =?UTF-8?q?=20&=20Rotation=20umgesetzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/clifford/7_Reflektion.tex | 26 ++++++------ buch/papers/clifford/8_Rotation.tex | 74 +++++++++++++++++++---------------- 2 files changed, 56 insertions(+), 44 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/clifford/7_Reflektion.tex b/buch/papers/clifford/7_Reflektion.tex index bdfb4e8..e650d5a 100644 --- a/buch/papers/clifford/7_Reflektion.tex +++ b/buch/papers/clifford/7_Reflektion.tex @@ -6,7 +6,7 @@ \section{Spiegelung} \rhead{Spiegelung} -Die Spiegelung ist eine grundlegende, geometrische Operation, aus welcher man weitere, 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 Rotation, 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} @@ -35,9 +35,9 @@ Aus der linearen Algebra ist bekannt, dass man eine Spiegelung an einer Ebene wi \begin{equation} \label{RefLinAlg} \mathbf{v^{'}} = \mathbf{v} - 2 \cdot \mathbf{v_{\parallel \hat{n}}} = \mathbf{v} - 2 \cdot \mathbf{v_{\perp u}}. \end{equation} - Per Definition sind $\mathbf{v_{\parallel \hat{n}}} = \mathbf{v_{\perp u}}$. In der geometrischen Algebra verwenden wir aber in den Formeln Vektoren, welche Spiegelachsen, nicht Spiegelebenen, repräsentieren. \end{definition} -Es scheint für diese Formel aber umständlich zu sein, weitere Spiegelungen mit weiteren Spiegelebenen anzufügen. Man kann diese Abbildung aber auch als Matrix schreiben. Sei $\mathbf{\hat{n}}$ ein Normalenvektor auf die Spiegelungs-Achse bzw. -Ebene, also $\mathbf{\hat{n}}\perp \mathbf{u}$, und sei ausserdem normiert $|\mathbf{\hat{n}}| = 1$, dann kann man die Spiegelung durch die Matrix +Per Definition sind $\mathbf{v_{\parallel \hat{n}}} = \mathbf{v_{\perp u}}$, aber in der geometrischen Algebra verwenden wir bevorzugter weise in den Formeln Vektoren, welche eine Spiegelung an einer Hyperebene beschreiben. Im zweidimensionalen repräsentiert der Vektor $\mathbf{v^{'}}$ also eine Spiegelung vom Vektor $\mathbf{v}$ an einer Gerade und im dreidimensionalen eine Spiegelung an einer Ebene. +Es scheint für diese Formel \eqref{RefLinAlg} aber umständlich zu sein, weitere Spiegelungen mit weiteren Spiegelebenen anzufügen. Man kann diese Abbildung aber auch als Matrix schreiben. Sei $\mathbf{\hat{n}}$ ein Normalenvektor auf die Spiegelungs-Achse bzw. -Ebene, also $\mathbf{\hat{n}}\perp \mathbf{u}$, und sei ausserdem normiert $|\mathbf{\hat{n}}| = 1$, dann kann man die Spiegelung durch die Matrix \begin{align} S = E - 2\dfrac{1}{|\mathbf{n}|^2}\mathbf{nn}^t \end{align} @@ -46,16 +46,16 @@ beschrieben werden. In der zweiten und dritten Dimension ergibt die Berechnung S_2 = \begin{pmatrix} 1-2n_1^2 & -2n_1n_2 \\ -2n_1n_2 & 1-2n_2^2 - \end{pmatrix} \quad + \end{pmatrix}\enspace\text{und}\enspace S_3 = \begin{pmatrix} 1-2n_1^2 & -2n_1n_2 & -2n_1n_3\\ -2n_1n_2 & 1-2n_2^2 & -2n_2n_3\\ -2n_1n_3 & -2n_2n_3 & 1-2n_3^2\\ \end{pmatrix}. \end{align} -Diese Spiegelmatrizen gehören der orthogonalen Matrizengruppe $S\in \text{O}(n)$ an. Die Matrizengruppe $\text{O}(n)$ haben die Eigenschaft $S^t S = E$, was bedeutet, dass die Länge und Winkel bei der Abbildung beibehalten bleiben. Zusätzlich sind die Spiegelmatrizen symmetrisch, es gilt $S^t = S$. 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)$ 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 \begin{align} - S^t S = S^2 = E + S_n^t S_n = S_n^2 = E \end{align} schliessen kann. @@ -63,11 +63,16 @@ schliessen kann. Um die folgenden Formeln zu verstehen, definieren wir zuerst die Inverse eines Vektors, welche in dieser Form nicht in der linearen Algebra nicht existiert. \begin{definition} Die Inverse eines Vektors wird definiert als - \begin{align} - \mathbf{u}^{-1} = \dfrac{\mathbf{u}}{|\mathbf{u}|^2} \Rightarrow \mathbf{uu}^{-1} = \dfrac{\mathbf{u}^2}{|\mathbf{u}|^2} = 1. + \begin{align} \label{InverseGA} + \mathbf{u}^{-1} = \dfrac{\mathbf{u}}{|\mathbf{u}|^2}. \end{align} - Wie schon aus anderen algebraischen Strukturen bekannt, ergibt ein Element, hier $\mathbf{u}$, multipliziert mit dessen Inversen, hier $\mathbf{u}^{-1}$, das neutrale Element der Struktur, hier 1. \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. +\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 Spiegelungsgleichung in der geometrischen Algebra mit der Spiegelachse $\mathbf{u}$ ist definiert als @@ -75,8 +80,7 @@ Die geometrische Algebra leitet aus der obigen Formel \eqref{RefLinAlg} für ein \mathbf{v}' = \mathbf{uvu}^{-1} \end{align} \end{definition} - -verwendet man für $\mathbf{u}$ nur einen Einheitsvektor $\mathbf{\hat{u}}$, welcher die Länge 1 besitzt, wird die Gleichung zu +Verwendet man für $\mathbf{u}$ nur einen Einheitsvektor $\mathbf{\hat{u}}$, welcher die Länge 1 besitzt, wird die Gleichung zu \begin{align} \mathbf{v'} = \mathbf{\hat{u}v\hat{u}} \end{align} diff --git a/buch/papers/clifford/8_Rotation.tex b/buch/papers/clifford/8_Rotation.tex index 6a3251a..b960b56 100644 --- a/buch/papers/clifford/8_Rotation.tex +++ b/buch/papers/clifford/8_Rotation.tex @@ -6,7 +6,7 @@ \section{Rotation} \rhead{Rotation} -Eine Rotation kann man aus zwei aufeinanderfolgenden Spiegelungen bilden. Das wird für einige 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. +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) \begin{figure} @@ -49,72 +49,80 @@ Diese Drehmatrizen gehören der speziellen orthogonalen Matrizengruppe $D\in \te \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. \begin{satz} - Eine Rotation + Durch zwei nacheinander auf einen Vektor $\mathbf{v}$ angewendete Spiegelungen lässt sich eine Rotation \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}) \end{align} - lässt sich durch zwei nacheinander auf einen Vektor $\mathbf{v}$ angewendete Spiegelungen beschreiben. + beschreiben. \end{satz} Die Vektoren $\mathbf{w}$ und $\mathbf{u}$ bilden hier wiederum die Spiegelachsen. Diese Formel versuchen wir jetzt noch durch Umstrukturierung zu verbessern. \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}_{12}$ Ebene liegen. Weitere Drehungen können in höheren Dimensionen durch Linearkombinationen von Drehungen in den $\mathbf{e}_{ij}, i\not=j$ Ebenen erreicht werden. Für die Herleitung erweitern wir nun als erstes die Polarform +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}_{12}$ Ebene liegen. Weitere Drehungen können in höheren Dimensionen durch Linearkombinationen von Drehungen in den $\mathbf{e}_{ij}, i\not=j$ Ebenen 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) \end{align} -eines Vektors mit $\mathbf{e}_1^2 = 1$ beim Sinus +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} -um dann $\mathbf{e}_1$ +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} -ausklammern zu können. Die Ähnlichkeit des Klammerausdrucks zu der Eulerschen Formel bei den Komplexen Zahlen ist nun schon gut erkennbar. Versuchen wir nun mithilfe der Reihenentwicklungen +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 \end{align} -den Zusammenhang auch hier herzustellen. Verwenden wir jetzt noch die Eigenschaft, dass $\mathbf{e}_{12}^2=-1, \enspace\mathbf{e}_{12}^3=-\mathbf{e}_{12}, \dots$, bei dem Klammerausdruck in Formel \eqref{ExponentialGA} +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\\ - &= 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 + \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} \end{align} -dann sieht man die Übereinstimmung mit der Reihenentwicklung der Exponentialfunktion +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}, +\end{align} +es gibt eine Euler-Formel mit $mathbf{e}_{12}$ anstelle der imaginären Einheit $j$. + +Wenn man jetzt den Vektor \eqref{ExponentialGA} durch die eulersche Schreibweise \begin{align} - &e^{\theta_w\mathbf{e}_{12}}=\sum _{n=0}^{\infty }{\frac {(\theta_w\mathbf{e}_{12})^{n}}{n!}}={\frac {(\theta_w\mathbf{e}_{12})^{0}}{0!}}+{\frac {(\theta_w\mathbf{e}_{12})^{1}}{1!}}+{\frac {(\theta_w\mathbf{e}_{12})^{2}}{2!}}+{\frac {(\theta_w\mathbf{e}_{12})^{3}}{3!}}+\cdots\\ - &\Rightarrow \mathbf{w} = |w|\mathbf{e}_1 e^{\theta_w \mathbf{e}_{12}} = |w|\mathbf{e}_1\left(\cos(\theta_w)+ \sin(\theta_w) \mathbf{e}_{12}\right). + \mathbf{w} = |\mathbf{w}|\mathbf{e}_1e^{\theta_w\mathbf{e}_{12}} \end{align} -Man 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. -Bei den komplexen Zahlen würden man vom Punkt 1 anstatt $\mathbf{e}_1$ ausgehen. +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 Produkt von zwei Vektoren $\mathbf{wu}$ -\begin{align} +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}} \end{align} -so umformen, dass wir eine bessere Darstellung erhalten. 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}, anstatt mit $\mathbf{e}_1\mathbf{e}_1\mathbf{e}_2$ mit $\mathbf{e}_2\mathbf{e}_1\mathbf{e}_1$ erweitern +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 \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}|e^{\theta_w \mathbf{e}_{21}}\mathbf{e}_1\\ - &= |\mathbf{w}|e^{-\theta_w \mathbf{e}_{12}}\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 +\begin{align} + |\mathbf{w}|e^{-\theta_w \mathbf{e}_{12}}\mathbf{e}_1 \end{align} -und umstrukturiert wieder in die Vektorproduktformel einsetzen +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{wu} = |\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} -Der Term $\mathbf{u}^{-1}\mathbf{w}^{-1}$ +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}} \end{align} -kann durch die selbe Methode zusammengefasst werden. -Wenn wir den Winkel zwischen den Vektoren $\mathbf{w}$ und $\mathbf{u}$ als $\theta = \theta_w - \theta_u$ definieren erhalten wir +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}}\\ - \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} -die finale Form der Vektorprodukte. \subsubsection{Umstrukturierte Drehungsgleichung} Setzten wir nun unsere neuen Erkenntnisse in die Gleichung \eqref{rotGA} ein \begin{align} -- cgit v1.2.1 From 0cd67d0c23d8781999522a05cf2c5c49e76e3326 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Fri, 30 Jul 2021 11:41:58 +0200 Subject: save --- buch/papers/reedsolomon/dtf.tex | 86 +++++++++++----------- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 59617 -> 59617 bytes buch/papers/reedsolomon/idee.tex | 31 ++++---- buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1835615 -> 1835758 bytes buch/papers/reedsolomon/tikz/plotfft.tex | 4 +- buch/papers/reedsolomon/tikz/plotfftraw.tex | 80 ++++++++++++++++++++ buch/papers/reedsolomon/tikz/polynomraw.tex | 50 +++++++++++++ 7 files changed, 193 insertions(+), 58 deletions(-) create mode 100644 buch/papers/reedsolomon/tikz/plotfftraw.tex create mode 100644 buch/papers/reedsolomon/tikz/polynomraw.tex (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index e9717c8..5cee77b 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -1,15 +1,13 @@ % -% teil3.tex -- Beispiel-File für Teil 3 +% dtf.tex -- Idee mit DFT % -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% -\section{Übertragung mit hilfe der Diskrete Fourier Transformation +\section{Übertragung mit Hilfe der Diskrten Fourientransformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} -Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourientransformation. +Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourietransformation. Dies wird weder eine Erklärung der Forientransorfmation, noch ein genauer gebrauch für den Reed-Solomon-Code. -Dieser Abschnitt zeigt nur wie die Fourientransformation auf Fehler reagiert. -Das ganze zeigen wir mit einem Beispiel einer Übertragung von Zahlen mit Hilfe der Fourientransformation. +Dieser Abschnitt zeigt nur wie die Fourietransformation auf Fehler reagiert. +Das ganze zeigen wir mit einem Beispiel einer Übertragung von Zahlen mit Hilfe der Fourietransformation. \subsection{Diskrete Fourietransformation Zusamenhang \label{reedsolomon:subsection:dtfzusamenhang}} @@ -17,63 +15,69 @@ Mit hilfe der Fourietransformation werden die \textcolor{blue}{blauen Datenpunkt zu den \textcolor{darkgreen}{grünen Übertragungspunkten}. Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} wieder rekonstruiert werden. -\subsubsection{Beispiel einer Übertragung mit Fourientransformation +\subsubsection{Beispiel einer Übertragung \label{reedsolomon:subsection:Übertragungsabfolge}} Der Auftrag ist nun 64 Daten zu übertragen und nach 32 Fehler abzusicheren, 16 Fehler erkennen und rekonstruieren. -Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden. -In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für schritt, +Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden. +In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für Schritt, und hier werden die einzelne Schritte erklärt: \begin{enumerate}[(1)] -\item Das Signal hat 64 die Daten, Zahlen welche übertragen werden sollen. -Dabei zusätzlich nach 16 Fehler abgesichert, macht insgesamt 96 Übertragungszahlen. -(siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}) -Die 32 Fehlerkorrekturstellen werden als Null Übertragen -\item Nun wurde mittels der diskreten Fourientransformation diese 96 codiert. -Das heisst alle Informationen ist in alle Zahlenvorhanden. Auch die Fehlerkorrekturstellen Null. -\item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. -Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt. -\item Dieses wird nun Empfangen und mittels inversen diskreten Fourientransormation, wieder rücktransformiert.(Iklusive der Fehler) -\item Nun sieht man den Fehler im Decodieren in den Übertragungsstellen 64 bis 96, da es dort nicht mehr Null ist. -\item Nimmt man nun nur diese Stellen 64 bis 96, dies definieren wir als Syndrom, und transformiert nur dieses Syndrom. -\item Bekommt man die Fehlerstellen wieder, zwar nichtso genau, dennoch erkennt man wo die Fehler stattgefunden haben. -Dies definieren wir als Locator. -\end{enumerate} -Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert, -jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signal wieder. - + \item Das Signal hat 64 die Daten $k$, hier zufällige Zahlen, welche übertragen werden sollen. + Zusätzlich soll nach 16 Fehler $t$, die rekonstruierbar sind abgesichert werden. + Das macht dann insgesamt $k + 2t = + 64 +2 \cdot 16= 96$ Übertragungszahlen. + (siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}) + Die 32 Fehlerkorrekturstellen werden als Nullzahlen Übertragen. + \item Nun werden mittels der diskreten Fourietransformation diese 96 codiert, transformiert. + Das heisst alle Informationen ist in alle Zahlenvorhanden, auch die Fehlerkorrekturstellen Nullzahlen. + \item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. + Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt. +Zu Beachten ist auch noch, dass der Fehler um das 20- bis 150-Fache kleiner ist.Die Fehlerskala ist rechts. + \item Dieses wird nun Empfangen, man kann keine Fehler erkennen, da diese soviel kleiner sind. + Für das Decodieren wird die Inverse Fourietransformation angewendet, und alle Fehler werden mittransformiert. + \item Nun sieht man die Fehler im decodierten Signal in den Übertragungszahlen. + Von den Übertragungsstellen 64 bis 96 erkennt man, das diese nicht mehr Null sind. + \item Diese Fehlerkorrekturstellen 64 bis 96, dies definieren wir als Syndrom. + In diesem Syndrom ist die Fehlerinformation gespeichert und muss nur noch transformiert werden. + \item Hier sieht man genau wo die Fehler stattgefunden haben. + Leider nicht mehr mit der Qualtiätt der Ursprünglichen Fehler, sie sind nur noch 0.6 oder 0.4 gross. + Obwohl der Fehler um das 20Fache kleiner ist erkennt man im Locator die Fehlerstellen wieder. + \end{enumerate} + Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert, + jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signal wieder. \begin{figure} \centering - \resizebox{\textwidth}{!}{ - \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} - %\input{papers/reedsolomon/images/plotfft.tex} + \resizebox{1.1\textwidth}{!}{ + %\includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} + \input{papers/reedsolomon/tikz/plotfftraw.tex} } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} \end{figure} -Nun zur definition der Diskrete Fourietransformation, diese ist definiert als -\begin{equation} +Nun zur Definition der Diskrete Fourietransformation, diese ist definiert als + \begin{equation} \hat{c}_{k} = \frac{1}{N} \sum_{n=0}^{N-1} {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn}. ,\label{reedsolomon:DFT} -\end{equation} -Wenn man nun -\begin{equation} + \end{equation} + Wenn man nun + \begin{equation} w = e^{-\frac{2\pi j}{N} k} \label{reedsolomon:DFT_summand} -\end{equation} -ersetzte, und $N$ konstantbleibt, erhält man -\begin{equation} + \end{equation} + ersetzte, und $N$ konstantbleibt, erhält man + \begin{equation} \hat{c}_{k}= \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) \label{reedsolomon:DFT_polynom} -\end{equation} -was überaust ähnlich zu unserem Polynomidee ist. -Die Polynominterpolation und die Fourientransformation rechnen beide mit reelen Zahlen. + \end{equation} + was überaust ähnlich zu unserem Polynomidee ist. +Die Polynominterpolation und die Fourietransformation rechnen beide mit reelen Zahlen. Wenn die Fehlerabweichung sehr sehr klein ist, erkennt man diese irgendwann nicht mehr. Zusätzlich muss mann immer Grenzen bestimmen auf wieviel Stellen gerechnet wird und wie die Fehler erkannt werden im Locator. Deshalb haben Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf index c5e21e3..80d17d2 100644 Binary files a/buch/papers/reedsolomon/figures/plotfft.pdf and b/buch/papers/reedsolomon/figures/plotfft.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index d8b8a93..41e0d4c 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -1,8 +1,6 @@ % % idee.tex -- Polynom Idee % -% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil -% \section{Idee \label{reedsolomon:section:idee}} \rhead{Problemstellung} @@ -12,14 +10,14 @@ Doch nur schon um Fehler zu erkennen werden überproportional viele Daten doppel Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. Das Problem liegt darin Informationen, Zahlen, zu Übertragen und Fehler zu erkennen. -Beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, +Speziell beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, man kann sogar einige Fehler korrigieren. Der Unterschied des Fehler erkennen und korrigiren, 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 den original Wert rekonstruieren. -Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wieder doppelt und dreifach Sendung), +Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wird doppelt und dreifach gesendung), was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. -\externaldocument{papers/reedsolomon/anwendungen} -\ref{reedsolomon:section:anwendung} +Anwendungen finden sind im Abchnitt \externaldocument{papers/reedsolomon/anwendungen} +\ref{reedsolomon:section:anwendung} beschrieben. \subsection{Polynom-Ansatz \label{reedsolomon:section:polynomansatz}} @@ -43,28 +41,29 @@ mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, \textcolor{darkgreen}{41}, \textcolor{darkgreen}{60}, \textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ Wenn ein Fehler sich in die Übertragung eingeschlichen hat, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. -Der Leser/Empfänger weiss, den Grad des Polynoms und dessen Werte übermittelt wurden. +Der Leser/Empfänger weiss, den Grad des Polynoms und dessen \textcolor{darkgreen}{Werte} übermittelt wurden. Die Farbe blau brauchen wir für die \textcolor{blue}{Daten} welche wir mit der Farbe grün \textcolor{darkgreen}{Übermitteln}. \end{beispiel} \begin{beispiel} Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. -Hat es Fehler in der Übertragunge gegeben,(Bei Abb. \ref{fig:polynom} \textcolor{red}{roten Punkte}), -kann man diese erkennen, da alle Punkte, die korrekt sind, auf der Parabel liegen müssen. -(Bei Abb. \ref{fig:polynom} \textcolor{darkgreen}{grünen Punkte}) +Hat es Fehler in der Übertragunge gegeben,in der Abbilbung \ref{fig:polynom} die \textcolor{red}{roten Punkte}). +Erkennt man diese Fehler, da alle korrekten Punkte auf der Parabel liegen müssen. +Die \textcolor{darkgreen}{grünen Punkte} bestimmen die Parabel, und die Fehler können zu den +\textcolor{gray}{Orginalpunkte} rekonstruiert werden. Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, gegenüber dem mit 5 Punkten falsch liegt. \ref{fig:polynom} Werden es mehr Fehler kann nur erkannt werden, dass das Polynom nicht stimmt. Das orginale Polynom kann aber nicht mehr gefunden werden. -Da das Konkurrenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleitet. +Da andere Polynome oder das Konkurrenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleitet. Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig. \end{beispiel} -\begin{figure} +\begin{figure}%[!ht] \centering - \includegraphics[width=\textwidth]{papers/reedsolomon/figures/polynom2} - %\input{papers/reedsolomon/tikz/polynom2.tex} + %\includegraphics[width=\textwidth]{papers/reedsolomon/figures/polynom2} + \input{papers/reedsolomon/tikz/polynomraw.tex} \caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} @@ -90,6 +89,7 @@ Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. \begin{table} + \centering \begin{tabular}{ c c | c} \hline Nutzlas & Fehler & Übertragen \\ @@ -101,7 +101,8 @@ zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. $k$ & $t$ & $k+2t$ Werte eines Polynoms vom Grad $k-1$ \\ \hline \end{tabular} - \caption{\label{tab:fehlerkorrekturstellen} Fehlerkorrekturstellen Bestimmung.} + \caption{ Fehlerkorrekturstellen Bestimmung.} + \label{tab:fehlerkorrekturstellen} \end{table} Ein Nebeneffekt ist, dass dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index 1f2f0b9..4a44333 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex index 14af683..bb74dfb 100644 --- a/buch/papers/reedsolomon/tikz/plotfft.tex +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -69,9 +69,9 @@ %FFT & IFFT deskription \draw[thin,gray,dashed] (0,9) to (0,-9); - \node(IFFT) [scale=0.8] at (0,9.3) {IFFT}; + \node(IFFT) [scale=0.9] at (0,9.3) {IFFT}; \draw[stealth-](IFFT.south west)--(IFFT.south east); - \node(FFT) [scale=0.8, above of=IFFT] {FFT}; + \node(FFT) [scale=0.9, above of=IFFT] {FFT}; \draw[-stealth](FFT.north west)--(FFT.north east); \draw[thick, ->,] (codiert)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); diff --git a/buch/papers/reedsolomon/tikz/plotfftraw.tex b/buch/papers/reedsolomon/tikz/plotfftraw.tex new file mode 100644 index 0000000..141d2ce --- /dev/null +++ b/buch/papers/reedsolomon/tikz/plotfftraw.tex @@ -0,0 +1,80 @@ +\begin{tikzpicture}[] + + %--------------------------------------------------------------- + %Knote + \matrix(m) [draw = none, column sep=25mm, row sep=2mm]{ + + \node(signal) [] { + \begin{tikzpicture} + \begin{axis} + [title = {\Large {Signal}}, + xtick={0,20,40,64,80,98}] + \addplot[blue] table[col sep=comma] {tikz/signal.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(codiert) [] { + \begin{tikzpicture}[] + \begin{axis}[ title = {\Large {Codiert \space + \space Fehler}}, + xtick={0,40,60,100}, axis y line*=left] + \addplot[green] table[col sep=comma] {tikz/codiert.txt}; + \end{axis} + \begin{axis}[xtick={7,21,75}, axis y line*=right] + \addplot[red] table[col sep=comma] {tikz/fehler.txt}; + \end{axis} + \end{tikzpicture}}; \\ + + \node(decodiert) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Decodiert}}] + \addplot[blue] table[col sep=comma] {tikz/decodiert.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(empfangen) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Empfangen}}] + \addplot[green] table[col sep=comma] {tikz/empfangen.txt}; + \end{axis} + \end{tikzpicture}};\\ + + \node(syndrom) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Syndrom}}] + \addplot[black] table[col sep=comma] {tikz/syndrom.txt}; + \end{axis} + \end{tikzpicture}}; & + + \node(locator) [] { + \begin{tikzpicture} + \begin{axis}[title = {\Large {Locator}}] + \addplot[gray] table[col sep=comma] {tikz/locator.txt}; + \end{axis} + \end{tikzpicture}};\\ + }; + %------------------------------------------------------------- + %FFT & IFFT deskription + + \draw[thin,gray,dashed] (0,9) to (0,-9); + \node(IFFT) [scale=0.9] at (0,9.3) {IFFT}; + \draw[stealth-](IFFT.south west)--(IFFT.south east); + \node(FFT) [scale=0.9, above of=IFFT] {FFT}; + \draw[-stealth](FFT.north west)--(FFT.north east); + + \draw[thick, ->,] (codiert)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); + %Arrows + \draw[thick, ->] (signal.east) to (codiert.west); + \draw[thick, ->] (codiert.south) to (empfangen.north); + \draw[thick, ->] (empfangen.west) to (decodiert.east); + \draw[thick, ->] (syndrom.east) to (locator.west); + \draw[thick](decodiert.south east)++(-1.8,1) ellipse (1.3cm and 0.8cm) ++(-1.3,0) coordinate(zoom) ; + \draw[thick, ->] (zoom) to[out=180, in=90] (syndrom.north); + + %item + \node[circle, draw, fill =lightgray] at (signal.north west) {1}; + \node[circle, draw, fill =lightgray] at (codiert.north west) {2+3}; + \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; + \node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; + \node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; + \node[circle, draw, fill =lightgray] at (locator.north west) {7}; +\end{tikzpicture} \ No newline at end of file diff --git a/buch/papers/reedsolomon/tikz/polynomraw.tex b/buch/papers/reedsolomon/tikz/polynomraw.tex new file mode 100644 index 0000000..02968fd --- /dev/null +++ b/buch/papers/reedsolomon/tikz/polynomraw.tex @@ -0,0 +1,50 @@ +% polynomraw + +\newcommand{\teiler}{40} + + +%////////////////////////////////////// + +\begin{tikzpicture}[>=latex,thick,] + \draw[color=blue, line width=1.4pt] + plot[domain=0:8, samples=100] + ({\x},{(2*\x^2+1*\x+5)/\teiler}); + + \draw[->] (-0.2,0) -- (8,0) coordinate[label={$x$}]; + \draw[->] (0,-0.2) -- (0,150/\teiler) coordinate[label={right:$p(x)$}]; + + \def\punkt#1{ + \fill[color=green] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + + \def\hellpunkt#1{ + \fill[color=lightgray] #1 circle[radius=0.08]; + \draw[gray] #1 circle[ radius=0.07]; + } + + \draw[color=gray,line width=1pt,dashed] + plot[domain=0.5:7, samples=100] + ({\x},{(7.832*\x^2-51.5*\x+121.668)/\teiler}); + + + \punkt{(1,8/\teiler)} + \hellpunkt{(2,15/\teiler)} + \hellpunkt{(3,26/\teiler)} + \punkt{(4,41/\teiler)} + \punkt{(5,60/\teiler)} + \punkt{(6,83/\teiler)} + \punkt{(7,110/\teiler)} + + + + \def\erpunkt#1{ + \fill[color=red] #1 circle[radius=0.08]; + \draw #1 circle[radius=0.07]; + } + \erpunkt{(2,50/\teiler)} + \erpunkt{(3,37.66/\teiler)} + + \draw(0,100/\teiler) -- (-0.1,100/\teiler) coordinate[label={left:$100$}]; + \draw(1,0) -- (1,-0.1) coordinate[label={below:$1$}]; +\end{tikzpicture} \ No newline at end of file -- cgit v1.2.1 From b9cca93f61c5a1200503c75ef548ab12cce21887 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Fri, 30 Jul 2021 11:45:36 +0200 Subject: sourc from tikz changed to pdf --- buch/papers/reedsolomon/dtf.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 5cee77b..4552bed 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -50,8 +50,8 @@ Zu Beachten ist auch noch, dass der Fehler um das 20- bis 150-Fache kleiner ist. \begin{figure} \centering \resizebox{1.1\textwidth}{!}{ - %\includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} - \input{papers/reedsolomon/tikz/plotfftraw.tex} + \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} + %\input{papers/reedsolomon/tikz/plotfftraw.tex} } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} \label{fig:sendorder} -- cgit v1.2.1 From 6c2ea74f867d898626e5ef25c61814cd2aa49bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sat, 31 Jul 2021 11:57:23 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 17 +++++++++++++---- buch/papers/munkres/teil2.tex | 4 ++-- buch/papers/munkres/teil3.tex | 9 +++++---- 3 files changed, 20 insertions(+), 10 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index c13732c..4532783 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -8,21 +8,30 @@ \rhead{Problemstellung} Das spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen -Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Materialien auf bestimmte Orte, Stellen oder Aufgaben. +Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels. \subsection{Zuordnungsproblem an einem konkreten Beispiel \label{munkres:subsection:bonorum}} +Man hat der Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne +soll möglichst klein werden. +Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte angenommen werden.$\mathbb{R}$. +Beim Beispiel mit den Kräne gib es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden.$\mathbb{Z}$. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. +Doch das Problem bleibt, mit ganzzahligen Punkten kann kein Optimum erzielt werden und ist eine träge, langsame Angelegenheit. \subsection{Zuordnungsproblem abstrakt \label{munkres:subsection:bonorum}} -Es sind alle Angebots- und Bedarfsmengen gleich 1 +In einem Zuordnungsproblem sind alle Angebots- und Bedarfsmengen gleich 1 \begin{equation} a_{i}=b_{j}=1 \end{equation} -\subsection{alternative Darstellungen des Zuordnungsproblems +Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann dann auch der Faktor Kosten mit in die Rechnung eingebracht werden. + +In der Zelle dieser Matrix sind $a_{i,j}$ die Kosten dargestellt, die entstehen, wenn man z.B. einem Arbeiter $i$ die Aufgabe $j$ zuordnet. + +\subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \begin{equation} Netzwerk @@ -35,7 +44,7 @@ Bitpartiter Graph \end{equation} Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen zwischen den Elementen zweier Mengen. -Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen» +Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. \begin{figure} \centering \includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung} diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index 9a44cd4..a3b249e 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -7,7 +7,7 @@ \label{munkres:section:teil2}} \rhead{Schwierigkeit der Lösung (Permutationen)} -Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine maximale Zuordnung (maximales Matching) gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. +Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. -Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer n×n-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von n Elementen gibt, also n!. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen. +Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index cd47c92..6307f55 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -7,7 +7,7 @@ \label{munkres:section:teil3}} \rhead{Der Munkres-Algorithmus (Ungarische Methode)} -Mit der ungarischen Methode können also lineare Optimierungsprobleme gelöst +Mit der ungarischen Methode können also Optimierungsprobleme gelöst werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der @@ -29,15 +29,16 @@ um eine $O(n^3)$-Laufzeit zu erreichen. \subsection{Besondere Leistung der Ungarischen Methode \label{munkres:subsection:malorum}} -Es ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem +Die Ungarische Methode ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem in polynomieller Zeit löst. Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms -wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. - +wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die "Grösse" des Problems. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden sind. + \begin{figure} \centering \includegraphics[width=14cm]{papers/munkres/figures/beispiel_munkres} -- cgit v1.2.1 From 31b66acba16f525d41c42094601ade8afb3fd549 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Sat, 31 Jul 2021 21:36:30 +0200 Subject: updare --- buch/papers/multiplikation/images/bigo.pdf | Bin 26821 -> 27173 bytes buch/papers/multiplikation/images/bigo.tex | 12 +++++------- buch/papers/multiplikation/loesungsmethoden.tex | 8 ++++---- buch/papers/multiplikation/problemstellung.tex | 6 +++--- 4 files changed, 12 insertions(+), 14 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf index a2599fa..c29a891 100644 Binary files a/buch/papers/multiplikation/images/bigo.pdf and b/buch/papers/multiplikation/images/bigo.pdf differ diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex index 71826f5..a415ccb 100644 --- a/buch/papers/multiplikation/images/bigo.tex +++ b/buch/papers/multiplikation/images/bigo.tex @@ -41,17 +41,15 @@ \begin{tikzpicture} \begin{axis}[ - xmode=log, - ymode=log, - log ticks with fixed point, + xmode=log, ymode=log, + xmin=1e-0, xmax=5e1, + ymin=10e-1, ymax=1e7, + grid=both, + major grid style={black!50}, xlabel = $n$ (Data Input), ylabel = {$t$ (time)}, legend pos=north east, very thick, - grid=minor, - ymax = 100000, - ymin = 0.5, - xmin = 1, yticklabels=\empty, xticklabels=\empty, scale only axis=true, diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 8bdbf2c..7ee0b6e 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -65,13 +65,13 @@ Das Matrizen produklt \begin{bmatrix} \mathbf{C}_{11} & \mathbf{C}_{12}\\ \mathbf{C}_{21} & \mathbf{C}_{22} -\end{bmatrix} -\end{equation}, +\end{bmatrix}, +\end{equation} \begin{equation} -\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj}. +\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj} \label{multiplikation:eq:MM_block} \end{equation} -ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, wobei hier f\"ur die Multiplikation die Matrizenmultiplikation verwendet wird. +ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplikation 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. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index fed6a9f..2688f27 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -34,7 +34,7 @@ In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufze \subsubsection{Beispiel Algorithmen} -Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklassen geh\"oren. +Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden kann. \paragraph{Beschr\"ankter Algorithmus} 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. @@ -66,7 +66,7 @@ Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\ \paragraph{Linearer Algorithmus} Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares Verhalten. -Die \texttt{for}-Schleife wird $n$-mal durchgef\"hrt und f\"uhrt deshalb zu $\mathcal{O}(n)$. +Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}(n)$. \begin{algorithm}\caption{} \setlength{\lineskip}{7pt} @@ -87,7 +87,7 @@ Die \texttt{for}-Schleife wird $n$-mal durchgef\"hrt und f\"uhrt deshalb zu $\ma \paragraph{Quadratischer Algorithmus} Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. -Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchgef\"hrt und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. +Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchglaufen und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. \begin{algorithm}[H]\caption{} -- cgit v1.2.1 From 5c98f91bd4bc2b88c5ee0c746951c91f38963459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 1 Aug 2021 14:19:47 +0200 Subject: neue version --- buch/papers/munkres/teil3.tex | 57 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 6307f55..557d179 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -34,14 +34,67 @@ in polynomieller Zeit löst. Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die "Grösse" des Problems. +\subsection{Unterschiedliche Anzahl von Quellen und Zielen +\label{munkres:subsection:malorum}} +Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B dann der Fall, wenn eine 3 Mitarbeiter 4 Eignungstests abdsolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise eine $4\times 3$ wird zu einer $4\times 4$ Matrix. + \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden sind. +Die ungarische Methode kann in einem einfachen händischen Beispiel +erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer +weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass +jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. +Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden +sind. + +\begin{enumerate} +\item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei +allen anderen Ziffern in der jeweiligen Zeile subtrahiert. + +\item Danach zieht man wiederum die kleinste Zahl in jeder Spalte von allen +Zahlen in der Spalte ab. + +\item Es sollen möglichst viele Nullen markiert werden, welche freistehend sind. +(Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur +eine markierte Null zu haben) + +\item Jeweilige Zeilen eruieren, bei welchen keine markierte Null vorhanden sind und kennzeichnen. + +\item In der vorherigen Zeile die 0 eruieren und die Spalte ebenfalls +kennzeichnen (*2) + +\item Im der selben Spalte die Markierte Null eruieren und die dazugehörige +Zeile kennzeichnen (*3) + +\item Alle Zeilen durchstreichen, welche KEINE Kennzeichnungen (*) haben + +\item Alle Spalten durchstreichen, welche EINE Kennzeichnung besitzt! (hier, *2) + +\item Kleinste Ziffer auswählen, welche nicht schon durchgestrichen sind. +(Im Beispiel ist es die Zahl 1. (Egal welche 1) + +\item Die eruierte kleinste Ziffer, wird von den nicht durchgestrichenen Ziffern +subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen) + +\item Jeweilige Zahlen eruieren, welche vorgängig doppelt durchgestrichen wurden. + +\item Kleinste eruierte Ziffer von vorhin auf die zwei markierten Ziffern addieren. + +\item Es sollen wiederum von neuem möglichst viele Nullen markiert werden, +welche freistehend sind. In diesem Schritt werden nur die markierten Nullen betrachtet. + +\item Aus allen markierten Nullen in eine eins umwandeln. + +\item Die restlichen Ziffern, durch eine Null ersetzen. + +\item Zu guter letzt soll überall wo eine 1 steht, in der Ausgangsmatrix die +dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen ergeben sich nach Summieren der Zahlen der minimalste Transportweg. +\end{enumerate} \begin{figure} \centering -\includegraphics[width=14cm]{papers/munkres/figures/beispiel_munkres} +\includegraphics[width=14cm]{papers/munkres/figures/Ungarische Methode Beispiel} \caption{Händisches Beispiel des Munkres Algorithmus.} \label{munkres:Vr2} \end{figure} -- cgit v1.2.1 From 28efadd162ae3d48c04276da8e971155921d5812 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Sun, 1 Aug 2021 22:50:04 +0200 Subject: update --- buch/papers/multiplikation/code/MM.py | 23 +++++----- buch/papers/multiplikation/code/meas_1024.pdf | Bin 17660 -> 17653 bytes buch/papers/multiplikation/code/meas_1024.txt | 10 ++--- buch/papers/multiplikation/code/meas_128.pdf | Bin 17961 -> 18120 bytes buch/papers/multiplikation/code/meas_128.txt | 10 ++--- buch/papers/multiplikation/code/meas_256.pdf | Bin 18067 -> 19428 bytes buch/papers/multiplikation/code/meas_256.txt | 10 ++--- buch/papers/multiplikation/code/meas_32.pdf | Bin 17078 -> 17964 bytes buch/papers/multiplikation/code/meas_32.txt | 10 ++--- buch/papers/multiplikation/code/meas_64.pdf | Bin 17678 -> 17747 bytes buch/papers/multiplikation/code/meas_64.txt | 10 ++--- buch/papers/multiplikation/loesungsmethoden.tex | 53 +++++++++++++++++++++++- buch/papers/multiplikation/main.tex | 22 ++++++++++ buch/papers/multiplikation/references.bib | 17 ++++++++ 14 files changed, 127 insertions(+), 38 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index 626b82d..352771f 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -174,10 +174,11 @@ def test_perfomance(n): 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() plt.xlabel("n") plt.ylabel("time (s)") - plt.grid(True) + plt.grid(True, which="both", ls="-") plt.tight_layout() # plt.yscale('log') plt.legend(fontsize=19) @@ -198,7 +199,7 @@ def plot(num): plt.plot(n, t_mm, label='3 For Loops', 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_wino, label='Winograd', lw=5) plt.plot(n, t_np, label='NumPy A@B', lw=5) plt.legend() plt.xlabel("n") @@ -275,22 +276,22 @@ def plot_c_res(ave, num): # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - plot_c_res(1, 4096) + # plot_c_res(1, 4096) # plot(8) - # n = np.logspace(1,10,10,base=2,dtype=(np.int)) + n = np.logspace(1,8,8,base=2,dtype=(np.int)) # n = np.arange(1,50,2) - A = np.random.randint(-10, 10, (5,3)) - B = np.random.randint(-10, 10, (3,5)) + # A = np.random.randint(-10, 6, (5,3)) + # B = np.random.randint(-10, 6, (3,5)) - C = winograd2(A, B) - C_test = A@B - print(C) - print(C_test) + # C = winograd2(A, B) + # C_test = A@B + # print(C) + # print(C_test) # print(np.equal(C, C_test)) - # t_np = test_perfomance(n) + t_np = test_perfomance(n) # C = strassen(A, B) # C_test = A@B diff --git a/buch/papers/multiplikation/code/meas_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf index fd0a108..7b7a133 100644 Binary files a/buch/papers/multiplikation/code/meas_1024.pdf and b/buch/papers/multiplikation/code/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/code/meas_1024.txt b/buch/papers/multiplikation/code/meas_1024.txt index c5ce619..ab507a2 100644 --- a/buch/papers/multiplikation/code/meas_1024.txt +++ b/buch/papers/multiplikation/code/meas_1024.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 5.120000000000000000e+02 1.024000000000000000e+03 -1.502037048339843750e-05 6.628036499023437500e-05 4.780292510986328125e-04 2.713203430175781250e-03 2.115225791931152344e-02 1.758832931518554688e-01 1.338865518569946289e+00 1.009106445312500000e+01 8.192077994346618652e+01 7.835870332717895508e+02 -6.675720214843750000e-06 7.200241088867187500e-05 5.540847778320312500e-04 3.144979476928710938e-03 2.545046806335449219e-02 2.083067893981933594e-01 1.659256219863891602e+00 1.319160294532775879e+01 1.046767003536224365e+02 9.679818902015686035e+02 -1.668930053710937500e-05 1.628398895263671875e-04 7.648468017578125000e-04 4.426956176757812500e-03 2.922415733337402344e-02 1.800994873046875000e-01 1.286747694015502930e+00 9.412034273147583008e+00 6.263725924491882324e+01 4.427414393424987793e+02 -2.408027648925781250e-05 8.463859558105468750e-05 4.761219024658203125e-04 2.339839935302734375e-03 1.682758331298828125e-02 1.299476623535156250e-01 1.048770904541015625e+00 8.114667415618896484e+00 6.373566389083862305e+01 6.489995403289794922e+02 -1.573562622070312500e-05 7.152557373046875000e-06 7.152557373046875000e-06 2.074241638183593750e-05 5.388259887695312500e-05 6.365776062011718750e-05 3.257751464843750000e-03 1.396179199218750000e-03 3.274917602539062500e-03 2.186250686645507812e-02 +1.859664916992187500e-05 8.296966552734375000e-05 5.471706390380859375e-04 3.053665161132812500e-03 2.407431602478027344e-02 1.868948936462402344e-01 1.563691616058349609e+00 1.100623321533203125e+01 8.547679090499877930e+01 7.507572824954986572e+02 +8.106231689453125000e-06 9.012222290039062500e-05 7.290840148925781250e-04 4.970788955688476562e-03 2.718997001647949219e-02 2.652802467346191406e-01 1.777865171432495117e+00 1.327002429962158203e+01 1.053971357345581055e+02 8.473208103179931641e+02 +2.098083496093750000e-05 1.742839813232421875e-04 9.438991546630859375e-04 4.754066467285156250e-03 4.852557182312011719e-02 2.204136848449707031e-01 1.447179555892944336e+00 9.938656568527221680e+00 6.396102952957153320e+01 4.614939928054809570e+02 +2.789497375488281250e-05 1.049041748046875000e-04 5.528926849365234375e-04 4.555702209472656250e-03 1.871442794799804688e-02 1.530685424804687500e-01 1.194762229919433594e+00 8.298985958099365234e+00 6.836994743347167969e+01 5.373736469745635986e+02 +1.835823059082031250e-05 7.867813110351562500e-06 1.001358032226562500e-05 5.412101745605468750e-05 4.267692565917968750e-05 1.184940338134765625e-04 2.441406250000000000e-04 6.957054138183593750e-04 2.217054367065429688e-03 1.880884170532226562e-02 diff --git a/buch/papers/multiplikation/code/meas_128.pdf b/buch/papers/multiplikation/code/meas_128.pdf index ed1ec63..c54648f 100644 Binary files a/buch/papers/multiplikation/code/meas_128.pdf and b/buch/papers/multiplikation/code/meas_128.pdf differ diff --git a/buch/papers/multiplikation/code/meas_128.txt b/buch/papers/multiplikation/code/meas_128.txt index 976bbdf..f3a5beb 100644 --- a/buch/papers/multiplikation/code/meas_128.txt +++ b/buch/papers/multiplikation/code/meas_128.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 -1.978874206542968750e-05 1.134872436523437500e-04 4.298686981201171875e-04 2.815246582031250000e-03 2.616596221923828125e-02 1.767718791961669922e-01 1.293319463729858398e+00 -6.675720214843750000e-06 1.251697540283203125e-04 4.818439483642578125e-04 3.490447998046875000e-03 2.465796470642089844e-02 2.014584541320800781e-01 1.630620479583740234e+00 -2.408027648925781250e-05 2.126693725585937500e-04 1.172780990600585938e-03 4.364490509033203125e-03 3.148293495178222656e-02 2.010228633880615234e-01 1.429297924041748047e+00 -2.932548522949218750e-05 1.466274261474609375e-04 4.270076751708984375e-04 2.837419509887695312e-03 1.723575592041015625e-02 1.308519840240478516e-01 1.015527009963989258e+00 -3.337860107421875000e-05 1.096725463867187500e-05 9.536743164062500000e-06 3.600120544433593750e-05 2.837181091308593750e-05 5.912780761718750000e-05 1.981019973754882812e-03 +1.239776611328125000e-05 5.507469177246093750e-05 3.888607025146484375e-04 2.762079238891601562e-03 2.097773551940917969e-02 1.672370433807373047e-01 1.410297393798828125e+00 +5.483627319335937500e-06 5.888938903808593750e-05 3.871917724609375000e-04 3.364324569702148438e-03 2.481031417846679688e-02 2.047052383422851562e-01 1.712310314178466797e+00 +1.358985900878906250e-05 1.189708709716796875e-04 6.430149078369140625e-04 5.586385726928710938e-03 3.101944923400878906e-02 1.874091625213623047e-01 1.327976465225219727e+00 +1.978874206542968750e-05 7.224082946777343750e-05 4.618167877197265625e-04 3.294944763183593750e-03 1.755571365356445312e-02 1.360688209533691406e-01 1.028253555297851562e+00 +1.215934753417968750e-05 5.722045898437500000e-06 2.074241638183593750e-05 4.339218139648437500e-05 2.813339233398437500e-05 5.292892456054687500e-05 1.921653747558593750e-04 diff --git a/buch/papers/multiplikation/code/meas_256.pdf b/buch/papers/multiplikation/code/meas_256.pdf index 5f049dc..4ca7102 100644 Binary files a/buch/papers/multiplikation/code/meas_256.pdf and b/buch/papers/multiplikation/code/meas_256.pdf differ diff --git a/buch/papers/multiplikation/code/meas_256.txt b/buch/papers/multiplikation/code/meas_256.txt index 15035c6..2ca4447 100644 --- a/buch/papers/multiplikation/code/meas_256.txt +++ b/buch/papers/multiplikation/code/meas_256.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 -1.049041748046875000e-05 5.340576171875000000e-05 5.936622619628906250e-04 2.707719802856445312e-03 2.246093750000000000e-02 1.631326675415039062e-01 1.335460901260375977e+00 1.052024245262145996e+01 -4.768371582031250000e-06 5.531311035156250000e-05 8.208751678466796875e-04 3.099203109741210938e-03 2.490711212158203125e-02 2.070860862731933594e-01 1.739669799804687500e+00 1.384817218780517578e+01 -1.478195190429687500e-05 1.132488250732421875e-04 5.970001220703125000e-04 3.906726837158203125e-03 3.041696548461914062e-02 2.000186443328857422e-01 1.392681598663330078e+00 9.388872385025024414e+00 -1.716613769531250000e-05 6.866455078125000000e-05 5.314350128173828125e-04 2.688407897949218750e-03 1.695108413696289062e-02 1.297233104705810547e-01 1.087257385253906250e+00 8.699601650238037109e+00 -2.336502075195312500e-05 4.529953002929687500e-06 8.106231689453125000e-06 4.291534423828125000e-05 6.008148193359375000e-05 8.988380432128906250e-05 1.647472381591796875e-04 4.460811614990234375e-04 +1.096725463867187500e-05 5.531311035156250000e-05 3.712177276611328125e-04 2.662897109985351562e-03 2.111244201660156250e-02 1.660463809967041016e-01 1.280746459960937500e+00 1.149287748336791992e+01 +5.483627319335937500e-06 5.745887756347656250e-05 4.055500030517578125e-04 3.203868865966796875e-03 2.503871917724609375e-02 2.148163318634033203e-01 1.655935287475585938e+00 1.472915720939636230e+01 +1.335144042968750000e-05 1.153945922851562500e-04 6.134510040283203125e-04 3.850460052490234375e-03 2.817606925964355469e-02 1.827111244201660156e-01 1.277473211288452148e+00 9.337273359298706055e+00 +1.907348632812500000e-05 9.274482727050781250e-05 3.526210784912109375e-04 2.403974533081054688e-03 1.725149154663085938e-02 1.314754486083984375e-01 1.121860027313232422e+00 8.884316682815551758e+00 +3.147125244140625000e-05 6.675720214843750000e-06 4.768371582031250000e-06 7.867813110351562500e-06 2.574920654296875000e-05 5.888938903808593750e-05 2.071857452392578125e-04 6.518363952636718750e-04 diff --git a/buch/papers/multiplikation/code/meas_32.pdf b/buch/papers/multiplikation/code/meas_32.pdf index 94c3731..b926095 100644 Binary files a/buch/papers/multiplikation/code/meas_32.pdf and b/buch/papers/multiplikation/code/meas_32.pdf differ diff --git a/buch/papers/multiplikation/code/meas_32.txt b/buch/papers/multiplikation/code/meas_32.txt index afdb6d5..0fdc18d 100644 --- a/buch/papers/multiplikation/code/meas_32.txt +++ b/buch/papers/multiplikation/code/meas_32.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 -1.215934753417968750e-05 5.459785461425781250e-05 3.700256347656250000e-04 3.249406814575195312e-03 1.996850967407226562e-02 -4.529953002929687500e-06 5.650520324707031250e-05 4.577636718750000000e-04 4.029273986816406250e-03 2.444481849670410156e-02 -1.311302185058593750e-05 1.165866851806640625e-04 6.275177001953125000e-04 4.323244094848632812e-03 2.624726295471191406e-02 -1.835823059082031250e-05 6.890296936035156250e-05 3.914833068847656250e-04 2.423048019409179688e-03 1.761770248413085938e-02 -1.263618469238281250e-05 5.006790161132812500e-06 5.960464477539062500e-06 1.144409179687500000e-05 3.600120544433593750e-05 +1.239776611328125000e-05 5.507469177246093750e-05 3.802776336669921875e-04 2.795457839965820312e-03 2.073740959167480469e-02 +5.006790161132812500e-06 5.841255187988281250e-05 3.988742828369140625e-04 3.505229949951171875e-03 2.511668205261230469e-02 +1.335144042968750000e-05 1.149177551269531250e-04 6.387233734130859375e-04 4.088878631591796875e-03 2.969408035278320312e-02 +1.955032348632812500e-05 8.058547973632812500e-05 3.998279571533203125e-04 2.514839172363281250e-03 1.842117309570312500e-02 +1.215934753417968750e-05 8.583068847656250000e-06 6.675720214843750000e-06 2.694129943847656250e-05 2.789497375488281250e-05 diff --git a/buch/papers/multiplikation/code/meas_64.pdf b/buch/papers/multiplikation/code/meas_64.pdf index 3a90949..92af29b 100644 Binary files a/buch/papers/multiplikation/code/meas_64.pdf and b/buch/papers/multiplikation/code/meas_64.pdf differ diff --git a/buch/papers/multiplikation/code/meas_64.txt b/buch/papers/multiplikation/code/meas_64.txt index ae6ff9b..b4fc7a1 100644 --- a/buch/papers/multiplikation/code/meas_64.txt +++ b/buch/papers/multiplikation/code/meas_64.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 -1.645088195800781250e-05 7.295608520507812500e-05 3.807544708251953125e-04 2.672195434570312500e-03 2.010774612426757812e-02 1.662156581878662109e-01 -7.390975952148437500e-06 7.843971252441406250e-05 4.265308380126953125e-04 3.107070922851562500e-03 2.457642555236816406e-02 2.122807502746582031e-01 -1.931190490722656250e-05 1.568794250488281250e-04 7.593631744384765625e-04 3.937005996704101562e-03 3.596329689025878906e-02 2.131938934326171875e-01 -2.622604370117187500e-05 9.226799011230468750e-05 3.504753112792968750e-04 2.469539642333984375e-03 1.652932167053222656e-02 1.281068325042724609e-01 -1.788139343261718750e-05 7.152557373046875000e-06 6.914138793945312500e-06 1.120567321777343750e-05 2.884864807128906250e-05 6.914138793945312500e-05 +2.145767211914062500e-05 6.175041198730468750e-05 4.422664642333984375e-04 3.235816955566406250e-03 2.289748191833496094e-02 1.855163574218750000e-01 +1.025199890136718750e-05 6.341934204101562500e-05 5.202293395996093750e-04 3.566026687622070312e-03 3.026723861694335938e-02 2.312932014465332031e-01 +2.384185791015625000e-05 1.807212829589843750e-04 6.821155548095703125e-04 4.796504974365234375e-03 2.968001365661621094e-02 2.291278839111328125e-01 +3.504753112792968750e-05 1.106262207031250000e-04 4.322528839111328125e-04 2.696514129638671875e-03 2.188420295715332031e-02 1.477701663970947266e-01 +3.218650817871093750e-05 1.144409179687500000e-05 7.390975952148437500e-06 4.625320434570312500e-05 3.814697265625000000e-05 5.435943603515625000e-05 diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 7ee0b6e..0f6aa6b 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -295,9 +295,58 @@ Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen \end{algorithmic} \end{algorithm} -\subsection{Weitere Algorithmen} +\subsection{Basic Linear Algebra Subprograms (BLAS)} + +die gebr\"uchlichen Methode f\"ur die Anwendung einer optimierten Matrizenmultiplikation ist die Verwendung einer Subrutine 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}. + +\textit{BLAS} sind dabei in drei unterschiedliche Levels aufgeteilt. + +\begin{itemize} + \item Level 1 + \begin{itemize} + \item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{x}+\mathbf{y}$ + \item Dieses Level hat $\mathcal{O}(n)$ karakteristik + \end{itemize} + \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)$ karakteristik + \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)$ karakteristik + \end{itemize} +\end{itemize} + +Die \textit{BLAS} sind auf die modernen Computer Prozessoren optimiert und k\"onnen dank einer ausgek\"ugelter Verwedung der Speicher Architektur zur erheblichen Leistungoprimierung f\"uhren. + + +\subsubsection{General Matrix Multiplication (GEMM)} + +Die \textit{Double-GEMM} ist in \cite{multiplikation:DGEMM} 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 Implementaion 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] +cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, + m, n, k, 1, A, m , B, k, 0, C, m); +\end{lstlisting} +definiert. + -\textcolor{red}{TODO: BLAS} \section{Implementation} \rhead{Implementation} diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex index 8d0a8df..fb1908e 100755 --- a/buch/papers/multiplikation/main.tex +++ b/buch/papers/multiplikation/main.tex @@ -4,6 +4,28 @@ % % (c) 2021 Hochschule Rapperswil % +\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue +\definecolor{mylilas}{RGB}{170,55,241} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} +\lstdefinestyle{multiplikationC}{ + numbers=left, + belowcaptionskip=1\baselineskip, + breaklines=true, + frame=l, + framerule=0pt, + framesep=-1pt, + xleftmargin=1em, + language=C, + showstringspaces=false, + basicstyle=\ttfamily, + keywordstyle=\bfseries\color{green!40!black}, + commentstyle=\itshape\color{purple!40!black}, + identifierstyle=\color{blue}, + stringstyle=\color{red}, + numberstyle=\ttfamily\tiny, + backgroundcolor=\color{backcolour} +} + \chapter{Schnelle Matrizen Multiplikation\label{chapter:multiplikation}} \lhead{FMM} \begin{refsection} diff --git a/buch/papers/multiplikation/references.bib b/buch/papers/multiplikation/references.bib index 63cb976..8815386 100755 --- a/buch/papers/multiplikation/references.bib +++ b/buch/papers/multiplikation/references.bib @@ -83,3 +83,20 @@ day = {28} } +@online{multiplikation:BLAS, + title = {BLAS (Basic Linear Algebra Subprograms)}, + url = {http://www.netlib.org/blas/}, + date = {2021-08-01}, + year = {2021}, + month = {8}, + day = {01} +} + +@online{multiplikation:DGEMM, + title = {DGEMM}, + url = {http://www.netlib.org/lapack/explore-html/d1/d54/group__double__blas__level3_gaeda3cbd99c8fb834a60a6412878226e1.html#gaeda3cbd99c8fb834a60a6412878226e1}, + date = {2021-08-01}, + year = {2021}, + month = {8}, + day = {01} +} -- cgit v1.2.1 From 11264adfdeba52738aa6ee7a96958936a20d4984 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Mon, 2 Aug 2021 08:14:39 +0200 Subject: update --- buch/papers/multiplikation/loesungsmethoden.tex | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 7ee0b6e..8e3369d 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -131,7 +131,7 @@ Die 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}} \\ @@ -187,10 +187,10 @@ der Matrix $\mathbf{C}$ gebraucht. \end{algorithmic} \end{algorithm} Strassen's 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}$ . +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}$. -Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. +Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf} @@ -303,5 +303,23 @@ Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen \rhead{Implementation} \textcolor{red}{TODO: messresultate} +Folgende Algorithmen wurden jweiles in \texttt{C} und \texttt{Python} implementiert. +\begin{itemize} + \item Standard Matrizenmultiplikation + \item \textit{Devide and Conquer} Matrizenmultiplikation + \item Strassen's Matrizenmultiplikation + \item Winograd's Matrizenmultiplikation + \item \texttt{CBLAS} Matrizenmultiplikation in \texttt{C} + \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} +\end{itemize} + \section{Fazit} \rhead{Fazit} + +Wie man in \textcolor{red}{hyperlink Messresultate} gesehen haben, sind die geziegten Algorithmen, trotz den theoretisch geringeren Zeitkomplexitäten, den Implementationen der numerischen Bibliotheken klar unterlegen. +Einen optimierten 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 keleine Mikrocontroller ohne Floatingpoint Recheneinhieten oder auch an \textit{Field Programmable Gate Arrays (FPGA's)}. +Sobland sehr grosse Matrizen multipliziert werden müssen und eine Addition in weniger Taktzyklen als eine Multiplikation durcheführt werden kann, können die gezeigten Algorithmen von Vorteil sein. -- cgit v1.2.1 From 65966d22f384fa01a8db10b7fd47857efde92a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:06:30 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 24 +++++++++++++++--------- buch/papers/munkres/teil3.tex | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 4532783..867830f 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -7,17 +7,25 @@ \label{munkres:section:teil1}} \rhead{Problemstellung} -Das spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen +Das Spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels. \subsection{Zuordnungsproblem an einem konkreten Beispiel \label{munkres:subsection:bonorum}} -Man hat der Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne +Man hat den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne soll möglichst klein werden. -Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte angenommen werden.$\mathbb{R}$. -Beim Beispiel mit den Kräne gib es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden.$\mathbb{Z}$. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. -Doch das Problem bleibt, mit ganzzahligen Punkten kann kein Optimum erzielt werden und ist eine träge, langsame Angelegenheit. +Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte angenommen werden $\mathbb{R}$. +Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden $\mathbb{Z}$. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. +Für solche Optimierungsproblem für reelle Varianten sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art uns weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. + +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/ganzzahlige_punkte} +\caption{$K_{3,3}$ Problem der Ganzzahligkeit.} +\label{munkres:Vr2} +\end{figure} + \subsection{Zuordnungsproblem abstrakt \label{munkres:subsection:bonorum}} @@ -26,10 +34,8 @@ In einem Zuordnungsproblem sind alle Angebots- und Bedarfsmengen gleich 1 \begin{equation} a_{i}=b_{j}=1 \end{equation} - -Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann dann auch der Faktor Kosten mit in die Rechnung eingebracht werden. - -In der Zelle dieser Matrix sind $a_{i,j}$ die Kosten dargestellt, die entstehen, wenn man z.B. einem Arbeiter $i$ die Aufgabe $j$ zuordnet. +Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. +In der Zelle dieser Matrix sind $a_{i,j}$ die Wege dargestellt, die entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 557d179..7faf958 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -94,7 +94,7 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen \begin{figure} \centering -\includegraphics[width=14cm]{papers/munkres/figures/Ungarische Methode Beispiel} +\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel} \caption{Händisches Beispiel des Munkres Algorithmus.} \label{munkres:Vr2} \end{figure} -- cgit v1.2.1 From a8df39c46bc2ac0e92fc36d14d9d320d748bdf70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:37:31 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- buch/papers/munkres/teil3.tex | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 867830f..d22b57f 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -22,7 +22,7 @@ Für solche Optimierungsproblem für reelle Varianten sind verschiedene Verfahre \begin{figure} \centering \includegraphics[width=5cm]{papers/munkres/figures/ganzzahlige_punkte} -\caption{$K_{3,3}$ Problem der Ganzzahligkeit.} +\caption{Problem der Ganzzahligkeit.} \label{munkres:Vr2} \end{figure} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 7faf958..6dadf32 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -94,7 +94,25 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen \begin{figure} \centering -\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel} -\caption{Händisches Beispiel des Munkres Algorithmus.} +\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png} +\caption{Händisches Beispiel des Munkres Algorithmus, minimalster Transportweg.} \label{munkres:Vr2} \end{figure} + +\subsection{Zuordnung der Kräne +\label{munkres:subsection:malorum}} + +\begin{itemize} +\item Der Kran von Baustelle A1 soll zur Baustelle B2. +\item Der Kran von Baustelle A2 soll zur Baustelle B3. +\item Der Kran von Baustelle A3 soll zur Baustelle B4. +\item Der Kran von Baustelle A4 soll zur Baustelle B1. +\end{itemize} + +\begin{figure} +\centering +\includegraphics[width=3cm]{papers/munkres/figures/Ungarische Methode Beispiel Zuweisung.png} +\caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } +\label{munkres:Vr2} +\end{figure} + -- cgit v1.2.1 From 8feb90a7677b2c93493958c8a22008c293cca0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:43:35 +0200 Subject: fehlendes bild --- .../munkres/figures/Ungarische_Methode_Beispiel.png | Bin 0 -> 1179631 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png new file mode 100644 index 0000000..fb4d061 Binary files /dev/null and b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png differ -- cgit v1.2.1 From 97d2d95b6d2f50444221f060d986095c0129628f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:45:45 +0200 Subject: fehlendes bild --- .../figures/Ungarische_Methode_Beispiel_Zuw.png | Bin 0 -> 117508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png new file mode 100644 index 0000000..73217d3 Binary files /dev/null and b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png differ -- cgit v1.2.1 From 2ce8b93410c15a7f4d72712d4e4a3e46e809bf71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:46:17 +0200 Subject: fehlendes bild --- buch/papers/munkres/figures/ganzzahlige_punkte.png | Bin 0 -> 257390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/munkres/figures/ganzzahlige_punkte.png (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/ganzzahlige_punkte.png b/buch/papers/munkres/figures/ganzzahlige_punkte.png new file mode 100644 index 0000000..5689825 Binary files /dev/null and b/buch/papers/munkres/figures/ganzzahlige_punkte.png differ -- cgit v1.2.1 From cbd9a9d63f0dfcd3141a9a420dac959e554f9b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 11:49:47 +0200 Subject: neue version --- buch/papers/munkres/teil3.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 6dadf32..874baae 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -111,7 +111,7 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen \begin{figure} \centering -\includegraphics[width=3cm]{papers/munkres/figures/Ungarische Methode Beispiel Zuweisung.png} +\includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} \end{figure} -- cgit v1.2.1 From fedb213d00379ad0e50fc77b05b2ba9ae096d1cc Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Mon, 2 Aug 2021 12:27:36 +0200 Subject: Verbesserungen aus Besprechung Kapitel 18.3, 18.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Abbildung in GA bewiesen + Vektor n neu Vektor u + grössen Klammern angepasst + Graphiken angepasst In Kapitel 18.2 \\ in Gleichung entfernt --- buch/papers/clifford/6_PauliMatrizen.tex | 2 +- buch/papers/clifford/7_Reflektion.tex | 46 +++++++++++++++++++------------- buch/papers/clifford/8_Rotation.tex | 39 ++++++++++++++++----------- 3 files changed, 52 insertions(+), 35 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/clifford/6_PauliMatrizen.tex b/buch/papers/clifford/6_PauliMatrizen.tex index e41275a..4438aeb 100644 --- a/buch/papers/clifford/6_PauliMatrizen.tex +++ b/buch/papers/clifford/6_PauliMatrizen.tex @@ -91,7 +91,7 @@ bestätigt. Man kann bei den Definitionen \ref{def:defPauli} und \ref{def:defPau \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} diff --git a/buch/papers/clifford/7_Reflektion.tex b/buch/papers/clifford/7_Reflektion.tex index e650d5a..549848c 100644 --- a/buch/papers/clifford/7_Reflektion.tex +++ b/buch/papers/clifford/7_Reflektion.tex @@ -13,8 +13,8 @@ Die Spiegelung ist eine grundlegende, geometrische Operation, aus welcher man we \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=1.5pt,blue,-stealth](0,0)--(0,2.5) 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,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}$}; @@ -22,35 +22,34 @@ Die Spiegelung ist eine grundlegende, geometrische Operation, aus welcher man we 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,purple,-stealth](0,1.5)--(1,1.5) node[xshift=-0.5cm, yshift=-0.25cm]{$\boldsymbol{\hat{n}}$}; + \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 \textbf{v} an Spiegelachse bzw. Vektor \textbf{u}} + \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. \begin{definition} - Die Spiegelungsgleichung in der linearen Algebra mit dem Normalenvektor $\mathbf{\hat{n}}$ zur Spiegelebene ist + 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} - 2 \cdot \mathbf{v_{\parallel \hat{n}}} = \mathbf{v} - 2 \cdot \mathbf{v_{\perp 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} -Per Definition sind $\mathbf{v_{\parallel \hat{n}}} = \mathbf{v_{\perp u}}$, aber in der geometrischen Algebra verwenden wir bevorzugter weise in den Formeln Vektoren, welche eine Spiegelung an einer Hyperebene beschreiben. Im zweidimensionalen repräsentiert der Vektor $\mathbf{v^{'}}$ also eine Spiegelung vom Vektor $\mathbf{v}$ an einer Gerade und im dreidimensionalen eine Spiegelung an einer Ebene. -Es scheint für diese Formel \eqref{RefLinAlg} aber umständlich zu sein, weitere Spiegelungen mit weiteren Spiegelebenen anzufügen. Man kann diese Abbildung aber auch als Matrix schreiben. Sei $\mathbf{\hat{n}}$ ein Normalenvektor auf die Spiegelungs-Achse bzw. -Ebene, also $\mathbf{\hat{n}}\perp \mathbf{u}$, und sei ausserdem normiert $|\mathbf{\hat{n}}| = 1$, dann kann man die Spiegelung durch die Matrix +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\dfrac{1}{|\mathbf{n}|^2}\mathbf{nn}^t + S = E - 2\mathbf{\hat{u}\hat{u}}^t \end{align} beschrieben werden. In der zweiten und dritten Dimension ergibt die Berechnung \begin{align} \label{Spiegelmatrizen} S_2 = \begin{pmatrix} - 1-2n_1^2 & -2n_1n_2 \\ - -2n_1n_2 & 1-2n_2^2 + 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-2n_1^2 & -2n_1n_2 & -2n_1n_3\\ - -2n_1n_2 & 1-2n_2^2 & -2n_2n_3\\ - -2n_1n_3 & -2n_2n_3 & 1-2n_3^2\\ + 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 @@ -60,7 +59,7 @@ Diese Spiegelmatrizen gehören der orthogonalen Matrizengruppe $S_n\in \text{O}( schliessen kann. \subsection{Geometrische Algebra} -Um die folgenden Formeln zu verstehen, definieren wir zuerst die Inverse eines Vektors, welche in dieser Form nicht in der linearen Algebra nicht existiert. +Wir definieren zuerst die Inverse eines Vektors, welche in dieser Form nicht in der linearen Algebra nicht existiert. \begin{definition} Die Inverse eines Vektors wird definiert als \begin{align} \label{InverseGA} @@ -72,16 +71,25 @@ Diese Definition ist sinnvoll, da wegen $\mathbf{u}^2 = |\mathbf{u}|^2$ folgt \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 Spiegelungsgleichung in der geometrischen Algebra mit der Spiegelachse $\mathbf{u}$ ist definiert als + 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}' = \mathbf{uvu}^{-1} + \mathbf{v} \enspace\mapsto\enspace \mathbf{v}' = -\mathbf{uvu}^{-1} \end{align} \end{definition} -Verwendet man für $\mathbf{u}$ nur einen Einheitsvektor $\mathbf{\hat{u}}$, welcher die Länge 1 besitzt, wird die Gleichung zu +Diese Abbildung muss stimmen, weil man durch die Schlussfolgerungen \eqref{uperpv} und \eqref{uparallelv} die Zusammenhänge +\begin{align} + \mathbf{uv_{\perp u}} = -\mathbf{v_{\perp u}u} \enspace\text{und}\enspace \mathbf{uv_{\parallel u}}=\mathbf{v_{\parallel u}u} +\end{align} +der geometrischen Produkte findet und somit die Abbildung aus der geometrischen Algebra \eqref{RefGA} wegen +\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}} +\end{align} +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 diff --git a/buch/papers/clifford/8_Rotation.tex b/buch/papers/clifford/8_Rotation.tex index b960b56..1d5e889 100644 --- a/buch/papers/clifford/8_Rotation.tex +++ b/buch/papers/clifford/8_Rotation.tex @@ -15,19 +15,28 @@ Eine Rotation kann man aus zwei aufeinanderfolgenden Spiegelungen bilden. Das ka \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)--(0,2.5) node[anchor=south east]{$\boldsymbol{u}$}; + \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)--(-2.31, 0.957) node[anchor=south east]{$\boldsymbol{w}$}; + \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 west]{$\boldsymbol{e_2}$}; + \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 (0,2.5); - \coordinate (C) at (-2.31, 0.957); - \tikzset{anglestyle/.style={angle eccentricity=1.25, draw, thick, angle radius=1.25cm}} + \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} @@ -51,13 +60,13 @@ Da wir jetzt aus der Geometrie wissen, dass eine Rotation durch zwei Spiegelunge \begin{satz} Durch zwei nacheinander auf einen Vektor $\mathbf{v}$ angewendete Spiegelungen lässt sich eine Rotation \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} Die Vektoren $\mathbf{w}$ und $\mathbf{u}$ bilden hier wiederum die Spiegelachsen. Diese Formel versuchen wir jetzt noch durch Umstrukturierung zu verbessern. \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}_{12}$ Ebene liegen. Weitere Drehungen können in höheren Dimensionen durch Linearkombinationen von Drehungen in den $\mathbf{e}_{ij}, i\not=j$ Ebenen erreicht werden. Für die Herleitung ersetzen wir als erstes in der Polarform +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) \end{align} @@ -87,7 +96,7 @@ 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}, \end{align} -es gibt eine Euler-Formel mit $mathbf{e}_{12}$ anstelle der imaginären Einheit $j$. +es gibt eine Euler-Formel mit $\mathbf{e}_{12}$ anstelle der imaginären Einheit $j$. Wenn man jetzt den Vektor \eqref{ExponentialGA} durch die eulersche Schreibweise \begin{align} @@ -126,7 +135,7 @@ Wenn wir den Winkel zwischen den Vektoren $\mathbf{w}$ und $\mathbf{u}$ als $\t \subsubsection{Umstrukturierte Drehungsgleichung} Setzten wir nun unsere neuen Erkenntnisse in die Gleichung \eqref{rotGA} ein \begin{align} - \mathbf{v''} = (|\mathbf{w}||\mathbf{u}|e^{-\theta \mathbf{e}_{12}}) \mathbf{v}( \dfrac{1}{|\mathbf{w}||\mathbf{u}|}e^{\theta \mathbf{e}_{12}}), + \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} @@ -153,12 +162,12 @@ kann man sehen, dass nur der parallele Anteil $\mathbf{v_\parallel}$ des Vektors \end{align} und das Produkt der Inversen $\mathbf{u}^{-1}\mathbf{w}^{-1}$ \begin{align} - \mathbf{u}^{-1}\mathbf{w}^{-1} = (\dfrac{\mathbf{e}_1}{1^2})(\dfrac{2\mathbf{e}_2}{2^2}) = \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} \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)(\dfrac{1}{2}\mathbf{e}_{12})\\ - &= (2\mathbf{e}_2-2\mathbf{e}_1-2\mathbf{e}_{123})(\dfrac{1}{2}\mathbf{e}_{12})\\ + \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 @@ -167,11 +176,11 @@ kann man sehen, dass nur der parallele Anteil $\mathbf{v_\parallel}$ des Vektors \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(\dfrac{-\pi}{2} + \sin(\dfrac{-\pi}{2})\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 = -(\dfrac{-\pi}{2}) = \dfrac{\pi}{2} + \theta = -\biggl(\dfrac{-\pi}{2}\biggr) = \dfrac{\pi}{2} \end{align} ausgelesen werden. \end{itemize} -- cgit v1.2.1 From e42e7f03932de6d3d0966bb603c58f7e603b240c Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 2 Aug 2021 16:46:52 +0200 Subject: save --- buch/papers/reedsolomon/dtf.tex | 2 +- buch/papers/reedsolomon/idee.tex | 2 +- buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1835758 -> 1830948 bytes buch/papers/reedsolomon/tikz/plotfft.tex | 5 +++-- buch/papers/reedsolomon/tikz/plotfftraw.tex | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 4552bed..3e16d81 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -42,7 +42,7 @@ Zu Beachten ist auch noch, dass der Fehler um das 20- bis 150-Fache kleiner ist. \item Diese Fehlerkorrekturstellen 64 bis 96, dies definieren wir als Syndrom. In diesem Syndrom ist die Fehlerinformation gespeichert und muss nur noch transformiert werden. \item Hier sieht man genau wo die Fehler stattgefunden haben. - Leider nicht mehr mit der Qualtiätt der Ursprünglichen Fehler, sie sind nur noch 0.6 oder 0.4 gross. + Leider nicht mehr mit der Qualtiätt der ursprünglichen Fehler, sie sind nur noch 0.6 oder 0.4 gross. Obwohl der Fehler um das 20Fache kleiner ist erkennt man im Locator die Fehlerstellen wieder. \end{enumerate} Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert, diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 41e0d4c..7620df1 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -16,7 +16,7 @@ Der Unterschied des Fehler erkennen und korrigiren, ist das beim Erkennen nur di Beim Korrigieren werden Fehler erkannt und dann zusätzlich noch den original Wert rekonstruieren. Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wird doppelt und dreifach gesendung), was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. -Anwendungen finden sind im Abchnitt \externaldocument{papers/reedsolomon/anwendungen} +Anwendungen finden sind im Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} beschrieben. \subsection{Polynom-Ansatz diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index 4a44333..2666d1e 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex index bb74dfb..3b0c421 100644 --- a/buch/papers/reedsolomon/tikz/plotfft.tex +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -8,6 +8,7 @@ \usepackage{pgfplotstable} \usepackage{csvsimple} \usepackage{filecontents} +\definecolor{darkgreen}{RGB}{0,0.6,0} \begin{document} @@ -30,7 +31,7 @@ \begin{tikzpicture}[] \begin{axis}[ title = {\Large {Codiert \space + \space Fehler}}, xtick={0,40,60,100}, axis y line*=left] - \addplot[green] table[col sep=comma] {tikz/codiert.txt}; + \addplot[darkgreen] table[col sep=comma] {tikz/codiert.txt}; \end{axis} \begin{axis}[xtick={7,21,75}, axis y line*=right] \addplot[red] table[col sep=comma] {tikz/fehler.txt}; @@ -47,7 +48,7 @@ \node(empfangen) [] { \begin{tikzpicture} \begin{axis}[title = {\Large {Empfangen}}] - \addplot[green] table[col sep=comma] {tikz/empfangen.txt}; + \addplot[darkgreen] table[col sep=comma] {tikz/empfangen.txt}; \end{axis} \end{tikzpicture}};\\ diff --git a/buch/papers/reedsolomon/tikz/plotfftraw.tex b/buch/papers/reedsolomon/tikz/plotfftraw.tex index 141d2ce..db35734 100644 --- a/buch/papers/reedsolomon/tikz/plotfftraw.tex +++ b/buch/papers/reedsolomon/tikz/plotfftraw.tex @@ -1,3 +1,4 @@ + \begin{tikzpicture}[] %--------------------------------------------------------------- -- cgit v1.2.1 From 02cdfa6fcffe1df6f457c541aa05ff714bbf09d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 21:01:34 +0200 Subject: fehlendes bild --- buch/papers/munkres/figures/MatrixA.png | Bin 0 -> 87794 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/munkres/figures/MatrixA.png (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/MatrixA.png b/buch/papers/munkres/figures/MatrixA.png new file mode 100644 index 0000000..45a71a4 Binary files /dev/null and b/buch/papers/munkres/figures/MatrixA.png differ -- cgit v1.2.1 From 8e6efdb02d8e35d9a3749a377a80de679a8b3ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Mon, 2 Aug 2021 21:06:43 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 16 ++++++++++++---- buch/papers/munkres/teil3.tex | 18 ++++++------------ 2 files changed, 18 insertions(+), 16 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index d22b57f..388a448 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -15,13 +15,13 @@ Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde \label{munkres:subsection:bonorum}} Man hat den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne soll möglichst klein werden. -Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte angenommen werden $\mathbb{R}$. -Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden $\mathbb{Z}$. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. -Für solche Optimierungsproblem für reelle Varianten sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art uns weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. +Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. +Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. +Für solche Optimierungsprobleme für reelle Variablen sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art und Weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. \begin{figure} \centering -\includegraphics[width=5cm]{papers/munkres/figures/ganzzahlige_punkte} +\includegraphics[width=8cm]{papers/munkres/figures/ganzzahlige_punkte} \caption{Problem der Ganzzahligkeit.} \label{munkres:Vr2} \end{figure} @@ -37,6 +37,14 @@ a_{i}=b_{j}=1 Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. In der Zelle dieser Matrix sind $a_{i,j}$ die Wege dargestellt, die entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. +\begin{figure} +\centering +\includegraphics[width=5cm]{papers/munkres/figures/MatrixA.png} +\caption{Darstellung Matrix $A$} +\label{munkres:Vr2} +\end{figure} + + \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \begin{equation} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 874baae..2a8f4a7 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -36,30 +36,24 @@ wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei \subsection{Unterschiedliche Anzahl von Quellen und Zielen \label{munkres:subsection:malorum}} -Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B dann der Fall, wenn eine 3 Mitarbeiter 4 Eignungstests abdsolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise eine $4\times 3$ wird zu einer $4\times 4$ Matrix. +Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B. dann der Fall, wenn 3 Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel -erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer -weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass -jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. -Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden -sind. +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden sind. Das Vorgehen wird in den nachfolgenden Schritten 1-16 beschrieben und auch in der Abbildung 21.5 dargestellt. \begin{enumerate} \item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei -allen anderen Ziffern in der jeweiligen Zeile subtrahiert. +allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab. -\item Danach zieht man wiederum die kleinste Zahl in jeder Spalte von allen -Zahlen in der Spalte ab. +\item Auch in diesem Schritt werden die unvermeidbaren Kosten abgezogen. Man zieht die kleinste Zahl in jeder Spalte von allen Zahlen in der Spalte ab. -\item Es sollen möglichst viele Nullen markiert werden, welche freistehend sind. +\item Bei den nachfolgenden Schritten bleiben dann nur noch die Kosten übrig, die man hat, wenn man eine andere Zuordnung wählt. Hierbei sollen möglichst viele Nullen markiert werden, welche freistehend sind. (Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur eine markierte Null zu haben) -\item Jeweilige Zeilen eruieren, bei welchen keine markierte Null vorhanden sind und kennzeichnen. +\item Weiter werden die jeweiligen Zeilen eruiert, bei welchen keine markierte Null vorhanden sind. Diese kennzeichnet man. \item In der vorherigen Zeile die 0 eruieren und die Spalte ebenfalls kennzeichnen (*2) -- cgit v1.2.1 From fd9f347b7873e1015c4d7b5fa50b18f7184ce650 Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Mon, 2 Aug 2021 21:33:16 +0200 Subject: 1. Version Kapitel Rotation und Spiegelung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zusätzlich Kapitel Fazit hinzugefügt + in Makefile & main angepasst --- buch/papers/clifford/10_Quaternionen.tex | 134 +++++++++++++----------------- buch/papers/clifford/11_Fazit.tex | 9 ++ buch/papers/clifford/7_Spiegelung.tex | 95 +++++++++++++++++++++ buch/papers/clifford/9_KomplexeZahlen.tex | 29 +++++-- buch/papers/clifford/Makefile.inc | 18 ++-- buch/papers/clifford/main.tex | 3 +- 6 files changed, 199 insertions(+), 89 deletions(-) create mode 100644 buch/papers/clifford/11_Fazit.tex create mode 100644 buch/papers/clifford/7_Spiegelung.tex (limited to 'buch/papers') diff --git a/buch/papers/clifford/10_Quaternionen.tex b/buch/papers/clifford/10_Quaternionen.tex index 375c6e7..3fe2876 100644 --- a/buch/papers/clifford/10_Quaternionen.tex +++ b/buch/papers/clifford/10_Quaternionen.tex @@ -7,32 +7,39 @@ \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. -Sie finden beispielsweise in der Computergraphik und in der Robotik Anwendung. +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} \end{align} -können dabei eine Drehstreckung mit dieser Formel erreichen +können dabei eine Drehstreckung mit \begin{align} \label{QuatRot} \begin{split} - &v'' = qvq^{-1};\quad q,v,q^{-1} \in \mathbb{H}\\ - &\operatorname{Re}(q) = \operatorname{Re}(q^{-1})\quad \operatorname{Im}(q) = -\operatorname{Im}(q^{-1}) + v \mapsto v'' = qvq^{-1} \end{split} \end{align} -Auffallend ist hier schon die Ähnlichkeit zu dem 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). +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}) +\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). -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 ineinander umgewandelt werden, um damit zu rechnen, wie man bei $v \in \mathbb{H}$ in der Formel (\ref{QuatRot}) sieht. +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 +\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} +\end{align} +ineinander umgewandelt werden, um damit zu rechnen. \subsection{Geometrische Algebra} -Die geometrische Algebra besitzt die Fähigkeit beide Probleme zu lösen. Die Quaternionen können, wie schon im 2 dimensionalen 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 bilden $\mathbf{e}_{12}, \mathbf{e}_{23}, \mathbf{e}_{31}$. +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} - Multivektoren mit Drehstreckenden Eigenschaften in $G_3(\mathbb{R})$ (gleichbedeutend zu Quaternionen) + 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 darstellen. +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} @@ -66,95 +73,76 @@ Die Probleme werden dadurch gelöst, da wir die Bivektoren im Raum nicht durch e \caption{Darstellung eines Quaternion $\mathbf{q}$ und eines Vektors $\mathbf{v}$ im selben Raum} \label{BildQuaternionen} \end{figure} -Wie schon im 2 dimensionalen Fall beschreibt ein Bivektor, um wie viel der um 90 grad gedrehte orginale Vektor gestreckt wird. Dabei dreht jeder Bivektor den Vektor um eine andere Achse. -\\BILD?\\ -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 $|q|=1$ haben. Sie rotieren die Objekte bzw. Vektoren lediglich. +Wie schon im zweidimensionalen Fall \eqref{GAdrehstreck} beschreibt im dreidimensionalen Fall mit drei Bivektoren +\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}) +\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. + +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. \begin{definition} - Einheitsquaternionen + 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}) \end{align} \end{definition} -Dabei ist definiert, dass $\tilde{x}^2+\tilde{y}^2+\tilde{z}^2=1$. Somit beträgt der Betrag von $\mathbf{q}$ immer 1. +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 (...) gezeigt den halben Winkel, um welchen der parallelen Anteil $\mathbf{v_{\perp}}$ des Vektors $\mathbf{v}$ zur kombinierten Bivektorebene $sin(\alpha)^2(\tilde{x}^2+\tilde{y}^2+\tilde{z}^2)$ 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)^2(\tilde{x}\mathbf{e}_{12} + \tilde{y}\mathbf{e}_{23} + \tilde{z}\mathbf{e}_{31})$ gedreht wird. -Um einen Vektor zu drehen, verwendet man wieder die gleiche Formel, wie auch schon im zweidimensionalen Fall. +Um einen Vektor zu drehen, verwendet man die in Kapitel Rotation hergeleitete Formel \begin{align} \label{QuatRotGA} \begin{split} - &\mathbf{v}'' = \mathbf{qvq}^{-1}\\ - &\operatorname{Re}(\mathbf{q}) = \operatorname{Re}(\mathbf{q}^{-1});\enspace \operatorname{Im}(\mathbf{q}) = -\operatorname{Im}(\mathbf{q}^-1) + \mathbf{v}'' = \mathbf{qvq}^{-1}, \end{split} \end{align} -Es ist wichtig bei Quaternionen für eine reine Drehstreckung mit $q$ und $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. +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). +\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 +\begin{align} + \operatorname{Re}(e^{-\theta \mathbf{e}_{12}}) = \operatorname{Re}(e^{\theta \mathbf{e}_{12}}) +\end{align} +und der Imaginäre bzw. Grad 2 Anteil +\begin{align} + \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. \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 welcher um die Orientierte Ebene $\mathbf{e}_{23}$ um 90 Grad dreht + 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 \begin{align} - \mathbf{q}_{23} &= \cos(\pi/4) + sin(\pi/4)(1\mathbf{e}_{23}) = e^{(\pi/4)\mathbf{e}_{23}} &= 0.71 + 0.71\mathbf{e}_{23}\\ - \mathbf{q}_{23}^{-1} &&= 0.71 - 0.71\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} - und danach Einheitsquaternion welcher um die Orientierte Ebene $\mathbf{e}_{31}$ um 90 Grad dreht + welcher um die $\mathbf{e}_{2}$-$\mathbf{e}_{3}$-Ebene um 90 Grad dreht und danach Einheitsquaternion \begin{align} - \mathbf{q}_{31} &= \cos(\pi/4) + sin(\pi/4)(1\mathbf{e}_{31}) = e^{(\pi/4)\mathbf{e}_{31}} &= 0.71 + 0.71\mathbf{e}_{31}\\ - \mathbf{q}_{31}^{-1} &&= 0.71 - 0.71\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} - Um die vollständige Rotation zu beschreiben können die Einheitsquaternion multipliziert werden, wobei die Reihenfolge der Ausführung beachtet werden muss + 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 \begin{align} \label{FormelBeispielQuaternion} - \mathbf{q} &= \mathbf{q}_{31}\mathbf{q}_{23} = (0.71 + 0.71\mathbf{e}_{31})(0.71 + 0.71\mathbf{e}_{23}) &= 0.5 + 0.5\mathbf{e}_{31} + 0.5 \mathbf{e}_{23} + 0.5 \mathbf{e}_{12}\\ - \mathbf{q}^{-1} &= \mathbf{q}_{23}^{-1}\mathbf{q}_{31}^{-1} = (0.71 - 0.71\mathbf{e}_{23})(0.71 - 0.71\mathbf{e}_{31}) &= 0.5 - 0.5\mathbf{e}_{31} - 0.5 \mathbf{e}_{23} - 0.5 \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 \begin{align} - \mathbf{v}'' = \mathbf{qvq}^{-1} &= (0.5 + 0.5\mathbf{e}_{31} + 0.5 \mathbf{e}_{23} + 0.5 \mathbf{e}_{12})(1\mathbf{e}_2)(0.5 - 0.5\mathbf{e}_{31} - 0.5 \mathbf{e}_{23} - 0.5 \mathbf{e}_{12})\\ - &= (0.5\mathbf{e}_2 + 0.5 \mathbf{e}_{123} - 0.5 \mathbf{e}_3 + 0.5 \mathbf{e}_1)(0.5 - 0.5\mathbf{e}_{31} - 0.5 \mathbf{e}_{23} - 0.5 \mathbf{e}_{12})\\ - &= (0.25 + 0.25 + 0.25 + 0.25)\mathbf{e}_1 + (0.25 + 0.25 - 0.25 - 0.25)\mathbf{e}_2 +\\ &(-0.25 + 0.25 - 0.25 + 0.25)\mathbf{e}_3 + (0.25 - 0.25 - 0.25 + 0.25)\mathbf{e}_{123}\\ + \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 \end{align} Anders betrachtet könnte man von der Formel \eqref{FormelBeispielQuaternion} sehen, dass der Drehwinkel \begin{align} - \alpha = \arccos(w) = \arccos(0.5) = 60° + \alpha = \arccos(w) = \arccos(\textstyle{\frac{1}{2}}) = 60° \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 \end{beispiel} -\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$}; - - % q Quaternion - \draw[line width=0,fill=blue!40] (0,0)--(1.41,0)--(1.41,1.41)--(0,1.41) - node[xshift=0.375cm, yshift=-0.5cm, blue]{$x\boldsymbol{e_{12}}$}; - \draw[->] (1.35, 1.2) arc (0:310:0.15); - - \draw[line width=0,fill=blue!40] (0,0)--(-1,-1)--(-1,0.41)--(0,1.41) - node[xshift=-0.5cm, yshift=-1.5cm, blue]{$y\boldsymbol{e_{23}}$}; - \draw[->] (-0.65,-0.5) arc (0:310:0.15); - - \draw[line width=0,fill=blue!40] (0,0)--(-1,-1)--(0.41,-1)--(1.41,0) - node[xshift=-0.7cm, yshift=-0.2cm, blue]{$z\boldsymbol{e_{31}}$}; - \draw[->] (0.4,-0.8) arc (0:310:0.15); - - % 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}$}; - % v'' Vektor - \draw[line width=2pt,black,-stealth](0,0.05)--(2,0.05) node[anchor=north]{$\boldsymbol{v}''$}; - \end{tikzpicture} - \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 @@ -201,7 +189,7 @@ Es ist wichtig bei Quaternionen für eine reine Drehstreckung mit $q$ und $q^{-1 \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. \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$ dargestellt werden. + \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)\\ @@ -217,11 +205,9 @@ In der Computergrafik wird Interpolation verwendet, um eine flüssige Drehbewegu \end{pmatrix} \end{split} \end{align} - 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. + 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. \end{itemize} Für Spielentwickler ist es darum meist sinnvoller Quaternionen für Drehbewegungen anzuwenden, als sich mit komplizierten Berechnungen mit Eulerschen Winkeln herumzuschlagen. \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. -\subsection{Fazit} -andere Darstellungsweise. Besser für Verständnis => komplexe Zahlen erscheinen ähnlicher zu Quaternionen? Eine Sprache für alle Geometrische Probleme \ No newline at end of file +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 diff --git a/buch/papers/clifford/11_Fazit.tex b/buch/papers/clifford/11_Fazit.tex new file mode 100644 index 0000000..7352399 --- /dev/null +++ b/buch/papers/clifford/11_Fazit.tex @@ -0,0 +1,9 @@ +% +% teil3.tex -- Beispiel-File für Teil 3 +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\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 diff --git a/buch/papers/clifford/7_Spiegelung.tex b/buch/papers/clifford/7_Spiegelung.tex new file mode 100644 index 0000000..549848c --- /dev/null +++ b/buch/papers/clifford/7_Spiegelung.tex @@ -0,0 +1,95 @@ +% +% teil1.tex -- Beispiel-File für das Paper +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\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. +\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}}$}; + \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. +\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}}. + \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 +\end{align} +beschrieben werden. In der zweiten und dritten Dimension 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}. +\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 +\begin{align} + S_n^t S_n = S_n^2 = E +\end{align} +schliessen kann. + +\subsection{Geometrische Algebra} +Wir definieren zuerst die Inverse eines Vektors, welche in dieser Form nicht in der linearen Algebra nicht existiert. +\begin{definition} + Die Inverse eines Vektors wird definiert als + \begin{align} \label{InverseGA} + \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. +\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} + \end{align} +\end{definition} +Diese Abbildung muss stimmen, weil man durch die Schlussfolgerungen \eqref{uperpv} und \eqref{uparallelv} die Zusammenhänge +\begin{align} + \mathbf{uv_{\perp u}} = -\mathbf{v_{\perp u}u} \enspace\text{und}\enspace \mathbf{uv_{\parallel u}}=\mathbf{v_{\parallel u}u} +\end{align} +der geometrischen Produkte findet und somit die Abbildung aus der geometrischen Algebra \eqref{RefGA} wegen +\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}} +\end{align} +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}} +\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 diff --git a/buch/papers/clifford/9_KomplexeZahlen.tex b/buch/papers/clifford/9_KomplexeZahlen.tex index 70107da..aaccd3d 100644 --- a/buch/papers/clifford/9_KomplexeZahlen.tex +++ b/buch/papers/clifford/9_KomplexeZahlen.tex @@ -6,23 +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 2 Dimensionalen geometrischen Algebra vollständig beschrieben werden: $\mathbf{g}_n \in G_2^+(\mathbb{R}) \cong \mathbb{C}$. Das bedeutet eine komplexe Zahl kann durch ein Skalar (Grad 0) und einem Bivektor (Grad 2) dargestellt werden +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 \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} \end{align} -weil $j$ und $\mathbf{e}_{12}$ beide die Eigenschaft besitzen quadriert $-1$ zu ergeben +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 \end{align} -Man beachte, dass wenn wir, wie bei den komplexen Zahlen, Elemente von $G_2^+(\mathbb{R})$ miteinander Multiplizieren, ist es nicht, wie im Kapitel Rotation bei der Formel (\ref{rotGA})beschrieben, eine Multiplikation von zwei $g_n$ mit einem Vektor. Im zweidimensionalen bewirken beide Multiplikationen grundsätzlich das Gleiche (eine Drehstreckung), aber die Multiplikation von mehreren $g_n$ ist kommutativ, wie wir es von den komplexen Zahlen kennen. +besitzen. Die Kommutativität \begin{align} - \mathbf{g}_1\mathbf{g}_2 = \mathbf{g}_2\mathbf{g}_1 \quad&\Leftrightarrow\quad (a + b \mathbf{e}_{12})(f + g \mathbf{e}_{12}) = (f + g \mathbf{e}_{12})(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}) + \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} -Um später die Auswirkung der Quaternionen besser zu verstehen, möchte ich kurz darauf eingehen, was ein $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 diese so aufteilen. +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} - c = c_1\cdot c_2 = (a + bj)(d + ej) = f\cdot(a+bj) + gj\cdot(a+bj) + \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} -Dabei ist $f\cdot(a+bj)$ die jetzige komplexe Zahl $c_1$ um den Faktor $f$ steckt und $gj\cdot(a+bj)$ die um 90° im Gegenuhrzeigersinn gedrehte Zahl $c_2$ um den Faktor $g$ streckt. Diese Anteile addiert ergeben, dann den um $c_2$ dreh-gestreckten Vektor $c_1$. Die wirklichen Vorteile der geometrischen Algebra werden sich aber erst bei den Quaternionen zeigen. \ No newline at end of file +und auch die im folgenden Kapitel behandelten Quaternionen 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. +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) +\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 +\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}) +\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/Makefile.inc b/buch/papers/clifford/Makefile.inc index 7b941b3..29a6512 100644 --- a/buch/papers/clifford/Makefile.inc +++ b/buch/papers/clifford/Makefile.inc @@ -6,9 +6,17 @@ dependencies-clifford = \ papers/clifford/packages.tex \ papers/clifford/main.tex \ - papers/clifford/references.bib \ - papers/clifford/teil0.tex \ - papers/clifford/teil1.tex \ - papers/clifford/teil2.tex \ - papers/clifford/teil3.tex + papers/clifford/references.bib \ + papers/clifford/0_ElevatorPitch.tex \ + papers/clifford/1_Vektordarstellung.tex \ + papers/clifford/2_QuadratVektoren.tex \ + papers/clifford/3_MultiplikationVektoren.tex \ + papers/clifford/4_GeometrischesProdukt.tex \ + papers/clifford/5_PolareDarstellung.tex \ + papers/clifford/6_PauliMatrizen.tex \ + papers/clifford/7_Spiegelung.tex \ + papers/clifford/8_Rotation.tex \ + papers/clifford/9_KomplexeZahlen.tex \ + papers/clifford/10_Quaternionen.tex \ + papers/clifford/11_Fazit.tex diff --git a/buch/papers/clifford/main.tex b/buch/papers/clifford/main.tex index ec44963..3649b20 100644 --- a/buch/papers/clifford/main.tex +++ b/buch/papers/clifford/main.tex @@ -16,10 +16,11 @@ \input{papers/clifford/4_GeometrischesProdukt.tex} \input{papers/clifford/5_PolareDarstellung.tex} \input{papers/clifford/6_PauliMatrizen.tex} -\input{papers/clifford/7_Reflektion.tex} +\input{papers/clifford/7_Spiegelung.tex} \input{papers/clifford/8_Rotation.tex} \input{papers/clifford/9_KomplexeZahlen.tex} \input{papers/clifford/10_Quaternionen.tex} +\input{papers/clifford/11_Fazit.tex} \printbibliography[heading=subbibliography] \end{refsection} -- cgit v1.2.1 From f96b0b2b66fe215a9e471eec44c58f4de11c7c0b Mon Sep 17 00:00:00 2001 From: Nunigan Date: Mon, 2 Aug 2021 22:49:09 +0200 Subject: update --- buch/papers/multiplikation/code/MM | Bin 26848 -> 26848 bytes buch/papers/multiplikation/code/MM.c | 2 +- buch/papers/multiplikation/code/MM.py | 23 ++--- buch/papers/multiplikation/code/c_matrix.h | 114 +++++++++++----------- buch/papers/multiplikation/code/c_meas_4096.pdf | Bin 15865 -> 17400 bytes buch/papers/multiplikation/code/meas/MM.txt | 20 ++-- buch/papers/multiplikation/code/meas/MM_dc.txt | 24 ++--- buch/papers/multiplikation/code/meas/blas.txt | 16 +-- buch/papers/multiplikation/code/meas/strassen.txt | 18 ++-- buch/papers/multiplikation/code/meas/winograd.txt | 15 +-- buch/papers/multiplikation/code/meas_1024.pdf | Bin 17653 -> 18813 bytes buch/papers/multiplikation/code/meas_256.pdf | Bin 19428 -> 17715 bytes buch/papers/multiplikation/code/meas_256.txt | 10 +- buch/papers/multiplikation/images/c_meas_4096.pdf | Bin 0 -> 15865 bytes buch/papers/multiplikation/images/meas_1024.pdf | Bin 0 -> 18813 bytes buch/papers/multiplikation/loesungsmethoden.tex | 16 +++ 16 files changed, 138 insertions(+), 120 deletions(-) create mode 100644 buch/papers/multiplikation/images/c_meas_4096.pdf create mode 100644 buch/papers/multiplikation/images/meas_1024.pdf (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM index f07985f..d52dda4 100755 Binary files a/buch/papers/multiplikation/code/MM and b/buch/papers/multiplikation/code/MM differ diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c index 04c4dab..a897d4f 100755 --- a/buch/papers/multiplikation/code/MM.c +++ b/buch/papers/multiplikation/code/MM.c @@ -31,7 +31,7 @@ int main() { run_algo(strassen, "strassen",0); run_algo(MM, "MM", 0); - // run_algo(winograd, "winograd", 0); + run_algo(winograd, "winograd", 0); run_algo_cblas(0); return 0; diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index 352771f..ee6f598 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -174,7 +174,7 @@ def test_perfomance(n): 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.xscale('log', base=2) plt.legend() plt.xlabel("n") plt.ylabel("time (s)") @@ -203,6 +203,7 @@ def plot(num): plt.plot(n, t_np, label='NumPy A@B', lw=5) plt.legend() plt.xlabel("n") + # plt.yscale('log', base=10) plt.ylabel("time (s)") plt.grid(True) plt.tight_layout() @@ -213,7 +214,7 @@ def plot(num): def plot_c_res(ave, num): MM = np.loadtxt("meas/MM.txt", delimiter=',') - # winograd = np.loadtxt("meas/winograd.txt", delimiter=',') + winograd = np.loadtxt("meas/winograd.txt", delimiter=',') blas = np.loadtxt("meas/blas.txt", delimiter=',') MM_dc = np.loadtxt("meas/MM_dc.txt", delimiter=',') strassen = np.loadtxt("meas/strassen.txt", delimiter=',') @@ -233,10 +234,10 @@ def plot_c_res(ave, num): strassen_t = np.mean(strassen_t.reshape(-1,ave),axis=1) strassen_n = np.mean(strassen_n.reshape(-1,ave),axis=1) - # winograd_t = winograd[:,0] - # winograd_n = winograd[:,1] - # winograd_t = np.mean(winograd_t.reshape(-1,ave),axis=1) - # winograd_n = np.mean(winograd_n.reshape(-1,ave),axis=1) + winograd_t = winograd[:,0] + winograd_n = winograd[:,1] + winograd_t = np.mean(winograd_t.reshape(-1,ave),axis=1) + winograd_n = np.mean(winograd_n.reshape(-1,ave),axis=1) blas_t = blas[:,0] blas_n = blas[:,1] @@ -256,7 +257,7 @@ def plot_c_res(ave, num): plt.rc('xtick', labelsize=23) plt.rc('ytick', labelsize=23) plt.plot(MM_n, MM_t, label='3 For Loops', lw=5) - # plt.plot(winograd_n, winograd_t, label='Winograd MM', lw=5) + plt.plot(winograd_n, winograd_t, label='Winograd MM', lw=5) plt.plot(blas_n, blas_t, label='Blas', lw=5) plt.plot(strassen_n, strassen_t, label='Strassen', lw=5) plt.plot(MM_dc_n, MM_dc_t, label='Divide and Conquer', lw=5) @@ -276,11 +277,11 @@ def plot_c_res(ave, num): # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - # plot_c_res(1, 4096) + plot_c_res(1, 4096) - # plot(8) - n = np.logspace(1,8,8,base=2,dtype=(np.int)) + # plot(1024) + # n = np.logspace(1,10,10,base=2,dtype=(np.int)) # n = np.arange(1,50,2) # A = np.random.randint(-10, 6, (5,3)) # B = np.random.randint(-10, 6, (3,5)) @@ -291,7 +292,7 @@ if __name__ == '__main__': # print(C_test) # print(np.equal(C, C_test)) - t_np = test_perfomance(n) + # t_np = test_perfomance(n) # C = strassen(A, B) # C_test = A@B diff --git a/buch/papers/multiplikation/code/c_matrix.h b/buch/papers/multiplikation/code/c_matrix.h index 13df55d..14389fc 100644 --- a/buch/papers/multiplikation/code/c_matrix.h +++ b/buch/papers/multiplikation/code/c_matrix.h @@ -1,97 +1,97 @@ -/* Seminar Matrizen, autogenerated File, Michael Schmid, 30/05/2021, 22:00:57 */ +/* Seminar Matrizen, autogenerated File, Michael Schmid, 02/08/2021, 22:48:43 */ #include const int A0[][2] = { - {-15,68}, - {49,86} + {75,47}, + {-41,-24} }; const int B0[][2] = { - {33,73}, - {38,-76} + {-53,-95}, + {-93,30} }; const double dB0[][2] = { - {33,73}, - {38,-76} + {-53,-95}, + {-93,30} }; const double dA0[][2] = { - {-15,68}, - {49,86} + {75,47}, + {-41,-24} }; const int A1[][4] = { - {75,-38,-32,-65}, - {37,74,-31,29}, - {15,-62,-20,-20}, - {-31,-35,-89,47} + {47,11,-66,8}, + {36,98,39,82}, + {-32,12,40,-79}, + {61,-20,-85,-98} }; const int B1[][4] = { - {71,90,78,-98}, - {4,63,12,-47}, - {11,-44,75,-69}, - {95,-15,64,23} + {37,75,-53,9}, + {37,-33,-67,38}, + {70,39,-93,43}, + {43,41,23,-4} }; const double dB1[][4] = { - {71,90,78,-98}, - {4,63,12,-47}, - {11,-44,75,-69}, - {95,-15,64,23} + {37,75,-53,9}, + {37,-33,-67,38}, + {70,39,-93,43}, + {43,41,23,-4} }; const double dA1[][4] = { - {75,-38,-32,-65}, - {37,74,-31,29}, - {15,-62,-20,-20}, - {-31,-35,-89,47} + {47,11,-66,8}, + {36,98,39,82}, + {-32,12,40,-79}, + {61,-20,-85,-98} }; const int A2[][8] = { - {80,42,3,-16,6,55,87,16}, - {-99,-14,21,-1,-94,-56,91,10}, - {-47,-55,-59,62,12,-53,87,-65}, - {-60,94,-67,23,-62,33,-63,-72}, - {12,-75,16,21,22,-37,1,16}, - {-100,-99,82,-66,2,64,-13,44}, - {59,-100,-90,8,36,-24,18,88}, - {73,-58,75,-100,-19,-29,85,-19} + {-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 B2[][8] = { - {-61,88,69,49,-53,47,73,45}, - {16,14,-88,-11,-67,-73,-20,43}, - {-60,-63,26,32,-29,18,-44,-69}, - {1,21,21,38,7,-100,-61,-76}, - {-90,95,-99,88,49,-80,27,-36}, - {24,-12,-47,-7,29,15,52,37}, - {-98,-76,29,76,-41,-75,97,79}, - {62,-90,-35,-14,-30,-42,-95,52} + {-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} }; const double dB2[][8] = { - {-61,88,69,49,-53,47,73,45}, - {16,14,-88,-11,-67,-73,-20,43}, - {-60,-63,26,32,-29,18,-44,-69}, - {1,21,21,38,7,-100,-61,-76}, - {-90,95,-99,88,49,-80,27,-36}, - {24,-12,-47,-7,29,15,52,37}, - {-98,-76,29,76,-41,-75,97,79}, - {62,-90,-35,-14,-30,-42,-95,52} + {-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} }; const double dA2[][8] = { - {80,42,3,-16,6,55,87,16}, - {-99,-14,21,-1,-94,-56,91,10}, - {-47,-55,-59,62,12,-53,87,-65}, - {-60,94,-67,23,-62,33,-63,-72}, - {12,-75,16,21,22,-37,1,16}, - {-100,-99,82,-66,2,64,-13,44}, - {59,-100,-90,8,36,-24,18,88}, - {73,-58,75,-100,-19,-29,85,-19} + {-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}; diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf index 547d794..304015a 100644 Binary files a/buch/papers/multiplikation/code/c_meas_4096.pdf and b/buch/papers/multiplikation/code/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt index 1a0cd5d..13b6312 100644 --- a/buch/papers/multiplikation/code/meas/MM.txt +++ b/buch/papers/multiplikation/code/meas/MM.txt @@ -1,12 +1,12 @@ 0.000000,2 0.000000,4 -0.000002,8 -0.000011,16 -0.000080,32 -0.000653,64 -0.005397,128 -0.045147,256 -0.487710,512 -3.964180,1024 -128.863544,2048 -996.370209,4096 +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/MM_dc.txt b/buch/papers/multiplikation/code/meas/MM_dc.txt index 0d5580a..f6be928 100644 --- a/buch/papers/multiplikation/code/meas/MM_dc.txt +++ b/buch/papers/multiplikation/code/meas/MM_dc.txt @@ -1,12 +1,12 @@ -0.000006,2 -0.000007,4 -0.000035,8 -0.000228,16 -0.001310,32 -0.007204,64 -0.034338,128 -0.267511,256 -2.131212,512 -17.177403,1024 -146.112874,2048 -1156.777565,4096 +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/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt index 6b7cd0b..c3ec7ec 100644 --- a/buch/papers/multiplikation/code/meas/blas.txt +++ b/buch/papers/multiplikation/code/meas/blas.txt @@ -2,11 +2,11 @@ 0.000000,4 0.000001,8 0.000003,16 -0.000021,32 -0.000164,64 -0.001240,128 -0.009657,256 -0.072523,512 -0.735149,1024 -6.895747,2048 -56.812183,4096 +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/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt index 89cf41a..69ea472 100644 --- a/buch/papers/multiplikation/code/meas/strassen.txt +++ b/buch/papers/multiplikation/code/meas/strassen.txt @@ -1,12 +1,12 @@ 0.000000,2 0.000003,4 0.000010,8 -0.000086,16 -0.000476,32 -0.003366,64 -0.025547,128 -0.184593,256 -1.248713,512 -9.007700,1024 -61.079879,2048 -424.493037,4096 +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/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt index 3a4d88b..6e6208a 100644 --- a/buch/papers/multiplikation/code/meas/winograd.txt +++ b/buch/papers/multiplikation/code/meas/winograd.txt @@ -2,10 +2,11 @@ 0.000001,4 0.000002,8 0.000011,16 -0.000091,32 -0.000663,64 -0.005182,128 -0.046038,256 -0.533429,512 -4.257458,1024 -130.378038,2048 +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_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf index 7b7a133..70c7ec1 100644 Binary files a/buch/papers/multiplikation/code/meas_1024.pdf and b/buch/papers/multiplikation/code/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/code/meas_256.pdf b/buch/papers/multiplikation/code/meas_256.pdf index 4ca7102..2eb177b 100644 Binary files a/buch/papers/multiplikation/code/meas_256.pdf and b/buch/papers/multiplikation/code/meas_256.pdf differ diff --git a/buch/papers/multiplikation/code/meas_256.txt b/buch/papers/multiplikation/code/meas_256.txt index 2ca4447..62e77cb 100644 --- a/buch/papers/multiplikation/code/meas_256.txt +++ b/buch/papers/multiplikation/code/meas_256.txt @@ -1,6 +1,6 @@ 2.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 1.600000000000000000e+01 3.200000000000000000e+01 6.400000000000000000e+01 1.280000000000000000e+02 2.560000000000000000e+02 -1.096725463867187500e-05 5.531311035156250000e-05 3.712177276611328125e-04 2.662897109985351562e-03 2.111244201660156250e-02 1.660463809967041016e-01 1.280746459960937500e+00 1.149287748336791992e+01 -5.483627319335937500e-06 5.745887756347656250e-05 4.055500030517578125e-04 3.203868865966796875e-03 2.503871917724609375e-02 2.148163318634033203e-01 1.655935287475585938e+00 1.472915720939636230e+01 -1.335144042968750000e-05 1.153945922851562500e-04 6.134510040283203125e-04 3.850460052490234375e-03 2.817606925964355469e-02 1.827111244201660156e-01 1.277473211288452148e+00 9.337273359298706055e+00 -1.907348632812500000e-05 9.274482727050781250e-05 3.526210784912109375e-04 2.403974533081054688e-03 1.725149154663085938e-02 1.314754486083984375e-01 1.121860027313232422e+00 8.884316682815551758e+00 -3.147125244140625000e-05 6.675720214843750000e-06 4.768371582031250000e-06 7.867813110351562500e-06 2.574920654296875000e-05 5.888938903808593750e-05 2.071857452392578125e-04 6.518363952636718750e-04 +1.144409179687500000e-05 5.507469177246093750e-05 3.774166107177734375e-04 3.177404403686523438e-03 2.508044242858886719e-02 2.120554447174072266e-01 1.431464910507202148e+00 1.076412820816040039e+01 +5.722045898437500000e-06 5.745887756347656250e-05 4.494190216064453125e-04 3.611087799072265625e-03 3.317713737487792969e-02 2.292332649230957031e-01 2.090558290481567383e+00 1.306217479705810547e+01 +1.788139343261718750e-05 1.168251037597656250e-04 5.981922149658203125e-04 4.416465759277343750e-03 3.002405166625976562e-02 2.104022502899169922e-01 1.488269329071044922e+00 9.164114713668823242e+00 +1.955032348632812500e-05 7.224082946777343750e-05 3.829002380371093750e-04 2.558946609497070312e-03 2.043128013610839844e-02 1.361320018768310547e-01 1.089214324951171875e+00 8.553364753723144531e+00 +2.384185791015625000e-05 5.245208740234375000e-06 6.437301635742187500e-06 2.455711364746093750e-05 4.148483276367187500e-05 8.702278137207031250e-05 3.793239593505859375e-04 6.709098815917968750e-04 diff --git a/buch/papers/multiplikation/images/c_meas_4096.pdf b/buch/papers/multiplikation/images/c_meas_4096.pdf new file mode 100644 index 0000000..547d794 Binary files /dev/null and b/buch/papers/multiplikation/images/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/images/meas_1024.pdf b/buch/papers/multiplikation/images/meas_1024.pdf new file mode 100644 index 0000000..70c7ec1 Binary files /dev/null and b/buch/papers/multiplikation/images/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index b25462a..8a95dd5 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -362,6 +362,22 @@ Folgende Algorithmen wurden jweiles in \texttt{C} und \texttt{Python} implementi \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} \end{itemize} + +\begin{figure} + \center + \includegraphics[width=\linewidth]{papers/multiplikation/images/c_meas_4096} + \caption{Messresultate mit der Programmiersprache \texttt{C}} + \label{multiplikation:fig:c_meas_4096} +\end{figure} + + +\begin{figure} + \center + \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_1024} + \caption{Messresultate mit der Programmiersprache \texttt{Python}} + \label{multiplikation:fig:c_meas_4096} +\end{figure} + \section{Fazit} \rhead{Fazit} -- cgit v1.2.1 From 5ee4a25b3a02fa12de47dd1dad1b8b1be2d7c7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Tue, 3 Aug 2021 10:52:13 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- buch/papers/munkres/teil3.tex | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 388a448..363dc06 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -40,7 +40,7 @@ In der Zelle dieser Matrix sind $a_{i,j}$ die Wege dargestellt, die entstehen, w \begin{figure} \centering \includegraphics[width=5cm]{papers/munkres/figures/MatrixA.png} -\caption{Darstellung Matrix $A$} +\caption{Darstellung einer Matrix $A$} \label{munkres:Vr2} \end{figure} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 2a8f4a7..0d2c86e 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -36,7 +36,7 @@ wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei \subsection{Unterschiedliche Anzahl von Quellen und Zielen \label{munkres:subsection:malorum}} -Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B. dann der Fall, wenn 3 Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. +Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} @@ -83,7 +83,7 @@ welche freistehend sind. In diesem Schritt werden nur die markierten Nullen betr \item Die restlichen Ziffern, durch eine Null ersetzen. \item Zu guter letzt soll überall wo eine 1 steht, in der Ausgangsmatrix die -dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen ergeben sich nach Summieren der Zahlen der minimalste Transportweg. +dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen ergeben sich nach Summieren der Zahlen der minimalste Transportweg. Im erwähnten Beispiel sind es total 13 Kilometer. \end{enumerate} \begin{figure} @@ -108,5 +108,4 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} - +\end{figure} Somit konnte danke der Ungarischen Methode sowohl der minimalste Transportweg als auch die optimalste Zuweisung der Kräne auf die neuen Standorte ermittelt werden. \ No newline at end of file -- cgit v1.2.1 From 6c9796cdf6fccfca8935f769781d94bfc4017dda Mon Sep 17 00:00:00 2001 From: Alain Date: Tue, 3 Aug 2021 17:08:02 +0200 Subject: corrections --- .../ifs/images/farnnotweight-eps-converted-to.pdf | Bin 0 -> 6124632 bytes buch/papers/ifs/teil1.tex | 6 ++--- buch/papers/ifs/teil2.tex | 30 ++++++++++----------- buch/papers/ifs/teil3.tex | 15 ++++++----- 4 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf (limited to 'buch/papers') diff --git a/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf new file mode 100644 index 0000000..ee73d4d Binary files /dev/null and b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf differ diff --git a/buch/papers/ifs/teil1.tex b/buch/papers/ifs/teil1.tex index 7ce546a..6c03f3b 100644 --- a/buch/papers/ifs/teil1.tex +++ b/buch/papers/ifs/teil1.tex @@ -15,7 +15,7 @@ Von einem Fraktal $F$ können wir folgende Eigenschaften erwarten: \item $F$ kann nicht mit der klassischen Geometrie beschrieben werden. \item Oftmals hat $F$ eine Form von Selbstähnlichkeit. Man spricht von einer selbstähnlichen Menge, wenn sich diese Menge überdecken lässt mit echten Teilmengen, die zur ganzen Menge ähnlich sind. - \item Die `fraktale Dimension´ ist grösser als die topologische Dimension + \item Die `fraktale Dimension' ist grösser als die topologische Dimension. \item Viele Fraktale lassen sich auf eine simple Art definieren. Es genügen zum Beispiel nur wenige Funktionen, welche rekursiv ausgeführt werden, um ein Fraktal zu definieren. \end{enumerate} \subsection{Koch Kurve @@ -64,7 +64,7 @@ berechnen. In jedem Schritt wird die Länge um den Faktor $\frac{4}{3}$ verlängert. Daraus resultiert, dass die Länge gegen $\infty$ divergiert. -Die Fläche der Kurve lässt sich folgendermassen berechnen +Die Fläche zwischen der Strecke von $O$ nach $(1,0)$ und der Kurve lässt sich folgendermassen berechnen \begin{align*} A_0 &= 0 \\ A_1 &= \left( \frac{a}{3}\right)^2 \frac{\sqrt{3}}{4} = a^2 \frac{\sqrt{3}}{36}\\ @@ -100,7 +100,7 @@ Ihre Ähnlichkeits-Dimension ist somit \begin{align*} D = - \frac{\log N }{\log \epsilon } = - \frac{\log 4 }{\log 1/3 } \approx 1.2619. \end{align*} -Wie wir nun sehen besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen. +Wie wir nun sehen, besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen. Dies muss jedoch nicht bei allen Fraktalen der Fall sein. Sonst wäre die Frage nach einer 'richtigen' Definition einfach zu beantworten. \begin{figure} \centering diff --git a/buch/papers/ifs/teil2.tex b/buch/papers/ifs/teil2.tex index 49c1cf3..c468b73 100644 --- a/buch/papers/ifs/teil2.tex +++ b/buch/papers/ifs/teil2.tex @@ -8,7 +8,7 @@ \rhead{Teil 2} Wollen wir nun eine bestimmte Art anschauen, wie man Fraktale erzeugen kann. Im Beispiel auf Seite \pageref{ifs:trinagle} haben wir ein Dreieck aus 4 skalierten Kopien zusammengefügt. -Lässt man die Kopie im Zentrum des Dreiecks weg, entsteht die Grundlage des sogenannten Sierpinski-Dreieck, Abbildung \ref{ifs:sierpinski10}. +Lässt man die Kopie im Zentrum des Dreiecks weg, entsteht die Grundlage des sogenannten Sierpinski-Dreieck in Abbildung \ref{ifs:sierpinski10}. \begin{figure} \centering \includegraphics[width=0.5\textwidth]{papers/ifs/images/sierpinski} @@ -93,22 +93,22 @@ Man kann sogar noch einen Schritt weiter gehen, und sagen: Wenn wir die Funktion \label{ifs:sierpconst} \end{figure} Im Beispiel der Abbildung \ref{ifs:sierpconst} sehen wir, wie das Bild nach jeder Iteration dem Sierpinski-Dreieck ähnlicher wird. -Der `Abstand´ zum Original wird immer kleiner, und konvergiert gegen null. +Der `Abstand' zum Original wird immer kleiner, und konvergiert gegen null. \subsection{Iterierte Funktionensysteme \label{ifs:subsection:IteratedFunktionensysteme}} In diesem Abschnitt wollen wir die Erkenntnis, wie wir aus einer beliebigen Menge ein Sierpinski-Dreieck generieren können, verallgemeinern. -$S_1,\dots,S_n$ sind Kontraktionen auf der Menge $D \subset \mathbb{R}^n$. Es gilt +$S_1,\dots,S_n$ sind Kontraktionen auf einer Menge $D \subset \mathbb{R}^n$. Es gilt \begin{align} |S_i(x) - S_i(y)| \leq c_i|x - y| \end{align} für jedes i mit einem $c_i < 1$. -Der Banachsche Fixpunktsatz besagt, dass für solche Kontraktionen ein Eindeutiges $A$ existiert, für das $S_i(A) = A$ gilt. +Man kann zeigen, dass für solche Kontraktionen ein eindeutiges $A$ existiert, für das $S_i(A) = A$ gilt. Den Beweis kann man in \cite{ifs:Rousseau2012} nachlesen. -Hat man nicht nur eine sondern mehrere Kontraktionen, dann existiert eine eindeutige kompakte Menge $F$ für die gilt +Hat man nicht nur eine sondern mehrere Kontraktionen, dann existiert eine eindeutige kompakte Menge $F$, für die gilt \begin{equation} F = \bigcup\limits_{i = 1}^{m} S_i(F). \end{equation} @@ -117,12 +117,12 @@ Weiter definieren wir die Transformation S auf kompakte Mengen $E$ ohne die leer S(E) = \bigcup\limits_{i = 1}^m S_i(E). \label{ifs:transformation} \end{equation} -Wird diese Transformation Iterativ ausgeführt, das heisst $S^0(E) = E, S^k(E) = S(S^{k-1}(E))$, gilt +Wird diese Transformation iterativ ausgeführt, das heisst $S^0(E) = E, S^k(E) = S(S^{k-1}(E))$, gilt \begin{equation} F = \bigcap\limits_{k = 1}^{\infty} S^k(E). \label{ifs:ifsForm} \end{equation} -In Worte gefasst bedeutet das, dass jede Gruppe von Kontraktionen iterativ ausgeführt, gegen eine eindeutige Menge konvergiert. +In Worte gefasst bedeutet das, dass jede Gruppe von Kontraktionen iterativ ausgeführt gegen eine eindeutige Menge konvergiert. Diese Menge ist auch als Attraktor eines IFS bekannt. Der Beweis für die Existenz eines eindeutigen Attraktors ist in \cite{ifs:fractal-geometry} beschrieben. @@ -155,7 +155,7 @@ Die vier affinen Transformationen \begin{pmatrix} 0 \\ 1.6 - \end{pmatrix}\\ + \end{pmatrix},\\ & {S_3(x,y)} = \begin{pmatrix} @@ -188,7 +188,7 @@ Die vier affinen Transformationen \end{pmatrix},\\ \label{ifs:farnFormel} \end{align} -, welche für die Konstruktion des Farns benötigt werden sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt. +welche für die Konstruktion des Farns benötigt werden, sind in der Abbildung \ref{ifs:farncolor} farblich dargestellt. Das gesamte Farnblatt ist in der schwarzen Box. Auf diese werden die Transformationen angewendet. $S_1$ erstellt den Stiel des Farnblattes (rot). @@ -198,12 +198,12 @@ Sie verkleinert und dreht das gesamte Bild und stellt es auf das Ende des Stiels $S_3$ bildet das gesamte Blatt auf das blaue Teilblatt unten links ab. $S_4$ spiegelt das Blatt und bildet es auf das magentafarbene Teilblatt ab. \subsection{Erzeugung eines Bildes zu einem IFS} -Es gibt zwei verschiedene Methoden um das Bild zu einem IFS zu erzeugen. +Es gibt zwei verschiedene Methoden, um das Bild zu einem IFS zu erzeugen. Die erste Methode ist wahrscheinlich die intuitivste. -Wir beginnen mit einem Startbild, zum Beispiel ein Schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab. -Das neue Bild, dass entsteht, ist die nächste Iterierte. +Wir beginnen mit einem Startbild, zum Beispiel ein schwarzes Quadrat, und bilden dieses mit den affinen Transformationen des IFS ab. +Das neue Bild, das entsteht, ist die nächste Iterierte. Dieses wird wieder mit den Transformationen abgebildet. -Wir wiederholen den letzten schritt, bis wir zufrieden mit der neusten Iterierten sind. +Wir wiederholen den letzten Schritt, bis wir zufrieden mit der neusten Iterierten sind. Diesen Vorgang haben wir beim Sierpinski-Dreieck in Abbildung \ref{ifs:sierpconst} gebraucht. In Abbildung \ref{ifs:sierpinski10} ist die zehnte Iterierte zu sehen. @@ -219,8 +219,8 @@ Es wird bei jedem Iterationsschritt nur eine Transformation $S_i$, welche zufäl Da, wie wir beim Barnsley-Farn gut sehen, nicht jede Transformation gleich viel des Bildes ausmacht, werden diese beim Chaosspiel gewichtet. Je mehr eine Transformation kontrahiert, desto weniger Punkte braucht es, um die resultierende Teilabbildung darzustellen. -Im Fall des Barnsley-Fern wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3$ und $S_4$ in $7\%$ der Iterationen ausgeführt. -Wir sehen auch in Abbildung \ref{ifs:farncolor} gut, dass der rote Stiel, $S_1$, einiges weniger Punkte braucht als der grüne Hauptteil des Blattes, $S_2$. +Im Fall des Barnsley-Farns wird $S_1$ in $1\%$, $S_2$ in $85\%$ und $S_3$ und $S_4$ in $7\%$ der Iterationen ausgeführt. +Wir sehen auch in Abbildung \ref{ifs:farncolor} gut, dass der rote Stiel, $S_1$, viel weniger Punkte braucht als der grüne Hauptteil des Blattes, $S_2$. In Abbildung \ref{ifs:farnNoWeight} wurden die vier gleich stark gewichtet. Man sieht, dass trotzt gleich vieler Iterationen wie in Abbildung \ref{ifs:farn}, der Farn nicht so gut abgebildet wird. diff --git a/buch/papers/ifs/teil3.tex b/buch/papers/ifs/teil3.tex index 1d39c6f..01a3ee2 100644 --- a/buch/papers/ifs/teil3.tex +++ b/buch/papers/ifs/teil3.tex @@ -8,12 +8,13 @@ \rhead{Fraktale Bildkomprimierung} Mit dem Prinzip dieser IFS ist es auch möglich, Bilder zu komprimieren. Diese Idee hatte der Mathematiker Michael Barnsley, welcher mit seinem Buch {\em Fractals Everywhere} einen wichtigen Beitrag zum Verständnis von Fraktalen geliefert hat. -Das Ziel ist es ein IFS zu finden, welches das Bild als Attraktor hat. +Das Ziel ist, ein IFS zu finden, welches das Bild als Attraktor hat. In diesem Unterkapitel wollen wir eine Methode dafür anschauen, wie sie in \cite{ifs:Rousseau2012} beschrieben ist. Es ist wohl nicht falsch zu sagen, dass Ähnlichkeiten zur gesamten Menge, wie wir sie zum Beispiel beim Barnsley Farn gesehen haben, bei Bilder aus dem Alltag eher selten anzutreffen sind. Ein IFS, wie wir es in \ref{ifs:subsection:IteratedFunktionensysteme} definiert haben, wird uns also nicht weiter helfen. -Anders sieht es mit Partitionierten IFS (PIFS) \cite{ifs:pifs} aus. +Anders sieht es mit partitionierten IFS (PIFS) \cite{ifs:pifs} aus. + In \ref{ifs:transformation} wurde definiert, dass die Kontraktionen $S_i$ bei IFS auf die gesamte Menge $E$ angewendet werden. Bei einem PIFS wird der Attraktor in disjunkte Teilmengen aufgeteilt. Für jede dieser Teilmengen $R_i$ braucht es dann eine grössere Teilmenge, welche mit einer affinen Transformation eine zu $R_i$ ähnliche Menge bildet. @@ -55,7 +56,7 @@ Zuerst brauchen wir die Transformation g_i \end{pmatrix} \end{align*} -um ein Element aus $D$ auf ein Element von $R$ Abzubilden. +um ein Element aus $D$ auf ein Element von $R$ abzubilden. Das bestimmen der besten Transformation kann man in drei Schritte aufteilen. \textbf{Schritt 1: }Wenn wir die Grauwerte ausser acht lassen, haben wir die affine Abbildung @@ -83,7 +84,7 @@ Wir sind auf folgende acht Abbildungen beschränkt: \item Drehung um 90, 180 oder 270 Grad. \item Spiegelung an der vertikalen, horizontalen und den Diagonalachsen. \end{itemize} -Da wir ein $2b \times 2b$ Feld auf ein $b \times b$ Feld abbilden möchten, müssen wir zuerst $G_j$ um $1/2$ skalieren. +Da wir ein $2b \times 2b$ Feld auf ein $b \times b$ Feld abbilden möchten, müssen wir zuerst $D_j$ um $1/2$ skalieren. Dies erreichen wir, indem wir alle disjunkten $2 \times 2$ Pixel Blöcke mit einem Pixel des Grautones deren Mittelwertes ersetzen. \textbf{Schritt 2: }Es muss nicht nur eine geometrische Abbildung, sondern auch eine Abbildung für die Grautöne gewählt werden. Letztere lässt sich mit den Parametern $s_i$ und $g_i$ beschrieben. @@ -157,12 +158,12 @@ Wir verwenden dafür den oben beschriebenen Algorithmus, welcher uns für jeden Mit diesen lässt sich das Bild im Anschluss wieder Rekonstruieren. Die Range-Blöcke wurden $4\times4$ gewählt und die Domain dementsprechend $8\times8$. Um etwas Zeit bei der Komprimierung zu ersparen, wurden nur disjunkte Domain-Blöcke gebraucht. -Als erstes Beispiel wählen wir das 360$\times$360px Bild von Rapperswil in Abbildung \ref{ifs:original}. -Das Startbild ist ein mittelgraues 360$\times$360px Bild, Abbildung \ref{ifs:bild0}. +Als erstes Beispiel wählen wir das 360$\times$360 Pixel Bild von Rapperswil in Abbildung \ref{ifs:original}. +Das Startbild ist ein mittelgraues 360$\times$360 Pixel Bild, Abbildung \ref{ifs:bild0}. Es kann jedoch ein beliebiges Startbild sein. Nun lassen wir das PIFS laufen. Wie wir in Abbildung \ref{ifs:rappirecoa} sehen, ist schon nach der ersten Iteration das Bild schon erkennbar. -Nach der fünften Iteration , Abbildung \ref{ifs:rappirecoc} gibt es fast keinen Unterschied mehr zur letzten Iteration, wir können die Rekonstruktion beenden. +Nach der fünften Iteration, Abbildung \ref{ifs:rappirecoc} gibt es fast keinen Unterschied mehr zur letzten Iteration, wir können die Rekonstruktion beenden. \begin{figure} \centering \includegraphics[width=0.4\textwidth]{papers/ifs/images/original} -- cgit v1.2.1 From b15f2fc72a17bc489fe287bacc3d4d4a2450ece1 Mon Sep 17 00:00:00 2001 From: LordMcFungus Date: Tue, 3 Aug 2021 17:13:53 +0200 Subject: Update teil1.tex --- buch/papers/ifs/teil1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/ifs/teil1.tex b/buch/papers/ifs/teil1.tex index 6c03f3b..caba120 100644 --- a/buch/papers/ifs/teil1.tex +++ b/buch/papers/ifs/teil1.tex @@ -101,7 +101,7 @@ Ihre Ähnlichkeits-Dimension ist somit D = - \frac{\log N }{\log \epsilon } = - \frac{\log 4 }{\log 1/3 } \approx 1.2619. \end{align*} Wie wir nun sehen, besitzt die Koch-Kurve alle oben beschriebenen Eigenschaften von Fraktalen. -Dies muss jedoch nicht bei allen Fraktalen der Fall sein. Sonst wäre die Frage nach einer 'richtigen' Definition einfach zu beantworten. +Dies muss jedoch nicht bei allen Fraktalen der Fall sein. Sonst wäre die Frage nach einer `richtigen' Definition einfach zu beantworten. \begin{figure} \centering \begin{tikzpicture} -- cgit v1.2.1 From d96533cc4a5157d6bae247e88d8ec61f256a48f3 Mon Sep 17 00:00:00 2001 From: Reto Date: Tue, 3 Aug 2021 18:11:59 +0200 Subject: working... --- buch/papers/mceliece/aufbau.tex | 41 +++++++++++++++++++++++++-------- buch/papers/mceliece/funktionsweise.tex | 15 +----------- 2 files changed, 32 insertions(+), 24 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index 08ef037..0ee95fa 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -30,21 +30,21 @@ Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine ne Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. Beispielsweise \[S_4= -\begin{pmatrix} - 0 & 1 & 1 & 1\\ - 0 & 1 & 1 & 0\\ - 0 & 0 & 1 & 1\\ - 1 & 0 & 0 & 1 -\end{pmatrix} + \begin{pmatrix} + 0 & 0 & 1 & 1\\ + 0 & 0 & 0 & 1\\ + 0 & 1 & 0 & 1\\ + 1 & 0 & 0 & 1 + \end{pmatrix} \] \[ S_4^{-1}= \begin{pmatrix} - 1 & 0 & 1 & 0\\ - 1 & 1 & 0 & 1\\ - 1 & 1 & 1 & 0\\ - 1 & 1 & 0 & 0 + 0 & 1 & 0 & 1\\ + 0 & 1 & 1 & 0\\ + 1 & 1 & 0 & 0\\ + 0 & 1 & 0 & 0\\ \end{pmatrix} \] @@ -126,3 +126,24 @@ Beispiel 0 \end{pmatrix} \] + +\subsection{Public-Key $K_{n,k}$ +\label{mceliece:subsection:k_m}} +Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, +berechnet sich mit +\[ + K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. +\] +Beispiel +\[ + K_{7,4}= + \begin{pmatrix} + 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 1\\ + 0 & 0 & 1 & 1\\ + 1 & 1 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 1 & 0 & 0\\ + 1 & 0 & 0 & 0 + \end{pmatrix} +\] \ No newline at end of file diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index 0e2ed1b..3dfc963 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -6,20 +6,7 @@ \section{Funktionsweise \label{mceliece:section:funktionsweise}} \rhead{Funktionsweise} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? +Um den Ablauf des Datenaustausches mittels M \subsection{De finibus bonorum et malorum \label{mceliece:subsection:bonorum}} -- cgit v1.2.1 From 98ac2080365000294d00804faab6e623e7f67570 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 3 Aug 2021 18:59:30 +0200 Subject: Fix typos and integrate suggestions, but minor TODOs left --- buch/papers/punktgruppen/crystals.tex | 22 ++++++------- buch/papers/punktgruppen/intro.tex | 29 ++++++----------- buch/papers/punktgruppen/piezo.tex | 58 ++++++++++++++++----------------- buch/papers/punktgruppen/references.bib | 4 +-- buch/papers/punktgruppen/symmetry.tex | 10 +++--- 5 files changed, 56 insertions(+), 67 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 42008e1..45761f8 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -18,7 +18,7 @@ Glücklicherweise ist das Innere eines Kristalles relativ einfach definiert. Ein zweidimensionales Beispiel eines solchen Muster ist Abbildung \ref{fig:punktgruppen:lattice}. 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 \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. +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 \[ \vec{r} = n_1 \vec{a}_1 + n_2 \vec{a}_2 + n_3 \vec{a}_3 = \sum_i n_i \vec{a}_i @@ -39,7 +39,7 @@ können wir auch sagen, dass alle Verschiebungen um eine Linearkombination der Vektoren $\vec{a}_1$ , $\vec{a}_2$ und $\vec{a}_3$ erlaubt sind. Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich grossen Kristallgittern besteht. -\subsection{Limitierte Kristallsymmetrien} \label{txt:punktgruppen:Translationssymmetrie} +\subsection{Einschränkungen durch Kristallsymmetrien} \label{sec:punktgruppen:Translationssymmetrie} Die Translationssymmetrie ist wohl keine grosse Überraschung, wenn man die Abbildung \ref{fig:punktgruppen:lattice} betrachtet. Was nicht direkt ersichtlich ist, ist dass bei beliebigen Grundvektoren nicht beliebige Symmetrien erstellt werden können. Dies weil die Translationssymmetrie eines Kristalles weitere Symmetrien deutlich einschränkt. @@ -53,7 +53,7 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g \label{fig:punktgruppen:rot-geometry} \end{figure} -\begin{satz} +\begin{satz} \label{thm:punktgruppen:crystal-restriction} Die Rotationssymmetrien eines Kristalls sind auf 2-fach, 3-fach, 4-fach und 6-fach beschränkt. Mit anderen Worten: Es sind nur Drehwinkel von 0\(^{\circ}\), @@ -87,7 +87,7 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g Wir beginnen, indem wir die Länge der Verschiebung \(|\vec{Q}| = Q\) setzen und \(|\vec{Q}'| = Q'\). Aus Abbildung \ref{fig:punktgruppen:rot-geometry} ist ersichtlich, dass \(Q' = Q + 2x\). Da \(\vec{Q}\) eine Translation um ein Grundvektor ist , muss \(\vec{Q}'\) ein ganzes Vielfaches von \(\vec{Q}\) sein. - Demnach auch die Länge + Demnach ist auch die Länge \[ Q' = nQ = Q + 2x . \] @@ -95,12 +95,12 @@ Dabei sollte erwähnt werden, dass eine Translationssymmetrie nur in unendlich g \[ nQ = Q + 2Q\sin(\alpha - \pi/2) . \] - Wir können durch \(Q\) dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, + Wir können durch \(Q\), dividieren um unabhängig von der Läge des Grundvektors zu werden, was auch Sinn macht, da eine Skalierung eines Kristalles seine Symmetrieeigenschaften nicht tangiert. - Zusätzlich können wir den Sinusterm vereinfachen. + Zusätzlich können wir den Sinusterm vereinfachen. Somit wird \[ - n = 1 - 2\cos\alpha \quad\iff\quad - \alpha = \cos^{-1}\left(\frac{1-n}{2}\right) + n = 1 - 2\cos\alpha \quad\text{oder}\quad + \alpha = \cos^{-1}\left(\frac{1-n}{2}\right). \] Dies schränkt die möglichen Rotationssymmetrien auf \( @@ -144,10 +144,10 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:kristallklas Er hat Untergruppen gebildet, welche als Grossbuchstaben in Abbildung \ref{fig:punktgruppen:kristallklassen} zu sehen sind. \begin{itemize} \item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden. - Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant. - \item Dank Abschintt \ref{txt:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. + Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nach Satz \ref{thm:punktgruppen:crystal-restriction} nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant. + \item Dank Abschintt \ref{sec:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. Ist im Subskript eine Zahl \(n\) zu finden, steht dies für eine \(n\)-fache Symmetrie. - Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Abschnitt \ref{txt:punktgruppen:Translationssymmetrie} keine mögliche Rotationssymmetrie eines Kristalles ist. + Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Satz \ref{thm:punktgruppen:crystal-restriction} keine mögliche Rotationssymmetrie eines Kristalles ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. Für die folgenden Betrachtungen müssen wir uns Abbildung \ref{fig:punktgruppen:kristallklassen} genauer ansehen. Dabei ist mit horizontal flach auf dem Papier gemeint. diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index 1293234..e369cf5 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -1,26 +1,17 @@ \section{Einleitung} + Es gibt viele Möglichkeiten sich in Kristallen zu verlieren. -Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, -hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. +Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. -Zu Beginn werden wir zeigen was eine Symmetrie ausmacht und -dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. -Die vorgestellten Symmetrien sind äusserst gut geeignet, -um die Grundeigenschaften eines Kristalles zu beschreiben. -Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, -was in der Welt der Kristallographie alles möglich ist oder nicht. -Einschränkungen in Kristallsymmetrien sind durchaus willkommen, -da dank ihnen sich die möglichen Kristallgitter in Grenzen halten -und sich kategorisieren lassen. -Kategorien sind nicht nur für einen besseren Überblick nützlich, -sondern kann man aus ihnen auch auf Physikalische Eigenschaften schliessen. +Zu Beginn werden wir zeigen, was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. +Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalles zu beschreiben. +Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, was in der Welt der Kristallographie alles möglich ist oder nicht. +% TODO: die moglichen Kristallgitter in Grenzen etc ist (apparently) not okay +Einschränkungen in Kristallsymmetrien sind durchaus willkommen, da dank ihnen sich die möglichen Kristallgitter in Grenzen halten und sich kategorisieren lassen. +Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. -Piezoelektrizität ist kein weit verbreiteter Begriff, -jedoch beschreibt er ein Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. +Piezoelektrizität beschreibt einen Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. Wie zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung. -Hiermit ist hoffentlich ein Funken Interesse geweckt -um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. - - +Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. %% vim:linebreak breakindent showbreak=.. spell spelllang=de: diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index 6ed7ee9..ff9f1e2 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -10,13 +10,13 @@ Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle ein \end{figure} \subsection{Polarisierung} + Piezoelektrizität basiert darauf, dass zwischen den Oberflächen des Kristalles ein Ladungsungleichgewicht entsteht (siehe Abbildung\ref{fig:punktgruppen:basicPiezo}). -Dieses Ungleichgewicht resultiert, -weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positive Ionen näher an die Oberfläche gelangen, -wärend auf der gegenüberliegenden Seite dasselbe mit negativen Ionen passiert. -Es besitzt jedoch nicht jeder Kristall eine atomare Struktur welche sich unter Druck genau so verformt. +Dieses Ungleichgewicht resultiert, weil durch den mechanischen Druck auf der einen Oberfläche des Kristalles positive Ionen näher an die Oberfläche gelangen, wärend auf der gegenüberliegenden Seite dasselbe mit negativen Ionen passiert. +Es besitzt jedoch nicht jeder Kristall eine atomare Struktur, welche sich unter Druck genau so verformt. Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für die Entstehung dieses Effektes. + \begin{figure} \centering \begin{tabular}{c |c} @@ -35,46 +35,44 @@ Der Aufbau und somit auch die Symmetrie des Kristalles sind daher relevant für \end{figure} \subsection{Atomarer Aufbau} + Die Polarisation entsteht an der Oberfläche eines Kristalles, die Erklärung dazu finden wir jedoch im atomaren Aufbau. Wir wollen dazu die verschiedenen Kristallstrukturen auf Abbildung \ref{fig:punktgruppen:atomPiezo} diskutieren. -In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren. -Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. -Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. +In Abbildung \ref{fig:punktgruppen:atomPiezo} gilt für alle Strukturen, dass rote Kreise positive Ionen und blaue negative Ionen repräsentieren. +Struktur \subref{fig:punktgruppen:atoms-piezo} zeigt ein piezoelektrisches Material in Ruhe. +Struktur \subref{fig:punktgruppen:atoms-piezo-fv} ist dasselbe Kristallgitter, jedoch wird es senkrecht belastet. Eingezeichnet ist auch das elektrische Feld, welches entsteht, weil die Ladungsträger ganz links und rechts weiter auseinander gedrückt werden. -Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, -dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. -\par +Als Hilfe zur Vorstellung kann man \subref{fig:punktgruppen:atoms-piezo-fv} zwischen zwei leitende Platten setzen, so wird ersichtlich, dass mit wachsendem Druck eine negative Ladung an die rechte Platte gedrückt wird, während sich die positiven Ionen weiter entfernen. + + Die Struktur \subref{fig:punktgruppen:atoms-grid} ist nicht piezoelektrisch. Dies wird ersichtlich, wenn man \subref{fig:punktgruppen:atoms-grid} unter Druck setzt und sich die Struktur zu \subref{fig:punktgruppen:atoms-grid-f} verformt. -Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, -scheint es als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt. +Setzt man \subref{fig:punktgruppen:atoms-grid-f} gedanklich auch zwischen zwei leitende Platten, scheint es, als würden rechts mehr positive Ionen in die Platte gedrückt werden und links umgekehrt. Dies ist aber nicht mehr der Fall, wenn sich die Struktur nach oben und unten periodisch wiederholt. -\par -Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. -Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, -ist, dass die entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, -im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}. -Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann, -weil die Eigenschaften der Struktur sich bei einer \(90^\circ\) Drehung ändern. -Das Fehlen dieser Rotationssymmetrie bestätigt sich auch wenn \subref{fig:punktgruppen:atoms-piezo} als Hexagon betrachtet wird. + + +Struktur \subref{fig:punktgruppen:atoms-piezo-fh} zeigt \subref{fig:punktgruppen:atoms-piezo} in unter horizontaler Belastung. +Was zwischen \subref{fig:punktgruppen:atoms-piezo-fv} und \subref{fig:punktgruppen:atoms-piezo-fh} zu beobachten ist, dass die entstandene Ladungsdifferenz orthogonal zu der angelegten Kraft entsteht, im Gegensatz zu \subref{fig:punktgruppen:atoms-piezo-fh}. +Daraus kann man schliessen, dass \subref{fig:punktgruppen:atoms-piezo} keine Rotationssymmetrie von \(90^\circ\) besitzen kann, weil die Eigenschaften der Struktur sich bei einer \(90^\circ\) Drehung ändern. +Das Fehlen dieser Rotationssymmetrie bestätigt sich auch wenn \subref{fig:punktgruppen:atoms-piezo} als Hexagon betrachtet wird. + \subsection{Punktsymmetrie} + Piezoelektrische Kristalle können nicht punktsymmetrisch sein. Kristallgitter, bei welchen eine Punktspiegelung eine symmetrische Operation ist, können keine piezoelektrische Kristalle bilden. -Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall -mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden. -Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles wie \subref{fig:punktgruppen:atoms-piezo} vor Augen führen, -welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt. -Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen, -was der Definition einer Symmetrie deutlich widerspricht. +Auf Abbildung \ref{fig:punktgruppen:atomPiezo} ist bewusst \subref{fig:punktgruppen:atoms-piezo} ein nicht punktsymmetrischer Kristall mit einem punktsymmetrischen \subref{fig:punktgruppen:atoms-grid} verglichen worden. +Als vereinfachte Erklärung kann man sich wieder das Bild eines Kristalles wie \subref{fig:punktgruppen:atoms-piezo} vor Augen führen, welcher unter Druck auf der einen Seite negative und der anderen Seite positive Ionen an seine Oberfläche verdrängt. +Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so würden die negativen Ionen auf den positiven auf der anderen Seite landen, was der Definition einer Symmetrie deutlich widerspricht. + \subsection{Vom Kristall zum Feuer} + Piezoelektrizität hat durchaus Nutzen im Alltag. -Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, -sonder ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität. +Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, sondern ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität. Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu einer konfigurierten Spannung. -Wird vom Nutzenden fester zugedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, -welcher auf das Piezoelement aufschlägt. +%% TODO: replace with (?): Drückt der Nutzende stärker +Wird vom Nutzenden fester zugedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, welcher auf das Piezoelement aufschlägt. Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung. Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden. Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich am anderen zu versuchen. diff --git a/buch/papers/punktgruppen/references.bib b/buch/papers/punktgruppen/references.bib index 05c803f..7928b22 100644 --- a/buch/papers/punktgruppen/references.bib +++ b/buch/papers/punktgruppen/references.bib @@ -26,7 +26,7 @@ @book{punktgruppen:lang-elt2, title = {Elektrotechnik 2}, - author = {Prof. Hans-Dieter Lang Ph.D}, + author = {Hans-Dieter Lang Ph.D}, publisher = {Fachhochschule Ostschweiz Rapperswil}, year = {2020}, month = {2}, @@ -45,7 +45,7 @@ @online{punktgruppen:restriction, title = {Structure of Materials: Allowed Rotational Symmetry in Crystals}, - author = {Prof. Silvija Gradecak-Garaj{,} Massachusetts Institute of Technology (MIT)}, + author = {Silvija Gradecak-Garaj{,} Massachusetts Institute of Technology (MIT)}, year = {2020}, month = {4}, day = {9}, diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 2067663..51620a4 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -35,7 +35,7 @@ Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. Eine Gruppe benötigt ausserdem auch zwingend ein neutrales Element, welches wir mit \(\mathds{1}\) bezeichnen. Die Anwendung der neutralen Operation ist gleichbedeutend damit, alles unverändert zu lassen. -Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die intuitiv rückgängig macht, was \(g\) getan hat. % intuitiv weglassen oder anstelle sinnbildlich +Weiterhin muss in einer Gruppe für jede Operation \(g\) auch eine inverse Operation \(g^{-1}\) vorkommen, die rückgängig macht, was \(g\) getan hat. Somit ist \(\mathds{1}\) auch äquivalent dazu, eine Operation und dann ihre Inverse anzuwenden. Die Definition der Symmetriegruppe ist mit der Kompositionsoperation gegeben, sie wird aber auch oft als Multiplikation geschrieben. Das liegt daran, dass in manchen Fällen die Zusammensetzung algebraisch durch eine Multiplikation berechnet wird. @@ -52,7 +52,7 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine Das bedeutet, dass \(G\) die Elemente \(a, aa, aaa, \ldots\) sowie \(a^{-1}, a^{-1}a^{-1}, \ldots\) und ein neutrales Element \(\mathds{1} = aa^{-1}\) enthält. \end{beispiel} \begin{beispiel} - Als anschaulicheres Beispiel, können wir eine zyklische Untergruppe des \(n\)-Gon formalisieren. + Als anschaulicheres Beispiel können wir eine zyklische Untergruppe des \(n\)-Gon formalisieren. Wir bezeichnen mit \(r\) eine Drehung im Gegenuhrzeigersinn von \(360^\circ/n\) um einen Punkt. Diese Definition reicht aus, um die gesamte Symmetriegruppe \[ @@ -69,7 +69,7 @@ komplexere Strukturen aufbauen. %@Naoki Are you ok with my grammar fixes I'm not 101% shore how to use the word Erzeugendensystem? \begin{definition}[Erzeugendensystem] - Jede disktrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. + Jede diskrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. Da es mehrere Erzeuger gibt, müssen auch die sogenannten Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls in den Klammern angegeben. @@ -87,7 +87,7 @@ komplexere Strukturen aufbauen. &= \left\{ \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} \right\}. - \end{align*} + \end{align*} \qedhere \end{beispiel} Die Symmetrieoperationen, die wir bis jetzt besprochen haben, haben immer mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. @@ -110,7 +110,7 @@ Um es formaler zu beschreiben, werden wir einige Begriffe einführen. Man sagt, dass der Homomorphismus \(f\) \(G\) in \(H\) transformiert. \end{definition} \begin{beispiel} - Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht perfekt dem komplexen Einheitskreis. + Die Rotationssymmetrie des Kreises \(C_\infty\), mit einem unendlichen Kontinuum von Werten \(\alpha \in \mathbb{R}\), entspricht genau dem komplexen Einheitskreis. Der Homomorphismus \(\phi: C_\infty \to \mathbb{C}\) ist durch die Eulersche Formel \(\phi(r) = e^{i\alpha}\) gegeben. \end{beispiel} -- cgit v1.2.1 From e5da5157fb61cdb006f3f50a2b3bd3b922644f1f Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 3 Aug 2021 22:08:02 +0200 Subject: update --- buch/papers/multiplikation/code/MM.py | 53 +++++++++------- buch/papers/multiplikation/code/meas_1024.pdf | Bin 18813 -> 18813 bytes buch/papers/multiplikation/code/meas_4096.pdf | Bin 0 -> 12952 bytes buch/papers/multiplikation/code/meas_4096.txt | 0 buch/papers/multiplikation/images/c_meas_4096.pdf | Bin 15865 -> 17400 bytes buch/papers/multiplikation/loesungsmethoden.tex | 73 +++++++++++++++++++++- 6 files changed, 101 insertions(+), 25 deletions(-) create mode 100644 buch/papers/multiplikation/code/meas_4096.pdf create mode 100644 buch/papers/multiplikation/code/meas_4096.txt (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index ee6f598..47bd6ab 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -132,6 +132,10 @@ def winograd2(A, B): return C def test_perfomance(n): + + import mkl + mkl.set_num_threads(1) + t_mm = [] t_mm_dc = [] t_mm_strassen = [] @@ -144,21 +148,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 @@ -169,10 +173,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() @@ -182,10 +186,10 @@ 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) - return 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 def plot(num): @@ -213,6 +217,7 @@ def plot(num): return arr def plot_c_res(ave, num): + MM = np.loadtxt("meas/MM.txt", delimiter=',') winograd = np.loadtxt("meas/winograd.txt", delimiter=',') blas = np.loadtxt("meas/blas.txt", delimiter=',') @@ -277,11 +282,11 @@ def plot_c_res(ave, num): # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - plot_c_res(1, 4096) + # plot_c_res(1, 4096) - # plot(1024) - # n = np.logspace(1,10,10,base=2,dtype=(np.int)) + # arr = plot(1024) + n = np.logspace(1,12,12,base=2,dtype=(np.int)) # n = np.arange(1,50,2) # A = np.random.randint(-10, 6, (5,3)) # B = np.random.randint(-10, 6, (3,5)) @@ -292,7 +297,7 @@ if __name__ == '__main__': # print(C_test) # print(np.equal(C, C_test)) - # t_np = test_perfomance(n) + t_np = test_perfomance(n) # C = strassen(A, B) # C_test = A@B diff --git a/buch/papers/multiplikation/code/meas_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf index 70c7ec1..3312420 100644 Binary files a/buch/papers/multiplikation/code/meas_1024.pdf and b/buch/papers/multiplikation/code/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/code/meas_4096.pdf b/buch/papers/multiplikation/code/meas_4096.pdf new file mode 100644 index 0000000..e889d17 Binary files /dev/null and b/buch/papers/multiplikation/code/meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/meas_4096.txt b/buch/papers/multiplikation/code/meas_4096.txt new file mode 100644 index 0000000..e69de29 diff --git a/buch/papers/multiplikation/images/c_meas_4096.pdf b/buch/papers/multiplikation/images/c_meas_4096.pdf index 547d794..304015a 100644 Binary files a/buch/papers/multiplikation/images/c_meas_4096.pdf and b/buch/papers/multiplikation/images/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 8a95dd5..780cbf3 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -358,10 +358,81 @@ Folgende Algorithmen wurden jweiles in \texttt{C} und \texttt{Python} implementi \item \textit{Devide and Conquer} Matrizenmultiplikation \item Strassen's Matrizenmultiplikation \item Winograd's Matrizenmultiplikation - \item \texttt{CBLAS} Matrizenmultiplikation in \texttt{C} + \item \texttt{BLAS} Matrizenmultiplikation in \texttt{C} \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} \end{itemize} +Der Code kann im dazugeh\"orgien \textit{GitHub} Repository gefunden werden. + +\begin{table} + \begin{center} + \begin{tabular}{l 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\\ + \multicolumn{6}{c}{} \\ + \hline + \hline + \end{tabular} + \end{center} + \caption{Messresultate \texttt{C}} + \label{multiplikation:tab:messung_C} + \end{table} + + + + \begin{table} + \begin{center} + \begin{tabular}{l 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})} \\ + \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 \\ + \multicolumn{6}{c}{} \\ + \hline + \hline + \end{tabular} + \end{center} + \caption{Messresultate \texttt{Python}} + \label{multiplikation:tab:messung_Python} + \end{table} + + \begin{table} + \begin{center} + \begin{tabular}{c c c c} + \hline + \hline + \textbf{CPU} & \textbf{OS} & \textbf{GPU } & \textbf{Memory } \\ + \hline + \multicolumn{4}{c}{} \\ + Intel® Core™ i7-4770K CPU & Ubuntu 20.04.2 LTS & Radeon RX 570 & 32 GB 1600 MHz \\ + @ 3.50GHz × 8 & 64-bit & & \\ + \multicolumn{4}{c}{} \\ + \hline + \hline + \end{tabular} + \end{center} + \caption{Messsystem} + \label{multiplikation:tab:pc_config} + \end{table} \begin{figure} \center -- cgit v1.2.1 From c059993bcc52aef36aee3a9c5d0b43777db9b061 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 4 Aug 2021 10:10:17 +0200 Subject: dtf ausgeschrieben --- buch/papers/reedsolomon/dtf.tex | 153 +++++++++++++++++++++++++--------------- 1 file changed, 95 insertions(+), 58 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 3e16d81..362f4eb 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -1,85 +1,122 @@ % % dtf.tex -- Idee mit DFT % -\section{Übertragung mit Hilfe der Diskrten Fourientransformation +\section{Übertragung mit Hilfe der Diskrten Fourier-Transformation \label{reedsolomon:section:dtf}} \rhead{Umwandlung mit DTF} -Um die Polynominterpolation zu umgehen, gehen wir nun über in die Fourietransformation. -Dies wird weder eine Erklärung der Forientransorfmation, noch ein genauer gebrauch für den Reed-Solomon-Code. -Dieser Abschnitt zeigt nur wie die Fourietransformation auf Fehler reagiert. -Das ganze zeigen wir mit einem Beispiel einer Übertragung von Zahlen mit Hilfe der Fourietransformation. +Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt, +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. +\par +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. +Forausgestzt, 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{Diskrete Fourietransformation Zusamenhang -\label{reedsolomon:subsection:dtfzusamenhang}} -Mit hilfe der Fourietransformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert, +\subsection{Beispiel mit Fehlerkorrektur mit Fourier-Transformation +\label{reedsolomon:subsection:sendbsp}} + +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 Daten zu übertragen, 32 Fehler erkennen und 16 Fehler 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. - -\subsubsection{Beispiel einer Übertragung -\label{reedsolomon:subsection:Übertragungsabfolge}} -Der Auftrag ist nun 64 Daten zu übertragen und nach 32 Fehler abzusicheren, -16 Fehler erkennen und rekonstruieren. - -Dieser Auftrag soll mittels Fouriertransformation bewerkstelligt werden. -In der Abbildung \ref{reedsolomon:subsection:Übertragungsabfolge} sieht man dies Schritt für Schritt, -und hier werden die einzelne Schritte erklärt: -\begin{enumerate}[(1)] - \item Das Signal hat 64 die Daten $k$, hier zufällige Zahlen, welche übertragen werden sollen. - Zusätzlich soll nach 16 Fehler $t$, die rekonstruierbar sind abgesichert werden. - Das macht dann insgesamt $k + 2t = - 64 +2 \cdot 16= 96$ Übertragungszahlen. - (siehe Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}) - Die 32 Fehlerkorrekturstellen werden als Nullzahlen Übertragen. - \item Nun werden mittels der diskreten Fourietransformation diese 96 codiert, transformiert. - Das heisst alle Informationen ist in alle Zahlenvorhanden, auch die Fehlerkorrekturstellen Nullzahlen. - \item Nun kommen drei Fehler dazu an den Übertragungsstellen 7, 21 und 75. - Die Fehler können auf den ganzen 96 Übertragungswerten liegen, wie die 75 zeigt. -Zu Beachten ist auch noch, dass der Fehler um das 20- bis 150-Fache kleiner ist.Die Fehlerskala ist rechts. - \item Dieses wird nun Empfangen, man kann keine Fehler erkennen, da diese soviel kleiner sind. - Für das Decodieren wird die Inverse Fourietransformation angewendet, und alle Fehler werden mittransformiert. - \item Nun sieht man die Fehler im decodierten Signal in den Übertragungszahlen. - Von den Übertragungsstellen 64 bis 96 erkennt man, das diese nicht mehr Null sind. - \item Diese Fehlerkorrekturstellen 64 bis 96, dies definieren wir als Syndrom. - In diesem Syndrom ist die Fehlerinformation gespeichert und muss nur noch transformiert werden. - \item Hier sieht man genau wo die Fehler stattgefunden haben. - Leider nicht mehr mit der Qualtiätt der ursprünglichen Fehler, sie sind nur noch 0.6 oder 0.4 gross. - Obwohl der Fehler um das 20Fache kleiner ist erkennt man im Locator die Fehlerstellen wieder. - \end{enumerate} - Nun haben wir mit Hilfe der Fourietransformation die 3 Fehlerstellen durch das Syndrom lokalisiert, - jetzt gilt es nur noch diese zu korrigieren und wir haben unser originales Signal wieder. +\par \begin{figure} \centering - \resizebox{1.1\textwidth}{!}{ + \resizebox{\textwidth}{!}{ \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} %\input{papers/reedsolomon/tikz/plotfftraw.tex} } - \caption{Übertragungsabfolge \ref{reedsolomon:subsection:Übertragungsabfolge}} + \caption{Übertragungsabfolge \ref{reedsolomon:subsection:sendbsp}} \label{fig:sendorder} \end{figure} +In der Abbildung \ref{fig:sendorder} wird eine Übertragung Schritt für Schritt illustriert. +In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläutert: +\begin{enumerate}[(1)] + \item Das Signal ist mit 64 zufälligrn, 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 + \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section: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. + \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene Werte durch Fehler, + verändert werden. + \par + Im Beispiel sind dies die Werte an den Stellen 7, 21 und 75(\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 + 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. + Somit haben wir bereits Fehler erkannt. + \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennenwir das Syndrom. + Im Syndrom steckt nur Information über die Fehler, sie werden durch die Inverse Fourier-Transformation erzeugt. + \item Um die Fehler zu rekonstruieren, ann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren. + Da das Syndrom nur ein Teil der Fehlerinformation ist, liefert die Fourier-Transformation eine Approximation der Fehler. + Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu localisieren. +\end{enumerate} +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. +Der Rekonstruktionsauftrag ist damit erfolgreich ausgeführt. -Nun zur Definition der Diskrete Fourietransformation, diese ist definiert als +\subsection{Fourier-Transformation und Polynome\label{reedsolomon:subsection:ftandpolynom}} +Im Abschnitt \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:polynomansatz} +wurden Werte eines Polynoms zur Codierung verwendet. +Die 7 Übertragungspunkte könnten ein Polynom +\begin{equation} + \textcolor{darkgreen}{p(x)} + = + \textcolor{blue}{a_0} + \textcolor{blue}{a_1}x + \textcolor{blue}{a_2}x^2 + + \textcolor{gray}{a_3}x^3 + \textcolor{gray}{a_4}x^4 + \textcolor{gray}{a_5}x^5 + + \textcolor{gray}{a_6}x^6 +\label{reedsolomon:equationpoly} +\end{equation} +sechsten Grades bestimmen. +Durch die Wahl von $\textcolor{gray}{a_3=0}$, $\textcolor{gray}{a_4=0}$, $\textcolor{gray}{a_5=0}$, $\textcolor{gray}{a_6=0}$ +erzeugen wir die, für die Fehlerkorrektur, +nötige Redundanz, ganz analog zum Schritt (1) im Beispiel. +\par +Die Analogie geht aber noch weiter. + Schreibt man + \( w = + e^{-\frac{2\pi j}{N} k}\) + \label{reedsolomon:DFT_summand}, damit wird aus der Formel \begin{equation} \hat{c}_{k} = \frac{1}{N} \sum_{n=0}^{N-1} - {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn}. + {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} ,\label{reedsolomon:DFT} \end{equation} - Wenn man nun + für die Diskrte-Fourier-Transformation das Polynom \begin{equation} - w = - e^{-\frac{2\pi j}{N} k} - \label{reedsolomon:DFT_summand} + q(w)= + \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1} + \label{reedsolomon:DFT_polynom} \end{equation} - ersetzte, und $N$ konstantbleibt, erhält man + Im Beispiel werden aber Werte des des Polynoms $q(w)$ für verschieden + \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots , k=N-1\) übermittelt. \begin{equation} - \hat{c}_{k}= - \frac{1}{N}( {f}_0 w^0 + {f}_1 w^1 + {f}_2 w^2 + \dots + {f}_{N-1} w^N) - \label{reedsolomon:DFT_polynom} + \textcolor{darkgreen}{q(w)}= + \frac{\textcolor{blue}{{f}_0}}{N} + \frac{\textcolor{blue}{{f}_1}}{N} w^1 + \frac{\textcolor{blue}{{f}_2}}{N} w^2 + \dots + + \frac{\textcolor{blue}{{f}_63}}{N} w^{63} + \frac{\textcolor{gray}{{f}_64}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1} + \label{reedsolomon:DFT_polynom2} \end{equation} - was überaust ähnlich zu unserem Polynomidee ist. -Die Polynominterpolation und die Fourietransformation rechnen beide mit reelen Zahlen. -Wenn die Fehlerabweichung sehr sehr klein ist, erkennt man diese irgendwann nicht mehr. -Zusätzlich muss mann immer Grenzen bestimmen auf wieviel Stellen gerechnet wird und wie die Fehler erkannt werden im Locator. -Deshalb haben Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, +Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reelen Zahlen. +Wenn die Approximation nicht mehr genügend gut ist im die Fehler zu erkennen und rekonstruieren. +Deshalb haben die Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, dies wird nun im nächsten Abschnitt genauer erklärt. -- cgit v1.2.1 From 24a24cb7f6cb0a85bc136bbdb11ad52b7d7917f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Wed, 4 Aug 2021 10:27:27 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 29 ++++++++++++++++++++++------- buch/papers/munkres/teil3.tex | 4 ++-- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 363dc06..07489e3 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -35,30 +35,45 @@ In einem Zuordnungsproblem sind alle Angebots- und Bedarfsmengen gleich 1 a_{i}=b_{j}=1 \end{equation} Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In der Zelle dieser Matrix sind $a_{i,j}$ die Wege dargestellt, die entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. +In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. \begin{figure} -\centering -\includegraphics[width=5cm]{papers/munkres/figures/MatrixA.png} +\[ +A += +\begin{pmatrix} +a_{11}&a_{12}&\dots &a_{1m}\\ +a_{21}&a_{22}&\dots &a_{2m}\\ +\vdots&\vdots&\ddots&\vdots\\ +a_{n1}&a_{n2}&\dots &a_{nm} +\end{pmatrix} +\] \caption{Darstellung einer Matrix $A$} -\label{munkres:Vr2} \end{figure} - +Eine Matrix, wie hier in Abbildung 21.2 ersichtlich, ist ein rechteckiges Schema, dessen Elemente üblicherweise Zahlen, aber auch andere mathematische Elemente wie Variablen oder Funktionen sein können. Sie besteht aus $n$ Zeilen und $m$ Spalten. D.h. die Elemente einer Matrix vom Typ $(n,m)$ mit Namen $A$ sind $a_{ij}$ wobei $i$ = 1,..., $m$ ist und $j$ = 1,...,$n$. $a_{ij}$ ist der Eintrag in der $i$-ten Zeile und $j$-ten Spalte der Matrix . Zum Beispiel ist a21 das Element der 2. Zeile und 1. Spalte. $i$ wird auch der Zeilenindex, $j$ der Spaltenindex genannt. \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \begin{equation} Netzwerk \end{equation} +Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.3 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Arbeiter und in den eckigen Klammern rechts eine $[-1]$ für jede Tätigkeit. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. \begin{equation} Matrix \end{equation} +Im Bild 21.4 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle. \begin{equation} Bitpartiter Graph \end{equation} Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen -zwischen den Elementen zweier Mengen. -Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. +zwischen den Elementen zweier Mengen. Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. Zwischen zwei Gruppen von Objekten wird hierbei eine eindeutige Zuordnung hergestellt. +\begin{itemize} +\item 3 = Anzahl der Knoten aus Menge A. +\item 3 = Anzahl der Knoten aus Menge B. +\end{itemize} + + \begin{figure} \centering \includegraphics[width=5cm]{papers/munkres/figures/Netzwerkdarstellung} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 0d2c86e..d2e8174 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -45,9 +45,9 @@ Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert w \begin{enumerate} \item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei -allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab. +allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. -\item Auch in diesem Schritt werden die unvermeidbaren Kosten abgezogen. Man zieht die kleinste Zahl in jeder Spalte von allen Zahlen in der Spalte ab. +\item Auch in diesem Schritt werden die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl in jeder Spalte von allen Zahlen in der Spalte ab. \item Bei den nachfolgenden Schritten bleiben dann nur noch die Kosten übrig, die man hat, wenn man eine andere Zuordnung wählt. Hierbei sollen möglichst viele Nullen markiert werden, welche freistehend sind. (Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur -- cgit v1.2.1 From 4215ac353f9234914d5564f82f85045debb40d0b Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 4 Aug 2021 11:22:14 +0200 Subject: save changes --- buch/papers/reedsolomon/dtf.tex | 7 ++++-- buch/papers/reedsolomon/tikz/plotfft.tex | 39 ++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 17 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 362f4eb..a975da8 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -112,11 +112,14 @@ Die Analogie geht aber noch weiter. \begin{equation} \textcolor{darkgreen}{q(w)}= \frac{\textcolor{blue}{{f}_0}}{N} + \frac{\textcolor{blue}{{f}_1}}{N} w^1 + \frac{\textcolor{blue}{{f}_2}}{N} w^2 + \dots + - \frac{\textcolor{blue}{{f}_63}}{N} w^{63} + \frac{\textcolor{gray}{{f}_64}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1} + \frac{\textcolor{blue}{{f}_{63}}}{N} w^{63} + \frac{\textcolor{gray}{{f}_{64}}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1} \label{reedsolomon:DFT_polynom2} \end{equation} +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 reelen Zahlen. -Wenn die Approximation nicht mehr genügend gut ist im die Fehler zu erkennen und rekonstruieren. +Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren, +dann müssen wir von den Reelen-Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. Deshalb haben die Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, dies wird nun im nächsten Abschnitt genauer erklärt. diff --git a/buch/papers/reedsolomon/tikz/plotfft.tex b/buch/papers/reedsolomon/tikz/plotfft.tex index 3b0c421..77c4dc3 100644 --- a/buch/papers/reedsolomon/tikz/plotfft.tex +++ b/buch/papers/reedsolomon/tikz/plotfft.tex @@ -8,7 +8,7 @@ \usepackage{pgfplotstable} \usepackage{csvsimple} \usepackage{filecontents} -\definecolor{darkgreen}{RGB}{0,0.6,0} + \begin{document} @@ -29,12 +29,13 @@ \node(codiert) [] { \begin{tikzpicture}[] - \begin{axis}[ title = {\Large {Codiert \space + \space Fehler}}, - xtick={0,40,60,100}, axis y line*=left] - \addplot[darkgreen] table[col sep=comma] {tikz/codiert.txt}; + % Beschriftung Rechts + \begin{axis}[axis x line= none, axis y line*=right,ytick={0}] + \addplot[color=white] {0}; \end{axis} - \begin{axis}[xtick={7,21,75}, axis y line*=right] - \addplot[red] table[col sep=comma] {tikz/fehler.txt}; + + \begin{axis}[ title = {\Large {Codiert}}, axis y line*=left] + \addplot[color=black!60!green] table[col sep=comma] {tikz/codiert.txt}; \end{axis} \end{tikzpicture}}; \\ @@ -47,8 +48,12 @@ \node(empfangen) [] { \begin{tikzpicture} - \begin{axis}[title = {\Large {Empfangen}}] - \addplot[darkgreen] table[col sep=comma] {tikz/empfangen.txt}; + \begin{axis}[title = {\Large {Empfangen \space + \space Fehler}}, + xtick={0,40,60,100}, axis y line*=left] + \addplot[color=black!60!green] table[col sep=comma] {tikz/empfangen.txt}; + \end{axis} + \begin{axis}[xtick={7,21,75}, axis y line*=right] + \addplot[red] table[col sep=comma] {tikz/fehler.txt}; \end{axis} \end{tikzpicture}};\\ @@ -61,7 +66,12 @@ \node(locator) [] { \begin{tikzpicture} - \begin{axis}[title = {\Large {Locator}}] + % Beschriftung Rechts + \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}]; + \addplot[color=black!60] {0.3}; + \end{axis} + + \begin{axis}[title = {\Large {Locator}},axis y line*=left] \addplot[gray] table[col sep=comma] {tikz/locator.txt}; \end{axis} \end{tikzpicture}};\\ @@ -75,7 +85,6 @@ \node(FFT) [scale=0.9, above of=IFFT] {FFT}; \draw[-stealth](FFT.north west)--(FFT.north east); - \draw[thick, ->,] (codiert)++(-1,0) +(0.05,0.5) -- +(-0.1,-0.1) -- +(0.1,0.1) -- +(0,-0.5); %Arrows \draw[thick, ->] (signal.east) to (codiert.west); \draw[thick, ->] (codiert.south) to (empfangen.north); @@ -86,10 +95,10 @@ %item \node[circle, draw, fill =lightgray] at (signal.north west) {1}; - \node[circle, draw, fill =lightgray] at (codiert.north west) {2+3}; - \node[circle, draw, fill =lightgray] at (empfangen.north west) {4}; - \node[circle, draw, fill =lightgray] at (decodiert.north west) {5}; - \node[circle, draw, fill =lightgray] at (syndrom.north west) {6}; - \node[circle, draw, fill =lightgray] at (locator.north west) {7}; + \node[circle, draw, fill =lightgray] at (codiert.north west) {2}; + \node[circle, draw, fill =lightgray] at (empfangen.north west) {3}; + \node[circle, draw, fill =lightgray] at (decodiert.north west) {4}; + \node[circle, draw, fill =lightgray] at (syndrom.north west) {5}; + \node[circle, draw, fill =lightgray] at (locator.north west) {6}; \end{tikzpicture} \end{document} \ No newline at end of file -- cgit v1.2.1 From 960fdcf227a9de8bf5919c56b88e05a0abd0ec0a Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:51:52 +0200 Subject: Klammern vereinheitlicht --- buch/papers/verkehr/section1.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6ac86ad..075649e 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -54,13 +54,13 @@ Der Floyd-Warshall-Algorithmus sucht kürzeste Wege innerhalb eines Graphen. Er \subsection{Anwendung Floyd-Warshall-Algorithmus} %THEORIE... -In einem ersten Schritt wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W[i, j]$ erstellt. +In einem ersten Schritt wird eine Gewichtsmatrix $W$ mit den Matrixeinträgen $W(i, j)$ erstellt. Der Algorithmus berechnet danach in einer Hauptschleife alle Knoten $k$ von 1 bis $n$. Dabei versucht er in jeder Iteration alle Wege von $i$ nach $j$ durch die Wege $(i, k)$ und $(k, j)$ zu verbessern. Falls dieser mögliche Umweg zu einer Verbesserung führt, wird der entsprechende Eintrag aktualisiert. Die aktuelle Gewichtung der Pfade wird mit -\begin{equation}d[i, j]=\min[d[i,j], d[i,k] + d[k,i]]\end{equation} +\begin{equation}d(i, j)=\min\{d(i,j), d(i,k) + d(k,i)\}\end{equation} ermittelt. -- cgit v1.2.1 From 420405209148acf4bf074369f516d5e73c2b13b1 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:56:09 +0200 Subject: =?UTF-8?q?Zeilenumbr=C3=BCche?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6ac86ad..813b28a 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -68,7 +68,7 @@ ermittelt. \section{PageRank-Algorithmus} Der PageRank-Algorithmus wurde von den Gründern von Google, Larry Page und Sergey Brin im Jahr 1996 entwickelt und zum Patent angemeldet. Zwei Jahre später gründeten sie ihr Unternehmen Google Inc. Beim PageRank-Algorithmus handelt es sich nicht um einen Suchalgorithmus, stattdessen werden Knoten aufgrund der Vernetzung des vorliegenden Graphen bewertet. -Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt.\\ +Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websites des World Wide Web anhand ihrer Struktur zu bewerten und relevante Suchergebnisse zu ermittteln. Der PageRank wird umso höher, je mehr hochwertige Links auf eine Webseite verweisen und je höher die Gewichtung einer Webseite ist, desto grösser ist der Effekt. Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche folgendes gilt: \begin{equation} -- cgit v1.2.1 From 062f9b9a2984a3e8cec05adaf5cc9cf83da131e0 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:59:52 +0200 Subject: =?UTF-8?q?Formel=20mit=20"cases"=20einger=C3=BCckt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/verkehr/section1.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6ac86ad..4991950 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -72,10 +72,10 @@ Verwendet wird er beispielsweise um die Verlinkungsstruktur verschiedener Websit Dabei handelt es sich um einen iterativen Prozess. Ausgegangen wird von der Adjazenz-Matrix $A$, für welche folgendes gilt: \begin{equation} -A_{i,j}=\left\{ \begin{matrix} -1 & \text{Kante von $j$ nach $i$} \\ 0 & \text{keine Kante von $j$ nach $i$} -\end{matrix} - \right. +A_{i,j} = \begin{cases} +1&\quad\text{Kante von $j$ nach $i$}\\ +0&\quad\text{keine Kante von $j$ nach $i$} +\end{cases} \label{verkehr:Adja} \end{equation} -- cgit v1.2.1 From 87779c4a725f04e31ba27e88dbfd8f639d51bed8 Mon Sep 17 00:00:00 2001 From: Pascal Schmid <81317360+paschost@users.noreply.github.com> Date: Wed, 4 Aug 2021 14:24:55 +0200 Subject: Anpassung Formel - Korrektur Formel-Syntax - Integration in Satz --- buch/papers/verkehr/section1.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/verkehr/section1.tex b/buch/papers/verkehr/section1.tex index 6ac86ad..6c5817d 100644 --- a/buch/papers/verkehr/section1.tex +++ b/buch/papers/verkehr/section1.tex @@ -86,8 +86,8 @@ Grundsätzlich setzt sich der PageRank Algorithmus mit der Fragestellung auseina Für ungerichtete Graphen mit $n$ Knoten gilt \begin{equation}A_{i,j}=A_{j,i}\end{equation} und weiter \begin{equation}A_{i,i}=0\quad\forall i\in \left\{1\dots n\right\}\end{equation} Beim PageRank-Algorithmus wird eine abgewandelte Form der Adjazenz-Matrix verwendet. -Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt: -\( P_{i,j}=\frac{A_{i,j}}{\sum_{i=1}^{n}A_{i,j}} \) +Dabei werden die Matrix-Einträge spaltenweise durch die jeweilige Spaltensumme geteilt, so entsteht die Link-Matrix +\[ P_{i,j}=\frac{A_{i,j}}{\sum_{k=1}^{n}A_{k,j}} \] Anschliessend multipliziert man diese Matrix $P$ mit einem Spaltenvektor $\Vec{r_0}$ mit $n$ Einträgen, für welchen gilt: \( \Vec{r_0}(i) = \frac{1}{n} \quad\forall i\in \left\{1\dots n\right\} \) Dieser Vektor stellt ein neutrales Ranking dar. Alle Knoten werden gleich gewichtet. -- cgit v1.2.1 From 1663dd03e22b2ee65a8050f5eb5433c7580028b5 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Wed, 4 Aug 2021 16:14:15 +0200 Subject: update multiplikation --- buch/papers/multiplikation/einlteung.tex | 2 +- buch/papers/multiplikation/loesungsmethoden.tex | 50 +++++++++++++------------ buch/papers/multiplikation/problemstellung.tex | 11 +++--- 3 files changed, 34 insertions(+), 29 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index ea71d91..2d0583d 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -7,7 +7,7 @@ \rhead{Einleitung} 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 (\textcolor{blue} {Kein Hyperlink zu einer Definition?)}: +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 diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 780cbf3..6f1486c 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -7,7 +7,7 @@ \section{Algorithmen} \rhead{Algorithmen} -In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Libraries zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt. +In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultiplikation vorgestellt, auch werden Bibliotheken zur automatisierten Verwendung von vordefinierten Algorithmen gezeigt. \subsection{Standard Algorithmus} @@ -15,7 +15,7 @@ Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen w Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. 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}\caption{Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Matrix Multiplication} \label{multiplikation:alg:smm} \setlength{\lineskip}{7pt} \begin{algorithmic}[1] @@ -76,7 +76,7 @@ ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplik 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. Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ durchgef\"uhrt. -\begin{algorithm}\caption{Divide and Conquer Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Divide and Conquer Matrix Multiplication} \setlength{\lineskip}{7pt} \label{multiplikation:alg:devide_mm} \begin{algorithmic} @@ -106,7 +106,7 @@ Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ \end{algorithm} 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 Algortihmen. -Ohne auf dieses vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe der Funktion die Laufzeit. +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 \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 ) @@ -141,7 +141,7 @@ aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Bl\"ocke \end{split} \end{equation} der Matrix $\mathbf{C}$ gebraucht. -\begin{algorithm}\caption{Strassen Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Strassen Matrix Multiplication} \label{multiplikation:alg:strassen} \setlength{\lineskip}{7pt} \begin{algorithmic} @@ -205,6 +205,7 @@ Dies f\"uhrt zu einer Laufzeit von 7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 = \mathcal{O}\left(n^{\log_2 7}\right ) = \mathcal{O}\left(n^{2.8074} \right ) \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. \subsection{Winograd's Algorithmus} @@ -244,7 +245,7 @@ Wenn $m,p,n$ gross werden, dominiert der Term $\frac{mpn}{2}$ und es werden $\fr Was im Vergleich zu den $mpn$ Multiplikation der Standardmethode nur die H\"alfte ist. Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen werden. -\begin{algorithm}\caption{Winograd Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Winograd Matrix Multiplication} \setlength{\lineskip}{7pt} \label{multiplikation:alg:winograd} \begin{algorithmic} @@ -297,7 +298,7 @@ Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen \subsection{Basic Linear Algebra Subprograms (BLAS)} -die gebr\"uchlichen Methode f\"ur die Anwendung einer optimierten Matrizenmultiplikation ist die Verwendung einer Subrutine aus den \textit{Basic Linear Algebra Subprograms (BLAS)} \cite{multiplikation: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}. \textit{BLAS} sind dabei in drei unterschiedliche Levels aufgeteilt. @@ -320,12 +321,12 @@ Die meisten Numerischen Bibliotheken von High-Level Skriptsprachen wie \texttt{M \end{itemize} \end{itemize} -Die \textit{BLAS} sind auf die modernen Computer Prozessoren optimiert und k\"onnen dank einer ausgek\"ugelter Verwedung der Speicher Architektur zur erheblichen Leistungoprimierung f\"uhren. +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. \subsubsection{General Matrix Multiplication (GEMM)} -Die \textit{Double-GEMM} ist in \cite{multiplikation:DGEMM} definiert als: +Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als: \textit{DGEMM performs one of the matrix-matrix operations} $$ @@ -339,20 +340,19 @@ $$ an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. } -Die Implementaion 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] -cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, - m, n, k, 1, A, m , B, k, 0, C, m); -\end{lstlisting} -definiert. +%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] +%cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, +% m, n, k, 1, A, m , B, k, 0, C, m); +%\end{lstlisting} +%definiert. -\section{Implementation} +\section{Implementation}\label{multiplikation:section:Implementation} \rhead{Implementation} -\textcolor{red}{TODO: messresultate} -Folgende Algorithmen wurden jweiles in \texttt{C} und \texttt{Python} implementiert. +Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementiert. \begin{itemize} \item Standard Matrizenmultiplikation \item \textit{Devide and Conquer} Matrizenmultiplikation @@ -362,7 +362,11 @@ Folgende Algorithmen wurden jweiles in \texttt{C} und \texttt{Python} implementi \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} \end{itemize} -Der Code kann im dazugeh\"orgien \textit{GitHub} Repository gefunden werden. +Der Code kann im dazugehörigen \textit{GitHub} 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 Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{multiplikation:tab:pc_config} aufgelistet. + \begin{table} \begin{center} @@ -446,16 +450,16 @@ Der Code kann im dazugeh\"orgien \textit{GitHub} Repository gefunden werden. \center \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_1024} \caption{Messresultate mit der Programmiersprache \texttt{Python}} - \label{multiplikation:fig:c_meas_4096} + \label{multiplikation:fig:python} \end{figure} \section{Fazit} \rhead{Fazit} -Wie man in \textcolor{red}{hyperlink Messresultate} gesehen haben, sind die geziegten 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 den theoretisch geringeren Zeitkomplexitäten, den Implementationen der numerischen Bibliotheken klar unterlegen. Einen optimierten 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 keleine Mikrocontroller ohne Floatingpoint Recheneinhieten oder auch an \textit{Field Programmable Gate Arrays (FPGA's)}. -Sobland sehr grosse Matrizen multipliziert werden müssen und eine Addition in weniger Taktzyklen als eine Multiplikation durcheführt werden kann, können die gezeigten Algorithmen von Vorteil sein. +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. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index 2688f27..cd5aaaa 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -34,12 +34,12 @@ In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufze \subsubsection{Beispiel Algorithmen} -Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden kann. +Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. \paragraph{Beschr\"ankter Algorithmus} 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. -\begin{algorithm}\caption{} +\begin{algorithm}\footnotesize\caption{} \label{multiplikation:alg:b1} \setlength{\lineskip}{7pt} \begin{algorithmic} @@ -51,7 +51,8 @@ Ein Beispiel eines Beschr\"ankter Verhalten $\mathcal{O}(1)$, kann im Algorithmu Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. -\begin{algorithm}\caption{} + +\begin{algorithm}\footnotesize\caption{} \label{multiplikation:alg:b2} \setlength{\lineskip}{7pt} \begin{algorithmic} @@ -68,7 +69,7 @@ Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\ Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares Verhalten. Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}(n)$. -\begin{algorithm}\caption{} +\begin{algorithm}\footnotesize\caption{} \setlength{\lineskip}{7pt} \begin{algorithmic} \label{multiplikation:alg:l1} @@ -90,7 +91,7 @@ Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalte Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchglaufen und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. -\begin{algorithm}[H]\caption{} +\begin{algorithm}[H]\footnotesize\caption{} \label{multiplikation:alg:q1} \setlength{\lineskip}{7pt} \begin{algorithmic} -- cgit v1.2.1 From b705856321c6bc362027ac7a5770fb7b6a3c56c3 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Wed, 4 Aug 2021 17:42:36 +0200 Subject: Fix last two sentences --- buch/papers/punktgruppen/intro.tex | 3 +-- buch/papers/punktgruppen/piezo.tex | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index e369cf5..0a0cc86 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -6,8 +6,7 @@ In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. Zu Beginn werden wir zeigen, was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalles zu beschreiben. Mit etwas kniffligen geometrischen Überlegungen kann man zeigen, was in der Welt der Kristallographie alles möglich ist oder nicht. -% TODO: die moglichen Kristallgitter in Grenzen etc ist (apparently) not okay -Einschränkungen in Kristallsymmetrien sind durchaus willkommen, da dank ihnen sich die möglichen Kristallgitter in Grenzen halten und sich kategorisieren lassen. +Diese erlauben alle möglichen Kristalle nach ihren Symmetrien in erstaunlich wenige Klassen zu kategorisieren. Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. Piezoelektrizität beschreibt einen Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index ff9f1e2..334e4e7 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -1,5 +1,4 @@ \section{Piezoelektrizität} -%% TODO: improve this paragraph Die Piezoelektrizität ist die spannende Eigenschaft, dass gewisse Kristalle eine elektrische Spannung erzeugen, wenn mechanischer Druck auf sie ausgeübt wird. \begin{figure} @@ -71,8 +70,7 @@ Spiegelt man nun den Kristall um den Gitterpunkt in der Mitte des Kristalles, so Piezoelektrizität hat durchaus Nutzen im Alltag. Feuerzeuge welche nicht auf dem Prinzip beruhen einen Zündstein abzuschleifen, sondern ohne Verschleiss auf Knopfdruck einen Zündfunken erzeugen, basieren auf dem Prinzip der Piezoelektrizität. Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu einer konfigurierten Spannung. -%% TODO: replace with (?): Drückt der Nutzende stärker -Wird vom Nutzenden fester zugedrückt entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, welcher auf das Piezoelement aufschlägt. +Drückt der Nutzende stärker zu, entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, welcher auf das Piezoelement aufschlägt. Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung. Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden. Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich am anderen zu versuchen. -- cgit v1.2.1 From 100898f1bdf1f00e3f8ba8ddb68703bcbed1e77e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 4 Aug 2021 20:24:32 +0200 Subject: add new image stuff --- buch/papers/clifford/3d/Makefile | 13 +++ buch/papers/clifford/3d/common.inc | 206 +++++++++++++++++++++++++++++++++++++ buch/papers/clifford/3d/dq.pov | 25 +++++ 3 files changed, 244 insertions(+) create mode 100644 buch/papers/clifford/3d/Makefile create mode 100644 buch/papers/clifford/3d/common.inc create mode 100644 buch/papers/clifford/3d/dq.pov (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile new file mode 100644 index 0000000..e6a9be3 --- /dev/null +++ b/buch/papers/clifford/3d/Makefile @@ -0,0 +1,13 @@ +# +# Makefile +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +all: dq.jpg + +dq.png: dq.pov common.inc + povray +A0.1 +W1920 +H1080 -Odq.png dq.pov + +dq.jpg: dq.png + convert dq.png -density 300 -units PixelsPerInch dq.jpg + diff --git a/buch/papers/clifford/3d/common.inc b/buch/papers/clifford/3d/common.inc new file mode 100644 index 0000000..4bc2e7d --- /dev/null +++ b/buch/papers/clifford/3d/common.inc @@ -0,0 +1,206 @@ +// +// common.inc +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "colors.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.14; +#declare r = 0.04; + +camera { + location <40, 10, 15> + look_at <0, 0, 0> + right 16/9 * x * imagescale + up y * imagescale +} + +light_source { + <40, 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> + } +} + +// +// draw an arrow from to with thickness with +// color +// +#macro arrow(from, to, arrowthickness, c) +#declare arrowdirection = vnormalize(to - from); +#declare arrowlength = vlength(to - from); +union { + sphere { + from, 1.1 * arrowthickness + } + cylinder { + from, + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + arrowthickness + } + cone { + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + 2 * arrowthickness, + to, + 0 + } + pigment { + color c + } + finish { + specular 0.9 + metallic + } +} +#end + + +arrow(< -3, 0, 0 >, < 3, 0, 0 >, r, White) +arrow(< 0, -3, 0 >, < 0, 3, 0 >, r, White) +arrow(< 0, 0, -3 >, < 0, 0, 3 >, r, White) + +#macro circlearrow0(e1, e2, e3, r1, r2) + +mesh { + #declare N = 100; + #declare phi = 0; + #declare phimax = 1.8 * pi; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + triangle { + center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3 + } + triangle { + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3, + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3 + } + triangle { + center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3, + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3, + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3 + } + triangle { + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3, + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3, + center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3 + } + triangle { + center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3, + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3 + } + triangle { + center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r1 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3, + center + r1 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3 + } + triangle { + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) - h * e3, + center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3 + } + triangle { + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) - h * e3, + center + r2 * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + h * e3, + center + r2 * (cos(phi ) * e1 + sin(phi ) * e2) + h * e3 + } + #declare phi = phi + phistep; + #end + + triangle { + center + r1 * e1 - h * e3, + center + r1 * e1 + h * e3, + center + r2 * e1 + h * e3 + } + triangle { + center + r2 * e1 - h * e3, + center + r2 * e1 + h * e3, + center + r1 * e1 - h * e3 + } + triangle { + center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 - h * e3, + center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 - h * e3, + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3 + } + triangle { + center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3, + center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3, + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3 + } + triangle { + center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 - h * e3, + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3 + center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3 + } + triangle { + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3 + center + r1 * cos(phi) * e1 + r1 * sin(phi) * e2 + h * e3, + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3 + } + triangle { + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3, + center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 - h * e3, + center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3 + } + triangle { + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) - h * e3, + center + r2 * cos(phi) * e1 + r2 * sin(phi) * e2 + h * e3, + center + 0.5*(r1+r2) * (cos(phi + pi/12) * e1 + sin(phi + pi/12) * e2) + h * e3 + } + + pigment { + color rgb<1, 0.4, 0.4> + } +} + +#end + + +#macro circlearrow(fromdirection, axis, center, r, h) + +#declare e1 = vnormalize(fromdirection); +#declare e2 = -vnormalize(vcross(axis, fromdirection)); +#declare e3 = vnormalize(axis); + +#declare r1 = 0.4 * r; +#declare r2 = r; + +circlearrow0(e1, e2, e3, r1, r2) + +box { + center - r * (e1 + e2) - 0.021 * e3, center + r * (e1 + e2) + 0.021 * e3 + pigment { + color rgb<0.6,0.6,1> + } +} + +cone { + center + 0.02101 * e3, r, center + 2 * r * e3, 0 + pigment { + color rgbt<0.6,0.6,1,0.8> + } +} + +cylinder { + center, center + 2 * r * e3, 0.04*0.2 + pigment { + color rgb<1.0,0.6,0.6> + } +} + +#end + diff --git a/buch/papers/clifford/3d/dq.pov b/buch/papers/clifford/3d/dq.pov new file mode 100644 index 0000000..92b702a --- /dev/null +++ b/buch/papers/clifford/3d/dq.pov @@ -0,0 +1,25 @@ +// +// dq.pov -- Drehung und Quaternion +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#include "common.inc" + +arrow(<0,0,0>, <1, sqrt(2), 2>, r, Red) + +#declare r = 0.2 * r; + +circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, 0.022) +circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, 0.022) +circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, 0.022) + +#declare l = 2.8; +#declare h = 0.0001; +union { + box { <-l,-l,-h>, } + box { <-l,-h,-l>, } + box { <-h,-l,-l>, <-h,l,l> } + pigment { + color rgbt<0.6,0.6,0.6,0.0> + } +} -- cgit v1.2.1 From f06e1476cec724c47306967946f9dcb6d8be971e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Thu, 5 Aug 2021 10:59:29 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 43 ++++++++++++++++++------------------------- buch/papers/munkres/teil3.tex | 37 ++++++++++++++++++------------------- 2 files changed, 36 insertions(+), 44 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 07489e3..3bec61d 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -13,10 +13,10 @@ Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde \subsection{Zuordnungsproblem an einem konkreten Beispiel \label{munkres:subsection:bonorum}} -Man hat den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne +Als Beispiel betrachten wir den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne soll möglichst klein werden. Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. -Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran von A nach B oder gar kein Kran verschoben werden. Also 1 oder 0. +Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran (Anzahl 1) von A nach B oder gar kein Kran (Anzahl 0) verschoben werden. Für solche Optimierungsprobleme für reelle Variablen sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art und Weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. \begin{figure} @@ -34,40 +34,33 @@ In einem Zuordnungsproblem sind alle Angebots- und Bedarfsmengen gleich 1 \begin{equation} a_{i}=b_{j}=1 \end{equation} -Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix $\mathbb{A}$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. -Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. - -\begin{figure} +Das Ziel ist es die Gesamtkosten zu minimieren. Mit Hilfe einer $n\times n$ Matrix \[ A = \begin{pmatrix} -a_{11}&a_{12}&\dots &a_{1m}\\ -a_{21}&a_{22}&\dots &a_{2m}\\ +a_{11}&a_{12}&\dots &a_{1n}\\ +a_{21}&a_{22}&\dots &a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ -a_{n1}&a_{n2}&\dots &a_{nm} +a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} \] -\caption{Darstellung einer Matrix $A$} -\end{figure} -Eine Matrix, wie hier in Abbildung 21.2 ersichtlich, ist ein rechteckiges Schema, dessen Elemente üblicherweise Zahlen, aber auch andere mathematische Elemente wie Variablen oder Funktionen sein können. Sie besteht aus $n$ Zeilen und $m$ Spalten. D.h. die Elemente einer Matrix vom Typ $(n,m)$ mit Namen $A$ sind $a_{ij}$ wobei $i$ = 1,..., $m$ ist und $j$ = 1,...,$n$. $a_{ij}$ ist der Eintrag in der $i$-ten Zeile und $j$-ten Spalte der Matrix . Zum Beispiel ist a21 das Element der 2. Zeile und 1. Spalte. $i$ wird auch der Zeilenindex, $j$ der Spaltenindex genannt. + +$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. +In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. + +Die oben ersichtliche Matrix $A$ besitzt Matrix-Elemente. Die Elemente einer Matrix vom Typ $(n,n)$ mit Namen $A$ sind $a_{ij}$ wobei $i$ = 1,..., $n$ ist und $j$ = 1,...,$n$. $a_{ij}$ ist der Eintrag in der $i$-ten Zeile und $j$-ten Spalte der Matrix . Zum Beispiel ist a21 das Element der 2. Zeile und 1. Spalte. $i$ wird auch der Zeilenindex, $j$ der Spaltenindex genannt. \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} -\begin{equation} -Netzwerk -\end{equation} -Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.3 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Arbeiter und in den eckigen Klammern rechts eine $[-1]$ für jede Tätigkeit. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. -\begin{equation} -Matrix -\end{equation} -Im Bild 21.4 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle. -\begin{equation} -Bitpartiter Graph -\end{equation} +\subsubsection{Netzwerk} +Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Arbeiter und in den eckigen Klammern rechts eine $[-1]$ für jede Tätigkeit. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. +\subsubsection{Matrix} +Im Bild 21.3 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle. +\subsubsection{Bitpartiter Graph} Ein bipartiter Graph ist ein mathematisches Modell für Beziehungen -zwischen den Elementen zweier Mengen. Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. Zwischen zwei Gruppen von Objekten wird hierbei eine eindeutige Zuordnung hergestellt. +zwischen den Elementen zweier Mengen. Es eignet sich sehr gut zur Untersuchung von Zuordnungsproblemen. Zwischen zwei Gruppen von Objekten wird hierbei eine eindeutige Zuordnung hergestellt. Der Graph ist in Abbildung 21.4 ersichtlich. \begin{itemize} \item 3 = Anzahl der Knoten aus Menge A. \item 3 = Anzahl der Knoten aus Menge B. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index d2e8174..964444c 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -53,37 +53,36 @@ allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktio (Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur eine markierte Null zu haben) -\item Weiter werden die jeweiligen Zeilen eruiert, bei welchen keine markierte Null vorhanden sind. Diese kennzeichnet man. +\item Weiter werden die jeweiligen Zeilen eruiert, bei welchen keine markierte Null vorhanden sind. Diese kennzeichnet man mit einer blauen Fläche. -\item In der vorherigen Zeile die 0 eruieren und die Spalte ebenfalls -kennzeichnen (*2) +\item In der vorherigen, mit blauer Fläche markierten Zeile die 0 eruieren und dann die dazugehörige Spalte ebenfalls +blau markieren. -\item Im der selben Spalte die Markierte Null eruieren und die dazugehörige -Zeile kennzeichnen (*3) +\item Im der selben Spalte die markierte Null eruieren und die dazugehörige +Zeile ebenfalls blau kennzeichnen. -\item Alle Zeilen durchstreichen, welche KEINE Kennzeichnungen (*) haben +\item Alle Zeilen mit einem gelben Balken durchstreichen, welche KEINE blauen Markierungen haben. -\item Alle Spalten durchstreichen, welche EINE Kennzeichnung besitzt! (hier, *2) +\item Alle Spalten durchstreichen, welche eine Blaue Markierung besitzt! -\item Kleinste Ziffer auswählen, welche nicht schon durchgestrichen sind. -(Im Beispiel ist es die Zahl 1. (Egal welche 1) +\item In den übrigen Zahlen soll nun die kleinste Ziffer ausgewählt werden, welche nicht schon durchgestrichen sind. +(Im Beispiel ist es die Zahl 1 in rot markiert. (Bei diesem Schritt ist es egal, welche 1 man wählt) \item Die eruierte kleinste Ziffer, wird von den nicht durchgestrichenen Ziffern -subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen) +subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen der Nullen) -\item Jeweilige Zahlen eruieren, welche vorgängig doppelt durchgestrichen wurden. +\item Jeweilige Zahlen eruieren, welche vorgängig doppelt mit einer gelben Fläche durchgestrichen wurden. -\item Kleinste eruierte Ziffer von vorhin auf die zwei markierten Ziffern addieren. +\item Kleinste eruierte Ziffer aus Schritt 9, soll nun auf die zwei in rot markierten Ziffern aus Schritt 11 dazu addiert werden. -\item Es sollen wiederum von neuem möglichst viele Nullen markiert werden, -welche freistehend sind. In diesem Schritt werden nur die markierten Nullen betrachtet. +\item In diesem Schritt sollen wiederum von neuem möglichst viele Nullen markiert werden, +welche freistehend sind. Es werden nur die markierten Nullen betrachtet. -\item Aus allen markierten Nullen in eine eins umwandeln. +\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. -\item Die restlichen Ziffern, durch eine Null ersetzen. +\item Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. -\item Zu guter letzt soll überall wo eine 1 steht, in der Ausgangsmatrix die -dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen ergeben sich nach Summieren der Zahlen der minimalste Transportweg. Im erwähnten Beispiel sind es total 13 Kilometer. +\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Es ergibt der minimalste Transportweg. Im erwähnten Beispiel sind es total 13 Kilometer. \end{enumerate} \begin{figure} @@ -108,4 +107,4 @@ dazugehörige Ziffer ausgewählt werden. Nach Einsetzen und Eruieren der Zahlen \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} Somit konnte danke der Ungarischen Methode sowohl der minimalste Transportweg als auch die optimalste Zuweisung der Kräne auf die neuen Standorte ermittelt werden. \ No newline at end of file +\end{figure} Wie in Abbildung 21.6 ersichtlich, kann somit dank der Ungarischen Methode sowohl der minimalste Transportweg als auch die optimalste Zuweisung der Kräne auf die neuen Standorte ermittelt werden. \ No newline at end of file -- cgit v1.2.1 From a8138ae8cf5b0bda133b5c5fb077021ac3d59761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 5 Aug 2021 12:59:37 +0200 Subject: add images for clifford article --- buch/papers/clifford/3d/Makefile | 23 ++++++- buch/papers/clifford/3d/common.inc | 59 +++++++++++++++--- buch/papers/clifford/3d/dq.pov | 6 +- buch/papers/clifford/3d/drehung.pov | 120 ++++++++++++++++++++++++++++++++++++ buch/papers/clifford/3d/q23.pov | 12 ++++ buch/papers/clifford/3d/q31.pov | 12 ++++ 6 files changed, 217 insertions(+), 15 deletions(-) create mode 100644 buch/papers/clifford/3d/drehung.pov create mode 100644 buch/papers/clifford/3d/q23.pov create mode 100644 buch/papers/clifford/3d/q31.pov (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile index e6a9be3..70dffe3 100644 --- a/buch/papers/clifford/3d/Makefile +++ b/buch/papers/clifford/3d/Makefile @@ -3,11 +3,28 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: dq.jpg +all: dq.jpg q23.jpg q31.jpg drehung.jpg -dq.png: dq.pov common.inc - povray +A0.1 +W1920 +H1080 -Odq.png dq.pov +size="+W1920 +H1080" +size="+W3840 +H2160" +dq.png: dq.pov common.inc + povray +A0.1 $(size) -Odq.png dq.pov dq.jpg: dq.png convert dq.png -density 300 -units PixelsPerInch dq.jpg +q23.png: q23.pov common.inc + povray +A0.1 $(size) -Oq23.png q23.pov +q23.jpg: q23.png + convert q23.png -density 300 -units PixelsPerInch q23.jpg + +q31.png: q31.pov common.inc + povray +A0.1 $(size) -Oq31.png q31.pov +q31.jpg: q31.png + convert q31.png -density 300 -units PixelsPerInch q31.jpg + +drehung.png: drehung.pov common.inc + povray +A0.1 $(size) -Odrehung.png drehung.pov +drehung.jpg: drehung.png + convert drehung.png -density 300 -units PixelsPerInch drehung.jpg + diff --git a/buch/papers/clifford/3d/common.inc b/buch/papers/clifford/3d/common.inc index 4bc2e7d..54aa7fe 100644 --- a/buch/papers/clifford/3d/common.inc +++ b/buch/papers/clifford/3d/common.inc @@ -11,10 +11,11 @@ global_settings { } #declare imagescale = 0.14; -#declare r = 0.04; +#declare r = 0.02; +#declare thick = 0.040; camera { - location <40, 10, 15> + location <40, 12, 15> look_at <0, 0, 0> right 16/9 * x * imagescale up y * imagescale @@ -70,12 +71,12 @@ arrow(< -3, 0, 0 >, < 3, 0, 0 >, r, White) arrow(< 0, -3, 0 >, < 0, 3, 0 >, r, White) arrow(< 0, 0, -3 >, < 0, 0, 3 >, r, White) -#macro circlearrow0(e1, e2, e3, r1, r2) +#macro circlearrow0(e1, e2, e3, r1, r2, h, winkel) mesh { #declare N = 100; #declare phi = 0; - #declare phimax = 1.8 * pi; + #declare phimax = winkel - pi / 12; #declare phistep = (phimax - phi) / N; #while (phi < phimax - phistep/2) triangle { @@ -170,7 +171,7 @@ mesh { #end -#macro circlearrow(fromdirection, axis, center, r, h) +#macro circlearrow(fromdirection, axis, center, r, h, winkel, anzahl) #declare e1 = vnormalize(fromdirection); #declare e2 = -vnormalize(vcross(axis, fromdirection)); @@ -179,27 +180,67 @@ mesh { #declare r1 = 0.4 * r; #declare r2 = r; -circlearrow0(e1, e2, e3, r1, r2) +#declare w = 0; +#while (w < anzahl) + #declare a = 2 * w * pi / anzahl; + circlearrow0(e1 * cos(a) - e2 * sin(a), e1 * sin(a) + e2 * cos(a), e3, r1, r2, 1.2 * h, winkel) + #declare w = w + 1; +#end + +mesh { + #declare vlu = center - r * e1 - r * e2 - h * e3; + #declare vlo = center - r * e1 - r * e2 + h * e3; + #declare vru = center - r * e1 + r * e2 - h * e3; + #declare vro = center - r * e1 + r * e2 + h * e3; + #declare hlu = center + r * e1 - r * e2 - h * e3; + #declare hlo = center + r * e1 - r * e2 + h * e3; + #declare hru = center + r * e1 + r * e2 - h * e3; + #declare hro = center + r * e1 + r * e2 + h * e3; + triangle { vlu, vru, vro } + triangle { vlu, vro, vlo } + + triangle { vru, hru, hro } + triangle { vru, hro, vro } + + triangle { hru, hlu, hlo } + triangle { hru, hlo, hro } + + triangle { hlu, vlu, vlo } + triangle { hlu, vlo, hlo } + + triangle { vlu, vru, hru } + triangle { vlu, hru, hlu } + + triangle { vlo, vro, hro } + triangle { vlo, hro, hlo } -box { - center - r * (e1 + e2) - 0.021 * e3, center + r * (e1 + e2) + 0.021 * e3 pigment { color rgb<0.6,0.6,1> } + finish { + specular 0.96 + metallic + } } +#if (vlength(axis) > 0.1) cone { - center + 0.02101 * e3, r, center + 2 * r * e3, 0 + center + 1.19 * h * e3, r, center + 2 * r * e3, 0 pigment { color rgbt<0.6,0.6,1,0.8> } } +#end cylinder { center, center + 2 * r * e3, 0.04*0.2 pigment { color rgb<1.0,0.6,0.6> } + finish { + specular 0.96 + metallic + } } #end diff --git a/buch/papers/clifford/3d/dq.pov b/buch/papers/clifford/3d/dq.pov index 92b702a..8002129 100644 --- a/buch/papers/clifford/3d/dq.pov +++ b/buch/papers/clifford/3d/dq.pov @@ -9,9 +9,9 @@ arrow(<0,0,0>, <1, sqrt(2), 2>, r, Red) #declare r = 0.2 * r; -circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, 0.022) -circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, 0.022) -circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, 0.022) +circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, thick, 1.8*pi/3, 3) +circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, thick, 1.8*pi/3, 3) +circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, thick, 1.8*pi/3, 3) #declare l = 2.8; #declare h = 0.0001; diff --git a/buch/papers/clifford/3d/drehung.pov b/buch/papers/clifford/3d/drehung.pov new file mode 100644 index 0000000..54b5a2e --- /dev/null +++ b/buch/papers/clifford/3d/drehung.pov @@ -0,0 +1,120 @@ +// +// drehung.pov -- Drehung um (1,1,1) +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#include "common.inc" + +#declare n = vnormalize(<1,1,1>); +#declare V = <0,2.6,0>; +#declare W = <0,0,2.6>; + +#declare Vparallel = vdot(n, V) * n; +#declare Vperp = V - Vparallel; +#declare Wparallel = vdot(n, W) * n; +#declare Wperp = W - Wparallel; + +arrow(<0,0,0>, 2*n, thick, Red) + +arrow(<0,0,0>, V, thick, rgb<0.0,1.0,1.0>) +arrow(<0,0,0>, W, thick, rgb<0.0,1.0,1.0>) + +circlearrow(vnormalize(vcross(<-1,0,1>,n)), -0.01 * <1,1,1>, <0,0,0>, 1, 0.8*thick, 1.98*pi/3, 3) + +arrow(<0,0,0>, Vperp, 0.99*thick, Blue) +arrow(<0,0,0>, Wperp, 0.99*thick, Blue) + +arrow(Vperp, V, thick, Green) +arrow(Wperp, W, thick, Green) + +#declare l = 2.4; +intersection { + box { <-l,-l,-l>, } + //cylinder { -n, n, 3 } + plane { n, 0.01 } + plane { -n, 0.01 } + pigment { + color rgbt<0.6,0.6,1.0,0.8> + } +} + +#declare e1 = vnormalize(Vperp); +#declare e3 = n; +#declare e2 = vnormalize(vcross(e3, e1)); +#declare r = vlength(Vperp); + +mesh { + #declare phi = 0; + #declare phimax = 2*pi/3; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + triangle { + <0,0,0>, + r * (cos(phi ) * e1 + sin(phi ) * e2), + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + } + #declare phi = phi + phistep; + #end + pigment { + color rgbt<0.2,0.2,1.0,0.4> + } +} + +union { + #declare phi = 0; + #declare phimax = 2*pi/3; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + cylinder { + r * (cos(phi ) * e1 + sin(phi ) * e2), + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2), + 0.01 + } + sphere { r * (cos(phi ) * e1 + sin(phi ) * e2), 0.01 } + #declare phi = phi + phistep; + #end + pigment { + color Blue + } +} + +mesh { + #declare phi = 0; + #declare phimax = 2*pi/3; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + triangle { + r * (cos(phi ) * e1 + sin(phi ) * e2), + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2), + r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel + } + triangle { + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2), + r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + Vparallel + } + #declare phi = phi + phistep; + #end + pigment { + color rgbt<0.2,1,0.2,0.4> + } +} + +union { + #declare phi = 0; + #declare phimax = 2*pi/3; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + cylinder { + r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, + r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + Vparallel, + 0.01 + } + sphere { r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, 0.01 } + #declare phi = phi + phistep; + #end + pigment { + color Green + } +} + diff --git a/buch/papers/clifford/3d/q23.pov b/buch/papers/clifford/3d/q23.pov new file mode 100644 index 0000000..e3e5d49 --- /dev/null +++ b/buch/papers/clifford/3d/q23.pov @@ -0,0 +1,12 @@ +// +// q23.pov -- Drehung und Quaternion +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#include "common.inc" + +circlearrow(<1,0,0>, 0.01*<0,0,-1>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) + +arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) +arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Blue) +arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Red) diff --git a/buch/papers/clifford/3d/q31.pov b/buch/papers/clifford/3d/q31.pov new file mode 100644 index 0000000..901f838 --- /dev/null +++ b/buch/papers/clifford/3d/q31.pov @@ -0,0 +1,12 @@ +// +// q31.pov -- Drehung und Quaternion +// +// (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#include "common.inc" + +circlearrow(<1,0,0>, 0.01*<0,-1,0>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) + +arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) +arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Red) +arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Blue) -- cgit v1.2.1 From 2bab34711e7654ec4b4bb69e324df57ccc4e4665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 5 Aug 2021 13:12:55 +0200 Subject: Changes to IFS image problem --- buch/papers/ifs/images/Makefile | 9 +++++ buch/papers/ifs/images/chaosspiel.tex | 37 +++++++++++++++++++++ .../ifs/images/farnnotweight-eps-converted-to.pdf | Bin 166218 -> 6074235 bytes .../ifs/images/farnrightwight-eps-converted-to.pdf | Bin 59191 -> 6450743 bytes buch/papers/ifs/teil2.tex | 13 ++++---- buch/papers/ifs/teil3.tex | 2 +- 6 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 buch/papers/ifs/images/Makefile create mode 100644 buch/papers/ifs/images/chaosspiel.tex (limited to 'buch/papers') diff --git a/buch/papers/ifs/images/Makefile b/buch/papers/ifs/images/Makefile new file mode 100644 index 0000000..c6d3fb5 --- /dev/null +++ b/buch/papers/ifs/images/Makefile @@ -0,0 +1,9 @@ +# +# Makefile +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +chaosspiel.pdf: chaosspiel.tex \ + farnnotweight-eps-converted-to.pdf \ + farnrightwight-eps-converted-to.pdf + pdflatex chaosspiel.tex diff --git a/buch/papers/ifs/images/chaosspiel.tex b/buch/papers/ifs/images/chaosspiel.tex new file mode 100644 index 0000000..7c69ad3 --- /dev/null +++ b/buch/papers/ifs/images/chaosspiel.tex @@ -0,0 +1,37 @@ +% +% 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] + +% add image content here + +\begin{scope}[xshift=-3.6cm] +%\clip (-3.3,-3) rectangle (3.3,3); +\node at (0,0) { +\includegraphics[width=6.8cm]{farnnotweight-eps-converted-to.pdf} +}; +\node at (0.2,-5.7) {(a)}; +\end{scope} + +\begin{scope}[xshift=3.6cm] +%\clip (-3.3,-3) rectangle (3.3,3); +\node at (0,0) { +\includegraphics[width=6.8cm]{farnrightwight-eps-converted-to.pdf} +}; +\node at (0.2,-5.7) {(b)}; +\end{scope} + +\end{tikzpicture} +\end{document} + diff --git a/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf index 35bff32..f5e4093 100644 Binary files a/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf and b/buch/papers/ifs/images/farnnotweight-eps-converted-to.pdf differ diff --git a/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf b/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf index 3652e8f..fa69d77 100644 Binary files a/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf and b/buch/papers/ifs/images/farnrightwight-eps-converted-to.pdf differ diff --git a/buch/papers/ifs/teil2.tex b/buch/papers/ifs/teil2.tex index c468b73..d0110ed 100644 --- a/buch/papers/ifs/teil2.tex +++ b/buch/papers/ifs/teil2.tex @@ -248,12 +248,13 @@ In jeder Kopie des ganzen Farns fehlen die Punkte für dieses rechte untere Teil \begin{figure} \centering - \subfigure[]{ - \label{ifs:farnNoWeight} - \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnnotweight}} - \subfigure[]{ - \label{ifs:farnrightWeight} - \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnrightwight}} + \includegraphics{papers/ifs/images/chaosspiel.pdf} + %\subfigure[]{ + % \label{ifs:farnNoWeight} + % \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnnotweight}} + %\subfigure[]{ + % \label{ifs:farnrightWeight} + % \includegraphics[width=0.45\textwidth]{papers/ifs/images/farnrightwight}} \caption{(a) Chaosspiel ohne Gewichtung (b) $S_4$ zu wenig gewichtet} \label{ifs:farnweight} \end{figure} diff --git a/buch/papers/ifs/teil3.tex b/buch/papers/ifs/teil3.tex index 01a3ee2..cebb664 100644 --- a/buch/papers/ifs/teil3.tex +++ b/buch/papers/ifs/teil3.tex @@ -137,7 +137,7 @@ Am Ende des Algorithmus haben wir für jeden Range-Block den zugehörigen Domain Mit den gefundenen Abbildungen lässt sich das Bild generieren. Wir beginnen wie schon im letzten Kapitel mit einer beliebigen Startmenge. In unserem Fall ist dieses ein Bild $f_0$ derselben Grösse. -Nun ersetzen wir jedes $R_i$ mit der Transformierten des zugehörigen Domain-Blocks $T(G_j)$. +Nun ersetzen wir jedes $R_i$ mit der Transformierten des zugehörigen Domain-Blocks $T(D_j)$. Dies wird verkürzt als Operator $W$ geschrieben. So erhalten wir ein neues Bild $f_1 = W(f_0)$. Dieses Vorgehen führen wir iteriert aus bis wir von $f_n = W(f_{n-1})$ zu $f_{n-1}$ kaum mehr einen Unterschied feststellen. Die Iteration hat nun ihren Attraktor, das Bild, erreicht. -- cgit v1.2.1 From e948351c11835cb6a19abe394ffb61219884b96a Mon Sep 17 00:00:00 2001 From: Nunigan Date: Thu, 5 Aug 2021 18:04:32 +0200 Subject: update paper --- buch/papers/multiplikation/einlteung.tex | 6 +- buch/papers/multiplikation/loesungsmethoden.tex | 72 ++++++++----- buch/papers/multiplikation/problemstellung.tex | 135 +++++++++++++----------- 3 files changed, 122 insertions(+), 91 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index 2d0583d..9f1cb04 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -17,7 +17,7 @@ Koeffizienten 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 \ref{multiplikation:fig:mm_viz} visualisiert werden. +Grafisch kann die Matrizenmultiplikation $\mathbf{AB}=\mathbf{C}$ wie in Abbildung \ref{multiplikation:fig:mm_viz} visualisiert werden. Im Fall einer Matrizengr\"osse von $2\times 2$ kann die Matrixgleichung \begin{equation} \begin{bmatrix} @@ -34,7 +34,7 @@ C_{11} & C_{12}\\ C_{21} & C_{22} \end{bmatrix} \end{equation} -explizt als Gleichung +explizt als Gleichung \begin{equation} \label{multiplikation:eq:MM_exp} \begin{split} C_{11} &= A_{11} \cdot B_{11} + A_{12} \cdot B_{21}\\ @@ -49,4 +49,4 @@ der einzelnen Terme geschrieben werden. \includegraphics[]{papers/multiplikation/images/mm_visualisation} \caption{Matrizen Multiplikation} \label{multiplikation:fig:mm_viz} -\end{figure} \ No newline at end of file +\end{figure} diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 6f1486c..43181d4 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -68,10 +68,10 @@ Das Matrizen produklt \end{bmatrix}, \end{equation} \begin{equation} -\mathbf{C}_{ij} = \sum_{k=1}^n \mathbf{A}_{ik} \mathbf{B}_{kj} +\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 wird die Matrizenmultiplikation verwendet. +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. 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. @@ -116,10 +116,10 @@ Die Addition zweier Matrizen $\mathbf{A} + \mathbf{B} = \mathbf{C}$ hat eine Lau In diesem Fall hat der \textit{Divide and Conquer} Ansatz zu keiner Verbesserung gef\"uhrt. -\subsection{Strassen's Algorithmus} +\subsection{Strassens Algorithmus} -Strassen's Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen von Blockmatrizen. -Die grundlegenden Terme +Strassens Algorithmus \cite{multiplikation:strassen_1969} beschreibt die Matrizenmultiplikation mit einer Vielzahl von Additionen, Subtraktionen und Multiplikationen von Blockmatrizen. +Die sieben grundlegenden Terme \begin{equation} \label{multiplikation:eq:strassen} \begin{split} \text{\textbf{P}} &= \left(\mathbf{A}_{11} + \mathbf{A}_{22}\right ) \cdot \left(\mathbf{B}_{11} + \mathbf{B}_{22}\right ) \\ @@ -188,7 +188,7 @@ der Matrix $\mathbf{C}$ gebraucht. \end{algorithm} Strassen's 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 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}$. Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \begin{figure} @@ -199,7 +199,7 @@ Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \end{figure} Die Funktion wird sieben mal rekursiv aufgerufen. -Dies f\"uhrt zu einer Laufzeit von +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 ) @@ -210,31 +210,42 @@ Man beachte, dass die Anzahl von Additionen und Subtraktionen gr\"osser und die \subsection{Winograd's Algorithmus} Einen weiteren Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}. -Er beschrieb einen neuen Algorithmus f\"ur das -\begin{equation} - \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i +Er beschrieb einen neuen Algorithmus f\"ur das Skalarprodukt +\begin{equation} \label{multiplikation:eq:skalar} + \langle x,y \rangle = \sum_{i=1}^{n}x_i y_i. \end{equation} -Skalarprodukt. F\"ur jeden Vektor berechne \begin{equation} \xi = \sum_{j=1}^{ \lfloor n/2 \rfloor} x_{2j-1} \cdot x_{2j} \end{equation} und \begin{equation} - \eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j}. + \eta = \sum_{j=1}^{ \lfloor n/2 \rfloor} y_{2j-1} \cdot y_{2j}, \end{equation} +die jeweils nur von $x$ und $y$ abhängen. +Dazu werden $2 \cdot \lfloor n/2 \rfloor \leq n$ Multiplikationen benötigt. Das Skalarprodukt ist nun geben mit \begin{equation} \langle x,y \rangle = \begin{cases} - \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{if $n$ is even}\\ - \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{if $n$ is odd}. + \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta & \text{wenn $n$ gerade}\\ + \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{wenn $n$ ungerade}. \end{cases} \end{equation} - +Das Skalarprodukt kann also mit $ \lfloor \frac{n+1}{2} \rfloor$ weiteren Multiplikationen brechnet werden. 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. - +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} +\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} @@ -243,8 +254,14 @@ Dies f\"uhrt zu 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 glichen Ansatz wie in der Gleichung \ref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss +\begin{equation} + N=2n \ll T=n^2 +\end{equation} +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. 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)$. \begin{algorithm}\footnotesize\caption{Winograd Matrix Multiplication} \setlength{\lineskip}{7pt} \label{multiplikation:alg:winograd} @@ -296,10 +313,11 @@ Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen \end{algorithmic} \end{algorithm} + \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 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}. \textit{BLAS} sind dabei in drei unterschiedliche Levels aufgeteilt. @@ -307,17 +325,17 @@ Die meisten Numerischen Bibliotheken von High-Level Skriptsprachen wie \texttt{M \item Level 1 \begin{itemize} \item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{x}+\mathbf{y}$ - \item Dieses Level hat $\mathcal{O}(n)$ karakteristik + \item Dieses Level hat $\mathcal{O}(n)$ Charakteristik \end{itemize} \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)$ karakteristik + \item Dieses Level hat $\mathcal{O}\left(n^2\right)$ 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)$ karakteristik + \item Dieses Level hat $\mathcal{O}\left(n^3\right)$ Charakteristik \end{itemize} \end{itemize} @@ -362,7 +380,7 @@ Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementi \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} \end{itemize} -Der Code kann im dazugehörigen \textit{GitHub} Repository gefunden werden. +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 Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{multiplikation:tab:pc_config} aufgelistet. @@ -392,8 +410,8 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \caption{Messresultate \texttt{C}} \label{multiplikation:tab:messung_C} \end{table} - - + + \begin{table} \begin{center} @@ -456,8 +474,8 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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. -Einen optimierten Speicherzugriff hat einen weitaus grösseren Einfluss auf die Laufzeit als die Zeitkomplexität des Algorithmus. +Wie man im Abschnit \ref{multiplikation:section:Implementation} sehen kann, sind die gezeigten Algorithmen trotz den 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. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index cd5aaaa..c6fd10e 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -5,13 +5,15 @@ % \section{Problemstellung} \rhead{Problemstellung} -Dank der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. +Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. Das Ziel dieses Papers ist, verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. -Gezielt werden auf Algorithmen, welche das Problem schneller als der Standard Algorithmus L\"osen eingegangen. +Gezielt wird auf Algorithmen eingegange, welche das Problem schneller als der Standard Algorithmus l\"osen. \subsection{Big $\mathcal{O}$ Notation} -Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus \cite{multiplikation:bigo}. +\label{muliplikation:sec:bigo} +Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhänigkeit 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$. +Als Beispiel: benötigt eine Funktion $g$, $\mathcal{O}\left(n+n^2 \right)$ Multiplikationen so wächst $f$ mit $\mathcal{O}\left(n^2 \right)$ nicht wesentlich schneller als $g$. Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: \begin{itemize} \item $f \in \mathcal{O}(1) \rightarrow f$ ist beschr\"ankt @@ -23,7 +25,7 @@ Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: \item usw. \end{itemize} -In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden. +In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden. \begin{figure} \center @@ -34,77 +36,88 @@ In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufze \subsubsection{Beispiel Algorithmen} -Folgend einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. +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} + \paragraph{Beschr\"ankter Algorithmus} 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. -\begin{algorithm}\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} + Konstanten werden nicht beachtet, der Algorithmus \ref{multiplikation:alg:b2} f\"uhrt ebenso zu $\mathcal{O}(1)$ und nicht zu $\mathcal{O}(2)$. -\begin{algorithm}\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} + \paragraph{Linearer Algorithmus} -Folgender Algorithmus \ref{multiplikation:alg:l1} hat ein lineares Verhalten. +Der Algorithmus \ref{multiplikation:alg:linear} hat ein lineares Verhalten. Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}(n)$. -\begin{algorithm}\footnotesize\caption{} - \setlength{\lineskip}{7pt} - \begin{algorithmic} - \label{multiplikation:alg:l1} - \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} + \paragraph{Quadratischer Algorithmus} -Folgender Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. +Der Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchglaufen und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$. - - -\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} - - -- cgit v1.2.1 From def3198eb5a2462d296aea81d14b6b982a722b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 5 Aug 2021 18:48:54 +0200 Subject: bild 1 --- buch/papers/clifford/3d/Makefile | 8 +++--- buch/papers/clifford/3d/dq.pdf | Bin 0 -> 156467 bytes buch/papers/clifford/3d/dq.pov | 11 ++++++--- buch/papers/clifford/3d/dq.tex | 51 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 buch/papers/clifford/3d/dq.pdf create mode 100644 buch/papers/clifford/3d/dq.tex (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile index 70dffe3..87acb6d 100644 --- a/buch/papers/clifford/3d/Makefile +++ b/buch/papers/clifford/3d/Makefile @@ -3,15 +3,17 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: dq.jpg q23.jpg q31.jpg drehung.jpg +all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf size="+W1920 +H1080" size="+W3840 +H2160" dq.png: dq.pov common.inc povray +A0.1 $(size) -Odq.png dq.pov -dq.jpg: dq.png - convert dq.png -density 300 -units PixelsPerInch dq.jpg +dq.jpg: dq.png Makefile + convert -extract 1600x1400+1500+60 dq.png -density 300 -units PixelsPerInch dq.jpg +dq.pdf: dq.jpg dq.tex + pdflatex dq.tex q23.png: q23.pov common.inc povray +A0.1 $(size) -Oq23.png q23.pov diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf new file mode 100644 index 0000000..1bcaf2c Binary files /dev/null and b/buch/papers/clifford/3d/dq.pdf differ diff --git a/buch/papers/clifford/3d/dq.pov b/buch/papers/clifford/3d/dq.pov index 8002129..762eee2 100644 --- a/buch/papers/clifford/3d/dq.pov +++ b/buch/papers/clifford/3d/dq.pov @@ -9,9 +9,14 @@ arrow(<0,0,0>, <1, sqrt(2), 2>, r, Red) #declare r = 0.2 * r; -circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, thick, 1.8*pi/3, 3) -circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, thick, 1.8*pi/3, 3) -circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, thick, 1.8*pi/3, 3) +#declare drehwinkel = 0.95 * 2*pi/3 * 3; +#declare drehwinkel23 = drehwinkel; +#declare drehwinkel12 = drehwinkel / sqrt(2); +#declare drehwinkel13 = drehwinkel / 2; + +circlearrow(<1,0,0>, <0,0,1>, <1, sqrt(2), 0>, 1, thick, drehwinkel23, 1) +circlearrow(<1,0,0>, <0,1,0>, <1, 0, 2>, sqrt(2)/2, thick, drehwinkel12, 1) +circlearrow(<0,0,1>, <1,0,0>, <0, sqrt(2), 2>, 0.5, thick, drehwinkel13, 1) #declare l = 2.8; #declare h = 0.0001; diff --git a/buch/papers/clifford/3d/dq.tex b/buch/papers/clifford/3d/dq.tex new file mode 100644 index 0000000..6b28452 --- /dev/null +++ b/buch/papers/clifford/3d/dq.tex @@ -0,0 +1,51 @@ +% +% dq.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} +\usepackage{ifthen} +\begin{document} + +\definecolor{darkred}{rgb}{0.7,0,0} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{6} +\def\hoehe{6} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=12cm]{dq.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]; +}{} + +\node at (-2.8,-2.7) {$O$}; +\node at (4.7,-3.4) {$a_1$}; +\node at (-2.6,5.2) {$a_2$}; +\fill[color=white,opacity=0.7] ({-5.7-0.25},{-4.8-0.15}) rectangle ({-5.7+0.25},{-4.8+0.2}); +\node at (-5.7,-4.8) {$a_3$}; + +\node[color=blue] at (-3.6,0.8) {$y\mathbf{e}_{23}$}; +\node[color=blue] at (2.1,0.9) {$x\mathbf{e}_{12}$}; +\node[color=blue] at (1.3,-3.7) {$z\mathbf{e}_{13}$}; + +\node[color=darkred] at (1.3,0.4) {$\vec{q}$}; + +\end{tikzpicture} + +\end{document} + -- cgit v1.2.1 From 001c12e5156f2e3b656bd42608768af5c3db4171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 5 Aug 2021 19:14:44 +0200 Subject: Zwei Drehungen --- buch/papers/clifford/3d/Makefile | 16 +++++---- buch/papers/clifford/3d/dq.pdf | Bin 156467 -> 156467 bytes buch/papers/clifford/3d/qq.pdf | Bin 0 -> 170922 bytes buch/papers/clifford/3d/qq.tex | 68 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 buch/papers/clifford/3d/qq.pdf create mode 100644 buch/papers/clifford/3d/qq.tex (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile index 87acb6d..823ad54 100644 --- a/buch/papers/clifford/3d/Makefile +++ b/buch/papers/clifford/3d/Makefile @@ -3,9 +3,8 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf +all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf qq.pdf -size="+W1920 +H1080" size="+W3840 +H2160" dq.png: dq.pov common.inc @@ -15,15 +14,20 @@ dq.jpg: dq.png Makefile dq.pdf: dq.jpg dq.tex pdflatex dq.tex +extract="1200x1200+1450+350" + q23.png: q23.pov common.inc povray +A0.1 $(size) -Oq23.png q23.pov -q23.jpg: q23.png - convert q23.png -density 300 -units PixelsPerInch q23.jpg +q23.jpg: q23.png Makefile + convert -extract $(extract) q23.png -density 300 -units PixelsPerInch q23.jpg q31.png: q31.pov common.inc povray +A0.1 $(size) -Oq31.png q31.pov -q31.jpg: q31.png - convert q31.png -density 300 -units PixelsPerInch q31.jpg +q31.jpg: q31.png Makefile + convert -extract $(extract) q31.png -density 300 -units PixelsPerInch q31.jpg + +qq.pdf: qq.tex q31.jpg q23.jpg + pdflatex qq.tex drehung.png: drehung.pov common.inc povray +A0.1 $(size) -Odrehung.png drehung.pov diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf index 1bcaf2c..59a1498 100644 Binary files a/buch/papers/clifford/3d/dq.pdf and b/buch/papers/clifford/3d/dq.pdf differ diff --git a/buch/papers/clifford/3d/qq.pdf b/buch/papers/clifford/3d/qq.pdf new file mode 100644 index 0000000..07a871c Binary files /dev/null and b/buch/papers/clifford/3d/qq.pdf differ diff --git a/buch/papers/clifford/3d/qq.tex b/buch/papers/clifford/3d/qq.tex new file mode 100644 index 0000000..c2ac1bc --- /dev/null +++ b/buch/papers/clifford/3d/qq.tex @@ -0,0 +1,68 @@ +% +% qq.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} +\usepackage{ifthen} +\begin{document} + +\definecolor{darkred}{rgb}{0.7,0,0} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{4} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\begin{scope}[xshift=-3.3cm] +\node at (0,0) {\includegraphics[width=6.3cm]{q23.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]; +}{} +\fill[color=white,opacity=0.5] ({-0.6-0.3},{-0.2-0.2}) rectangle ({-0.6+0.3},{-0.2+0.2}); +\node[color=darkred] at (-0.6,-0.2) {$q_{23}$}; +\node[color=blue] at (-0.4,2.7) {$\mathbf{v}$}; +\node[color=blue] at (0.7,0.4) {$\mathbf{v}''_{23}$}; +\node at (3.1,-1.4) {$a_1$}; +\node at (-2.7,-2.4) {$a_3$}; +\node at (-0.7,3.4) {$a_2$}; +\end{scope} + +\setboolean{showgrid}{false} + +\begin{scope}[xshift=3.3cm] +\node at (0,0) {\includegraphics[width=6.3cm]{q31.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]; +}{} +\fill[color=white,opacity=0.5] ({-0.7-0.3},{-0.9-0.2}) rectangle ({-0.7+0.3},{-0.9+0.2}); +\node[color=darkred] at (-0.7,-0.9) {$q_{13}$}; +\node[color=blue] at (0.7,0.4) {$\mathbf{v}''_{23}$}; +\node[color=blue] at (2.7,-0.7) {$\mathbf{v}''$}; +\node at (3.1,-1.4) {$a_1$}; +\node at (-2.7,-2.4) {$a_3$}; +\node at (-0.7,3.4) {$a_2$}; +\end{scope} + + +\end{tikzpicture} + +\end{document} + -- cgit v1.2.1 From e5df99c1ee45a6897c4fe98b018088ef0289f7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Thu, 5 Aug 2021 19:35:13 +0200 Subject: add images for clifford --- buch/papers/clifford/3d/Makefile | 8 ++++-- buch/papers/clifford/3d/dq.jpg | Bin 0 -> 135038 bytes buch/papers/clifford/3d/dq.pdf | Bin 156467 -> 156467 bytes buch/papers/clifford/3d/drehung.jpg | Bin 0 -> 203814 bytes buch/papers/clifford/3d/drehung.pdf | Bin 0 -> 224521 bytes buch/papers/clifford/3d/drehung.tex | 56 ++++++++++++++++++++++++++++++++++++ buch/papers/clifford/3d/q23.jpg | Bin 0 -> 77888 bytes buch/papers/clifford/3d/q31.jpg | Bin 0 -> 75576 bytes buch/papers/clifford/3d/qq.pdf | Bin 170922 -> 170756 bytes buch/papers/clifford/3d/qq.tex | 12 ++++---- 10 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 buch/papers/clifford/3d/dq.jpg create mode 100644 buch/papers/clifford/3d/drehung.jpg create mode 100644 buch/papers/clifford/3d/drehung.pdf create mode 100644 buch/papers/clifford/3d/drehung.tex create mode 100644 buch/papers/clifford/3d/q23.jpg create mode 100644 buch/papers/clifford/3d/q31.jpg (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/Makefile b/buch/papers/clifford/3d/Makefile index 823ad54..147ca81 100644 --- a/buch/papers/clifford/3d/Makefile +++ b/buch/papers/clifford/3d/Makefile @@ -3,7 +3,7 @@ # # (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule # -all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf qq.pdf +all: dq.jpg q23.jpg q31.jpg drehung.jpg dq.pdf qq.pdf drehung.pdf size="+W3840 +H2160" @@ -31,6 +31,8 @@ qq.pdf: qq.tex q31.jpg q23.jpg drehung.png: drehung.pov common.inc povray +A0.1 $(size) -Odrehung.png drehung.pov -drehung.jpg: drehung.png - convert drehung.png -density 300 -units PixelsPerInch drehung.jpg +drehung.jpg: drehung.png Makefile + convert -extract 1600x1450+1400+50 drehung.png -density 300 -units PixelsPerInch drehung.jpg +drehung.pdf: drehung.tex drehung.jpg + pdflatex drehung.tex diff --git a/buch/papers/clifford/3d/dq.jpg b/buch/papers/clifford/3d/dq.jpg new file mode 100644 index 0000000..bd44a65 Binary files /dev/null and b/buch/papers/clifford/3d/dq.jpg differ diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf index 59a1498..71727d2 100644 Binary files a/buch/papers/clifford/3d/dq.pdf and b/buch/papers/clifford/3d/dq.pdf differ diff --git a/buch/papers/clifford/3d/drehung.jpg b/buch/papers/clifford/3d/drehung.jpg new file mode 100644 index 0000000..ad7cd47 Binary files /dev/null and b/buch/papers/clifford/3d/drehung.jpg differ diff --git a/buch/papers/clifford/3d/drehung.pdf b/buch/papers/clifford/3d/drehung.pdf new file mode 100644 index 0000000..de29085 Binary files /dev/null and b/buch/papers/clifford/3d/drehung.pdf differ diff --git a/buch/papers/clifford/3d/drehung.tex b/buch/papers/clifford/3d/drehung.tex new file mode 100644 index 0000000..2ed6789 --- /dev/null +++ b/buch/papers/clifford/3d/drehung.tex @@ -0,0 +1,56 @@ +% +% drehung.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} +\usepackage{ifthen} +\begin{document} + +\definecolor{darkgreen}{rgb}{0,0.6,0} +\definecolor{darkred}{rgb}{0.6,0,0} + +\newboolean{showgrid} +\setboolean{showgrid}{false} +\def\breite{7} +\def\hoehe{6} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=13cm]{drehung.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]; +}{} + +\node at (6.1,-3.3) {$a_1$}; +\node at (-2.0,5.7) {$a_2$}; +\node at (-5.7,-4.9) {$a_3$}; + +\node[color=white] at (-1.9,4.4) {$\boldsymbol{v}$}; +\node[color=white] at (4.5,-2.7) {$\boldsymbol{v}''$}; + +\node[color=darkgreen] at (-3.3,4.4) {$\boldsymbol{v}_{\perp}$}; +\node[color=darkgreen] at (4.2,-4.3) {$\boldsymbol{v}''_{\perp}$}; + +\node[color=blue] at (-3.7,1.5) {$\boldsymbol{v}_{\|}$}; +\node[color=blue] at (1.9,-4.7) {$\boldsymbol{v}''_{\|}$}; + +\node[color=darkred] at (-1.6,-4.2) {$2\alpha=120^\circ$}; +\node[color=darkred] at (-4.9,-0.6) {$\boldsymbol{q}$}; + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/clifford/3d/q23.jpg b/buch/papers/clifford/3d/q23.jpg new file mode 100644 index 0000000..50ca028 Binary files /dev/null and b/buch/papers/clifford/3d/q23.jpg differ diff --git a/buch/papers/clifford/3d/q31.jpg b/buch/papers/clifford/3d/q31.jpg new file mode 100644 index 0000000..10313fa Binary files /dev/null and b/buch/papers/clifford/3d/q31.jpg differ diff --git a/buch/papers/clifford/3d/qq.pdf b/buch/papers/clifford/3d/qq.pdf index 07a871c..4c55d57 100644 Binary files a/buch/papers/clifford/3d/qq.pdf and b/buch/papers/clifford/3d/qq.pdf differ diff --git a/buch/papers/clifford/3d/qq.tex b/buch/papers/clifford/3d/qq.tex index c2ac1bc..9baa8bb 100644 --- a/buch/papers/clifford/3d/qq.tex +++ b/buch/papers/clifford/3d/qq.tex @@ -33,9 +33,9 @@ \fill (0,0) circle[radius=0.05]; }{} \fill[color=white,opacity=0.5] ({-0.6-0.3},{-0.2-0.2}) rectangle ({-0.6+0.3},{-0.2+0.2}); -\node[color=darkred] at (-0.6,-0.2) {$q_{23}$}; -\node[color=blue] at (-0.4,2.7) {$\mathbf{v}$}; -\node[color=blue] at (0.7,0.4) {$\mathbf{v}''_{23}$}; +\node[color=darkred] at (-0.6,-0.2) {$\boldsymbol{q}_{23}$}; +\node[color=blue] at (-0.4,2.7) {$\boldsymbol{v}$}; +\node[color=blue] at (0.7,0.4) {$\boldsymbol{v}''_{23}$}; \node at (3.1,-1.4) {$a_1$}; \node at (-2.7,-2.4) {$a_3$}; \node at (-0.7,3.4) {$a_2$}; @@ -53,9 +53,9 @@ \fill (0,0) circle[radius=0.05]; }{} \fill[color=white,opacity=0.5] ({-0.7-0.3},{-0.9-0.2}) rectangle ({-0.7+0.3},{-0.9+0.2}); -\node[color=darkred] at (-0.7,-0.9) {$q_{13}$}; -\node[color=blue] at (0.7,0.4) {$\mathbf{v}''_{23}$}; -\node[color=blue] at (2.7,-0.7) {$\mathbf{v}''$}; +\node[color=darkred] at (-0.7,-0.9) {$\boldsymbol{q}_{13}$}; +\node[color=blue] at (0.7,0.4) {$\boldsymbol{v}''_{23}$}; +\node[color=blue] at (2.7,-0.7) {$\boldsymbol{v}''$}; \node at (3.1,-1.4) {$a_1$}; \node at (-2.7,-2.4) {$a_3$}; \node at (-0.7,3.4) {$a_2$}; -- cgit v1.2.1 From 8f906697fbe2f35756537e95e034ae8f88f8f026 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Fri, 6 Aug 2021 13:38:46 +0200 Subject: Corrections from feedback --- buch/papers/punktgruppen/crystals.tex | 2 +- buch/papers/punktgruppen/intro.tex | 4 ++-- buch/papers/punktgruppen/piezo.tex | 2 +- buch/papers/punktgruppen/symmetry.tex | 27 ++++++++++++++------------- 4 files changed, 18 insertions(+), 17 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/punktgruppen/crystals.tex b/buch/papers/punktgruppen/crystals.tex index 45761f8..4b93927 100644 --- a/buch/papers/punktgruppen/crystals.tex +++ b/buch/papers/punktgruppen/crystals.tex @@ -145,7 +145,7 @@ Jede der 32 Kristallklassen auf der Abbildung \ref{fig:punktgruppen:kristallklas \begin{itemize} \item In Kristallen ist nur die Drehgruppe \(C\), Diedergruppe \(D\), Drehspiegelgruppe \(S\), Tetraedergruppe \(T\) und die Oktaedergruppe \(O\) zu finden. Es gäbe auch die Ikosaedergruppe \(I\) und die Kugelgruppe \(K\), diese sind aber nach Satz \ref{thm:punktgruppen:crystal-restriction} nicht kompatibel mit der Translationssymmetrie eines Kristalles und daher in der Kristallographie nicht relevant. - \item Dank Abschintt \ref{sec:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. + \item Dank Abschnitt \ref{sec:punktgruppen:Translationssymmetrie} wissen wir, wieso in Abbildung \ref{fig:punktgruppen:kristallklassen} auf \(C\) nur ganz bestimmte Subskripte folgen. Ist im Subskript eine Zahl \(n\) zu finden, steht dies für eine \(n\)-fache Symmetrie. Daher darf \(C_5\) auf der Abbildung \ref{fig:punktgruppen:kristallklassen} nicht vorkommen, da \(360^\circ/5 = 72^\circ\) was nach Satz \ref{thm:punktgruppen:crystal-restriction} keine mögliche Rotationssymmetrie eines Kristalles ist. \item Sind im Subskript Buchstaben, definieren diese weitere Symmetrieeigenschaften der Klasse. diff --git a/buch/papers/punktgruppen/intro.tex b/buch/papers/punktgruppen/intro.tex index 0a0cc86..e3f0226 100644 --- a/buch/papers/punktgruppen/intro.tex +++ b/buch/papers/punktgruppen/intro.tex @@ -1,7 +1,7 @@ \section{Einleitung} Es gibt viele Möglichkeiten sich in Kristallen zu verlieren. -Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen sich mit Kristallen zu beschäftigen. +Auch wenn man nur die mathematischen Betrachtungsweisen berücksichtigt, hat man noch viel zu viele Optionen, sich mit Kristallen zu beschäftigen. In diesem Kapitel wird daher der Fokus ``nur'' auf die Symmetrie gelegt. Zu Beginn werden wir zeigen, was eine Symmetrie ausmacht und dass sie noch weit mehr in sich verbirgt als nur schön auszusehen. Die vorgestellten Symmetrien sind äusserst gut geeignet, um die Grundeigenschaften eines Kristalles zu beschreiben. @@ -10,7 +10,7 @@ Diese erlauben alle möglichen Kristalle nach ihren Symmetrien in erstaunlich we Kategorien sind nicht nur für einen besseren Überblick nützlich, sondern kann man aus ihnen auch auf physikalische Eigenschaften schliessen. Als spannendes Beispiel: Die Piezoelektrizität. Piezoelektrizität beschreibt einen Effekt, ohne welchen diverse Altagsgegenständen nicht besonders nützlich wären. -Wie zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung. +Zum Beispiel sorgt er in den allermeisten Feuerzeugen für die Zündung. Hiermit ist hoffentlich ein Funken Interesse geweckt um sich mit dem scheinbar trivialen Thema der Symmetrie auseinander zu setzten. %% vim:linebreak breakindent showbreak=.. spell spelllang=de: diff --git a/buch/papers/punktgruppen/piezo.tex b/buch/papers/punktgruppen/piezo.tex index 334e4e7..1cf9b98 100644 --- a/buch/papers/punktgruppen/piezo.tex +++ b/buch/papers/punktgruppen/piezo.tex @@ -73,5 +73,5 @@ Drückt der Nutzende auf den Zündknopf, spannt sich eine Feder bis zu einer kon Drückt der Nutzende stärker zu, entspannt sich die Feder schlagartig und beschleunigt mit der gespeicherten Energie ein Hammer, welcher auf das Piezoelement aufschlägt. Der augenblicklich hohe Druck sorgt an den Piezokontakten für eine eben so kurze aber hohe elektrische Spannung. Die Spannung reicht aus, um eine Funkenstrecke zu überwinden und so eine entflammbares Gas zu entzünden. -Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich am anderen zu versuchen. +Sollte der Leser eines Tages in die Situation geraten, in welcher er zwei verschiedene Kristalle vor sich hat und ein piezoelektrisches Feuerzeug bauen musst, wobei bekannt ist, dass der eine eine Punktsymmetrie aufweist, empfiehlt es sich, sich mit dem anderen zu versuchen. diff --git a/buch/papers/punktgruppen/symmetry.tex b/buch/papers/punktgruppen/symmetry.tex index 51620a4..4a8d911 100644 --- a/buch/papers/punktgruppen/symmetry.tex +++ b/buch/papers/punktgruppen/symmetry.tex @@ -20,11 +20,11 @@ Wie wir jedoch später sehen werden, ist das Konzept der Symmetrie eigentlich vi \subsection{Geometrische Symmetrien} In Abbildung \ref{fig:punktgruppen:geometry-example} haben wir einige Formen, die offensichtlich symmetrisch sind. -Zum Beispiel hat das Quadrat eine Gerade, an deren es gespiegelt werden kann, ohne sein Aussehen zu verändern. +Zum Beispiel hat das Quadrat eine Gerade, an der es gespiegelt werden kann, ohne sein Aussehen zu verändern. Regelmässige Polygone mit \(n\) Seiten sind auch gute Beispiele, um eine diskrete Rotationssymmetrie zu veranschaulichen, was bedeutet, dass eine Drehung um einen Punkt um einen bestimmten Winkel \(360^\circ/n\) die Figur unverändert lässt. -Das letzte Beispiel auf der rechten Seite ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. +Das letzte Beispiel auf der rechts ist eine unendliche Rotationssymmetrie. Sie wird so genannt, weil es unendlich viele Werte für den Drehwinkel \(\alpha \in \mathbb{R}\) gibt, die die Form unverändert lassen. Ein Objekt kann mehr als nur eine Symmetrie aufweisen. -Als Beispiel, kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. +Zum Beispiel kann das Quadrat in Abbildung \ref{fig:punktgruppen:geometry-example} nicht nur um \(\sigma\) sondern auch diagonal gespiegelt werden oder um \(90^\circ\) gedreht werden. Fasst man die möglichen Symmetrien zusammen, entsteht eine Symmetriegruppe. \begin{definition}[Symmetriegruppe] @@ -45,7 +45,7 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine \begin{definition}[Zyklische Untergruppe, Erzeuger] Sei \(g\) ein Element einer Symmetriegruppe \(G\). Alle möglichen Kompositionen von \(g\) und \(g^{-1}\) bilden eine sogenannte zyklische Untergruppe von \(G\), wobei \(g\) Erzeuger der Untergruppe genannt wird. - Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \left\{ g^k : k \in \mathbb{Z} \right\}\) wird mit spitzen Klammern bezeichnet. + Die von \(g\) erzeugte Untergruppe \(\langle g \rangle = \{ g^k : k \in \mathbb{Z} \}\) wird mit spitzen Klammern bezeichnet. \end{definition} \begin{beispiel} Um die Syntax zu verstehen, betrachten wir eine durch \(a\) erzeugte Gruppe \(G = \langle a \rangle\). @@ -57,11 +57,11 @@ durch Verwendung von Potenzen \(r^n = r\circ r \circ \cdots r\circ r\) für eine Diese Definition reicht aus, um die gesamte Symmetriegruppe \[ C_n = \langle r \rangle - = \left\{\mathds{1}, r, r^2, \ldots, r^{n-1}\right\} + = \{\mathds{1}, r, r^2, \ldots, r^{n-1}\} \] der Drehungen eines \(n\)-Gons zu erzeugen. Das liegt daran, dass wir durch die mehrfache Verwendung von \(r\) jeden Winkel erzeugen k\"onnen, der die Rotationssymmetrie bewahrt. - In ähnlicher Weise, aber weniger interessant enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). + In ähnlicher Weise, aber weniger interessant, enthält die Reflexionssymmetriegruppe \(\langle\sigma\rangle\) nur \(\left\{\mathds{1}, \sigma\right\}\), weil \(\sigma^2 = \mathds{1}\). \end{beispiel} Wenn wir diese Idee nun erweitern, können wir mit einem Erzeugendensystem @@ -70,7 +70,7 @@ komplexere Strukturen aufbauen. %@Naoki Are you ok with my grammar fixes I'm not 101% shore how to use the word Erzeugendensystem? \begin{definition}[Erzeugendensystem] Jede diskrete Gruppe kann durch eines oder mehrere ihrer Elemente generiert werden. - Wir lassen \(g_1, g_2, \ldots, g_n\) erzeugenden Elemente einer Symmetriegruppe sein. + Wir lassen \(g_1, g_2, g_3, \ldots\) erzeugenden Elemente einer Symmetriegruppe sein. Da es mehrere Erzeuger gibt, müssen auch die sogenannten Definitionsgleichungen gegeben werden, die die Multiplikationstabelle vollständig definieren. Die Gleichungen sind ebenfalls in den Klammern angegeben. Die erzeugenden Elementen bauen zusammen mit den Definitionsgleichungen ein Erzeugendensystem. @@ -84,10 +84,10 @@ komplexere Strukturen aufbauen. Daraus ergibt sich die so genannte Diedergruppe \begin{align*} D_n &= \langle r, \sigma : r^n = \sigma^2 = (\sigma r)^2 = \mathds{1} \rangle \\ - &= \left\{ + &= \{ \mathds{1}, r, \ldots, r^{n-1}, \sigma, \sigma r, \ldots, \sigma r^{n-1} - \right\}. - \end{align*} \qedhere + \}. \qedhere + \end{align*} \end{beispiel} Die Symmetrieoperationen, die wir bis jetzt besprochen haben, haben immer mindestens einen Punkt gehabt, der wieder auf sich selbst abgebildet wird. @@ -115,11 +115,12 @@ Um es formaler zu beschreiben, werden wir einige Begriffe einführen. \end{beispiel} \begin{definition}[Darstellung einer Gruppe] - Die Darstellung einer Gruppe ist ein Homomorphismus, der eine Symmetriegruppe auf eine Menge von Matrizen abbildet. + Die Darstellung einer Gruppe ist ein Homomorphismus \[ - \Phi: G \to \operatorname{GL}_n(\mathbb{R}). + \Phi: G \to \operatorname{GL}_n(\mathbb{R}), \] - Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen Vektorraum \(V\) wirkt, indem man definiert \(\Phi : G \times V \to V\). + der eine Symmetriegruppe auf eine Menge von Matrizen abbildet. + Äquivalent kann man sagen, dass ein Element aus der Symmetriegruppe auf einen Vektorraum \(V\) wirkt, indem man \(\Phi : G \times V \to V\) definiert. \end{definition} \begin{beispiel} Die Elemente \(r^k \in C_n\), wobei \(0 < k < n\), stellen abstrakt eine Drehung von \(2\pi k/n\) um den Ursprung dar. -- cgit v1.2.1 From 872595e81de60c85b18408f8de5a49c535518edc Mon Sep 17 00:00:00 2001 From: Nunigan Date: Fri, 6 Aug 2021 17:37:58 +0200 Subject: update multiplikation --- buch/papers/multiplikation/code/MM.py | 46 +++---- buch/papers/multiplikation/code/c_meas_4096.pdf | Bin 17400 -> 17448 bytes buch/papers/multiplikation/code/meas/MM.txt | 4 +- buch/papers/multiplikation/code/meas/blas.txt | 2 +- buch/papers/multiplikation/code/meas/strassen.txt | 2 +- buch/papers/multiplikation/code/meas/winograd.txt | 2 +- buch/papers/multiplikation/code/meas_1024.pdf | Bin 18813 -> 18813 bytes buch/papers/multiplikation/images/bigo.pdf | Bin 27173 -> 28372 bytes buch/papers/multiplikation/images/bigo.tex | 24 ++-- buch/papers/multiplikation/images/meas_c.pdf | Bin 0 -> 23161 bytes buch/papers/multiplikation/images/meas_c.tex | 143 ++++++++++++++++++++++ buch/papers/multiplikation/images/meas_python.pdf | Bin 0 -> 21700 bytes buch/papers/multiplikation/images/meas_python.tex | 137 +++++++++++++++++++++ buch/papers/multiplikation/loesungsmethoden.tex | 44 ++++--- buch/papers/multiplikation/problemstellung.tex | 33 +++-- 15 files changed, 363 insertions(+), 74 deletions(-) create mode 100644 buch/papers/multiplikation/images/meas_c.pdf create mode 100644 buch/papers/multiplikation/images/meas_c.tex create mode 100644 buch/papers/multiplikation/images/meas_python.pdf create mode 100644 buch/papers/multiplikation/images/meas_python.tex (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index 47bd6ab..7220ae1 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -226,28 +226,28 @@ def plot_c_res(ave, num): MM_t = MM[:,0] MM_n = MM[:,1] - MM_t = np.mean(MM_t.reshape(-1,ave),axis=1) - MM_n = np.mean(MM_n.reshape(-1,ave),axis=1) + # MM_t = np.mean(MM_t.reshape(-1,ave),axis=1) + # MM_n = np.mean(MM_n.reshape(-1,ave),axis=1) MM_dc_t = MM_dc[:,0] MM_dc_n = MM_dc[:,1] - MM_dc_t = np.mean(MM_dc_t.reshape(-1,ave),axis=1) - MM_dc_n = np.mean(MM_dc_n.reshape(-1,ave),axis=1) + # MM_dc_t = np.mean(MM_dc_t.reshape(-1,ave),axis=1) + # MM_dc_n = np.mean(MM_dc_n.reshape(-1,ave),axis=1) strassen_t = strassen[:,0] strassen_n = strassen[:,1] - strassen_t = np.mean(strassen_t.reshape(-1,ave),axis=1) - strassen_n = np.mean(strassen_n.reshape(-1,ave),axis=1) + # strassen_t = np.mean(strassen_t.reshape(-1,ave),axis=1) + # strassen_n = np.mean(strassen_n.reshape(-1,ave),axis=1) winograd_t = winograd[:,0] winograd_n = winograd[:,1] - winograd_t = np.mean(winograd_t.reshape(-1,ave),axis=1) - winograd_n = np.mean(winograd_n.reshape(-1,ave),axis=1) + # winograd_t = np.mean(winograd_t.reshape(-1,ave),axis=1) + # winograd_n = np.mean(winograd_n.reshape(-1,ave),axis=1) blas_t = blas[:,0] blas_n = blas[:,1] - blas_t = np.mean(blas_t.reshape(-1,ave),axis=1) - blas_n = np.mean(blas_n.reshape(-1,ave),axis=1) + # 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,14 +261,16 @@ def plot_c_res(ave, num): plt.rc('axes', labelsize=23) plt.rc('xtick', labelsize=23) plt.rc('ytick', labelsize=23) - plt.plot(MM_n, MM_t, label='3 For Loops', lw=5) - plt.plot(winograd_n, winograd_t, label='Winograd MM', lw=5) - plt.plot(blas_n, blas_t, label='Blas', lw=5) - plt.plot(strassen_n, strassen_t, label='Strassen', lw=5) - plt.plot(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) plt.ylabel("time (s)") - plt.grid(True) + plt.grid(True, which="both", ls="-") plt.tight_layout() plt.legend(fontsize=19) plt.savefig('c_meas_' + str(num)+ '.pdf') @@ -278,15 +280,17 @@ def plot_c_res(ave, num): # plt.plot(blas_n, func(blas_n, *popt2), 'r-', label='fit MM: a=%5.5f, b=%5.10f' % tuple(popt2)) 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] + # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - # plot_c_res(1, 4096) + # A = plot_c_res(1, 4096) - # arr = plot(1024) - n = np.logspace(1,12,12,base=2,dtype=(np.int)) + arr = plot(1024) + # n = np.logspace(1,12,12,base=2,dtype=(np.int)) # n = np.arange(1,50,2) # A = np.random.randint(-10, 6, (5,3)) # B = np.random.randint(-10, 6, (3,5)) @@ -297,7 +301,7 @@ if __name__ == '__main__': # print(C_test) # print(np.equal(C, C_test)) - t_np = test_perfomance(n) + # t_np = test_perfomance(n) # C = strassen(A, B) # C_test = A@B diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf index 304015a..5236afb 100644 Binary files a/buch/papers/multiplikation/code/c_meas_4096.pdf and b/buch/papers/multiplikation/code/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt index 13b6312..e296dd7 100644 --- a/buch/papers/multiplikation/code/meas/MM.txt +++ b/buch/papers/multiplikation/code/meas/MM.txt @@ -1,5 +1,5 @@ -0.000000,2 -0.000000,4 +0.000001,2 +0.000001,4 0.000001,8 0.000010,16 0.000081,32 diff --git a/buch/papers/multiplikation/code/meas/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt index c3ec7ec..92a61b9 100644 --- a/buch/papers/multiplikation/code/meas/blas.txt +++ b/buch/papers/multiplikation/code/meas/blas.txt @@ -1,5 +1,5 @@ 0.000001,2 -0.000000,4 +0.000001,4 0.000001,8 0.000003,16 0.000022,32 diff --git a/buch/papers/multiplikation/code/meas/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt index 69ea472..fdfbf2b 100644 --- a/buch/papers/multiplikation/code/meas/strassen.txt +++ b/buch/papers/multiplikation/code/meas/strassen.txt @@ -1,4 +1,4 @@ -0.000000,2 +0.000001,2 0.000003,4 0.000010,8 0.000066,16 diff --git a/buch/papers/multiplikation/code/meas/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt index 6e6208a..d185906 100644 --- a/buch/papers/multiplikation/code/meas/winograd.txt +++ b/buch/papers/multiplikation/code/meas/winograd.txt @@ -1,4 +1,4 @@ -0.000000,2 +0.000001,2 0.000001,4 0.000002,8 0.000011,16 diff --git a/buch/papers/multiplikation/code/meas_1024.pdf b/buch/papers/multiplikation/code/meas_1024.pdf index 3312420..f489a7d 100644 Binary files a/buch/papers/multiplikation/code/meas_1024.pdf and b/buch/papers/multiplikation/code/meas_1024.pdf differ diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf index c29a891..8a53398 100644 Binary files a/buch/papers/multiplikation/images/bigo.pdf and b/buch/papers/multiplikation/images/bigo.pdf differ diff --git a/buch/papers/multiplikation/images/bigo.tex b/buch/papers/multiplikation/images/bigo.tex index a415ccb..9ee3a68 100644 --- a/buch/papers/multiplikation/images/bigo.tex +++ b/buch/papers/multiplikation/images/bigo.tex @@ -42,56 +42,56 @@ \begin{axis}[ xmode=log, ymode=log, - xmin=1e-0, xmax=5e1, + xmin=1e-0, xmax=5000, ymin=10e-1, ymax=1e7, grid=both, major grid style={black!50}, - xlabel = $n$ (Data Input), - ylabel = {$t$ (time)}, - legend pos=north east, + xlabel = data input size, + ylabel = {time}, + legend pos=north west, very thick, yticklabels=\empty, xticklabels=\empty, scale only axis=true, - width=12cm, height=6cm, + width=12cm, height=8cm, ] \addplot [ - domain= 1:50, + domain= 1:5000, samples=100, color=red, ] {1}; \addlegendentry{$\mathcal{O}(1)$} \addplot [ - domain= 1:50, + domain= 1:5000, samples=100, color=green, ] {x}; \addlegendentry{$\mathcal{O}(n)$} \addplot [ - domain= 1:50, + domain= 1:50000, samples=100, color=blue, ] {x^2}; \addlegendentry{$\mathcal{O}\left(n^2\right)$} \addplot [ - domain= 1:50, + domain= 1:500, samples=100, color=purple, ] {x^3}; \addlegendentry{$\mathcal{O}\left(n^3\right)$} \addplot [ - domain= 1:50, + domain= 1:500, samples=100, color=black, ] {exp(x) - 1.7}; \addlegendentry{$\mathcal{O}\left(e^n\right)$} \addplot [ - domain= 1:50, + domain= 1:5000, samples=100, color=orange, ] @@ -99,7 +99,7 @@ \addlegendentry{$\mathcal{O}(\log n)$} \addplot [ - domain= 1:50, + domain= 1:5000, samples=100, color=gray, ] diff --git a/buch/papers/multiplikation/images/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf new file mode 100644 index 0000000..3a4cfd8 Binary files /dev/null and b/buch/papers/multiplikation/images/meas_c.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex new file mode 100644 index 0000000..818a7e6 --- /dev/null +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -0,0 +1,143 @@ + +\documentclass[border=10pt,varwidth]{standalone} +\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{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{cite} +\usepackage{url} +\usepackage{amsmath,amsfonts,amssymb} +\usepackage{tikz} +\usepackage{pgfplotstable} +\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{tikzpicture} +\begin{axis}[ +xmode=log, ymode=log, +xmin=60, xmax=5000, +ymin=1e-4, ymax=2e3, +grid=both, +major grid style={black!50}, +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} +] +\addlegendentry{Winograd} +\addplot[ color=purple, +] 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) +(4096,1179.261048) +}; +\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) +(4096,414.648901) +}; + +\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 ) +(4096,1147.106865) +}; + +\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 ) +(4096,1111.312696) +}; +\addlegendentry{BLAS} +\addplot[ color=blue, +] 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 ) +(4096,55.845038) +}; +\end{axis} +\end{tikzpicture} + +\end{document} diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf new file mode 100644 index 0000000..cea2232 Binary files /dev/null and b/buch/papers/multiplikation/images/meas_python.pdf differ diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex new file mode 100644 index 0000000..ee4db43 --- /dev/null +++ b/buch/papers/multiplikation/images/meas_python.tex @@ -0,0 +1,137 @@ + +\documentclass[border=10pt,varwidth]{standalone} +\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{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{cite} +\usepackage{url} +\usepackage{amsmath,amsfonts,amssymb} +\usepackage{tikz} +\usepackage{pgfplotstable} +\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{tikzpicture} +\begin{axis}[ +xmode=log, ymode=log, +xmin=30, xmax=1050, +ymin=0.01, ymax=900, +grid=both, +major grid style={black!50}, +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} +] +\addlegendentry{Winograd} +\addplot[ color=purple, +] coordinates { +% (2, 2.7895e-05 ) +% (4, 0.000104904) +% (8, 0.000552893) +% (16, 0.0045557 ) +(32, 0.0187144 ) +(64, 0.153069 ) +(128, 1.19476 ) +(256, 8.29899 ) +(512, 68.3699 ) +(1024,537.374 ) + +}; +\addlegendentry{Strassen} +\addplot [ color=black, +]coordinates { + % (2,2.09808e-05 ) + % (4,0.000174284 ) + % (8,0.000943899 ) + % (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 ) +}; + +\addlegendentry{MM div and conq} +\addplot[ color=green, +] coordinates { + % (2,8.10623e-06 ) + % (4,9.01222e-05 ) + % (8,0.000729084 ) + % (16,0.00497079 ) + (32,0.02719 ) + (64,0.26528 ) + (128,1.77787 ) + (256,13.27 ) + (512,105.397 ) +(1024,847.321 ) +}; + +\addlegendentry{MM} +\addplot [ color=red, +]coordinates { + % (2,1.85966e-05) + % (4,8.29697e-05 ) + % (8,0.000547171) + % (16,0.00305367 ) + (32, 0.0240743 ) + (64, 0.186895 ) + (128, 1.56369 ) + (256, 11.0062 ) + (512, 85.4768) +(1024,750.757 ) +}; +% \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 ) +% }; +\end{axis} +\end{tikzpicture} + +\end{document} + + + diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 43181d4..a7612e1 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -15,7 +15,7 @@ Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen w Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. 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{Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Matrizenmultiplikation} \label{multiplikation:alg:smm} \setlength{\lineskip}{7pt} \begin{algorithmic}[1] @@ -50,7 +50,7 @@ Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die 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 produklt +Das Matrizen Produkt \begin{equation} \mathbf{A}\mathbf{B}= \begin{bmatrix} @@ -76,7 +76,7 @@ ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplik 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. 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 Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Divide and Conquer Matrizenmultiplikation} \setlength{\lineskip}{7pt} \label{multiplikation:alg:devide_mm} \begin{algorithmic} @@ -105,7 +105,7 @@ Der rekursive Aufruf wird bis zu der Gr\"osse der Matrizen von $N = 2 \times 2$ \end{algorithmic} \end{algorithm} -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 Algortihmen. +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 \begin{equation} \label{multiplikation:eq:laufzeitdac} @@ -141,7 +141,7 @@ aus $\mathbf{A}$ und $\mathbf{B}$, werden f\"ur die Berechnung der Bl\"ocke \end{split} \end{equation} der Matrix $\mathbf{C}$ gebraucht. -\begin{algorithm}\footnotesize\caption{Strassen Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Strassen Matrizenmultiplikation} \label{multiplikation:alg:strassen} \setlength{\lineskip}{7pt} \begin{algorithmic} @@ -186,7 +186,7 @@ der Matrix $\mathbf{C}$ gebraucht. \EndFunction \end{algorithmic} \end{algorithm} -Strassen's Methode wird in der Abbildung \ref{multiplikation:fig:strassen} grafisch dargestellt. +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}$. @@ -194,7 +194,7 @@ Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/strassen.pdf} - \caption{Strassen's Algorithmus} + \caption{Strassens Algorithmus} \label{multiplikation:fig:strassen} \end{figure} @@ -207,7 +207,7 @@ Dies f\"uhrt nach dem \textit{Master Theorem} zu einer Laufzeit von 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. -\subsection{Winograd's Algorithmus} +\subsection{Winograds Algorithmus} Einen weiteren Ansatz lieferte Shmuel Winograd im Jahre 1968 \cite{multiplikation:winograd_1968}. Er beschrieb einen neuen Algorithmus f\"ur das Skalarprodukt @@ -232,9 +232,10 @@ Das Skalarprodukt ist nun geben mit \displaystyle \quad \sum_{j=1}^{ \lfloor n/2 \rfloor} (x_{2j-1} + y_{2j})(x_{2j}+y_{2j-1})-\xi - \eta + x_n y_n & \text{wenn $n$ ungerade}. \end{cases} \end{equation} -Das Skalarprodukt kann also mit $ \lfloor \frac{n+1}{2} \rfloor$ weiteren Multiplikationen brechnet werden. +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. 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} @@ -254,15 +255,20 @@ Dies f\"uhrt zu 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 glichen Ansatz wie in der Gleichung \ref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss +Mit dem gleichen Ansatz wie in der Gleichung \ref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss \begin{equation} - N=2n \ll T=n^2 + \begin{split} +N=2n, \quad T = n^2 \\ + 2n \leq n^2 \\ + 2 \leq n +\end{split} \end{equation} -damit man etwas einspart. +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. Im Abschnitt \ref{muliplikation:sec:bigo} wurde bereits erläutert: falls $n \rightarrow \infty$ können Konstanten vernachlässigt werden und +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)$. -\begin{algorithm}\footnotesize\caption{Winograd Matrix Multiplication} +\begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation} \setlength{\lineskip}{7pt} \label{multiplikation:alg:winograd} \begin{algorithmic} @@ -374,8 +380,8 @@ Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementi \begin{itemize} \item Standard Matrizenmultiplikation \item \textit{Devide and Conquer} Matrizenmultiplikation - \item Strassen's Matrizenmultiplikation - \item Winograd's Matrizenmultiplikation + \item Strassens Matrizenmultiplikation + \item Winograds Matrizenmultiplikation \item \texttt{BLAS} Matrizenmultiplikation in \texttt{C} \item \texttt{Numpy} Matrizenmultiplikation in \texttt{Python} \end{itemize} @@ -458,7 +464,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{figure} \center - \includegraphics[width=\linewidth]{papers/multiplikation/images/c_meas_4096} + \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_c} \caption{Messresultate mit der Programmiersprache \texttt{C}} \label{multiplikation:fig:c_meas_4096} \end{figure} @@ -466,7 +472,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{figure} \center - \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_1024} + \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_python} \caption{Messresultate mit der Programmiersprache \texttt{Python}} \label{multiplikation:fig:python} \end{figure} @@ -474,7 +480,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \section{Fazit} \rhead{Fazit} -Wie man im Abschnit \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 den 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. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index c6fd10e..e53b0de 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -7,13 +7,14 @@ \rhead{Problemstellung} Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. Das Ziel dieses Papers ist, verschiedenen Algorithmen der Matrizenmultiplikation vorzustellen. -Gezielt wird auf Algorithmen eingegange, welche das Problem schneller als der Standard Algorithmus l\"osen. +Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der Standard Algorithmus l\"osen. \subsection{Big $\mathcal{O}$ Notation} \label{muliplikation:sec:bigo} -Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhänigkeit zur Inputgrösse \cite{multiplikation: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$. -Als Beispiel: benötigt eine Funktion $g$, $\mathcal{O}\left(n+n^2 \right)$ Multiplikationen so wächst $f$ mit $\mathcal{O}\left(n^2 \right)$ nicht wesentlich schneller als $g$. +% 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: \begin{itemize} \item $f \in \mathcal{O}(1) \rightarrow f$ ist beschr\"ankt @@ -26,13 +27,9 @@ Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: \end{itemize} 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. -\begin{figure} - \center - \includegraphics[]{papers/multiplikation/images/bigo} - \caption{Verschiedene Laufzeiten} - \label{multiplikation:fig:bigo} -\end{figure} \subsubsection{Beispiel Algorithmen} @@ -101,23 +98,25 @@ Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomple \paragraph{Beschr\"ankter Algorithmus} -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. - - +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)$. - - \paragraph{Linearer Algorithmus} Der Algorithmus \ref{multiplikation:alg:linear} hat ein lineares Verhalten. Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}(n)$. - - \paragraph{Quadratischer Algorithmus} Der Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten. -Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchglaufen 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}\left(n^2\right)$. + + +\begin{figure} + \center + \includegraphics[]{papers/multiplikation/images/bigo} + \caption{Verschiedene Laufzeiten} + \label{multiplikation:fig:bigo} +\end{figure} -- cgit v1.2.1 From f93391f38bb4fcc1aaad4a22fa23fca78375cf82 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Sat, 7 Aug 2021 11:19:04 +0200 Subject: save --- buch/papers/reedsolomon/idee.tex | 96 +++++++++++++++---------- buch/papers/reedsolomon/tikz/tikz/codiert.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/decodiert.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/empfangen.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/fehler.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/locator.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/signal.txt | 96 +++++++++++++++++++++++++ buch/papers/reedsolomon/tikz/tikz/syndrom.txt | 96 +++++++++++++++++++++++++ 8 files changed, 729 insertions(+), 39 deletions(-) create mode 100644 buch/papers/reedsolomon/tikz/tikz/codiert.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/decodiert.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/empfangen.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/fehler.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/locator.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/signal.txt create mode 100644 buch/papers/reedsolomon/tikz/tikz/syndrom.txt (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 7620df1..c071b5e 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -5,60 +5,78 @@ \label{reedsolomon:section:idee}} \rhead{Problemstellung} Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden, -und so jeweilige Fehler zu erkennen. + also immer zwei gleich Werte miteinander und so jeweilige einen Fehler zu erkennen. +Wenn jedoch mehr als nur ein Fehler erkennt 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. -Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. Das Problem liegt darin Informationen, Zahlen, -zu Übertragen und Fehler zu erkennen. + zu Übertragen und Fehler zu erkennen. Speziell beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, -man kann sogar einige Fehler korrigieren. + man kann sogar einige Fehler korrigieren. Der Unterschied des Fehler erkennen und korrigiren, 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 den original Wert rekonstruieren. -Auch eine Variante wäre die Daten nach einer Fehlerhaften sendung, nochmals zum senden auffordern(auch hier wird doppelt und dreifach gesendung), -was bei Reed-Solomon-Code-Anwendungen nicht immer sinnvoll ist. +Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. Anwendungen finden sind im Abschnitt \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} beschrieben. \subsection{Polynom-Ansatz \label{reedsolomon:section:polynomansatz}} \rhead{Polynom-Ansatz} -Eine Idee ist, aus den Daten ein Polynom zu bilden. -Diese Polynomfunktion bei bestimmten Werten errechnet und diese Punkte dann überträgt. -\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, -welche uns dann das Polynom +Eine Idee ist, aus den Daten ein Polynom zu bilden. +In deieser Art arbeitet der Reed-Solomon-Code. +Von dieser Polynomfunktion wird dann eine Anzahl Werte übertragen. +\begin{beispiel} Nehmen wir zum Beispiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, + welche uns dann das Polynom \begin{equation} p(x) = \textcolor{blue}{2}x^2 + \textcolor{blue}{1}x + \textcolor{blue}{5} \label{reedsolomon:equation1} \end{equation} -ergeben. +ergibt. +\par +Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. +Bei einer fehlerlosen Übertragung, können wir mit 3 übertragene Werte, + das Polynom durch Polynominterpolation volständig rekonstruieren. +Weder erkläre noch erläutere ich die Polynominterpolation, + sie kann nachgeschaut werden oder als Funktion angewendet werden. +Die koeffizente, des rekonstruierten Polynoms, sind dann unsere gesendten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. +Wie können wir nun Fehler erkennen oder sogar korrigieren? +Versuchen wir doch mehr Werte zu Übertragen, wir nehmen im 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 dieses Polynomes. + dieses 7 Werte \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 dieses Polynomes. Grafisch sieht man dies dann in Abbildung \ref{fig:polynom}, -mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, -\textcolor{darkgreen}{15}, \textcolor{darkgreen}{26}, -\textcolor{darkgreen}{41}, \textcolor{darkgreen}{60}, -\textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ -Wenn ein Fehler sich in die Übertragung eingeschlichen hat, muss der Leser/Empfänger diesen erkennen und das Polynom rekonstruieren. -Der Leser/Empfänger weiss, den Grad des Polynoms und dessen \textcolor{darkgreen}{Werte} übermittelt wurden. -Die Farbe blau brauchen wir für die \textcolor{blue}{Daten} welche wir mit der Farbe grün \textcolor{darkgreen}{Übermitteln}. -\end{beispiel} - -\begin{beispiel} -Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. -Hat es Fehler in der Übertragunge gegeben,in der Abbilbung \ref{fig:polynom} die \textcolor{red}{roten Punkte}). -Erkennt man diese Fehler, da alle korrekten Punkte auf der Parabel liegen müssen. -Die \textcolor{darkgreen}{grünen Punkte} bestimmen die Parabel, und die Fehler können zu den -\textcolor{gray}{Orginalpunkte} rekonstruiert werden. -Ab wie vielen Fehler ist das Polynom nicht mehr erkennbar beim Übertragen von 7 Punkten? -Bei 2 Fehlern kann man noch eindeutig bestimmen, dass das Polynom mit 4 Punkten, -gegenüber dem mit 5 Punkten falsch liegt. \ref{fig:polynom} -Werden es mehr Fehler kann nur erkannt werden, dass das Polynom nicht stimmt. -Das orginale Polynom kann aber nicht mehr gefunden werden. -Da andere Polynome oder das Konkurrenzpolynom, grau gestrichelt in Abbildung \ref{fig:polynom}, das orginal fehlleitet. -Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Übertragungspunkte} nötig. -\end{beispiel} + mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, + \textcolor{darkgreen}{15}, \textcolor{darkgreen}{26}, + \textcolor{darkgreen}{41}, \textcolor{darkgreen}{60}, + \textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ +Nun wird durch drei der 7 Punkte das Polynom eindeutig bestimmbar und + alle anderen müssen auf diesem Polynom liegen. +Dabei gingen wir von keinem Fehler aus, + hat es Fehler in der Übertragunge gegeben. +Wir erhöhen nun die Fehleranzahl Schritt für Schritt: +\begin{enumerate} + \item \textit{Fehler} können konkurenzierende Polynome, zusammen mit zwei originalen Punkten fehlleiten. + Dabei kann aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein, + ansonsten ist der Fehler ein Orginalpunkt und somit kein Fehler. + Da 6 übereinstimende grössser als 3 ist haben wir unser original Polynom gefunden. + \par Orginal mit 6 Punkte > 3 Punkte Konkurrenzpolynom, Original Polynom gefunden + Damit ist klar das unser Polynom mit 6 Punkten richtig ist und unser Fehler kann rekonstruiert werden. + \item \textit{Fehler} kann ein Fehler mit zwei originalen Punkten ein fehlleitendes Konkurrenzpolynom bilden. + Da der zweite Fehler frei wählbar ist kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. + Nun haben wir, wie in unserer Grafik \ref{fig:polynom}, ein Polynom mit 5 übereinstimmenden und eines mit 4 Punkten. + Da 5 noch grösser als 4 ist, können wir sagen welches das original Polynom ist. + \par Orginal mit 5 Punkte > 4 Punkte Konkurrenzpolynom, Original Polynom gefunden + \item \textit{Fehler} kann genau wie bei 2 Fehler, ein Fehler ein fehlleitendes Polynom mit 2 original Punkten bestimmen 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 Original Polynom kann nicht mehr gefunden werden. + \par Orginal mit 5 Punkte > 4 Punkte Konkurrenzpolynom, Original Polynom nicht gefunden + \item \textit{Fehler} Es kann noch erkennt weden das 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{Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und + somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. +\end{enumerate} \begin{figure}%[!ht] \centering @@ -71,13 +89,13 @@ Um das Konkurrenzpolynom auszuschliessen, währen mehr \textcolor{darkgreen}{Üb \section{Fehlerkorekturstellen 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}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. + muss man zuerst wissen, wieviel \textcolor{blue}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. Die Anzahl \textcolor{blue}{Daten} (ab hier verwenden wir das Wort Nutzlast), die als Polynomkoeffizente $k$ übergeben werden, -brauchen die gleiche Anzahl an Polynomkoeffizententräger, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. + brauchen die gleiche Anzahl an Polynomkoeffizententräger, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. Für die Anzahl der Fehler $t$, welche korrigiert werden können, gehen wir zum Beispiel. \begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir \textcolor{darkgreen}{7 Übertragungspunkte} senden. Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurrenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurrenzpolynom, -maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurrenzpolynom ist das gleiche wie das Original. + maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurrenzpolynom ist das gleiche wie das Original. Somit können wir nun bestimmen, dass von den \textcolor{darkgreen}{7 Übertragungspunkten$u$} bis zu 2 Fehler korrigiert werden können und 4 Übertragungspunkte zusätzlich gesendet werden müssen. \end{beispiel} Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, doch mit dieser Gleichung @@ -86,7 +104,7 @@ Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, =2 \label{reedsolomon:equation2} \end{equation} -zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. + zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. \begin{table} \centering diff --git a/buch/papers/reedsolomon/tikz/tikz/codiert.txt b/buch/papers/reedsolomon/tikz/tikz/codiert.txt new file mode 100644 index 0000000..4a481d8 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/codiert.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,24.0186013379153 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,4.84567134895776 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,43.6179140616243 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/tikz/tikz/decodiert.txt b/buch/papers/reedsolomon/tikz/tikz/decodiert.txt new file mode 100644 index 0000000..f6221e6 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/decodiert.txt @@ -0,0 +1,96 @@ +0,6.05208333333333 +1,6.02602539785853 +2,0.0261327016093151 +3,5.98927158561317 +4,4.019445724874 +5,0.0247005083663722 +6,4.97798278395618 +7,1.95246440445439 +8,0.974000110512201 +9,2.00528527696027 +10,1.00071804528155 +11,1.97630907888264 +12,0.0232923747656228 +13,6.01302820392331 +14,3.03567381915226 +15,5.02435590137329 +16,7.00526061008995 +17,5.00739608089369 +18,5.02211514480064 +19,4.02175864806658 +20,1.00236543833726 +21,4.98147315261261 +22,8.97728828610336 +23,8.98481304394618 +24,2.98958333333333 +25,1.98491220960989 +26,5.97728835934715 +27,5.98144124907561 +28,4.00163839998525 +29,2.02176249296313 +30,9.02210713874162 +31,1.00742763919872 +32,1.00557258081044 +33,1.02435888848794 +34,2.03577412756745 +35,6.01302820392331 +36,5.97917574041123 +37,0.976310374034338 +38,9.00062625447998 +39,7.00515849238528 +40,6.97396416790894 +41,0.95256880864368 +42,8.97794719866783 +43,9.01850701506487 +44,10.0194409579917 +45,8.98926601525997 +46,7.9866590265379 +47,5.02603060999077 +48,2.05208333333333 +49,4.02603841132848 +50,0.986882897867895 +51,0.0177592928994285 +52,9.01944131204563 +53,3.0185365665612 +54,2.97803642439316 +55,2.95243072164649 +56,4.97396651395488 +57,6.00516695947321 +58,0.0143895905726619 +59,7.97630812771393 +60,5.97917574041123 +61,9.01298821331865 +62,3.03567381915226 +63,4.02435609145793 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 diff --git a/buch/papers/reedsolomon/tikz/tikz/empfangen.txt b/buch/papers/reedsolomon/tikz/tikz/empfangen.txt new file mode 100644 index 0000000..38c13b0 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/empfangen.txt @@ -0,0 +1,96 @@ +0,284 +1,131.570790435043 +2,41.9840308053375 +3,12.1189172092243 +4,23.8408857476069 +5,69.1793197789512 +6,23.6290258699579 +7,37.3066577242559 +8,18.2010889773887 +9,12.3214904922455 +10,15.6627133315015 +11,24.5237955316204 +12,32.1114345314062 +13,44.9845039238714 +14,13.5324640263625 +15,10.1736266929292 +16,4.58257569495584 +17,23.217268502288 +18,16.5769107917917 +19,6.89948680823017 +20,5.55320238736303 +21,10.4219666223433 +22,43.6179140616243 +23,35.9073375743642 +24,15.0332963783729 +25,21.7594021268945 +26,23.2496572716993 +27,17.9815599423852 +28,11.3577742151117 +29,38.467599433197 +30,28.3035029562577 +31,9.54321919833388 +32,21.377558326432 +33,17.6292439561917 +34,12.6951848921471 +35,20.0667752354841 +36,22.9097309529208 +37,8.78894645948548 +38,13.360682005498 +39,25.1757616314718 +40,38.0357773686457 +41,18.4633287776253 +42,19.0584505869806 +43,10.8631093309173 +44,12.6147770818983 +45,12.5398140021274 +46,34.901983501949 +47,22.3480442021702 +48,6 +49,22.3480442021702 +50,34.901983501949 +51,12.5398140021274 +52,12.6147770818983 +53,10.8631093309173 +54,19.0584505869806 +55,18.4633287776253 +56,38.0357773686457 +57,25.1757616314718 +58,13.360682005498 +59,8.78894645948548 +60,22.9097309529208 +61,20.0667752354841 +62,12.6951848921471 +63,17.6292439561917 +64,21.377558326432 +65,9.54321919833388 +66,28.3035029562577 +67,38.467599433197 +68,11.3577742151117 +69,17.9815599423852 +70,23.2496572716993 +71,21.7594021268945 +72,15.0332963783729 +73,35.9073375743642 +74,44.6135417384784 +75,10.4219666223433 +76,4.84567134895776 +77,6.89948680823017 +78,16.5769107917917 +79,23.217268502288 +80,4.58257569495584 +81,10.1736266929292 +82,13.5324640263625 +83,44.9845039238714 +84,32.1114345314062 +85,24.5237955316204 +86,15.6627133315015 +87,12.3214904922455 +88,18.2010889773887 +89,37.3066577242559 +90,24.0186013379153 +91,69.1793197789512 +92,23.8408857476069 +93,12.1189172092243 +94,41.9840308053375 +95,131.570790435043 diff --git a/buch/papers/reedsolomon/tikz/tikz/fehler.txt b/buch/papers/reedsolomon/tikz/tikz/fehler.txt new file mode 100644 index 0000000..23f1a83 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/fehler.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,2 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,2 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,1 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/tikz/tikz/locator.txt b/buch/papers/reedsolomon/tikz/tikz/locator.txt new file mode 100644 index 0000000..b28988c --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/locator.txt @@ -0,0 +1,96 @@ +0,0.0301224340567056 +1,0.141653026854885 +2,0.138226631799377 +3,0.0339903276086929 +4,0.310585462557496 +5,0.551427312631385 +6,0.628514858396814 +7,0.51102386251559 +8,0.275861355940449 +9,0.0502396354182268 +10,0.090185502547573 +11,0.110759344849756 +12,0.0684618905063001 +13,0.0362855426992259 +14,0.0697096919781468 +15,0.109288539370248 +16,0.0923187999496653 +17,0.0512198536768088 +18,0.274192386987782 +19,0.51349614953654 +20,0.633154426602466 +21,0.553283743533942 +22,0.307840573214514 +23,0.0341664350328392 +24,0.140270857957 +25,0.138527177682831 +26,0.029637547736156 +27,0.0816962563186052 +28,0.0944383203811073 +29,0.0263932110686261 +30,0.0585881348402056 +31,0.0737117341599984 +32,0.0239973937701886 +33,0.0464215468420038 +34,0.0616218854220964 +35,0.0221963086695009 +36,0.0390764778127646 +37,0.0537637218396934 +38,0.0208333333333332 +39,0.0343107696069045 +40,0.0483441215964552 +41,0.0198077862118806 +42,0.0311207395968725 +43,0.0444955089373458 +44,0.0190533549944159 +45,0.0290049795038723 +46,0.0417536642697558 +47,0.0185261550443084 +48,0.0277059929762261 +49,0.0398606084144816 +50,0.0181978813094817 +51,0.0271098219177584 +52,0.0386836665079729 +53,0.0180518611046889 +54,0.0272138992557141 +55,0.0381891287148314 +56,0.0180809085252469 +57,0.0281418959420061 +58,0.0384596362516637 +59,0.0182864418432272 +60,0.0302250788423173 +61,0.0397874837986351 +62,0.0186786556701694 +63,0.0342489348284216 +64,0.0429932815348666 +65,0.0192777878591759 +66,0.0422808966931999 +67,0.0506815964680563 +68,0.0201167847752226 +69,0.0615048274405271 +70,0.0744953894508454 +71,0.021246054596492 +72,0.142602265816215 +73,0.273502052865436 +74,0.325309673287599 +75,0.272705389655349 +76,0.149074257381345 +77,0.0247199397628712 +78,0.0680137859566976 +79,0.075388270873485 +80,0.0273637831604903 +81,0.0407867704453274 +82,0.0632964886441949 +83,0.0309749128751093 +84,0.0315202035072035 +85,0.0627625211892184 +86,0.0360843918243497 +87,0.02794920551495 +88,0.0677921493367236 +89,0.0437167157553067 +90,0.0270640150996317 +91,0.0783380025231622 +92,0.0561293738314281 +93,0.0278742033265809 +94,0.0981443889498639 +95,0.0794543457386548 diff --git a/buch/papers/reedsolomon/tikz/tikz/signal.txt b/buch/papers/reedsolomon/tikz/tikz/signal.txt new file mode 100644 index 0000000..c4fa5f8 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/signal.txt @@ -0,0 +1,96 @@ +0,6 +1,6 +2,0 +3,6 +4,4 +5,0 +6,5 +7,2 +8,1 +9,2 +10,1 +11,2 +12,0 +13,6 +14,3 +15,5 +16,7 +17,5 +18,5 +19,4 +20,1 +21,5 +22,9 +23,9 +24,3 +25,2 +26,6 +27,6 +28,4 +29,2 +30,9 +31,1 +32,1 +33,1 +34,2 +35,6 +36,6 +37,1 +38,9 +39,7 +40,7 +41,1 +42,9 +43,9 +44,10 +45,9 +46,8 +47,5 +48,2 +49,4 +50,1 +51,0 +52,9 +53,3 +54,3 +55,3 +56,5 +57,6 +58,0 +59,8 +60,6 +61,9 +62,3 +63,4 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 diff --git a/buch/papers/reedsolomon/tikz/tikz/syndrom.txt b/buch/papers/reedsolomon/tikz/tikz/syndrom.txt new file mode 100644 index 0000000..8ca9eed --- /dev/null +++ b/buch/papers/reedsolomon/tikz/tikz/syndrom.txt @@ -0,0 +1,96 @@ +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0.0275599094902563 +65,0.0115837187254191 +66,0.025877761014238 +67,0.0224618032819697 +68,0.04410594689944 +69,0.0474504002669341 +70,0.0227694695500626 +71,0.0271436638090525 +72,0.0104166666666667 +73,0.0271436638090523 +74,0.0227694695500608 +75,0.0474504002669343 +76,0.0441059468994397 +77,0.0224618032819701 +78,0.0258777610142379 +79,0.0115837187254183 +80,0.027559909490256 +81,0.0245124379481793 +82,0.0499782237195209 +83,0.0401432022864265 +84,0.0232923747656228 +85,0.0237974288564099 +86,0.0143895905726624 +87,0.0271745729691685 +88,0.0275599094902567 +89,0.0515501672184983 +90,0.0358255004834542 +91,0.024700508366373 +92,0.0210194725405171 +93,0.0177592928994296 +94,0.0261327016093158 +95,0.0314909067039411 -- cgit v1.2.1 From 14c4c9bde57c1cd89510719439bdd31374ddc280 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Sat, 7 Aug 2021 14:11:14 +0200 Subject: save --- buch/papers/reedsolomon/dtf.tex | 2 +- buch/papers/reedsolomon/einleitung.tex | 4 +- buch/papers/reedsolomon/idee.tex | 116 ++++++++++------------ buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1830948 -> 1835588 bytes 4 files changed, 55 insertions(+), 67 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index a975da8..179d90d 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -28,7 +28,7 @@ Der Auftrag ist nun 64 Daten zu übertragen, 32 Fehler erkennen und 16 Fehler re 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. -\par + \begin{figure} \centering \resizebox{\textwidth}{!}{ diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index 074df05..ca4f398 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -6,8 +6,8 @@ \section{Einleitung \label{reedsolomon:section:einleitung}} \rhead{Einleitung} -Der Reed-Solomon-Code ist entstanden um, -das Problem der Fehler bei der Datenübertragung, zu lösen. +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. diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index c071b5e..3061498 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -4,79 +4,69 @@ \section{Idee \label{reedsolomon:section:idee}} \rhead{Problemstellung} -Um beim Datenübertragen Fehler zu erkennen, könnte man die Daten jeweils doppelt senden, - also immer zwei gleich Werte miteinander und so jeweilige einen Fehler zu erkennen. +Um Fehler in einer Datenübertragung zu erkennen, könnte man die Daten jeweils doppelt senden, + also immer zwei gleich Werte miteinander und so jeweilige einzelne Fehler erkennen. Wenn jedoch mehr als nur ein Fehler erkennt 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. -Speziell beim Reed-Solomon-Code kann man nicht nur Fehler erkennen, - man kann sogar einige Fehler korrigieren. + zu Übertragen und Fehler zu erkennen und zu korrigieren. Der Unterschied des Fehler erkennen und korrigiren, 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 den original Wert rekonstruieren. -Der Reed-Solomon-Code macht dies auf eine andere, clevere Weise. -Anwendungen finden sind im Abschnitt \externaldocument{papers/reedsolomon/anwendungen} -\ref{reedsolomon:section:anwendung} beschrieben. +Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals auffordert. +Dies führt wieder zu unerwünschten mehrfach Übertragung. +In Anwendungen des Reed-Soöomon-Code \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} +ist dies 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 Idee ist, aus den Daten ein Polynom zu bilden. -In deieser Art arbeitet der Reed-Solomon-Code. +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 zum Beispiel die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}, - welche uns dann das Polynom +\begin{beispiel} Nehmen wir die Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \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} \label{reedsolomon:equation1} -\end{equation} -ergibt. +\end{equation}. \par Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. Bei einer fehlerlosen Übertragung, können wir mit 3 übertragene Werte, das Polynom durch Polynominterpolation volständig rekonstruieren. -Weder erkläre noch erläutere ich die Polynominterpolation, - sie kann nachgeschaut werden oder als Funktion angewendet werden. +Weder erkläre noch erläutere ich die Polynominterpolation, + wir brauchen sie als Funktion, die von Punktn ein Polynom errechnet. Die koeffizente, des rekonstruierten Polynoms, sind dann unsere gesendten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. Wie können wir nun Fehler erkennen oder sogar korrigieren? Versuchen wir doch mehr Werte zu Übertragen, wir nehmen im Beispiel 7 Werte. Übertragen werden nun die \textcolor{darkgreen}{grünen Werte} - dieses 7 Werte \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 dieses Polynomes. -Grafisch sieht man dies dann in Abbildung \ref{fig:polynom}, - mit den Punkten, $p(1),p(2),...,p(7) = (\textcolor{darkgreen}{8}, - \textcolor{darkgreen}{15}, \textcolor{darkgreen}{26}, - \textcolor{darkgreen}{41}, \textcolor{darkgreen}{60}, - \textcolor{darkgreen}{83}, \textcolor{darkgreen}{110})$ -Nun wird durch drei der 7 Punkte das Polynom eindeutig bestimmbar und - alle anderen müssen auf diesem Polynom liegen. -Dabei gingen wir von keinem Fehler aus, - hat es Fehler in der Übertragunge gegeben. + dieses 7 Werte \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}{übertragene Werte} des Polynoms sind grün. +Die grünen Punkte bestimmen die Parabel. +Damit können die Fehler erkannt werden, weil die empfangenen Punktenicht auf der Parabel liegen. +Somit könnendie grauen Punkte auf der Parabel ersetzt werden und sind damit korrigiert. +bis zu wivielen Fehler können wir nun korrigieren im Beispiel korrigieren? Wir erhöhen nun die Fehleranzahl Schritt für Schritt: -\begin{enumerate} - \item \textit{Fehler} können konkurenzierende Polynome, zusammen mit zwei originalen Punkten fehlleiten. - Dabei kann aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein, - ansonsten ist der Fehler ein Orginalpunkt und somit kein Fehler. +\begin{itemize} + \item Bei \textit{1 Fehler} können konkurenzierende Polynome, zusammen mit zwei originalen Punkten fehlleiten. + Dabei kann aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. Da 6 übereinstimende grössser als 3 ist haben wir unser original Polynom gefunden. - \par Orginal mit 6 Punkte > 3 Punkte Konkurrenzpolynom, Original Polynom gefunden - Damit ist klar das unser Polynom mit 6 Punkten richtig ist und unser Fehler kann rekonstruiert werden. - \item \textit{Fehler} kann ein Fehler mit zwei originalen Punkten ein fehlleitendes Konkurrenzpolynom bilden. - Da der zweite Fehler frei wählbar ist kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, wie in unserer Grafik \ref{fig:polynom}, ein Polynom mit 5 übereinstimmenden und eines mit 4 Punkten. - Da 5 noch grösser als 4 ist, können wir sagen welches das original Polynom ist. - \par Orginal mit 5 Punkte > 4 Punkte Konkurrenzpolynom, Original Polynom gefunden - \item \textit{Fehler} kann genau wie bei 2 Fehler, ein Fehler ein fehlleitendes Polynom mit 2 original Punkten bestimmen werden. + \item Bei \textit{2 Fehler} kann ein Fehler mit zwei originalen Punkten ein fehlleitendes Konkurrenzpolynom bilden. + Da der zweite Fehler frei wählbar ist, kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. + Nun haben wir, ein originles Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + Da 5 noch grösser als 4 ist, können wir sagen, welches das original Polynom ist. + \item Bei \textit{3 Fehler} kann genau wie bei 2 Fehler, ein Fehler ein fehlleitendes Polynom mit 2 original Punkten bestimmen 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 Original Polynom kann nicht mehr gefunden werden. - \par Orginal mit 5 Punkte > 4 Punkte Konkurrenzpolynom, Original Polynom nicht gefunden - \item \textit{Fehler} Es kann noch erkennt weden das Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. + \item Bei \textit{4 Fehler} Es kann noch erkennt weden das 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{Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und + \item Bei \textit{5 Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. -\end{enumerate} +\end{itemize} \begin{figure}%[!ht] \centering @@ -85,27 +75,16 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} - -\section{Fehlerkorekturstellen 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}{Daten} gesendet und wieviel \textcolor{red}{Fehler} erkennt werden sollen. -Die Anzahl \textcolor{blue}{Daten} (ab hier verwenden wir das Wort Nutzlast), die als Polynomkoeffizente $k$ übergeben werden, - brauchen die gleiche Anzahl an Polynomkoeffizententräger, beginnend bei Grad 0 somit ergibt sich der Polynomgrad mit $k-1$. -Für die Anzahl der Fehler $t$, welche korrigiert werden können, gehen wir zum Beispiel. -\begin{beispiel} von den Polynom \ref{reedsolomon:equation1} in, welchem wir \textcolor{darkgreen}{7 Übertragungspunkte} senden. -Durch 3 Punkte wird das Polyom eindeutig bestimmt, nun haben wir mehrere Konkurrenzpolynome, doch mit maximal 2 Fehler liegen auf einem Konkurrenzpolynom, - maximal 4 Punkte und auf unserem orginal 5 Punkte. Ansonsten hatt es mehr Fehler oder unser Konkurrenzpolynom ist das gleiche wie das Original. -Somit können wir nun bestimmen, dass von den \textcolor{darkgreen}{7 Übertragungspunkten$u$} bis zu 2 Fehler korrigiert werden können und 4 Übertragungspunkte zusätzlich gesendet werden müssen. \end{beispiel} -Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, doch mit dieser Gleichung -\begin{equation} - \frac{\textcolor{darkgreen}{u}-\textcolor{blue}{k}}{\textcolor{red}{t}} - =2 - \label{reedsolomon:equation2} -\end{equation} - zeigt sich, dass es $k+2t$ Übertragungspunkte braucht. +\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 \textcolor{blue}{Datenwerte}, ergeben die anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. +Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, brauchen redundanz. +Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, + erkennt man almählich ein Muster. \begin{table} \centering \begin{tabular}{ c c | c} @@ -122,8 +101,17 @@ Man könnte auch dies in der Tabelle \ref{tab:fehlerkorrekturstellen} erkennen, \caption{ Fehlerkorrekturstellen Bestimmung.} \label{tab:fehlerkorrekturstellen} \end{table} +Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem Konkurenzierenden. +Somit braucht man für die Übertragung pro Fehler 2 übertragungspunkte mehr. +Wie in der Tabelle ergibt sich diese Übertragungsanzahl +\begin{equation} + \textcolor{darkgreen}{u}= + \textcolor{blue}{k}2\textcolor{red}{t} + \label{reedsolomon:equation2} +\end{equation}. -Ein Nebeneffekt ist, dass dadurch auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. -Um aus den übertragenen Zahlen wieder die Nutzlastzahlen zu bekommen könnte man eine Polynominterpolation anwenden, -doch die Punkte mit Polynominterpolation zu einem Polynom zu rekonstruieren ist schwierig und fehleranfällig. +Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. +Nun haben wir für jede rekonstruktion des Polynoms, die Polynominterpolation gebraucht. +Diese Polynoiminterpolation ist leider schwierig und fehleranfällig. +Deshalb finden wir eine alternative im nächsten Abschnitt. diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index 2666d1e..dc34b2d 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ -- cgit v1.2.1 From 00406f140fd8a0680ef9d03a88ec032134e13566 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Sat, 7 Aug 2021 14:22:04 +0200 Subject: + --- buch/papers/reedsolomon/idee.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 3061498..2142f88 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -106,7 +106,7 @@ Somit braucht man für die Übertragung pro Fehler 2 übertragungspunkte mehr. Wie in der Tabelle ergibt sich diese Übertragungsanzahl \begin{equation} \textcolor{darkgreen}{u}= - \textcolor{blue}{k}2\textcolor{red}{t} + \textcolor{blue}{k}+2\textcolor{red}{t} \label{reedsolomon:equation2} \end{equation}. -- cgit v1.2.1 From b147539fdc2367938af08293aa16808adf6260fe Mon Sep 17 00:00:00 2001 From: JODBaer Date: Sat, 7 Aug 2021 14:22:30 +0200 Subject: plot-green --- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 59617 -> 59772 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf index 80d17d2..b455da5 100644 Binary files a/buch/papers/reedsolomon/figures/plotfft.pdf and b/buch/papers/reedsolomon/figures/plotfft.pdf differ -- cgit v1.2.1 From 0a784fbf3f8b5acf9103dc3587b4c1cfdcca688b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 11:43:48 +0200 Subject: neue version --- buch/papers/munkres/main.tex | 2 -- buch/papers/munkres/teil1.tex | 8 +++---- buch/papers/munkres/teil3.tex | 52 +++++++++++++------------------------------ 3 files changed, 19 insertions(+), 43 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/main.tex b/buch/papers/munkres/main.tex index e5282dc..201e70b 100644 --- a/buch/papers/munkres/main.tex +++ b/buch/papers/munkres/main.tex @@ -13,8 +13,6 @@ \input{papers/munkres/teil1.tex} \input{papers/munkres/teil2.tex} \input{papers/munkres/teil3.tex} -\input{papers/munkres/teil4.tex} -\input{papers/munkres/teil5.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 3bec61d..a0cc739 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -45,13 +45,13 @@ a_{21}&a_{22}&\dots &a_{2n}\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} \] - -$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. + +$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ + +kann der Faktor Kosten mit in die Rechnung eingebracht werden. In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. -Die oben ersichtliche Matrix $A$ besitzt Matrix-Elemente. Die Elemente einer Matrix vom Typ $(n,n)$ mit Namen $A$ sind $a_{ij}$ wobei $i$ = 1,..., $n$ ist und $j$ = 1,...,$n$. $a_{ij}$ ist der Eintrag in der $i$-ten Zeile und $j$-ten Spalte der Matrix . Zum Beispiel ist a21 das Element der 2. Zeile und 1. Spalte. $i$ wird auch der Zeilenindex, $j$ der Spaltenindex genannt. - \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \subsubsection{Netzwerk} diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 964444c..692bfdf 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -41,53 +41,28 @@ Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Die optimale Lösung ist erreicht, wenn genau $n$ Zuordnungen gefunden sind. Das Vorgehen wird in den nachfolgenden Schritten 1-16 beschrieben und auch in der Abbildung 21.5 dargestellt. +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. +Das Vorgehen wird in den nachfolgenden Schritten 1-6 beschrieben und auch in der Abbildung 21.5 dargestellt. \begin{enumerate} -\item Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl wird bei -allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. +\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt 2 Spalten bei denen noch keine Zuordnungen möglich sind. -\item Auch in diesem Schritt werden die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl in jeder Spalte von allen Zahlen in der Spalte ab. +\item Auch im zweiten Schritt werden mittels der Spalten-Reduktion die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl, wiederum in rot markiert, in jeder Spalte von allen Zahlen in der Spalte ab. +Die Nullen können somit mit 3 Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. -\item Bei den nachfolgenden Schritten bleiben dann nur noch die Kosten übrig, die man hat, wenn man eine andere Zuordnung wählt. Hierbei sollen möglichst viele Nullen markiert werden, welche freistehend sind. -(Freistehend bedeutet, sowohl in der jeweiligen Zeile und Spalte nur -eine markierte Null zu haben) +\item Es bleiben jetzt einige Felder übrig, für die noch keine Zuordnung möglich ist. Die kleinste Ziffer wird dabei aus den noch nicht mit blau markierten Zahlen ausgewählt werden. Im Beispiel ist es die Zahl 1. Das Feld mit dem kleinsten Eintrag beinhaltet die Kosten, die unvermeidlich sind, wenn man für diese Felder auch noch eine Zuordnung machen will. Um neue Nullen zu bekommen, lagert man jetzt die Kosten auf die anderen Zeilen und Spalten um. Dies tut man, indem man in allen nicht abgedeckten Feldern die minimalen Kosten subtrahiert und in den blau markierten Kreuzungspunkten dazu addiert. -\item Weiter werden die jeweiligen Zeilen eruiert, bei welchen keine markierte Null vorhanden sind. Diese kennzeichnet man mit einer blauen Fläche. +\item in Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. +Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine andere markierte Null vorhanden ist. -\item In der vorherigen, mit blauer Fläche markierten Zeile die 0 eruieren und dann die dazugehörige Spalte ebenfalls -blau markieren. +\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. -\item Im der selben Spalte die markierte Null eruieren und die dazugehörige -Zeile ebenfalls blau kennzeichnen. - -\item Alle Zeilen mit einem gelben Balken durchstreichen, welche KEINE blauen Markierungen haben. - -\item Alle Spalten durchstreichen, welche eine Blaue Markierung besitzt! - -\item In den übrigen Zahlen soll nun die kleinste Ziffer ausgewählt werden, welche nicht schon durchgestrichen sind. -(Im Beispiel ist es die Zahl 1 in rot markiert. (Bei diesem Schritt ist es egal, welche 1 man wählt) - -\item Die eruierte kleinste Ziffer, wird von den nicht durchgestrichenen Ziffern -subtrahiert. Danach muss die Matrix wieder komplettiert werden. (inkl. Unterstreichen der Nullen) - -\item Jeweilige Zahlen eruieren, welche vorgängig doppelt mit einer gelben Fläche durchgestrichen wurden. - -\item Kleinste eruierte Ziffer aus Schritt 9, soll nun auf die zwei in rot markierten Ziffern aus Schritt 11 dazu addiert werden. - -\item In diesem Schritt sollen wiederum von neuem möglichst viele Nullen markiert werden, -welche freistehend sind. Es werden nur die markierten Nullen betrachtet. - -\item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. - -\item Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. - -\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Es ergibt der minimalste Transportweg. Im erwähnten Beispiel sind es total 13 Kilometer. +\item Zu guter Letzt werden überall wo eine 1 steht, die Zahlen aus der Ausgangsmatrix eingefügt. Nach Einsetzen der Zahlen können die in rot markierten Zahlen aufsummiert werden. Man erhält den minimalsten Transportweg von total 13 Kilometer. \end{enumerate} \begin{figure} \centering -\includegraphics[width=14cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png} +\includegraphics[width=8cm]{papers/munkres/figures/Ungarische_Methode_Beispiel.png} \caption{Händisches Beispiel des Munkres Algorithmus, minimalster Transportweg.} \label{munkres:Vr2} \end{figure} @@ -95,6 +70,7 @@ welche freistehend sind. Es werden nur die markierten Nullen betrachtet. \subsection{Zuordnung der Kräne \label{munkres:subsection:malorum}} +Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus der Matrix ablesen: \begin{itemize} \item Der Kran von Baustelle A1 soll zur Baustelle B2. \item Der Kran von Baustelle A2 soll zur Baustelle B3. @@ -107,4 +83,6 @@ welche freistehend sind. Es werden nur die markierten Nullen betrachtet. \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} Wie in Abbildung 21.6 ersichtlich, kann somit dank der Ungarischen Methode sowohl der minimalste Transportweg als auch die optimalste Zuweisung der Kräne auf die neuen Standorte ermittelt werden. \ No newline at end of file +\end{figure} + +In Abbildung 21.6 ist nebst dem minimalsten Transportweg auch ersichtlich, wie die optimalste Zuweisung der Kräne auf die neuen Standorte erfolgen soll. \ No newline at end of file -- cgit v1.2.1 From 6824f0a18d2fe5aa999596b2ad72cc7ee186622a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 11:44:47 +0200 Subject: fehlendes bild --- .../figures/Ungarische_Methode_Beispiel.png | Bin 1179631 -> 485941 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png index fb4d061..242db77 100644 Binary files a/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png and b/buch/papers/munkres/figures/Ungarische_Methode_Beispiel.png differ -- cgit v1.2.1 From d223220e4fdd827a5c0dd76e3d7b1453876f3e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 11:47:57 +0200 Subject: add image to reedsolomon --- buch/papers/clifford/3d/common.inc | 24 ++++++ buch/papers/clifford/3d/dq.jpg | Bin 135038 -> 135088 bytes buch/papers/clifford/3d/dq.pdf | Bin 156467 -> 156514 bytes buch/papers/clifford/3d/drehung.jpg | Bin 203814 -> 203830 bytes buch/papers/clifford/3d/drehung.pdf | Bin 224521 -> 224538 bytes buch/papers/clifford/3d/drehung.pov | 37 +-------- buch/papers/clifford/3d/q23.jpg | Bin 77888 -> 85740 bytes buch/papers/clifford/3d/q23.pov | 2 + buch/papers/clifford/3d/q31.jpg | Bin 75576 -> 82876 bytes buch/papers/clifford/3d/q31.pov | 3 + buch/papers/clifford/3d/qq.pdf | Bin 170756 -> 185901 bytes buch/papers/reedsolomon/tikz/Makefile | 7 ++ buch/papers/reedsolomon/tikz/fourier.pdf | Bin 0 -> 59496 bytes buch/papers/reedsolomon/tikz/fourier.tex | 132 +++++++++++++++++++++++++++++++ 14 files changed, 170 insertions(+), 35 deletions(-) create mode 100644 buch/papers/reedsolomon/tikz/Makefile create mode 100644 buch/papers/reedsolomon/tikz/fourier.pdf create mode 100644 buch/papers/reedsolomon/tikz/fourier.tex (limited to 'buch/papers') diff --git a/buch/papers/clifford/3d/common.inc b/buch/papers/clifford/3d/common.inc index 54aa7fe..55bf6e1 100644 --- a/buch/papers/clifford/3d/common.inc +++ b/buch/papers/clifford/3d/common.inc @@ -245,3 +245,27 @@ cylinder { #end +#macro bogen(v1, v2, center, winkelbogen, farbe) + +union { + #declare phi = 0; + #declare phimax = winkelbogen; + #declare phistep = (phimax - phi) / N; + #while (phi < phimax - phistep/2) + cylinder { + cos(phi ) * v1 + sin(phi ) * v2 + center, + cos(phi+phistep) * v1 + sin(phi+phistep) * v2 + center, + 0.01 + } + sphere { + cos(phi ) * v1 + sin(phi ) * v2 + center, + 0.01 + } + #declare phi = phi + phistep; + #end + pigment { + color farbe + } +} + +#end diff --git a/buch/papers/clifford/3d/dq.jpg b/buch/papers/clifford/3d/dq.jpg index bd44a65..690cfdc 100644 Binary files a/buch/papers/clifford/3d/dq.jpg and b/buch/papers/clifford/3d/dq.jpg differ diff --git a/buch/papers/clifford/3d/dq.pdf b/buch/papers/clifford/3d/dq.pdf index 71727d2..797a558 100644 Binary files a/buch/papers/clifford/3d/dq.pdf and b/buch/papers/clifford/3d/dq.pdf differ diff --git a/buch/papers/clifford/3d/drehung.jpg b/buch/papers/clifford/3d/drehung.jpg index ad7cd47..2347296 100644 Binary files a/buch/papers/clifford/3d/drehung.jpg and b/buch/papers/clifford/3d/drehung.jpg differ diff --git a/buch/papers/clifford/3d/drehung.pdf b/buch/papers/clifford/3d/drehung.pdf index de29085..bc8036e 100644 Binary files a/buch/papers/clifford/3d/drehung.pdf and b/buch/papers/clifford/3d/drehung.pdf differ diff --git a/buch/papers/clifford/3d/drehung.pov b/buch/papers/clifford/3d/drehung.pov index 54b5a2e..b86a2c5 100644 --- a/buch/papers/clifford/3d/drehung.pov +++ b/buch/papers/clifford/3d/drehung.pov @@ -60,24 +60,6 @@ mesh { } } -union { - #declare phi = 0; - #declare phimax = 2*pi/3; - #declare phistep = (phimax - phi) / N; - #while (phi < phimax - phistep/2) - cylinder { - r * (cos(phi ) * e1 + sin(phi ) * e2), - r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2), - 0.01 - } - sphere { r * (cos(phi ) * e1 + sin(phi ) * e2), 0.01 } - #declare phi = phi + phistep; - #end - pigment { - color Blue - } -} - mesh { #declare phi = 0; #declare phimax = 2*pi/3; @@ -100,21 +82,6 @@ mesh { } } -union { - #declare phi = 0; - #declare phimax = 2*pi/3; - #declare phistep = (phimax - phi) / N; - #while (phi < phimax - phistep/2) - cylinder { - r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, - r * (cos(phi+phistep) * e1 + sin(phi+phistep) * e2) + Vparallel, - 0.01 - } - sphere { r * (cos(phi ) * e1 + sin(phi ) * e2) + Vparallel, 0.01 } - #declare phi = phi + phistep; - #end - pigment { - color Green - } -} +bogen(r * e1, r * e2, <0,0,0>, 2*pi/3, Blue) +bogen(r * e1, r * e2, Vparallel, 2*pi/3, Green) diff --git a/buch/papers/clifford/3d/q23.jpg b/buch/papers/clifford/3d/q23.jpg index 50ca028..929ef90 100644 Binary files a/buch/papers/clifford/3d/q23.jpg and b/buch/papers/clifford/3d/q23.jpg differ diff --git a/buch/papers/clifford/3d/q23.pov b/buch/papers/clifford/3d/q23.pov index e3e5d49..2e55c96 100644 --- a/buch/papers/clifford/3d/q23.pov +++ b/buch/papers/clifford/3d/q23.pov @@ -7,6 +7,8 @@ circlearrow(<1,0,0>, 0.01*<0,0,-1>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) +bogen( <0,1.7,0>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue) + arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Red) diff --git a/buch/papers/clifford/3d/q31.jpg b/buch/papers/clifford/3d/q31.jpg index 10313fa..c240b4f 100644 Binary files a/buch/papers/clifford/3d/q31.jpg and b/buch/papers/clifford/3d/q31.jpg differ diff --git a/buch/papers/clifford/3d/q31.pov b/buch/papers/clifford/3d/q31.pov index 901f838..4abe1ed 100644 --- a/buch/papers/clifford/3d/q31.pov +++ b/buch/papers/clifford/3d/q31.pov @@ -10,3 +10,6 @@ circlearrow(<1,0,0>, 0.01*<0,-1,0>, <0, 0, 0>, 1.0, thick, 0.98*pi/2, 4) arrow( <0,0,0>, <-2.0,0,0>, 0.99*thick, Blue) arrow( <0,0,0>, <0,2.0,0>, 0.99*thick, Red) arrow( <0,0,0>, <0,0,2.0>, 0.99*thick, Blue) + +bogen( <0,0,1.7>, <-1.7, 0, 0>, <0,0,0>, pi/2, Blue) + diff --git a/buch/papers/clifford/3d/qq.pdf b/buch/papers/clifford/3d/qq.pdf index 4c55d57..fd7dbfa 100644 Binary files a/buch/papers/clifford/3d/qq.pdf and b/buch/papers/clifford/3d/qq.pdf differ diff --git a/buch/papers/reedsolomon/tikz/Makefile b/buch/papers/reedsolomon/tikz/Makefile new file mode 100644 index 0000000..1753f37 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/Makefile @@ -0,0 +1,7 @@ +# +# Makefile +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +fourier.pdf: fourier.tex + pdflatex fourier.tex diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf new file mode 100644 index 0000000..a1b6e24 Binary files /dev/null and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex new file mode 100644 index 0000000..af556d1 --- /dev/null +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -0,0 +1,132 @@ +% +% Plot der Übertrangungsabfolge ins FFT und zurück mit IFFT +% +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{times} +\usepackage{pgfplots} +\usepackage{pgfplotstable} +\usepackage{csvsimple} +\usepackage{filecontents} + +\def\plotwidth{7.5cm} +\def\plotheight{5.5cm} +\def\xverschiebung{4.5cm} +\def\yverschiebung{-7cm} +\def\yyverschiebung{-14cm} + +\def\marke#1{ + \coordinate (M) at (-0.8,4.6); + \fill[color=lightgray] (M) circle[radius=0.3]; + \draw (M) circle[radius=0.3]; + \node at (M) {#1}; +} + +\begin{document} +\begin{tikzpicture}[>=latex,thick] + +\draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); +\coordinate (B) at (2.6,-1.3); +\node[color=gray] at (B) [rotate=90,above] {Zeitbereich}; +\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich}; + +\begin{scope}[xshift=-\xverschiebung,yshift=0cm] + \begin{axis} + [title = {\large Signal\strut}, + xtick={0,32,64,96}, width=\plotwidth,height=\plotheight] + \addplot[blue,line width=1pt] table[col sep=comma] + {tikz/signal.txt}; + \end{axis} + \marke{1} +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=0cm] + \begin{axis}[axis x line= none, axis y line*=right,ytick={0}, + width=\plotwidth,height=\plotheight] + \addplot[color=white] {0}; + \end{axis} + + \begin{axis}[title = {\large Codiert\strut}, axis y line*=left, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60!green,line width=1pt] + table[col sep=comma] + {tikz/codiert.txt}; + \end{axis} + \marke{2} + \draw[->,line width=1pt] (3,-0.4) -- node[right] {Übertragung} (3,-2.2); +\end{scope} + +\definecolor{pink}{rgb}{0.6,0.2,1} + +\begin{scope}[xshift=-\xverschiebung,yshift=\yverschiebung] + \fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); + \begin{axis}[title = {\large Decodiert\strut}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[blue,line width=1pt] + table[col sep=comma] {tikz/decodiert.txt}; + \end{axis} + \marke{4} + \draw[color=pink] (4.65,0.35) ellipse (1.1cm and 0.5cm); + \draw[->,color=pink,line width=1pt] + (4.65,-0.15) to[out=-90,in=90] (3,-2.2); +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] + \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, + xtick={0,96}, + axis y line*=left, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60!green,line width=1pt] + table[col sep=comma] + {tikz/empfangen.txt}; + \end{axis} + \begin{axis}[xtick={6,20,74}, axis y line*=right, + width=\plotwidth,height=\plotheight] + \addplot[red,line width=1pt] + table[col sep=comma] {tikz/fehler.txt}; + \end{axis} + \marke{3} +\end{scope} + +\begin{scope}[xshift=-\xverschiebung,yshift=\yyverschiebung] + \begin{axis}[title = {\large \color{pink}Syndrom\strut}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[pink,line width=1pt] + table[col sep=comma] {tikz/syndrom.txt}; + \end{axis} + \marke{5} +\end{scope} + +\begin{scope}[xshift=\xverschiebung,yshift=\yyverschiebung] + % Beschriftung Rechts + \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}, + xtick={0,32,64,96}, + width=\plotwidth,height=\plotheight] + \addplot[color=black!60,line width=1pt] {0.3}; + \end{axis} + \begin{axis}[title = {\large Locator\strut},axis y line*=left, + xtick={0,6,20,74,96}, + width=\plotwidth,height=\plotheight] + \addplot[gray,line width=1pt] + table[col sep=comma] {tikz/locator.txt}; + \end{axis} + \marke{6} +\end{scope} + +% Fourier-Transformations-Pfeile + +\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2); + +\begin{scope}[yshift=\yverschiebung] +\draw[<-,line width=1pt] (1.8,2) -- node[above] {DFT$\mathstrut^{-1}$} (3.8,2); +\end{scope} + +\begin{scope}[yshift=\yyverschiebung] +\draw[->,line width=1pt] (1.8,2) -- node[above] {DFT\strut} (3.8,2); +\end{scope} + +\end{tikzpicture} +\end{document} -- cgit v1.2.1 From 08ea2ca03c7cc6dc99550dc0c768ad690b7e96bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 12:56:13 +0200 Subject: improve spacing --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59496 -> 59500 bytes buch/papers/reedsolomon/tikz/fourier.tex | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index a1b6e24..b200458 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index af556d1..d5a8d06 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -27,8 +27,8 @@ \draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); \coordinate (B) at (2.6,-1.3); -\node[color=gray] at (B) [rotate=90,above] {Zeitbereich}; -\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich}; +\node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; +\node[color=gray] at (B) [rotate=90,below] {Frequenzbereich\strut}; \begin{scope}[xshift=-\xverschiebung,yshift=0cm] \begin{axis} -- cgit v1.2.1 From 2805ea85b02609e6f7b7c2d511260ed94944722e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 13:34:03 +0200 Subject: mehr Farbe ;-) --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59500 -> 59572 bytes buch/papers/reedsolomon/tikz/fourier.tex | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index b200458..6491f08 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index d5a8d06..bbe0508 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -22,9 +22,14 @@ \node at (M) {#1}; } +\definecolor{darkgreen}{rgb}{0,0.6,0} + \begin{document} \begin{tikzpicture}[>=latex,thick] +\fill[color=blue!10] (-5.7,-14.5) rectangle (2.6,5.0); +\fill[color=darkgreen!10] (2.6,-14.5) rectangle (11.1,5.0); + \draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); \coordinate (B) at (2.6,-1.3); \node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; @@ -33,7 +38,9 @@ \begin{scope}[xshift=-\xverschiebung,yshift=0cm] \begin{axis} [title = {\large Signal\strut}, - xtick={0,32,64,96}, width=\plotwidth,height=\plotheight] + xtick={0,32,64,96}, + axis background/.style={fill=white}, + width=\plotwidth,height=\plotheight] \addplot[blue,line width=1pt] table[col sep=comma] {tikz/signal.txt}; \end{axis} @@ -42,12 +49,14 @@ \begin{scope}[xshift=\xverschiebung,yshift=0cm] \begin{axis}[axis x line= none, axis y line*=right,ytick={0}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=white] {0}; \end{axis} \begin{axis}[title = {\large Codiert\strut}, axis y line*=left, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=black!60!green,line width=1pt] table[col sep=comma] @@ -60,9 +69,10 @@ \definecolor{pink}{rgb}{0.6,0.2,1} \begin{scope}[xshift=-\xverschiebung,yshift=\yverschiebung] - \fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); + %\fill[color=pink!20] (4.65,0.35) ellipse (1.1cm and 0.5cm); \begin{axis}[title = {\large Decodiert\strut}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[blue,line width=1pt] table[col sep=comma] {tikz/decodiert.txt}; @@ -76,6 +86,7 @@ \begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, xtick={0,96}, + axis background/.style={fill=white}, axis y line*=left, width=\plotwidth,height=\plotheight] \addplot[color=black!60!green,line width=1pt] @@ -93,6 +104,7 @@ \begin{scope}[xshift=-\xverschiebung,yshift=\yyverschiebung] \begin{axis}[title = {\large \color{pink}Syndrom\strut}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[pink,line width=1pt] table[col sep=comma] {tikz/syndrom.txt}; @@ -104,6 +116,7 @@ % Beschriftung Rechts \begin{axis}[axis x line= none, axis y line*=right, ytick={0.3}, xtick={0,32,64,96}, + axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] \addplot[color=black!60,line width=1pt] {0.3}; \end{axis} -- cgit v1.2.1 From b76522a3dda77a3319d92c901b5e27586686c3d2 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Sun, 8 Aug 2021 15:53:09 +0200 Subject: chapters updated --- buch/papers/reedsolomon/codebsp.tex | 2 +- buch/papers/reedsolomon/endlichekoerper.tex | 69 +++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 15 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/codebsp.tex b/buch/papers/reedsolomon/codebsp.tex index 8430ebd..eb4e82f 100644 --- a/buch/papers/reedsolomon/codebsp.tex +++ b/buch/papers/reedsolomon/codebsp.tex @@ -76,7 +76,7 @@ dar. \subsection{Der Ansatz der diskreten Fouriertransformation \label{reedsolomon:subsection:diskFT}} -In einem vorherigen Abschnitt \textcolor{red}{(???)} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert. +Im vorherigen Abschnitt \ref{reedsolomon:section:dtf} haben wir schon einmal die diskrete Fouriertransformation zum Codieren einer Nachricht verwendet. In den endlichen Körpern wird dies jedoch nicht gelingen, da die Eulerische Zahl $e$ in endlichen Körpern nicht existiert. Wir wählen deshalb eine Zahl $a$, die die gleichen Aufgaben haben soll wie $e^{\frac{j}{2 \pi}}$ in der diskreten Fouriertransformation, nur mit dem Unterschied, dass $a$ in $\mathbb{F}_{11}$ ist. Dazu soll die Potenz von $a$ den gesamten Zahlenbereich von $\mathbb{F}_{11}$ abdecken. Dazu ändern wir die Darstellung von \[ diff --git a/buch/papers/reedsolomon/endlichekoerper.tex b/buch/papers/reedsolomon/endlichekoerper.tex index 1d196fd..d70125b 100644 --- a/buch/papers/reedsolomon/endlichekoerper.tex +++ b/buch/papers/reedsolomon/endlichekoerper.tex @@ -3,21 +3,62 @@ % % (c) 2021 Michael Steiner, Hochschule Rapperswil % -\section{Reed-Solomon in Endlichen Körpern +\section{Reed-Solomon in endlichen Körpern \label{reedsolomon:section:endlichekoerper}} \rhead{Reed-Solomon in endlichen Körpern} -\[ -\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}} -\] -Das Rechnen in endlichen Körpern bietet einige Vorteile: +Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit keine Konkreten Angaben haben, wo sich Fehler garantiert aufhalten. +Um dies zu ändern wechseln wir vom Komplexen Zahlenraum in den endlichen Körper. +In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. +Zudem beschränken sich die möglichen arithmetischen Rechenoperationen auf das Addieren und Multiplizieren. +Wir können also nur ganze Zahlen als Resultat erhalten. +Dies erleichtert auch die Umsetzung auf ein digitales System, da Computer in der Regel lieber mit ganzen als mit gebrochenen oder komplexen Zahlen arbeiten. -\begin{itemize} - \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten. - - \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen. - -\end{itemize} +Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren gehen wir im Grunde gleich vor wie im Beispiel aus dem Abschnitt \ref{reedsolomon:subsection:sendbsp}. +Eine Nachricht besteht aus einem Nutzdatenteil und einem Fehlerkorrekturteil. +Diese Nachricht wird Codiert, übertragen und beim Empfänger wieder decodiert. +In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation uns zur Hilfe nehmen. +Wir müssen also eine Alternative finden, welche die gleichen Eigenschaften wie die Fouriertransformation aufweist, aber im endlichen Körper verwendet werden kann. +Auch beim decodieren müssen wir uns etwas einfallen lassen, damit die Vorgehensweise mit dem Lokatorpolynom auch in endlichen Körpern funktionieren soll. Die folgenden Abschnitte widmen sich deshalb der genaueren Betrachtung eines Reed-Solomon-Codes und wie er in endlichen Körpern funktioniert. -Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen. - -Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind. +% +%Damit all diese Probleme möglichst verständlich +% +% +%Um all diese Probleme und möglichst +% +% +%um Fehler zu erkennen und mittels Lokatorpolynom +% +% +% ein Lokatorpolynom zu finden. +% +% +% +% Eine Nachricht besteht aus einem Nutzdatenanteil und einem Fehlerkorrekturteil, +% +% +% +%In diesem Zahlenraum gibt es nur Natürliche Zahlen und es darf nur Addiert oder Multipliziert werden. +%Der grosse Vorteil an endlichen Körper ist, dass dich der einfacher Digital umsetzen lässt. +% +% +%Dieser Zahlenraum bringt eine Menge von neuen Regeln mit sich. +%So gibt es dort nur Natürliche Zahlen und die Arithmetischen Rechenoperationen sind beschränkt auf die Addition und Multiplikation. +% +% +% +%\[ +%\textcolor{red}{\text{TODO: (warten auf den 1. Teil)}} +%\] +%Das Rechnen in endlichen Körpern bietet einige Vorteile: +% +%\begin{itemize} +% \item Konkrete Zahlen: In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. Zudem beschränken sich die möglichen Rechenoperationen auf das Addieren und Multiplizieren. Somit können wir nur ganze Zahlen als Resultat erhalten. +% +% \item Digitale Fehlerkorrektur: lässt sich nur in endlichen Körpern umsetzen. +% +%\end{itemize} +% +%Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren legen wir fest, dass diese Nachricht aus einem Nutzdatenteil und einem Fehlerkorrekturteil bestehen muss. Somit ist die zu übertragende Nachricht immer grösser als die Daten, die wir übertragen wollen. Zudem müssen wir einen Weg finden, den Fehlerkorrekturteil so aus den Nutzdaten zu berechnen, dass wir die Nutzdaten auf der Empfängerseite wieder rekonstruieren können, sollte es zu einer fehlerhaften Übertragung kommen. +% +%Nun stellt sich die Frage, wie wir eine fehlerhafte Nachricht korrigieren können, ohne ihren ursprünglichen Inhalt zu kennen. Der Reed-Solomon-Code erzielt dies, indem aus dem Fehlerkorrekturteil ein sogenanntes ``Lokatorpolynom'' generiert werden kann. Dieses Polynom gibt dem Emfänger an, welche Stellen in der Nachricht feherhaft sind. -- cgit v1.2.1 From db34dc83135d3f17713279a0a7265f9381417e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 18:02:12 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 14 ++++++-------- buch/papers/munkres/teil2.tex | 2 +- buch/papers/munkres/teil3.tex | 15 ++++++++------- 3 files changed, 15 insertions(+), 16 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index a0cc739..6d8762e 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -8,14 +8,14 @@ \rhead{Problemstellung} Das Spezielle an einem Zuordnungsproblem ist, dass es an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. Es werden hier nicht Mengen möglichst kostenminimal von einem zum anderen -Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen, oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. +Ort transportiert, sondern es geht um die kostenminimale Zuordnung von z.B. Personen oder Bau-Maschinen auf bestimmte Orte, Stellen oder Aufgaben. Um dieses Problem in einer einfachen, händischen Art und Weise zu lösen wurde der Munkres-Algorithmus, auch die Ungarische Methode genannt, entwickelt. Diese Methode ist ein weiteres Hauptthema dieses Kapitels. \subsection{Zuordnungsproblem an einem konkreten Beispiel \label{munkres:subsection:bonorum}} Als Beispiel betrachten wir den Fall, wo ein Bauunternehmer einen Bauingenieur beauftragt, eine optimale Transportroute für die Umplatzierung seiner Kräne zu eruieren. Das heisst, die Transportstrecke für die Umplatzierung seine Kräne soll möglichst klein werden. -Die Frage lautet, wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. +Die Frage lautet: Wie sind die Kräne umzusetzen, damit deren Transportstrecke minimal wird? Bei der normalen Optimierung dürfen normalerweise beliebige reelle Werte $\mathbb{R}$ angenommen werden. Beim Beispiel mit den Kräne gibt es aber ein Problem. Bei der Suche nach der optimalen Lösung darf nur die Methode der ganzzahligen Optimierung gewählt werden. Materialien kann man aufteilen, jedoch Maschinen nicht. Die Bauarbeiter auf der neuen Baustelle benötigen einen ganzen Kran und nicht nur einen halben Kran. Es muss immer ein ganzer Kran (Anzahl 1) von A nach B oder gar kein Kran (Anzahl 0) verschoben werden. Für solche Optimierungsprobleme für reelle Variablen sind verschiedene Verfahren entwickelt worden, die im Allgemeinen auch sehr effizient sind. Das reelle Problem ist also in einer einfachen Art und Weise lösbar. Doch das Problem bleibt, wie in der Illustration oben ersichtlich. Es kann mit ganzzahligen Punkten kein Optimum erzielt werden. Das Ziel ist es an das Optimum so nah wie möglich heranzukommen und dies ist eine vergleichsweise träge und langsame Angelegenheit. @@ -45,17 +45,15 @@ a_{21}&a_{22}&\dots &a_{2n}\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} \] - -$A$ $\mathbb{\in}$ $\mathbb{R}^{n,n}$ - +$\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In der Zelle dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. -Sie entstehen, wenn man z.B. einem Kran $i$ den Einsatzort $j$ zuordnet. +In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. \subsection{Alternative Darstellungen des Zuordnungsproblems \label{munkres:subsection:bonorum}} \subsubsection{Netzwerk} -Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Arbeiter und in den eckigen Klammern rechts eine $[-1]$ für jede Tätigkeit. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. +Ein (Fluss- oder Transport-) Netzwerk (engl. network) ist ein zusammenhängender Graph, bei dem jede Kante einen Fluss aufnehmen kann und jede Kante eine Kapazität für den Fluss hat. Die Menge des Flusses auf einer Kante kann die Kapazität der Kante nicht überschreiten. Ein Fluss muss die Einschränkung erfüllen, dass die Menge des Flusses in einen Knoten gleich der Menge des Flusses aus ihm heraus ist. Ein Fluss-Netzwerk (engl. flow network) ist ein Netzwerk, dessen Kanten zusätzlich Kosten pro Mengeneinheit des Flusses zugeordnet sind. Typischerweise will man einen Fluss durch die Kanten bestimmen, der den Einschränkungen des Netzwerks genügt und dessen Gesamtkosten minimal sind. Im Bild 21.2 dargestellt sind in den eckigen Klammern links die externen Flüsse $[1]$ für jeden Kran und in den eckigen Klammern rechts eine $[-1]$ für jeden Baustellenort. Die Kosten sind entlang der Kanten als Zahlen in Klammern dargestellt. \subsubsection{Matrix} Im Bild 21.3 ist eine typische $4\times 4$ Matrix dargestellt. Die Zeilen A1 bis A4 betreffen z.B. vier bestehende Maschinenlager eines Unternehmers. In den Spalten B1 bis B4 sind vier neue Baustellenorte zugewiesen. Die Zahlen in der Matrix bedeuten z.B. die Distanz in Kilometer von dem jeweiligen Lager zur jeweiligen Baustelle. \subsubsection{Bitpartiter Graph} diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index a3b249e..9407c96 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -9,5 +9,5 @@ Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. -Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigender Permutationen. +Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigende Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 692bfdf..2693185 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -11,7 +11,7 @@ Mit der ungarischen Methode können also Optimierungsprobleme gelöst werden, die bei gewichteten Zuordnungen in bipartiten Graphen entstehen. Mit ihr kann die eindeutige Zuordnung von Objekten aus zwei Gruppen so optimiert werden, dass die Gesamtkosten minimiert werden bzw.~der -Gesamtgewinn maximiert werden kann. +Gesamtgewinn maximiert werden kann. \subsection{Geschichte \label{munkres:subsection:malorum}} @@ -32,27 +32,28 @@ um eine $O(n^3)$-Laufzeit zu erreichen. Die Ungarische Methode ist ein kombinatorischer Optimierungsalgorithmus, der das Zuordnungsproblem in polynomieller Zeit löst. Der Begriff polynomielle Laufzeit bedeutet, dass die Laufzeit des Programms -wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die "Grösse" des Problems. +wie $n^2$, $n^3$, $n^4$, etc.~wächst und vernünftig skaliert. $n$ ist hierbei die ''Grösse'' des Problems. \subsection{Unterschiedliche Anzahl von Quellen und Zielen \label{munkres:subsection:malorum}} -Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z.B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position quadratisch ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. +Es gibt Fälle, in welchen das Ausgangsproblem keine quadratische Form besitzt. Das ist z. B. dann der Fall, wenn drei Mitarbeiter vier verschiedene Eignungstests absolvieren müssen. In diesem Fall wird in der Ungarischen Methode die Matrix künstlich mittels einer Dummy Position zu einem Quadrat ergänzt. Dummy-Positionen werden dann mit der größten vorhandenen Zahl aus der Matrix besetzt. Beispielsweise wird eine $3\times 4$ zu einer $4\times 4$-Matrix. \subsection{Beispiel eines händischen Verfahrens \label{munkres:subsection:malorum}} -Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Es gibt eine Ausgangsmatrix. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschließend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. +Die ungarische Methode kann in einem einfachen händischen Beispiel erläutert werden. Wir gehen von der Kostenmatrix $A$ aus. Diese Matrix wird in mehreren Schritten immer weiter reduziert. Anschliessend erfolgen mehrere Zuordnungen. Hierbei ist zu beachten, dass jede Zeile und jede Spalte immer genau eine eindeutige Zuordnung ergibt. Es gibt Situationen, in denen man nichts mehr tun muss, um eine optimale Zuordnung zu finden. Eine optimale Zuordnung ohne zusätzliche Kosten ist eine Auswahl genau eines Feldes in jeder Zeile und Spalte, welches 0 enthält. Das Ziel des Algorithmus ist also, die Matrix so zu ändern, dass genügend Nullen in der Matrix vorkommen. Es ist zudem wichtig, dass man nach jeder Modifikation der Matrix testet, ob man bereits eine Zuordnung machen kann, also genügend Nullen hat. Das Vorgehen wird in den nachfolgenden Schritten 1-6 beschrieben und auch in der Abbildung 21.5 dargestellt. \begin{enumerate} -\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt 2 Spalten bei denen noch keine Zuordnungen möglich sind. +\item Man beginnt mit der Zeilen-Reduktion. Pro Zeile eruiert man die kleinste Zahl. Diese kleinste Zahl, jeweils in rot markiert, wird bei allen anderen Ziffern in der jeweiligen Zeile subtrahiert. Mit dieser Subtraktion zieht man die unvermeidbaren Kosten ab, die man hat, um eine Baustelle zu erreichen. Man erkennt, dass die Nullen mit zwei Linien abdeckbar sind. Das heisst es gibt zwei Spalten bei denen noch keine Zuordnungen möglich sind. \item Auch im zweiten Schritt werden mittels der Spalten-Reduktion die unvermeidbaren Weg-Kosten abgezogen. Man zieht die kleinste Zahl, wiederum in rot markiert, in jeder Spalte von allen Zahlen in der Spalte ab. -Die Nullen können somit mit 3 Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. +Die Nullen können somit mit drei Linien abgedeckt werden. Im Idealfall hat die Matrix in jeder Zeile und Spalte bereits genügend viele Nullen, so dass man bereits eine Zuordnung ohne Mehrkosten machen kann. Dies ist jedoch noch nicht der Fall. Es sollen weitere Nullen in die Matrix hineingebracht werden. \item Es bleiben jetzt einige Felder übrig, für die noch keine Zuordnung möglich ist. Die kleinste Ziffer wird dabei aus den noch nicht mit blau markierten Zahlen ausgewählt werden. Im Beispiel ist es die Zahl 1. Das Feld mit dem kleinsten Eintrag beinhaltet die Kosten, die unvermeidlich sind, wenn man für diese Felder auch noch eine Zuordnung machen will. Um neue Nullen zu bekommen, lagert man jetzt die Kosten auf die anderen Zeilen und Spalten um. Dies tut man, indem man in allen nicht abgedeckten Feldern die minimalen Kosten subtrahiert und in den blau markierten Kreuzungspunkten dazu addiert. +Dieser Schritt 3 muss so oft wiederholt werden, bis genügend viele Nullen in der Matrix vorhanden sind. -\item in Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. +\item In Schritt 4 sollen jetzt möglichst viele Nullen markiert werden, welche freistehend sind. Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine andere markierte Null vorhanden ist. \item Alle markierten Nullen werden jetzt in eine 1 umgewandelt. Die restlichen Ziffern in der Matrix, exklusiv die einsen, sollen jetzt ignoriert und durch eine Null ersetzt werden. -- cgit v1.2.1 From 3b4f8802c52ed799fc37d3c1338ac71905c2ed12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 20:13:10 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 6d8762e..97359fb 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -44,8 +44,8 @@ a_{21}&a_{22}&\dots &a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{n1}&a_{n2}&\dots &a_{nn} \end{pmatrix} +\in \mathbb{R}^{n,n} \] -$\mathbb{\in}$ $\mathbb{R}^{n,n}$ kann der Faktor Kosten mit in die Rechnung eingebracht werden. In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. -- cgit v1.2.1 From 8f68f18b9745cec1257e1e1fef9a2c9076839ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 8 Aug 2021 20:17:16 +0200 Subject: trennlinie zwischen Zeit/Frequenzbereich --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59572 -> 59767 bytes buch/papers/reedsolomon/tikz/fourier.tex | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index 6491f08..25e8d6d 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index bbe0508..d151b2b 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -30,7 +30,7 @@ \fill[color=blue!10] (-5.7,-14.5) rectangle (2.6,5.0); \fill[color=darkgreen!10] (2.6,-14.5) rectangle (11.1,5.0); -\draw[dashed,line width=2pt,color=lightgray] (2.6,4.4) -- (2.6,-14.3); +\draw[dashed,line width=2pt,color=lightgray] (2.6,4.9) -- (2.6,-14.4); \coordinate (B) at (2.6,-1.3); \node[color=gray] at (B) [rotate=90,above] {Zeitbereich\strut}; \node[color=gray] at (B) [rotate=90,below] {Frequenzbereich\strut}; @@ -84,7 +84,7 @@ \end{scope} \begin{scope}[xshift=\xverschiebung,yshift=\yverschiebung] - \begin{axis}[title = {\large Empfangen {\color{red} mit Fehler}\strut}, + \begin{axis}[title = {\large Empfangen {\color{red} mit Fehlern}\strut}, xtick={0,96}, axis background/.style={fill=white}, axis y line*=left, @@ -120,7 +120,7 @@ width=\plotwidth,height=\plotheight] \addplot[color=black!60,line width=1pt] {0.3}; \end{axis} - \begin{axis}[title = {\large Locator\strut},axis y line*=left, + \begin{axis}[title = {\large Lokator\strut},axis y line*=left, xtick={0,6,20,74,96}, width=\plotwidth,height=\plotheight] \addplot[gray,line width=1pt] -- cgit v1.2.1 From 7b66eb6617ad735754e009e3801aaa5acbcf2586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20K=C3=BChne?= Date: Sun, 8 Aug 2021 20:34:58 +0200 Subject: neue version --- buch/papers/munkres/teil1.tex | 2 +- buch/papers/munkres/teil2.tex | 1 - buch/papers/munkres/teil3.tex | 7 +++---- 3 files changed, 4 insertions(+), 6 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/munkres/teil1.tex b/buch/papers/munkres/teil1.tex index 97359fb..aad45cc 100644 --- a/buch/papers/munkres/teil1.tex +++ b/buch/papers/munkres/teil1.tex @@ -47,7 +47,7 @@ a_{n1}&a_{n2}&\dots &a_{nn} \in \mathbb{R}^{n,n} \] kann der Faktor Kosten mit in die Rechnung eingebracht werden. -In den Zellen dieser Matrix sind $a_{i,j}$ Zahlen dargestellt, welche den Weg in z.B. Kilometer beschreiben. +In den Zellen dieser Matrix sind die Zahlen $a_{i,j}$ dargestellt, welche den Weg in z.B. Kilometer beschreiben. Sie entstehen, wenn man z.B. einem Kran $i$ dem Einsatzort $j$ zuordnet. \subsection{Alternative Darstellungen des Zuordnungsproblems diff --git a/buch/papers/munkres/teil2.tex b/buch/papers/munkres/teil2.tex index 9407c96..2fe24f8 100644 --- a/buch/papers/munkres/teil2.tex +++ b/buch/papers/munkres/teil2.tex @@ -8,6 +8,5 @@ \rhead{Schwierigkeit der Lösung (Permutationen)} Eine Permutation ist eine Anordnung von Objekten in einer bestimmten Reihenfolge oder eine Umordnung von Objekten aus einer vorgegebenen Reihung. Ist eine optimale Zuordnung gefunden, so steht in jeder Zeile und jeder Spalte der Matrix genau ein Element, das zur optimalen Lösung gehört, eine solche Gruppe von Positionen wird auch als Transversale der Matrix bezeichnet. - Die Problemstellung kann auch so formuliert werden, dass man die Zeilen- oder die Spaltenvektoren so umordnet soll, dass die Summe der Elemente in der Hauptdiagonale maximal wird. Hieraus wird sofort ersichtlich, dass es in einer $n$×$n$-Matrix genau so viele Möglichkeiten gibt, die Zeilen- bzw. Spaltenvektoren zu ordnen, wie es Permutationen von $n$ Elementen gibt, also $n!$. Außer bei kleinen Matrizen ist es nahezu aussichtslos, die optimale Lösung durch Berechnung aller Möglichkeiten zu finden. Schon bei einer 10×10-Matrix gibt es nahezu 3,63 Millionen (3.628.800) zu berücksichtigende Permutationen. diff --git a/buch/papers/munkres/teil3.tex b/buch/papers/munkres/teil3.tex index 2693185..fd25a74 100644 --- a/buch/papers/munkres/teil3.tex +++ b/buch/papers/munkres/teil3.tex @@ -71,7 +71,8 @@ Freistehend bedeutet, dass sowohl in der jeweiligen Zeile und Spalte keine ander \subsection{Zuordnung der Kräne \label{munkres:subsection:malorum}} -Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus der Matrix ablesen: +Als Resultat des Munkres-Algorithmus werden in Abbildung 21.6 nebst dem minimalsten Transportweg auch die optimalste Zuweisung der Kräne auf die neuen Standorte ersichtlich. +Es können die folgenden Zuordnungen aus der Matrix abgelesen werden: \begin{itemize} \item Der Kran von Baustelle A1 soll zur Baustelle B2. \item Der Kran von Baustelle A2 soll zur Baustelle B3. @@ -84,6 +85,4 @@ Als Resultat des Munkres-Algorithmus kann man jetzt die folgende Zuordnung aus d \includegraphics[width=3cm]{papers/munkres/figures/Ungarische_Methode_Beispiel_Zuw.png} \caption{Händisches Beispiel des Munkres Algorithmus, Zuweisung der Kräne } \label{munkres:Vr2} -\end{figure} - -In Abbildung 21.6 ist nebst dem minimalsten Transportweg auch ersichtlich, wie die optimalste Zuweisung der Kräne auf die neuen Standorte erfolgen soll. \ No newline at end of file +\end{figure} \ No newline at end of file -- cgit v1.2.1 From 89874953eb8c9d2e4ac9bb1cfe77a4e7e2ace9a3 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Sun, 8 Aug 2021 21:32:38 +0200 Subject: minor improvements --- buch/papers/reedsolomon/endlichekoerper.tex | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/endlichekoerper.tex b/buch/papers/reedsolomon/endlichekoerper.tex index d70125b..3019dd7 100644 --- a/buch/papers/reedsolomon/endlichekoerper.tex +++ b/buch/papers/reedsolomon/endlichekoerper.tex @@ -6,19 +6,20 @@ \section{Reed-Solomon in endlichen Körpern \label{reedsolomon:section:endlichekoerper}} \rhead{Reed-Solomon in endlichen Körpern} -Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit keine Konkreten Angaben haben, wo sich Fehler garantiert aufhalten. -Um dies zu ändern wechseln wir vom Komplexen Zahlenraum in den endlichen Körper. -In endlichen Körpern gibt es weder rationale noch komplexe Zahlen. -Zudem beschränken sich die möglichen arithmetischen Rechenoperationen auf das Addieren und Multiplizieren. +Im vorherigen Abschnitt haben wir gesehen, dass wir die Fehler mittels Approximation suchen und somit nur ungefähre Angaben haben, wo sich Fehler aufhalten. +Um dies zu ändern wechseln wir vom komplexen Zahlenraum in endliche Körper. +In endlichen Körpern gibt es keine Approximationen wie bei den rationalen und reellen Zahlen. +Alle Zahlen sind richtig oder falsch, ``fast richtig'' gibt es nicht. +Zudem beschränken sich die arithmetischen Rechenoperationen auf das Addieren und Multiplizieren. Wir können also nur ganze Zahlen als Resultat erhalten. Dies erleichtert auch die Umsetzung auf ein digitales System, da Computer in der Regel lieber mit ganzen als mit gebrochenen oder komplexen Zahlen arbeiten. -Um jetzt eine Nachricht in den endlichen Körpern zu konstruieren gehen wir im Grunde gleich vor wie im Beispiel aus dem Abschnitt \ref{reedsolomon:subsection:sendbsp}. +Um jetzt eine Nachricht in einem endlichen Körpern zu konstruieren gehen, wir im Grunde gleich vor wie im Beispiel aus dem Abschnitt \ref{reedsolomon:subsection:sendbsp}. Eine Nachricht besteht aus einem Nutzdatenteil und einem Fehlerkorrekturteil. -Diese Nachricht wird Codiert, übertragen und beim Empfänger wieder decodiert. -In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation uns zur Hilfe nehmen. +Diese Nachricht wird codiert, übertragen und beim Empfänger wieder decodiert. +In endlichen Körpern können wir jedoch nicht mehr die Fouriertransformation zur Hilfe nehmen. Wir müssen also eine Alternative finden, welche die gleichen Eigenschaften wie die Fouriertransformation aufweist, aber im endlichen Körper verwendet werden kann. -Auch beim decodieren müssen wir uns etwas einfallen lassen, damit die Vorgehensweise mit dem Lokatorpolynom auch in endlichen Körpern funktionieren soll. Die folgenden Abschnitte widmen sich deshalb der genaueren Betrachtung eines Reed-Solomon-Codes und wie er in endlichen Körpern funktioniert. +Auch beim Decodieren müssen wir uns etwas einfallen lassen, wenn die Vorgehensweise mit dem Lokator auch in endlichen Körpern funktionieren soll. Die folgenden Abschnitte widmen sich deshalb der genaueren Betrachtung eines Reed-Solomon-Codes und wie er in endlichen Körpern funktioniert. % %Damit all diese Probleme möglichst verständlich -- cgit v1.2.1 From 28671e349f82540cf0a4b683a6d70206ce621de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 9 Aug 2021 10:31:47 +0200 Subject: add chaosspiel.pdf --- buch/papers/ifs/images/chaosspiel.pdf | Bin 0 -> 12525821 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 buch/papers/ifs/images/chaosspiel.pdf (limited to 'buch/papers') diff --git a/buch/papers/ifs/images/chaosspiel.pdf b/buch/papers/ifs/images/chaosspiel.pdf new file mode 100644 index 0000000..23f0dd2 Binary files /dev/null and b/buch/papers/ifs/images/chaosspiel.pdf differ -- cgit v1.2.1 From 787033c0f57c0890d2c248e95df70281546b3313 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 9 Aug 2021 11:21:36 +0200 Subject: orthofehler korrigiert --- buch/papers/reedsolomon/dtf.tex | 67 ++++++++++++------------- buch/papers/reedsolomon/einleitung.tex | 2 +- buch/papers/reedsolomon/figures/plotfft.pdf | Bin 59772 -> 59772 bytes buch/papers/reedsolomon/idee.tex | 74 ++++++++++++++-------------- 4 files changed, 71 insertions(+), 72 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 179d90d..559ea1b 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -4,15 +4,15 @@ \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, -durch die Codierung, auf viele übertragene Werte verteilt werden. +Die Grundidee eines fehlerkorrigierenden Code ist, dass Informationen eines Datenpunkt +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. \par 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. -Forausgestzt, es gehen nicht zu viele Frequenzen bei der Übertragung verloren. +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. \par Es liegt daher nahe zu versuchen, die Fourier-Transformation für Codierung und Decodierung zu verwenden. @@ -24,15 +24,15 @@ 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 Daten zu übertragen, 32 Fehler erkennen und 16 Fehler rekonstruieren. -Mit hilfe der Fourier-Transformation werden die \textcolor{blue}{blauen Datenpunkte} transformiert, +Der Auftrag ist nun 64 Datenwerte zu übertragen, 32 Fehler zu erkennen und 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. -\begin{figure} +\begin{figure}%[!ht] \centering \resizebox{\textwidth}{!}{ - \includegraphics[width=\textwidth]{papers/reedsolomon/figures/plotfft} + \includegraphics[width=\textwidth]{papers/reedsolomon/figures/fourier} %\input{papers/reedsolomon/tikz/plotfftraw.tex} } \caption{Übertragungsabfolge \ref{reedsolomon:subsection:sendbsp}} @@ -41,34 +41,33 @@ Durch eine Rücktransformation könnnen die \textcolor{blue}{blauen Datenpunkte} In der Abbildung \ref{fig:sendorder} wird eine Übertragung Schritt für Schritt illustriert. In der folgenden Aufzählung werden diese einzelne Schritte erklärt und erläutert: \begin{enumerate}[(1)] - \item Das Signal ist mit 64 zufälligrn, ganzzahligen Datenwerten, zwischen 0 und 10. + \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 - \externaldocument{papers/reedsolomon/idee}\ref{reedsolomon:section:Fehlerkorrekturstellen}. - Wir erhalten so einen erweiterten Signalvektor der länge $N =96$. + Diese setzen wir willkürlich 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. - \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene Werte durch Fehler, - verändert werden. + \item Wir dürfen annehmen, dass bei der Übertragung, nur einzelne übertragene + Werte durch Fehler verändert werden. \par - Im Beispiel sind dies die Werte an den Stellen 7, 21 und 75(\textcolor{red}{rote Kurve}), - die um einen Betrag verändert werden. + 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 - wiederhergestellt werden. + \item Ohne Übertragungsfehler kann der Signalvektor durch 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 Werte abweichend von Null auftreten. Somit haben wir bereits Fehler erkannt. - \item Die Werte an den Fehlerkorrekturstellen 64 - 96, die nicht mehr Null sind, nennenwir das Syndrom. - Im Syndrom steckt nur Information über die Fehler, sie werden durch die Inverse Fourier-Transformation erzeugt. - \item Um die Fehler zu rekonstruieren, ann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren. + \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. + \item Um die Fehler zu rekonstruieren, kann man versuchen, die Information im Syndrom mit Fourier-Transformation zu transformieren. Da das Syndrom nur ein Teil der Fehlerinformation ist, liefert die Fourier-Transformation eine Approximation der Fehler. - Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu localisieren. + Diese Approximation der Fehler ist genau genug, um die Fehlerstellen zu lokalisieren. \end{enumerate} 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. +dass die Fehlerwerte auch nur ein Drittel so gross sind. \par Damit können die Fehler korrigiert und die Orginaldaten wiederhergestellt werden. Der Rekonstruktionsauftrag ist damit erfolgreich ausgeführt. @@ -87,8 +86,7 @@ Die 7 Übertragungspunkte könnten ein Polynom \end{equation} sechsten Grades bestimmen. Durch die Wahl von $\textcolor{gray}{a_3=0}$, $\textcolor{gray}{a_4=0}$, $\textcolor{gray}{a_5=0}$, $\textcolor{gray}{a_6=0}$ -erzeugen wir die, für die Fehlerkorrektur, -nötige Redundanz, ganz analog zum Schritt (1) im Beispiel. +erzeugen wir die für die Fehlerkorrektur nötige Redundanz, ganz analog zum Schritt (1) im Beispiel. \par Die Analogie geht aber noch weiter. Schreibt man @@ -101,25 +99,24 @@ Die Analogie geht aber noch weiter. {f}_n \cdot e^{-\frac{2\pi j}{N} \cdot kn} ,\label{reedsolomon:DFT} \end{equation} - für die Diskrte-Fourier-Transformation das Polynom + für die diskrete-Fourier-Transformation das Polynom \begin{equation} q(w)= - \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1} + \frac{{f}_0}{N} + \frac{{f}_1}{N} w^1 + \frac{{f}_2}{N} w^2 + \dots + \frac{{f}_{N-1}}{N} w^{N-1}. \label{reedsolomon:DFT_polynom} \end{equation} - Im Beispiel werden aber Werte des des Polynoms $q(w)$ für verschieden - \( w = e^{-\frac{2\pi j}{N} k}, k=1, \dots , k=N-1\) übermittelt. + Im Beispiel werden aber Werte des Polynoms \begin{equation} \textcolor{darkgreen}{q(w)}= \frac{\textcolor{blue}{{f}_0}}{N} + \frac{\textcolor{blue}{{f}_1}}{N} w^1 + \frac{\textcolor{blue}{{f}_2}}{N} w^2 + \dots + \frac{\textcolor{blue}{{f}_{63}}}{N} w^{63} + \frac{\textcolor{gray}{{f}_{64}}}{N} w^{64} + \textcolor{gray}{\dots} + \frac{\textcolor{gray}{{f}_{N-1}}}{N} w^{N-1} \label{reedsolomon:DFT_polynom2} \end{equation} -Das syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffizenten) + 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) \par -Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reelen Zahlen. +Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reeleen Zahlen. Wenn die Approximation nicht mehr genügend gut ist um die Fehler zu erkennen und rekonstruieren, -dann müssen wir von den Reelen-Zahlen weg und zum endlichen Körpern, oder auch Galios-Körper genannt. -Deshalb haben die Mathematiker einen neuen Körper gesucht und ihn in der Endlichkeit gefunden, -dies wird nun im nächsten Abschnitt genauer erklärt. +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. diff --git a/buch/papers/reedsolomon/einleitung.tex b/buch/papers/reedsolomon/einleitung.tex index ca4f398..04f1fe2 100644 --- a/buch/papers/reedsolomon/einleitung.tex +++ b/buch/papers/reedsolomon/einleitung.tex @@ -6,7 +6,7 @@ \section{Einleitung \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. +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. diff --git a/buch/papers/reedsolomon/figures/plotfft.pdf b/buch/papers/reedsolomon/figures/plotfft.pdf index b455da5..80adafb 100644 Binary files a/buch/papers/reedsolomon/figures/plotfft.pdf and b/buch/papers/reedsolomon/figures/plotfft.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 2142f88..26e617c 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -5,18 +5,18 @@ \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 jeweilige einzelne Fehler erkennen. -Wenn jedoch mehr als nur ein Fehler erkennt werden soll und sogar noch das orginal rekonstruiert werden soll, + 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 erkennen und korrigiren, 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 den original Wert rekonstruieren. -Eine weitere Möglichkeit wäre, dass der Empfänger nach einer fehlerhaften Übertragung die selben Daten nochmals auffordert. -Dies führt wieder zu unerwünschten mehrfach Übertragung. -In Anwendungen des Reed-Soöomon-Code \externaldocument{papers/reedsolomon/anwendungen} \ref{reedsolomon:section:anwendung} -ist dies vom Empfänger gesteuerte erneute Übertragen meistens nicht sinnvoll oder sogar unmöglich. +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 @@ -34,35 +34,35 @@ p(x) \end{equation}. \par Ein Polynome zweiten Grades ist durch drei Punkte eindeutig bestimmbar. -Bei einer fehlerlosen Übertragung, können wir mit 3 übertragene Werte, +Bei einer fehlerlosen Übertragung können wir mit 3 übertragene Werte das Polynom durch Polynominterpolation volständig rekonstruieren. -Weder erkläre noch erläutere ich die Polynominterpolation, - wir brauchen sie als Funktion, die von Punktn ein Polynom errechnet. -Die koeffizente, des rekonstruierten Polynoms, sind dann unsere gesendten Zahlen \textcolor{blue}{2}, \textcolor{blue}{1}, \textcolor{blue}{5}. +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}. +\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, wir nehmen im Beispiel 7 Werte. Übertragen werden nun die \textcolor{darkgreen}{grünen Werte} - dieses 7 Werte \textcolor{blue}{blauen Polynomes} an den Stellen 1, 2, 3\dots 7 . + dieses \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}{übertragene Werte} des Polynoms sind grün. + 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 Punktenicht auf der Parabel liegen. -Somit könnendie grauen Punkte auf der Parabel ersetzt werden und sind damit korrigiert. -bis zu wivielen Fehler können wir nun korrigieren im Beispiel korrigieren? +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: \begin{itemize} - \item Bei \textit{1 Fehler} können konkurenzierende Polynome, zusammen mit zwei originalen Punkten fehlleiten. - Dabei kann aber maximal 3 Punkte auf diesem Konkurrenzpolynom sein. - Da 6 übereinstimende grössser als 3 ist haben wir unser original Polynom gefunden. - \item Bei \textit{2 Fehler} kann ein Fehler mit zwei originalen Punkten ein fehlleitendes Konkurrenzpolynom bilden. + \item Bei \textit{1 Fehler} können konkurrenzierende 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. + \item Bei \textit{2 Fehlern} kann ein Fehler mit zwei originalen Punkten ein Konkurrenzpolynom bilden. Da der zweite Fehler frei wählbar ist, kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, ein originles Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. - Da 5 noch grösser als 4 ist, können wir sagen, welches das original Polynom ist. - \item Bei \textit{3 Fehler} kann genau wie bei 2 Fehler, ein Fehler ein fehlleitendes Polynom mit 2 original Punkten bestimmen werden. + Nun haben wir, ein originales Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + Da 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist. + \item Bei \textit{3 Fehlern} kann genau wie bei 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen 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 Original Polynom kann nicht mehr gefunden werden. - \item Bei \textit{4 Fehler} Es kann noch erkennt weden das Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. + 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 Bei \textit{4 Fehlern} Es kann 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 Bei \textit{5 Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und somit auch keine Aussgae gemacht werden ob Fehler statt gefunden haben oder nicht. @@ -75,17 +75,18 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \caption{Polynom $p(x)$ von der Gleichung\eqref{reedsolomon:equation1}} \label{fig:polynom} \end{figure} +\qedhere \end{beispiel} \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 \textcolor{blue}{Datenwerte}, ergeben die anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. -Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, brauchen redundanz. +Die Anzahl \textcolor{blue}{Datenwerte}, ergeben die Anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. +Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, braucht Redundanz. Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, erkennt man almählich ein Muster. -\begin{table} +\begin{table}%[!ht] \centering \begin{tabular}{ c c | c} \hline @@ -101,17 +102,18 @@ Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, \caption{ Fehlerkorrekturstellen Bestimmung.} \label{tab:fehlerkorrekturstellen} \end{table} -Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem Konkurenzierenden. -Somit braucht man für die Übertragung pro Fehler 2 übertragungspunkte mehr. +Es müssen mehr Punkte auf dem \textcolor{blue}{originalen Polynom} liegen, als auf dem konkurenzierenden. +Somit braucht man für die Übertragung pro Fehler zwei Übertragungspunkte mehr. Wie in der Tabelle ergibt sich diese Übertragungsanzahl \begin{equation} \textcolor{darkgreen}{u}= - \textcolor{blue}{k}+2\textcolor{red}{t} + \textcolor{blue}{k}+2\textcolor{red}{t}. \label{reedsolomon:equation2} -\end{equation}. +\end{equation} Ein Nebeneffekt ist, dass auch $2t$ Fehler erkannt werden können, nicht aber korrigiert. -Nun haben wir für jede rekonstruktion des Polynoms, die Polynominterpolation gebraucht. +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. -- cgit v1.2.1 From 098cc6c392283476e84a47f3a193b8f5f79ec413 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 11:47:16 +0200 Subject: searching latex error --- buch/papers/mceliece/aufbau.tex | 56 ++++++++++++--------- buch/papers/mceliece/funktionsweise.tex | 86 +++++++++++++++++++++++++++------ 2 files changed, 102 insertions(+), 40 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index 0ee95fa..f8533d6 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -49,7 +49,7 @@ Beispielsweise \] \subsection{Linear-Code-Generatormatrix $G_{n,k}$ -\label{mceliece:subsection:g_m}} +\label{mceliece:subsection:g_nk}} Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code, der in der Lage ist, $t$ Fehler zu korrigieren. Im Zusammenhang mit McEliece werden dabei meist Goppa-Codes verwendet, @@ -76,7 +76,7 @@ Beispiel \] \subsection{Permutations-Matrix $P_n$ -\label{mceliece:subsection:p_m}} +\label{mceliece:subsection:p_n}} Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. Beispiel @@ -106,12 +106,33 @@ Beispiel \end{pmatrix} \] +\subsection{Public-Key $K_{n,k}$ +\label{mceliece:subsection:k_nk}} +Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, +berechnet sich aus den bereits bekannten Matrizen wiefolgt: +\[ + K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. +\] +Beispiel +\[ + K_{7,4}= + \begin{pmatrix} + 0 & 0 & 1 & 0\\ + 1 & 0 & 0 & 1\\ + 0 & 0 & 1 & 1\\ + 1 & 1 & 1 & 1\\ + 0 & 1 & 0 & 1\\ + 0 & 1 & 0 & 0\\ + 1 & 0 & 0 & 0 + \end{pmatrix} +\] + \subsection{Fehler-Vektor $e_n$ -\label{mceliece:subsection:p_m}} +\label{mceliece:subsection:e_n}} Dieser Vektor der Länge $n$ besteht aus $t$ Einsen, welche zufällig innerhalb des Vektors angeordnet sind, alle anderen Einträge sind Null. Dieser Fehlervektor besitzt also gleich viele Einer, -wie die Anzahl Fehler, die der Linearcode zu korrigieren vermag. +wie die Anzahl Fehler, die der Linearcode der Generatormatrix $G_{n,k}$ zu korrigieren vermag. Beispiel \[ @@ -127,23 +148,10 @@ Beispiel \end{pmatrix} \] -\subsection{Public-Key $K_{n,k}$ -\label{mceliece:subsection:k_m}} -Der öffentliche Schlüssel, welcher zum Verschlüsseln verwendet wird, -berechnet sich mit -\[ - K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. -\] -Beispiel -\[ - K_{7,4}= - \begin{pmatrix} - 0 & 0 & 1 & 0\\ - 1 & 0 & 0 & 1\\ - 0 & 0 & 1 & 1\\ - 1 & 1 & 1 & 1\\ - 0 & 1 & 0 & 1\\ - 0 & 1 & 0 & 0\\ - 1 & 0 & 0 & 0 - \end{pmatrix} -\] \ No newline at end of file +\subsection{Daten-Vektor $d_k$ +\label{mceliece:subsection:d_k}} +In diesem Vektor der länge $k$ ist die Nachricht (oder einen Teil davon) enthalten. + +\subsection{Code-Vektor $c_n$ +\label{mceliece:subsection:c_n}} +In diesem Vektor der länge $n$ ist die verschlüsselte Nachricht (oder einen Teil davon) enthalten. \ No newline at end of file diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index 3dfc963..e412313 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -6,22 +6,76 @@ \section{Funktionsweise \label{mceliece:section:funktionsweise}} \rhead{Funktionsweise} -Um den Ablauf des Datenaustausches mittels M +Um den Ablauf des Datenaustausches mittels McEliece-Verschlüsselung zu erläutern, +wird ein Szenario verwendet, +bei dem Bob an Alice eine verschlüsselte Nachticht über ein öffentliches Netzwerk zukommen lässt. -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:bonorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +\subsection{Vorbereitung +\label{mceliece:section:vorbereitung}} +Damit der Nachrichtenaustausch stattfinden kann, muss Alice (Empfängerin) +zuerst ein Schlüsselpaar definieren. +Dazu erstellt sie die einzelnen Matrizen $S_k$, $G_{n,k}$ und $P_n$. +Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice +und sollen geheim bleiben. +Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich +aus der Multiplikation der privaten Matrizen\ref{mceliece:subsection:k_nk} +und wird anschliessend Bob, zugestellt. +\subsection{Verschlüsselung +\label{mceliece:section:verschl}} +Bob berechnet nun die verschlüsselte Nachricht $c_n$, indem er seine Daten $d_k$ +mit dem öffentlichen Schlüssel $K_{n,k}$ von Alice multipliziert +und anschliessend durch eine Addition mit einem Fehlervektor $e_n$ einige Bitfehler hinzufügt. +\[ + c_n\,=\,K_{n,k}\cdot d_k + e_n\,. +\] +Dabei wird für jede Nachricht (oder für jedes Nachrichtenfragment) +einen neuen, zufälligen Fehlervektor generiert. +Die verschlüsselte Nachricht $c_n$ wird anschliessend Alice zugestellt. +\subsection{Entschlüsselung +\label{mceliece:section:entschl}} +Alice entschlüsselt die erhaltene Nachricht in mehreren einzelnen Schritten. +Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel mit seinen Ursprungsmatrizen dargestellt. +\[ + \begin{align*}​ + c_n\,&=\,K_{n,k}\cdot d_k + e_n \\​ + &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n \\​ + \end{align*}​ +\] +Zuerst wird der Effekt der Permutationsmatrix rückgängig gemacht, +indem das Codewort mit dessen Inversen $P_n^{-1}​$ multipliziert wird. + +\[ + \begin{align*}​ + c_{n}''\,=\,P_n^{-1}\cdot \hat{c}_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + \end{align*}​ +\] + +Eine weitere Vereinfachung ist nun möglich, +weil $P_n^{-1}​$ einerseits auch eine gewöhnliche Permutationsmatrix ist +und andererseits ein zufälliger Fehlerwektor $e_n$ multipliziert mit einer Permutationsmatrix +wiederum einen gleichwertigen, zufälligen Fehlerwektor $e_n'$ ergibt. +\[ + \begin{align*}​ + c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ + &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad \quad | \,​ + e'_n\,=\,P_n^{-1}\cdot e_n​ + \end{align*} +\] + +Dank des Linearcodes können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, +entfernt werden. +Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt, +wird die Operation durch eine Funktion dargestellt. +Wie dieser Decoder genau aufgebaut ist ist, +hängt vom verwendeten Linearcode ab. + +\[ + \begin{align*}​ + c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\​ + &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\​ + &=S_{k}\cdot d_k + \end{align*} +\] \ No newline at end of file -- cgit v1.2.1 From f54db89a60364ccec5822ab025d2caadb52def8c Mon Sep 17 00:00:00 2001 From: JODBaer Date: Mon, 9 Aug 2021 13:45:45 +0200 Subject: feinheiten --- buch/papers/reedsolomon/Makefile | 2 +- buch/papers/reedsolomon/dtf.tex | 2 +- buch/papers/reedsolomon/figures/fourier.pdf | Bin 0 -> 59770 bytes buch/papers/reedsolomon/idee.tex | 23 +++++++++++----------- buch/papers/reedsolomon/standalone/standalone.pdf | Bin 1835588 -> 1837295 bytes 5 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 buch/papers/reedsolomon/figures/fourier.pdf (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/Makefile b/buch/papers/reedsolomon/Makefile index 25fd98b..4be963e 100644 --- a/buch/papers/reedsolomon/Makefile +++ b/buch/papers/reedsolomon/Makefile @@ -24,7 +24,7 @@ SOURCES := \ TIKZFIGURES := \ tikz/polynom2.tex \ - tikz/plotfft.tex + tikz/fourier.tex FIGURES := $(patsubst tikz/%.tex, figures/%.pdf, $(TIKZFIGURES)) diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 559ea1b..7c88c16 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -1,7 +1,7 @@ % % dtf.tex -- Idee mit DFT % -\section{Übertragung mit Hilfe der Diskrten Fourier-Transformation +\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 diff --git a/buch/papers/reedsolomon/figures/fourier.pdf b/buch/papers/reedsolomon/figures/fourier.pdf new file mode 100644 index 0000000..4995141 Binary files /dev/null and b/buch/papers/reedsolomon/figures/fourier.pdf differ diff --git a/buch/papers/reedsolomon/idee.tex b/buch/papers/reedsolomon/idee.tex index 26e617c..6ee42ef 100644 --- a/buch/papers/reedsolomon/idee.tex +++ b/buch/papers/reedsolomon/idee.tex @@ -51,20 +51,20 @@ Somit können die grauen Punkte auf der Parabel ersetzt werden und sind damit ko Bis zu wievielen Fehler können wir nun im Beispiel korrigieren? Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \begin{itemize} - \item Bei \textit{1 Fehler} können konkurrenzierende Polynome, zusammen mit zwei originalen Punkten entstehen. + \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. - \item Bei \textit{2 Fehlern} kann ein Fehler mit zwei originalen Punkten ein Konkurrenzpolynom bilden. - Da der zweite Fehler frei wählbar ist, kann dieser auch auf dem Konkurrenzpolynom liegen, wie in der Abbilbung \ref{fig:polynom}. - Nun haben wir, ein originales Polynom mit 5 übereinstimmenden und eine konkurrenzierendes mit 4 Punkten. + \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 5 noch grösser als 4 ist, können wir sagen, welches das Originalpolynom ist. - \item Bei \textit{3 Fehlern} 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 2 oder 1 Fehler, ein konkurenzierendes Polynom mit einem Fehler und zwei originalen Punkten bestimmen 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 Bei \textit{4 Fehlern} Es kann noch erkannt werden, dass Fehler statt gefunden haben, da 3 orginale Punkte das ursprüngliche Polynom ergeben. + \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 Bei \textit{5 Fehler} Mit den 2 originalen Punkte kann das Originale Polynom nicht mehr erkannt werden und + \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. \end{itemize} @@ -82,8 +82,8 @@ Wir erhöhen nun die Fehleranzahl Schritt für Schritt: \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 \textcolor{blue}{Datenwerte}, ergeben die Anzahl Polynomkoeffizente $k$ und somit den Grad $k-1$. -Die Bestimmung der Anzahl der Fehler $t$, welche korrigiert werden können, braucht Redundanz. +Die Anzahl Datenwerte, ergeben die Anzahl Polynomkoeffizente \textcolor{blue}{$k$} und somit den Grad $k-1$. +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. \begin{table}%[!ht] @@ -102,9 +102,10 @@ Gehen wir die Fehleranzahl mit verschiedenen Übertragungsanzahlen durch, \caption{ Fehlerkorrekturstellen Bestimmung.} \label{tab:fehlerkorrekturstellen} \end{table} +\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 Fehler zwei Übertragungspunkte mehr. -Wie in der Tabelle ergibt sich diese Übertragungsanzahl +Somit braucht man für die Übertragung pro \textcolor{red}{Fehler} zwei Übertragungspunkte mehr. +Wie in der Tabelle ergibt sich diese \textcolor{darkgreen}{Übertragungsanzahl} \begin{equation} \textcolor{darkgreen}{u}= \textcolor{blue}{k}+2\textcolor{red}{t}. diff --git a/buch/papers/reedsolomon/standalone/standalone.pdf b/buch/papers/reedsolomon/standalone/standalone.pdf index dc34b2d..dfa9eea 100644 Binary files a/buch/papers/reedsolomon/standalone/standalone.pdf and b/buch/papers/reedsolomon/standalone/standalone.pdf differ -- cgit v1.2.1 From 49646a239bcd153e6fb2b85f5839d2f1853b33f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 9 Aug 2021 14:14:19 +0200 Subject: fix right axis --- buch/papers/reedsolomon/tikz/fourier.pdf | Bin 59767 -> 59721 bytes buch/papers/reedsolomon/tikz/fourier.tex | 8 +------- 2 files changed, 1 insertion(+), 7 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/tikz/fourier.pdf b/buch/papers/reedsolomon/tikz/fourier.pdf index 25e8d6d..7e0198b 100644 Binary files a/buch/papers/reedsolomon/tikz/fourier.pdf and b/buch/papers/reedsolomon/tikz/fourier.pdf differ diff --git a/buch/papers/reedsolomon/tikz/fourier.tex b/buch/papers/reedsolomon/tikz/fourier.tex index d151b2b..7b4ccea 100644 --- a/buch/papers/reedsolomon/tikz/fourier.tex +++ b/buch/papers/reedsolomon/tikz/fourier.tex @@ -48,13 +48,7 @@ \end{scope} \begin{scope}[xshift=\xverschiebung,yshift=0cm] - \begin{axis}[axis x line= none, axis y line*=right,ytick={0}, - axis background/.style={fill=white}, - width=\plotwidth,height=\plotheight] - \addplot[color=white] {0}; - \end{axis} - - \begin{axis}[title = {\large Codiert\strut}, axis y line*=left, + \begin{axis}[title = {\large Codiert\strut}, xtick={0,32,64,96}, axis background/.style={fill=white}, width=\plotwidth,height=\plotheight] -- cgit v1.2.1 From 180fac4090c0d412b7742b89b380fb44d3abb271 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 23:10:57 +0200 Subject: scratch ready --- buch/papers/mceliece/aufbau.tex | 5 ++- buch/papers/mceliece/einleitung.tex | 10 +++-- buch/papers/mceliece/fazit.tex | 77 ++++++++++++++++++++------------- buch/papers/mceliece/funktionsweise.tex | 74 ++++++++++++++++--------------- buch/papers/mceliece/references.bib | 37 ++++++++-------- 5 files changed, 112 insertions(+), 91 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index f8533d6..521488d 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -28,7 +28,8 @@ Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert wer wobei danach mithilfe des Gauss-Algorythmusses deren Inverse bestimmt werden kann. Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden. Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. -Beispielsweise + +Beispiel: \[S_4= \begin{pmatrix} 0 & 0 & 1 & 1\\ @@ -79,6 +80,7 @@ Beispiel \label{mceliece:subsection:p_n}} Mit der zufällig generierten Permutationsmatrix $P_n$ wird die Reihenfolge der Bits geändert. Mit der Inversen $P_n^{-1}$ kann die Bitvertauschung rückgängig gemacht werden. + Beispiel \[ P_7= @@ -113,6 +115,7 @@ berechnet sich aus den bereits bekannten Matrizen wiefolgt: \[ K_{n,k}=P_{n}\cdot G_{n,k}\cdot S_{k}\,. \] + Beispiel \[ K_{7,4}= diff --git a/buch/papers/mceliece/einleitung.tex b/buch/papers/mceliece/einleitung.tex index 48b55b0..cebb8ed 100644 --- a/buch/papers/mceliece/einleitung.tex +++ b/buch/papers/mceliece/einleitung.tex @@ -6,9 +6,11 @@ \section{Einleitung \label{mceliece:section:einleitung}} \rhead{Einleitung} -Das McEliece-Kryptosystem ist eine Variante zum Austausch -von Schlüsselpaaren über ein Netzwerk analog dem Diffie-Hellman-Schlüsseltausch \ref{buch:subsection:diffie-hellman}, -wobei das McEliece-System als Quantencomputerresistent gilt. -Das Verschlüsseln/Entschlüsseln von Nachrichten wird bei diesem System hauptsächlich mit Matrizenoperationen durchgeführt. +Beim McEliece-Kryptosystem handelt es sich um ein asymetrisches Verschlüsselungsverfahren, welches erlaubt, +Daten verschlüsselt über ein Netzwerk zu übermitteln, ohne dass vorab ein gemeinsamer, +geheimer Schlüssel unter den Teilnehmern ausgetauscht werden müsste. +Eine andere, bereits erläuterte Variante einer asymetrischen Verschlüsselung ist das Diffie-Hellman-Verfahren \ref{buch:subsection:diffie-hellman}. +Im Gegensatz zu Diffie-Hellman gilt das McEliece-System als Quantencomputerresistent +und das Verschlüsseln/Entschlüsseln von Nachrichten wird hauptsächlich mit Matrizenoperationen durchgeführt. diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex index 37152bf..3451250 100644 --- a/buch/papers/mceliece/fazit.tex +++ b/buch/papers/mceliece/fazit.tex @@ -6,35 +6,52 @@ \section{Fazit \label{mceliece:section:fazit}} \rhead{Fazit} -Sed ut perspiciatis unde omnis iste natus error sit voluptatem -accusantium doloremque laudantium, totam rem aperiam, eaque ipsa -quae ab illo inventore veritatis et quasi architecto beatae vitae -dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit -aspernatur aut odit aut fugit, sed quia consequuntur magni dolores -eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam -est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci -velit, sed quia non numquam eius modi tempora incidunt ut labore -et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima -veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, -nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure -reprehenderit qui in ea voluptate velit esse quam nihil molestiae -consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla -pariatur? - -\subsection{De finibus bonorum et malorum -\label{mceliece:subsection:malorum}} -At vero eos et accusamus et iusto odio dignissimos ducimus qui -blanditiis praesentium voluptatum deleniti atque corrupti quos -dolores et quas molestias excepturi sint occaecati cupiditate non -provident, similique sunt in culpa qui officia deserunt mollitia -animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis -est et expedita distinctio. Nam libero tempore, cum soluta nobis -est eligendi optio cumque nihil impedit quo minus id quod maxime -placeat facere possimus, omnis voluptas assumenda est, omnis dolor -repellendus. Temporibus autem quibusdam et aut officiis debitis aut -rerum necessitatibus saepe eveniet ut et voluptates repudiandae -sint et molestiae non recusandae. Itaque earum rerum hic tenetur a -sapiente delectus, ut aut reiciendis voluptatibus maiores alias -consequatur aut perferendis doloribus asperiores repellat. +Ein kurzer Vergleich des McEliece-Systems +mit dem oft verwendeten RSA-System soll zeigen, wo dessen Vor- und Nachteile liegen. +\subsection{Resourcen} +Eine Eigenheit des McEliece-Systems ist das hinzufügen von Rauschen (mit Fehlervektor $e_n$). +Damit diese mit dem Lienarcode-Decoder wieder entfernt werden können, +wird Redundanz benötigt, +weshalb dessen Kanalefizienz (Nutzbits/Übertragungsbits) sinkt. +Die Schlüsselgrösse des McEliece-Systems ist deshalb so riesig, weil es sich um eine zweidimensionale Matrix handelt, währenddem RSA mit nur zwei Skalaren auskommt. +Das McEliece-System benötigt dafür weniger Rechenaufwand beim Verschlüsseln/Entschlüsseln, da die meisten Operationen mit Matrixmultiplikationen ausgeführt werden können (Aufwand ist in binären Operationen pro Informationsbit)\cite{mceliece:CodeBasedCrypto}. +Beim Rechenaufwand sei noch erwähnt, +dass asymetrische Verschlüsselungen meist nur dazu verwendet werden, +um einen Schlüssel für eine symetrische Verschlüsselung auszutauschen. +\begin{center} +\begin{tabular}{c|c|c} + &McEliece (n=2048, k=1718, t = 30) &RSA (2048, e = 216 + 1)\\ + \hline + Schlüssegrösse: (Public) &429.5 KByte &0.5 KByte \\ + Kanaleffizienz: &83.9 \% &100 \% \\ + Verschlüsselungsaufwand: &1025 &40555 \\ + Entschlüsselungsaufwand: &2311 &6557176, 5 +\end{tabular} +\end{center} +\subsection{Sicherheit} +Grosse unterschiede zwischen den beiden Kryptosystemen gibt es jedoch bei der Sicherheit. +Der Kern der RSA-Verschlüsselung beruht auf dem Problem, eine grosse Zahl in ihre beiden Primfaktoren zu zerlegen. +Bei genügend grossen Zahlen ist diese Zerlegung auch mit den heute besten verfügbaren Computern kaum innerhalb vernünftiger Zeit zu lösen. +Weiter ist aber bekannt, +dass mithilfe des sogenannten Shor-Algorithmuses \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, +was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde. +Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen. +Das McEliece-System hingegen beruht auf dem Problem des "Syndrome decoding" (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). +Für das "Syndrome decoding" sind bis heute keine Methoden bekannt, +welche nennenswerte Vorteile gegenüber dem durchprobieren (brute-force) bringen, +auch nicht mithilfe eines Quantencomputers. +\begin{center} +\begin{tabular}{c|c|c} + &McEliece &RSA \\ +\hline + Grundlage Verschlüsselung &Syndrome decoding &Integer factoring\\ + Aufwand (gewöhnliche CPU) &exponential &< exponential \\ + Aufwand (Quantencomputer) &> polynomial &$\mathcal{O}(\log(N)^3)$ +\end{tabular} +\end{center} +Die Verbreitung des McEliece-Kryptosystems ist zurzeit äusserst gering. +Das liegt einerseits an der immensen Grösse des öffentlichen Schlüssels, +andererseits wird aber auch in naher Zukunft nicht mit einem genügend starken Quantencomputer gerechnet, +welcher andere asymetrische Verschlüsselungen gefährden würde. diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index e412313..93bb1c7 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -19,7 +19,7 @@ Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice und sollen geheim bleiben. Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich aus der Multiplikation der privaten Matrizen\ref{mceliece:subsection:k_nk} -und wird anschliessend Bob, zugestellt. +und wird anschliessend Bob zugestellt. \subsection{Verschlüsselung \label{mceliece:section:verschl}} @@ -36,46 +36,48 @@ Die verschlüsselte Nachricht $c_n$ wird anschliessend Alice zugestellt. \subsection{Entschlüsselung \label{mceliece:section:entschl}} Alice entschlüsselt die erhaltene Nachricht in mehreren einzelnen Schritten. -Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel mit seinen Ursprungsmatrizen dargestellt. -\[ - \begin{align*}​ - c_n\,&=\,K_{n,k}\cdot d_k + e_n \\​ - &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n \\​ - \end{align*}​ -\] +Um etwas Transparenz in diese Prozedur zu bringen, wird der öffentliche Schlüssel $K_{n,k}$ mit seinen Ursprungsmatrizen dargestellt. +\begin{align*} + c_n\,&=\,K_{n,k}\cdot d_k + e_n \\ + &= P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + e_n +\end{align*} Zuerst wird der Effekt der Permutationsmatrix rückgängig gemacht, -indem das Codewort mit dessen Inversen $P_n^{-1}​$ multipliziert wird. - -\[ - \begin{align*}​ - c_{n}''\,=\,P_n^{-1}\cdot \hat{c}_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - \end{align*}​ -\] - +indem das Codewort mit dessen Inversen $P_n^{-1}$ multipliziert wird. +\begin{align*} + c_{n}''\,=\,P_n^{-1}\cdot c_n\,&= P_n^{-1}\cdot P_{n}\cdot G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ + &= G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ +\end{align*} Eine weitere Vereinfachung ist nun möglich, -weil $P_n^{-1}​$ einerseits auch eine gewöhnliche Permutationsmatrix ist -und andererseits ein zufälliger Fehlerwektor $e_n$ multipliziert mit einer Permutationsmatrix -wiederum einen gleichwertigen, zufälligen Fehlerwektor $e_n'$ ergibt. -\[ - \begin{align*}​ - c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\​ - &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad \quad | \,​ - e'_n\,=\,P_n^{-1}\cdot e_n​ - \end{align*} -\] - -Dank des Linearcodes können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, +weil $P_n^{-1}$ einerseits auch eine gewöhnliche Permutationsmatrix ist +und andererseits ein zufälliger Fehlervektor $e_n$ multipliziert mit einer Permutationsmatrix +wiederum einen gleichwertigen, zufälligen Fehlervektor $e_n'$ ergibt. +\begin{align*} + c_{n}''\,&=\,G_{n,k}\cdot S_{k}\cdot d_k + P_n^{-1}\cdot e_n \\ + &=\,G_{n,k}\cdot S_{k}\cdot d_k + e'_n\quad \quad \quad | \, + e'_n\,=\,P_n^{-1}\cdot e_n +\end{align*} +Dank des fehlerkorrigierenden Codes, der durch die implizite Multiplikation mittels $G_{n,k}$ auf die Daten angewendet wurde, +können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, entfernt werden. Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt, wird die Operation durch eine Funktion dargestellt. Wie dieser Decoder genau aufgebaut ist ist, hängt vom verwendeten Linearcode ab. +\begin{align*} + c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\ + &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\ + &=S_{k}\cdot d_k +\end{align*} +Zum Schluss wird das inzwischen fast entschlüsselte Codewort $c'_k$ mit der inversen der zufälligen Binärmatrix $S^{-1}$ multipliziert, +womit der Inhalt der ursprünglichen Nachricht nun wiederhergestellt wurde. +\begin{align*} + c_{k}'\,&=S_{k}\cdot d_k \quad | \cdot S_k^{-1}\\ + d'_{k}\,=\,S_{k}^{-1} \cdot c'_k&=S_{k}^{-1} \cdot S_{k}\cdot d_k\\ + &=d_k +\end{align*} -\[ - \begin{align*}​ - c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\​ - &=\text{Linear-Code-Decoder($G_{n,k}\cdot S_{k}\cdot d_k + e'_n$)}\\​ - &=S_{k}\cdot d_k - \end{align*} -\] \ No newline at end of file +\subsection{Beispiel} + +TODO: +-alle Beispielmatrizen- und Vektoren hierhin zügeln, numerisches Beispiel kreieren\\ +-erläutern des 7/4-codes (ja/nein)? \ No newline at end of file diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib index 56f2d19..52aa166 100644 --- a/buch/papers/mceliece/references.bib +++ b/buch/papers/mceliece/references.bib @@ -13,26 +13,6 @@ day = {29} } -@book{mceliece:numerical-analysis, - title = {Numerical Analysis}, - author = {David Kincaid and Ward Cheney}, - publisher = {American Mathematical Society}, - year = {2002}, - isbn = {978-8-8218-4788-6}, - inseries = {Pure and applied undegraduate texts}, - volume = {2} -} - -@article{mceliece:mendezmueller, - author = { Tabea Méndez and Andreas Müller }, - title = { Noncommutative harmonic analysis and image registration }, - journal = { Appl. Comput. Harmon. Anal.}, - year = 2019, - volume = 47, - pages = {607--627}, - url = {https://doi.org/10.1016/j.acha.2017.11.004} -} - @online{mceliece:lorenz, title = {Cryptography based on error correcting codes}, url = {https://algo.epfl.ch/_media/en/projects/lorenz_thesis.pdf}, @@ -40,4 +20,21 @@ year = {2021}, month = {7}, day = {29} +} + +@online{mceliece:shor, + title = {Shor's algorithm}, + url = {https://en.wikipedia.org/wiki/Shor%27s_algorithm}, + year = {2021}, + month = {8}, + day = {9} +} + +@online{mceliece:CodeBasedCrypto, + title = {Code based cryptography and steganography}, + url = {https://www.researchgate.net/publication/268009418_Code_Based_Cryptography_and_Steganography}, + date = {2013-05-30}, + year = {2021}, + month = {8}, + day = {9} } \ No newline at end of file -- cgit v1.2.1 From d1de888f9a0bd9f6940827944943ae6486eeae82 Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Mon, 9 Aug 2021 23:29:00 +0200 Subject: =?UTF-8?q?corrected=20some=20=C2=B4=C2=B4...''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/mceliece/fazit.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex index 3451250..d618993 100644 --- a/buch/papers/mceliece/fazit.tex +++ b/buch/papers/mceliece/fazit.tex @@ -38,8 +38,8 @@ Weiter ist aber bekannt, dass mithilfe des sogenannten Shor-Algorithmuses \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde. Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen. -Das McEliece-System hingegen beruht auf dem Problem des "Syndrome decoding" (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). -Für das "Syndrome decoding" sind bis heute keine Methoden bekannt, +Das McEliece-System hingegen beruht auf dem Problem des ``Syndrome decoding'' (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). +Für das ``Syndrome decoding'' sind bis heute keine Methoden bekannt, welche nennenswerte Vorteile gegenüber dem durchprobieren (brute-force) bringen, auch nicht mithilfe eines Quantencomputers. \begin{center} -- cgit v1.2.1 From ce9f4591847c6bd2dc6ebaa30fc5d72714e0280c Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 10 Aug 2021 06:37:20 +0200 Subject: new measurements --- buch/papers/multiplikation/code/MM | Bin 26848 -> 0 bytes buch/papers/multiplikation/code/MM.c | 19 +- buch/papers/multiplikation/code/MM.py | 77 ++++---- buch/papers/multiplikation/code/c_matrix.h | 204 ++++++++++++++------- buch/papers/multiplikation/code/c_meas_4096.pdf | Bin 17448 -> 22360 bytes buch/papers/multiplikation/code/ci.txt | 0 buch/papers/multiplikation/code/helper_class.py | 3 +- buch/papers/multiplikation/code/meas/MM.txt | 118 +++++++++++- buch/papers/multiplikation/code/meas/MM_dc.txt | 118 +++++++++++- buch/papers/multiplikation/code/meas/blas.txt | 114 +++++++++++- buch/papers/multiplikation/code/meas/ci/MM.txt | 11 ++ buch/papers/multiplikation/code/meas/ci/Wino.txt | 11 ++ buch/papers/multiplikation/code/meas/ci/blas.txt | 11 ++ buch/papers/multiplikation/code/meas/ci/dc.txt | 11 ++ .../multiplikation/code/meas/ci/strassen.txt | 11 ++ .../multiplikation/code/meas/old/8196/MM.txt | 1 + .../multiplikation/code/meas/old/8196/MM_dc.txt | 1 + .../multiplikation/code/meas/old/8196/blas.txt | 1 + .../multiplikation/code/meas/old/8196/strassen.txt | 1 + .../multiplikation/code/meas/old/8196/winograd.txt | 1 + buch/papers/multiplikation/code/meas/old/MM.txt | 12 ++ buch/papers/multiplikation/code/meas/old/MM_dc.txt | 12 ++ buch/papers/multiplikation/code/meas/old/blas.txt | 12 ++ .../multiplikation/code/meas/old/strassen.txt | 12 ++ .../multiplikation/code/meas/old/winograd.txt | 12 ++ buch/papers/multiplikation/code/meas/strassen.txt | 122 ++++++++++-- buch/papers/multiplikation/code/meas/winograd.txt | 116 +++++++++++- buch/papers/multiplikation/code/meas_4096.pdf | Bin 12952 -> 17369 bytes buch/papers/multiplikation/code/meas_4096.txt | 6 + buch/papers/multiplikation/images/algo_tab.pdf | Bin 0 -> 34251 bytes buch/papers/multiplikation/images/algo_tab.tex | 122 ++++++++++++ buch/papers/multiplikation/images/meas_c.pdf | Bin 23161 -> 23552 bytes buch/papers/multiplikation/images/meas_c.tex | 9 +- buch/papers/multiplikation/loesungsmethoden.tex | 48 ++--- buch/papers/multiplikation/problemstellung.tex | 145 ++++++++------- 35 files changed, 1096 insertions(+), 245 deletions(-) delete mode 100755 buch/papers/multiplikation/code/MM create mode 100644 buch/papers/multiplikation/code/ci.txt create mode 100644 buch/papers/multiplikation/code/meas/ci/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/ci/Wino.txt create mode 100644 buch/papers/multiplikation/code/meas/ci/blas.txt create mode 100644 buch/papers/multiplikation/code/meas/ci/dc.txt create mode 100644 buch/papers/multiplikation/code/meas/ci/strassen.txt create mode 100644 buch/papers/multiplikation/code/meas/old/8196/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt create mode 100644 buch/papers/multiplikation/code/meas/old/8196/blas.txt create mode 100644 buch/papers/multiplikation/code/meas/old/8196/strassen.txt create mode 100644 buch/papers/multiplikation/code/meas/old/8196/winograd.txt create mode 100644 buch/papers/multiplikation/code/meas/old/MM.txt create mode 100644 buch/papers/multiplikation/code/meas/old/MM_dc.txt create mode 100644 buch/papers/multiplikation/code/meas/old/blas.txt create mode 100644 buch/papers/multiplikation/code/meas/old/strassen.txt create mode 100644 buch/papers/multiplikation/code/meas/old/winograd.txt create mode 100644 buch/papers/multiplikation/images/algo_tab.pdf create mode 100644 buch/papers/multiplikation/images/algo_tab.tex (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM deleted file mode 100755 index d52dda4..0000000 Binary files a/buch/papers/multiplikation/code/MM and /dev/null differ 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 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 index 5236afb..b42082f 100644 Binary files a/buch/papers/multiplikation/code/c_meas_4096.pdf and b/buch/papers/multiplikation/code/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/ci.txt b/buch/papers/multiplikation/code/ci.txt new file mode 100644 index 0000000..e69de29 diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py index 485fa76..ad67909 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)) + n = np.logspace(1,4,4,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..e4ad1ba --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/MM.txt @@ -0,0 +1,11 @@ +0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +2.999999999999999864e-07 -4.555021440490437016e-08 6.455502144049043430e-07 +1.800000000000000130e-06 1.498379044967867836e-06 2.101620955032132425e-06 +1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05 +8.930000000000000221e-05 7.942767152586658090e-05 9.917232847413342352e-05 +6.922999999999999684e-04 6.611729768299406300e-04 7.234270231700593067e-04 +5.684200000000000363e-03 5.587928563282692010e-03 5.780471436717308717e-03 +5.177150000000000502e-02 5.161257221154376407e-02 5.193042778845624596e-02 +5.062468000000001078e-01 5.001729723042721565e-01 5.123206276957280592e-01 +4.504808599999999608e+00 4.404751183933223402e+00 4.604866016066775813e+00 +1.292894618999999921e+02 1.292188312556721144e+02 1.293600925443278697e+02 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..4ec0106 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/Wino.txt @@ -0,0 +1,11 @@ +9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 +0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +2.000000000000000333e-06 1.999999999999999909e-06 2.000000000000000757e-06 +1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05 +8.329999999999999189e-05 7.952898408510092581e-05 8.707101591489905797e-05 +6.478999999999999733e-04 6.173195729945008762e-04 6.784804270054990705e-04 +5.287299999999999986e-03 5.226513788941518357e-03 5.348086211058481615e-03 +5.267459999999999504e-02 5.240389179019239174e-02 5.294530820980759833e-02 +5.249752000000000862e-01 5.233835466989910090e-01 5.265668533010091634e-01 +4.671160999999999675e+00 4.572509907501117965e+00 4.769812092498881384e+00 +1.366769777000000090e+02 1.363957928284978891e+02 1.369581625715021289e+02 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..5d7ff7b --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/blas.txt @@ -0,0 +1,11 @@ +9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 +0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 +3.899999999999999929e-06 1.864058553533107683e-06 5.935941446466892176e-06 +2.100000000000000223e-05 1.871284586667546976e-05 2.328715413332453469e-05 +1.858000000000000168e-04 1.595988766828141249e-04 2.120011233171859087e-04 +1.264900000000000009e-03 1.221091632895032926e-03 1.308708367104967091e-03 +9.648900000000000185e-03 9.575266909835235610e-03 9.722533090164764760e-03 +7.737650000000000083e-02 7.445101996220353235e-02 8.030198003779646931e-02 +7.643868000000000329e-01 7.545731380187049586e-01 7.742004619812951072e-01 +7.632099399999999534e+00 7.613379481172315444e+00 7.650819318827683624e+00 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..df268a9 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/dc.txt @@ -0,0 +1,11 @@ +2.999999999999999864e-07 -3.786471488222973584e-07 9.786471488222972253e-07 +1.100000000000000056e-06 8.737842837259009412e-07 1.326215716274099171e-06 +8.600000000000000670e-06 6.210712693650135778e-06 1.098928730634986641e-05 +7.819999999999998990e-05 7.075203863371232107e-05 8.564796136628765873e-05 +5.940000000000001269e-04 5.439534118129448707e-04 6.440465881870553830e-04 +4.433900000000000167e-03 4.349138038034851966e-03 4.518661961965148369e-03 +3.484430000000000166e-02 3.435947773230259988e-02 3.532912226769740344e-02 +2.948473000000000344e-01 2.887830472415335303e-01 3.009115527584665384e-01 +2.222850699999999957e+00 2.193855611791002858e+00 2.251845788208997057e+00 +1.765923450000000372e+01 1.762601016688562439e+01 1.769245883311438305e+01 +1.416103936000000090e+02 1.414816028568733657e+02 1.417391843431266523e+02 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..983fed9 --- /dev/null +++ b/buch/papers/multiplikation/code/meas/ci/strassen.txt @@ -0,0 +1,11 @@ +0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +2.099999999999999799e-06 1.572163328693768390e-06 2.627836671306231420e-06 +1.130000000000000023e-05 7.484018077564905836e-06 1.511598192243509547e-05 +7.069999999999999733e-05 6.500652995675561090e-05 7.639347004324438376e-05 +5.040999999999999474e-04 4.766428619697257881e-04 5.315571380302741610e-04 +3.595999999999999804e-03 3.528938496002300557e-03 3.663061503997699052e-03 +2.544810000000000128e-02 2.513634544137222787e-02 2.575985455862777468e-02 +1.781816999999999984e-01 1.773043765864557864e-01 1.790590234135442105e-01 +1.255500000000000060e+00 1.247847949398645628e+00 1.263152050601354492e+00 +8.830237099999999728e+00 8.790366960647805428e+00 8.870107239352194028e+00 +6.190186909999999898e+01 6.183048085945843297e+01 6.197325734054156499e+01 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 index e889d17..9e8fcea 100644 Binary files a/buch/papers/multiplikation/code/meas_4096.pdf and b/buch/papers/multiplikation/code/meas_4096.pdf differ 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/images/algo_tab.pdf b/buch/papers/multiplikation/images/algo_tab.pdf new file mode 100644 index 0000000..7f2bb4f Binary files /dev/null and b/buch/papers/multiplikation/images/algo_tab.pdf differ 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/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf index 3a4cfd8..e6af618 100644 Binary files a/buch/papers/multiplikation/images/meas_c.pdf and b/buch/papers/multiplikation/images/meas_c.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex index 818a7e6..647a322 100644 --- a/buch/papers/multiplikation/images/meas_c.tex +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -43,8 +43,8 @@ \begin{tikzpicture} \begin{axis}[ xmode=log, ymode=log, -xmin=60, xmax=5000, -ymin=1e-4, ymax=2e3, +xmin=60, xmax=10000, +ymin=1e-4, ymax=2e4, grid=both, major grid style={black!50}, xlabel = data Input ($n$), @@ -70,6 +70,7 @@ width=12cm, height=8cm, (1024,4.539413) (2048,130.627663) (4096,1179.261048) +(8192,10071.512655) }; \addlegendentry{Strassen} \addplot [ color=black, @@ -86,6 +87,7 @@ width=12cm, height=8cm, (1024,8.457472 ) (2048,59.267256) (4096,414.648901) +(8192,3014.235467) }; \addlegendentry{MM div and conq} @@ -103,6 +105,7 @@ width=12cm, height=8cm, (1024,19.928951 ) (2048,159.333884 ) (4096,1147.106865) +(8192,9606.402522) }; \addlegendentry{MM} @@ -120,6 +123,7 @@ width=12cm, height=8cm, (1024,4.162845 ) (2048,125.909034 ) (4096,1111.312696) +(8192,9376.173434) }; \addlegendentry{BLAS} \addplot[ color=blue, @@ -136,6 +140,7 @@ width=12cm, height=8cm, (1024,0.704748 ) (2048,6.845095 ) (4096,55.845038) +(8192,478.429957) }; \end{axis} \end{tikzpicture} diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index a7612e1..464085d 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -39,13 +39,13 @@ Die \texttt{for i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix, \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. @@ -68,7 +68,7 @@ Das Matrizen Produkt \end{bmatrix}, \end{equation} \begin{equation} -\mathbf{C}_{ij} = \sum_{k=1}2n \mathbf{A}_{ik} \mathbf{B}_{kj} +\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. @@ -109,7 +109,7 @@ Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} \ci 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 \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. 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. @@ -202,7 +202,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. @@ -267,7 +267,7 @@ 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. 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} @@ -336,33 +336,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. -\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 +379,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} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index e53b0de..c8ba274 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -14,87 +14,102 @@ Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der S 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$. +Als Beispiel: benötigt eine Funktion $g$ $\mathcal{O} (n^2 )$ Multiplikationen, so wächst $f$ mit $\mathcal{O} (n+ n^2 )$ nicht wesentlich schneller falls $x\to\infty$. Vereinfacht werden f\"ur Algorithmen die folgende Notation 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} 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} + +\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} + \end{tabular} +\end{table} + +\begin{table} + \begin{tabular}[t]{ll} + \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} \paragraph{Beschr\"ankter Algorithmus} @@ -111,7 +126,7 @@ 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} -- cgit v1.2.1 From 3c59b60807e1d1238bf591e238a42574327246ca Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 10 Aug 2021 07:29:49 +0200 Subject: update plots --- buch/papers/multiplikation/code/MM.py | 22 ++-- buch/papers/multiplikation/code/c_meas_4096.pdf | Bin 22360 -> 22207 bytes buch/papers/multiplikation/code/helper_class.py | 4 +- buch/papers/multiplikation/code/meas/ci/MM.txt | 11 -- buch/papers/multiplikation/code/meas/ci/Wino.txt | 11 -- buch/papers/multiplikation/code/meas/ci/blas.txt | 11 -- buch/papers/multiplikation/code/meas/ci/dc.txt | 11 -- .../multiplikation/code/meas/ci/strassen.txt | 11 -- buch/papers/multiplikation/code/meas_4096.pdf | Bin 17369 -> 18300 bytes buch/papers/multiplikation/images/meas_c.pdf | Bin 23552 -> 24028 bytes buch/papers/multiplikation/images/meas_c.tex | 115 +++++++++++---------- buch/papers/multiplikation/images/meas_python.pdf | Bin 21700 -> 26004 bytes buch/papers/multiplikation/images/meas_python.tex | 53 ++++++---- buch/papers/multiplikation/images/x.pdf | Bin 0 -> 23603 bytes 14 files changed, 105 insertions(+), 144 deletions(-) create mode 100644 buch/papers/multiplikation/images/x.pdf (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py index 8a6824a..8057850 100644 --- a/buch/papers/multiplikation/code/MM.py +++ b/buch/papers/multiplikation/code/MM.py @@ -291,19 +291,21 @@ def mean_confidence_interval(data, confidence=0.95): 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, m-h, m+h + return m, h # test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if __name__ == '__main__': - A = plot_c_res(10, 4096) - name = ['MM', 'Wino', 'blas', 'strassen', 'dc'] - for i in range(5): - ci_inner = [] - for j in range(11): - ci_inner.append(mean_confidence_interval(A[i][j*10:(j+1)*10])) - np.savetxt('meas/ci/' + name[i]+'.txt',ci_inner) - - # 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) diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf index b42082f..f637ae4 100644 Binary files a/buch/papers/multiplikation/code/c_meas_4096.pdf and b/buch/papers/multiplikation/code/c_meas_4096.pdf differ diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py index ad67909..3b74f67 100755 --- a/buch/papers/multiplikation/code/helper_class.py +++ b/buch/papers/multiplikation/code/helper_class.py @@ -101,6 +101,6 @@ if __name__ == '__main__': helper = Helper() # n = np.arange(2,10) - n = np.logspace(1,4,4,base=2,dtype=(np.int)) + n = np.logspace(1,11,11,base=2,dtype=(np.int)) # n=[8192] - C = helper.write_c_matrix(n) + # C = helper.write_c_matrix(n) diff --git a/buch/papers/multiplikation/code/meas/ci/MM.txt b/buch/papers/multiplikation/code/meas/ci/MM.txt index e4ad1ba..e69de29 100644 --- a/buch/papers/multiplikation/code/meas/ci/MM.txt +++ b/buch/papers/multiplikation/code/meas/ci/MM.txt @@ -1,11 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -2.999999999999999864e-07 -4.555021440490437016e-08 6.455502144049043430e-07 -1.800000000000000130e-06 1.498379044967867836e-06 2.101620955032132425e-06 -1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05 -8.930000000000000221e-05 7.942767152586658090e-05 9.917232847413342352e-05 -6.922999999999999684e-04 6.611729768299406300e-04 7.234270231700593067e-04 -5.684200000000000363e-03 5.587928563282692010e-03 5.780471436717308717e-03 -5.177150000000000502e-02 5.161257221154376407e-02 5.193042778845624596e-02 -5.062468000000001078e-01 5.001729723042721565e-01 5.123206276957280592e-01 -4.504808599999999608e+00 4.404751183933223402e+00 4.604866016066775813e+00 -1.292894618999999921e+02 1.292188312556721144e+02 1.293600925443278697e+02 diff --git a/buch/papers/multiplikation/code/meas/ci/Wino.txt b/buch/papers/multiplikation/code/meas/ci/Wino.txt index 4ec0106..e69de29 100644 --- a/buch/papers/multiplikation/code/meas/ci/Wino.txt +++ b/buch/papers/multiplikation/code/meas/ci/Wino.txt @@ -1,11 +0,0 @@ -9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -2.000000000000000333e-06 1.999999999999999909e-06 2.000000000000000757e-06 -1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05 -8.329999999999999189e-05 7.952898408510092581e-05 8.707101591489905797e-05 -6.478999999999999733e-04 6.173195729945008762e-04 6.784804270054990705e-04 -5.287299999999999986e-03 5.226513788941518357e-03 5.348086211058481615e-03 -5.267459999999999504e-02 5.240389179019239174e-02 5.294530820980759833e-02 -5.249752000000000862e-01 5.233835466989910090e-01 5.265668533010091634e-01 -4.671160999999999675e+00 4.572509907501117965e+00 4.769812092498881384e+00 -1.366769777000000090e+02 1.363957928284978891e+02 1.369581625715021289e+02 diff --git a/buch/papers/multiplikation/code/meas/ci/blas.txt b/buch/papers/multiplikation/code/meas/ci/blas.txt index 5d7ff7b..e69de29 100644 --- a/buch/papers/multiplikation/code/meas/ci/blas.txt +++ b/buch/papers/multiplikation/code/meas/ci/blas.txt @@ -1,11 +0,0 @@ -9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07 -3.899999999999999929e-06 1.864058553533107683e-06 5.935941446466892176e-06 -2.100000000000000223e-05 1.871284586667546976e-05 2.328715413332453469e-05 -1.858000000000000168e-04 1.595988766828141249e-04 2.120011233171859087e-04 -1.264900000000000009e-03 1.221091632895032926e-03 1.308708367104967091e-03 -9.648900000000000185e-03 9.575266909835235610e-03 9.722533090164764760e-03 -7.737650000000000083e-02 7.445101996220353235e-02 8.030198003779646931e-02 -7.643868000000000329e-01 7.545731380187049586e-01 7.742004619812951072e-01 -7.632099399999999534e+00 7.613379481172315444e+00 7.650819318827683624e+00 diff --git a/buch/papers/multiplikation/code/meas/ci/dc.txt b/buch/papers/multiplikation/code/meas/ci/dc.txt index df268a9..e69de29 100644 --- a/buch/papers/multiplikation/code/meas/ci/dc.txt +++ b/buch/papers/multiplikation/code/meas/ci/dc.txt @@ -1,11 +0,0 @@ -2.999999999999999864e-07 -3.786471488222973584e-07 9.786471488222972253e-07 -1.100000000000000056e-06 8.737842837259009412e-07 1.326215716274099171e-06 -8.600000000000000670e-06 6.210712693650135778e-06 1.098928730634986641e-05 -7.819999999999998990e-05 7.075203863371232107e-05 8.564796136628765873e-05 -5.940000000000001269e-04 5.439534118129448707e-04 6.440465881870553830e-04 -4.433900000000000167e-03 4.349138038034851966e-03 4.518661961965148369e-03 -3.484430000000000166e-02 3.435947773230259988e-02 3.532912226769740344e-02 -2.948473000000000344e-01 2.887830472415335303e-01 3.009115527584665384e-01 -2.222850699999999957e+00 2.193855611791002858e+00 2.251845788208997057e+00 -1.765923450000000372e+01 1.762601016688562439e+01 1.769245883311438305e+01 -1.416103936000000090e+02 1.414816028568733657e+02 1.417391843431266523e+02 diff --git a/buch/papers/multiplikation/code/meas/ci/strassen.txt b/buch/papers/multiplikation/code/meas/ci/strassen.txt index 983fed9..e69de29 100644 --- a/buch/papers/multiplikation/code/meas/ci/strassen.txt +++ b/buch/papers/multiplikation/code/meas/ci/strassen.txt @@ -1,11 +0,0 @@ -0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -2.099999999999999799e-06 1.572163328693768390e-06 2.627836671306231420e-06 -1.130000000000000023e-05 7.484018077564905836e-06 1.511598192243509547e-05 -7.069999999999999733e-05 6.500652995675561090e-05 7.639347004324438376e-05 -5.040999999999999474e-04 4.766428619697257881e-04 5.315571380302741610e-04 -3.595999999999999804e-03 3.528938496002300557e-03 3.663061503997699052e-03 -2.544810000000000128e-02 2.513634544137222787e-02 2.575985455862777468e-02 -1.781816999999999984e-01 1.773043765864557864e-01 1.790590234135442105e-01 -1.255500000000000060e+00 1.247847949398645628e+00 1.263152050601354492e+00 -8.830237099999999728e+00 8.790366960647805428e+00 8.870107239352194028e+00 -6.190186909999999898e+01 6.183048085945843297e+01 6.197325734054156499e+01 diff --git a/buch/papers/multiplikation/code/meas_4096.pdf b/buch/papers/multiplikation/code/meas_4096.pdf index 9e8fcea..ecf2cff 100644 Binary files a/buch/papers/multiplikation/code/meas_4096.pdf and b/buch/papers/multiplikation/code/meas_4096.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf index e6af618..faf347e 100644 Binary files a/buch/papers/multiplikation/images/meas_c.pdf and b/buch/papers/multiplikation/images/meas_c.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex index 647a322..fe2bd2f 100644 --- a/buch/papers/multiplikation/images/meas_c.tex +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -43,8 +43,8 @@ \begin{tikzpicture} \begin{axis}[ xmode=log, ymode=log, -xmin=60, xmax=10000, -ymin=1e-4, ymax=2e4, +xmin=30, xmax=10000, +ymin=1e-5, ymax=2e4, grid=both, major grid style={black!50}, xlabel = data Input ($n$), @@ -57,35 +57,36 @@ width=12cm, height=8cm, ] \addlegendentry{Winograd} \addplot[ color=purple, + 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) }; @@ -93,17 +94,17 @@ width=12cm, height=8cm, \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) }; @@ -111,34 +112,34 @@ width=12cm, height=8cm, \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, ] 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) }; diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf index cea2232..cea4f4b 100644 Binary files a/buch/papers/multiplikation/images/meas_python.pdf and b/buch/papers/multiplikation/images/meas_python.pdf differ diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex index ee4db43..c8892be 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=4100, +ymin=0.00001, ymax=60000, grid=both, major grid style={black!50}, xlabel = data input ($n$), @@ -68,7 +68,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 +80,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 +101,8 @@ width=12cm, height=8cm, (256,13.27 ) (512,105.397 ) (1024,847.321 ) +(2046,7375.93) +(4096,58466) }; \addlegendentry{MM} @@ -113,25 +118,33 @@ 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 { + \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 ) -% }; + (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) + }; + \addplot [ + domain= 1:5000, + samples=100, + color=yellow, + ] + {(x-1000)^3}; + \addlegendentry{$\mathcal{O}\left(n^3\right)$} \end{axis} \end{tikzpicture} \end{document} - - - diff --git a/buch/papers/multiplikation/images/x.pdf b/buch/papers/multiplikation/images/x.pdf new file mode 100644 index 0000000..da4956f Binary files /dev/null and b/buch/papers/multiplikation/images/x.pdf differ -- cgit v1.2.1 From 75f4f6666396ffbc403d04e6b533b69d38fc065b Mon Sep 17 00:00:00 2001 From: Reto Fritsche Date: Tue, 10 Aug 2021 23:12:40 +0200 Subject: found some typos, removed them, some other small changes --- buch/papers/mceliece/aufbau.tex | 11 ++++++----- buch/papers/mceliece/fazit.tex | 6 +++--- buch/papers/mceliece/funktionsweise.tex | 4 ++-- buch/papers/mceliece/references.bib | 8 ++++++++ 4 files changed, 19 insertions(+), 10 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/mceliece/aufbau.tex b/buch/papers/mceliece/aufbau.tex index 521488d..200cb7b 100644 --- a/buch/papers/mceliece/aufbau.tex +++ b/buch/papers/mceliece/aufbau.tex @@ -10,7 +10,8 @@ Das McEliece-Kryptosystem besteht aus folgenden Elementen: \subsection{Datenvektor $d_k$ \label{mceliece:subsection:d_k}} In diesem Vektor der Länge $k$ sind die zu verschlüsselnden Daten enthalten. -Beispielsweise + +Beispiel: \[d_4= \begin{pmatrix} 1\\ @@ -25,7 +26,7 @@ Beispielsweise $S_k$ ist eine Binäre Zufallsmatrix der Grösse $k \times k$. Auch muss diese Matrix in $\mathbb{F}_2$ invertierbar sein. Für kleine Matrizen kann durchaus jedes Matrizenelement zufällig generiert werden, -wobei danach mithilfe des Gauss-Algorythmusses deren Inverse bestimmt werden kann. +wobei danach mithilfe des Gauss-Algorithmus deren Inverse bestimmt werden kann. Da eine solche Matrix möglicherweise singulär ist, muss in diesem Fall eine neue Zufallsmatrix erzeugt werden. Für grössere Matrizen existieren bessere Methoden, auf welche hier nicht weiter eingegangen wird \cite{mceliece:GenerationRandMatrix}. @@ -53,9 +54,9 @@ Beispiel: \label{mceliece:subsection:g_nk}} Das wichtigste Element des McEliece-Systems ist ein fehlerkorrigierender Code, der in der Lage ist, $t$ Fehler zu korrigieren. -Im Zusammenhang mit McEliece werden dabei meist Goppa-Codes verwendet, -es können prinzipiell auch andere Codes wie beispielsweise Reed-Solomin verwendet werden, -jedoch besitzen einige Codes Schwachstellen \cite{mceliece:lorenz}. +Im Zusammenhang mit McEliece werden dabei meist binäre Goppa-Codes \cite{mceliece:goppa} verwendet, +es können prinzipiell auch andere Codes wie beispielsweise Reed-Solomon verwendet werden, +jedoch besitzen einige (unter anderem auch Reed-Solomon) Codes Schwachstellen \cite{mceliece:lorenz}. Das Codieren mit diesem linearen Code kann mithilfe dessen Generatormatrix $G_{n,k}$ erfolgen. Da es sich um einen fehlerkorrigierenden Code handelt, wird das Codewort länger als das Datenwort, diff --git a/buch/papers/mceliece/fazit.tex b/buch/papers/mceliece/fazit.tex index d618993..186708b 100644 --- a/buch/papers/mceliece/fazit.tex +++ b/buch/papers/mceliece/fazit.tex @@ -35,12 +35,12 @@ Grosse unterschiede zwischen den beiden Kryptosystemen gibt es jedoch bei der Si Der Kern der RSA-Verschlüsselung beruht auf dem Problem, eine grosse Zahl in ihre beiden Primfaktoren zu zerlegen. Bei genügend grossen Zahlen ist diese Zerlegung auch mit den heute besten verfügbaren Computern kaum innerhalb vernünftiger Zeit zu lösen. Weiter ist aber bekannt, -dass mithilfe des sogenannten Shor-Algorithmuses \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, +dass mithilfe des sogenannten Shor-Algorithmus \cite{mceliece:shor} und einem Quantencomputer auch diese Zerlegung zügig realisiert werden könnte, was zur Folge hätte, dass die Verschlüsselung von RSA unwirksam würde. Zurzeit sind die Quantencomputer jedoch noch bei weitem nicht in der Lage, grosse Zahlen mithilfe dieses Algorithmuses zu zerlegen. -Das McEliece-System hingegen beruht auf dem Problem des ``Syndrome decoding'' (Korrektur von Bitfehlern eines Codewortes, das mit dem entsprechenden Linearcode codiert wurde). +Das McEliece-System hingegen beruht auf dem Problem des ``Syndrome decoding'' (Korrektur von Bitfehlern eines Codewortes, das mit einem entsprechenden Linearcode codiert wurde). Für das ``Syndrome decoding'' sind bis heute keine Methoden bekannt, -welche nennenswerte Vorteile gegenüber dem durchprobieren (brute-force) bringen, +welche nennenswerte Vorteile gegenüber dem Durchprobieren (brute-force) bringen, auch nicht mithilfe eines Quantencomputers. \begin{center} \begin{tabular}{c|c|c} diff --git a/buch/papers/mceliece/funktionsweise.tex b/buch/papers/mceliece/funktionsweise.tex index 93bb1c7..7c69b13 100644 --- a/buch/papers/mceliece/funktionsweise.tex +++ b/buch/papers/mceliece/funktionsweise.tex @@ -18,7 +18,7 @@ Dazu erstellt sie die einzelnen Matrizen $S_k$, $G_{n,k}$ und $P_n$. Diese drei einzelnen Matrizen bilden den privaten Schlüssel von Alice und sollen geheim bleiben. Der öffentliche Schlüssel $K_{n,k}$ hingegen berechnet sich -aus der Multiplikation der privaten Matrizen\ref{mceliece:subsection:k_nk} +aus der Multiplikation der privaten Matrizen (Abschnitt \ref{mceliece:subsection:k_nk}) und wird anschliessend Bob zugestellt. \subsection{Verschlüsselung @@ -61,7 +61,7 @@ können nun die Bitfehler, verursacht durch den Fehlervektor $e'_n$, entfernt werden. Da es sich bei diesem Schritt nicht um eine einfache Matrixmultiplikation handelt, wird die Operation durch eine Funktion dargestellt. -Wie dieser Decoder genau aufgebaut ist ist, +Wie dieser Decoder genau aufgebaut ist, hängt vom verwendeten Linearcode ab. \begin{align*} c_{k}'\,&=\text{Linear-Code-Decoder($c''_n$)}\\ diff --git a/buch/papers/mceliece/references.bib b/buch/papers/mceliece/references.bib index 52aa166..0388ff4 100644 --- a/buch/papers/mceliece/references.bib +++ b/buch/papers/mceliece/references.bib @@ -37,4 +37,12 @@ year = {2021}, month = {8}, day = {9} +} + +@online{mceliece:goppa, + title = {Binary Goppa code}, + url = {https://en.m.wikipedia.org/wiki/Binary_Goppa_code}, + year = {2021}, + month = {8}, + day = {10} } \ No newline at end of file -- cgit v1.2.1 From 23df345f724b32bb8d5ad6f103c0581458c977a9 Mon Sep 17 00:00:00 2001 From: JODBaer Date: Wed, 11 Aug 2021 17:04:24 +0200 Subject: =?UTF-8?q?=C3=BCbergang=20Endlichek=C3=B6rper=20vereinfacht.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buch/papers/reedsolomon/dtf.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index 7c88c16..d05f60f 100644 --- a/buch/papers/reedsolomon/dtf.tex +++ b/buch/papers/reedsolomon/dtf.tex @@ -117,6 +117,6 @@ Das Syndrom entstand durch die Wahl ${f_{64}}=0$ bis ${f}_{N-1}=0$.(graue koeffi \par Die Polynominterpolation und die Fourier-Transformation rechnen beide mit reeleen 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 Aproximation zu entkommen, verlassen wir die reeleen Zahlen und gehen zum endlichen Körpern, oder auch Galios-Körper genannt. +Dieser bietet uns eingie Vorteile. \ No newline at end of file -- cgit v1.2.1 From 6bab37ba5c4d1875f3c99f338a554537219013f6 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Wed, 11 Aug 2021 21:22:29 +0200 Subject: update multiplikation --- buch/papers/multiplikation/images/meas_python.pdf | Bin 26004 -> 22384 bytes buch/papers/multiplikation/images/meas_python.tex | 44 ++++++++++------------ buch/papers/multiplikation/images/x.pdf | Bin 23603 -> 0 bytes buch/papers/multiplikation/loesungsmethoden.tex | 30 ++++++++++----- 4 files changed, 39 insertions(+), 35 deletions(-) delete mode 100644 buch/papers/multiplikation/images/x.pdf (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf index cea4f4b..ab3b14b 100644 Binary files a/buch/papers/multiplikation/images/meas_python.pdf and b/buch/papers/multiplikation/images/meas_python.pdf differ diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex index c8892be..d942f46 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=4100, -ymin=0.00001, ymax=60000, +xmin=30, xmax=4200, +ymin=0.01, ymax=70000, grid=both, major grid style={black!50}, xlabel = data input ($n$), @@ -121,29 +121,23 @@ width=12cm, height=8cm, (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 ) -(2046,0.215739) -(4096,1.49159) - }; - \addplot [ - domain= 1:5000, - samples=100, - color=yellow, - ] - {(x-1000)^3}; - \addlegendentry{$\mathcal{O}\left(n^3\right)$} +% \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} diff --git a/buch/papers/multiplikation/images/x.pdf b/buch/papers/multiplikation/images/x.pdf deleted file mode 100644 index da4956f..0000000 Binary files a/buch/papers/multiplikation/images/x.pdf and /dev/null differ diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 464085d..be8c2d4 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -389,6 +389,14 @@ 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. + +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 Gr\"osse von +n = 2048 wohl eine Zeile der Matrix nicht an einer Cache Speicherstelle platzt. Diese beiden Al- +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 Algorith- +men ist dies nicht der Fall. + Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{multiplikation:tab:pc_config} aufgelistet. @@ -400,14 +408,15 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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} & 0.000089 & 0.000594 & 0.0005 & 0.00008 & 0.000021 \\ + \textbf{64} & 0.00069 & 0.0044 & 0.0036 & 0.00064 & 0.00018 \\ + \textbf{128} & 0.0057 & 0.035 & 0.025 & 0.0052 & 0.0012 \\ + \textbf{256} & 0.052 & 0.29 & 0.178 & 0.053 & 0.0096 \\ + \textbf{512} & 0.51 & 2.22 & 1.25 & 0.55 & 0.077 \\ + \textbf{1024} & 4.50 & 17.65 & 8.83 & 4.67 & 0.764 \\ + \textbf{2048} & 129.28 & 141.61 & 61.901 & 136.67 & 7.63 \\ + \textbf{4096} & 1111.31 & 1147.10 & 414.64 & 1179.26 & 55.84 \\ + \textbf{8192} & 9376.17 & 9606.40 & 3014.23 & 10071.51& 478.42 \\ \multicolumn{6}{c}{} \\ \hline \hline @@ -427,13 +436,14 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \textbf{n} & \textbf{MM (\textit{s})} & \textbf{MM DC (\textit{s})} & \textbf{Strassen (\textit{s})} & \textbf{Winograd (\textit{s})} & \textbf{\texttt{NumPy}(\textit{s})} \\ \hline \multicolumn{6}{c}{} \\ - \textbf{32} & 0.0240 &0.0271 & 0.04852& 0.01871 & 4.26e-05 \\ + \textbf{32} & 0.0240 &0.0271 & 0.04852& 0.01871 & 0.0000426 \\ \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{2048} & 6154.18 & 7375.93& 3860.57 & 4884.61 & 0.215 \\ + \textbf{4096} & 46813.3 & 58466 & 22904.3 & 43597.1 & 1.49 \\ \multicolumn{6}{c}{} \\ \hline \hline -- cgit v1.2.1 From 2b6637fb99a4aaebadc739b323b0ae440eb805e7 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Wed, 11 Aug 2021 21:31:37 +0200 Subject: typo --- buch/papers/multiplikation/loesungsmethoden.tex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index be8c2d4..0760719 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -265,7 +265,7 @@ N=2n, \quad T = n^2 \\ \end{equation} 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}(n^3 )$. \begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation} @@ -391,11 +391,11 @@ Anzumerken ist, dass die Matrizenmultiplikation von \texttt{NumPy} als einzige I 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. 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 Gr\"osse von -n = 2048 wohl eine Zeile der Matrix nicht an einer Cache Speicherstelle platzt. Diese beiden Al- -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 Algorith- -men ist dies nicht der Fall. +den. +Bei den Algorithmen von Winograd und der Standardmethode hat bei einer Matrizengrösse von $n = 2048$ wohl eine Zeile der Matrize nicht an einer Cache Speicherstelle platzt. +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. -- cgit v1.2.1 From 3e51b3ff5e36bc0f03ecf8c0c1342b4a7345b1b7 Mon Sep 17 00:00:00 2001 From: michael-OST <75078383+michael-OST@users.noreply.github.com> Date: Wed, 11 Aug 2021 22:45:54 +0200 Subject: first chapters updated --- buch/papers/reedsolomon/dtf.tex | 40 +++++----- buch/papers/reedsolomon/einleitung.tex | 8 +- buch/papers/reedsolomon/idee.tex | 135 +++++++++++++++++++++------------ 3 files changed, 111 insertions(+), 72 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/reedsolomon/dtf.tex b/buch/papers/reedsolomon/dtf.tex index d05f60f..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 brauchen wir andere varianten. -Um dieser Aproximation zu entkommen, verlassen wir die reeleen Zahlen und gehen zum endlichen Körpern, oder auch Galios-Körper genannt. -Dieser bietet uns eingie Vorteile. \ No newline at end of file +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. + -- cgit v1.2.1 From e8986f6de598bf3299ff00843a56ae92f72d9ac3 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sun, 15 Aug 2021 11:43:47 +0200 Subject: Tiny change --- buch/papers/punktgruppen/crystals.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'buch/papers') 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 \] -- cgit v1.2.1 From 713ef9bbfa79eb2ae2b821da26271cdeea58834c Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 17 Aug 2021 07:41:22 +0200 Subject: update --- buch/papers/multiplikation/loesungsmethoden.tex | 54 ++++++++++++++----------- buch/papers/multiplikation/problemstellung.tex | 30 +++++++------- 2 files changed, 46 insertions(+), 38 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 0760719..ac7cb85 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -11,10 +11,9 @@ In diesem Abschnitt werden mehrere Algorithmen zur Berechnung der Matrizenmultip \subsection{Standard Algorithmus} -Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} entnommen werden. +Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} gsehen werden. Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt implementiert. 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,7 +37,6 @@ 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} (n^3)$ \subsubsection{Divide and Conquer Methode} @@ -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}} \\ @@ -233,29 +231,30 @@ 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 +Für die ursprüngliche Gleichung \eqref{multiplikation:eq:skalar} für das Skalarprodukt benötigt man $Tn$ Multiplikationen. +Im Vergleich mit der Methode von Winograd, +%\begin{equation}\label{multiplikation:eq:eff} + \begin{align}\label{multiplikation:eq:eff} + \begin{split} + 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} -\end{equation} -spart man etwas, falls $N\leq T$. +\end{align} +%\end{equation} +werden für die berechnung des Skalarproduktes weniger Multiplikationen benötigt, 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 +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{equation} \begin{split} N=2n, \quad T = n^2 \\ @@ -265,7 +264,7 @@ N=2n, \quad T = n^2 \\ \end{equation} 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}(n^3 )$. \begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation} @@ -390,9 +389,14 @@ Der Code kann im zum Buch gehörigem \textit{GitHub} \footnote{\url{https://gith 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. -In der Messung mit der Programmiersprache \texttt{C}, kann ein typischer Cache-Effekt beobachtet wer- +Die gezeigten Algorithmen haben alle eine Laufzeit der Form $\mathcal{O}(n^k) $. +Bei einer 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 beö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 Matrize nicht an einer Cache Speicherstelle platzt. +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. @@ -433,7 +437,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{tabular}{l 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 & 0.0000426 \\ @@ -490,10 +494,12 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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 Alogorithmen ist in allen Fällen grösser als bei der Standardmethode (z.B. sieben rekursive Aufrufe gegenüber drei \texttt{for}-Schleifen). +Um diesem entegenzuwirken 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 Algortihmen von Strassen oder Winograd zu einer Senkung der Laufzeit führen. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index c8ba274..a98d0e9 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -7,15 +7,15 @@ \rhead{Problemstellung} Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung 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} (n^2 )$ Multiplikationen, so wächst $f$ mit $\mathcal{O} (n+ n^2 )$ nicht wesentlich schneller falls $x\to\infty$. -Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: +Dies ist gegeben, wenn 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 folgende Sprechweise 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 @@ -26,6 +26,8 @@ Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet: \item usw. \end{itemize} +Konstanten werden nicht beachtet, eine Laufzeit von $\mathcal{O}(4n^2)$ führt, falls $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. @@ -50,7 +52,7 @@ Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomple \State \end{algorithmic} \end{algorithm} - \end{minipage} + \end{minipage} & \begin{minipage}{0.48\textwidth} \begin{algorithm}[H]\footnotesize\caption{} @@ -64,13 +66,13 @@ Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomple \EndFunction \end{algorithmic} \end{algorithm} - + \end{minipage} \end{tabular} \end{table} \begin{table} - \begin{tabular}[t]{ll} + \begin{tabular}[t]{ll} \begin{minipage}{0.48\textwidth} \begin{algorithm}[H]\footnotesize\caption{} \setlength{\lineskip}{7pt} @@ -81,15 +83,15 @@ Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomple \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} + \end{minipage} & \begin{minipage}{0.48\textwidth} \begin{algorithm}[H]\footnotesize\caption{} @@ -112,10 +114,10 @@ Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomple \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} @@ -132,6 +134,6 @@ Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt \begin{figure} \center \includegraphics[]{papers/multiplikation/images/bigo} - \caption{Verschiedene Laufzeiten} + \caption{Laufzeiten von verschiedensten Zeitkomplexitäten. 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.} \label{multiplikation:fig:bigo} \end{figure} -- cgit v1.2.1 From b8b22fc376e14491a556daeacb5e8e5d216a8251 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Thu, 19 Aug 2021 06:08:48 +0200 Subject: update --- buch/papers/multiplikation/einlteung.tex | 2 +- buch/papers/multiplikation/images/meas_c.pdf | Bin 24028 -> 23943 bytes buch/papers/multiplikation/images/meas_c.tex | 6 +++--- buch/papers/multiplikation/images/meas_python.pdf | Bin 22384 -> 22379 bytes buch/papers/multiplikation/images/meas_python.tex | 2 +- buch/papers/multiplikation/problemstellung.tex | 1 - 6 files changed, 5 insertions(+), 6 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index 9f1cb04..fab23ef 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -47,6 +47,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/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf index faf347e..6e0e2cc 100644 Binary files a/buch/papers/multiplikation/images/meas_c.pdf and b/buch/papers/multiplikation/images/meas_c.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex index fe2bd2f..a2a0505 100644 --- a/buch/papers/multiplikation/images/meas_c.tex +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -47,7 +47,7 @@ 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, @@ -56,7 +56,7 @@ width=12cm, height=8cm, log basis x={10} ] \addlegendentry{Winograd} -\addplot[ color=purple, +\addplot[ color=blue, error bars/.cd, y dir=both, y explicit, ] coordinates { %(2,1e-07) @@ -127,7 +127,7 @@ width=12cm, height=8cm, (8192,9376.173434) }; \addlegendentry{BLAS} -\addplot[ color=blue, +\addplot[ color=purple, ] coordinates { %(2,1e-07) %(4,0.0) diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf index ab3b14b..9d7730d 100644 Binary files a/buch/papers/multiplikation/images/meas_python.pdf and b/buch/papers/multiplikation/images/meas_python.pdf differ diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex index d942f46..a30d342 100644 --- a/buch/papers/multiplikation/images/meas_python.tex +++ b/buch/papers/multiplikation/images/meas_python.tex @@ -56,7 +56,7 @@ width=12cm, height=8cm, log basis x={10} ] \addlegendentry{Winograd} -\addplot[ color=purple, +\addplot[ color=blue, ] coordinates { % (2, 2.7895e-05 ) % (4, 0.000104904) diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index a98d0e9..b8c4142 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -27,7 +27,6 @@ Vereinfacht werden f\"ur Algorithmen die folgende Sprechweise verwendet: \end{itemize} Konstanten werden nicht beachtet, eine Laufzeit von $\mathcal{O}(4n^2)$ führt, falls $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. -- cgit v1.2.1 From 0c073915585da20db52db82958d50e159559e5c8 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Fri, 20 Aug 2021 08:50:43 +0200 Subject: update --- buch/papers/multiplikation/einlteung.tex | 8 +- buch/papers/multiplikation/images/bigo.pdf | Bin 28372 -> 28312 bytes buch/papers/multiplikation/images/bigo.tex | 1 + buch/papers/multiplikation/images/meas_c.pdf | Bin 23943 -> 23887 bytes buch/papers/multiplikation/images/meas_c.tex | 3 +- buch/papers/multiplikation/images/meas_python.pdf | Bin 22379 -> 22337 bytes buch/papers/multiplikation/images/meas_python.tex | 3 +- buch/papers/multiplikation/images/strassen.pdf | Bin 19970 -> 20700 bytes buch/papers/multiplikation/images/strassen.tex | 127 +++++++++++++++++++--- buch/papers/multiplikation/loesungsmethoden.tex | 62 +++++------ buch/papers/multiplikation/main.tex | 4 +- buch/papers/multiplikation/problemstellung.tex | 11 +- 12 files changed, 156 insertions(+), 63 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index fab23ef..2cfbe21 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -3,10 +3,10 @@ % % (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 @@ -34,7 +34,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}\\ diff --git a/buch/papers/multiplikation/images/bigo.pdf b/buch/papers/multiplikation/images/bigo.pdf index 8a53398..2519553 100644 Binary files a/buch/papers/multiplikation/images/bigo.pdf and b/buch/papers/multiplikation/images/bigo.pdf differ 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 index 6e0e2cc..521151e 100644 Binary files a/buch/papers/multiplikation/images/meas_c.pdf and b/buch/papers/multiplikation/images/meas_c.pdf differ diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex index a2a0505..12d3527 100644 --- a/buch/papers/multiplikation/images/meas_c.tex +++ b/buch/papers/multiplikation/images/meas_c.tex @@ -53,7 +53,8 @@ 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=blue, diff --git a/buch/papers/multiplikation/images/meas_python.pdf b/buch/papers/multiplikation/images/meas_python.pdf index 9d7730d..fe89773 100644 Binary files a/buch/papers/multiplikation/images/meas_python.pdf and b/buch/papers/multiplikation/images/meas_python.pdf differ diff --git a/buch/papers/multiplikation/images/meas_python.tex b/buch/papers/multiplikation/images/meas_python.tex index a30d342..ad43cf6 100644 --- a/buch/papers/multiplikation/images/meas_python.tex +++ b/buch/papers/multiplikation/images/meas_python.tex @@ -53,7 +53,8 @@ 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=blue, diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf index a30fdaa..6d81ff5 100644 Binary files a/buch/papers/multiplikation/images/strassen.pdf and b/buch/papers/multiplikation/images/strassen.pdf differ diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex index 5cf39b4..2e3b727 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, @@ -80,7 +80,7 @@ \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}; @@ -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 ac7cb85..90cb9ff 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -7,12 +7,12 @@ \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} -Die Standardmethode kann im Algorithmus \ref{multiplikation:alg:smm} gsehen 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} @@ -37,7 +37,7 @@ 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} (n^3)$ +Die Laufzeit dieser Struktur mit drei \texttt{for} Schleifen ist $\mathcal{O} (n^3)$. \subsubsection{Divide and Conquer Methode} @@ -65,8 +65,8 @@ Das Matrizen Produkt \mathbf{C}_{21} & \mathbf{C}_{22} \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. @@ -105,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} (n^{3} ) + \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. @@ -187,7 +187,7 @@ 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. \begin{figure} \center @@ -246,7 +246,7 @@ Im Vergleich mit der Methode von Winograd, \end{split} \end{align} %\end{equation} -werden für die berechnung des Skalarproduktes weniger Multiplikationen benötigt, falls $N\leq T$. +werden für die Berechnung des Skalarproduktes weniger Multiplikationen benötigt, 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} @@ -266,7 +266,7 @@ 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. 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}(n^3 )$. + 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} @@ -406,21 +406,21 @@ 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{BLAS (\textit{s})} \\ \hline \multicolumn{6}{c}{} \\ - \textbf{32} & 0.000089 & 0.000594 & 0.0005 & 0.00008 & 0.000021 \\ - \textbf{64} & 0.00069 & 0.0044 & 0.0036 & 0.00064 & 0.00018 \\ - \textbf{128} & 0.0057 & 0.035 & 0.025 & 0.0052 & 0.0012 \\ - \textbf{256} & 0.052 & 0.29 & 0.178 & 0.053 & 0.0096 \\ - \textbf{512} & 0.51 & 2.22 & 1.25 & 0.55 & 0.077 \\ - \textbf{1024} & 4.50 & 17.65 & 8.83 & 4.67 & 0.764 \\ - \textbf{2048} & 129.28 & 141.61 & 61.901 & 136.67 & 7.63 \\ - \textbf{4096} & 1111.31 & 1147.10 & 414.64 & 1179.26 & 55.84 \\ - \textbf{8192} & 9376.17 & 9606.40 & 3014.23 & 10071.51& 478.42 \\ + \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 @@ -434,20 +434,20 @@ 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{NumPy(\textit{s})} \\ \hline \multicolumn{6}{c}{} \\ - \textbf{32} & 0.0240 &0.0271 & 0.04852& 0.01871 & 0.0000426 \\ - \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{2048} & 6154.18 & 7375.93& 3860.57 & 4884.61 & 0.215 \\ - \textbf{4096} & 46813.3 & 58466 & 22904.3 & 43597.1 & 1.49 \\ + \textbf{32} & \phantom{000}0.0240 & \phantom{0000}0.0271& \phantom{0000}0.04852 & \phantom{0000}0.01871 & 0.0000426 \\ + \textbf{64} &\phantom{000} 0.186 & \phantom{0000}0.265 & \phantom{0000}0.2204 & \phantom{0000}0.1530& 0.000118 \\ + \textbf{128} &\phantom{000} 1.563 & \phantom{0000}1.777 & \phantom{0000}1.447 & \phantom{0000}1.1947 & 0.000244 \\ + \textbf{256} &\phantom{00} 11.006 & \phantom{000}13.27 & \phantom{0000}9.938 & \phantom{0000}8.298& 0.000695 \\ + \textbf{512} &\phantom{00} 85.476 & \phantom{00}105.397 & \phantom{000}63.961 & \phantom{000}68.360 & 0.00221\\ + \textbf{1024} &\phantom{0} 750.757 & \phantom{00}847.321 & \phantom{00}461.494 & \phantom{00}537.374 & 0.0188 \\ + \textbf{2048} & 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 diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex index fb1908e..ca93e92 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{MM} \begin{refsection} \chapterauthor{Michael Schmid} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index b8c4142..a9aeda0 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -3,13 +3,12 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Problemstellung} +\section{Laufzeiten von Algorithmen} \rhead{Problemstellung} -Wegen der breiten Anwendung der Matrizenmultiplikation ist eine effiziente L\"osung dieser Operation von grosser Bedeutung. +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 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$. @@ -26,15 +25,15 @@ Vereinfacht werden f\"ur Algorithmen die folgende Sprechweise verwendet: \item usw. \end{itemize} -Konstanten werden nicht beachtet, eine Laufzeit von $\mathcal{O}(4n^2)$ führt, falls $n \rightarrow \infty$ zu $\mathcal{O}(n^2)$. +Konstanten werden nicht beachtet, eine Laufzeit von $4n^2$ führt, falls $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. +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 abbgebildet. \subsubsection{Beispiel Algorithmen} -Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. +Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. \begin{table}[t] -- cgit v1.2.1 From 27bef650fb02f20f0f0a0980e810363583115cd9 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Sat, 21 Aug 2021 14:54:03 +0200 Subject: update multiplikation --- buch/papers/multiplikation/einlteung.tex | 4 +- buch/papers/multiplikation/images/strassen.pdf | Bin 20700 -> 22262 bytes buch/papers/multiplikation/images/strassen.tex | 24 +++++------ buch/papers/multiplikation/loesungsmethoden.tex | 52 +++++++++++------------- buch/papers/multiplikation/problemstellung.tex | 2 +- 5 files changed, 39 insertions(+), 43 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index 2cfbe21..21fa9df 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -14,7 +14,7 @@ $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 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. @@ -47,6 +47,6 @@ der einzelnen Terme geschrieben werden. \begin{figure} \center \includegraphics[]{papers/multiplikation/images/mm_visualisation} - \caption{Grafische illustration der Matrizenmultiplikation} + \caption{Grafische Illustration der Matrizenmultiplikation} \label{multiplikation:fig:mm_viz} \end{figure} diff --git a/buch/papers/multiplikation/images/strassen.pdf b/buch/papers/multiplikation/images/strassen.pdf index 6d81ff5..d150125 100644 Binary files a/buch/papers/multiplikation/images/strassen.pdf and b/buch/papers/multiplikation/images/strassen.pdf differ diff --git a/buch/papers/multiplikation/images/strassen.tex b/buch/papers/multiplikation/images/strassen.tex index 2e3b727..b51a9d5 100644 --- a/buch/papers/multiplikation/images/strassen.tex +++ b/buch/papers/multiplikation/images/strassen.tex @@ -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}$}; } diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 90cb9ff..51872f5 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -192,7 +192,7 @@ Rote Felder stehen f\"ur eine Subtraktion und die gr\"unen f\"ur eine Addition. \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 Block-Matrizen $\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} \label{multiplikation:fig:strassen} \end{figure} @@ -235,18 +235,14 @@ Angenommen man hat $N$ Vektoren, mit welchen man $T$ Skalarprodukte berechnen m\ 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 ursprüngliche Gleichung \eqref{multiplikation:eq:skalar} für das Skalarprodukt benötigt man $Tn$ Multiplikationen. -Im Vergleich mit der Methode von Winograd, -%\begin{equation}\label{multiplikation:eq:eff} - \begin{align}\label{multiplikation:eq:eff} - \begin{split} - 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} -\end{align} -%\end{equation} -werden für die Berechnung des Skalarproduktes weniger Multiplikationen benötigt, falls $N\leq T$. +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} 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} @@ -255,13 +251,13 @@ Dies f\"uhrt zu 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 \eqref{multiplikation:eq:eff} aber mit quadratischen Matrizen, muss -\begin{equation} +\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. @@ -322,7 +318,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. @@ -390,9 +386,9 @@ Anzumerken ist, dass die Matrizenmultiplikation von \texttt{NumPy} als einzige I 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 logarithmischen Darstellung unterscheiden sich diese in Geraden mit unterschiedlichen Steigungen. +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 beötigte Overhead der Algorithmen zeigt sich in unterschiedlichen $y$-Achsenschnittpunkte. +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. @@ -426,7 +422,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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} @@ -453,7 +449,7 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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} @@ -479,7 +475,7 @@ 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}} \label{multiplikation:fig:c_meas_4096} \end{figure} @@ -487,7 +483,7 @@ 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}} \label{multiplikation:fig:python} \end{figure} @@ -500,6 +496,6 @@ Ein optimierter Speicherzugriff hat einen weitaus grösseren Einfluss auf die La 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)}. -Der Overhead der gezeigten Alogorithmen ist in allen Fällen grösser als bei der Standardmethode (z.B. sieben rekursive Aufrufe gegenüber drei \texttt{for}-Schleifen). -Um diesem entegenzuwirken 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 Algortihmen von Strassen oder Winograd zu einer Senkung der Laufzeit führen. +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/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index a9aeda0..604ea36 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -27,7 +27,7 @@ Vereinfacht werden f\"ur Algorithmen die folgende Sprechweise verwendet: Konstanten werden nicht beachtet, eine Laufzeit von $4n^2$ führt, falls $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 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 abbgebildet. +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. -- cgit v1.2.1 From 9b35f4a7087b2b81dae45cc07956d636f6553581 Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Sun, 22 Aug 2021 00:34:09 +0200 Subject: Verbesserungen umgesetzt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Referenzen zum Teil noch nicht aufgelösst, da Thierry Labels noch nicht in seinem Abschnitt eingefügt. - Was bedeutet in Ihrer Korrektur «\qeahem « vor dem Abschnitt komplexe Zahlen? - Die Korrektur: «Nach dem vorherigen Kapitel überrascht wahrscheinlich nicht, dass es möglich ist, mehr…?» am Anfang des Abschnitts komplexe Zahlen verstehe ich nicht ganz. ich habe es aber anderes umgeschrieben… - Bilder eingefügt und in Textstelle darauf referenziert (darf ich das Bild vom Fifaspiel überhaupt reinnehmen? (copyright)) - Sie scheinen ein gutes Auge für sin \sin Fehler zu haben. Die wären mir nie aufgefallen. - Das Quaternion verbessert. --- buch/papers/clifford/10_Quaternionen.tex | 218 +++++++++------------- buch/papers/clifford/11_Fazit.tex | 2 +- buch/papers/clifford/6_PauliMatrizen.tex | 146 +++++++-------- buch/papers/clifford/7_Spiegelung.tex | 81 ++++---- buch/papers/clifford/8_Rotation.tex | 187 ++++++++++--------- buch/papers/clifford/9_KomplexeZahlen.tex | 24 +-- buch/papers/clifford/Bilder/ReihenfolgeGimbal.png | Bin 0 -> 65987 bytes buch/papers/clifford/Bilder/test.png | Bin 48759 -> 0 bytes 8 files changed, 319 insertions(+), 339 deletions(-) create mode 100644 buch/papers/clifford/Bilder/ReihenfolgeGimbal.png delete mode 100644 buch/papers/clifford/Bilder/test.png (limited to 'buch/papers') diff --git a/buch/papers/clifford/10_Quaternionen.tex b/buch/papers/clifford/10_Quaternionen.tex index 3fe2876..6e60be1 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 \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 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, 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 Drehung 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 + welcher 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 + welcher 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° \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 Andererseits 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..54fa016 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 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 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..bb9016c 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. \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..edab9ef 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/Bilder/RotSpieg.png} + \caption{Der wesentliche Unterschied zwischen Spiegelung und Drehung ist die Inversion 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. \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..e29885f 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. -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 new file mode 100644 index 0000000..875b2d5 Binary files /dev/null and b/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png differ diff --git a/buch/papers/clifford/Bilder/test.png b/buch/papers/clifford/Bilder/test.png deleted file mode 100644 index 1633a2e..0000000 Binary files a/buch/papers/clifford/Bilder/test.png and /dev/null differ -- cgit v1.2.1 From 123a5f4a7d5afb554d17a6ffc795a7bf1921abf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Sun, 22 Aug 2021 11:16:26 +0200 Subject: add additional image --- buch/papers/clifford/images/Makefile | 13 +++++ buch/papers/clifford/images/punkte.tex | 21 +++++++ buch/papers/clifford/images/spiegelung.m | 66 ++++++++++++++++++++++ buch/papers/clifford/images/spiegelung.pdf | Bin 0 -> 14637 bytes buch/papers/clifford/images/spiegelung.tex | 85 +++++++++++++++++++++++++++++ 5 files changed, 185 insertions(+) create mode 100644 buch/papers/clifford/images/Makefile create mode 100644 buch/papers/clifford/images/punkte.tex create mode 100644 buch/papers/clifford/images/spiegelung.m create mode 100644 buch/papers/clifford/images/spiegelung.pdf create mode 100644 buch/papers/clifford/images/spiegelung.tex (limited to 'buch/papers') 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 new file mode 100644 index 0000000..a17d369 Binary files /dev/null and b/buch/papers/clifford/images/spiegelung.pdf differ 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} + -- cgit v1.2.1 From bf1d8fd6cf8b1a40bb0a621fda1070ddefba277b Mon Sep 17 00:00:00 2001 From: Nunigan Date: Mon, 23 Aug 2021 11:00:26 +0200 Subject: update --- buch/papers/multiplikation/einlteung.tex | 1 - buch/papers/multiplikation/loesungsmethoden.tex | 37 ++++++++++++++----------- buch/papers/multiplikation/main.tex | 2 +- buch/papers/multiplikation/problemstellung.tex | 14 +++++----- 4 files changed, 29 insertions(+), 25 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index 21fa9df..d31e0f7 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -8,7 +8,6 @@ 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 diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex index 51872f5..8d0c0a8 100755 --- a/buch/papers/multiplikation/loesungsmethoden.tex +++ b/buch/papers/multiplikation/loesungsmethoden.tex @@ -9,7 +9,7 @@ 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 ist im Algorithmus \ref{multiplikation:alg:smm} implementiert. Hierf\"ur wurde die Gleichung \eqref{multiplikation:eq:MM} direkt umgesetzt. @@ -48,7 +48,7 @@ Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die 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} @@ -63,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} 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} @@ -189,10 +189,11 @@ Jedes Feld steht f\"ur eine Multiplikation zweier Matrizenelementen von $\mathbf 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, \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{Der Algorithmus von Strassen verwendet Multiplikationen zur Berechnung der sieben Block-Matrizen $\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} + \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} @@ -340,7 +341,7 @@ Die meisten numerischen Bibliotheken von high-level Skriptsprachen wie \texttt{M \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)} @@ -436,13 +437,13 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \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} & \phantom{000}0.0240 & \phantom{0000}0.0271& \phantom{0000}0.04852 & \phantom{0000}0.01871 & 0.0000426 \\ - \textbf{64} &\phantom{000} 0.186 & \phantom{0000}0.265 & \phantom{0000}0.2204 & \phantom{0000}0.1530& 0.000118 \\ - \textbf{128} &\phantom{000} 1.563 & \phantom{0000}1.777 & \phantom{0000}1.447 & \phantom{0000}1.1947 & 0.000244 \\ - \textbf{256} &\phantom{00} 11.006 & \phantom{000}13.27 & \phantom{0000}9.938 & \phantom{0000}8.298& 0.000695 \\ - \textbf{512} &\phantom{00} 85.476 & \phantom{00}105.397 & \phantom{000}63.961 & \phantom{000}68.360 & 0.00221\\ - \textbf{1024} &\phantom{0} 750.757 & \phantom{00}847.321 & \phantom{00}461.494 & \phantom{00}537.374 & 0.0188 \\ - \textbf{2048} & 6154.18 & \phantom{0}7375.93 & \phantom{0}3860.57 & \phantom{0}4884.61 & 0.215 \\ + \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 @@ -475,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{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in 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} @@ -483,7 +486,9 @@ Die Hardwareinformationen des verwendeten Computers sind in der Tabelle \ref{mul \begin{figure} \center \includegraphics[width=\linewidth]{papers/multiplikation/images/meas_python} - \caption{Doppelt logarithmisch dargestellte Laufzeiten, der verschieden Algorithmen, in der Skriptsprache \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} diff --git a/buch/papers/multiplikation/main.tex b/buch/papers/multiplikation/main.tex index ca93e92..4a23109 100755 --- a/buch/papers/multiplikation/main.tex +++ b/buch/papers/multiplikation/main.tex @@ -27,7 +27,7 @@ } \chapter{Schnelle Matrizenmultiplikation\label{chapter:multiplikation}} -\lhead{MM} +\lhead{Schnelle Matrizenmultiplikation} \begin{refsection} \chapterauthor{Michael Schmid} diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index 604ea36..b3e0ab3 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -4,17 +4,17 @@ % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % \section{Laufzeiten von Algorithmen} -\rhead{Problemstellung} +\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 Standardalgorithmus l\"osen. \label{muliplikation:sec:bigo} -Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhängigkeit zur Inputgrösse \cite{multiplikation:bigo}. +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, wenn 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 folgende Sprechweise verwendet: +Vereinfacht werden f\"ur Algorithmen die folgende 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 @@ -25,13 +25,13 @@ Vereinfacht werden f\"ur Algorithmen die folgende Sprechweise verwendet: \item usw. \end{itemize} -Konstanten werden nicht beachtet, eine Laufzeit von $4n^2$ führt, falls $n \rightarrow \infty$ zu $\mathcal{O}(n^2)$. +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 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{Beispiel Algorithmen} +\subsubsection{Beispielalgorithmen} Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen. @@ -115,7 +115,7 @@ Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkompl 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. -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)$. +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} @@ -132,6 +132,6 @@ Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt \begin{figure} \center \includegraphics[]{papers/multiplikation/images/bigo} - \caption{Laufzeiten von verschiedensten Zeitkomplexitäten. 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.} + \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} -- cgit v1.2.1 From 1567db66f863c3e7bb731864228bf43a61071df0 Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Mon, 23 Aug 2021 11:04:41 +0200 Subject: letzter Commit? MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \, zwischen || Bei "Fehlendes Verb" bin ich mir ein wenig unsicher. Es Handelt sich doch um eine Aufzählung: Man kann dabei mit zwei verschiedenen Systemen arbeiten. - Mit den Eulerischen Winkeln, ... - Mit den Quaternionen, ... Falls doch ein Verb fehlen würde müsste doch bei den Eulerischen Winkeln auch noch etwas fehlen... --- buch/papers/clifford/10_Quaternionen.tex | 18 +++++++++--------- buch/papers/clifford/11_Fazit.tex | 2 +- buch/papers/clifford/6_PauliMatrizen.tex | 4 ++-- buch/papers/clifford/8_Rotation.tex | 18 +++++++++--------- buch/papers/clifford/9_KomplexeZahlen.tex | 4 ++-- 5 files changed, 23 insertions(+), 23 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/clifford/10_Quaternionen.tex b/buch/papers/clifford/10_Quaternionen.tex index 6e60be1..d04ea38 100644 --- a/buch/papers/clifford/10_Quaternionen.tex +++ b/buch/papers/clifford/10_Quaternionen.tex @@ -22,9 +22,9 @@ erreichen, falls $q,v,q^{-1} \in \mathbb{H}$ und die Zusammenhänge \begin{align} \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 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). +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} \end{align} @@ -52,7 +52,7 @@ Betrachten wir nun das Produkt \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} -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 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, 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. +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 drehen sie die Objekte bzw. Vektoren lediglich. \begin{definition} @@ -67,7 +67,7 @@ Zudem setzten wir $\tilde{x}^2+\tilde{y}^2+\tilde{z}^2=1$, damit \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)(\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 Abschnitt Drehung 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}, @@ -92,12 +92,12 @@ ist. Durch die geometrische Algebra sieht man nun, wieso es wichtig ist, bei Qua \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 die 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}), \end{align} - welcher 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 + 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}). @@ -111,7 +111,7 @@ ist. Durch die geometrische Algebra sieht man nun, wieso es wichtig ist, bei Qua \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° gedreht wird, während der senkrechte Anteil unverändert bleibt. @@ -154,8 +154,8 @@ In der Computergrafik wird Interpolation verwendet, um eine flüssige Drehbewegu \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 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 Andererseits 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. + 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. diff --git a/buch/papers/clifford/11_Fazit.tex b/buch/papers/clifford/11_Fazit.tex index 54fa016..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 Drehung, 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 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 bb9016c..4e82f28 100644 --- a/buch/papers/clifford/6_PauliMatrizen.tex +++ b/buch/papers/clifford/6_PauliMatrizen.tex @@ -87,7 +87,7 @@ j & 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} @@ -114,7 +114,7 @@ Die Anteile treten zudem immer paarweise auf und können somit immer je durch zw \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} diff --git a/buch/papers/clifford/8_Rotation.tex b/buch/papers/clifford/8_Rotation.tex index edab9ef..43d8f8a 100644 --- a/buch/papers/clifford/8_Rotation.tex +++ b/buch/papers/clifford/8_Rotation.tex @@ -10,8 +10,8 @@ Eine Drehung kann man aus zwei aufeinanderfolgenden Spiegelungen bilden. Das kan \begin{figure} \centering - \includegraphics[width=10cm]{papers/clifford/Bilder/RotSpieg.png} - \caption{Der wesentliche Unterschied zwischen Spiegelung und Drehung ist die Inversion der Orientierung} + \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} @@ -131,23 +131,23 @@ Mithilfe der Formel \eqref{EulerGA} und dem Wissen, dass $\mathbf{e}_{21}= -\mat \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, 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} und können durch die Kürzungen der Längen die vereinfachte Drehungsgleichung \begin{align} \label{GAvereinfRot} @@ -193,6 +193,6 @@ kann man sehen, dass nur der parallele Anteil $\mathbf{v_\parallel}$ des Vektors \begin{align} \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 diff --git a/buch/papers/clifford/9_KomplexeZahlen.tex b/buch/papers/clifford/9_KomplexeZahlen.tex index e29885f..12fa546 100644 --- a/buch/papers/clifford/9_KomplexeZahlen.tex +++ b/buch/papers/clifford/9_KomplexeZahlen.tex @@ -18,14 +18,14 @@ j^2 = -1\quad\text{und}\quad\mathbf{e}_{12}^2 = -1 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}}, +\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}) \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ö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 -- cgit v1.2.1 From 28efd838410822629a67dd6fb4b73a851e8d0eb4 Mon Sep 17 00:00:00 2001 From: Malarius1999 Date: Mon, 23 Aug 2021 12:26:24 +0200 Subject: Mit Paint nerviger 3D Fehler korrigiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Innerer roter Kreis ging im Bild hinter dem äusseren grünen Kreis durch --- buch/papers/clifford/Bilder/ReihenfolgeGimbal.png | Bin 65987 -> 96678 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png b/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png index 875b2d5..625757d 100644 Binary files a/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png and b/buch/papers/clifford/Bilder/ReihenfolgeGimbal.png differ -- cgit v1.2.1 From 583925fe5661c68f4ae90712c9d697618933ee6c Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 24 Aug 2021 15:34:33 +0200 Subject: typos --- buch/papers/multiplikation/einlteung.tex | 4 ++-- buch/papers/multiplikation/problemstellung.tex | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'buch/papers') diff --git a/buch/papers/multiplikation/einlteung.tex b/buch/papers/multiplikation/einlteung.tex index d31e0f7..9b03a4e 100755 --- a/buch/papers/multiplikation/einlteung.tex +++ b/buch/papers/multiplikation/einlteung.tex @@ -9,8 +9,8 @@ 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}. diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex index b3e0ab3..879b210 100755 --- a/buch/papers/multiplikation/problemstellung.tex +++ b/buch/papers/multiplikation/problemstellung.tex @@ -11,10 +11,10 @@ Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der S \label{muliplikation:sec:bigo} 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, wenn es für $f \in \mathcal{O}(n^k)$ eine Konstante $C$ gibt, mit $f(n) \leq Cn^k$. +$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 folgende Sprechweisen verwendet: +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 @@ -64,13 +64,7 @@ Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkompl \EndFunction \end{algorithmic} \end{algorithm} - - \end{minipage} - \end{tabular} -\end{table} - -\begin{table} - \begin{tabular}[t]{ll} + \end{minipage} \\ \begin{minipage}{0.48\textwidth} \begin{algorithm}[H]\footnotesize\caption{} \setlength{\lineskip}{7pt} @@ -111,6 +105,12 @@ Es folgen einige Beispiele von Algorithmen, welche zu einer bestimmten Zeitkompl \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. -- cgit v1.2.1