https://de.wikipedia.org/w/api.php?action=feedcontributions&feedformat=atom&user=MickHaskell Wikipedia - Benutzerbeiträge [de] 2025-06-13T01:46:03Z Benutzerbeiträge MediaWiki 1.45.0-wmf.4 https://de.wikipedia.org/w/index.php?title=Teufelskreis&diff=193290448 Teufelskreis 2019-10-20T11:00:24Z <p>MickHaskell: /* Psychologie */Unterschied Teufelskreis vs. Abwärtsspirale</p> <hr /> <div>{{Dieser Artikel|behandelt das System ''Teufelskreis''. Siehe auch: ''[[Der Teufelskreis]]'', bzw. ''[[Tatort: Teufelskreis]]''}}<br /> Als '''Teufelskreis''', auch {{LaS|'''circulus vitiosus'''}} („schädlicher Kreis“) oder '''Abwärtsspirale''', wird ein System bezeichnet, in dem mehrere Faktoren sich gegenseitig verstärken ([[positive Rückkopplung]]) und so einen Zustand immer weiter verschlechtern.<br /> <br /> == Soziologie ==<br /> In den Sozialwissenschaften wird ein Teufelskreis auch als ''abwärts gerichtete [[Spirale#Sozialwissenschaften|Spirale]]'' bezeichnet, beispielsweise die [[Schweigespirale]] oder in der Volkswirtschaftslehre die [[Deflationsspirale]], die [[Schuldenfalle]] oder die [[Entwicklungstheorie#Teufelskreis-Theorien|Armutsspirale]]. Im Gegensatz zum Teufelskreis können Spiralen jedoch auch eine positive Wirkung verstärken, wie beispielsweise die Wachstumsspirale. In der [[Konfliktforschung]] bezeichnet man einen Teufelskreis zwischen Parteien mit eskalierender Gewalttätigkeit auch als '''Gewaltspirale'''.<br /> <br /> In der [[Prozesssoziologie]] bezieht [[Norbert Elias]] den Begriff Teufelskreis auf Menschen, die in einem Clinch gefangen sind, der sich immer weiter verstärkt. Später ersetzte er ihn durch den Begriff ''[[Doppelbindungstheorie|Doppelbinder]]''.<br /> <br /> == Psychologie ==<br /> [[Datei:Teufelskreis urbsp.svg|miniatur|Urbeispiel von Watzlawick]]<br /> <br /> In der Psychologie wurde der Teufelskreis-Begriff von [[Paul Watzlawick]] eingeführt, um die Tücke der unterschiedlichen ''Interpunktion'' in zwischenmenschlichen Beziehungen zu beschreiben. Watzlawicks Urbeispiel von einem Ehepaar beschreibt folgende Wechselwirkung: Seit einiger Zeit zeigt sich die Frau unzufrieden mit dem Verhalten ihres Mannes, der sich daraufhin zurückzieht, z.&amp;nbsp;B. ein Wirtshaus aufsucht. Dabei ''interpunktieren'' beide den Kreislauf des gemeinsamen Verhaltensmusters unterschiedlich:<br /> {|style=&quot;margin-left:1em&quot;<br /> |Ehefrau || ''Er entfernt sich von mir. → Ich reagiere darauf und beklage mich.''<br /> |-<br /> |Ehemann || ''Sie nörgelt an mir herum. → Ich reagiere darauf, indem ich mich zurückziehe.''<br /> |}<br /> <br /> Durch die unterschiedliche Interpunktion eines gewohnheitsmäßigen Ablaufs sehen die Ehepartner Ursache und Wirkung jeweils genau andersherum: „''Weil'' sie immer an mir herumnörgelt, ziehe ich mich mehr und mehr zurück.“ „''Weil'' er sich immer zurückzieht, beschwere ich mich.“<br /> <br /> [[Datei:Teufelskreis thun.svg|miniatur|Weiterentwicklungen nach Thomann / Schulz von Thun: Teufelskreis mit vier Stationen]]<br /> <br /> Dieser Teufelskreis-Gedanke wurde von [[Christoph Thomann]] und [[Friedemann Schulz von Thun]] zum Teufelskreis-Modell mit vier Stationen ausgebaut, das helfen soll, die negative Dynamik in einer Beziehung zu erkennen, Hintergründe zu verstehen, sowie Fallstricke zu erfassen und zu beheben. Dabei werden vier Stationen unterschieden und sichtbar gemacht, wobei in die eckigen Kästen die äußerlich sichtbaren und wirksamen Verhaltensweisen ''(“Äußerungen”)'' beider Partner eingetragen werden und in die Kreise ihre inneren Reaktionen ''(“Innerungen”)'' darauf ''(siehe Schaubild Teufelskreis)''. Watzlawicks Urbeispiel wird also um die ''inneren'' Reaktionen, im Beispiel die Gefühle des Ehepaares, erweitert ''(siehe Schaubild Weiterentwicklung)''.<br /> <br /> [[Datei:Teufelskreis thun abstrakt.svg|miniatur|center|hochkant=2.0|Schaubild Teufelskreis nach Thomann / Schulz von Thun]]<br /> <br /> == Teufelskreis vs. Abwärtsspirale ==<br /> <br /> A) ein &quot;Teufelskreis&quot; beschreibt die statische Struktur eines Systems, d.h. die Akteure, ihre Aktivitäten/Prozesse und deren wechselseitigen Ursache-Wirkung-Beziehungen,<br /> <br /> B) die &quot;Abwärtsspirale&quot; beschreibt den zeitlichen Verlauf des Zustands dieses Systems, als Kombination aus Petri-Netz (wobei der Winkel des Vektors in x-y-Ebene den gerade aktiven Akteur/Prozess identifiziert) und der resultierenden (abfallenden) Bewertungsgröße in z-Ebene.<br /> <br /> == Literatur ==<br /> <br /> * Walter Milowiz: ''Teufelskreis und Lebensweg – systemisch Denken in der Sozialarbeit''. 2., überarbeitete Auflage. Vandenhoeck &amp; Ruprecht, Göttingen 2009, ISBN 978-3-525-40158-3.<br /> * [[Paul Watzlawick]]: ''Menschliche Kommunikation, Formen, Störungen, Paradoxien'' (Originaltitel: ''Pragmatics of human communication'', mit Janet H. Beavin, Don D. Jackson vom Mental Research Institute Palo Alto, Kalifornien). Huber, Bern 1969, 10. Auflage 2010, ISBN 3-456-83457-8.<br /> * [[Friedemann Schulz von Thun]]: ''Miteinander Reden, 2. Stile, Werte und Persönlichkeitsentwicklung''. Rowohlt, Reinbek bei Hamburg 1989, ISBN 978-3-499-62717-0.<br /> * Friedemann Schulz von Thun: ''Miteinander Reden: Fragen und Antworten''. Rowohlt, Reinbek bei Hamburg 2007, ISBN 978-3-499-61963-2.<br /> * [[Jürgen Beetz]]: ''Feedback: Wie Rückkopplung unser Leben bestimmt und Natur, Technik, Gesellschaft und Wirtschaft beherrscht''. Springer Spektrum, Heidelberg 2015, ISBN 978-3-662-47089-3.<br /> <br /> == Siehe auch ==<br /> <br /> * [[Deadlock]]<br /> <br /> [[Kategorie:Geflügeltes Wort]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Lorentz-Transformation&diff=192703013 Lorentz-Transformation 2019-09-29T14:06:29Z <p>MickHaskell: /* Inverse der Speziellen Lorentz-Transformation */Wechselseitige Zeit-Dilatation erklärt</p> <hr /> <div>{{QS-Physik|Lorentz-Transformation und Spezielle Lorentz-Transformation|Unerledigt=2018}}<br /> Die '''Lorentz-Transformationen''', nach [[Hendrik Antoon Lorentz]], sind eine Klasse von [[Koordinatentransformation]]en, um in der Physik Phänomene in verschiedenen [[Bezugssystem]]en zu beschreiben. Sie verbinden in einer vierdimensionalen [[Raumzeit]] die Zeit- und Ortskoordinaten, mit denen verschiedene [[Beobachter (Physik)|Beobachter]] angeben, wann und wo Ereignisse stattfinden. Die Lorentz-Transformationen bilden daher die Grundlage der [[Spezielle Relativitätstheorie|Speziellen Relativitätstheorie]] von [[Albert Einstein]].<br /> <br /> Das Äquivalent zu den Lorentz-Transformationen im dreidimensionalen [[Euklidische Metrik|euklidischen]] Raum sind die [[Galilei-Transformation]]en; genauso wie diese [[Abstand|Abstände]] und [[Winkel]] erhalten, erhalten die Lorentz-Transformationen die Abstände in der nichteuklidischen Raumzeit ([[Minkowskiraum]]). Winkel werden im Minkowskiraum nicht erhalten, da der Minkowskiraum kein [[normierter Raum]] ist.<br /> <br /> Die Lorentz-Transformationen bilden eine [[Gruppe (Mathematik)|Gruppe]] im mathematischen Sinn, die [[Lorentz-Gruppe]], da zu jeder Lorentz-Transformation eine inverse Transformation existiert, die wieder in das ursprüngliche Bezugssystem zurück transformiert, die Hintereinanderausführung von Lorentz-Transformationen als eine einzige Lorentz-Transformation beschrieben werden kann, und der triviale Wechsel von einem Bezugssystem in dasselbe ebenfalls eine Lorentz-Transformation ist.<br /> <br /> Unterklassen der Lorentz-Transformationen sind die diskreten Transformationen der [[Raumspiegelung]], also der Inversion aller räumlichen Koordinaten, sowie der [[Zeitumkehr (Physik)|Zeitumkehr]], also die Umkehr des [[Zeitpfeil]]s, und die kontinuierlichen Transformationen der endlichen [[Drehung]] sowie der [[Spezielle Lorentz-Transformation|speziellen Lorentz-Transformationen]] oder Lorentz-Boosts. Kontinuierliche Drehbewegungen der Koordinatensysteme gehören nicht zu den Lorentz-Transformationen. Teilweise werden auch nur die speziellen Lorentz-Transformationen verkürzend als Lorentz-Transformationen betitelt.<br /> <br /> == Definition ==<br /> === Bestandteile der Lorentz-Transformation ===<br /> Die Lorentz-Transformation umfasst alle [[Lineare Transformation|linearen Transformationen]] der Koordinaten zwischen zwei Beobachtern. Sie sind daher Transformationen zwischen zwei [[Inertialsystem]]en, deren Koordinatenursprung, der Bezugspunkt des Koordinatensystems zum Zeitpunkt &lt;math&gt;t=0&lt;/math&gt;, übereinstimmt. Eine allgemeine Lorentz-Transformation umfasst daher<br /> * Transformationen zwischen zwei Beobachtern, die eine unterschiedliche, konstante Geschwindigkeit besitzen, genannt ''Lorentz-Boost'' oder [[Spezielle Lorentztransformation|spezielle Lorentz-Transformation]].&lt;ref&gt;{{Literatur|Autor=Harald Klingbeil|Titel=Elektromagnetische Feldtheorie: Ein Lehr- und Übungsbuch|Verlag=Springer-Verlag|Jahr=2010|ISBN=3834814032|Seiten=497|Online={{Google Buch|BuchID=Sms9MRllvggC|Seite=497}}}}&lt;/ref&gt; Sie entsprechen einer Drehung im Raum-Zeit-Sektor des nichteuklidischen Minkowskiraums.<br /> * [[Drehung]]en der räumlichen Koordinaten<br /> * [[Zeitumkehr|Zeit-]] und [[Raumspiegelung]]en<br /> Jede allgemeine Lorentz-Transformation lässt sich als Hintereinanderausführung dieser Transformationen schreiben. Eine Lorentz-Transformation, bei der Spiegelungen ausgeschlossen sind und die Orientierung der Zeit erhalten ist, wird als ''eigentliche, orthochrone'' Lorentz-Transformation bezeichnet.<br /> <br /> === Spezielle Lorentz-Transformation für Orte und Zeiten ===<br /> Ist ein Beobachter '''A''' mit konstanter Geschwindigkeit &lt;math&gt;v&lt;/math&gt; in &lt;math&gt;x&lt;/math&gt;-Richtung gegenüber einem anderen Beobachter '''B''' bewegt, so hängen die Koordinaten &lt;math&gt;\textstyle(t',x',y',z')&lt;/math&gt;, die Beobachter '''A''' einem Ereignis zuschreibt, durch die spezielle Lorentz-Transformation<br /> :&lt;math&gt;<br /> \begin{align}<br /> t' &amp;= \gamma \left( t - \frac{v }{c^2}\,x \right)\\<br /> x' &amp;= \gamma (x - v\,t )\\<br /> y' &amp;= y\\<br /> z' &amp;= z<br /> \end{align}<br /> &lt;/math&gt;<br /> mit den Koordinaten &lt;math&gt;(t,x,y,z)&lt;/math&gt; des Beobachters '''B''' für dasselbe Ereignis zusammen, falls die beiden Bezugssysteme denselben Ursprung haben, also zum Zeitpunkt &lt;math&gt;\textstyle t=t'=0&lt;/math&gt; miteinander übereinstimmen. Darin ist &lt;math&gt;\textstyle\gamma = \frac{1}{\sqrt{1-v^2/c^2}}&lt;/math&gt; der [[Lorentzfaktor]].<br /> <br /> ==== Inverse der Speziellen Lorentz-Transformation ====<br /> Da '''B''' sich relativ zu '''A''' mit konstanter Geschwindigkeit &lt;math&gt;-v&lt;/math&gt; bewegt, wenn '''A''' dies relativ zu '''B''' mit Geschwindigkeit &lt;math&gt;+v&lt;/math&gt; tut, kann man gemäß des [[Relativitätsprinzip]]s ihre Rollen vertauschen. In den Transformationsformeln ändert sich dabei nur das Vorzeichen der Geschwindigkeit. Insbesondere gilt auch<br /> :&lt;math&gt;<br /> \begin{align}<br /> t &amp;= \gamma \left( t' + \frac{v }{c^2}\,x' \right)\\<br /> \end{align}<br /> &lt;/math&gt;<br /> Während für '''A''' die Zeit (Uhr) in '''B''' (mit x=0) anscheinend langsamer läuft als die in '''A''', gilt dies auch andersherum, d.h. für '''B''' läuft die Uhr von '''A''' (mit x'=0) langsamer.<br /> <br /> == Geschichtliche Entwicklung ==<br /> {{Hauptartikel|Geschichte der Lorentz-Transformation}}<br /> <br /> Die Arbeiten von [[Woldemar Voigt]] (1887), [[Hendrik Antoon Lorentz]] (1895, 1899, 1904), [[Joseph Larmor]] (1897, 1900) und [[Henri Poincaré]] (1905), zeigten, dass die Lösungen der Gleichungen der Elektrodynamik durch Lorentz-Transformationen aufeinander abgebildet werden oder mit anderen Worten, dass die Lorentz-Transformationen Symmetrien der [[Maxwell-Gleichungen]] sind.<br /> <br /> Man versuchte damals, die elektromagnetischen Phänomene durch einen hypothetischen [[Äther (Physik)|Äther]], ein Übertragungsmedium für elektromagnetische Wellen, zu erklären. Es stellte sich allerdings heraus, dass sich von ihm keine Spur nachweisen ließ. Voigt stellte 1887 Transformationsformeln vor, welche die [[Wellengleichung]] invariant lassen. Die Voigt-Transformation ist jedoch nicht reziprok, bildet also keine [[Gruppe (Mathematik)|Gruppe]]. Voigt nahm an, dass die Ausbreitungsgeschwindigkeit der Wellen im Ruhesystem des Äthers und in einem Bezugssystem, das sich relativ zu diesem mit konstanter Geschwindigkeit bewegt, gleich ist, ohne dafür eine Erklärung anzugeben.&lt;ref&gt;{{arXiv|1609.08647v1}}&lt;/ref&gt; In seiner [[Lorentzsche Äthertheorie|Äthertheorie]] konnte Lorentz dies dadurch erklären, dass die Längenmaßstäbe sich bei Bewegung in Bewegungsrichtung verkürzen und dass bewegte Uhren eine langsamer verlaufende Zeit anzeigen, die er Ortszeit nannte. Die von Lorentz angegebenen Transformationen der Längen und Zeiten bildeten eine Gruppe und waren damit mathematisch stimmig. Auch wenn in Lorentz’ Äthertheorie eine gleichförmige Bewegung gegenüber dem Äther nicht nachweisbar war, hielt Lorentz an der Vorstellung eines Äthers fest.<br /> <br /> Einsteins [[spezielle Relativitätstheorie]] löste [[Klassische Mechanik|Newtons Mechanik]] und die Ätherhypothese ab. Er leitete seine Theorie aus dem [[Relativitätsprinzip]] ab, dass sich im Vakuum unter Vernachlässigung von gravitativen Effekten Ruhe nicht von gleichförmiger Bewegung unterscheiden lässt. Insbesondere hat Licht im Vakuum für jeden Beobachter dieselbe Geschwindigkeit &lt;math&gt;c&lt;/math&gt;. Die Zeit- und Ortskoordinaten, mit denen zwei gleichförmig bewegte Beobachter Ereignisse bezeichnen, hängen dann durch eine Lorentz-Transformation miteinander zusammen, statt wie in Newtons Mechanik durch eine [[Galilei-Transformation]].<br /> <br /> == Eigenschaften ==<br /> === Geschwindigkeitsaddition ===<br /> {{Hauptartikel|Relativistisches Additionstheorem für Geschwindigkeiten}}<br /> Zwei hintereinander ausgeführte Lorentz-Boosts in dieselbe Richtung mit Geschwindigkeit &lt;math&gt;v_1&lt;/math&gt; und &lt;math&gt;v_2&lt;/math&gt; ergeben wieder einen Lorentz-Boost mit der Gesamtgeschwindigkeit<br /> :&lt;math&gt;\frac{v}{c}=\frac{\frac{v_1}{c}+\frac{v_2}{c}}{1+\frac{v_1}{c}\cdot\frac{v_2}{c}}.&lt;/math&gt;<br /> Die Gleichung zeigt, dass sich die Lichtgeschwindigkeit bei Lorentz-Transformationen nicht ändert. Ist etwa &lt;math&gt;v_1&lt;/math&gt; die Lichtgeschwindigkeit, das heißt &lt;math&gt;\tfrac{v_1}{c}=1&lt;/math&gt;, so ist &lt;math&gt;v=c\tfrac{1+v_2/c}{1+v_2/c} = c&lt;/math&gt; ebenfalls die Lichtgeschwindigkeit.<br /> <br /> Hintereinander ausgeführte Lorentz-Boosts in verschiedene Richtungen ergeben im Allgemeinen keine Lorentz-Boosts, sondern eine allgemeine Lorentz-Transformation: Die Menge der Lorentz-Boosts ist keine Untergruppe der Lorentz-Transformationen.<br /> <br /> === Lorentz-Invariante ===<br /> {{Anker|Lorentz-Invarianz}}Eine Größe, die sich bei Lorentz-Transformationen nicht ändert, heißt '''Lorentz-Invariante''' oder '''Lorentz-Skalar'''. Bei einem physikalischen System oder Vorgang beschreibt eine Lorentz-Invariante eine Eigenschaft, die von allen Inertialsystemen aus mit gleichem Wert beobachtet wird, wie z.&amp;nbsp;B. die Lichtgeschwindigkeit &lt;math&gt;c&lt;/math&gt;, die [[Masse (Physik)|Masse]] &lt;math&gt;m&lt;/math&gt;, die Teilchenzahl, die [[elektrische Ladung]] etc.<br /> <br /> Bei einem Lorentz-Boost in Richtung &lt;math&gt;x&lt;/math&gt; lässt sich zeigen, dass<br /> :&lt;math&gt;c^2 t'^2 - x'^2 = c^2 t^2 - x^2&lt;/math&gt;<br /> gelten muss. Der Ausdruck &lt;math&gt;\textstyle c^2 t^2-x^2&lt;/math&gt; ist also eine Invariante der Lorentz-Transformation, d.&amp;nbsp;h. in allen unter Lorentz-Transformationen verbundenen Koordinatensystemen konstant.<br /> <br /> In drei Raumdimensionen ist die [[Norm (Mathematik)|Norm]] &lt;math&gt;\textstyle c^2 t^2-(x^2+y^2+z^2)&lt;/math&gt; die einzige Möglichkeit, eine Lorentz-Invariante zu bilden. Z.&amp;nbsp;B. ist die Norm des Energie-Impuls-Vektors die mit &lt;math&gt;c&lt;/math&gt; multiplizierte Masse &lt;math&gt;mc&lt;/math&gt;, und die Norm des Drehimpulsvektors ist der lorentzinvariante Betrag des Eigendrehimpulses. Auch der Abstand zweier Ereignisse, also die Norm der Differenz der [[Vierervektor]]en der beiden Weltpunkte, ist lorentzinvariant. Bei zwei Vierervektoren ist auch ihr Skalarprodukt lorentzinvariant. Ein Tensor 2. Stufe hat eine lorentzinvariante Spur etc.<br /> <br /> === Lorentz-Kontraktion und Invarianz der transversalen Koordinaten ===<br /> {{Hauptartikel|Spezielle Lorentz-Transformation|Lorentzkontraktion}}<br /> Für einen Lorentz-Boost mit beliebig gerichteter Geschwindigkeit &lt;math&gt;\vec v&lt;/math&gt;, lässt sich der Koordinatenvektor &lt;math&gt;\vec r=(x,y,z)&lt;/math&gt; des Ereignisses in zwei Komponenten&lt;ref&gt;{{Literatur | Autor=Christian Møller | Titel=The theory of relativity | Jahr=1952 | Kapitel=§ 18. The most general Lorentz transformation | Seiten=41 | Online=[http://archive.org/stream/theoryofrelativi029229mbp#page/n58/mode/1up Internet Archive]}}&lt;/ref&gt;&lt;ref&gt;Klaus W. Kark: ''Antennen und Strahlungsfelder. Elektromagnetische Wellen auf Leitungen, im Freiraum und ihre Abstrahlung.'' 3., erweiterte Auflage. Vieweg + Teubner, Wiesbaden 2010, ISBN 978-3-8348-0553-9, Kap. 3.7.1, S. 46&lt;/ref&gt; &lt;math&gt;\textstyle\vec r =\vec{r_\parallel} + \vec{r_\bot} &lt;/math&gt; zerlegen. Die Indizes &lt;math&gt;\parallel&lt;/math&gt; und &lt;math&gt;\perp&lt;/math&gt; bezeichnen dabei die parallele bzw. eine rechtwinklige Richtung zur Geschwindigkeit &lt;math&gt;\vec v&lt;/math&gt;. Die transformierten Koordinaten sind dann durch<br /> <br /> :&lt;math&gt;t'=\gamma \left( t-\frac{\vec{v}\cdot \vec r}{c^2} \right),\qquad <br /> \vec{r}_\parallel '=\gamma \left(\vec{r}_\parallel -\vec{v} t\right),\qquad <br /> \vec{r}_\bot '=\vec{r}_\bot&lt;/math&gt;<br /> <br /> gegeben. Ein von den Beobachtern im gestrichenen System gemessener Abstand &lt;math&gt;\vec r'&lt;/math&gt; ist nur in Bewegungsrichtung &lt;math&gt;\vec{r_\parallel}&lt;/math&gt; verkürzt. Dieser Effekt wird Lorentz-Kontraktion genannt. Bei Maßstäben &lt;math&gt;\vec{r_\bot}&lt;/math&gt; senkrecht zur Bewegungsrichtung wirkt sich die [[Relativität der Gleichzeitigkeit]] nicht aus. Zusammengefasst lauten diese Gleichungen in der Matrixschreibweise mit [[Vierervektor]]en (und der [[Einheitsmatrix]] &lt;math&gt;I_3&lt;/math&gt;):<br /> <br /> &lt;math&gt;<br /> \begin{pmatrix} c t' \\ \vec{r}' \end{pmatrix}<br /> =<br /> \begin{pmatrix}<br /> \gamma &amp; -\gamma\vec{v}^T/c\\<br /> -\gamma\vec{v}/c &amp; \mathrm{I}_3 + (\gamma-1)\vec{v}\vec{v}^T/v^2\\<br /> \end{pmatrix}<br /> \begin{pmatrix} c t \\ \vec{r} \end{pmatrix}<br /> &lt;/math&gt;.<br /> <br /> Auf gleiche Weise lassen sich elektromagnetische Felder gemäß &lt;math&gt;\vec E'=\vec E'_\parallel +\vec E'_{\perp}&lt;/math&gt; und &lt;math&gt;\vec B'=\vec B'_\parallel +\vec B'_{\perp}&lt;/math&gt; in Komponenten zerlegen.&lt;ref name=&quot;Feynman&quot;&gt; [[Richard Feynman|R. P. Feynman]]: Lectures On Physics, Vol. II, 26-3, Relativistic transformation of the fields&lt;/ref&gt; Man erhält die (skalaren) Feldkoordinaten<br /> :&lt;math&gt;\begin{align}<br /> E'_\parallel &amp;= E_\parallel\\<br /> B'_\parallel &amp;= B_\parallel\\<br /> E'_\perp &amp;= \gamma\left(\vec E + \vec v\times\vec B\right)_\perp\\<br /> B'_\perp &amp;= \gamma\left(\vec B - \frac{\vec v\times\vec E}{c^2}\right)_ \perp.<br /> \end{align}&lt;/math&gt;<br /> <br /> In nichtrelativistischer Näherung, d.&amp;nbsp;h. für Geschwindigkeiten &lt;math&gt;v\ll c&lt;/math&gt;, gilt &lt;math&gt;\gamma \approx 1&lt;/math&gt;. In diesem Fall braucht nicht zwischen Orten und Zeiten in verschiedenen Bezugssystemen unterschieden zu werden und für die Feldgrößen gilt:<br /> <br /> :&lt;math&gt;\begin{align}<br /> &amp; {\vec{E}}'=\vec{E}+\vec{v}\times \vec{B} \\<br /> &amp; {\vec{B}}'=\vec{B}-(1/{{c}^{2}})\vec{v}\times \vec{E} \\<br /> &amp; \vec{E}=\vec{E}'-\vec{v}\times {\vec{B}}' \\<br /> &amp; \vec{B}={\vec{B}}'+(1/{{c}^{2}})\vec{v}\times {\vec{E}}' \\<br /> \end{align}&lt;/math&gt;<br /> <br /> == Herleitung ==<br /> Um die Formeln einfach zu halten, wird als [[Längeneinheit]] die Strecke, die Licht in einer Sekunde zurücklegt gewählt. Dann haben Zeit und Länge [[Natürliche Einheiten|dieselbe Maßeinheit]] und die dimensionslose Lichtgeschwindigkeit beträgt &lt;math&gt;c=1&lt;/math&gt;. Die Geschwindigkeit &lt;math&gt;v&lt;/math&gt; wird also in Einheiten der Lichtgeschwindigkeit gemessen.<br /> <br /> Die erste Herleitung beruhte auf der Invarianz der Wellengleichung im Rahmen der elastischen Lichttheorie. Später wurde gezeigt, dass die Lorentz-Transformationsformeln, die den Ausdruck &lt;math&gt;\textstyle \delta x^{2}+\delta y^{2}+\delta z^{2}-c^{2}\delta t^{2}&lt;/math&gt; und somit die Form von Lichtkugelwellen invariant lassen, sich rigoros aus der elektromagnetischen Wellengleichung (und somit aus den [[Maxwell-Gleichungen]]) herleiten lassen, sofern die Forderung nach Linearität und Reziprozität berücksichtigt wird.&lt;ref&gt;{{Cite book|author=[[Max von Laue]]|year=1913|title=Das Relativitätsprinzip|edition=2|publisher=Vieweg|location=Braunschweig|pages=38–41}}&lt;/ref&gt;&lt;ref&gt;{{Cite journal|author=Karl Stiegler|year=1958|title=On the Deduction of the Lorentz-Einstein Transformation from Maxwell's Electromagnetic Field Equations|journal=Proceedings of the Physical Society|pages=512–513|volume=71|issue=3|doi=10.1088/0370-1328/71/3/429}}&lt;/ref&gt; Im Rahmen der Elektrodynamik kann die Herleitung der Lorentz-Transformation auch unter Berücksichtigung des Potentials einer bewegten Ladung ([[Liénard-Wiechert-Potential]]) erfolgen.&lt;ref&gt;{{Cite book|author=Feynman, R.P.|year=2013|title=The Feynman Lectures on Physics|chapter=21–6 The potentials for a charge moving with constant velocity; the Lorentz formula |volume=2|location=New York|publisher=Basic Books|isbn=978-0-465-02416-2|url=http://www.feynmanlectures.caltech.edu/II_21.html#Ch21-S6}}&lt;/ref&gt; Darüber hinaus gibt es eine größere Gruppe von [[Kugelwellentransformation]]en, welche den Ausdruck &lt;math&gt;\textstyle \lambda\left(\delta x^{2}+\delta y^{2}+\delta z^{2}-c^{2}\delta t^{2}\right)&lt;/math&gt; invariant lassen. Jedoch nur die Lorentz-Transformationen mit &lt;math&gt;\lambda=1&lt;/math&gt; bilden alle Naturgesetze einschließlich der Mechanik symmetrisch ab, und gehen für &lt;math&gt;c \to \infty&lt;/math&gt; in die Galilei-Transformation über.<br /> <br /> Herleitungen in modernen Lehrbüchern beruhen überwiegend auf der Interpretation der Transformationen im Sinne der Speziellen Relativitätstheorie, wonach diese Raum und Zeit selbst betreffen, und sind unabhängig von Annahmen zur Elektrodynamik. Einstein (1905) benutzte dabei zwei Postulate: Das Relativitätsprinzip und das Prinzip der Konstanz der Lichtgeschwindigkeit. Allgemeinere Herleitungen, welche auf [[Wladimir Ignatowski]] (1910) zurückgehen, beruhen auf gruppentheoretischen Erwägungen.&lt;ref&gt;{{Cite journal|author=Pal, Palash B.|year=2003|title=Nothing but relativity|journal=European Journal of Physics|pages=24|issue=3|doi=10.1088/0143-0807/24/3/312|arxiv=physics/0302045}}&lt;/ref&gt;&lt;ref&gt;{{Cite journal|author=Baccetti, Valentina; Tate, Kyle; Visser, Matt|year=2012|title=Inertial frames without the relativity principle|journal=Journal of High Energy Physics|pages=119|doi=10.1007/JHEP05(2012)119 <br /> |arxiv=1112.1466|bibcode = 2012JHEP...05..119B }}; Siehe Referenzen 5 bis 25.&lt;/ref&gt;<br /> <br /> === Herleitung aus Linearität und Relativitätsprinzip ===<br /> Die folgenden Überlegungen klären, wie Koordinaten zusammenhängen, die inertiale Beobachter (Beobachter die fest mit einem Inertialsystem verbunden sind) zur Benennung der Zeit und des Ortes von Ereignissen verwenden. Die Beobachter sollen hier beispielhaft Anna und Bert sein. Annas Koordinatensystem ist durch &lt;math&gt;x,y,z,t&lt;/math&gt; gegeben und Berts durch die gestrichenen Variablen &lt;math&gt;\textstyle x',y',z',t'&lt;/math&gt;. Es handele sich um rechtwinklige Koordinaten.<br /> <br /> ==== Linearität ====<br /> Für alle gleichförmig bewegten Beobachter durchlaufen freie Teilchen gerade Weltlinien. Daher muss die Transformation Geraden auf Geraden abbilden. Mathematisch besagt dies, dass die Transformation linear ist.<br /> <br /> Stimmen beide Beobachter in der Wahl des Zeitnullpunkts und des räumlichen Ursprungs überein, dann ist die gesuchte Transformation linear und homogen.<br /> <br /> Bert bewege sich relativ zu Anna mit der Geschwindigkeit &lt;math&gt;v&lt;/math&gt;. Die Koordinatensysteme werden so orientiert, dass &lt;math&gt;x, x'&lt;/math&gt; und &lt;math&gt;v&lt;/math&gt; auf einer Gerade in einer Richtung liegen. Dann kann man sich auf die Koordinaten &lt;math&gt;x,t&lt;/math&gt; beschränken.<br /> <br /> Die gesuchte Lorentz-Transformation lautet dann<br /> :&lt;math&gt;t' = at + bx, \quad x' = et + fx.&lt;/math&gt;<br /> Die Unbekannten &lt;math&gt;a, b, e, f&lt;/math&gt; sind nun zu bestimmen.<br /> <br /> ==== Lichtkegel ====<br /> Ein Lichtimpuls, den Anna zur Zeit &lt;math&gt;t=0&lt;/math&gt; am Ort &lt;math&gt;x=0&lt;/math&gt; losschickt, wird durch &lt;math&gt;x=\pm t&lt;/math&gt; beschrieben. Da die Lichtgeschwindigkeit absolut ist, muss für Bert &lt;math&gt;x'=\pm t'&lt;/math&gt; gelten. Die Gleichungen mit dem Pluszeichen erfordern &lt;math&gt;e+f=a+b&lt;/math&gt; und die Gleichungen mit dem Minuszeichen &lt;math&gt;e-f=-a+b&lt;/math&gt;. Daraus folgt &lt;math&gt;e=b&lt;/math&gt; und &lt;math&gt;f=a&lt;/math&gt; bzw.<br /> :&lt;math&gt;t' = at + bx, \quad x' = bt + ax.&lt;/math&gt;<br /> Dies gilt für alle Lorentz-Transformationen, unabhängig von der Relativgeschwindigkeit der Beobachter.<br /> <br /> ==== Relativgeschwindigkeit ====<br /> Anna beschreibt Berts Bewegung durch &lt;math&gt;x=vt&lt;/math&gt;, Bert seine eigene durch &lt;math&gt;\textstyle x'=0&lt;/math&gt;. Die Lorentz-Transformation von Annas zu Berts Koordinatensystem muss diese beiden Ausdrücke ineinander überführen. Aus &lt;math&gt;\textstyle x'=bt+avt=(b+av)t=0&lt;/math&gt; folgt dann &lt;math&gt;b=-av&lt;/math&gt;, also<br /> :&lt;math&gt;t' = a(t - vx), \quad x' = a(x - vt).&lt;/math&gt;<br /> Es bleibt noch der Vorfaktor &lt;math&gt;a&lt;/math&gt; zu bestimmen. Von den Koordinaten kann er nicht abhängen, sonst wäre die Lorentz-Transformation nichtlinear. Bleibt also eine Abhängigkeit von der Relativgeschwindigkeit. Man schreibt &lt;math&gt;a=a(v)&lt;/math&gt;. Da die Lorentz-Transformation nicht von der Richtung von &lt;math&gt;v&lt;/math&gt; abhängen soll, gilt &lt;math&gt;a=a(|v|)&lt;/math&gt;.<br /> <br /> ==== Vorfaktor ====<br /> Um den Vorfaktor zu bestimmen, führt man eine weitere inertiale Beobachterin Clara mit den Koordinaten &lt;math&gt;\textstyle t'', x''&lt;/math&gt; und der Relativgeschwindigkeit &lt;math&gt;v'&lt;/math&gt; in Bezug auf Bert ein. Die Lorentz-Transformation von Berts zu Claras Koordinaten muss wegen des Relativitätsprinzips dieselbe Form wie die obige haben, also<br /> :&lt;math&gt;t'' = a'(t' - v'x'),\quad x'' = a'(x' - v't'),&lt;/math&gt;<br /> dabei wurde &lt;math&gt;a'=a(v')&lt;/math&gt; abgekürzt.<br /> <br /> Man kombiniert nun die beiden Transformationen, rechnet also die Koordinaten von Anna in die von Clara um. Es reicht dazu, eine der beiden Koordinaten zu berechnen:<br /> :&lt;math&gt;t''=a'(t'-v'x') = a'(a(t-vx)-v'a(x-vt)) =a'a(1+vv')\left(t-\frac{v+v'}{1+vv'}x\right).&lt;/math&gt;<br /> Sitzt Clara neben Anna, ist &lt;math&gt;v'=-v&lt;/math&gt; und die doppelt gestrichenen Koordinaten sind gleich den ungestrichenen. Der Faktor &lt;math&gt;\textstyle (v+v')/(1+vv')&lt;/math&gt; verschwindet und der Vorfaktor &lt;math&gt;\textstyle a'a(1+v'v)=a'a(1-v^2)&lt;/math&gt; muss gleich 1 sein. Wegen &lt;math&gt;\textstyle a(-v)a(v)\cdot(1-v^2)=1&lt;/math&gt; und &lt;math&gt;a(-v)=a(v)&lt;/math&gt; muss dann<br /> :&lt;math&gt;a(v)= \frac{1}{\sqrt{1-v^2}}&lt;/math&gt;<br /> gelten. Mit der Abkürzung &lt;math&gt;\gamma=a(v)&lt;/math&gt; ist<br /> :&lt;math&gt;t' = \gamma(t-vx), <br /> \quad x'=\gamma(x-vt).&lt;/math&gt;<br /> Die Lorentz-Transformationen lauten daher<br /> :&lt;math&gt;t' = \gamma \left(t- \left(\frac{v}{c^2} \right)x \right), <br /> \qquad x'=\gamma(x-vt), <br /> \qquad\gamma = \frac{1}{\sqrt{1-(\frac{v}{c})^2}} .&lt;/math&gt;<br /> <br /> === Herleitung aus der Zeitdilatation ===<br /> Mit einem Argument von Macdonald&lt;ref&gt;Alan Macdonald, ''Derivation of the Lorentz transformation.'' In: ''American Journal of Physics.'' Vol. 49, Issue 5, 1981, {{ISSN|0002-9505}}, S. 493, [http://arxiv.org/abs/physics/0606046v1 aktualisierte Version].&lt;/ref&gt; kann man die Transformationsformeln aus der [[Zeitdilatation]] gewinnen. An einer Lichtfront, die sich in positiver x-Richtung bewegt, hat die Differenzkoordinate &lt;math&gt;ct - x &lt;/math&gt; überall denselben Wert, ebenso &lt;math&gt;\textstyle ct' - x' &lt;/math&gt;. Man betrachtet eine Front, die durch das Ereignis E geht und irgendwann (vorher oder nachher) auf den bewegten Koordinatenursprung O' trifft, der langsamer als Licht sein muss. Wegen der gleichbleibenden Werte stehen die Differenzkoordinaten bei E in derselben Beziehung zueinander wie am Punkt O'. An diesem gilt &lt;math&gt;\textstyle x'=0,\ x = vt&lt;/math&gt;, sowie nach der [[Zeitdilatation|Dilatationsformel]] &lt;math&gt;\textstyle t=\gamma t'&lt;/math&gt; wobei &lt;math&gt;\textstyle\gamma=1/\sqrt{1-v^2/c^2}&lt;/math&gt; ist. Für die Differenzkoordinaten gilt daher<br /> :&lt;math&gt;<br /> ct - x = \left(1-\frac{v}{c}\right) \gamma (ct'-x')<br /> &lt;/math&gt;<br /> Analog hat an einer Lichtfront, die sich in negativer x-Richtung bewegt, die Summenkoordinate &lt;math&gt;ct + x &lt;/math&gt; überall denselben Wert, ebenso &lt;math&gt;\textstyle ct' + x' &lt;/math&gt;. Auch eine solche Front geht durch E (mit gleichen Koordinaten wie oben) und durch O' (zu einem anderen Zeitpunkt als oben). In der Gleichung analog zur vorhergehenden werden nun Summen statt Differenzen gebildet, daher lautet sie<br /> :&lt;math&gt;<br /> ct + x = \left(1+\frac{v}{c}\right) \gamma (ct' + x')<br /> &lt;/math&gt;<br /> Addition und Subtraktion der beiden Gleichungen ergibt &lt;math&gt;ct,x&lt;/math&gt; als Funktion von<br /> &lt;math&gt;ct',x'&lt;/math&gt;.<br /> <br /> === Empirische Herleitung ===<br /> {{Hauptartikel|Testtheorien der speziellen Relativitätstheorie}}<br /> [[Howard P. Robertson]] und andere zeigten, dass die Lorentz-Transformation auch empirisch hergeleitet werden kann. Dazu ist es nötig, allgemeine Transformationsformeln zwischen verschiedenen Inertialsystemen mit experimentell bestimmbaren Parametern zu versehen. Es wird angenommen, dass ein einziges „bevorzugtes“ Inertialsystem &lt;math&gt;X, Y, Z, T&lt;/math&gt; existiert, in dem die Lichtgeschwindigkeit konstant, isotrop und unabhängig von der Geschwindigkeit der Quelle ist. Ebenso sollen [[Einstein-Synchronisation]] und Synchronisation durch langsamen Uhrentransport in diesem System äquivalent sein. Es sei ein weiteres, zu diesem System kollineares System &lt;math&gt;x, y, z, t&lt;/math&gt; gegeben, dessen räumlicher Ursprung zum Zeitpunkt &lt;math&gt;T = t = 0&lt;/math&gt; mit dem Ursprung des ersten Systems übereinstimmt und in dem die Uhren und Maßstäbe dieselbe interne Konstitution haben wie im ersten System. Dieses zweite System bewegt sich relativ zum ersten System mit konstanter Geschwindigkeit entlang der gemeinsamen &lt;math&gt;X&lt;/math&gt;-Achse. Folgende Größen bleiben dabei zunächst unbestimmt:<br /> * &lt;math&gt;a(v)&lt;/math&gt; Unterschiede in der Zeitmessung,<br /> * &lt;math&gt;b(v)&lt;/math&gt; Unterschiede in der Messung longitudinaler Längen,<br /> * &lt;math&gt;d(v)&lt;/math&gt; Unterschiede in der Messung transversaler Längen,<br /> * &lt;math&gt;\varepsilon(v)&lt;/math&gt; folgt aus der Konvention zur Uhrensynchronisation.<br /> <br /> Daraus ergeben sich folgende Transformationsformeln:<br /> :&lt;math&gt;\begin{align}<br /> t &amp; =a(v)T+\varepsilon(v) x\\<br /> x &amp; =b(v)(X-vT)\\<br /> y &amp; =d(v)Y\\<br /> z &amp; =d(v)Z<br /> \end{align}&lt;/math&gt;<br /> <br /> &lt;math&gt;\varepsilon (v)&lt;/math&gt; wird nicht direkt gemessen, sondern folgt aus der Uhrensynchronisationskonvention. Hier ist die Einstein-Synchronisation die einfachste Möglichkeit, woraus sich &lt;math&gt;\textstyle \varepsilon (v)=-v/c^{2}&lt;/math&gt; ergibt. Das Verhältnis zwischen &lt;math&gt;b(v)&lt;/math&gt; und &lt;math&gt;d(v)&lt;/math&gt; wird aus dem [[Michelson-Morley-Experiment]], das Verhältnis zwischen &lt;math&gt;a(v)&lt;/math&gt; und &lt;math&gt;b(v)&lt;/math&gt; aus dem [[Kennedy-Thorndike-Experiment]] und schließlich &lt;math&gt;a(v)&lt;/math&gt; allein aus dem [[Ives-Stilwell-Experiment]] bestimmt. Die Experimente ergaben &lt;math&gt;\textstyle 1/a(v)=b(v)=\gamma&lt;/math&gt; und &lt;math&gt;d(v)=1&lt;/math&gt;, was obige Transformation in die Lorentz-Transformation überführt. Hingegen wurde die Galilei-Transformation &lt;math&gt;a(v)=b(v)=d(v)=1&lt;/math&gt; damit ausgeschlossen.<br /> <br /> == Poincaré- und Lorentz-Gruppe ==<br /> {{Hauptartikel|Lorentz-Gruppe|Poincaré-Gruppe}}<br /> <br /> Die Poincaré-[[Gruppe (Mathematik)|Gruppe]] ist die Menge der linear inhomogenen Transformationen<br /> <br /> :&lt;math&gt;T_{\Lambda,a}\colon x \mapsto T_{\Lambda,a}x = x^\prime,\quad x^{\prime\,m}=\Lambda^{m}{}_n\,x^{n}+a^{m},\quad m,n \in \{0,1,2,3\},&lt;/math&gt;<br /> <br /> die den Abstand zweier Vierervektoren invariant lassen. Die Untergruppe der homogenen Transformationen &lt;math&gt;\textstyle T_{\Lambda,0}&lt;/math&gt; bildet die Lorentz-Gruppe,<br /> &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;, das ist die Gruppe der linearen Transformationen von &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt; auf &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt;, die das Längenquadrat<br /> :&lt;math&gt;w^2=t^2-x^2-y^2-z^2&lt;/math&gt;<br /> jedes Vektors &lt;math&gt;w=(t,x,y,z)&lt;/math&gt; aus &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt; invariant lassen.<br /> Schreiben wir das Längenquadrat als [[Matrixprodukt]]<br /> :&lt;math&gt;w^{\mathrm T}\,\eta\,w&lt;/math&gt;<br /> des Spaltenvektors &lt;math&gt;w&lt;/math&gt; mit der Matrix<br /> :&lt;math&gt;<br /> \eta = \begin{pmatrix}<br /> 1 &amp; 0&amp; 0&amp; 0\\<br /> 0 &amp;-1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp;-1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp;-1\\<br /> \end{pmatrix} &lt;/math&gt;<br /> und der transponierten Spalte, der Zeile &lt;math&gt;\textstyle w^{\mathrm T}&lt;/math&gt;, so muss für jeden Lorentz-transformierten Vektor &lt;math&gt;\Lambda w&lt;/math&gt; gelten<br /> :&lt;math&gt;w^{\mathrm T}\,\Lambda^{\mathrm T}\eta\,\Lambda\,w=w^{\mathrm T}\,\eta\,w.&lt;/math&gt;<br /> Dies ist genau dann der Fall, wenn die Lorentz-Transformation die Gleichung<br /> :&lt;math&gt;\Lambda^{\mathrm T}\eta\,\Lambda =\eta&lt;/math&gt;<br /> erfüllt.<br /> <br /> Alle Lösungen dieser Gleichung, die die Zeitrichtung und räumliche Orientierung nicht umdrehen, sind von der Form<br /> :&lt;math&gt;\Lambda=D_1\,\Lambda_{v}\,D_2.&lt;/math&gt;<br /> Dabei sind &lt;math&gt;D_1&lt;/math&gt; und &lt;math&gt;D_2&lt;/math&gt; Drehungen<br /> :&lt;math&gt;<br /> D= \begin{pmatrix}<br /> 1 &amp; \\<br /> &amp; D_{3 \times 3} \\<br /> \end{pmatrix},\quad <br /> D_{3 \times 3}^{\mathrm T}\,D_{3 \times 3}=\mathbf 1,\quad <br /> \det D_{3 \times 3}=1.&lt;/math&gt;<br /> Diese Drehungen bilden die Untergruppe [[SO(3)]] der Lorentz-Gruppe.<br /> Die Matrix<br /> :&lt;math&gt;\Lambda_v<br /> = \begin{pmatrix}<br /> \gamma &amp; -\gamma \,v &amp; 0 &amp; 0 \\<br /> -\gamma \, v &amp; \gamma &amp; 0 &amp; 0 \\<br /> 0 &amp; 0 &amp; 1 &amp; 0\\<br /> 0 &amp; 0 &amp; 0 &amp;1 \\<br /> \end{pmatrix} &lt;/math&gt;<br /> bewirkt die oben angegebene Lorentz-Transformation mit einer Geschwindigkeit &lt;math&gt;|v|&lt;1&lt;/math&gt;. Die Transformationen<br /> :&lt;math&gt;\Lambda=D\,\Lambda_{v}\,D^{-1}.&lt;/math&gt;<br /> heißen ''Lorentz-Boost''. Sie transformieren auf die Koordinaten des bewegten Beobachters, der sich mit Geschwindigkeit &lt;math&gt;v&lt;/math&gt; in die Richtung bewegt, die sich durch die Drehung &lt;math&gt;D&lt;/math&gt; aus der &lt;math&gt;x&lt;/math&gt;-Richtung ergibt.<br /> <br /> Lorentz-Transformationen, die das [[Vorzeichen (Zahl)|Vorzeichen]] der Zeitkoordinate, die Richtung der Zeit, nicht ändern,<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\ge 1 ,&lt;/math&gt;<br /> <br /> bilden die Untergruppe der orthochronen Lorentz-Transformationen. Die Lorentz-Transformationen mit<br /> <br /> * &lt;math&gt;\det \Lambda = 1&lt;/math&gt;<br /> <br /> bilden die Untergruppe der eigentlichen Lorentz-Transformationen. Für die orientierungstreuen Lorentz-Transformationen gilt<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\cdot \det \Lambda \ge 1.&lt;/math&gt;<br /> <br /> Die zeit- und orientierungstreuen Lorentz-Transformationen<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\ge 1,\quad \det \Lambda = 1,&lt;/math&gt;<br /> <br /> bilden die eigentliche orthochrone Lorentz-Gruppe. Sie ist zusammenhängend: Jede eigentliche orthochrone Lorentz-Transformation kann durch stetige Veränderung der sechs Parameter, drei für die Drehachse und den Drehwinkel und drei für die Relativgeschwindigkeit der beiden Bezugssysteme, in die identische Abbildung übergeführt werden.<br /> <br /> === Zeit- und Raumspiegelung ===<br /> <br /> Die nicht mit der &lt;math&gt;\mathbf 1&lt;/math&gt; zusammenhängenden Lorentz-Transformationen erhält man, indem man die Zeitspiegelung oder die Raumspiegelung<br /> :&lt;math&gt;<br /> \mathcal{T} = \begin{pmatrix}<br /> -1&amp; 0&amp; 0&amp; 0\\<br /> 0 &amp; 1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp; 1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp; 1\\<br /> \end{pmatrix}<br /> ,\quad<br /> \mathcal{P} = \begin{pmatrix}<br /> 1 &amp; 0&amp; 0&amp; 0\\<br /> 0 &amp;-1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp;-1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp;-1 \\<br /> \end{pmatrix} &lt;/math&gt;<br /> oder beide mit den Lorentz-Transformationen multipliziert, die mit der &lt;math&gt;\mathbf 1&lt;/math&gt; zusammenhängen. Die Lorentz-Gruppe &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt; hat vier Zusammenhangskomponenten.<br /> <br /> == Überlagerungsgruppe ==<br /> <br /> Die folgenden Überlegungen zeigen, dass die Gruppe der linearen Transformationen des zweidimensionalen, komplexen Vektorraumes &lt;math&gt;\textstyle \mathbb C^2&lt;/math&gt;, deren Determinante den speziellen Wert &lt;math&gt;1&lt;/math&gt; hat, die sogenannte [[spezielle lineare Gruppe]] &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;, die [[Zusammenhängender Raum|einfach zusammenhängende]] [[Überlagerung (Topologie)|Überlagerung]] der eigentlichen orthochronen Lorentz-Transformationen ist. Dabei überlagert die Untergruppe der speziellen unitären zweidimensionalen Transformationen, [[SU(2)]] die Gruppe der Drehungen, &lt;math&gt;\mathrm{SO}(3)&lt;/math&gt;.<br /> <br /> Jede [[Hermitesche Matrix|hermitesche]] &lt;math&gt;2\times 2&lt;/math&gt; – Matrix ist von der Form:<br /> <br /> :&lt;math&gt;\hat{w}<br /> = \begin{pmatrix}<br /> t+z&amp;x-\mathrm{i}y\\<br /> x+\mathrm{i}y&amp;t-z<br /> \end{pmatrix}=\hat{w}^{\mathrm{T}\,*}=\hat{w}^\dagger. &lt;/math&gt;<br /> <br /> Da sie umkehrbar eindeutig durch die vier reellen Parameter &lt;math&gt;w=(t,x,y,z)&lt;/math&gt; bezeichnet wird und da Summen und reelle Vielfache hermitescher Matrizen wieder hermitesch sind und zu den Summen und Vielfachen der Vierervektoren &lt;math&gt;w&lt;/math&gt; gehören, ist sie Element eines vierdimensionalen Vektorraums.<br /> <br /> Die Determinante<br /> <br /> :&lt;math&gt;\det\hat{w}=t^2-x^2-y^2-z^2 &lt;/math&gt;<br /> <br /> ist das Längenquadrat des Vierervektors &lt;math&gt;w&lt;/math&gt;.<br /> <br /> Multipliziert man &lt;math&gt;\hat{w}&lt;/math&gt; von links mit einer beliebigen, komplexen &lt;math&gt;2\times 2&lt;/math&gt; – Matrix und von rechts mit deren adjungierten, so ist das Ergebnis &lt;math&gt;\textstyle M\hat{w}M^\dagger=\hat{u}&lt;/math&gt; wieder hermitesch und lässt sich als &lt;math&gt;\hat{u}&lt;/math&gt; schreiben, wobei &lt;math&gt;u=\Lambda w&lt;/math&gt; linear von &lt;math&gt;w&lt;/math&gt; abhängt. Ist &lt;math&gt;M&lt;/math&gt; aus der ''speziellen'' linearen Gruppe der komplexen &lt;math&gt;2\times 2&lt;/math&gt;-Matrizen, &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;, deren Determinanten den speziellen Wert &lt;math&gt;1&lt;/math&gt; haben, so stimmt das Längenquadrat von &lt;math&gt;w&lt;/math&gt; und &lt;math&gt;u=\Lambda w&lt;/math&gt; überein, &lt;math&gt;\Lambda&lt;/math&gt; ist also eine Lorentz-Transformation. Zu jedem &lt;math&gt;M&lt;/math&gt; aus &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; gehört so vermöge<br /> <br /> :&lt;math&gt;M\hat{w}M^\dagger=\widehat{\Lambda w}&lt;/math&gt;<br /> <br /> eine Lorentz-Transformation &lt;math&gt;\Lambda&lt;/math&gt; aus &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;. Genauer gehört zu jedem Paar &lt;math&gt;\pm M&lt;/math&gt; von komplexen &lt;math&gt;2\times 2&lt;/math&gt;-Matrizen aus &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; genau eine Lorentz-Transformation &lt;math&gt;\Lambda(M)=\Lambda(-M)&lt;/math&gt; aus dem Teil von &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;, welcher mit der &lt;math&gt;\mathbf 1&lt;/math&gt; stetig zusammenhängt. Dieser Teil der Lorentz-Gruppe ist eine Darstellung der Gruppe &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;.<br /> <br /> Die Gruppe &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; ist die Produktmannigfaltigkeit &lt;math&gt;\mathbb{R}^3\times S^3&lt;/math&gt; und einfach zusammenhängend. Die Gruppe der eigentlichen orthochronen Lorentz-Transformationen ist hingegen nicht einfach zusammenhängend:<br /> Drehungen um eine feste Achse mit Winkeln, die von &lt;math&gt;\alpha = 0&lt;/math&gt; bis &lt;math&gt;\alpha = 2\pi&lt;/math&gt; anwachsen, bilden in der Drehgruppe einen geschlossenen Kreis. Man kann diese Transformationen nicht stetig in andere Drehungen abändern, so dass dieser Kreis auf einen Punkt zusammenschrumpft.<br /> <br /> == Literatur ==<br /> * [[Charles Kittel]], Walter D. Knight, Malvin A. Ruderman: ''Mechanik'' (= ''Berkeley Physik Kurs.'' Bd. 1). Vieweg, Braunschweig 1973, ISBN 3-528-08351-4, S. 232: Kap. 11.<br /> * Norbert Dragon: [https://www.itp.uni-hannover.de/fileadmin/arbeitsgruppen/dragon/relativ.pdf ''Geometrie der Relativitätstheorie.''] (PDF-Datei; 2,37&amp;nbsp;MB)<br /> <br /> == Weblinks ==<br /> * [http://www.mathe-online.at/mathint/struct/applet_b_lorentz.html Interaktives Java Applet]<br /> * {{TIBAV |19922 |Linktext=Lorentz-Transformationen |Herausgeber=Loviscach |Jahr=2013 |DOI=10.5446/19922}}<br /> * {{TIBAV |19921 |Linktext=Lorentz-Transformation im Detail |Herausgeber=Loviscach |Jahr=2013 |DOI=10.5446/19921}}<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> {{SORTIERUNG:Lorentztransformation}}<br /> [[Kategorie:Spezielle Relativitätstheorie]]<br /> [[Kategorie:Symmetrie (Physik)]]<br /> [[Kategorie:Transformation]]<br /> [[Kategorie:Hendrik Antoon Lorentz]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Lorentz-Transformation&diff=192687206 Lorentz-Transformation 2019-09-28T22:38:48Z <p>MickHaskell: /* Spezielle Lorentz-Transformation für Orte und Zeiten */Inhalt hinzugefügt.</p> <hr /> <div>{{QS-Physik|Lorentz-Transformation und Spezielle Lorentz-Transformation|Unerledigt=2018}}<br /> Die '''Lorentz-Transformationen''', nach [[Hendrik Antoon Lorentz]], sind eine Klasse von [[Koordinatentransformation]]en, um in der Physik Phänomene in verschiedenen [[Bezugssystem]]en zu beschreiben. Sie verbinden in einer vierdimensionalen [[Raumzeit]] die Zeit- und Ortskoordinaten, mit denen verschiedene [[Beobachter (Physik)|Beobachter]] angeben, wann und wo Ereignisse stattfinden. Die Lorentz-Transformationen bilden daher die Grundlage der [[Spezielle Relativitätstheorie|Speziellen Relativitätstheorie]] von [[Albert Einstein]].<br /> <br /> Das Äquivalent zu den Lorentz-Transformationen im dreidimensionalen [[Euklidische Metrik|euklidischen]] Raum sind die [[Galilei-Transformation]]en; genauso wie diese [[Abstand|Abstände]] und [[Winkel]] erhalten, erhalten die Lorentz-Transformationen die Abstände in der nichteuklidischen Raumzeit ([[Minkowskiraum]]). Winkel werden im Minkowskiraum nicht erhalten, da der Minkowskiraum kein [[normierter Raum]] ist.<br /> <br /> Die Lorentz-Transformationen bilden eine [[Gruppe (Mathematik)|Gruppe]] im mathematischen Sinn, die [[Lorentz-Gruppe]], da zu jeder Lorentz-Transformation eine inverse Transformation existiert, die wieder in das ursprüngliche Bezugssystem zurück transformiert, die Hintereinanderausführung von Lorentz-Transformationen als eine einzige Lorentz-Transformation beschrieben werden kann, und der triviale Wechsel von einem Bezugssystem in dasselbe ebenfalls eine Lorentz-Transformation ist.<br /> <br /> Unterklassen der Lorentz-Transformationen sind die diskreten Transformationen der [[Raumspiegelung]], also der Inversion aller räumlichen Koordinaten, sowie der [[Zeitumkehr (Physik)|Zeitumkehr]], also die Umkehr des [[Zeitpfeil]]s, und die kontinuierlichen Transformationen der endlichen [[Drehung]] sowie der [[Spezielle Lorentz-Transformation|speziellen Lorentz-Transformationen]] oder Lorentz-Boosts. Kontinuierliche Drehbewegungen der Koordinatensysteme gehören nicht zu den Lorentz-Transformationen. Teilweise werden auch nur die speziellen Lorentz-Transformationen verkürzend als Lorentz-Transformationen betitelt.<br /> <br /> == Definition ==<br /> === Bestandteile der Lorentz-Transformation ===<br /> Die Lorentz-Transformation umfasst alle [[Lineare Transformation|linearen Transformationen]] der Koordinaten zwischen zwei Beobachtern. Sie sind daher Transformationen zwischen zwei [[Inertialsystem]]en, deren Koordinatenursprung, der Bezugspunkt des Koordinatensystems zum Zeitpunkt &lt;math&gt;t=0&lt;/math&gt;, übereinstimmt. Eine allgemeine Lorentz-Transformation umfasst daher<br /> * Transformationen zwischen zwei Beobachtern, die eine unterschiedliche, konstante Geschwindigkeit besitzen, genannt ''Lorentz-Boost'' oder [[Spezielle Lorentztransformation|spezielle Lorentz-Transformation]].&lt;ref&gt;{{Literatur|Autor=Harald Klingbeil|Titel=Elektromagnetische Feldtheorie: Ein Lehr- und Übungsbuch|Verlag=Springer-Verlag|Jahr=2010|ISBN=3834814032|Seiten=497|Online={{Google Buch|BuchID=Sms9MRllvggC|Seite=497}}}}&lt;/ref&gt; Sie entsprechen einer Drehung im Raum-Zeit-Sektor des nichteuklidischen Minkowskiraums.<br /> * [[Drehung]]en der räumlichen Koordinaten<br /> * [[Zeitumkehr|Zeit-]] und [[Raumspiegelung]]en<br /> Jede allgemeine Lorentz-Transformation lässt sich als Hintereinanderausführung dieser Transformationen schreiben. Eine Lorentz-Transformation, bei der Spiegelungen ausgeschlossen sind und die Orientierung der Zeit erhalten ist, wird als ''eigentliche, orthochrone'' Lorentz-Transformation bezeichnet.<br /> <br /> === Spezielle Lorentz-Transformation für Orte und Zeiten ===<br /> Ist ein Beobachter '''A''' mit konstanter Geschwindigkeit &lt;math&gt;v&lt;/math&gt; in &lt;math&gt;x&lt;/math&gt;-Richtung gegenüber einem anderen Beobachter '''B''' bewegt, so hängen die Koordinaten &lt;math&gt;\textstyle(t',x',y',z')&lt;/math&gt;, die Beobachter '''A''' einem Ereignis zuschreibt, durch die spezielle Lorentz-Transformation<br /> :&lt;math&gt;<br /> \begin{align}<br /> t' &amp;= \gamma \left( t - \frac{v }{c^2}\,x \right)\\<br /> x' &amp;= \gamma (x - v\,t )\\<br /> y' &amp;= y\\<br /> z' &amp;= z<br /> \end{align}<br /> &lt;/math&gt;<br /> mit den Koordinaten &lt;math&gt;(t,x,y,z)&lt;/math&gt; des Beobachters '''B''' für dasselbe Ereignis zusammen, falls die beiden Bezugssysteme denselben Ursprung haben, also zum Zeitpunkt &lt;math&gt;\textstyle t=t'=0&lt;/math&gt; miteinander übereinstimmen. Darin ist &lt;math&gt;\textstyle\gamma = \frac{1}{\sqrt{1-v^2/c^2}}&lt;/math&gt; der [[Lorentzfaktor]].<br /> ==== Inverse der Speziellen Lorentz-Transformation ====<br /> Da die Bewegung zwischen '''A''' und '''B''' relativ ist, kann man ihre Rollen vertauschen. Die Beziehung zwischen den Koordinaten gilt dann auch in umgekehrter Richtung, natürlich mit negierter Geschwindigkeit in den Formeln. Das dies tatsächlich die inverse Transformation beschreibt, kann leicht durch Multiplikation der beiden entsprechenden Transformationsmatrizen verifiziert werden.<br /> <br /> == Geschichtliche Entwicklung ==<br /> {{Hauptartikel|Geschichte der Lorentz-Transformation}}<br /> <br /> Die Arbeiten von [[Woldemar Voigt]] (1887), [[Hendrik Antoon Lorentz]] (1895, 1899, 1904), [[Joseph Larmor]] (1897, 1900) und [[Henri Poincaré]] (1905), zeigten, dass die Lösungen der Gleichungen der Elektrodynamik durch Lorentz-Transformationen aufeinander abgebildet werden oder mit anderen Worten, dass die Lorentz-Transformationen Symmetrien der [[Maxwell-Gleichungen]] sind.<br /> <br /> Man versuchte damals, die elektromagnetischen Phänomene durch einen hypothetischen [[Äther (Physik)|Äther]], ein Übertragungsmedium für elektromagnetische Wellen, zu erklären. Es stellte sich allerdings heraus, dass sich von ihm keine Spur nachweisen ließ. Voigt stellte 1887 Transformationsformeln vor, welche die [[Wellengleichung]] invariant lassen. Die Voigt-Transformation ist jedoch nicht reziprok, bildet also keine [[Gruppe (Mathematik)|Gruppe]]. Voigt nahm an, dass die Ausbreitungsgeschwindigkeit der Wellen im Ruhesystem des Äthers und in einem Bezugssystem, das sich relativ zu diesem mit konstanter Geschwindigkeit bewegt, gleich ist, ohne dafür eine Erklärung anzugeben.&lt;ref&gt;{{arXiv|1609.08647v1}}&lt;/ref&gt; In seiner [[Lorentzsche Äthertheorie|Äthertheorie]] konnte Lorentz dies dadurch erklären, dass die Längenmaßstäbe sich bei Bewegung in Bewegungsrichtung verkürzen und dass bewegte Uhren eine langsamer verlaufende Zeit anzeigen, die er Ortszeit nannte. Die von Lorentz angegebenen Transformationen der Längen und Zeiten bildeten eine Gruppe und waren damit mathematisch stimmig. Auch wenn in Lorentz’ Äthertheorie eine gleichförmige Bewegung gegenüber dem Äther nicht nachweisbar war, hielt Lorentz an der Vorstellung eines Äthers fest.<br /> <br /> Einsteins [[spezielle Relativitätstheorie]] löste [[Klassische Mechanik|Newtons Mechanik]] und die Ätherhypothese ab. Er leitete seine Theorie aus dem [[Relativitätsprinzip]] ab, dass sich im Vakuum unter Vernachlässigung von gravitativen Effekten Ruhe nicht von gleichförmiger Bewegung unterscheiden lässt. Insbesondere hat Licht im Vakuum für jeden Beobachter dieselbe Geschwindigkeit &lt;math&gt;c&lt;/math&gt;. Die Zeit- und Ortskoordinaten, mit denen zwei gleichförmig bewegte Beobachter Ereignisse bezeichnen, hängen dann durch eine Lorentz-Transformation miteinander zusammen, statt wie in Newtons Mechanik durch eine [[Galilei-Transformation]].<br /> <br /> == Eigenschaften ==<br /> === Geschwindigkeitsaddition ===<br /> {{Hauptartikel|Relativistisches Additionstheorem für Geschwindigkeiten}}<br /> Zwei hintereinander ausgeführte Lorentz-Boosts in dieselbe Richtung mit Geschwindigkeit &lt;math&gt;v_1&lt;/math&gt; und &lt;math&gt;v_2&lt;/math&gt; ergeben wieder einen Lorentz-Boost mit der Gesamtgeschwindigkeit<br /> :&lt;math&gt;\frac{v}{c}=\frac{\frac{v_1}{c}+\frac{v_2}{c}}{1+\frac{v_1}{c}\cdot\frac{v_2}{c}}.&lt;/math&gt;<br /> Die Gleichung zeigt, dass sich die Lichtgeschwindigkeit bei Lorentz-Transformationen nicht ändert. Ist etwa &lt;math&gt;v_1&lt;/math&gt; die Lichtgeschwindigkeit, das heißt &lt;math&gt;\tfrac{v_1}{c}=1&lt;/math&gt;, so ist &lt;math&gt;v=c\tfrac{1+v_2/c}{1+v_2/c} = c&lt;/math&gt; ebenfalls die Lichtgeschwindigkeit.<br /> <br /> Hintereinander ausgeführte Lorentz-Boosts in verschiedene Richtungen ergeben im Allgemeinen keine Lorentz-Boosts, sondern eine allgemeine Lorentz-Transformation: Die Menge der Lorentz-Boosts ist keine Untergruppe der Lorentz-Transformationen.<br /> <br /> === Lorentz-Invariante ===<br /> {{Anker|Lorentz-Invarianz}}Eine Größe, die sich bei Lorentz-Transformationen nicht ändert, heißt '''Lorentz-Invariante''' oder '''Lorentz-Skalar'''. Bei einem physikalischen System oder Vorgang beschreibt eine Lorentz-Invariante eine Eigenschaft, die von allen Inertialsystemen aus mit gleichem Wert beobachtet wird, wie z.&amp;nbsp;B. die Lichtgeschwindigkeit &lt;math&gt;c&lt;/math&gt;, die [[Masse (Physik)|Masse]] &lt;math&gt;m&lt;/math&gt;, die Teilchenzahl, die [[elektrische Ladung]] etc.<br /> <br /> Bei einem Lorentz-Boost in Richtung &lt;math&gt;x&lt;/math&gt; lässt sich zeigen, dass<br /> :&lt;math&gt;c^2 t'^2 - x'^2 = c^2 t^2 - x^2&lt;/math&gt;<br /> gelten muss. Der Ausdruck &lt;math&gt;\textstyle c^2 t^2-x^2&lt;/math&gt; ist also eine Invariante der Lorentz-Transformation, d.&amp;nbsp;h. in allen unter Lorentz-Transformationen verbundenen Koordinatensystemen konstant.<br /> <br /> In drei Raumdimensionen ist die [[Norm (Mathematik)|Norm]] &lt;math&gt;\textstyle c^2 t^2-(x^2+y^2+z^2)&lt;/math&gt; die einzige Möglichkeit, eine Lorentz-Invariante zu bilden. Z.&amp;nbsp;B. ist die Norm des Energie-Impuls-Vektors die mit &lt;math&gt;c&lt;/math&gt; multiplizierte Masse &lt;math&gt;mc&lt;/math&gt;, und die Norm des Drehimpulsvektors ist der lorentzinvariante Betrag des Eigendrehimpulses. Auch der Abstand zweier Ereignisse, also die Norm der Differenz der [[Vierervektor]]en der beiden Weltpunkte, ist lorentzinvariant. Bei zwei Vierervektoren ist auch ihr Skalarprodukt lorentzinvariant. Ein Tensor 2. Stufe hat eine lorentzinvariante Spur etc.<br /> <br /> === Lorentz-Kontraktion und Invarianz der transversalen Koordinaten ===<br /> {{Hauptartikel|Spezielle Lorentz-Transformation|Lorentzkontraktion}}<br /> Für einen Lorentz-Boost mit beliebig gerichteter Geschwindigkeit &lt;math&gt;\vec v&lt;/math&gt;, lässt sich der Koordinatenvektor &lt;math&gt;\vec r=(x,y,z)&lt;/math&gt; des Ereignisses in zwei Komponenten&lt;ref&gt;{{Literatur | Autor=Christian Møller | Titel=The theory of relativity | Jahr=1952 | Kapitel=§ 18. The most general Lorentz transformation | Seiten=41 | Online=[http://archive.org/stream/theoryofrelativi029229mbp#page/n58/mode/1up Internet Archive]}}&lt;/ref&gt;&lt;ref&gt;Klaus W. Kark: ''Antennen und Strahlungsfelder. Elektromagnetische Wellen auf Leitungen, im Freiraum und ihre Abstrahlung.'' 3., erweiterte Auflage. Vieweg + Teubner, Wiesbaden 2010, ISBN 978-3-8348-0553-9, Kap. 3.7.1, S. 46&lt;/ref&gt; &lt;math&gt;\textstyle\vec r =\vec{r_\parallel} + \vec{r_\bot} &lt;/math&gt; zerlegen. Die Indizes &lt;math&gt;\parallel&lt;/math&gt; und &lt;math&gt;\perp&lt;/math&gt; bezeichnen dabei die parallele bzw. eine rechtwinklige Richtung zur Geschwindigkeit &lt;math&gt;\vec v&lt;/math&gt;. Die transformierten Koordinaten sind dann durch<br /> <br /> :&lt;math&gt;t'=\gamma \left( t-\frac{\vec{v}\cdot \vec r}{c^2} \right),\qquad <br /> \vec{r}_\parallel '=\gamma \left(\vec{r}_\parallel -\vec{v} t\right),\qquad <br /> \vec{r}_\bot '=\vec{r}_\bot&lt;/math&gt;<br /> <br /> gegeben. Ein von den Beobachtern im gestrichenen System gemessener Abstand &lt;math&gt;\vec r'&lt;/math&gt; ist nur in Bewegungsrichtung &lt;math&gt;\vec{r_\parallel}&lt;/math&gt; verkürzt. Dieser Effekt wird Lorentz-Kontraktion genannt. Bei Maßstäben &lt;math&gt;\vec{r_\bot}&lt;/math&gt; senkrecht zur Bewegungsrichtung wirkt sich die [[Relativität der Gleichzeitigkeit]] nicht aus. Zusammengefasst lauten diese Gleichungen in der Matrixschreibweise mit [[Vierervektor]]en (und der [[Einheitsmatrix]] &lt;math&gt;I_3&lt;/math&gt;):<br /> <br /> &lt;math&gt;<br /> \begin{pmatrix} c t' \\ \vec{r}' \end{pmatrix}<br /> =<br /> \begin{pmatrix}<br /> \gamma &amp; -\gamma\vec{v}^T/c\\<br /> -\gamma\vec{v}/c &amp; \mathrm{I}_3 + (\gamma-1)\vec{v}\vec{v}^T/v^2\\<br /> \end{pmatrix}<br /> \begin{pmatrix} c t \\ \vec{r} \end{pmatrix}<br /> &lt;/math&gt;.<br /> <br /> Auf gleiche Weise lassen sich elektromagnetische Felder gemäß &lt;math&gt;\vec E'=\vec E'_\parallel +\vec E'_{\perp}&lt;/math&gt; und &lt;math&gt;\vec B'=\vec B'_\parallel +\vec B'_{\perp}&lt;/math&gt; in Komponenten zerlegen.&lt;ref name=&quot;Feynman&quot;&gt; [[Richard Feynman|R. P. Feynman]]: Lectures On Physics, Vol. II, 26-3, Relativistic transformation of the fields&lt;/ref&gt; Man erhält die (skalaren) Feldkoordinaten<br /> :&lt;math&gt;\begin{align}<br /> E'_\parallel &amp;= E_\parallel\\<br /> B'_\parallel &amp;= B_\parallel\\<br /> E'_\perp &amp;= \gamma\left(\vec E + \vec v\times\vec B\right)_\perp\\<br /> B'_\perp &amp;= \gamma\left(\vec B - \frac{\vec v\times\vec E}{c^2}\right)_ \perp.<br /> \end{align}&lt;/math&gt;<br /> <br /> In nichtrelativistischer Näherung, d.&amp;nbsp;h. für Geschwindigkeiten &lt;math&gt;v\ll c&lt;/math&gt;, gilt &lt;math&gt;\gamma \approx 1&lt;/math&gt;. In diesem Fall braucht nicht zwischen Orten und Zeiten in verschiedenen Bezugssystemen unterschieden zu werden und für die Feldgrößen gilt:<br /> <br /> :&lt;math&gt;\begin{align}<br /> &amp; {\vec{E}}'=\vec{E}+\vec{v}\times \vec{B} \\<br /> &amp; {\vec{B}}'=\vec{B}-(1/{{c}^{2}})\vec{v}\times \vec{E} \\<br /> &amp; \vec{E}=\vec{E}'-\vec{v}\times {\vec{B}}' \\<br /> &amp; \vec{B}={\vec{B}}'+(1/{{c}^{2}})\vec{v}\times {\vec{E}}' \\<br /> \end{align}&lt;/math&gt;<br /> <br /> == Herleitung ==<br /> Um die Formeln einfach zu halten, wird als [[Längeneinheit]] die Strecke, die Licht in einer Sekunde zurücklegt gewählt. Dann haben Zeit und Länge [[Natürliche Einheiten|dieselbe Maßeinheit]] und die dimensionslose Lichtgeschwindigkeit beträgt &lt;math&gt;c=1&lt;/math&gt;. Die Geschwindigkeit &lt;math&gt;v&lt;/math&gt; wird also in Einheiten der Lichtgeschwindigkeit gemessen.<br /> <br /> Die erste Herleitung beruhte auf der Invarianz der Wellengleichung im Rahmen der elastischen Lichttheorie. Später wurde gezeigt, dass die Lorentz-Transformationsformeln, die den Ausdruck &lt;math&gt;\textstyle \delta x^{2}+\delta y^{2}+\delta z^{2}-c^{2}\delta t^{2}&lt;/math&gt; und somit die Form von Lichtkugelwellen invariant lassen, sich rigoros aus der elektromagnetischen Wellengleichung (und somit aus den [[Maxwell-Gleichungen]]) herleiten lassen, sofern die Forderung nach Linearität und Reziprozität berücksichtigt wird.&lt;ref&gt;{{Cite book|author=[[Max von Laue]]|year=1913|title=Das Relativitätsprinzip|edition=2|publisher=Vieweg|location=Braunschweig|pages=38–41}}&lt;/ref&gt;&lt;ref&gt;{{Cite journal|author=Karl Stiegler|year=1958|title=On the Deduction of the Lorentz-Einstein Transformation from Maxwell's Electromagnetic Field Equations|journal=Proceedings of the Physical Society|pages=512–513|volume=71|issue=3|doi=10.1088/0370-1328/71/3/429}}&lt;/ref&gt; Im Rahmen der Elektrodynamik kann die Herleitung der Lorentz-Transformation auch unter Berücksichtigung des Potentials einer bewegten Ladung ([[Liénard-Wiechert-Potential]]) erfolgen.&lt;ref&gt;{{Cite book|author=Feynman, R.P.|year=2013|title=The Feynman Lectures on Physics|chapter=21–6 The potentials for a charge moving with constant velocity; the Lorentz formula |volume=2|location=New York|publisher=Basic Books|isbn=978-0-465-02416-2|url=http://www.feynmanlectures.caltech.edu/II_21.html#Ch21-S6}}&lt;/ref&gt; Darüber hinaus gibt es eine größere Gruppe von [[Kugelwellentransformation]]en, welche den Ausdruck &lt;math&gt;\textstyle \lambda\left(\delta x^{2}+\delta y^{2}+\delta z^{2}-c^{2}\delta t^{2}\right)&lt;/math&gt; invariant lassen. Jedoch nur die Lorentz-Transformationen mit &lt;math&gt;\lambda=1&lt;/math&gt; bilden alle Naturgesetze einschließlich der Mechanik symmetrisch ab, und gehen für &lt;math&gt;c \to \infty&lt;/math&gt; in die Galilei-Transformation über.<br /> <br /> Herleitungen in modernen Lehrbüchern beruhen überwiegend auf der Interpretation der Transformationen im Sinne der Speziellen Relativitätstheorie, wonach diese Raum und Zeit selbst betreffen, und sind unabhängig von Annahmen zur Elektrodynamik. Einstein (1905) benutzte dabei zwei Postulate: Das Relativitätsprinzip und das Prinzip der Konstanz der Lichtgeschwindigkeit. Allgemeinere Herleitungen, welche auf [[Wladimir Ignatowski]] (1910) zurückgehen, beruhen auf gruppentheoretischen Erwägungen.&lt;ref&gt;{{Cite journal|author=Pal, Palash B.|year=2003|title=Nothing but relativity|journal=European Journal of Physics|pages=24|issue=3|doi=10.1088/0143-0807/24/3/312|arxiv=physics/0302045}}&lt;/ref&gt;&lt;ref&gt;{{Cite journal|author=Baccetti, Valentina; Tate, Kyle; Visser, Matt|year=2012|title=Inertial frames without the relativity principle|journal=Journal of High Energy Physics|pages=119|doi=10.1007/JHEP05(2012)119 <br /> |arxiv=1112.1466|bibcode = 2012JHEP...05..119B }}; Siehe Referenzen 5 bis 25.&lt;/ref&gt;<br /> <br /> === Herleitung aus Linearität und Relativitätsprinzip ===<br /> Die folgenden Überlegungen klären, wie Koordinaten zusammenhängen, die inertiale Beobachter (Beobachter die fest mit einem Inertialsystem verbunden sind) zur Benennung der Zeit und des Ortes von Ereignissen verwenden. Die Beobachter sollen hier beispielhaft Anna und Bert sein. Annas Koordinatensystem ist durch &lt;math&gt;x,y,z,t&lt;/math&gt; gegeben und Berts durch die gestrichenen Variablen &lt;math&gt;\textstyle x',y',z',t'&lt;/math&gt;. Es handele sich um rechtwinklige Koordinaten.<br /> <br /> ==== Linearität ====<br /> Für alle gleichförmig bewegten Beobachter durchlaufen freie Teilchen gerade Weltlinien. Daher muss die Transformation Geraden auf Geraden abbilden. Mathematisch besagt dies, dass die Transformation linear ist.<br /> <br /> Stimmen beide Beobachter in der Wahl des Zeitnullpunkts und des räumlichen Ursprungs überein, dann ist die gesuchte Transformation linear und homogen.<br /> <br /> Bert bewege sich relativ zu Anna mit der Geschwindigkeit &lt;math&gt;v&lt;/math&gt;. Die Koordinatensysteme werden so orientiert, dass &lt;math&gt;x, x'&lt;/math&gt; und &lt;math&gt;v&lt;/math&gt; auf einer Gerade in einer Richtung liegen. Dann kann man sich auf die Koordinaten &lt;math&gt;x,t&lt;/math&gt; beschränken.<br /> <br /> Die gesuchte Lorentz-Transformation lautet dann<br /> :&lt;math&gt;t' = at + bx, \quad x' = et + fx.&lt;/math&gt;<br /> Die Unbekannten &lt;math&gt;a, b, e, f&lt;/math&gt; sind nun zu bestimmen.<br /> <br /> ==== Lichtkegel ====<br /> Ein Lichtimpuls, den Anna zur Zeit &lt;math&gt;t=0&lt;/math&gt; am Ort &lt;math&gt;x=0&lt;/math&gt; losschickt, wird durch &lt;math&gt;x=\pm t&lt;/math&gt; beschrieben. Da die Lichtgeschwindigkeit absolut ist, muss für Bert &lt;math&gt;x'=\pm t'&lt;/math&gt; gelten. Die Gleichungen mit dem Pluszeichen erfordern &lt;math&gt;e+f=a+b&lt;/math&gt; und die Gleichungen mit dem Minuszeichen &lt;math&gt;e-f=-a+b&lt;/math&gt;. Daraus folgt &lt;math&gt;e=b&lt;/math&gt; und &lt;math&gt;f=a&lt;/math&gt; bzw.<br /> :&lt;math&gt;t' = at + bx, \quad x' = bt + ax.&lt;/math&gt;<br /> Dies gilt für alle Lorentz-Transformationen, unabhängig von der Relativgeschwindigkeit der Beobachter.<br /> <br /> ==== Relativgeschwindigkeit ====<br /> Anna beschreibt Berts Bewegung durch &lt;math&gt;x=vt&lt;/math&gt;, Bert seine eigene durch &lt;math&gt;\textstyle x'=0&lt;/math&gt;. Die Lorentz-Transformation von Annas zu Berts Koordinatensystem muss diese beiden Ausdrücke ineinander überführen. Aus &lt;math&gt;\textstyle x'=bt+avt=(b+av)t=0&lt;/math&gt; folgt dann &lt;math&gt;b=-av&lt;/math&gt;, also<br /> :&lt;math&gt;t' = a(t - vx), \quad x' = a(x - vt).&lt;/math&gt;<br /> Es bleibt noch der Vorfaktor &lt;math&gt;a&lt;/math&gt; zu bestimmen. Von den Koordinaten kann er nicht abhängen, sonst wäre die Lorentz-Transformation nichtlinear. Bleibt also eine Abhängigkeit von der Relativgeschwindigkeit. Man schreibt &lt;math&gt;a=a(v)&lt;/math&gt;. Da die Lorentz-Transformation nicht von der Richtung von &lt;math&gt;v&lt;/math&gt; abhängen soll, gilt &lt;math&gt;a=a(|v|)&lt;/math&gt;.<br /> <br /> ==== Vorfaktor ====<br /> Um den Vorfaktor zu bestimmen, führt man eine weitere inertiale Beobachterin Clara mit den Koordinaten &lt;math&gt;\textstyle t'', x''&lt;/math&gt; und der Relativgeschwindigkeit &lt;math&gt;v'&lt;/math&gt; in Bezug auf Bert ein. Die Lorentz-Transformation von Berts zu Claras Koordinaten muss wegen des Relativitätsprinzips dieselbe Form wie die obige haben, also<br /> :&lt;math&gt;t'' = a'(t' - v'x'),\quad x'' = a'(x' - v't'),&lt;/math&gt;<br /> dabei wurde &lt;math&gt;a'=a(v')&lt;/math&gt; abgekürzt.<br /> <br /> Man kombiniert nun die beiden Transformationen, rechnet also die Koordinaten von Anna in die von Clara um. Es reicht dazu, eine der beiden Koordinaten zu berechnen:<br /> :&lt;math&gt;t''=a'(t'-v'x') = a'(a(t-vx)-v'a(x-vt)) =a'a(1+vv')\left(t-\frac{v+v'}{1+vv'}x\right).&lt;/math&gt;<br /> Sitzt Clara neben Anna, ist &lt;math&gt;v'=-v&lt;/math&gt; und die doppelt gestrichenen Koordinaten sind gleich den ungestrichenen. Der Faktor &lt;math&gt;\textstyle (v+v')/(1+vv')&lt;/math&gt; verschwindet und der Vorfaktor &lt;math&gt;\textstyle a'a(1+v'v)=a'a(1-v^2)&lt;/math&gt; muss gleich 1 sein. Wegen &lt;math&gt;\textstyle a(-v)a(v)\cdot(1-v^2)=1&lt;/math&gt; und &lt;math&gt;a(-v)=a(v)&lt;/math&gt; muss dann<br /> :&lt;math&gt;a(v)= \frac{1}{\sqrt{1-v^2}}&lt;/math&gt;<br /> gelten. Mit der Abkürzung &lt;math&gt;\gamma=a(v)&lt;/math&gt; ist<br /> :&lt;math&gt;t' = \gamma(t-vx), <br /> \quad x'=\gamma(x-vt).&lt;/math&gt;<br /> Die Lorentz-Transformationen lauten daher<br /> :&lt;math&gt;t' = \gamma \left(t- \left(\frac{v}{c^2} \right)x \right), <br /> \qquad x'=\gamma(x-vt), <br /> \qquad\gamma = \frac{1}{\sqrt{1-(\frac{v}{c})^2}} .&lt;/math&gt;<br /> <br /> === Herleitung aus der Zeitdilatation ===<br /> Mit einem Argument von Macdonald&lt;ref&gt;Alan Macdonald, ''Derivation of the Lorentz transformation.'' In: ''American Journal of Physics.'' Vol. 49, Issue 5, 1981, {{ISSN|0002-9505}}, S. 493, [http://arxiv.org/abs/physics/0606046v1 aktualisierte Version].&lt;/ref&gt; kann man die Transformationsformeln aus der [[Zeitdilatation]] gewinnen. An einer Lichtfront, die sich in positiver x-Richtung bewegt, hat die Differenzkoordinate &lt;math&gt;ct - x &lt;/math&gt; überall denselben Wert, ebenso &lt;math&gt;\textstyle ct' - x' &lt;/math&gt;. Man betrachtet eine Front, die durch das Ereignis E geht und irgendwann (vorher oder nachher) auf den bewegten Koordinatenursprung O' trifft, der langsamer als Licht sein muss. Wegen der gleichbleibenden Werte stehen die Differenzkoordinaten bei E in derselben Beziehung zueinander wie am Punkt O'. An diesem gilt &lt;math&gt;\textstyle x'=0,\ x = vt&lt;/math&gt;, sowie nach der [[Zeitdilatation|Dilatationsformel]] &lt;math&gt;\textstyle t=\gamma t'&lt;/math&gt; wobei &lt;math&gt;\textstyle\gamma=1/\sqrt{1-v^2/c^2}&lt;/math&gt; ist. Für die Differenzkoordinaten gilt daher<br /> :&lt;math&gt;<br /> ct - x = \left(1-\frac{v}{c}\right) \gamma (ct'-x')<br /> &lt;/math&gt;<br /> Analog hat an einer Lichtfront, die sich in negativer x-Richtung bewegt, die Summenkoordinate &lt;math&gt;ct + x &lt;/math&gt; überall denselben Wert, ebenso &lt;math&gt;\textstyle ct' + x' &lt;/math&gt;. Auch eine solche Front geht durch E (mit gleichen Koordinaten wie oben) und durch O' (zu einem anderen Zeitpunkt als oben). In der Gleichung analog zur vorhergehenden werden nun Summen statt Differenzen gebildet, daher lautet sie<br /> :&lt;math&gt;<br /> ct + x = \left(1+\frac{v}{c}\right) \gamma (ct' + x')<br /> &lt;/math&gt;<br /> Addition und Subtraktion der beiden Gleichungen ergibt &lt;math&gt;ct,x&lt;/math&gt; als Funktion von<br /> &lt;math&gt;ct',x'&lt;/math&gt;.<br /> <br /> === Empirische Herleitung ===<br /> {{Hauptartikel|Testtheorien der speziellen Relativitätstheorie}}<br /> [[Howard P. Robertson]] und andere zeigten, dass die Lorentz-Transformation auch empirisch hergeleitet werden kann. Dazu ist es nötig, allgemeine Transformationsformeln zwischen verschiedenen Inertialsystemen mit experimentell bestimmbaren Parametern zu versehen. Es wird angenommen, dass ein einziges „bevorzugtes“ Inertialsystem &lt;math&gt;X, Y, Z, T&lt;/math&gt; existiert, in dem die Lichtgeschwindigkeit konstant, isotrop und unabhängig von der Geschwindigkeit der Quelle ist. Ebenso sollen [[Einstein-Synchronisation]] und Synchronisation durch langsamen Uhrentransport in diesem System äquivalent sein. Es sei ein weiteres, zu diesem System kollineares System &lt;math&gt;x, y, z, t&lt;/math&gt; gegeben, dessen räumlicher Ursprung zum Zeitpunkt &lt;math&gt;T = t = 0&lt;/math&gt; mit dem Ursprung des ersten Systems übereinstimmt und in dem die Uhren und Maßstäbe dieselbe interne Konstitution haben wie im ersten System. Dieses zweite System bewegt sich relativ zum ersten System mit konstanter Geschwindigkeit entlang der gemeinsamen &lt;math&gt;X&lt;/math&gt;-Achse. Folgende Größen bleiben dabei zunächst unbestimmt:<br /> * &lt;math&gt;a(v)&lt;/math&gt; Unterschiede in der Zeitmessung,<br /> * &lt;math&gt;b(v)&lt;/math&gt; Unterschiede in der Messung longitudinaler Längen,<br /> * &lt;math&gt;d(v)&lt;/math&gt; Unterschiede in der Messung transversaler Längen,<br /> * &lt;math&gt;\varepsilon(v)&lt;/math&gt; folgt aus der Konvention zur Uhrensynchronisation.<br /> <br /> Daraus ergeben sich folgende Transformationsformeln:<br /> :&lt;math&gt;\begin{align}<br /> t &amp; =a(v)T+\varepsilon(v) x\\<br /> x &amp; =b(v)(X-vT)\\<br /> y &amp; =d(v)Y\\<br /> z &amp; =d(v)Z<br /> \end{align}&lt;/math&gt;<br /> <br /> &lt;math&gt;\varepsilon (v)&lt;/math&gt; wird nicht direkt gemessen, sondern folgt aus der Uhrensynchronisationskonvention. Hier ist die Einstein-Synchronisation die einfachste Möglichkeit, woraus sich &lt;math&gt;\textstyle \varepsilon (v)=-v/c^{2}&lt;/math&gt; ergibt. Das Verhältnis zwischen &lt;math&gt;b(v)&lt;/math&gt; und &lt;math&gt;d(v)&lt;/math&gt; wird aus dem [[Michelson-Morley-Experiment]], das Verhältnis zwischen &lt;math&gt;a(v)&lt;/math&gt; und &lt;math&gt;b(v)&lt;/math&gt; aus dem [[Kennedy-Thorndike-Experiment]] und schließlich &lt;math&gt;a(v)&lt;/math&gt; allein aus dem [[Ives-Stilwell-Experiment]] bestimmt. Die Experimente ergaben &lt;math&gt;\textstyle 1/a(v)=b(v)=\gamma&lt;/math&gt; und &lt;math&gt;d(v)=1&lt;/math&gt;, was obige Transformation in die Lorentz-Transformation überführt. Hingegen wurde die Galilei-Transformation &lt;math&gt;a(v)=b(v)=d(v)=1&lt;/math&gt; damit ausgeschlossen.<br /> <br /> == Poincaré- und Lorentz-Gruppe ==<br /> {{Hauptartikel|Lorentz-Gruppe|Poincaré-Gruppe}}<br /> <br /> Die Poincaré-[[Gruppe (Mathematik)|Gruppe]] ist die Menge der linear inhomogenen Transformationen<br /> <br /> :&lt;math&gt;T_{\Lambda,a}\colon x \mapsto T_{\Lambda,a}x = x^\prime,\quad x^{\prime\,m}=\Lambda^{m}{}_n\,x^{n}+a^{m},\quad m,n \in \{0,1,2,3\},&lt;/math&gt;<br /> <br /> die den Abstand zweier Vierervektoren invariant lassen. Die Untergruppe der homogenen Transformationen &lt;math&gt;\textstyle T_{\Lambda,0}&lt;/math&gt; bildet die Lorentz-Gruppe,<br /> &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;, das ist die Gruppe der linearen Transformationen von &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt; auf &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt;, die das Längenquadrat<br /> :&lt;math&gt;w^2=t^2-x^2-y^2-z^2&lt;/math&gt;<br /> jedes Vektors &lt;math&gt;w=(t,x,y,z)&lt;/math&gt; aus &lt;math&gt;\textstyle \mathbb{R}^4&lt;/math&gt; invariant lassen.<br /> Schreiben wir das Längenquadrat als [[Matrixprodukt]]<br /> :&lt;math&gt;w^{\mathrm T}\,\eta\,w&lt;/math&gt;<br /> des Spaltenvektors &lt;math&gt;w&lt;/math&gt; mit der Matrix<br /> :&lt;math&gt;<br /> \eta = \begin{pmatrix}<br /> 1 &amp; 0&amp; 0&amp; 0\\<br /> 0 &amp;-1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp;-1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp;-1\\<br /> \end{pmatrix} &lt;/math&gt;<br /> und der transponierten Spalte, der Zeile &lt;math&gt;\textstyle w^{\mathrm T}&lt;/math&gt;, so muss für jeden Lorentz-transformierten Vektor &lt;math&gt;\Lambda w&lt;/math&gt; gelten<br /> :&lt;math&gt;w^{\mathrm T}\,\Lambda^{\mathrm T}\eta\,\Lambda\,w=w^{\mathrm T}\,\eta\,w.&lt;/math&gt;<br /> Dies ist genau dann der Fall, wenn die Lorentz-Transformation die Gleichung<br /> :&lt;math&gt;\Lambda^{\mathrm T}\eta\,\Lambda =\eta&lt;/math&gt;<br /> erfüllt.<br /> <br /> Alle Lösungen dieser Gleichung, die die Zeitrichtung und räumliche Orientierung nicht umdrehen, sind von der Form<br /> :&lt;math&gt;\Lambda=D_1\,\Lambda_{v}\,D_2.&lt;/math&gt;<br /> Dabei sind &lt;math&gt;D_1&lt;/math&gt; und &lt;math&gt;D_2&lt;/math&gt; Drehungen<br /> :&lt;math&gt;<br /> D= \begin{pmatrix}<br /> 1 &amp; \\<br /> &amp; D_{3 \times 3} \\<br /> \end{pmatrix},\quad <br /> D_{3 \times 3}^{\mathrm T}\,D_{3 \times 3}=\mathbf 1,\quad <br /> \det D_{3 \times 3}=1.&lt;/math&gt;<br /> Diese Drehungen bilden die Untergruppe [[SO(3)]] der Lorentz-Gruppe.<br /> Die Matrix<br /> :&lt;math&gt;\Lambda_v<br /> = \begin{pmatrix}<br /> \gamma &amp; -\gamma \,v &amp; 0 &amp; 0 \\<br /> -\gamma \, v &amp; \gamma &amp; 0 &amp; 0 \\<br /> 0 &amp; 0 &amp; 1 &amp; 0\\<br /> 0 &amp; 0 &amp; 0 &amp;1 \\<br /> \end{pmatrix} &lt;/math&gt;<br /> bewirkt die oben angegebene Lorentz-Transformation mit einer Geschwindigkeit &lt;math&gt;|v|&lt;1&lt;/math&gt;. Die Transformationen<br /> :&lt;math&gt;\Lambda=D\,\Lambda_{v}\,D^{-1}.&lt;/math&gt;<br /> heißen ''Lorentz-Boost''. Sie transformieren auf die Koordinaten des bewegten Beobachters, der sich mit Geschwindigkeit &lt;math&gt;v&lt;/math&gt; in die Richtung bewegt, die sich durch die Drehung &lt;math&gt;D&lt;/math&gt; aus der &lt;math&gt;x&lt;/math&gt;-Richtung ergibt.<br /> <br /> Lorentz-Transformationen, die das [[Vorzeichen (Zahl)|Vorzeichen]] der Zeitkoordinate, die Richtung der Zeit, nicht ändern,<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\ge 1 ,&lt;/math&gt;<br /> <br /> bilden die Untergruppe der orthochronen Lorentz-Transformationen. Die Lorentz-Transformationen mit<br /> <br /> * &lt;math&gt;\det \Lambda = 1&lt;/math&gt;<br /> <br /> bilden die Untergruppe der eigentlichen Lorentz-Transformationen. Für die orientierungstreuen Lorentz-Transformationen gilt<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\cdot \det \Lambda \ge 1.&lt;/math&gt;<br /> <br /> Die zeit- und orientierungstreuen Lorentz-Transformationen<br /> <br /> * &lt;math&gt;\Lambda_{\ 0}^{0}\ge 1,\quad \det \Lambda = 1,&lt;/math&gt;<br /> <br /> bilden die eigentliche orthochrone Lorentz-Gruppe. Sie ist zusammenhängend: Jede eigentliche orthochrone Lorentz-Transformation kann durch stetige Veränderung der sechs Parameter, drei für die Drehachse und den Drehwinkel und drei für die Relativgeschwindigkeit der beiden Bezugssysteme, in die identische Abbildung übergeführt werden.<br /> <br /> === Zeit- und Raumspiegelung ===<br /> <br /> Die nicht mit der &lt;math&gt;\mathbf 1&lt;/math&gt; zusammenhängenden Lorentz-Transformationen erhält man, indem man die Zeitspiegelung oder die Raumspiegelung<br /> :&lt;math&gt;<br /> \mathcal{T} = \begin{pmatrix}<br /> -1&amp; 0&amp; 0&amp; 0\\<br /> 0 &amp; 1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp; 1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp; 1\\<br /> \end{pmatrix}<br /> ,\quad<br /> \mathcal{P} = \begin{pmatrix}<br /> 1 &amp; 0&amp; 0&amp; 0\\<br /> 0 &amp;-1&amp; 0&amp; 0\\<br /> 0 &amp; 0&amp;-1&amp; 0\\<br /> 0 &amp; 0&amp; 0&amp;-1 \\<br /> \end{pmatrix} &lt;/math&gt;<br /> oder beide mit den Lorentz-Transformationen multipliziert, die mit der &lt;math&gt;\mathbf 1&lt;/math&gt; zusammenhängen. Die Lorentz-Gruppe &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt; hat vier Zusammenhangskomponenten.<br /> <br /> == Überlagerungsgruppe ==<br /> <br /> Die folgenden Überlegungen zeigen, dass die Gruppe der linearen Transformationen des zweidimensionalen, komplexen Vektorraumes &lt;math&gt;\textstyle \mathbb C^2&lt;/math&gt;, deren Determinante den speziellen Wert &lt;math&gt;1&lt;/math&gt; hat, die sogenannte [[spezielle lineare Gruppe]] &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;, die [[Zusammenhängender Raum|einfach zusammenhängende]] [[Überlagerung (Topologie)|Überlagerung]] der eigentlichen orthochronen Lorentz-Transformationen ist. Dabei überlagert die Untergruppe der speziellen unitären zweidimensionalen Transformationen, [[SU(2)]] die Gruppe der Drehungen, &lt;math&gt;\mathrm{SO}(3)&lt;/math&gt;.<br /> <br /> Jede [[Hermitesche Matrix|hermitesche]] &lt;math&gt;2\times 2&lt;/math&gt; – Matrix ist von der Form:<br /> <br /> :&lt;math&gt;\hat{w}<br /> = \begin{pmatrix}<br /> t+z&amp;x-\mathrm{i}y\\<br /> x+\mathrm{i}y&amp;t-z<br /> \end{pmatrix}=\hat{w}^{\mathrm{T}\,*}=\hat{w}^\dagger. &lt;/math&gt;<br /> <br /> Da sie umkehrbar eindeutig durch die vier reellen Parameter &lt;math&gt;w=(t,x,y,z)&lt;/math&gt; bezeichnet wird und da Summen und reelle Vielfache hermitescher Matrizen wieder hermitesch sind und zu den Summen und Vielfachen der Vierervektoren &lt;math&gt;w&lt;/math&gt; gehören, ist sie Element eines vierdimensionalen Vektorraums.<br /> <br /> Die Determinante<br /> <br /> :&lt;math&gt;\det\hat{w}=t^2-x^2-y^2-z^2 &lt;/math&gt;<br /> <br /> ist das Längenquadrat des Vierervektors &lt;math&gt;w&lt;/math&gt;.<br /> <br /> Multipliziert man &lt;math&gt;\hat{w}&lt;/math&gt; von links mit einer beliebigen, komplexen &lt;math&gt;2\times 2&lt;/math&gt; – Matrix und von rechts mit deren adjungierten, so ist das Ergebnis &lt;math&gt;\textstyle M\hat{w}M^\dagger=\hat{u}&lt;/math&gt; wieder hermitesch und lässt sich als &lt;math&gt;\hat{u}&lt;/math&gt; schreiben, wobei &lt;math&gt;u=\Lambda w&lt;/math&gt; linear von &lt;math&gt;w&lt;/math&gt; abhängt. Ist &lt;math&gt;M&lt;/math&gt; aus der ''speziellen'' linearen Gruppe der komplexen &lt;math&gt;2\times 2&lt;/math&gt;-Matrizen, &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;, deren Determinanten den speziellen Wert &lt;math&gt;1&lt;/math&gt; haben, so stimmt das Längenquadrat von &lt;math&gt;w&lt;/math&gt; und &lt;math&gt;u=\Lambda w&lt;/math&gt; überein, &lt;math&gt;\Lambda&lt;/math&gt; ist also eine Lorentz-Transformation. Zu jedem &lt;math&gt;M&lt;/math&gt; aus &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; gehört so vermöge<br /> <br /> :&lt;math&gt;M\hat{w}M^\dagger=\widehat{\Lambda w}&lt;/math&gt;<br /> <br /> eine Lorentz-Transformation &lt;math&gt;\Lambda&lt;/math&gt; aus &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;. Genauer gehört zu jedem Paar &lt;math&gt;\pm M&lt;/math&gt; von komplexen &lt;math&gt;2\times 2&lt;/math&gt;-Matrizen aus &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; genau eine Lorentz-Transformation &lt;math&gt;\Lambda(M)=\Lambda(-M)&lt;/math&gt; aus dem Teil von &lt;math&gt;\mathrm{O}(1,3)&lt;/math&gt;, welcher mit der &lt;math&gt;\mathbf 1&lt;/math&gt; stetig zusammenhängt. Dieser Teil der Lorentz-Gruppe ist eine Darstellung der Gruppe &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt;.<br /> <br /> Die Gruppe &lt;math&gt;\mathrm{SL}(2,\mathbb{C})&lt;/math&gt; ist die Produktmannigfaltigkeit &lt;math&gt;\mathbb{R}^3\times S^3&lt;/math&gt; und einfach zusammenhängend. Die Gruppe der eigentlichen orthochronen Lorentz-Transformationen ist hingegen nicht einfach zusammenhängend:<br /> Drehungen um eine feste Achse mit Winkeln, die von &lt;math&gt;\alpha = 0&lt;/math&gt; bis &lt;math&gt;\alpha = 2\pi&lt;/math&gt; anwachsen, bilden in der Drehgruppe einen geschlossenen Kreis. Man kann diese Transformationen nicht stetig in andere Drehungen abändern, so dass dieser Kreis auf einen Punkt zusammenschrumpft.<br /> <br /> == Literatur ==<br /> * [[Charles Kittel]], Walter D. Knight, Malvin A. Ruderman: ''Mechanik'' (= ''Berkeley Physik Kurs.'' Bd. 1). Vieweg, Braunschweig 1973, ISBN 3-528-08351-4, S. 232: Kap. 11.<br /> * Norbert Dragon: [https://www.itp.uni-hannover.de/fileadmin/arbeitsgruppen/dragon/relativ.pdf ''Geometrie der Relativitätstheorie.''] (PDF-Datei; 2,37&amp;nbsp;MB)<br /> <br /> == Weblinks ==<br /> * [http://www.mathe-online.at/mathint/struct/applet_b_lorentz.html Interaktives Java Applet]<br /> * {{TIBAV |19922 |Linktext=Lorentz-Transformationen |Herausgeber=Loviscach |Jahr=2013 |DOI=10.5446/19922}}<br /> * {{TIBAV |19921 |Linktext=Lorentz-Transformation im Detail |Herausgeber=Loviscach |Jahr=2013 |DOI=10.5446/19921}}<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> {{SORTIERUNG:Lorentztransformation}}<br /> [[Kategorie:Spezielle Relativitätstheorie]]<br /> [[Kategorie:Symmetrie (Physik)]]<br /> [[Kategorie:Transformation]]<br /> [[Kategorie:Hendrik Antoon Lorentz]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Haskell_(Programmiersprache)&diff=145055843 Haskell (Programmiersprache) 2015-08-15T14:10:51Z <p>MickHaskell: /* Fakultät */</p> <hr /> <div>{{Infobox Programmiersprache<br /> | Name = Haskell<br /> | Logo = [[Datei:Haskell-Logo.svg|120px|Logo der Programmiersprache Haskell]]<br /> | Beschreibung =<br /> | Paradigma = [[Funktionale Programmierung|funktional]], [[Bedarfsauswertung|nicht-strikt]], [[Modul (Software)|modular]], [[Deklarative Programmierung|deklarativ]]<br /> | Erscheinungsjahr = [[1990]]<br /> | Entwickler = [[Simon Peyton Jones]], [[Paul Hudak]],&lt;ref&gt;[http://web.archive.org/web/20110607204813/http://www.cs.yale.edu/homes/hudak-paul/ Professor Paul Hudak’s Website] an der Yale University&lt;/ref&gt; [[Philip Wadler]], et al.<br /> | AktuelleVersion = Haskell 2010<br /> | AktuelleVersionFreigabeDatum = November 2009&lt;ref&gt;[http://www.haskell.org/pipermail/haskell/2009-November/021750.html [Haskell&amp;#93; Announcing Haskell 2010&lt;!-- Bot generated title --&gt;]&lt;/ref&gt;<br /> | Typisierung = [[Statische Typisierung|statisch]], [[Starke Typisierung|stark]], [[Typinferenz]]<br /> | Implementierung = [[Glasgow Haskell Compiler|GHC]], [http://www.haskell.org/hugs/ Hugs], [http://www.cs.york.ac.uk/fp/nhc98/ NHC], [http://repetae.net/john/computer/jhc/ JHC], [[Yhc]]<br /> | Dialekte = [[Helium (Haskell)|Helium]], [[Gofer]]<br /> | Beeinflusst_von = [[APL (Programmiersprache)|APL]], [[LISP]], [[Miranda (Programmiersprache)|Miranda]], [[ML (Programmiersprache)|ML]]<br /> | Beeinflusste = [[Agda]], [[Cayenne (Programmiersprache)|Cayenne]], [[Clean (Programmiersprache)|Clean]], [[Curry (Programmiersprache)|Curry]], [[Python (Programmiersprache)|Python]], [[Scala (Programmiersprache)|Scala]], [[C-Sharp|C#]], [[F-Sharp|F#]]<br /> | Website = [http://www.haskell.org/ haskell.org]<br /> }}<br /> <br /> '''Haskell''' ist eine [[Funktionale Programmiersprache#Rein funktionale Programmiersprachen|rein funktionale Programmiersprache]], benannt nach dem US-amerikanischen Mathematiker [[Haskell Brooks Curry]], dessen Arbeiten zur mathematischen Logik eine Grundlage funktionaler Programmiersprachen bilden. Haskell basiert auf dem [[Lambda-Kalkül]], weshalb auch der griechische Buchstabe Lambda als Logo verwendet wird. Die wichtigste Implementierung ist der ''Glasgow Haskell [[Compiler]] (GHC)''.<br /> <br /> == Entwicklung ==<br /> Gegen Ende der 1980er Jahre gab es bereits einige funktionale Programmiersprachen. Um der Wissenschaft eine einheitliche Forschungs- und Entwicklungsbasis bereitzustellen, sollte eine standardisierte und moderne Sprache die funktionale Programmierung vereinheitlichen. Zunächst wollte man dazu [[Miranda (Programmiersprache)|Miranda]] als Ausgangspunkt benutzen; doch deren Entwickler waren daran nicht interessiert. So wurde 1990 Haskell 1.0 veröffentlicht.<br /> <br /> Die aktuelle Version der Programmiersprache ist eine überarbeitete Variante des Haskell-98-Standards von 1999. Haskell ist die funktionale Sprache, an der zurzeit am meisten geforscht wird. Demzufolge sind die Sprachderivate zahlreich; dazu zählen ''Parallel Haskell'', ''Distributed Haskell'' (ehemals Goffin), ''Eager Haskell'', ''[[Eden (Programmiersprache)|Eden]]'' mit einem neuen Ansatz zum [[Parallele Programmierung|parallelen Programmieren]] und [[Bedarfsauswertung]], ''DNA-Haskell'' und sogar objektorientierte Varianten (''Haskell++'', ''O’Haskell'', ''Mondrian''). Des Weiteren diente Haskell beim Entwurf neuer Programmiersprachen als Vorlage. So wurde beispielsweise im Falle von [[Python (Programmiersprache)|Python]] die [[Python (Programmiersprache)#Funktionales Programmieren|Lambda-Notation]] sowie Listenverarbeitungssyntax übernommen.<br /> <br /> == Eigenschaften ==<br /> === Programmfluss ===<br /> * Haskell ist eine rein [[funktionale Programmiersprache]]. Funktionen geben nur Werte zurück, ändern aber nicht den Zustand eines Programms (d.&amp;nbsp;h. Funktionen haben keine [[Wirkung (Informatik)|Nebeneffekte]]). Das Ergebnis einer Funktion hängt deshalb nur von den Eingangsparametern ab, und nicht davon, wann oder wie oft die Funktion aufgerufen wird. (siehe [[funktionale Programmierung]])<br /> * Es gibt keine [[Imperative Programmiersprache|imperativen Sprachkonstrukte]]. Durch [[Monade (Informatik)|Monaden]] ist es möglich, Ein- und Ausgabeoperationen und zustandsabhängige Berechnungen wie Zufallsgeneratoren rein funktional zu behandeln.<br /> * Es gibt keine Operationen, die einen Variablenwert verändern. So gibt es auch keine Unterscheidung zwischen Variablen und Konstanten und man braucht keine &lt;code&gt;const&lt;/code&gt;-Attribute oder Literal-Makros wie in [[C++]] oder in [[C (Programmiersprache)|C]].<br /> * Zwischen Identität und Gleichwertigkeit von Objekten wird nicht unterschieden.<br /> * Da Nebeneffekte fehlen, sind Programmbeweise beträchtlich einfacher.<br /> * Haskell ist nicht-strikt. Es werden nur Ausdrücke [[Auswertung (Informatik)|ausgewertet]], die für die Berechnung des Ergebnisses gebraucht werden.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> first x y = x<br /> quadrat x = x * x<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : Die Funktion &lt;code&gt;first&lt;/code&gt; liefert bei Eingabe zweier Parameter den ersten als Ergebnis zurück. Bei der Eingabe von &lt;code&gt;first x (3+7)&lt;/code&gt; ist die Auswertung der Summe &lt;code&gt;(3+7)&lt;/code&gt; zur Ergebnisbestimmung nicht notwendig, sollte also unberücksichtigt bleiben.<br /> : Die Funktion &lt;code&gt;quadrat&lt;/code&gt; berechnet bei Eingabe eines Parameters dessen Quadrat. Bei Eingabe von &lt;code&gt;quadrat(3+5)&lt;/code&gt;, was im Laufe des Auswertungsprozesses zu &lt;code&gt;(3+5)*(3+5)&lt;/code&gt; wird, wäre eine doppelte Berechnung der Summe &lt;code&gt;(3+5)&lt;/code&gt; ineffizient, sollte also vermieden werden.<br /> : Die [[Auswertung (Informatik)|Auswertungsstrategie]], welche die beiden eben geschilderten Probleme umgeht, wird [[Bedarfsauswertung]] ({{enS|''lazy evaluation''}}) genannt und kommt in Haskell meist zum Einsatz.<br /> : Die Bedarfsauswertung ist vor allem wegen der strengen Einhaltung des funktionalen Konzepts möglich. Umgekehrt macht die Bedarfsauswertung die funktionale Programmierung angenehmer, denn sie erlaubt es besser, Funktionen, die reine Berechnungen durchführen, von Ein-/Ausgabefunktionen zu trennen.<br /> : Die Bedarfsauswertung erlaubt das Arbeiten mit undefinierten Werten und potentiell unendlich großen Datenmengen. So kann man elegant mit Potenzreihen, Zeitreihen (etwa Audiosignalströmen), Kettenbruchzerlegungen, Entscheidungsbäumen und ähnlichem umgehen. Aber auch bei endlichen, aber großen, oder endlichen und noch nicht vollständig bekannten Daten erlaubt diese Art der Ausführung elegante Programme. So kann man etwa eine Transformation eines [[Extensible Markup Language|XML]]-Dokumentes als Folge von Transformationen des gesamten XML-Baumes beschreiben. Ausgeführt wird die Gesamttransformation aber von Beginn zum Ende des XML-Dokumentes, auch wenn das Ende noch gar nicht verfügbar ist.<br /> : Man beachte allerdings, dass Haskell nach Sprachdefinition lediglich ''nicht-strikt'' ist; die Bedarfsauswertung ist nur eine mögliche Implementierung der Nicht-Striktheit (die allerdings von allen gängigen Haskell-Übersetzern angewandt wird). Andere Implementierungen sind möglich (z.&amp;nbsp;B. ''optimistic evaluation'', Ennals &amp; Peyton Jones, ICFP’03).<br /> <br /> === Typsystem ===<br /> * Haskell ist stark [[Typisierung (Informatik)|typisiert]]. Es wird also zum Beispiel streng zwischen [[Wahrheitswert]]en, [[Char (Datentyp)|Zeichen]], [[Ganze Zahl|ganzen Zahlen]], [[Gleitkommazahl]]en und [[Funktion (Programmierung)|Funktionen]] von und zu verschiedenen Typen unterschieden.<br /> <br /> * Haskell erlaubt Typvariablen. Damit können Funktionen sehr allgemein formuliert werden. Wird eine allgemeingehaltene Funktion für bestimmte Typen verwendet, werden automatisch die Typen abgeglichen ([[Typinferenz]]).<br /> : Die Funktion &lt;code&gt;map&lt;/code&gt; wendet eine beliebige Funktion auf die Elemente einer Liste an. Ihr Typ wird so angegeben:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> map :: (a -&gt; b) -&gt; [a] -&gt; [b]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : Wird &lt;code&gt;map&lt;/code&gt; etwa mit der speziellen Funktion &lt;code&gt;toUpper&lt;/code&gt; vom Typ &lt;code&gt;Char -&gt; Char&lt;/code&gt; aufgerufen, ergibt der Typabgleich<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> map toUpper :: [Char] -&gt; [Char]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> * Haskell ist von der Grundidee her statisch typisiert, obwohl es auch Erweiterungen für dynamische Typen gibt. Das bedeutet, dass für die meisten Berechnungen die Typen bereits zum Zeitpunkt der Programmübersetzung feststehen. Dies deckt viele „offensichtliche“ Fehler noch vor Ausführung des Programms auf.<br /> <br /> * Haskell unterstützt [[Funktion höherer Ordnung|Funktionen höherer Ordnung]] ('''Funktionale'''). Das sind Funktionen, die Funktionen als Eingabeparameter bzw. Funktionen als Ergebnis haben. Ein Beispiel ist die &lt;code&gt;map&lt;/code&gt;-Funktion, die eine Funktion &lt;code&gt;f&lt;/code&gt; auf jedes Element eines [[Datentyp]]s (hier Liste) anwendet.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> map :: (a -&gt; b) -&gt; [a] -&gt; [b]<br /> map f [] = []<br /> map f (x:xs) = f x : map f xs<br /> <br /> map quadrat [1,2,3] = [quadrat 1, quadrat 2, quadrat 3] = [1,4,9]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> * Funktionen erlauben [[Currying]]. Während man in anderen Sprachen [[Tupel]] als Argumente an Funktionen übergibt, also Funktionstypen der Form &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;(a, b) -&gt; c&lt;/syntaxhighlight&gt; verwendet, ist in Haskell die Curry-Form &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;a -&gt; b -&gt; c&lt;/syntaxhighlight&gt; üblicher. Damit wird die partielle Auswertung von Funktionen bequem möglich. Der Ausdruck &lt;code&gt;map toUpper&lt;/code&gt; ist beispielsweise eine teilweise Auswertung von &lt;code&gt;map&lt;/code&gt;, denn er beschreibt eine Funktion, nämlich die Funktion, welche alle Kleinbuchstaben einer Liste in Großbuchstaben verwandelt.<br /> <br /> * Haskell erlaubt benutzerdefinierte Datentypen. Diese ''[[Datentyp|algebraischen Datentypen]]'' werden mit Hilfe von Datenkonstruktoren definiert.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> data Tree = Leaf Int | Branch Int Tree Tree<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : Das Beispiel zeigt die Datenstruktur eines mit [[Datentyp|ganzen Zahlen]] beschrifteten [[Binärbaum|binären Baumes]]. Solch ein Baum &lt;code&gt;Tree&lt;/code&gt; besteht entweder aus einem Blatt (&lt;code&gt;Leaf Int&lt;/code&gt;) oder einer Verzweigung (&lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;Branch Int t1 t2&lt;/syntaxhighlight&gt;), wobei &lt;code&gt;t1&lt;/code&gt; und &lt;code&gt;t2&lt;/code&gt; die Teilbäume darstellen, die wiederum die Struktur &lt;code&gt;Tree&lt;/code&gt; haben. Zur Definition dieser Datenstruktur wurde sowohl der einstellige Konstruktor &lt;code&gt;Leaf&lt;/code&gt; als auch der dreistellige Konstruktor &lt;code&gt;Branch&lt;/code&gt; verwendet.<br /> <br /> : Datentypen mit mehreren ausschließlich parameterlosen Konstruktoren können als [[Aufzählungstyp|Aufzählungen]] eingesetzt werden.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> data Tag = Montag | Dienstag | Mittwoch | Donnerstag | Freitag | Samstag | Sonntag<br /> deriving (Show, Eq, Ord, Ix, Enum)<br /> &lt;/syntaxhighlight&gt;<br /> * Haskell unterstützt Typenklassen. Mit Typenklassen lassen sich Typen zusammenfassen, welche eine bestimmte Menge an Operationen unterstützen. In Signaturen von Funktionen dürfen als Abstufung zwischen festen Typen wie &lt;code&gt;Char&lt;/code&gt; und freien Typvariablen auch noch Typvariablen mit Einschränkung auf bestimmte Klassen verwendet werden.<br /> : Alle Ausprägungen einer Methode der Typklasse tragen den gleichen Namen. In gewisser Weise entsprechen Typklassen also dem [[Überladen]] von Funktionen. Der gleiche Funktionsname steht also abhängig vom Typ für verschiedene Funktionen. Zum Beispiel ist mit der &lt;code&gt;==&lt;/code&gt;-Methode der Klasse &lt;code&gt;Eq&lt;/code&gt; der Vergleich sowohl zweier Zahlen als auch zweier [[Datentyp|Texte]] möglich. Trotzdem arbeitet der Gleichheitstest je nach Argumenttyp anders.<br /> <br /> * In Haskell haben [[Eingabe und Ausgabe|Ein- und Ausgabefunktionen]] einen speziellen [[Typkonstruktor]] namens &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;IO&lt;/syntaxhighlight&gt;.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> putStrLn :: String -&gt; IO ()<br /> getLine :: IO String<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : &lt;code&gt;putStrLn&lt;/code&gt; gibt einen Text und einen [[Zeilenumbruch]] auf der [[Standardausgabe]] aus. Da es kein informationstragendes Ergebnis gibt, wird der [[Einheitstyp]] &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;()&lt;/syntaxhighlight&gt; als Rückgabetyp verwendet. &lt;code&gt;getLine&lt;/code&gt; liest eine Textzeile von der [[Standardeingabe]]. Der &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;IO&lt;/syntaxhighlight&gt;-Typkonstruktor stellt sicher, dass man den Nutzern der Funktion offenlegen muss, dass die Ergebnisse durch Ein-/Ausgabe gewonnen wurden. Diese strenge Handhabung ermuntert Haskell-Programmierer zur klaren Trennung von Ein- und Ausgabe und anderen Teilen eines Programms. Der größte Teil eines Haskell-Programms besteht in der Regel aus Funktionen ohne Ein- und Ausgabe. Man kann &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;IO&lt;/syntaxhighlight&gt;-Typen natürlich auch in andere Typen einbetten und so zum Beispiel einen speziellen IO-Typ definieren, der nur Eingaben erlaubt.<br /> <br /> === Syntax ===<br /> Haskell unterscheidet [[Case sensitive|Groß- und Kleinschreibung]]. [[Bezeichner]], die mit einem Großbuchstaben beginnen, stehen für [[Datentyp|Typ]]- und Wertkonstruktoren. Bezeichner, die mit einem Kleinbuchstaben beginnen, stehen für Typvariablen, Funktionen und Parameter.<br /> <br /> Der Umgang mit [[Leerzeichen]] und [[Zeilenumbruch|Zeilenumbrüchen]] geschieht in Anlehnung an das intuitive Verständnis von mathematischer Notation, bei Zeilenumbrüchen muss lediglich eine [[Einrückungsstil|Einrückung]] beliebiger Tiefe geschehen, damit der Zusammenhang nicht verloren geht. So ist der Ausdruck<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fun a b = a*b<br /> &lt;/syntaxhighlight&gt;<br /> völlig gleichwertig zu<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fun a b= a *<br /> b<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Haskell unterstützt einzeilige und mehrzeilige [[Kommentar (Programmierung)|Kommentare]], erstere ab den Zeichen &lt;code&gt;--&lt;/code&gt; bis zum Ende der Zeile und letztere im Einschluss von &lt;code&gt;{-&lt;/code&gt; und &lt;code&gt;-}&lt;/code&gt;.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> f x = x**2<br /> -- f y = y*5 diese Zeile ist auskommentiert<br /> {- Alles, was<br /> hier drin steht, wird auch nicht beachtet.<br /> f z = z*2<br /> -}<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Haskell bietet eine Reihe von [[Syntaktischer Zucker|syntaktischen Besonderheiten]]. Diese sollen nicht darüber hinwegtäuschen, dass alles rein funktional erklärt ist.<br /> <br /> * Die &lt;code&gt;do&lt;/code&gt;-Notation verleiht Berechnungen mit Monaden das Aussehen von imperativen Programmen.&lt;br /&gt;Statt<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> readFile &quot;eingabe.txt&quot; &gt;&gt;= writeFile &quot;ausgabe.txt&quot;<br /> &lt;/syntaxhighlight&gt;<br /> : oder<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> readFile &quot;eingabe.txt&quot; &gt;&gt;= (\inhalt -&gt; writeFile &quot;ausgabe.txt&quot; inhalt)<br /> &lt;/syntaxhighlight&gt;<br /> : kann man auch<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> do inhalt &lt;- readFile &quot;eingabe.txt&quot;<br /> writeFile &quot;ausgabe.txt&quot; inhalt<br /> &lt;/syntaxhighlight&gt;<br /> : schreiben.<br /> <br /> * Sowohl symbolische Bezeichner (bestehend etwa aus +, -, *, /, &gt;, &lt;) als auch alphanumerische Bezeichner (Buchstaben, Ziffern und Apostroph) können für Funktionen verwendet werden und sowohl als [[Infixnotation|Infix]]-Operatoren als auch in [[Präfixnotation|Präfixschreibweise]] eingesetzt werden. Es gilt beispielsweise<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> a + b = (+) a b<br /> a `div` b = div a b<br /> &lt;/syntaxhighlight&gt;<br /> <br /> * Haskell erlaubt spezielle Notationen bei der [[Liste (Datenstruktur)|Listenverarbeitung]]. So können Zahlenfolgen mit zwei Punkten (&lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;..&lt;/syntaxhighlight&gt;) angedeutet werden:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> [0..5] = [0,1,2,3,4,5]<br /> ['a'..'e'] = ['a','b','c','d','e'] = &quot;abcde&quot;<br /> [0,2..10] = [0,2,4,6,8,10]<br /> &lt;/syntaxhighlight&gt;<br /> : Wird kein Endwert angegeben, dann wird eine unendliche Liste erzeugt<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> [1..] = [1,2,3, usw.]<br /> [10,20..] = [10,20,30, usw.]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : Des Weiteren ist eine Notation erlaubt, genannt „list comprehension“, die an die mathematische Schreibweise für [[Menge (Mathematik)|Mengendefinitionen]] angelehnt ist. In folgendem Beispiel wird aus der Folge der positiven natürlichen Zahlen die Folge der geraden Zahlen extrahiert.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> [ x | x &lt;- [1..], even x]<br /> &lt;/syntaxhighlight&gt;<br /> : als Umschreibung für<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> do<br /> x &lt;- [1..]<br /> guard $ even x<br /> return x<br /> &lt;/syntaxhighlight&gt;<br /> : Im Allgemeinen kann hinter dem senkrechten Strich eine beliebige nichtleere Folge aus Generatoren (&lt;code&gt;pat &lt;- xs&lt;/code&gt;), Prädikaten (Ausdrücken mit dem Typ &lt;code&gt;Bool&lt;/code&gt;) und &lt;code&gt;let&lt;/code&gt;-Bindungen angegeben werden. Insbesondere ist es möglich, überhaupt keine Generatoren zu verwenden. Der Ausdruck<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> [x | odd x]<br /> &lt;/syntaxhighlight&gt;<br /> : nimmt je nach Wert von &lt;code&gt;x&lt;/code&gt;, welches als bereits definiert vorausgesetzt wird, den Wert &lt;code&gt;[]&lt;/code&gt; oder &lt;code&gt;[x]&lt;/code&gt; an.<br /> <br /> === Programmierung ===<br /> * Haskell erlaubt Mustervergleiche (engl. {{lang|en|''[[pattern matching]]''}}). So nennt man die Verwendung von Konstruktor[[term]]en als [[formal]]e Parameter. Dabei sind die Parameterterme die Muster (engl. {{lang|en|''pattern''}}) der Funktionsargumente.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fak :: Integer -&gt; Integer<br /> fak 0 = 1<br /> fak n = n * fak (n-1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> : Die Funktion &lt;code&gt;fak&lt;/code&gt; berechnet die Fakultät einer Zahl. &lt;code&gt;0&lt;/code&gt;&amp;nbsp;und &lt;code&gt;n&lt;/code&gt; sind dabei die Muster (Pattern), von denen die Ergebnisbestimmung abhängt. Für Zahlen größer als 0 greift nur das Muster &lt;code&gt;n&lt;/code&gt;, so dass zweitere Alternative verwendet wird. Diese errechnet das Ergebnis durch &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;n * fak (n-1)&lt;/syntaxhighlight&gt;, wobei sie sich, solange &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;(n-1) &gt; 0&lt;/syntaxhighlight&gt; ist, rekursiv selbst aufruft, bis sie bei &lt;code&gt;0&lt;/code&gt; ankommt. Dort greift dann das Muster &lt;code&gt;0&lt;/code&gt;, so dass erstere Alternative verwendet wird, welches die Rekursion sauber abschließt, &lt;code&gt;1&lt;/code&gt; zurückgibt, und die Rücksprungkette einleitet.<br /> <br /> === Module ===<br /> Zu Haskell gehört auch ein Modulsystem. Der Haskell-98-Standard definiert eine Grundmenge von Modulen,&lt;ref&gt;[http://www.haskell.org/onlinereport/ haskell.org]&lt;/ref&gt; die ein standardkonformes Haskell-System zur Verfügung stellen muss. Beispielsweise ein Modul, welches Ein- und Ausgabe-Funktionen bereitstellt oder ein Modul, welches Funktionen auf Listen implementiert.<br /> <br /> Um Module nutzen zu können, muss man sie importieren. Dies geschieht mithilfe des &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;import&lt;/syntaxhighlight&gt; Befehls.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> import List<br /> import Maybe<br /> &lt;/syntaxhighlight&gt;<br /> <br /> In verschiedenen Modulen können Funktionen und Typen die gleichen Namen besitzen.<br /> Diese Bezeichner können unterschieden werden,<br /> * indem nur einer der Bezeichner importiert wird,<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> import Data.List(delete)<br /> x = delete 'a' &quot;abc&quot;<br /> &lt;/syntaxhighlight&gt;<br /> * oder indem die Bezeichner qualifiziert, also durch Verbinden mit dem Modulnamen eindeutig gemacht werden.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> import qualified Data.List<br /> x = Data.List.delete 'a' &quot;abc&quot;<br /> &lt;/syntaxhighlight&gt;<br /> * oder<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> import qualified Data.List as List<br /> x = List.delete 'a' &quot;abc&quot;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Ebenfalls möglich aber nicht empfohlen ist das Ausblenden von Bezeichnern beim Importieren mit &lt;code&gt;hiding&lt;/code&gt;.<br /> <br /> == Beispiele ==<br /> === Fakultät ===<br /> Eine elegante Definition der [[Fakultät (Mathematik)|Fakultätsfunktion]], die Haskells Notation für Listen benutzt:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fac :: Integer -&gt; Integer<br /> fac n = product [1..n]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Oft wird aber auch rekursiv gearbeitet:<br /> <br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> facr :: Integer -&gt; Integer<br /> facr 0 = 1<br /> facr n = n * facr (n-1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> [[Endrekursion]] ist dabei oftmals effizienter, aber auch aufwendiger zu schreiben:<br /> <br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> facrt :: Integer -&gt; Integer<br /> facrt n = _facrt n 1<br /> where _facrt 0 r = r<br /> _facrt n r = _facrt (n-1) (r*n)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Diesen Schreibaufwand kann man jedoch reduzieren.<br /> In _facrt enthält der Parameter r das jeweilige (Zwischen-)Resultat. Zu Beginn der Iteration wird r auf den Startwert gesetzt. Bei jedem Iterationsschritt wird das neue Zwischenergebnis mit einer bestimmten Funktion aus dem bisherigen Zwischenresultat und n berechnet. Zum Schluss wird r als Endergebnis zurückgegeben. Dieses Prinzip kann man durch eine wiederverwendbare Funktion recur ausdrücken:<br /> <br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> recur :: Num a =&gt; (b -&gt; a -&gt; b) -&gt; b -&gt; a -&gt; b<br /> recur f r 0 = r<br /> recur f r n = recur f (f r n) (n-1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Unter Verwendung von recur kann man die Fakultätsfunktion mit Endrekursion dann sehr kompakt schreiben:<br /> <br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> facrg :: Integer -&gt; Integer<br /> facrg = recur (*) 1<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Fibonacci ===<br /> Eine einfache Implementierung der [[Fibonacci-Folge|Fibonacci]]-Funktion:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fib :: Integer -&gt; Integer<br /> fib 0 = 0<br /> fib 1 = 1<br /> fib n = fib (n - 2) + fib (n - 1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Eine schnelle Implementierung der Folge:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fibs :: [Integer]<br /> fibs = 0 : 1 : (zipWith (+) fibs (tail fibs))<br /> &lt;/syntaxhighlight&gt;<br /> <br /> &lt;code&gt;tail&lt;/code&gt; entfernt das erste Element aus einer Liste, &lt;code&gt;zipWith&lt;/code&gt; kombiniert zwei Listen elementweise mithilfe einer weiteren Funktion (hier &lt;code&gt;(+)&lt;/code&gt;). Die Definition entspricht einer [[Fixpunkt (Mathematik)|Fixpunktgleichung]].<br /> Dass die Definition stimmt, überprüft man am schnellsten, indem man sich vorstellt, dass &lt;code&gt;fibs&lt;/code&gt; bereits fertig berechnet vorliegt. Als Nächstes muss man sich noch überlegen, dass die Definition auch ausgewertet werden kann. Die ersten beiden Glieder von &lt;code&gt;fibs&lt;/code&gt; sind unmittelbar klar: 0 und 1. Für das Berechnen jedes weiteren Gliedes muss aber nur auf bereits berechnete Glieder von &lt;code&gt;fibs&lt;/code&gt; zurückgegriffen werden. Die Bedarfsauswertung führt dazu, dass die Folge &lt;code&gt;fibs&lt;/code&gt; tatsächlich elementweise berechnet wird.<br /> <br /> Man könnte auch sagen, dass &lt;code&gt;fibs&lt;/code&gt; ein Fixpunkt der Funktion &amp;nbsp; &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;\xs -&gt; 0 : 1 : (zipWith (+) xs (tail xs))&lt;/syntaxhighlight&gt; &amp;nbsp; ist.<br /> Das wiederum lässt sich in Haskell direkt notieren als<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> fix (\xs -&gt; 0 : 1 : (zipWith (+) xs (tail xs)))<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Differenzengleichung ===<br /> Man kann auf diese Weise sehr elegant Differentialgleichungen bezüglich Potenzreihen oder Differenzengleichungen bezüglich Zahlenfolgen formulieren und gleichzeitig lösen.<br /> <br /> Angenommen, man möchte die Differentialgleichung &amp;nbsp; ''y'(x)&amp;nbsp;=&amp;nbsp;f(x,&amp;nbsp;y(x))'' &amp;nbsp; bezüglich ''y'' in Form einer Zeitreihe lösen, also einer Liste von Zahlen. Durch diese Diskretisierung wird die Differentialgleichung zur Differenzengleichung. Statt eines Integrals berechnen wir [[Partialsumme]]n. Die folgende Funktion hat als Parameter die Integrationskonstante und eine Zahlenfolge.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> integrate :: Num a =&gt; a -&gt; [a] -&gt; [a]<br /> integrate = scanl (+)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> &lt;code&gt;scanl&lt;/code&gt; akkumuliert die Werte einer Folge mit Hilfe einer anderen Funktion, hier &lt;code&gt;(+)&lt;/code&gt;, und gibt die Liste der Akkumulatorzustände zurück.<br /> <br /> Damit kann man bereits das [[Explizites Eulerverfahren|explizite Eulerverfahren]] für die Schrittweite&amp;nbsp;1 implementieren. &lt;code&gt;x0&lt;/code&gt; und &lt;code&gt;y0&lt;/code&gt; sind hierbei die Anfangswerte. Der Apostroph hat keine eigenständige Bedeutung, er ist Teil des Namens &lt;code&gt;y'&lt;/code&gt;.<br /> <br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> eulerExplicit :: Num a =&gt; (a -&gt; a -&gt; a) -&gt; a -&gt; a -&gt; [a]<br /> eulerExplicit f x0 y0 =<br /> let x = iterate (1+) x0<br /> y = integrate y0 y'<br /> y' = zipWith f x y<br /> in y<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Diese Funktionsdefinition besteht also im Wesentlichen aus der Feststellung, dass &lt;code&gt;y&lt;/code&gt; das Integral von &lt;code&gt;y'&lt;/code&gt; mit Anfangswert &lt;code&gt;y0&lt;/code&gt; ist, (oder umgekehrt, &lt;code&gt;y'&lt;/code&gt; die Ableitung von &lt;code&gt;y&lt;/code&gt;) und aus der eigentlichen Differentialgleichung &amp;nbsp; &lt;syntaxhighlight lang=&quot;haskell&quot; inline&gt;y' = zipWith f x y&lt;/syntaxhighlight&gt;. Weil man hierbei den Algorithmus eher in der Form der Aufgabenstellung als in Form eines Lösungsweges notiert, spricht man hierbei von [[Deklarative Programmierung|deklarativer Programmierung]].<br /> <br /> === Quicksort ===<br /> Der [[Quicksort]]-[[Algorithmus]], formuliert in Haskell:<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> qsort :: Ord a =&gt; [a] -&gt; [a]<br /> qsort [] = []<br /> qsort (x:xs) = qsort kleinergl ++ [x] ++ qsort groesser<br /> where<br /> kleinergl = [y | y &lt;- xs, y &lt;= x]<br /> groesser = [y | y &lt;- xs, y &gt; x]<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die erste Zeile definiert die Signatur von [[Quicksort]]. Die zweite Zeile gibt an, dass die Funktion auf eine leere Liste angewendet wieder eine leere Liste ergeben soll. Die dritte Zeile sortiert rekursiv nicht-leere Listen: das erste Element &lt;code&gt;x&lt;/code&gt; wird als mittleres Element der Ergebnisliste verwendet. Davor werden alle nicht-größeren sortiert, dahinter alle größeren Elemente eingeordnet. ''Listenbeschreibungen'' werden dazu verwendet, aus der Restliste &lt;code&gt;xs&lt;/code&gt; alle diejenigen auszuwählen, die größer als &lt;code&gt;x&lt;/code&gt; sind, und alle jene, die es nicht sind.<br /> <br /> Wie man es von Quicksort erwartet, besitzt auch diese Implementierung eine mittlere [[asymptotische Laufzeit]] von ''O''(''n''·log''n'') und eine [[Worst Case|Worst-Case]]-Laufzeit von ''O''(''n''²). Im Gegensatz zur geläufigen Implementierung in einer imperativen Sprache arbeitet dieses &lt;code&gt;qsort&lt;/code&gt; jedoch nicht [[in-place]].<br /> <br /> === Algebra ===<br /> Dieses Beispiel stellt die Nutzung von [[Typklasse (Informatik)|Typklassen]] heraus.<br /> &lt;syntaxhighlight lang=&quot;haskell&quot;&gt;<br /> data PhiNum a = PhiNum { numPart :: a, phiPart :: a } deriving (Eq, Show)<br /> <br /> instance Num a =&gt; Num (PhiNum a) where<br /> fromInteger n = PhiNum (fromInteger n) 0<br /> PhiNum a b + PhiNum c d = PhiNum (a+c) (b+d)<br /> PhiNum a b * PhiNum c d = PhiNum (a*c+b*d) (a*d+b*c+b*d)<br /> negate (PhiNum a b) = PhiNum (-a) (-b)<br /> abs = undefined<br /> signum = undefined<br /> <br /> fib n = phiPart $ PhiNum 0 1 ^ n<br /> &lt;/syntaxhighlight&gt;<br /> <br /> &lt;code&gt;fib&lt;/code&gt; stellt eine schnelle Berechnung von Elementen der Fibonacci-Folge dar. Ausgenutzt wird das vordefinierte &lt;code&gt;^&lt;/code&gt;, das auf &lt;code&gt;Num&lt;/code&gt;-implementierenden Typen arbeitet.<br /> <br /> == Implementierungen ==<br /> Es gibt inzwischen eine Reihe Haskell-Implementierungen, von denen die meisten aber den Sprachstandard nicht vollständig umsetzen.<br /> * Der ''[[Glasgow Haskell Compiler]]''&lt;ref&gt;[http://www.haskell.org/ghc/ ''The Glasgow Haskell Compiler'']. Projekt-Website. Abgerufen am 9. Januar 2010.&lt;/ref&gt; (GHC) unterstützt Haskell 98 sowie zahlreiche Spracherweiterungen. Er übersetzt Haskell-Programme in [[Maschinensprache|Maschinencode]]; für nicht direkt unterstützte Plattformen erzeugt er [[C (Programmiersprache)|C-Code]], der dann mit einem C-Compiler übersetzt wird.<br /> * ''Hugs''&lt;ref&gt;[http://www.haskell.org/hugs/ ''Hugs 98'']. Projekt-Website. Abgerufen am 9. Januar 2010.&lt;/ref&gt; ist ein Bytecode-Compiler, der Haskell 98 fast vollständig sowie einige Erweiterungen implementiert. Hugs ist selbst in C geschrieben.<br /> * ''nhc''&lt;ref&gt;[http://www.haskell.org/nhc98/ ''nhc98'']. Projekt-Website. Abgerufen am 9. Januar 2010.&lt;/ref&gt;&lt;ref&gt;Niklas Rojemo: [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.38.5479&amp;rep=rep1&amp;type=pdf ''nhc – Nearly a Haskell Compiler.''] Chalmers Tech Report, 1994.&lt;/ref&gt; (auch ''nhc98'') ist ein weiterer Bytecode-Compiler, der Haskell 98 mit gewissen Einschränkungen unterstützt. Der ''York Haskell Compiler'' oder ''Yhc'' ist eine Weiterentwicklung von nhc mit dem Ziel, [[Plattformunabhängigkeit|Portabilität]] und Performance der kompilierten Programme zu verbessern.<br /> * Der ''Utrecht Haskell Compiler''&lt;ref&gt;Atze Dijkstra, Jeroen Fokker, S. Doaitse Swierstra: ''The architecture of the Utrecht Haskell compiler.'' In: ''Haskell ’09: Proceedings of the 2nd ACM SIGPLAN symposium on Haskell.'' ACM, New York, NY, USA 2009, [[doi:10.1145/1596638.1596650]], S. 93–104.&lt;/ref&gt; (UHC) ist eine experimentelle Implementierung, die an der [[Universität Utrecht]] entwickelt wird. Der Compiler basiert auf [[Attributgrammatik]]en und übersetzt Haskell in C-Code. Er implementiert Haskell 98 fast vollständig sowie einige Erweiterungen.<br /> * ''Helium''&lt;ref&gt;Bastiaan Heeren, Daan Leijen, Arjan van IJzendoorn: ''Helium, for learning Haskell.'' In: ''Haskell ’03: Proceedings of the 2003 ACM SIGPLAN workshop on Haskell.'' ACM, New York, NY, USA 2003, [[doi:10.1145/871895.871902]], S. 62–71.&lt;/ref&gt; wird ebenfalls an der Universität Utrecht entwickelt. Der Schwerpunkt des Projekts liegt darauf, leicht verständliche Fehlermeldungen zu erzeugen, um Anfängern das Erlernen von Haskell zu erleichtern. Daher wird auch ein eingeschränkter Haskell-Dialekt implementiert, der unter anderem keine Typklassen hat.<br /> Die hier genannten Implementierungen sind alle [[Open Source|Open-Source-Software]]. Bis auf Hugs sind sie auch alle in Haskell selbst implementiert.<br /> <br /> == Einfluss ==<br /> Haskell diente und dient wegen seiner stark akademischen Herkunft vielen Programmier- und Scriptsprachen als Vorbild für neue Sprachfunktionalität. So haben u.&amp;nbsp;a. [[Perl (Programmiersprache)|Perl]], [[Python (Programmiersprache)|Python]], [[JavaScript]], [[Java (Programmiersprache)|Java]], [[Scala (Programmiersprache)|Scala]] und [[PHP]] Ideen der funktionalen Programmierung von Haskell übernommen. Dazu gehören Funktionen höherer Ordnung wie map, filter usw., Teile der Art, wie generische Programmierung implementiert wurde, und anderes.<br /> <br /> == Siehe auch ==<br /> * [[International Conference on Functional Programming Contest]]<br /> * [[Pugs]] (eine Perl-6-Implementierung in Haskell)<br /> <br /> == Literatur ==<br /> * {{bibISBN|0134843460}}<br /> * {{Literatur<br /> |Autor=Marco Block, Adrian Neumann<br /> |Titel=Haskell-Intensivkurs: Ein kompakter Einstieg in die funktionale Programmierung<br /> |Verlag=Springer<br /> |Ort=Heidelberg u.&amp;nbsp;a.<br /> |Jahr=2011<br /> |ISBN=978-3-642-04717-6<br /> |DOI=10.1007/978-3-642-04718-3}}<br /> * {{Literatur<br /> |Autor=Paul Hudak<br /> |Titel=The Haskell school of expression: Learning functional programming through multimedia<br /> |Verlag=Cambridge University Press<br /> |Ort=Cambridge u.&amp;nbsp;a.<br /> |Jahr=2000<br /> |ISBN=0-521-64338-4<br /> |Kommentar=Neuauflage: [http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf ''The Haskell school of music''] (PDF; 2,4&amp;nbsp;MB), Version 2.2, 2012}}<br /> * {{Literatur<br /> |Autor=Ernst-Erich Doberkat<br /> |Titel=Haskell – Eine Einführung für Objektorientierte<br /> |Verlag=Oldenbourg Wissenschaftsverlag<br /> |Ort=München<br /> |Jahr=2012<br /> |ISBN=978-3-486-71417-3}}<br /> * {{Literatur<br /> |Autor=John Hughes<br /> |Titel=Why functional programming matters<br /> |Sammelwerk=The Computer Journal<br /> |Band=32<br /> |Nummer=2<br /> |Jahr=1989<br /> |Seiten=98–107<br /> |Online=[http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html chalmers.se]<br /> |Kommentar=Vorteile funktionaler Programmierung. Zeigt Formen der Modularisierung, die wesentlich auf Funktionen höherer Ordnung und Bedarfsauswertung beruhen.}}<br /> * {{Literatur<br /> |Autor=Miran Lipovača<br /> |Titel=Learn you a Haskell for great good! A beginner’s guide<br /> |Verlag=No Starch Press<br /> |Ort=San Francisco<br /> |Jahr=2011<br /> |ISBN=1-59327-283-9<br /> |Online=[http://learnyouahaskell.com/chapters HTML-Fassung]}}<br /> * {{Literatur<br /> |Autor=Bryan O’Sullivan, Don Stewart, John Goerzen<br /> |Titel=Real world Haskell<br /> |Verlag=O’Reilly<br /> |Ort=Sebastopol<br /> |Jahr=2008<br /> |ISBN=0-596-51498-0<br /> |Online=[http://book.realworldhaskell.org/ HTML-Fassung]}}<br /> * {{bibISBN<br /> |0521826144<br /> |Kommentar=[http://www.haskell.org/onlinereport/ HTML-Version]}}<br /> * {{Literatur<br /> |Autor=Simon Thompson<br /> |Titel=Haskell: The craft of functional programming<br /> |Auflage=3.<br /> |Verlag=Addison-Wesley<br /> |Ort=Harlow / New York<br /> |Jahr=2011<br /> |ISBN=978-0-201-88295-7}}<br /> <br /> == Weblinks ==<br /> {{Commonscat|Haskell}}<br /> {{Wikibooks|Funktionale Programmierung mit Haskell|Funktionale Programmierung mit Haskell}}<br /> {{Wikibooks|en:Haskell|Haskell (englisch)}}<br /> * [http://www.haskell.org/ haskell.org] – zentrale Anlaufstelle zu der Programmiersprache Haskell mit [http://www.haskell.org/haskellwiki/Learning_Haskell Hinweisen zum Erlernen von Haskell]<br /> * [http://tryhaskell.org/ interaktiver online Interpreter mit Tutorial] (englisch)<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> [[Kategorie:Haskell (Programmiersprache)| ]]<br /> [[Kategorie:Funktionale Programmiersprache]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Funktionalgleichung&diff=142933479 Funktionalgleichung 2015-06-09T11:29:32Z <p>MickHaskell: /* Rechengesetze */</p> <hr /> <div>Als '''Funktionalgleichung''' wird in der [[Mathematik]] eine [[Gleichung]] bezeichnet, zu deren Lösung eine oder mehrere [[Funktion (Mathematik)|Funktionen]] gesucht werden. Viele Funktionen können über eine zugrunde liegende Funktionalgleichung definiert werden. Üblicherweise werden als Funktionalgleichungen nur solche Gleichungen bezeichnet, die nicht durch Umformungen auf eine explizite [[Funktion (Mathematik)|geschlossene Form]] für die gesuchte Funktion(en) gebracht werden können, und in denen die gesuchte Funktion mit '''unterschiedlichen [[Funktion (Mathematik) | Argumenten]]''' auftritt.<br /> <br /> Bei der Untersuchung von Funktionalgleichungen ist man an '''allen''' Lösungsfunktionen des untersuchten Funktionsraumes interessiert, nicht nur an einer. Ansonsten ist es ziemlich trivial zu irgendeiner gegebenen Funktion eine Funktionalgleichung zu konstruieren.<br /> <br /> „It is natural to ask what a functional equation is. But there is no easy satisfactory answer to this question.“&lt;ref&gt;Pl. Kannappan, ''Functional Equations and Inequalities with Applications'', Springer 2009, ISBN 978-0-387-89491-1, preface&lt;/ref&gt;<br /> <br /> == Von Cauchy untersuchte Funktionalgleichungen ==<br /> <br /> [[Augustin Louis Cauchy]] hat 1821 in seinem ''Cours d’Analyse de l’Ecole Royale Polytechnique'', Kapitel&amp;nbsp;5 die stetigen Lösungen &lt;math&gt;\Phi\;&lt;/math&gt; der folgenden Funktionalgleichungen untersucht &lt;ref&gt;[http://visualiseur.bnf.fr/Visualiseur?Destination=Gallica&amp;O=NUMM-29058 visualiseur.bnf.fr]&lt;/ref&gt;:<br /> <br /> : &lt;math&gt;\Phi\colon\R\to\R,\quad\Phi(x+y)=\Phi(x)+\Phi(y)\;&lt;/math&gt;<br /> Die stetigen Lösungen dieser Funktionalgleichung sind die [[Lineare Funktion|linearen Funktionen]] &lt;math&gt;\Phi(x)=ax\;&lt;/math&gt;, wobei &lt;math&gt;a\;&lt;/math&gt; eine reelle Konstante ist. Für diese Funktionalgleichung hat sich die Bezeichnung ''Cauchy(sche)-Funktionalgleichung'' eingebürgert.<br /> <br /> : &lt;math&gt;\Phi\colon\R^+\to\R^+,\quad\Phi(xy)=\Phi(x)\Phi(y)\;&lt;/math&gt;<br /> Die stetigen Lösungen dieser Funktionalgleichung sind die [[Potenz (Mathematik)|Potenzfunktionen]] &lt;math&gt;\Phi(x)=x^a\;&lt;/math&gt;, wobei &lt;math&gt;a\;&lt;/math&gt; eine reelle Konstante ist. <br /> <br /> : &lt;math&gt;\Phi\colon\R\to\R^+,\quad\Phi(x+y)=\Phi(x)\Phi(y)\;&lt;/math&gt;<br /> Die stetigen Lösungen dieser Funktionalgleichung sind die [[Exponentialfunktion|Exponentialfunktionen]] &lt;math&gt;\Phi(x)=a^x\;&lt;/math&gt;, wobei &lt;math&gt;a\;&lt;/math&gt; eine positive reelle Konstante ist.<br /> <br /> : &lt;math&gt;\Phi\colon\R^+\to\R,\quad\Phi(xy)=\Phi(x)+\Phi(y)\;&lt;/math&gt;<br /> Die stetigen Lösungen dieser Funktionalgleichung sind die [[Logarithmus|Logarithmusfunktionen]] &lt;math&gt;\Phi(x)=\log_a(x)\;&lt;/math&gt;, wobei &lt;math&gt;a\;&lt;/math&gt; eine positive reelle Konstante ist.<br /> <br /> Ferner ist die [[Nullfunktion]] eine triviale Lösung jeder dieser Funktionalgleichungen.<br /> <br /> == Bekannte Funktionalgleichungen spezieller Funktionen ==<br /> <br /> === Gammafunktion ===<br /> <br /> Die Funktionalgleichung<br /> <br /> :&lt;math&gt;\Phi\colon\R^+\to\R,\quad<br /> \Phi(x+1) = x\, \Phi(x)&lt;/math&gt;<br /> <br /> wird durch die [[Gammafunktion]] &lt;math&gt;\Gamma&lt;/math&gt; erfüllt. Betrachtet man nur Funktionen, die [[Logarithmische Konvexität|logarithmisch konvex]] sind, so werden alle Lösungen dieser Gleichung durch &lt;math&gt;a \Gamma&lt;/math&gt; beschrieben, mit &lt;math&gt;a \in \R&lt;/math&gt;. Dies ist der [[Satz von Bohr-Mollerup]] über die Eindeutigkeit der Gammafunktion als Fortsetzung der [[Fakultät_(Mathematik) | Fakultäten]] von &lt;math&gt;\N_0&lt;/math&gt; nach &lt;math&gt;\R^+&lt;/math&gt;.<br /> <br /> Ferner ist die Gammafunktion auch eine Lösung der Funktionalgleichung<br /> :&lt;math&gt;\Phi\colon\R\!\setminus\!\Z\to\R,\quad<br /> \Phi(x) \, \Phi(1 - x) = \frac{\pi}{\sin(\pi x)} &lt;/math&gt;<br /> die nur eine spezielle Art der „Reflektionssymmetrie“ um &lt;math&gt;\tfrac 1 2&lt;/math&gt; darstellt wie man mittels der Substitution &lt;math&gt;\Phi(x) = \sqrt{\frac{\pi}{\sin(\pi x)}} e^{\Theta(x)}&lt;/math&gt; und anschließendem logarithmieren der neuen Funktionalgleichung sieht.<br /> <br /> === Polygammafunktionen ===<br /> <br /> Für &lt;math&gt;m\in\N_0 &lt;/math&gt; werden die Funktionalgleichungen<br /> <br /> :&lt;math&gt;\Phi_m\colon\R^+\to\R,\quad<br /> \Phi_m(x+1)= \Phi_m(x) + \frac{(-1)^m m!}{ x^{m+1}}&lt;/math&gt;<br /> <br /> durch die [[Polygammafunktion]]en &lt;math&gt;\psi_m&lt;/math&gt; erfüllt.<br /> Für festes &lt;math&gt;m&lt;/math&gt; werden alle stetigen und monotonen Lösungen durch die Funktionen &lt;math&gt;a + \psi_m&lt;/math&gt;<br /> dargestellt mit beliebigem &lt;math&gt;a \in \R&lt;/math&gt;.<br /> <br /> === Bernoulli-Polynome ===<br /> <br /> Für &lt;math&gt;m\in\N_0 &lt;/math&gt; werden die Funktionalgleichungen<br /> <br /> :&lt;math&gt;\Phi_m\colon\R\to\R,\quad<br /> \Phi_m(x+1)= \Phi_m(x) + m x^{m-1}&lt;/math&gt;<br /> <br /> durch die [[Bernoulli-Zahl#Bernoulli-Polynome | Bernoulli-Polynome]] &lt;math&gt;\text{B}_m&lt;/math&gt; erfüllt.<br /> Alle stetigen Lösungen dieser Gleichung werden durch &lt;math&gt;a + \text{B}_m&lt;/math&gt; plus weitere (periodische) Lösungen der homogenen Funktionalgleichung beschrieben, wobei a eine beliebige reelle Zahl ist. Genaueres dazu im nachfolgenden Abschnitt.<br /> <br /> === Periodische Funktionen ===<br /> <br /> Die Funktionalgleichung<br /> <br /> :&lt;math&gt;\Phi\colon\R\to\R,\quad<br /> \Phi(x+1)= \Phi(x)&lt;/math&gt;<br /> <br /> stellt den homogenen Lösungensanteil der obigen Funktionsgleichungen dar, da man deren Lösung einfach auf eine Lösung irgendeiner inhomogenen Funktionsgleichung addieren kann und so eine neue erhält, solange man keine weiteren einschränkenden Bedingungen verletzt.<br /> Betrachtet man alle [[holomorph]]en Funktionen auf ganz &lt;math&gt;\C&lt;/math&gt;, so werden alle Lösungsfunktionen dargestellt durch <br /> : [[Linearkombination]]en von &lt;math&gt;e^{2 \pi i n x}&lt;/math&gt; mit &lt;math&gt;n \in \Z&lt;/math&gt;.<br /> Diese Erkenntnis ist eine Grundlage der [[Fourieranalyse]]. Alle diese Funktionen sind, ausgenommen der Fall n = 0, weder konvex noch monoton.<br /> <br /> === Zetafunktion ===<br /> <br /> Die Funktionalgleichung<br /> <br /> :&lt;math&gt;\Phi\colon\R\to\R,\quad<br /> \Phi(x+1) = -2\,(2\pi)^{x}\cos\left(\frac{\pi x}{2}\right)\Gamma(-x)\Phi(-x)<br /> &lt;/math&gt;<br /> <br /> wird durch die [[Riemannsche Zetafunktion]] &lt;math&gt;\zeta&lt;/math&gt; erfüllt. &lt;math&gt;\Gamma&lt;/math&gt; bezeichnet dabei die [[Gammafunktion]].<br /> <br /> Anmerkung: Durch die Substitution<br /> <br /> :&lt;math&gt;\Phi(x) = \frac{2\pi^{x/2}\,\Theta(x+\tfrac 1 2)}{x(x-1)\,\Gamma\left(\tfrac{x}{2}\right)}&lt;/math&gt;<br /> <br /> und anschließende algebraische Vereinfachung wird diese Funktionalgleichung für &lt;math&gt;\Phi&lt;/math&gt; in eine neue für &lt;math&gt;\Theta&lt;/math&gt; überführt, die <br /> <br /> :&lt;math&gt; \!\ \Theta(\tfrac 1 2+x) = \Theta(\tfrac 1 2 - x) &lt;/math&gt;<br /> <br /> lautet. Somit kann die ursprüngliche Funktionalgleichung durch Transformation auf eine Gestalt gebracht werden, die lediglich eine [[Gerade_Funktion | gerade Funktion]] um &lt;math&gt;\tfrac 1 2 &lt;/math&gt; fordert. Die entsprechend so transformierte Riemannsche Zetafunktion ist als [[Riemannsche Xi-Funktion]] &lt;math&gt;\xi&lt;/math&gt; bekannt.<br /> <br /> === Gerade und ungerade Funktionen ===<br /> <br /> Die beiden Funktionsgleichungen <br /> <br /> :&lt;math&gt;\Phi\colon\R\to\R,\quad<br /> \Phi(x) = \pm \Phi(-x)<br /> &lt;/math&gt;<br /> <br /> werden von allen geraden bzw. ungeraden Funktionen erfüllt. Eine weitere „einfache“ Funktionsgleichung ist<br /> :&lt;math&gt;\Phi\colon I\!\subset\!\R\to\R,\quad<br /> \Phi(\Phi(x)) = x<br /> &lt;/math&gt;<br /> also alle Funktionen, die ihre eigene Umkehrfunktion auf dem Intervall &lt;math&gt;I&lt;/math&gt; sind, beschreiben ihre Lösungsmenge. Bei diesen drei Funktionsgleichungen steht aber eher die Frage im Mittelpunkt, wie ihre Lösungen sinnvollerweise zu charakterisieren sind.<br /> <br /> === „reelle“ Iterierte einer Funktion ===<br /> <br /> Gegeben sei eine [[Analytische Funktion | analytische]], [[Bijektive Funktion | bijektive]] Funktion &lt;math&gt;f\colon I\subset\R \to J\subset\R&lt;/math&gt;, dann lautet '''[[Ernst_Schröder_(Mathematiker)|Schröder]]s Funktionalgleichung'''<br /> :&lt;math&gt;\Phi\colon I\cap J \to\R,\quad<br /> \Phi( f(x) ) = c\, \Phi(x)<br /> &lt;/math&gt;<br /> mit einem festen zu bestimmenden &lt;math&gt;c \in \R&lt;/math&gt;. Wendet man auf beiden Seiten dieser Gleichung die inverse Funktion von &lt;math&gt;\Phi&lt;/math&gt; an, dann kann man dies verallgemeinern zur Definition von<br /> :&lt;math&gt;\forall\,t\in\R\colon\quad<br /> f_t(x) = \Phi^{-1}( c^t \Phi(x)) &lt;/math&gt;<br /> und für irgendein festes t verhält sich diese Funktion &lt;math&gt;f_t&lt;/math&gt; wie eine t-fach iterierte Funktion &lt;math&gt;f&lt;/math&gt;. Ein einfaches Beispiel: gegeben sei für festes &lt;math&gt;a \in \R^+&lt;/math&gt; die allgemeine Potenzfunktion &lt;math&gt;x^a&lt;/math&gt; für &lt;math&gt;f&lt;/math&gt; auf &lt;math&gt;\R^+&lt;/math&gt;. In diesem Fall lautet die Lösung der Schröderschen Gleichung &lt;math&gt;\Phi(x)=\ln(x)&lt;/math&gt; und &lt;math&gt;c=a&lt;/math&gt; mit dem Ergebnis, dass &lt;math&gt;f_t(x) = x^{a^t}&lt;/math&gt; wird.<br /> <br /> === Modulformen ===<br /> <br /> Die Funktionalgleichung<br /> <br /> :&lt;math&gt;\Phi\colon\C\to\C,\quad<br /> \Phi\left({az+b\over cz+d}\right) = (cz+d)^k \Phi(z)\quad \text{ mit }\quad ad-bc=1&lt;/math&gt;<br /> <br /> wobei &lt;math&gt;a,b,c,d, k\in \Z&lt;/math&gt; gegeben sind, wird in der Definition von [[Modulform]]en verwendet.<br /> <br /> === Wavelets und Approximationstheorie ===<br /> <br /> Für &lt;math&gt;d \in \N&lt;/math&gt; und &lt;math&gt;a_{-d}, a_{-d+1},\ldots, a_d \in \R&lt;/math&gt; definiert die Funktionalgleichung<br /> : &lt;math&gt;\Phi\left(\frac{x}{A}\right)=a_{-d}\Phi(x-d)+\cdots+a_0\Phi(x)+\cdots+a_d\Phi(x+d)<br /> = \sum_{k= -d}^d a_k \Phi(x-k) \quad \text{ mit } \quad A := \sum_{k= -d}^d a_k<br /> &lt;/math&gt;<br /> in der Theorie der [[Wavelet]]basen die Skalierungsfunktion einer [[Multiskalenanalyse]]. Die in der Approximationstheorie und Computergraphik wichtigen [[B-Spline]]s sind Lösungen einer solchen Verfeinerungsgleichung, weitere Lösungen samt den Koeffizienten finden sich unter [[Daubechies-Wavelets]]. Es gibt [[Multiwavelet|Erweiterungen]] mit vektorwertigem Lösungsfunktionen ''f'' und Matrizen als Koeffizienten.<br /> <br /> === Sinus und Kosinus ===<br /> <br /> Betrachtet man die Funktionalgleichung &lt;math&gt;\Phi(x+y)=\Phi(x)\Phi(y)\!&lt;/math&gt; die die [[Exponentialfunktion]] über den [[Komplexe Zahl|komplexen Zahlen]] erfüllt und teilt den Wertebereich in [[Realteil|Real- und Imaginärteil]] auf, also &lt;math&gt;\Phi(x)=\Theta(x)+\mathrm{i}\Omega(x)\!&lt;/math&gt;, und schränkt ferner den Definitionsbereich auf &lt;math&gt;\R&lt;/math&gt; ein, so erhält man zwei Funktionalgleichungen in zwei unbekannten Funktionen, nämlich<br /> :&lt;math&gt;\Theta(x+y)=\Theta(x)\Theta(y)-\Omega(x)\Omega(y)\!&lt;/math&gt;<br /> und<br /> :&lt;math&gt;\Omega(x+y)=\Theta(x)\Omega(y)+\Omega(x)\Theta(y)\!&lt;/math&gt;<br /> das den [[Formelsammlung Trigonometrie#Additionstheoreme|Additionstheoremen]] entspricht und als Funktionalgleichungssystem für die reellen [[Sinus und Kosinus]]-Funktionen aufgefasst werden kann.<br /> <br /> == Weitere Beispiele allgemeiner Funktionalgleichungen ==<br /> <br /> === Rekursionsgleichungen ===<br /> <br /> Eine einfache Klasse von Funktionalgleichungen besteht aus den [[Differenzengleichung|Rekursionsgleichungen]] über &lt;math&gt;\Z&lt;/math&gt;. Formal betrachtet wird dabei eine unbekannte Funktion &lt;math&gt;f :\Z^k \to \Z&lt;/math&gt; gesucht.<br /> <br /> Ein sehr einfaches Beispiel einer solchen Rekursionsgleichung ist etwa<br /> die lineare Gleichung der [[Fibonacci-Folge]]:<br /> <br /> :&lt;math&gt; f(n+2) = f(n+1) + f(n)&lt;/math&gt;.<br /> <br /> Diese kann man natürlich auch eingebettet in die Menge der reellen Zahlen betrachten, also hier<br /> <br /> :&lt;math&gt;\Phi\colon\R\to\R,\quad<br /> \Phi(x+2) = \Phi(x+1)+\Phi(x)&lt;/math&gt;<br /> <br /> deren analytische Lösungen dann alle die Form<br /> :&lt;math&gt; \Phi(x) = a \left(\frac{1+\sqrt 5} 2\right)^x + b \left(\frac{1-\sqrt 5} 2\right)^x&lt;/math&gt;<br /> haben mit beliebigem &lt;math&gt; a,b, \in \R&lt;/math&gt;. Nur als Funktion &lt;math&gt;f\colon \Z \to\Z&lt;/math&gt; lassen sich alle ihre Lösungsfunktionen z.&amp;nbsp;B. als<br /> :&lt;math&gt;f(n) = \frac1{\sqrt 5} \left(f(1)-\tfrac {1-\sqrt 5}{2} f(0)\right)\left(\frac{1+\sqrt 5}{2}\right)^n + \frac1{\sqrt 5} \left(\tfrac{1+\sqrt 5}{2} f(0) - f(1)\right)\left(\tfrac{1-\sqrt 5}{2}\right)^n&lt;/math&gt;<br /> angeben. Obwohl in dieser Darstellung irrationale Zahlen auftreten, ergibt sich für jedes &lt;math&gt;n&lt;/math&gt; ein ganzzahliger Wert, solange &lt;math&gt;f(0), f(1) \in \Z&lt;/math&gt; sind.<br /> <br /> === Rechengesetze ===<br /> <br /> Rechengesetze wie [[Kommutativgesetz]], [[Assoziativgesetz]] und [[Distributivgesetz]] können ebenfalls als Funktionalgleichungen interpretiert werden.<br /> <br /> Beispiel Assoziativgesetz: Gegeben sei eine [[Menge (Mathematik)|Menge]] &lt;math&gt;M&lt;/math&gt;. Für ihre binäre assoziative Verknüpfung&amp;nbsp;&lt;math&gt;\times\,\colon M^2 \to M&lt;/math&gt; bzw. zweiparametrige Funktion &lt;math&gt;f\colon M^2 \to M&lt;/math&gt; gelten für alle &lt;math&gt;a,b,c \in M&lt;/math&gt;<br /> :[[Infixnotation]]: &lt;math&gt;(a \times b) \times c = a \times (b \times c)&lt;/math&gt;<br /> und in<br /> :[[Präfixnotation]]: &lt;math&gt;f(f(a,b),c) = f(a,f(b,c))&lt;/math&gt;<br /> wobei &lt;math&gt;f(a,b) \text{ mit } a \times b&lt;/math&gt; identifiziert wird.<br /> <br /> Bezeichne &lt;math&gt;g&lt;/math&gt; die binäre Verknüpfungsfunktion 2ter Stufe (z.B. Multiplikation) und &lt;math&gt;f&lt;/math&gt; die Verknüpfungsfunktion 1ster Stufe (z.B. Addition), dann würde ein Distributivgesetz als Funktionalgleichung geschrieben <br /> : &lt;math&gt;g(a,f(b,c)) = f(g(a,b),g(a,c))&lt;/math&gt; für alle &lt;math&gt;a,b,c \in M&lt;/math&gt;<br /> lauten.<br /> <br /> == Anmerkungen ==<br /> <br /> Allen Beispielen ist gemeinsam, dass zwei oder mehr bekannte Funktionen (Multiplikation mit einer Konstanten, Addition, oder einfach nur die identische Funktion) als Argumente der unbekannte Funktion verwendet werden.<br /> <br /> Bei der Suche nach ''allen'' Lösungen einer Funktionalgleichung werden oft Zusatzbedingungen gestellt, beispielsweise wird bei der oben erwähnten ''Cauchy-Gleichung'' für ''vernünftige'' Lösungen Stetigkeit gefordert. [[Georg Hamel]] hat allerdings 1905 gezeigt, dass unter Voraussetzung des [[Auswahlaxiom]]s auch unstetige Lösungen existieren.&lt;ref&gt;G. Hamel: ''Eine Basis aller Zahlen und die unstetigen Lösungen der Funktionalgleichung f(x+y)=f(x)+f(y).'' Math. Ann. 60, 459–462, 1905.&lt;/ref&gt; Diese Lösungen basieren auf einer [[Hamelbasis]] der reellen Zahlen als Vektorraum über den rationalen Zahlen und sind vor allem von theoretischer Bedeutung.<br /> <br /> == Literatur ==<br /> <br /> * Janos Aczel: ''Lectures on Functional Equations and Their Applications'', Dover 2006, ISBN 0486445232<br /> <br /> == Weblinks ==<br /> <br /> * [http://mathworld.wolfram.com/CauchyFunctionalEquation.html Cauchy-Gleichung in Mathworld](engl.)<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> [[Kategorie:Analysis]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Fixpunkt_(Mathematik)&diff=142931656 Fixpunkt (Mathematik) 2015-06-09T10:25:26Z <p>MickHaskell: /* Beispiele */</p> <hr /> <div>[[Datei:Fixpunkt.svg|thumb|Darstellung eines Fixpunktes. Dieser ist - nach den im Text wiedergegebenen Kriterien - ''anziehend'', das heißt ''stabil''.]]<br /> In der [[Mathematik]] versteht man unter einem '''Fixpunkt''' einen Punkt, der durch eine gegebene Abbildung auf sich abgebildet wird. Die Fixpunkte einer [[Achsenspiegelung]] sind die Punkte der Spiegelachse. Eine [[Punktspiegelung]] hat nur einen Fixpunkt, nämlich deren Zentrum.<br /> <br /> == Definition ==<br /> Sei &lt;math&gt;X&lt;/math&gt; eine Menge und &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[Funktion_(Mathematik)|Funktion]]. Dann heißt ein Punkt &lt;math&gt;x \in X&lt;/math&gt; Fixpunkt, falls er die [[Gleichung]] &lt;math&gt;f(x) = x&lt;/math&gt; erfüllt.<br /> <br /> == Anmerkungen ==<br /> * Ist &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[lineare Abbildung]] auf dem [[Vektorraum]] &lt;math&gt;X&lt;/math&gt;, dann nennt man die Fixpunkte von &lt;math&gt;f&lt;/math&gt; auch ''Fixvektoren''. Insbesondere sind Fixvektoren also [[Eigenwertproblem|Eigenvektoren]] von &lt;math&gt;f&lt;/math&gt; bezüglich des Eigenwerts 1.<br /> * Da sich jede Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; in eine Fixpunktform mit &lt;math&gt;f(x) = g(x) - y + x&lt;/math&gt; umwandeln lässt, sind Fixpunktgleichungen ein Prototyp von [[Nichtlineare Gleichung|nichtlinearen Gleichungen]]. Ein Wert &lt;math&gt;x&lt;/math&gt; ist genau dann Fixpunkt von &lt;math&gt;f(x)&lt;/math&gt; wenn dieser Wert auch Lösung von Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; ist.<br /> <br /> == Fixpunkte in der Numerik ==<br /> Darüber hinaus gilt folgendes: Der Fixpunkt ist [[stabil]] bzw. [[stabil|instabil]], wenn &lt;math&gt;\left|f{}'(x)\right|&lt;/math&gt;, der Betrag der Ableitung der betrachteten Funktion, im Schnittpunkt &lt;math&gt;&lt;1&lt;/math&gt; bzw. &lt;math&gt;&gt;1&lt;/math&gt; ist. Anschaulich bedeutet dies, dass man die [[Funktion (Mathematik)|Funktion]] auf den Punkt selbst anwenden kann, ohne ihn zu verändern, wobei eine Störung wenig (bzw. viel) ändert, indem sie zum Fixpunkt hinführt (bzw. vom Fixpunkt wegführt).<br /> <br /> Mit dem Fixpunktproblem verwandt ist das Problem der „iterierten Abbildungen“, das in der [[Numerik]] und der [[Chaosforschung]] wichtig ist. Mit einem vorgegebenen Anfangswert &lt;math&gt;x_1&lt;/math&gt; beginnend, springt man hier nach dem Schema &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; treppenartig zwischen der Funktion &lt;math&gt; f(x)&lt;/math&gt; und der Diagonale hin und her, und zwar zum Fixpunkt hin oder weg von ihm, je nachdem ob der Fixpunkt stabil oder instabil ist. Einzelheiten sind u. a. dem unten angegebenen Buch von H.G. Schuster &lt;ref&gt;Heinz Georg Schuster: ''Deterministisches Chaos. Eine Einführung.'' VCH, Weinheim u. a. 1994, ISBN 3-527-29089-3.&lt;/ref&gt; zu entnehmen.<br /> <br /> == Beispiele ==<br /> * Die Parabelfunktion &lt;math&gt;f \colon \R \to \R&lt;/math&gt;, die durch &lt;math&gt;f(x) = x^2&lt;/math&gt; gegeben ist, hat die zwei Fixpunkte 0 (stabil) und 1 (instabil).<br /> * Sei &lt;math&gt;V&lt;/math&gt; ein [[Vektorraum]] und &lt;math&gt;\operatorname{Id} \colon V \to V&lt;/math&gt; die identische Abbildung, also die Abbildung mit &lt;math&gt;\operatorname{Id} x = x&lt;/math&gt;, dann sind alle &lt;math&gt;x \in V&lt;/math&gt; Fixpunkte.<br /> * Sei &lt;math&gt;\mathcal{S}&lt;/math&gt; der [[Schwartz-Raum]] und &lt;math&gt;\mathcal{F} \colon \mathcal{S} \to \mathcal{S}&lt;/math&gt; die [[kontinuierliche Fourier-Transformation]]. Für die [[Dichtefunktion]] &lt;math&gt;\varphi(x)=\tfrac {1}{\sqrt{2\pi}^n} \cdot e^{-\tfrac {1}{2} x^2}&lt;/math&gt; der &lt;math&gt;n&lt;/math&gt;-dimensionalen [[Normalverteilung]] gilt &lt;math&gt;\mathcal{F}(\varphi) = \varphi&lt;/math&gt;. Daher ist die Dichtefunktion der Normalverteilung ein Fixpunkt der Fourier-Transformation.<br /> * Das [[Newton-Verfahren]] &lt;math&gt;x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} \,&lt;/math&gt; entspricht der Fixpunktgleichung &lt;math&gt;g(x) = x - \frac{f(x)}{f'(x)} \,&lt;/math&gt; .<br /> <br /> == Raum mit Fixpunkteigenschaft ==<br /> === Definition ===<br /> Ein [[topologischer Raum]] &lt;math&gt;X&lt;/math&gt; besitzt die Fixpunkteigenschaft, falls jede [[Stetigkeit (Topologie)|stetige Abbildung]] &lt;math&gt;f \colon X \to X&lt;/math&gt; einen Fixpunkt hat.&lt;ref&gt;[[Ilka Agricola]], [[Thomas Friedrich (Mathematiker)|Thomas Friedrich]]: ''Vektoranalysis. Differentialformen in Analysis, Geometrie und Physik.'' 2., überarbeitete und erweiterte Auflage. Vieweg + Teubner, Wiesbaden 2010, ISBN 978-3-8348-1016-8, S. 36.&lt;/ref&gt;<br /> <br /> === Beispiele ===<br /> * Die [[Sphäre (Mathematik)|Sphäre]] &lt;math&gt;S^n&lt;/math&gt; besitzt die Fixpunkteigenschaft nicht, denn die [[Punktspiegelung]] am Mittelpunkt hat keinen Fixpunkt. <br /> * Eine Vollkugel &lt;math&gt;D^n&lt;/math&gt; hat die Fixpunkteigenschaft. Dies besagt der [[Fixpunktsatz von Brouwer]].<br /> <br /> == Fixpunktsätze ==<br /> {{Hauptartikel|Fixpunktsatz}}<br /> <br /> Die [[Existenzbeweis|Existenz]] von Fixpunkten ist Gegenstand einiger wichtiger mathematischer Sätze. Der [[Fixpunktsatz von Banach|Banach'sche Fixpunktsatz]] besagt, dass eine [[Kontraktion (Mathematik)|Kontraktion]] eines vollständigen [[metrischer Raum|metrischen Raumes]] genau einen Fixpunkt besitzt. <br /> Wenn eine [[Selbstabbildung]] nur [[Stetigkeit|stetig]] ist, muss der Fixpunkt nicht eindeutig sein und andere Fixpunktsätze zeigen dann nur die Existenz. Dabei stellen sie meist stärkere Voraussetzungen an den Raum, auf dem die Funktion definiert ist. Beispielsweise zeigt der [[Fixpunktsatz von Schauder]] die Existenz eines Fixpunktes in einer kompakten, konvexen Teilmenge eines Banachraums. Dieser Satz ist eine Verallgemeinerung des [[Fixpunktsatz von Brouwer|Fixpunktsatzes von Brouwer]], der besagt, dass jede stetige Abbildung der abgeschlossenen Einheitskugel in sich selbst einen Fixpunkt besitzt. Im Gegensatz zu den beiden anderen Sätzen gilt dieser allerdings nur in endlichdimensionalen Räumen, also im &lt;math&gt;\mathbb{R}^n&lt;/math&gt; oder im &lt;math&gt;\mathbb{C}^n&lt;/math&gt;. <br /> <br /> Der Fixpunktsatz von Banach liefert außerdem die [[Konvergenz (Mathematik)|Konvergenz]] und eine Fehlerabschätzung der [[Fixpunktiteration|Fixpunkt-Iteration]] &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; im betrachteten Raum. Dieser Satz ergibt somit ein konkretes [[Numerische Mathematik|numerisches]] Verfahren zur Berechnung von Fixpunkten.<br /> <br /> == Siehe auch ==<br /> <br /> * [[Fixgerade]]<br /> * [[Fixpunktgerade]]<br /> <br /> ==Literatur==<br /> * Vasile I. Instrăţescu: ''Fixed Point Theory. An Introduction'' (= ''Mathematics and its Applications.'' Bd. 7). D. Reidel, Dordrecht u. a. 1981, ISBN 90-277-1224-7.<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> [[Kategorie:Analysis]]<br /> [[Kategorie:Numerische Mathematik]]<br /> [[Kategorie:Topologie]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Fixpunkt_(Mathematik)&diff=142931432 Fixpunkt (Mathematik) 2015-06-09T10:16:19Z <p>MickHaskell: /* Beispiele */</p> <hr /> <div>[[Datei:Fixpunkt.svg|thumb|Darstellung eines Fixpunktes. Dieser ist - nach den im Text wiedergegebenen Kriterien - ''anziehend'', das heißt ''stabil''.]]<br /> In der [[Mathematik]] versteht man unter einem '''Fixpunkt''' einen Punkt, der durch eine gegebene Abbildung auf sich abgebildet wird. Die Fixpunkte einer [[Achsenspiegelung]] sind die Punkte der Spiegelachse. Eine [[Punktspiegelung]] hat nur einen Fixpunkt, nämlich deren Zentrum.<br /> <br /> == Definition ==<br /> Sei &lt;math&gt;X&lt;/math&gt; eine Menge und &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[Funktion_(Mathematik)|Funktion]]. Dann heißt ein Punkt &lt;math&gt;x \in X&lt;/math&gt; Fixpunkt, falls er die [[Gleichung]] &lt;math&gt;f(x) = x&lt;/math&gt; erfüllt.<br /> <br /> == Anmerkungen ==<br /> * Ist &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[lineare Abbildung]] auf dem [[Vektorraum]] &lt;math&gt;X&lt;/math&gt;, dann nennt man die Fixpunkte von &lt;math&gt;f&lt;/math&gt; auch ''Fixvektoren''. Insbesondere sind Fixvektoren also [[Eigenwertproblem|Eigenvektoren]] von &lt;math&gt;f&lt;/math&gt; bezüglich des Eigenwerts 1.<br /> * Da sich jede Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; in eine Fixpunktform mit &lt;math&gt;f(x) = g(x) - y + x&lt;/math&gt; umwandeln lässt, sind Fixpunktgleichungen ein Prototyp von [[Nichtlineare Gleichung|nichtlinearen Gleichungen]]. Ein Wert &lt;math&gt;x&lt;/math&gt; ist genau dann Fixpunkt von &lt;math&gt;f(x)&lt;/math&gt; wenn dieser Wert auch Lösung von Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; ist.<br /> <br /> == Fixpunkte in der Numerik ==<br /> Darüber hinaus gilt folgendes: Der Fixpunkt ist [[stabil]] bzw. [[stabil|instabil]], wenn &lt;math&gt;\left|f{}'(x)\right|&lt;/math&gt;, der Betrag der Ableitung der betrachteten Funktion, im Schnittpunkt &lt;math&gt;&lt;1&lt;/math&gt; bzw. &lt;math&gt;&gt;1&lt;/math&gt; ist. Anschaulich bedeutet dies, dass man die [[Funktion (Mathematik)|Funktion]] auf den Punkt selbst anwenden kann, ohne ihn zu verändern, wobei eine Störung wenig (bzw. viel) ändert, indem sie zum Fixpunkt hinführt (bzw. vom Fixpunkt wegführt).<br /> <br /> Mit dem Fixpunktproblem verwandt ist das Problem der „iterierten Abbildungen“, das in der [[Numerik]] und der [[Chaosforschung]] wichtig ist. Mit einem vorgegebenen Anfangswert &lt;math&gt;x_1&lt;/math&gt; beginnend, springt man hier nach dem Schema &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; treppenartig zwischen der Funktion &lt;math&gt; f(x)&lt;/math&gt; und der Diagonale hin und her, und zwar zum Fixpunkt hin oder weg von ihm, je nachdem ob der Fixpunkt stabil oder instabil ist. Einzelheiten sind u. a. dem unten angegebenen Buch von H.G. Schuster &lt;ref&gt;Heinz Georg Schuster: ''Deterministisches Chaos. Eine Einführung.'' VCH, Weinheim u. a. 1994, ISBN 3-527-29089-3.&lt;/ref&gt; zu entnehmen.<br /> <br /> == Beispiele ==<br /> * Die Parabelfunktion &lt;math&gt;f \colon \R \to \R&lt;/math&gt;, die durch &lt;math&gt;f(x) = x^2&lt;/math&gt; gegeben ist, hat die zwei Fixpunkte 0 (stabil) und 1 (instabil).<br /> * Sei &lt;math&gt;V&lt;/math&gt; ein [[Vektorraum]] und &lt;math&gt;\operatorname{Id} \colon V \to V&lt;/math&gt; die identische Abbildung, also die Abbildung mit &lt;math&gt;\operatorname{Id} x = x&lt;/math&gt;, dann sind alle &lt;math&gt;x \in V&lt;/math&gt; Fixpunkte.<br /> * Sei &lt;math&gt;\mathcal{S}&lt;/math&gt; der [[Schwartz-Raum]] und &lt;math&gt;\mathcal{F} \colon \mathcal{S} \to \mathcal{S}&lt;/math&gt; die [[kontinuierliche Fourier-Transformation]]. Für die [[Dichtefunktion]] &lt;math&gt;\varphi(x)=\tfrac {1}{\sqrt{2\pi}^n} \cdot e^{-\tfrac {1}{2} x^2}&lt;/math&gt; der &lt;math&gt;n&lt;/math&gt;-dimensionalen [[Normalverteilung]] gilt &lt;math&gt;\mathcal{F}(\varphi) = \varphi&lt;/math&gt;. Daher ist die Dichtefunktion der Normalverteilung ein Fixpunkt der Fourier-Transformation.<br /> <br /> == Raum mit Fixpunkteigenschaft ==<br /> === Definition ===<br /> Ein [[topologischer Raum]] &lt;math&gt;X&lt;/math&gt; besitzt die Fixpunkteigenschaft, falls jede [[Stetigkeit (Topologie)|stetige Abbildung]] &lt;math&gt;f \colon X \to X&lt;/math&gt; einen Fixpunkt hat.&lt;ref&gt;[[Ilka Agricola]], [[Thomas Friedrich (Mathematiker)|Thomas Friedrich]]: ''Vektoranalysis. Differentialformen in Analysis, Geometrie und Physik.'' 2., überarbeitete und erweiterte Auflage. Vieweg + Teubner, Wiesbaden 2010, ISBN 978-3-8348-1016-8, S. 36.&lt;/ref&gt;<br /> <br /> === Beispiele ===<br /> * Die [[Sphäre (Mathematik)|Sphäre]] &lt;math&gt;S^n&lt;/math&gt; besitzt die Fixpunkteigenschaft nicht, denn die [[Punktspiegelung]] am Mittelpunkt hat keinen Fixpunkt. <br /> * Eine Vollkugel &lt;math&gt;D^n&lt;/math&gt; hat die Fixpunkteigenschaft. Dies besagt der [[Fixpunktsatz von Brouwer]].<br /> <br /> == Fixpunktsätze ==<br /> {{Hauptartikel|Fixpunktsatz}}<br /> <br /> Die [[Existenzbeweis|Existenz]] von Fixpunkten ist Gegenstand einiger wichtiger mathematischer Sätze. Der [[Fixpunktsatz von Banach|Banach'sche Fixpunktsatz]] besagt, dass eine [[Kontraktion (Mathematik)|Kontraktion]] eines vollständigen [[metrischer Raum|metrischen Raumes]] genau einen Fixpunkt besitzt. <br /> Wenn eine [[Selbstabbildung]] nur [[Stetigkeit|stetig]] ist, muss der Fixpunkt nicht eindeutig sein und andere Fixpunktsätze zeigen dann nur die Existenz. Dabei stellen sie meist stärkere Voraussetzungen an den Raum, auf dem die Funktion definiert ist. Beispielsweise zeigt der [[Fixpunktsatz von Schauder]] die Existenz eines Fixpunktes in einer kompakten, konvexen Teilmenge eines Banachraums. Dieser Satz ist eine Verallgemeinerung des [[Fixpunktsatz von Brouwer|Fixpunktsatzes von Brouwer]], der besagt, dass jede stetige Abbildung der abgeschlossenen Einheitskugel in sich selbst einen Fixpunkt besitzt. Im Gegensatz zu den beiden anderen Sätzen gilt dieser allerdings nur in endlichdimensionalen Räumen, also im &lt;math&gt;\mathbb{R}^n&lt;/math&gt; oder im &lt;math&gt;\mathbb{C}^n&lt;/math&gt;. <br /> <br /> Der Fixpunktsatz von Banach liefert außerdem die [[Konvergenz (Mathematik)|Konvergenz]] und eine Fehlerabschätzung der [[Fixpunktiteration|Fixpunkt-Iteration]] &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; im betrachteten Raum. Dieser Satz ergibt somit ein konkretes [[Numerische Mathematik|numerisches]] Verfahren zur Berechnung von Fixpunkten.<br /> <br /> == Siehe auch ==<br /> <br /> * [[Fixgerade]]<br /> * [[Fixpunktgerade]]<br /> <br /> ==Literatur==<br /> * Vasile I. Instrăţescu: ''Fixed Point Theory. An Introduction'' (= ''Mathematics and its Applications.'' Bd. 7). D. Reidel, Dordrecht u. a. 1981, ISBN 90-277-1224-7.<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> [[Kategorie:Analysis]]<br /> [[Kategorie:Numerische Mathematik]]<br /> [[Kategorie:Topologie]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Fixpunkt_(Mathematik)&diff=142931103 Fixpunkt (Mathematik) 2015-06-09T10:05:04Z <p>MickHaskell: /* Anmerkungen */</p> <hr /> <div>[[Datei:Fixpunkt.svg|thumb|Darstellung eines Fixpunktes. Dieser ist - nach den im Text wiedergegebenen Kriterien - ''anziehend'', das heißt ''stabil''.]]<br /> In der [[Mathematik]] versteht man unter einem '''Fixpunkt''' einen Punkt, der durch eine gegebene Abbildung auf sich abgebildet wird. Die Fixpunkte einer [[Achsenspiegelung]] sind die Punkte der Spiegelachse. Eine [[Punktspiegelung]] hat nur einen Fixpunkt, nämlich deren Zentrum.<br /> <br /> == Definition ==<br /> Sei &lt;math&gt;X&lt;/math&gt; eine Menge und &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[Funktion_(Mathematik)|Funktion]]. Dann heißt ein Punkt &lt;math&gt;x \in X&lt;/math&gt; Fixpunkt, falls er die [[Gleichung]] &lt;math&gt;f(x) = x&lt;/math&gt; erfüllt.<br /> <br /> == Anmerkungen ==<br /> * Ist &lt;math&gt;f \colon X \to X&lt;/math&gt; eine [[lineare Abbildung]] auf dem [[Vektorraum]] &lt;math&gt;X&lt;/math&gt;, dann nennt man die Fixpunkte von &lt;math&gt;f&lt;/math&gt; auch ''Fixvektoren''. Insbesondere sind Fixvektoren also [[Eigenwertproblem|Eigenvektoren]] von &lt;math&gt;f&lt;/math&gt; bezüglich des Eigenwerts 1.<br /> * Da sich jede Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; in eine Fixpunktform mit &lt;math&gt;f(x) = g(x) - y + x&lt;/math&gt; umwandeln lässt, sind Fixpunktgleichungen ein Prototyp von [[Nichtlineare Gleichung|nichtlinearen Gleichungen]]. Ein Wert &lt;math&gt;x&lt;/math&gt; ist genau dann Fixpunkt von &lt;math&gt;f(x)&lt;/math&gt; wenn dieser Wert auch Lösung von Gleichung &lt;math&gt;g(x) = y&lt;/math&gt; ist.<br /> <br /> == Fixpunkte in der Numerik ==<br /> Darüber hinaus gilt folgendes: Der Fixpunkt ist [[stabil]] bzw. [[stabil|instabil]], wenn &lt;math&gt;\left|f{}'(x)\right|&lt;/math&gt;, der Betrag der Ableitung der betrachteten Funktion, im Schnittpunkt &lt;math&gt;&lt;1&lt;/math&gt; bzw. &lt;math&gt;&gt;1&lt;/math&gt; ist. Anschaulich bedeutet dies, dass man die [[Funktion (Mathematik)|Funktion]] auf den Punkt selbst anwenden kann, ohne ihn zu verändern, wobei eine Störung wenig (bzw. viel) ändert, indem sie zum Fixpunkt hinführt (bzw. vom Fixpunkt wegführt).<br /> <br /> Mit dem Fixpunktproblem verwandt ist das Problem der „iterierten Abbildungen“, das in der [[Numerik]] und der [[Chaosforschung]] wichtig ist. Mit einem vorgegebenen Anfangswert &lt;math&gt;x_1&lt;/math&gt; beginnend, springt man hier nach dem Schema &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; treppenartig zwischen der Funktion &lt;math&gt; f(x)&lt;/math&gt; und der Diagonale hin und her, und zwar zum Fixpunkt hin oder weg von ihm, je nachdem ob der Fixpunkt stabil oder instabil ist. Einzelheiten sind u. a. dem unten angegebenen Buch von H.G. Schuster &lt;ref&gt;Heinz Georg Schuster: ''Deterministisches Chaos. Eine Einführung.'' VCH, Weinheim u. a. 1994, ISBN 3-527-29089-3.&lt;/ref&gt; zu entnehmen.<br /> <br /> == Beispiele ==<br /> * Die Parabelfunktion &lt;math&gt;f \colon \R \to \R&lt;/math&gt;, die durch &lt;math&gt;f(x) = x^2&lt;/math&gt; gegeben ist, hat die zwei Fixpunkte 0 und 1.<br /> * Sei &lt;math&gt;V&lt;/math&gt; ein [[Vektorraum]] und &lt;math&gt;\operatorname{Id} \colon V \to V&lt;/math&gt; die identische Abbildung, also die Abbildung mit &lt;math&gt;\operatorname{Id} x = x&lt;/math&gt;, dann sind alle &lt;math&gt;x \in V&lt;/math&gt; Fixpunkte.<br /> * Sei &lt;math&gt;\mathcal{S}&lt;/math&gt; der [[Schwartz-Raum]] und &lt;math&gt;\mathcal{F} \colon \mathcal{S} \to \mathcal{S}&lt;/math&gt; die [[kontinuierliche Fourier-Transformation]]. Für die [[Dichtefunktion]] &lt;math&gt;\varphi(x)=\tfrac {1}{\sqrt{2\pi}^n} \cdot e^{-\tfrac {1}{2} x^2}&lt;/math&gt; der &lt;math&gt;n&lt;/math&gt;-dimensionalen [[Normalverteilung]] gilt &lt;math&gt;\mathcal{F}(\varphi) = \varphi&lt;/math&gt;. Daher ist die Dichtefunktion der Normalverteilung ein Fixpunkt der Fourier-Transformation.<br /> <br /> == Raum mit Fixpunkteigenschaft ==<br /> === Definition ===<br /> Ein [[topologischer Raum]] &lt;math&gt;X&lt;/math&gt; besitzt die Fixpunkteigenschaft, falls jede [[Stetigkeit (Topologie)|stetige Abbildung]] &lt;math&gt;f \colon X \to X&lt;/math&gt; einen Fixpunkt hat.&lt;ref&gt;[[Ilka Agricola]], [[Thomas Friedrich (Mathematiker)|Thomas Friedrich]]: ''Vektoranalysis. Differentialformen in Analysis, Geometrie und Physik.'' 2., überarbeitete und erweiterte Auflage. Vieweg + Teubner, Wiesbaden 2010, ISBN 978-3-8348-1016-8, S. 36.&lt;/ref&gt;<br /> <br /> === Beispiele ===<br /> * Die [[Sphäre (Mathematik)|Sphäre]] &lt;math&gt;S^n&lt;/math&gt; besitzt die Fixpunkteigenschaft nicht, denn die [[Punktspiegelung]] am Mittelpunkt hat keinen Fixpunkt. <br /> * Eine Vollkugel &lt;math&gt;D^n&lt;/math&gt; hat die Fixpunkteigenschaft. Dies besagt der [[Fixpunktsatz von Brouwer]].<br /> <br /> == Fixpunktsätze ==<br /> {{Hauptartikel|Fixpunktsatz}}<br /> <br /> Die [[Existenzbeweis|Existenz]] von Fixpunkten ist Gegenstand einiger wichtiger mathematischer Sätze. Der [[Fixpunktsatz von Banach|Banach'sche Fixpunktsatz]] besagt, dass eine [[Kontraktion (Mathematik)|Kontraktion]] eines vollständigen [[metrischer Raum|metrischen Raumes]] genau einen Fixpunkt besitzt. <br /> Wenn eine [[Selbstabbildung]] nur [[Stetigkeit|stetig]] ist, muss der Fixpunkt nicht eindeutig sein und andere Fixpunktsätze zeigen dann nur die Existenz. Dabei stellen sie meist stärkere Voraussetzungen an den Raum, auf dem die Funktion definiert ist. Beispielsweise zeigt der [[Fixpunktsatz von Schauder]] die Existenz eines Fixpunktes in einer kompakten, konvexen Teilmenge eines Banachraums. Dieser Satz ist eine Verallgemeinerung des [[Fixpunktsatz von Brouwer|Fixpunktsatzes von Brouwer]], der besagt, dass jede stetige Abbildung der abgeschlossenen Einheitskugel in sich selbst einen Fixpunkt besitzt. Im Gegensatz zu den beiden anderen Sätzen gilt dieser allerdings nur in endlichdimensionalen Räumen, also im &lt;math&gt;\mathbb{R}^n&lt;/math&gt; oder im &lt;math&gt;\mathbb{C}^n&lt;/math&gt;. <br /> <br /> Der Fixpunktsatz von Banach liefert außerdem die [[Konvergenz (Mathematik)|Konvergenz]] und eine Fehlerabschätzung der [[Fixpunktiteration|Fixpunkt-Iteration]] &lt;math&gt;x_{n+1}=f(x_n)&lt;/math&gt; im betrachteten Raum. Dieser Satz ergibt somit ein konkretes [[Numerische Mathematik|numerisches]] Verfahren zur Berechnung von Fixpunkten.<br /> <br /> == Siehe auch ==<br /> <br /> * [[Fixgerade]]<br /> * [[Fixpunktgerade]]<br /> <br /> ==Literatur==<br /> * Vasile I. Instrăţescu: ''Fixed Point Theory. An Introduction'' (= ''Mathematics and its Applications.'' Bd. 7). D. Reidel, Dordrecht u. a. 1981, ISBN 90-277-1224-7.<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> [[Kategorie:Analysis]]<br /> [[Kategorie:Numerische Mathematik]]<br /> [[Kategorie:Topologie]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=JavaScript&diff=141666091 JavaScript 2015-05-01T14:53:16Z <p>MickHaskell: /* Erzeugung */</p> <hr /> <div>{{Infobox Programmiersprache<br /> |Logo = [[Datei:Unofficial JavaScript logo 2.svg|120px]]<br /> |Beschreibung = Inoffizielles Logo<br /> |Paradigma = multiparadigmatisch<br /> |Erscheinungsjahr = 1995<br /> |Entwickler = [[Brendan Eich]]<br /> |AktuelleVersion = 1.8.5<br /> |AktuelleVersionFreigabeDatum = 2010<br /> |Typisierung = [[Schwache Typisierung|schwach]], [[Dynamische Typisierung|dynamisch]], [[Duck-Typing|duck]]<br /> |Implementierung = [[SpiderMonkey]], [[Rhino (Programmierung)|Rhino]], [[SquirrelFish]], [[V8 (JavaScript-Implementierung)|V8]]<br /> |Beeinflusst_von = [[Self (Programmiersprache)|Self]], [[C (Programmiersprache)|C]], [[Scheme]], [[Perl (Programmiersprache)|Perl]], [[Python (Programmiersprache)|Python]], [[Java (Programmiersprache)|Java]]<br /> |Beeinflusste = [[ActionScript]], [[Haxe (Programmiersprache)|Haxe]], [[CoffeeScript]], [[Dart (Programmiersprache)|Dart]], [[TypeScript]]<br /> }}<br /> <br /> '''JavaScript''' (kurz '''JS''') ist eine [[Skriptsprache]], die ursprünglich für [[dynamisches HTML]] in [[Webbrowser]]n entwickelt wurde, um Benutzerinteraktionen auszuwerten, Inhalte zu verändern, nachzuladen oder zu generieren und so die Möglichkeiten von [[Hypertext Markup Language|HTML]] und [[Cascading Style Sheets|CSS]] zu erweitern. Heute findet JavaScript auch außerhalb von Browsern Anwendung, so etwa auf Servern und in Microcontrollern.&lt;ref name=&quot;espruino&quot;&gt;[http://www.heise.de/newsticker/meldung/JavaScript-fuer-Mikrocontroller-1934018.html ''JavaScript für Mikrocontroller''.] heise online&lt;/ref&gt;&lt;ref name=&quot;tessel&quot;&gt;[http://www.heise.de/newsticker/meldung/Tessel-JavaScript-Entwicklerboard-fuers-Internet-der-Dinge-1936379.html ''Tessel: JavaScript-Entwicklerboard fürs „Internet der Dinge“''.] heise online&lt;/ref&gt;<br /> <br /> Der als '''ECMAScript''' ([[Ecma International|ECMA]] 262) standardisierte Sprachkern von JavaScript beschreibt eine [[Dynamische Typisierung|dynamisch typisierte]], [[Objektorientierte Programmierung|objektorientierte]], aber klassenlose Skriptsprache. Sie wird allen objektorientierten [[Programmierparadigma|Programmierparadigmen]] unter anderem auf der Basis von [[Prototypenbasierte Programmierung|Prototypen]] gerecht. In JavaScript lässt sich objektorientiert und sowohl [[Prozedurale Programmierung|prozedural]] als auch [[Funktionale Programmierung|funktional]] programmieren.<br /> <br /> == Entwicklung ==<br /> Die [[Syntax]] von JavaScript ähnelt jener der [[C (Programmiersprache)|C]]-Abkömmlinge, wozu auch [[Java (Programmiersprache)|Java]] gehört. Trotz der Namens- und syntaktischen Ähnlichkeit hat JavaScript nur geringe Gemeinsamkeiten mit Java, beispielsweise wird Vererbung in JavaScript anders als in Java nicht durch [[Klasse (Programmierung)|Klassen]], sondern durch [[Prototypenbasierte Programmierung|Prototypen]] unterstützt.<br /> <br /> JavaScript wurde früher hauptsächlich [[client]]seitig eingesetzt. JavaScript bzw. die ECMAScript-Implementierungen finden jedoch beispielsweise auf [[Node.js|Node]]-Servern und als [[JScript]] bzw. [[JScript.NET]] in einer [[Active Server Pages|ASP]]- bzw. [[ASP.NET]]-Umgebung auf [[Microsoft Internet Information Services]] auch serverseitig Anwendung. Weitere Beispiele für serverseitige Javascript-Programmierung sind POW und Jaxer, die auf der Mozilla-Javascript-Engine Spidermonkey aufsetzen, sowie V8CGI, welches auf der JavaScript-Implementierung [[V8 (JavaScript-Implementierung)|V8]] aufbaut und in den [[Apache HTTP Server]] integriert wird.<br /> <br /> Die Sprache wird auch als Skriptsprache für Spiele und [[Anwendungsprogramm]]e eingesetzt, da der Sprachkern nur wenige Objekte enthält und dadurch der zur Ausführung von in JavaScript formulierten Skripten erforderliche [[Interpreter]] relativ klein gehalten werden kann.<br /> <br /> Außerdem wird JavaScript als Verkehrssprache in der Datenbank [[MongoDB]] sowie in Microcontrollern&lt;ref name=&quot;espruino&quot; /&gt;&lt;ref name=&quot;tessel&quot; /&gt; eingesetzt.<br /> <br /> == Verwendung ==<br /> === Typische Anwendungsgebiete ===<br /> Typische Anwendungsgebiete von JavaScript im Webbrowser sind:<br /> * dynamische Manipulation von Webseiten über das [[Document Object Model]]<br /> * Plausibilitätsprüfung ([[Datenvalidierung]]) von Formulareingaben noch vor der Übertragung zum Server<br /> * Anzeige von Dialogfenstern<br /> * Senden und Empfangen von Daten, ohne dass der Browser die Seite neu laden muss ([[Ajax (Programmierung)|Ajax]])<br /> * Vorschlagen von Suchbegriffen während der Eingabe<br /> * [[Werbebanner]] oder Laufschriften<br /> * [[Verschleierung]] von [[E-Mail-Adresse]]n zur Bekämpfung von [[Spam#Verschleierung der E-Mail-Adresse|Spam]]<br /> * mehrere [[Frame (HTML)|Frames]] auf einmal wechseln oder die Seite aus dem Frameset lösen<br /> * Schreib- und Lesezugriff auf [[Cookie]]s und den [[Web Storage]] innerhalb des Browsers<br /> <br /> === Missbrauch ===<br /> Einige Anwendungen, die mit JavaScript möglich sind, agieren teilweise gegen den Wunsch des Benutzers oder widersprechen dem [[Principle of Least Surprise|Prinzip der geringsten Verwunderung]]. Einige Browser bieten daher Funktionen an, die derartige JavaScript-Funktionen unterdrücken.<br /> <br /> Beispiele:<br /> [[Datei:Js-alert-warnung.png|mini|Hinweis im Firefox-Browser bei vielen Dialogfenstern]]<br /> <br /> * Verschleiern von Internetadressen, auf die ein [[Hyperlink|Link]] verweist<br /> * Deaktivieren des [[Kontextmenü]]s, um zu erschweren, dass Bilder oder die gesamte Seite abgespeichert werden können<br /> * Deaktivieren der [[Zwischenablage|Kopierfunktion]], um zu erschweren, dass Texte oder Bilder kopiert werden können<br /> * Unaufgeforderte (Werbe-)[[Pop-up]]s oder [[Pop-under]]s oder aufeinanderfolgende [[Dialogfenster]], die den Benutzer behindern<br /> * Ungewolltes Schließen des Browserfensters<br /> * Ungewollte Größenänderung des Browserfensters<br /> * Barrierearme Webseiten zeichnen sich dadurch aus, dass sie auch bei abgeschaltetem JavaScript möglichst uneingeschränkt nutzbar bleiben. Teilweise schränkt das deaktivierte JavaScript die Benutzbarkeit einer Webseite ein.<br /> * Maßnahmen, die an den Sicherheitseinstellungen des Browsers vorbei ein Wiedererkennen eines Benutzers bei einem späteren Besuch einer Website erlauben (siehe [[Anonymität im Internet#Browser-Profil|Anonymität im Internet]])<br /> * Bei anfälligen Webanwendungen kann JavaScript auch von Dritten missbraucht werden, etwa per [[Cross-Site-Scripting|XSS]] (Codeeinschleusung).<br /> <br /> == Geschichte ==<br /> Am 18. September 1995 veröffentlichte [[Netscape Communications|Netscape]] mit der Vorversion des [[Netscape Navigator|Navigator]] 2.0 einen Browser mit einer eingebetteten Skriptsprache, die zu diesem Zeitpunkt ''LiveScript'' hieß und von [[Brendan Eich]] entwickelt worden war. Die Sprache konnte u.&amp;nbsp;a. Formulareingaben des Benutzers vor dem Absenden überprüfen. Am 4.&amp;nbsp;Dezember 1995 verkündeten Netscape und [[Sun Microsystems]] eine Kooperation, die die Interaktion von LiveScript direkt mit Java-Applets zum Ziel hatte. Sun entwickelte die nötigen Java-Klassen, Netscape die Schnittstelle [[LiveConnect]] und benannte die Sprache in ''JavaScript'' um (JavaScript 1.0).&lt;ref&gt;Brendan Eich: [http://web.archive.org/web/20070528020012/http://www.mozilla.org/js/language/ICFP-Keynote.ppt ''JavaScript at Ten Years''] ([[Microsoft PowerPoint|MS PowerPoint]]; 576&amp;nbsp;kB), 2005, im [[Internet Archive]].&lt;/ref&gt; ''JavaScript'' ist seit der Übernahme von [[Sun Microsystems]] eine [[Marke (Recht)|Marke]] des Unternehmens [[Oracle]].&lt;ref&gt;{{Internetquelle|titel=Markeneintrag #75026640 beim USPTO für JavaScript|url=http://tarr.uspto.gov/servlet/tarr?regser=serial&amp;entry=75026640|hrsg=[[United States Patent and Trademark Office]]|sprache=en|zugriff=2012-10-24}}&lt;/ref&gt;<br /> <br /> Mit der ersten [[Beta-Version]] des Navigator 3.0 führte Netscape am 29.&amp;nbsp;April 1996 JavaScript 1.1 ein. In selbiger Version gab es die Neuerungen, auf Bilder zugreifen und so genannte ''Rollover-Grafiken'' erstellen zu können. [[LiveConnect]] war jetzt fester Bestandteil des Browsers. Mit der Beta-Version des [[Internet Explorer]] 3 stellte Microsoft im Mai 1996 seinen ersten JScript-fähigen Browser vor. Dies war der Beginn des [[Browserkrieg]]s.<br /> <br /> Mit der Ankündigung des [[Netscape Communicator]]s wurde JavaScript 1.2 am 15. Oktober 1996 veröffentlicht, der Netscape Communicator 4.0 mit JavaScript 1.2 erschien jedoch erst am 4. Juni 1997. Ebenfalls im Juni 1997 veröffentlichte die European Computer Manufacturers Association ihren Standard ECMA-262 (''ECMAScript''), der zusammen mit Netscape entwickelt worden war und die Grundelemente einer Skriptsprache standardisieren sollte. Diese wurde im April 1998 zur ISO-Norm ''ISO/IEC 16262:1998 Information technology&amp;nbsp;– ECMAScript language specification''. Am 1.&amp;nbsp;Oktober 1997 kam der Internet Explorer 4 heraus, der den Sprachumfang von JavaScript 1.1 abdeckte. Darüber hinaus wurden eigene Erweiterungen veröffentlicht, die zu Kompatibilitätsunterschieden zwischen Navigator und Internet Explorer führten und eine DOM-ähnliche Syntax zur Verfügung stellten, die es ermöglichte, auf alle Elemente der Webseite zugreifen und diese beliebig verändern zu können.<br /> <br /> Der in Java implementierte JavaScript-Interpreter [[Rhino (Programmierung)|Rhino]] wurde ab Version 6.0 als Teil der [[Java-Laufzeitumgebung]] standardmäßig mitgeliefert.&lt;ref&gt;{{Internetquelle|url=http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/index.html|titel=Scripting for the Java Platform|sprache=en|hrsg=[[Oracle]]|werk=Java SE Documentation|zugriff=2012-10-24}}&lt;/ref&gt; Im Juli 1998 wurde mit der Beta-Version des Netscape Communicators 4.5 JavaScript 1.3, welche schon in der Version 4.06 des Netscape Communicators vorhanden war, veröffentlicht. Im Oktober 1998 stellte Netscape JavaScript 1.4 vor. Diese Version war vollständig kompatibel mit ECMA-262. Ein Browser mit der Unterstützung dieser Version erschien jedoch nicht. Im April 2000 kam mit der Preview Release 1 des Navigator 6 JavaScript 1.5 und DOM Level 1. Am 5. Juni 2002 erschien Mozilla 1.0 mit JavaScript 1.5 (JavaScript in der Version 1.5 entspricht ECMA-262 Version 3), am 29. November 2005 [[Mozilla Firefox]] 1.5 mit JavaScript 1.6, am 12. Juli 2006 Mozilla Firefox 2.0b1 mit JavaScript 1.7 und am 18. Dezember 2007 Mozilla Firefox 3.0b2 mit JavaScript 1.8.<br /> <br /> === Versionsgeschichte von JavaScript ===<br /> {| class=&quot;wikitable&quot;<br /> |+Versionsgeschichte nach John Resig&lt;ref&gt;{{cite web|author=John Resig |url=http://ejohn.org/blog/versions-of-javascript |title=Versions of JavaScript |publisher=Ejohn.org |date= |accessdate=2009-05-19}}&lt;/ref&gt;<br /> |-<br /> ! Version !! Veröffentlichung !! Entsprechung !! Netscape Navigator !! Mozilla Firefox !! Internet Explorer !! Opera !! Safari !! Google Chrome<br /> |-<br /> | {{Version |o |1.0.0}} || März 1996 || || 2.0 || || 3.0 || || ||<br /> |-<br /> | {{Version |o |1.1.0}} || August 1996 || || 3.0 || || || || ||<br /> |-<br /> | {{Version |o |1.2.0}} || Juni 1997 || || 4.0-4.05 || || || || ||<br /> |-<br /> | {{Version |o |1.3.0}} || Oktober 1998 || ECMA-262 1&lt;sup&gt;st&lt;/sup&gt; edition / ECMA-262 2&lt;sup&gt;nd&lt;/sup&gt; edition || 4.06-4.7x || || 4.0 || || ||<br /> |-<br /> | {{Version |o |1.4.0}} || || || Netscape Server || || || || ||<br /> |-<br /> | {{Version |o |1.5.0}} || November 2000 || ECMA-262 3&lt;sup&gt;rd&lt;/sup&gt; edition || 6.0 || 1.0<br /> |<br /> * 5.5 (JScript 5.5)<br /> * 6 (JScript 5.6)<br /> * 7 (JScript 5.7)<br /> * 8 (JScript 6)<br /> |<br /> * 6.0<br /> * 7.0<br /> * 8.0<br /> * 9.0<br /> | ||<br /> |-<br /> | {{Version |o |1.6.0}} || November 2005 || 1.5 + Array extras + Array &amp; String generics + E4X || || 1.5 || ||<br /> |<br /> * 3.0<br /> * 3.1<br /> |<br /> |-<br /> | {{Version |o |1.7.0}} || Oktober 2006 || 1.6 + Pythonic generators + Iterators + let + destructuring assignments || || 2.0 || ||<br /> |<br /> * 3.2<br /> * 4.0<br /> | 1.0<br /> |-<br /> | {{Version |o |1.8.0}} || Juni 2008 || 1.7 + Generator expressions + Expression closures || || 3.0 || || || ||<br /> |-<br /> | {{Version |o |1.8.1}} || || 1.8 + geringfügige Updates || || 3.5 || || || ||<br /> |-<br /> | {{Version |c |1.8.5}} || || 1.8.1 + ECMAScript 5 Compliance || || 4 || 9.0 (JScript 9.0) || || ||<br /> |}<br /> <br /> === Versionsgeschichte von ECMAScript (ECMA-262) ===<br /> Die aktuelle Version ist die Version 5. Derzeit wird an der Version 6 mit dem Codename &quot;Harmony&quot; gearbeitet.&lt;ref name=&quot;Zakas&quot;&gt;{{cite book<br /> |title= Professional JavaScript for Web Developers<br /> |last= Zakas<br /> |first= Nicholas C.<br /> |year= 2011<br /> |publisher= John Wiley &amp; Sons<br /> |isbn= 978-1-118-23309-2<br /> |url= http://books.google.com/books?id=C3kabcBG0ZsC&amp;pg=PT770&amp;dq=ecma-262+harmony&amp;hl=en&amp;sa=X&amp;ei=5pLlUJbFJsfQqAHC3IHQBw&amp;ved=0CDEQ6AEwAA}}&lt;/ref&gt;&lt;ref&gt;[http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts ''Draft Specification for ES.next (Ecma-262 Edition 6)'']&lt;/ref&gt;<br /> <br /> {| class=&quot;wikitable&quot;<br /> |- style=&quot;background:#ccf;&quot;<br /> ! Version<br /> ! publiziert am<br /> ! Unterschiede zur Vorgängerversion<br /> ! Editor<br /> |-<br /> | 1<br /> | Juni 1997<br /> | erste Version<br /> | [[Guy L. Steele, Jr.]]<br /> |-<br /> | 2<br /> | Juni 1998<br /> | Änderungen zwecks Kompatibilität zum internationalen Standard ISO/IEC 16262<br /> | [[Mike Cowlishaw]]<br /> |-<br /> | 3<br /> | Dezember 1999<br /> | Neu sind [[reguläre Ausdrücke]], bessere Verarbeitung von Zeichenketten, Kontrollfluss, Fehlerbehandlung mit try/catch, bessere Fehlerbehandlung, bessere Formatierung bei der Ausgabe von Zahlen usw.<br /> | Mike Cowlishaw<br /> |-<br /> | 4<br /> | abgebrochen<br /> | Wegen Uneinigkeit in Bezug auf die Zukunft der Sprache wurde die weitere Entwicklung des komplexen Entwurfes zu ECMAScript 4 eingestellt. Einige Ideen werden in ES6 wieder aufleben.<br /> |<br /> |-<br /> | 5<br /> | Dezember 2009<br /> | Im &quot;strict mode&quot; wird eine erweiterte Fehlerprüfung eingeschaltet. Unklare Sprachkonstrukte von ECMAScript 3 werden entschärft und neue Features wie getter- und setter-Methoden, Unterstützung von [[JSON]] usw. hinzugefügt.&lt;ref&gt;[http://www.youtube.com/watch?v=Kq4FpMe6cRs Changes to JavaScript, Part 1: EcmaScript 5]&lt;/ref&gt;<br /> | [[Pratap Lakshman]], [[Allen Wirfs-Brock]]<br /> |-<br /> | 5.1<br /> | Juni 2011<br /> | Entspricht dem internationalen Standard ISO/IEC 16262:2011, Version 3<br /> | Pratap Lakshman, Allen Wirfs-Brock<br /> |-<br /> | 6<br /> | in Arbeit<br /> | Neue Syntax für komplexe Applikationen wie Klassen und Module, die aber mit ähnlicher Terminologie wie in ECMAScript 5 (strict mode) definiert werden können. Neue Sprachbestandteile wie &lt;code&gt;for&lt;/code&gt;/&lt;code&gt;of&lt;/code&gt;-Schleifen, teilweise an [[Python (Programmiersprache)|Python]] angelehnte Syntax usw. Der Codename lautet “ECMAScript Harmony” oder “ES6 Harmony”.<br /> | Allen Wirfs-Brock<br /> |-<br /> | 7<br /> | in Arbeit<br /> | Weiterführung der mit ES6 begonnenen Änderungen.&lt;ref&gt;[http://wiki.ecmascript.org/doku.php?id=strawman:strawman ES Wiki strawman:strawman]&lt;/ref&gt;<br /> |<br /> |}<br /> <br /> == Sicherheit ==<br /> === Sandbox-Prinzip ===<br /> JavaScript wird im Browser in einer so genannten [[Sandbox]] ausgeführt. Dies bewirkt, dass man in JavaScript im Allgemeinen nur Zugriff auf die Objekte des Browsers hat und somit nicht auf das [[Dateisystem]] zugreifen und dadurch keine [[Datei]]en lesen oder schreiben kann. Eine Ausnahme stellt der Lesezugriff auf eine Datei dar, die mittels eines mit dem HTML-Element &lt;code&gt;&lt;input type=&quot;file&quot;&gt;&lt;/code&gt; gestarteten Dateiauswahl-Dialogs vom Benutzer ausgewählt wurde. Ebenfalls kann diese Beschränkung in [[JScript]] bei entsprechenden Sicherheitseinstellungen durch die Nutzung von [[ActiveX]] umgangen werden.<br /> <br /> Um Sicherheitsprobleme, wie das so genannte [[Cross-Site-Scripting]] zu verhindern, wird jede [[Website]] oder [[Webanwendung]] innerhalb des Browsers isoliert ausgeführt und ein Datenaustausch unterbunden. Ohne diesen Schutz wäre es möglich, über eine Seite [[Schadcode]] auszuführen, der beispielsweise Bank- oder Logindaten in anderen parallel geöffneten Browserfenstern ausliest oder manipuliert.<br /> <br /> Auch bestimmte sicherheitsrelevante Browserfunktionen, wie das Schließen des Browserfensters, das Aus- und Einblenden von [[Symbolleiste]]n, das Ändern der Browserstartseite, der Zugriff auf die [[Zwischenablage]] oder das Auslesen der zuletzt besuchten Webseiten des Anwenders, werden durch obligatorische Nutzereingaben geschützt.<br /> <br /> Standardmäßig wird ein Skript innerhalb eines Browsers in Form eines einzigen [[Thread (Informatik)|Threads]] ausgeführt. Warteschleifen oder lange Berechnungen sind daher in JavaScript-Programmen zu vermeiden. Mit &lt;code&gt;Worker&lt;/code&gt;-Objekten ist es möglich, weitere Threads zu erzeugen.&lt;ref&gt;[http://www.w3.org/TR/workers/ Spezifikation von Web Workers durch das W3C (World Wide Web Consortium)]&lt;/ref&gt;<br /> <br /> === Deaktivieren von JavaScript ===<br /> <br /> In vielen JavaScript-fähigen Browsern lässt sich JavaScript abschalten oder lassen sich einzelne Aktionen, wie die Änderung des Textes in der [[Statusleiste]] oder die Manipulation von Browserfenstern, deaktivieren. Dies kann bei einigen Browsern mittels Erweiterungen, die JavaScript anhand von [[Weiße Liste|White-]] und [[Schwarze Liste|Blacklist]]s gezielt auf Seiten ein- und ausschalten, auch automatisiert werden.<br /> <br /> == Sprachelemente ==<br /> === Datentypen ===<br /> Der [[Datentyp]] eines Wertes lässt sich mit dem Operator &lt;code&gt;typeof&lt;/code&gt; ermitteln.<br /> <br /> Zeichenketten haben den Typ ''String'' (&lt;code&gt;typeof&lt;/code&gt; liefert &lt;code&gt;&quot;string&quot;&lt;/code&gt;), numerische Werte den Typ ''Number'' (&lt;code&gt;typeof&lt;/code&gt; liefert &lt;code&gt;&quot;number&quot;&lt;/code&gt;), boolesche Werte den Typ ''Boolean'' (&lt;code&gt;typeof&lt;/code&gt; liefert &lt;code&gt;&quot;boolean&quot;&lt;/code&gt;). Funktionen sind kein primitiver Typ; &lt;code&gt;typeof&lt;/code&gt; liefert &lt;code&gt;&quot;function&quot;&lt;/code&gt;. Ein Sonderfall ist der Typ ''Undefined'' mit &lt;code&gt;undefined&lt;/code&gt; als einzigem Wert. Für alle anderen Werte –&amp;nbsp;reguläre Ausdrücke, Arrays und den Wert &lt;code&gt;null&lt;/code&gt; inbegriffen&amp;nbsp;– liefert &lt;code&gt;typeof&lt;/code&gt; den Zeichenketten-Wert &lt;code&gt;&quot;object&quot;&lt;/code&gt; zurück. Im Gegensatz zu anderen Programmiersprachen gibt es in JavaScript keine echten [[Assoziatives Array|assoziativen Arrays]].&lt;ref&gt;[http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays Assoziative Arrays], abgerufen am 19. April 2013&lt;/ref&gt;<br /> <br /> Mit den vordefinierten Konstruktorfunktionen &lt;code&gt;String()&lt;/code&gt;, &lt;code&gt;Number()&lt;/code&gt; und &lt;code&gt;Boolean()&lt;/code&gt; erzeugte Objekte verhalten sich wie Werte der entsprechenden Datentypen – der &lt;code&gt;typeof&lt;/code&gt;-Operator gibt jedoch &lt;code&gt;&quot;object&quot;&lt;/code&gt; zurück:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var variable = &quot;Beispieltext&quot;;<br /> alert(typeof variable); // ergibt &quot;string&quot; (die Funktion &quot;alert&quot; gibt den ihr übergebenen Parameter in einem Fenster aus)<br /> <br /> variable = new String(&quot;Beispieltext&quot;);<br /> alert(typeof variable); // ergibt &quot;object&quot;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Umgekehrt werden Werte der primitiven Typen ''Number'', ''Boolean'' und ''String'' bei Bedarf automatisch in Objekte der entsprechenden Konstruktorfunktion umgewandelt:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var variable = &quot;Beispieltext&quot;;<br /> alert(variable.length); // ergibt 12<br /> &lt;/syntaxhighlight&gt;<br /> <br /> JavaScript ist [[Dynamische Typisierung|dynamisch typisiert]], das heißt die Zuweisung von Werten an Variablen unterliegt keinen typbasierten Einschränkungen. Es gibt diverse Erweiterungen von JavaScript, welche eine statische Typisierung auf Wunsch ermöglichen beziehungsweise zwingend erfordern, zum Beispiel [[TypeScript]] von [[Microsoft]].&lt;ref&gt;{{Internetquelle | url = http://t3n.de/news/typescript-microsofts-neue-418900/ | titel = TypeScript: Microsoft’s neue JavaScript Erweiterung | werk = [[T3N Magazin|t3n Magazin]] | autor = Ilja Zaglov | datum = 2012-10-10 | zugriff = 2012-10-10}}&lt;/ref&gt;<br /> <br /> === Kontrollstrukturen ===<br /> JavaScript kennt die üblichen [[Kontrollstruktur]]en. Sollen diese mehr als eine [[Anweisung (Programmierung)|Anweisung]] enthalten, so muss ein in [[geschweifte Klammer]]n eingeschlossener [[Blockstruktur|Block]] eingesetzt werden. Anweisungen werden mit einem Semikolon abgeschlossen, dies ist aber in den meisten Fällen optional, durch die ''[[automatic semicolon insertion]]'' wird es meist automatisch ergänzt.<br /> <br /> ==== if-else (Bedingte Anweisung) ====<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> if (bedingung) {<br /> anweisungen;<br /> } else {<br /> anweisungen;<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== switch-Kontrollstruktur ====<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> switch (variable) {<br /> case wert1 :<br /> anweisungen;<br /> break;<br /> case wert2 :<br /> anweisungen;<br /> break;<br /> default :<br /> anweisungen;<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== [[while-Schleife]] ====<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> while (bedingung) {<br /> anweisungen;<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== [[do-while-Schleife]] ====<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> do {<br /> anweisungen;<br /> } while (bedingung);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== [[for-Schleife]] ====<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> for (startausdruck; bedingung; iterationsausdruck) {<br /> anweisungen;<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== for … in-Schleife ====<br /> Mit dieser Anweisung werden alle eigenen und ererbten Eigenschaften eines Objektes durchlaufen, die das interne Attribut Enumerable aufweisen.&lt;ref&gt;[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in for…in] MDN&lt;/ref&gt; Dieses Attribut wurde in ECMA Script&amp;nbsp;5 eingeführt und ist für bestimmte eingebaute Eigenschaften (wie z.&amp;nbsp;B. die Funktion toString des Prototyps Object) nicht gesetzt, es kann allerdings im Regelfall vom Benutzer gesetzt (und entfernt) werden.&lt;ref&gt;[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Enumerable_attribute Object.defineProperty()] MDN&lt;/ref&gt; Bei jedem Schleifendurchgang wird einer angegebenen Variable der Eigenschaftsname zugewiesen.<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> for (var eigenschaftsname in objekt) {<br /> anweisungen;<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Variablen ===<br /> Variablen sollten in JavaScript mit &lt;code&gt;var&lt;/code&gt; deklariert werden und sind dann innerhalb des [[Variable (Programmierung)#Sichtbarkeitsbereich von Variablen (Scope)|Scopes]] gültig, in dem sie deklariert wurden. Verwendet man Variablen ohne sie vorher explizit zu deklarieren, werden diese implizit als Eigenschaften des globalen Objekts (im Browser &lt;code&gt;window&lt;/code&gt;) deklariert; dieses Verhalten kann man durch die Anweisung &lt;code&gt;&quot;use strict&quot;;&lt;/code&gt; unterbinden. Eine Besonderheit von JavaScript ist das [[Hoisting]] von Variablen, das dafür sorgt, dass sämtlich in einem Codeabschnitt deklarierten Variablen und Funktionen bei der Abarbeitung automatisch direkt am Anfang ausgeführt werden.<br /> <br /> ==== Geltungsbereich von Variablen ====<br /> Innerhalb von Funktionen oder als Funktionsparameter deklarierte Variablen haben eine lokale Gültigkeit; außerhalb von Funktionen deklarierte Variablen sind global gültig. ''Global'' bedeutet bei JavaScript in Browsern, dass derart deklarierte Variablen auf der ganzen Webseite und bei allen aktiven JavaScripts gültig sind. Da dies zu ungewollten Seiteneffekten mit anderen in der Seite eingebunden Scripts (wie Drittanbieter-Plugins, [[Web Analytics]] oder Werbebannern) führen kann, sollten globale Variablen so weit wie möglich vermieden werden.<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var a,b; // explizite Deklaration einer globalen Variable<br /> a = 1; // Definition einer Variable<br /> document.write(a); // ergibt 1<br /> <br /> c = 2; // implizite Deklaration ohne var - es entsteht keine Variable, sondern ...<br /> document.write(c); // ergibt 2<br /> document.write(window.c); // ... dem globalen Objekt (Window) wurde eine Eigenschaft zugewiesen<br /> document.write(window.a); // Fehler<br /> <br /> function foo(e) { // saubere Deklaration eines Funktionsparameters<br /> var f,g = 5; // saubere Deklaration und Definition einer lokalen Variablen<br /> document.write(a); // globale Variablen sind überall gültig<br /> document.write(c); // Eigenschaften des globalen Objektes auch<br /> document.write(e); // Funktionsparameter haben denselben Gültigkeitsbereich wie lokale Variablen<br /> h = 7; // das implizit deklarierte h ist eine globale Variable<br /> }<br /> foo(a);<br /> <br /> document.write(e); // Fehler, da der Funktionsparameter e nur innerhalb der Funktion gültig ist<br /> document.write(f); // Fehler, da die Variable f nur innerhalb der Funktion gültig ist<br /> <br /> document.write(h); // ergibt 7 - (s.o.)<br /> document.write(window.h); // ergibt 7 - die globale Variable ist eine Eigenschaft von window<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Funktionen ===<br /> [[Funktion (Programmierung)|Funktionen]] sind in JavaScript vollwertige Objekte. Sie haben Methoden und Eigenschaften, können erstellt und überschrieben, als Argumente an Funktionen übergeben und von ihnen erzeugt und zurückgegeben werden.<br /> <br /> Im letzteren Fall entsteht eine [[Closure]] (auch Funktionsabschluss genannt), mit der beispielsweise [[Datenkapselung (Programmierung)|Datenkapselung]] umgesetzt werden kann:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var temp = function () {<br /> var geheimnis = 42;<br /> return function () {<br /> return geheimnis;<br /> };<br /> }<br /> var geheimnisträger = temp(); //geheimnisträger ist die von temp() zurückgegebene Funktion<br /> alert(typeof geheimnis ); // undefined<br /> alert(geheimnisträger()); // 42<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Nicht jedes Argument einer Funktion muss beim Aufruf angegeben werden; für fehlende Argumente wird der Wert ''undefined'' gesetzt. Außerdem kann innerhalb der Funktion auch über das &lt;!-- Array-ähnliche, arguments ist kein Array! --&gt; &lt;code&gt;arguments&lt;/code&gt;-Objekt auf die Argumente zugegriffen werden.<br /> <br /> ==== Erzeugung ====<br /> Es gibt mehrere Möglichkeiten, in JavaScript Funktionen zu erzeugen:&lt;ref&gt;siehe auch: [http://kangax.github.com/nfe/ Named function expressions demystified]&lt;/ref&gt;<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> // 1: Funktionsdeklaration, a ist eine Funktion mit dem Namen a.<br /> function a (Parameter1, Parameter2, Parameter3) {<br /> anweisungen;<br /> return ausdruck;<br /> }<br /> <br /> // 2: Funktionsausdruck ('function expression')<br /> // 2.1: Normalfall, b ist eine anonyme Funktion<br /> var b = function (...) {...}<br /> <br /> // 2.2: benannter Funktionsausdruck ('named function expression')<br /> // c ist hier eine Funktion mit dem Namen d. Außerhalb der<br /> // Funktion ist sie mit c ansprechbar, innerhalb mit c und d.<br /> var c = function d (...) {...}<br /> <br /> // 3: Function-Konstruktor<br /> var e = new Function('arg1', 'arg2', 'return arg1 + arg2');<br /> <br /> // 4: 'expression closure' aus JavaScript 1.8, ähnlich dem Lambda-Kalkül<br /> // kommt ohne geschweifte Klammern und return aus, gibt das Ergebnis von Ausdruck zurück<br /> function f (...) ausdruck;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Eine [[Funktionale Programmierung|funktionale]] Implementierung des [[Euklidischer Algorithmus#Rekursive Variante|Euklidischen Algorithmus]] in der rekursiven Variante sähe so aus:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> // einfache Version<br /> function euklid (a, b) {<br /> return b ? euklid(b, a%b) : a<br /> }<br /> <br /> // Version, die beliebig viele Argumente annimmt,<br /> // rekursiv, funktional<br /> // Zeigt die Rückgabe von Funktionen, hier etwas künstlich und komplizierter als nötig<br /> // Ablauf:<br /> // (1) Erzeuge ein Array aus den Argumenten von ggT<br /> // (2) Wenn ggT kein zweites Argument hat, gib eine Funktion zurück, welche <br /> // das erste Argument zurückgibt bzw. 0 wenn dieses nicht definiert ist <br /> // (3) sonst gib eine Funktion zurück, welche euklid aufruft mit dem ersten Argument <br /> // (4) und dem Ergebnis des Ergebnisses von ggT mit den Argumenten 2 bis n<br /> function ggT () {<br /> return (function (args) {<br /> return !args[1]<br /> ? function () { return args[0] || 0 } // (2)<br /> : function () { return euklid( // (3)<br /> args[0],<br /> ggT.apply(null, args.slice(1))() // (4)<br /> )}<br /> })(Array.prototype.slice.apply(arguments)) // (1)<br /> }<br /> <br /> ggT(4,6); // ergibt eine Funktion, die 2 zurückgibt<br /> // die zurückgegebene Funktion kann auch direkt ausgeführt werden:<br /> ggT()(); // 0<br /> ggT(4)(); // 4<br /> ggT(4,6,8,102,244)(); // 2<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Objekte ===<br /> Objekte in JavaScript bestehen aus Eigenschaften, die als Name/Wert-Paar realisiert werden. Dabei wird nicht zwischen Attributen und Methoden des Objektes unterschieden (eine Eigenschaft, deren Wert den Typ ''Function'' besitzt, fungiert als Methode). Jedes Objekt – auch durch Literale erzeugte Objekte – erbt vom Prototyp des globalen Object-Konstruktors.<br /> <br /> ==== Vordefinierte Objekte ====<br /> JavaScript kennt mehrere eingebaute Objekte, die von ECMAScript definiert werden.<br /> <br /> * Das namenlose globale Objekt, das alle Variablen und Objekte enthält.<br /> * &lt;code&gt;Object&lt;/code&gt; als allgemeiner Prototyp, von dem alle Objekte abgeleitet sind.<br /> * &lt;code&gt;Function&lt;/code&gt; als Prototyp für [[Funktion (Programmierung)|Funktionen]].<br /> * &lt;code&gt;Array&lt;/code&gt; als Prototyp für [[Feld (Datentyp)|Arrays]].<br /> * &lt;code&gt;String&lt;/code&gt; als Prototyp für [[Zeichenkette]]n.<br /> * &lt;code&gt;Boolean&lt;/code&gt; als Prototyp für [[boolesche Variable]]n.<br /> * &lt;code&gt;Number&lt;/code&gt; als Prototyp für [[Zahl]]en (64-Bit-[[Gleitkommazahl]]en gemäß [[IEEE 754]]).<br /> * &lt;code&gt;Math&lt;/code&gt; stellt Konstanten und Methoden für [[Mathematik|mathematische]] Operationen bereit.<br /> * &lt;code&gt;Date&lt;/code&gt; für Operationen mit [[Kalender|Daten]] bzw. Zeitpunkten und [[Datumsformat]]en.<br /> * &lt;code&gt;RegExp&lt;/code&gt; für [[Regulärer Ausdruck|reguläre Ausdrücke]].<br /> * &lt;code&gt;JSON&lt;/code&gt; stellt zwei Methoden für die [[Serialisierung]] von Objekten ins [[JSON]]-Format und umgekehrt bereit.<br /> <br /> Abgesehen vom globalen Objekt sowie den beiden Objekten &lt;code&gt;Math&lt;/code&gt; und &lt;code&gt;JSON&lt;/code&gt; sind die vorstehend angeführten Objekte zu gleich [[Konstruktor]]&amp;shy;funktionen, die zur Erzeugung weiterer Objekte des entsprechenden Typs verwendet werden.<br /> <br /> Die restlichen Objekte, die beim clientseitigen JavaScript verwendet werden, entstanden historisch vor allem durch die [[Netscape Communications|Netscape]]-Spezifikationen (&lt;code&gt;window&lt;/code&gt;, &lt;code&gt;document&lt;/code&gt; usw.). Das &lt;code&gt;window&lt;/code&gt;-Objekt selbst ist dabei de facto das globale Objekt, indem einfach einer Variablen &lt;code&gt;window&lt;/code&gt; das globale Objekt zugewiesen wurde. Zahlreiche Unterobjekte von &lt;code&gt;document&lt;/code&gt; wurden mittlerweile durch [[Document Object Model|DOM]] HTML standardisiert (&lt;code&gt;title&lt;/code&gt;, &lt;code&gt;images&lt;/code&gt;, &lt;code&gt;links&lt;/code&gt;, &lt;code&gt;forms&lt;/code&gt; usw.). Aktuelle Browser unterstützen zudem DOM Core und andere [[World Wide Web Consortium|W3C]]-DOM-Standards sowie Erweiterungen von Microsoft [[JScript]].<br /> <br /> ==== Zugriff auf Objekteigenschaften und -methoden ====<br /> [[Eigenschaft]]en von Objekten (auch [[Methode (Programmierung)|Methoden]] sind Eigenschaften) können wie folgt angesprochen werden:<br /> <br /> ; Punkt-Notation (mit statischen [[Bezeichner]]n)<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> objekt.eigenschaft;<br /> <br /> objekt.methode(parameter1, parameter2);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ; Klammer-Notation (mit dynamischen [[Bezeichner]]n)<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> objekt[&quot;eigenschaft&quot;];<br /> <br /> objekt[&quot;methode&quot;](parameter1, parameter2);<br /> <br /> // Eigenschaftsname, der in Punkt-Notation illegal wäre:<br /> objekt[&quot;methode 1&quot;]();<br /> <br /> // Auf diese Weise können auch alle Eigenschaften des Objekts durchlaufen werden:<br /> for (var eigenschaftsName in objekt) {<br /> console.log(eigenschaftsName,' = ',objekt[eigenschaftsName]);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Zu allen Objekten können zur [[Laufzeit (Informatik)|Laufzeit]] neue Eigenschaften hinzugefügt oder mit dem &lt;code&gt;delete&lt;/code&gt; bestehende entfernt werden:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> // Statisch bzw. dynamisch benannte Eigenschaften hinzufügen:<br /> objekt.eigenschaftA = &quot;ein Wert&quot;;<br /> objekt[&quot;eigenschaftB&quot;] = &quot;ein anderer Wert&quot;;<br /> <br /> // Statisch bzw. dynamisch benannte Eigenschaften entfernen:<br /> delete objekt.eigenschaftA;<br /> delete objekt[&quot;eigenschaftB&quot;];<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== Objektliterale ====<br /> Objekte können in JavaScript direkt anhand ihrer Eigenschaften definiert werden:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> <br /> var meinObjekt = {<br /> zahl: 42,<br /> gibZahl: function () {<br /> return this.zahl;<br /> }<br /> };<br /> alert(meinObjekt.gibZahl()); // 42<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Eine spezielle Notation gibt es für reguläre Ausdrücke:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> <br /> // mit Konstruktorfunktion<br /> (new RegExp(&quot;a&quot;)).test(&quot;ab&quot;); // true<br /> <br /> // als Literal<br /> /a/.test(&quot;ab&quot;); // true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== Konstruktor-Funktionen ====<br /> Eine Funktion kann dazu genutzt werden, um ein mit &lt;code&gt;new&lt;/code&gt; erstelltes Objekt zu initialisieren. In diesem Fall spricht man von einem [[Konstruktor]] oder einer Konstruktor-Funktion. Innerhalb dieser Funktion kann das neue Objekt über die Variable &lt;code&gt;this&lt;/code&gt; angesprochen werden.<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> function MeinObjekt(x) { // Konstruktor<br /> this.zahl = x;<br /> }<br /> var objekt = new MeinObjekt(3); // Instanz erzeugen<br /> alert(objekt.zahl); // per Meldefenster ausgeben (3)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== „Private“ Eigenschaften ====<br /> Private Eigenschaften und Methoden sind nicht explizit Teil der Sprache.<br /> <br /> Mit Hilfe von Closures (siehe [[#Funktionen|Funktionen]]) lassen sich dennoch private Eigenschaften von Objekten realisieren:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var neue_katze = function () {<br /> var lebensZahl = 7;<br /> var maunz = function () {<br /> return (lebensZahl &gt; 0) ? &quot;miau&quot; : &quot;örks&quot;;<br /> };<br /> <br /> // gibt neues objekt zurück<br /> return {<br /> toeten: function () {<br /> lebensZahl -= 1;<br /> alert(maunz());<br /> }<br /> };<br /> };<br /> var otto = neue_katze();<br /> otto.toeten(); // miau<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Lediglich die &lt;code&gt;toeten&lt;/code&gt;-Methode von &lt;code&gt;otto&lt;/code&gt; kennt die Variable &lt;code&gt;lebensZahl&lt;/code&gt;.<br /> Der Effekt gleicht dem einer privaten Eigenschaft, wenn alle Methoden der Katze in der erzeugenden Funktion &lt;code&gt;neue_katze&lt;/code&gt; definiert werden. &lt;code&gt;lebensZahl&lt;/code&gt; ist dann für alle Methoden (privilegierte Methoden, im Beispiel &lt;code&gt;toeten&lt;/code&gt;) und inneren Funktionen der erzeugenden Funktion (private Methoden, im Beispiel &lt;code&gt;maunz&lt;/code&gt;) sichtbar, nicht jedoch von außen oder von nachträglich an das Objekt gehängten Methoden.<br /> <br /> ==== Vererbung über Prototypen ====<br /> [[Vererbung (Programmierung)|Vererbung]] kann in JavaScript durch Prototypen realisiert werden.<br /> Dies erfordert, dass der prototype-Eigenschaft einer Konstruktor-Funktion ein als Prototyp dienendes Objekt zugewiesen wird.<br /> Wenn mit der Konstruktor-Funktion nun ein Objekt erzeugt wird, wird beim Zugriff auf eine nicht-existierende Eigenschaft des neuen Objekts die entsprechende Eigenschaft des Prototyps (wenn vorhanden) zurückgegeben.<br /> Beispiel:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var fisch = {<br /> augen: 2<br /> };<br /> <br /> var Mutantenfisch = function () {<br /> this.augen = 3;<br /> };<br /> Mutantenfisch.prototype = fisch;<br /> <br /> var blinky = new Mutantenfisch();<br /> <br /> alert(blinky.augen); // 3 - eigene Eigenschaft von blinky<br /> delete blinky.augen; // blinkys eigene Eigenschaft wird gelöscht<br /> alert(blinky.augen); // 2 - blinky hat die Eigenschaft selbst nicht mehr, es schimmert die Eigenschaft des Prototyps durch<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Um festzustellen, ob ein Objekt eine Eigenschaft selbst besitzt oder vom Prototyp geerbt hat, hat jedes Objekt (automatisch durch Vererbung von Object) die hasOwnProperty-Methode:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> blinky.hasOwnProperty('augen'); // false<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ==== Fixierung von Objektstruktur und −inhalten ====<br /> Die in JavaScript im Regelfall völlig dynamische Struktur eines Objekts &lt;code&gt;obj&lt;/code&gt; kann in verschiedener Hinsicht fixiert werden: Nach dem Methodenaufruf &lt;code&gt;Object.preventExtensions(obj)&lt;/code&gt; können keine weiteren Attribute und Methoden mehr ergänzt werden. &lt;code&gt;Object.seal(obj)&lt;/code&gt; verhindert sowohl die Erweiterung wie die Streichung von Attributen und Methoden. Der Aufruf &lt;code&gt;Object.freeze(obj)&lt;/code&gt; fixiert sowohl die Objektstruktur wie auch die Attributwerte inklusive der Methoden gegen nachfolgende Veränderungen. Die betreffenden Status eines Objekts &lt;code&gt;obj&lt;/code&gt;können mit &lt;code&gt;Object.isExtensible(obj)&lt;/code&gt;, &lt;code&gt;Object.isSealed(obj)&lt;/code&gt; und &lt;code&gt;Object.isFrozen(obj)&lt;/code&gt; ermittelt werden.<br /> <br /> Es ist auch möglich, nur ein einzelnes Attribut eines Objekts &lt;code&gt;obj&lt;/code&gt; zu fixieren. Beispielsweise wird mit dem Aufruf<br /> <br /> &lt;code&gt;Object.defineProperty(obj, &quot;vorname&quot;, {writable:false});&lt;/code&gt;<br /> <br /> das Attribut &lt;code&gt;obj.vorname&lt;/code&gt; schreibgeschützt.&lt;ref&gt;[http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3 Abschnitt ''Object Objects'' in ''Standard ECMA-262 5.1 Edition / June 2011 ECMAScript Language Specification'']&lt;/ref&gt;<br /> <br /> === Delegationsprinzipien ===<br /> JavaScript ist eine [[Delegation (Softwareentwicklung)|Delegationssprache]] mit sowohl selbstausführendem als auch direktem Delegationsmechanismus.<br /> <br /> ; Funktionsobjekte als Rollen (Traits und Mixins)<br /> : JavaScript unterstützt schon auf der Ebene des Sprachkerns verschiedene auf Funktionsobjekten aufbauende Implementierungen des Rollen&lt;ref&gt;''[[:en:Role-oriented programming|Role-oriented programming]]'' in der englischsprachigen Wikipedia&lt;/ref&gt;-Musters&lt;ref&gt;{{Internetquelle |url=http://peterseliger.blogspot.de/2014/06/die-vielen-talente-von-javascript.html#die-vielen-talente-von-javascript-rollen-orientierte-programmieransätze-wie-traits-und-mixins-verallgemeinern-zu-können |titel=Die vielen Talente von JavaScript: Rollen-orientierte Programmieransätze wie Traits und Mixins verallgemeinern &amp;#91;…&amp;#93; |autor=Peter Seliger |werk=Blogspot.de |sprache=de |datum=2014-06-05 |zugriff=2014-08-26}}&lt;/ref&gt; wie [[Trait (Programmierung)|Traits]]&lt;ref&gt;[http://soft.vub.ac.be/~tvcutsem/traitsjs/ Traits for Javascript], 2010.&lt;/ref&gt;&lt;ref&gt;[http://cocktailjs.github.io/ CocktailJS - ANNOTATIONS. TRAITS. TALENTS.], April 2013.&lt;/ref&gt; und [[Mixin]]s.&lt;ref&gt;Angus Croll: [http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/ ''A fresh look at JavaScript Mixins''.] 31. Mai 2011.&lt;/ref&gt;&lt;ref&gt;[https://github.com/petsel/javascript-code-reuse-patterns/tree/master/source/components/composition/ JavaScript Code Reuse Patterns] vom 19. April 2013.&lt;/ref&gt; Zusätzliches Verhalten wird bereitgestellt, indem mindestens eine Methode über das Schlüsselwort &lt;code&gt;this&lt;/code&gt; im Rumpf eines &lt;code&gt;function&lt;/code&gt;-Objekts gebunden wird. Benötigt ein Objekt zusätzliches Verhalten, welches ihm nicht über die Prototypenkette zur Verfügung gestellt werden kann, lässt sich eine Rolle direkt über &lt;code&gt;call&lt;/code&gt; bzw. &lt;code&gt;apply&lt;/code&gt; an dieses Objekt delegieren.<br /> ; Objektkomposition und Vererbung durch Delegation<br /> : Während [[Komposition (Informatik)|Komposition]] in JavaScript über diese direkte Delegation abgedeckt werden kann, kommt automatische Delegation immer dann zur Anwendung, wenn der Interpreter die Prototypenkette eines Objekts nach oben hin abwandern muss, um z.&amp;nbsp;B. eine mit diesem Objekt assoziierte Methode zu finden, die diesem nicht unmittelbar gehört. Sobald die Methode gefunden ist, wird sie im Kontext dieses Objekts aufgerufen. Demzufolge wird [[Vererbung (Programmierung)|Vererbung]] in JavaScript über einen selbstausführenden Delegationsmechanismus abgebildet, der an die &lt;code&gt;prototype&lt;/code&gt;-Eigenschaft von Konstruktorfunktionen gebunden ist.<br /> <br /> === Fehlerbehandlung ===<br /> Seit Version 3 verfügt ECMAScript über eine von Java übernommene [[Ausnahmebehandlung|Fehlerbehandlung]]. Die Anweisung &lt;code&gt;try … catch … finally&lt;/code&gt; fängt [[Ausnahmebehandlung|Ausnahmen]] (''exceptions'') ab, die aufgrund eines [[Fehler]]s oder einer &lt;code&gt;throw&lt;/code&gt;-Anweisung auftreten. Die Syntax lautet:<br /> <br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> try {<br /> // Anweisungen, in denen Ausnahmen auftreten oder ausgelöst werden können<br /> } catch (exception) {<br /> // Anweisungsfolge, die im Ausnahmefall ausgeführt wird.<br /> // In diesem Teil kann die Fehlerbehandlung erfolgen.<br /> } finally {<br /> // Anweisungsfolge, die anschließend in jedem Fall ausgeführt wird.<br /> }<br /> …<br /> throw &quot;sample exception&quot;; // wenn verfügbar, besser: Error-Objekt (siehe unten)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Zu Beginn werden die Anweisungen im &lt;code&gt;try&lt;/code&gt;-Block ausgeführt. Falls eine Ausnahme auftritt, wird der [[Kontrollfluss]] sofort zum &lt;code&gt;catch&lt;/code&gt;-Block mit dem Ausnahmeobjekt als Parameter umgeleitet.<br /> <br /> Im Normalfall wird der Ausnahmeblock übersprungen. Nach der Ausführung des &lt;code&gt;try&lt;/code&gt;-Blocks (auch teilweise) und gegebenenfalls des &lt;code&gt;catch&lt;/code&gt;-Blocks werden in jedem Fall die Anweisungen im &lt;code&gt;finally&lt;/code&gt;-Block ausgeführt. Der &lt;code&gt;finally&lt;/code&gt;-Teil kann weggelassen werden, alternativ der &lt;code&gt;catch&lt;/code&gt;-Teil.<br /> <br /> Einige Laufzeitumgebungen wie [[V8 (JavaScript-Implementierung)|V8]] (und somit [[Node.js]]) und auch viele Webbrowser stellen gesonderte '''Error-Objekte''' zur Verfügung, die neben der Fehlermeldung auch einen [[Stacktrace]] und weitere Zusatzinformationen transportieren können.&lt;ref&gt;[http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi JavaScript Stack Trace API] in ''Google V8 Wiki'', Stand 28. Juni 2010, abgerufen: 23. Februar 2013, 09:30 UTC&lt;/ref&gt;&lt;ref&gt;[http://www.aptana.com/reference/html/api/Error.html JavaScript Core Reference: Error] in ''Aptana HTML Reference'', Stand 2. Juli 2012, abgerufen: 23. Februar 2013, 09:30 UTC&lt;/ref&gt;&lt;ref&gt;{{Internetquelle|url=http://www.tomdupont.net/2013/04/report-unhandled-errors-from-javascript.html|titel=Report Unhandled Errors from JavaScript|autor=Tom DuPont|datum=2013-04-13|zugriff=2013-04-16|sprache=en|kommentar=Fehlerprotokollierung mit Stacktrace in JavaScript}}&lt;/ref&gt;<br /> Um diese Vorteile zu nutzen, ändert man im einfachsten Anwendungsfall den &lt;code&gt;throw&lt;/code&gt;-Befehl von &lt;syntaxhighlight lang=&quot;javascript&quot; enclose=&quot;none&quot;&gt;throw &quot;Meldungstext&quot;;&lt;/syntaxhighlight&gt; zu &lt;syntaxhighlight lang=&quot;javascript&quot; enclose=&quot;none&quot;&gt;throw new Error(&quot;Meldungstext&quot;);&lt;/syntaxhighlight&gt;.&lt;ref&gt;Nico Reed: [http://docs.nodejitsu.com/articles/errors/what-is-the-error-object ''What is the error object?''] In: ''Nodejitsu Documentation'', Stand 26. August 2011, abgerufen: 23. Februar 2013&lt;/ref&gt;<br /> <br /> Klammern um den Parameter des &lt;code&gt;throw&lt;/code&gt;-Befehls sind im Allgemeinen nicht notwendig.&lt;ref&gt;[http://www.ecma-international.org/ecma-262/5.1/#sec-12.13 Abschnitt 12.13 &quot;The throw Statement&quot;] in ''Standard ECMA-262, 5.1 Edition: ECMAScript Language Specification'', Stand Juni 2011, abgerufen: 23. Februar 2013, 09:30 UTC&lt;/ref&gt;<br /> Sollten sie in Ausnahmefällen benötigt werden, um beispielsweise einen auf mehrere Zeilen verteilten Parameter zusammenzufassen, kann die mögliche Verwechslung mit einem Funktionsaufruf dennoch vermieden werden, indem man ein Leerzeichen zwischen &lt;code&gt;throw&lt;/code&gt; und die öffnende Klammer einfügt.<br /> <br /> == JavaScript-Bibliotheken ==<br /> Für die Erstellung von browserübergreifenden [[Webanwendung]]en mit Hilfe von JavaScript stehen JavaScript-Bibliotheken, sogenannte [[Toolkit]]s bereit. Es handelt sich dabei um eine Sammlung von JavaScript-Funktionen, die den JavaScript-Programmierer in seiner Arbeit unterstützen sollen. Toolkits, die nicht nur häufig benutzte Standardfunktionen zur Verfügung stellen, sondern durch ein besonderes Maß an [[Abstraktion]] eine grundlegend andere Programmierung nach sich ziehen, werden auch [[Framework]]s genannt.<br /> <br /> Ausgelöst von neuen Konzepten wie [[Ajax (Programmierung)|Ajax]] entstand seit 2004 ein neues Interesse für JavaScript. JavaScript wird zunehmend für [[Rich-Client]]-Anwendungen benutzt, die das Aussehen und die Bedienung von herkömmlichen [[Desktop (Computer)|Desktop]]-Programmen auf Web-gestützte Anwendungen übertragen. JavaScript spielt dabei eine Schlüsselrolle, wenn es darum geht, Statusinformationen ohne Laden einer vollständigen Seite zwischen Browser und HTTP-Server zu übertragen. Im Zuge dieser neuen Anforderungen entstanden verschiedene Bibliotheken, die die Entwicklung solcher Anwendungen vereinfachen wollen. Neben Ajax-Funktionalitäten bieten die meisten dieser Bibliotheken eine eigene Basis für objektorientierte Programmierung, eine Abstraktionsschicht für das komfortable Arbeiten mit dem [[Document Object Model|DOM]] sowie grafische Effekte wie [[Animation]]en. Aber auch schon vor dem breiten Einsatz von Ajax existierten Funktionssammlungen zur Unterstützung der browserübergreifenden Programmierung.<br /> <br /> Zu den bekannten JavaScript-Bibliotheken und Frameworks zählen &lt;!-- alphabetische Reihenfolge --&gt;[[AngularJS]], [[Dojo Toolkit]], [[Ext JS]], [[jQuery]], [[MooTools]], [[Prototype (Klassenbibliothek)|Prototype]], [[Qooxdoo]] und die [[Yahoo User Interface Library]]. Speziell mit grafischen Effekten beschäftigen sich Moo.fx und [[Script.aculo.us]].<br /> <br /> Einige JavaScript-Projekte implementieren eigene<br /> &lt;!-- [http://www.flapjax-lang.org/ flapjax], [http://www.summerofgoto.com/ Javascript Goto], … --&gt;<br /> oder bereits existente andere<br /> &lt;!-- [http://www.is-research.de/info/jslanguages/ eine Liste], [http://processingjs.org/ Processing.js], [http://sizzlejs.com/ sizzle] (CSS), … --&gt;<br /> Sprachen, um die Ausdrucksmöglichkeiten von Javascript zu erweitern, in anderen Sprachen geschriebene Skripte im Browser ausführen zu können, oder einfach zur Unterhaltung oder als Demonstration. Auch für JavaScript selbst existiert ein in JS geschriebener Interpreter, [[Narcissus (JavaScript)|Narcissus]].<br /> <br /> === Beispiel-Bibliothek: Dialogmethoden / Benutzereingaben ===<br /> Meistens erfolgt die [[Interaktion]] mit dem Benutzer über Änderungen an Inhalten des HTML-Dokuments, insbesondere über Formulare im Dokument, dabei greift JavaScript über das [[Document Object Model|DOM]] (Document Object Model) auf die [[HTML-Element|Elemente]] des HTML-Dokuments zu. Außerdem stehen drei Methoden des Window-Objektes bereit: &lt;code&gt;alert()&lt;/code&gt;, &lt;code&gt;confirm()&lt;/code&gt; und &lt;code&gt;prompt()&lt;/code&gt;; mit jeder einzelnen dieser Methoden kann man den Benutzer auffällig ansprechen bzw. zu einer Eingabe auffordern. Dafür zeigt eine solche Methode ein modales Fenster an; modal bedeutet, der Benutzer muss dieses Fenster zunächst schließen, bevor er zum aufrufenden Dokument zurückkehren kann.<br /> <br /> '''Alarmfenster''':&lt;br /&gt;<br /> Zeigt einen Text in einem eigenen Meldungsfenster an. Beispiel:<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> window.alert(&quot;Hello World&quot;);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> '''Bestätigungsfrage''':&lt;br /&gt;<br /> Zeigt einen Dialog mit den Schaltflächen „OK“ und „Abbrechen“ an. Zurückgegeben wird einer der [[Boolesche Variable|booleschen Werte]] &lt;code&gt;true&lt;/code&gt; oder &lt;code&gt;false&lt;/code&gt;, je nachdem welche Schaltfläche der Benutzer auswählt.<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var bestaetigt = window.confirm(&quot;Bitte bestätigen&quot;);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> '''Eingabeaufforderung''':&lt;br /&gt;<br /> Es wird ein Dialog zur Texteingabe angezeigt. Beispiel:<br /> &lt;syntaxhighlight lang=&quot;javascript&quot;&gt;<br /> var eingabe = window.prompt(&quot;Bitte geben Sie einen Text ein:&quot;, &quot;&quot;);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> In einem fertigen Script sind diese Methoden eher selten anzutreffen, während der Script-Entwicklung hingegen werden sie gerne benutzt, um Fehler auszumachen, um mit geringem Aufwand einen Variablenwert zu prüfen oder um festzustellen, ob eine bestimmte Stelle im Script überhaupt erreicht wird.<br /> <br /> == Siehe auch ==<br /> * [[ActionScript]] – Bezeichnung für eine JavaScript-ähnliche Skriptsprache in Flash und Macromedia Director, wo es alternativ zu [[Lingo (Programmiersprache)|Lingo]] verwendet werden kann<br /> * [[Aktive Inhalte]]<br /> * [[Bookmarklet]] – kleine JavaScript-Programme im Browser<br /> * [[Dart (Programmiersprache)]]<br /> <br /> == Literatur ==<br /> * Douglas Crockford: ''Das Beste an JavaScript''. O’Reilly, Köln 2008, ISBN 3-89721-876-3<br /> * Christian Wenz: ''JavaScript und AJAX. Das umfassende Handbuch''. 9. Auflage. Galileo Press, Bonn 2009, ISBN 3-89842-859-1 ([http://openbook.galileocomputing.de/javascript_ajax/ Online-Fassung])<br /> * Stefan Koch: ''JavaScript. Einführung, Programmierung, Referenz – inklusive Ajax.'' 5. Auflage. dpunkt-Verlag, Heidelberg 2009, ISBN 3-89864-594-0<br /> * David Flanagan: ''JavaScript – das umfassende Referenzwerk''. 6. Auflage. O’Reilly, Köln 2012, ISBN 3-86899-135-2<br /> * David Flanagan: ''JavaScript – kurz &amp; gut.'' 4. Auflage. O’Reilly, Köln 2012, ISBN 3-86899-388-6<br /> * Peter Kröner: ''ECMAScript 5 – Entwickeln mit dem aktuellen JavaScript-Standard.'' 1. Auflage. Open Source Press, München 2013, ISBN 978-3-95539-063-1<br /> * {{Literatur|Autor=[[Jörg Bewersdorff]]| Titel=Objektorientierte Programmierung mit JavaScript: Direktstart für Einsteiger| Ort=Wiesbaden| Jahr=2014| ISBN=978-3-658-05443-4| Seiten=30–33| DOI=10.1007/978-3-658-05444-1}}<br /> * {{Literatur| Autor=Nicholas Zakas| Titel=JavaScript objektorientiert: Verständlicher, flexibler, effizienter programmieren| Ort=Heidelberg| Jahr=2014| ISBN=978-3-86490-202-4}}<br /> <br /> == Weblinks ==<br /> {{Commonscat}}<br /> {{Wikibooks|Websiteentwicklung: JavaScript|Websiteentwicklung: JavaScript}}<br /> {{Wiktionary}}<br /> * {{dmoz|World/Deutsch/Computer/Programmieren/Internet/JavaScript/}}<br /> * {{Internetquelle<br /> |url=http://chaosradio.ccc.de/cre146.html<br /> |titel=JavaScript – Geschichte, Struktur, Eigenschaften und die Zukunft der wichtigsten Programmiersprache des Webs<br /> |werk=Chaosradio Express CRE146<br /> |datum=2010-02-27<br /> |zugriff=2010-02-27<br /> |format=MP3<br /> |kommentar=97,5 MB<br /> }}<br /> * {{Internetquelle|url=http://addyosmani.com/resources/essentialjsdesignpatterns/book/|titel=Learning JavaScript Design Patterns|autor=Addy Osmani|sprache=en|kommentar=[[Entwurfsmuster]] in JavaScript|zugriff=2013-05-24}}<br /> <br /> === Spezifikationen ===<br /> * [http://standards.iso.org/ittf/PubliclyAvailableStandards/c055755_ISO_IEC_16262_2011(E).zip ISO-genormte ECMAScript-Spezifikation (ISO/IEC 16262:2002)] (englisch/französisch)<br /> * [http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf ECMAScript-Spezifikation] (englisch, PDF; 3,1&amp;nbsp;MB) ([http://ecma-international.org/ecma-262/5.1/ HTML-Version])<br /> * [https://developer.mozilla.org/en/JavaScript/Reference Referenz von Mozilla] (englisch)<br /> * [https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/ Übersicht über die Neuerungen in JavaScript] (englisch)<br /> <br /> === Dokumentationen ===<br /> * [http://wiki.selfhtml.org/wiki/JavaScript JavaScript-Kapitel bei SELFHTML-Wiki]<br /> * [http://www.fh-wedel.de/~si/seminare/ws07/Ausarbeitung/11.javascript/ Objektorientierung in JavaScript]<br /> * [http://eloquentjavascript.net/ Eloquent JavaScript] (Frei verfügbares E-Book, englisch)<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> {{Normdaten|TYP=s|GND=4420180-1}}<br /> <br /> [[Kategorie:ECMAScript| ]]<br /> [[Kategorie:Skriptsprache]]<br /> [[Kategorie:Objektorientierte Programmiersprache]]<br /> [[Kategorie:Funktionale Programmiersprache]]<br /> [[Kategorie:Prozedurale Programmiersprache]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Ordnungsrelation&diff=140525956 Ordnungsrelation 2015-04-03T10:17:55Z <p>MickHaskell: /* Strenge Totalordnung */</p> <hr /> <div>In der [[Mathematik]] sind '''Ordnungsrelationen''' Verallgemeinerungen der [[Vergleich (Zahlen)|„kleiner-gleich“-Beziehung]]. Sie erlauben es, Elemente einer Menge miteinander zu [[Vergleich_(Philosophie)|vergleichen]].<br /> <br /> Eine Ordnungsrelation ist formal eine zweistellige [[Relation (Mathematik)|Relation]]<br /> :&lt;math&gt;R \subseteq M \times M&lt;/math&gt;<br /> auf einer [[Mengenlehre|Menge]] ''M'' mit bestimmten unten aufgeführten Eigenschaften, worunter immer die [[Transitive Relation|Transitivität]] ist.<br /> <br /> Ist eine Menge ''M'' mit einer Ordnungsrelation ''R'' gegeben, dann nennt man das Paar &lt;math&gt;(M, R)&lt;/math&gt; eine ''geordnete Menge''. Meist bevorzugt man an Stelle der Schreibweise &lt;math&gt;(a,b)\in R&lt;/math&gt; die sogenannte [[Infix (Linguistik)|Infix]]-Notation &lt;math&gt;a\,R\,b&lt;/math&gt;. Außerdem wird für Ordnungsrelationen in den seltensten Fällen ein Symbol wie &lt;math&gt;R&lt;/math&gt; verwendet. Stattdessen verwendet man häufig das Symbol „&lt;math&gt;\le&lt;/math&gt;“ oder ähnliche Symbole. Die Schreibweise &lt;math&gt;a&lt;b&lt;/math&gt; verwendet man als Abkürzung für „&lt;math&gt;a\le b&lt;/math&gt; und &lt;math&gt;a\ne b&lt;/math&gt;“. Dies erweist sich als zweckmäßig, da für Relationen größtenteils Rechenregeln gelten, die denen in &lt;math&gt;\R&lt;/math&gt; (mit gewohntem „&lt;math&gt;\le&lt;/math&gt;“) entsprechen.<br /> <br /> Es folgt eine Auflistung verschiedener Arten von Ordnungsrelationen mit Beispielen.<br /> Für Definitionen der Eigenschaften siehe [[Transitive Relation|transitiv]], [[Reflexive Relation|reflexiv und irreflexiv]], [[Asymmetrische Relation|asymmetrisch]], [[Antisymmetrische Relation|antisymmetrisch]], oder den Artikel [[Relation (Mathematik)]].<br /> <br /> &lt;!-- Bitte nicht in der Liste auf die Attribute reflexiv etc. verlinken. Dafür sind die Verweise eingangs gegeben. --&gt;<br /> == Totalordnung ==<br /> Eine Relation &lt;math&gt;\leq&lt;/math&gt; auf einer Menge &lt;math&gt;M&lt;/math&gt; wird '''Totalordnung''' oder '''totale Ordnung''' genannt, wenn die Forderungen<br /> {| style=&quot;text-align:left&quot;<br /> |-<br /> ||<br /> * &lt;math&gt;x\leq x&lt;/math&gt;<br /> || (Reflexivität)<br /> |-<br /> ||<br /> * &lt;math&gt;x\leq y \land y\leq x \; \Rightarrow \; x=y&lt;/math&gt;<br /> || (Antisymmetrie)<br /> |-<br /> | style=&quot;width:20em&quot; |<br /> * &lt;math&gt;x\leq y \land y\leq z \; \Rightarrow \; x\leq z&lt;/math&gt;<br /> || (Transitivität)<br /> |-<br /> ||<br /> * &lt;math&gt;x\leq y \lor y\leq x&lt;/math&gt;<br /> || (Totalität)<br /> |}<br /> für alle &lt;math&gt;x,y,z\in M&lt;/math&gt; erfüllt sind.<br /> Da dies bei der [[Zahlengerade]]n, der „Linie“, der Fall ist, wird eine Totalordnung auch '''lineare Ordnung''' genannt. Ferner gibt es für totalgeordnete Untermengen von [[#Halbordnung|partiell geordneten]] Mengen die Bezeichnung [[Lemma von Zorn|'''Kette''']].<br /> <br /> Die [[Relation (Mathematik)|Umkehrrelation]] einer Totalordnung<br /> * &lt;math&gt;y\geq x :\Longleftrightarrow x\leq y&lt;/math&gt;<br /> ist wiederum eine Totalordnung. Bei Umkehrrelationen wird gerne das gespiegelte Symbol als Relationszeichen genommen. Im Fall der totalen (Quasi-)Ordnungen hat dies eine besondere Berechtigung, weil bei ihnen die inverse Relation eine Spiegelung ist.<br /> <br /> Eine endliche Untermenge einer totalgeordneten Menge lässt sich gemäß dieser Ordnung in eindeutiger Weise sortieren, das heißt in eine („lineare“) Reihenfolge bringen derart, dass jedes Element mit seinem Folgeelement in der Ordnungsbeziehung steht. Solchermaßen geordnet nennt man die Sortierung ''aufsteigend''. Gilt stattdessen zwischen zwei Nachbarelementen die gespiegelte Ordnungsrelation, nennt man die Sortierung ''absteigend''. Der schwächere Begriff der [[#Quasiordnung|totalen Quasiordnung (siehe unten)]] erlaubt das Vorhandensein von „Duplikaten“, also eine nicht eindeutige Sortierung.<br /> <br /> '''Beispiel und Gegenbeispiel:'''<br /> <br /> Ein Beispiel ist die Relation &lt;math&gt;\leq&lt;/math&gt; („kleinergleich“) auf den [[ganze Zahlen|ganzen Zahlen]] &lt;math&gt;\Z&lt;/math&gt;.<br /> <br /> Ein Gegenbeispiel ist die Teilmengenbeziehung &lt;math&gt;\subseteq&lt;/math&gt; auf der Potenzmenge von &lt;math&gt;\Z&lt;/math&gt;: sie ist ''nicht'' total, denn es gilt weder &lt;math&gt;\{1,2\}\subseteq\{2,3\}&lt;/math&gt; noch &lt;math&gt;\{2,3\}\subseteq\{1,2\}&lt;/math&gt;.<br /> <br /> == Strenge Totalordnung ==<br /> Eine Relation &lt;math&gt;&lt;&lt;/math&gt; auf &lt;math&gt;M&lt;/math&gt; heißt '''strenge Totalordnung''', wenn<br /> {| style=&quot;text-align:left&quot;<br /> |-<br /> | style=&quot;width:25em&quot; |<br /> * &lt;math&gt;x&lt;y \; \land \; y&lt;z \;\; \Rightarrow \;\; x&lt;z&lt;/math&gt;<br /> || (Transitivität)<br /> |-<br /> ||<br /> * entweder &lt;math&gt;x&lt;y&lt;/math&gt; oder &lt;math&gt;x=y&lt;/math&gt; oder &lt;math&gt;y&lt;x&lt;/math&gt;<br /> || (Trichotomie)<br /> |}<br /> für alle &lt;math&gt;x,y,z\in M&lt;/math&gt; gilt.<br /> <br /> Da eine strenge Totalordnung nicht reflexiv ist, ist sie ''keine Totalordnung''. Eine Totalordnung im oben erklärten Sinn ist aber die zu &lt;math&gt;&lt;&lt;/math&gt; gehörige Ordnung, die durch<br /> <br /> :&lt;math&gt;x \leq y \; \; :\Leftrightarrow \; \; x &lt; y \text{ oder } x = y&lt;/math&gt;<br /> <br /> definiert ist.<br /> <br /> == Quasiordnung ==<br /> {{Hauptartikel|Quasiordnung}}<br /> <br /> Eine ''[[Quasiordnung]]'' ist eine ''transitive'' und ''reflexive'' Relation.<br /> <br /> '''Beispiel:'''<br /> <br /> Für [[komplexe Zahlen]] &lt;math&gt;a, b\in\Bbb C&lt;/math&gt; ist die über den [[Absoluter Betrag|Absolutbetrag]] durch „&lt;math&gt;a \leq b,\text{ falls } |a|\leq|b|&lt;/math&gt;“ festgelegte Relation eine Quasiordnung.<br /> <br /> Diese Quasiordnung ist ''nicht'' antisymmetrisch – also keine Halbordnung, denn betragsgleiche Zahlen müssen nicht identisch sein.<br /> <br /> Jedoch handelt es sich um eine ''totale'' Quasiordnung, da je zwei Elemente vergleichbar sind.<br /> <br /> == Halbordnung ==<br /> Eine '''Halbordnung''' –&amp;nbsp;auch ''Partialordnung'', ''Teilordnung'' oder ''partielle Ordnung'' genannt&amp;nbsp;– ist eine ''transitive'', ''reflexive'' und ''antisymmetrische'' Relation. Halbordnungen können in [[Hasse-Diagramm|Hasse-Diagrammen]] visualisiert werden. Eine Teilmenge einer halbgeordneten Menge heißt ''Oberhalbmenge'', wenn sie zu jedem ihrer Elemente auch alle nachfolgenden Elemente (also alle, die rechts vom Relationssymbol stehen könnten) enthält.<br /> <br /> Mit Hilfe des [[Auswahlaxiom|Auswahlaxioms]] kann man beweisen, dass jede Halbordnung in eine Totalordnung eingebettet werden kann. Für endliche Mengen muss man das Auswahlaxiom nicht voraussetzen, und in diesem Fall gibt es zur Konstruktion einer solchen Totalordnung auch explizite Algorithmen (siehe [[Topologische Sortierung]]).<br /> <br /> '''Beispiele:'''<br /> <br /> Jede [[Teilmenge]]nbeziehung &lt;math&gt;A\subseteq B&lt;/math&gt; auf einem System &lt;math&gt;\mathfrak M&lt;/math&gt; von Mengen ist eine Halbordnung, denn sie ist<br /> * [[Transitive Relation|transitiv]], da die Teilmenge einer Teilmenge von A auch Teilmenge von A ist:<br /> :&lt;math&gt;{C \subseteq B \subseteq A}\ \Rightarrow\ {C \subseteq A}&lt;/math&gt; für alle &lt;math&gt;A, B, C \in \mathfrak M;&lt;/math&gt;<br /> * [[Reflexive Relation|reflexiv]], da jede Menge eine Teilmenge ihrer selbst ist:<br /> :&lt;math&gt;{A \subseteq A}&lt;/math&gt; für alle &lt;math&gt;A \in \mathfrak M;&lt;/math&gt;<br /> * und [[Antisymmetrische Relation|antisymmetrisch]], da nur A selbst sowohl Teilmenge als auch Obermenge von A ist:<br /> :&lt;math&gt;{(A \subseteq B)} \wedge {(B \subseteq A)}\ \Rightarrow\ {A=B}&lt;/math&gt; für alle &lt;math&gt;A,B \in \mathfrak M.&lt;/math&gt;<br /> <br /> Weitere Beispiele sind die Relation ''komponentenweise-kleiner-oder-gleich'' in einem Raum von [[n-Tupel]]n und die Teilerbeziehung zwischen den natürlichen Zahlen, die wie folgt definiert sind:<br /> <br /> #''komponentenweise-kleiner-oder-gleich, &lt;math&gt;\le^n:&lt;/math&gt;'' Für eine fest gewählte natürliche Zahl &lt;math&gt;n&lt;/math&gt; und zwei Tupel aus einer Menge &lt;math&gt;V&lt;/math&gt; von &lt;math&gt;n&lt;/math&gt;-Tupeln gilt:<br /> #:&lt;math&gt;{\left(a_1, a_2, \ldots, a_n\right)} \le^n {\left(b_1, b_2, \ldots, b_n\right)}\ :\Longleftrightarrow\ a_i \le b_i&lt;/math&gt; für jedes &lt;math&gt;i=1, 2, \ldots, n;&lt;/math&gt;<br /> #Dies ist ein Spezialfall einer von einem [[Kegel (Lineare Algebra)|Kegel]] induzierten Halbordnung, die zu dem Begriff der sogenannten [[Verallgemeinerte Ungleichung|verallgemeinerten Ungleichungen]] führt, die eine wichtige Rolle in der Optimierung spielen.<br /> #''Teilerbeziehung, &lt;math&gt;\mid:&lt;/math&gt;'' Für zwei ''natürliche'' Zahlen gilt:<br /> #:&lt;math&gt;{a \mid b}\ ({a\ \mathrm{teilt}\ b}) :\Longleftrightarrow\ \exists n \in \N : n\cdot a=b.&lt;/math&gt;<br /> <br /> === Weitere Anwendung der Halbordnung ===<br /> Um den Grad der Vorsortiertheit einer Menge zu messen, kann man die Anzahl der möglichen Fortsetzungen einer Halbordnung zu einer ''linearen Ordnung'' angeben. Ist beispielsweise die geordnete Menge &lt;math&gt;(X, \leq)&lt;/math&gt; mit &lt;math&gt;X = \{a, b, c\}&lt;/math&gt; und &lt;math&gt;a \leq b&lt;/math&gt; gegeben, so gibt es drei mögliche Fortsetzungen: &lt;math&gt;a \leq b\leq c&lt;/math&gt;, &lt;math&gt;a \leq c \leq b&lt;/math&gt; und &lt;math&gt;c \leq a \leq b&lt;/math&gt;. Der Grad der Vorsortiertheit ist also in diesem Fall &lt;math&gt;e(\leq) = 3&lt;/math&gt;. Nach dem [[efficient comparison theorem]] werden für eine vollständige Sortierung der vorsortierten Menge dann nur noch &lt;math&gt;\Omega(e(\leq))&lt;/math&gt; Vergleiche benötigt. In der [[Informatik]] nutzt zum Beispiel das [[Sortierverfahren]] [[Mergesort]] diese Eigenschaft.<br /> <br /> === Minimale, maximale und andere Elemente ===<br /> Sei ''T'' eine Teilmenge einer halbgeordneten Menge ''P''.<br /> <br /> Wenn ''m'' in ''T'' die Eigenschaft hat, dass es kein ''x'' in ''T'' mit &lt;math&gt;x&lt;m&lt;/math&gt; gibt, dann heißt ''m [[minimales Element]]'' von ''T''. Falls es ein Element ''m'' in ''T'' gibt, das &lt;math&gt;\leq&lt;/math&gt; allen anderen Elementen von ''T'' ist, dann heißt ''m'' das [[Größtes und kleinstes Element|kleinste Element]] von ''T''. Ein kleinstes Element von ''T'' (wenn es das gibt; z.&amp;nbsp;B. hat die Menge der ganzen Zahlen kein kleinstes Element) ist immer eindeutig bestimmt (wegen der Antisymmetrie) und natürlich auch minimal. In einer Totalordnung bedeutet „kleinstes Element“ und „minimales Element“ dasselbe, aber in allgemeinen Halbordnungen kann eine Menge mehrere minimale Elemente haben, von denen dann keines das kleinste ist.<br /> <br /> Es kann sogar vorkommen, dass eine (unendliche) Menge ''T'' zwar ein einziges minimales Element hat, dieses aber nicht das kleinste Element der Menge ist (dann hat ''T'' kein kleinstes Element). Beispiel:<br /> :Für &lt;math&gt;M := \{ [0, a] \mid 0 &lt; a &lt; 1 \} \cup \{ \{2\} \}&lt;/math&gt;, versehen mit &lt;math&gt;\subseteq&lt;/math&gt; als Halbordnung, ist &lt;math&gt;\{2\}&lt;/math&gt; zwar das einzige minimale Element, aber nicht das kleinste, da &lt;math&gt;\{2\} \subseteq A&lt;/math&gt; nicht für alle &lt;math&gt;A&lt;/math&gt; aus &lt;math&gt;M&lt;/math&gt; gilt.<br /> <br /> Wenn ''T'' eine Teilmenge von ''P'' ist und ''p'' in ''P'' die Eigenschaft hat, dass für alle ''t'' in ''T'' die Beziehung ''p''≤''t'' gilt, dann heißt ''p'' eine ''untere Schranke'' von ''T''. (''p'' kann, muss aber nicht Element von ''T'' sein.) Wenn es eine größte untere Schranke der Menge ''T'' gibt, dann nennt man diese auch die ''untere Grenze'' oder das ''[[Infimum]]'' von ''T''. Eine untere Schranke ist also kleiner als das oder gleich dem Infimum.<br /> <br /> Analog sind die Begriffe ''[[maximales Element]]'', ''größtes Element'', ''obere Schranke'' und ''obere Grenze'' bzw. ''[[Supremum]]'' definiert.<br /> <br /> Eine Menge, die sowohl eine obere als auch eine untere Schranke hat, heißt ''beschränkt''. (Analog sind „nach oben beschränkt“ und „nach unten beschränkt“ definiert.)<br /> <br /> Man nennt eine [[Funktion (Mathematik)|Funktion]] ''f'', die eine beliebige Menge ''X'' in eine halb- oder total geordnete Menge (siehe unten) ''P'' abbildet, ''beschränkt'', wenn die Menge der Funktionswerte beschränkt ist, also wenn es ein ''p'' und ein ''q'' in ''P'' gibt, sodass für alle ''x'' in ''X''<br /> :&lt;math&gt;p\le f(x) \le q&lt;/math&gt;<br /> gilt.<br /> === Lokal endliche Halbordnung ===<br /> Eine Halbordnung &lt;math&gt; (M, \leqslant) &lt;/math&gt; heißt ''lokal endlich'', wenn jedes [[Intervall_(Mathematik)|Intervall]] &lt;math&gt;[x,y] :=\{z\in M: x\leqslant z\leqslant y\}&lt;/math&gt; eine [[endliche Menge]] ist.<br /> <br /> == Striktordnung ==<br /> Eine ''strenge Ordnung'' oder ''Striktordnung'' ist ''transitiv'' und ''asymmetrisch''. Der Begriff ''Asymmetrie'' fasst die Begriffe ''Irreflexivität'' und ''Antisymmetrie'' zusammen. ''Irreflexivität'' unterscheidet die ''Striktordnung'' von der ''Halbordnung'' und bedeutet, dass kein Element zu sich selbst in Beziehung steht. Eine Striktordnung ist also ''transitiv'', ''irreflexiv'' und ''antisymmetrisch''<br /> <br /> Beispiele: <br /> * Die Relation „(echt) kleiner“ auf &lt;math&gt;\R&lt;/math&gt;<br /> * die Relation „Echte Teilmenge“ in einer [[Potenzmenge]]<br /> * die Relation „komponentenweise kleiner, aber nicht gleich“ auf dem [[Vektorraum]] &lt;math&gt;\R^n&lt;/math&gt;.<br /> <br /> == Strenge schwache Ordnung ==<br /> Eine ''[[strenge schwache Ordnung]]'' ''R'' ist eine Striktordnung, bei der zusätzlich [[negative Transitivität]] gilt:<br /> :&lt;math&gt;\neg aRb \and \neg bRc \Rightarrow \neg aRc&lt;/math&gt;<br /> <br /> Eine strenge schwache Ordnung ist einer [[Quasiordnung#Totale Quasiordnung|totalen Quasiordnung]] [[Komplement (Mengenlehre)|komplementär]] und umgekehrt.<br /> <br /> == Induktive Ordnung ==<br /> Eine halbgeordnete Menge &lt;math&gt;(M, \leq)&lt;/math&gt; heißt ''induktiv geordnet'', wenn jede linear geordnete Teilmenge von A eine obere Schranke besitzt. Sie heißt ''streng induktiv geordnet'', wenn jede linear geordnete Teilmenge eine kleinste obere Schranke besitzt.<br /> <br /> Nach dem [[Lemma von Zorn]] besitzt jede induktiv geordnete Menge ein maximales Element.<br /> <br /> == Fundierte Ordnung ==<br /> Eine ''[[fundierte Menge|fundierte Ordnung]]'' ist eine Halbordnung, in der es keine unendlichen, echt absteigenden Ketten gibt (oder, äquivalent formuliert: bei der jede nichtleere Teilmenge ein minimales Element besitzt). Beispiel: Die [[Teilbarkeit]]sbeziehung | zwischen natürlichen Zahlen.<br /> <br /> == Wohlquasiordnung ==<br /> Eine ''Wohlquasiordnung'' ist eine Quasiordnung mit der Eigenschaft, dass es zu jeder Folge &lt;math&gt;(p_1, p_2, p_3,\ldots )&lt;/math&gt; zwei natürliche Zahlen &lt;math&gt;k&lt;n&lt;/math&gt; gibt, so dass &lt;math&gt;p_k \leq p_n&lt;/math&gt; gilt.<br /> <br /> == Wohlordnung ==<br /> Eine ''[[Wohlordnung]]'' ist eine totale Ordnung, bei der jede nichtleere Teilmenge ein kleinstes Element besitzt. Einige Beispiele: <br /> * „Kleinergleich“ auf den [[natürliche Zahlen|natürlichen Zahlen]] &lt;math&gt;\Bbb N&lt;/math&gt;.<br /> * Die ganzen Zahlen &lt;math&gt;\Z&lt;/math&gt; mit der Ordnung 0 &lt; 1 &lt; -1 &lt; 2 &lt; -2 &lt; 3 &lt; -3 &lt;. ... <br /> * Die ganzen Zahlen &lt;math&gt;\Z&lt;/math&gt; mit der Ordnung 0 &lt; 1 &lt; 2 &lt; 3 &lt;. .. &lt; -1 &lt; -2 &lt; -3 &lt;. ... <br /> Der [[Wohlordnungssatz]] garantiert die Existenz einer Wohlordnung für jede Menge, zum Beispiel auch für die [[reelle Zahlen|reellen Zahlen]] &lt;math&gt;\R&lt;/math&gt;. Er ist zum [[Auswahlaxiom]] äquivalent.<br /> <br /> == Baum ==<br /> Ein ''Baum'' ist eine Halbordnung &lt;math&gt;(T,&lt;)&lt;/math&gt;, bei der für jedes &lt;math&gt;x\in T&lt;/math&gt; die Menge &lt;math&gt;\{y | y&lt;x\}&lt;/math&gt; der Vorgänger von &lt;math&gt;x&lt;/math&gt; wohlgeordnet ist.<br /> <br /> == Verbandsordnung ==<br /> Eine ''Verbandsordnung'' ist eine Halbordnung, in der es zu je zwei Elementen ''v'' und ''w'' immer ein Supremum &lt;math&gt;\sup(v,w)&lt;/math&gt; und ein Infimum &lt;math&gt;\inf(v,w)&lt;/math&gt; gibt.<br /> <br /> Durch jede Verbandsordnung ist die [[algebraische Struktur]] eines [[Verband (Mathematik)|Verbandes]] gegeben, in dem man für je zwei Elemente ''v'' und ''w'' definiert:<br /> * &lt;math&gt;v \cup w := \sup(v,w),&lt;/math&gt;<br /> * &lt;math&gt;v \cap w := \inf(v,w).&lt;/math&gt;<br /> <br /> Umgekehrt lässt sich in jedem Verband durch<br /> * &lt;math&gt;v \leq w \iff v \cup w = w&lt;/math&gt;<br /> für je zwei Elemente ''v'' und ''w'' eine Verbandsordnung definieren, so dass<br /> * &lt;math&gt;\sup(v,w) = v \cup w,&lt;/math&gt;<br /> * &lt;math&gt;\inf(v,w) = v \cap w.&lt;/math&gt;<br /> <br /> Eine verbandsgeordnete Menge wird daher oft Verband genannt, sie selbst ist jedoch im Gegensatz zum Verband keine algebraische Struktur.<br /> <br /> == Vollständige Halbordnung ==<br /> Eine ''vollständige Halbordnung'' (engl. ''complete partial order'', ''cpo'') ist eine Halbordnung mit einem kleinsten Element und der Eigenschaft, dass jede Teilmenge, die eine aufsteigende Kette &lt;math&gt;(x_0 \le x_1 \le x_2 \le \dotsb )&lt;/math&gt; bildet, ein [[Supremum]] besitzt. Das Supremum muss dabei nicht in der Teilmenge selbst liegen.<br /> <br /> Bei einer ''gerichteten vollständigen Halbordnung'' (engl. ''directed complete partial order'', ''DCPO'') muss im Gegensatz zur vollständigen Halbordnung die leere Menge kein Supremum besitzen. Es muss damit kein kleinstes Element geben.<br /> <br /> Diese beiden Vollständigkeitsbegriffe spielen eine Rolle bei Beweisen mit Hilfe des [[Lemma von Zorn|Lemmas von Zorn]]. → Davon zu unterscheiden ist der an die [[Topologie (Mathematik)|Topologie]] angelehnte Begriff [[Ordnungstopologie|Ordnungsvollständigkeit]].<br /> <br /> == Homomorphismen ==<br /> <br /> Seien &lt;math&gt;X&lt;/math&gt; und &lt;math&gt;X'&lt;/math&gt; geordnete Mengen. Eine Abbildung &lt;math&gt;\varphi \colon X \rightarrow X'&lt;/math&gt; heißt ''[[Isotone Abbildung|isoton]]'', ''ordnungserhaltend'', ''ordnungstreu'' oder ''Ordnungshomomorphismus'', wenn &lt;math&gt;x \leq y \Rightarrow \varphi(x) \leq \varphi(y)&lt;/math&gt; für alle &lt;math&gt;x,y \in X&lt;/math&gt;gilt.<br /> <br /> == Verwendung der Begriffe ==<br /> Die Autoren benutzen den Begriff „Ordnung“ unterschiedlich. Er kann eine ''Halbordnung'' oder eine ''totale Ordnung'' bezeichnen. Vermutlich induziert von den Polaritäten „halb“ und „total“, findet man somit häufig die Abgrenzung<br /> :''Ordnung'' (im Sinn von Halbordnung) &lt;math&gt; \quad \longleftrightarrow \quad &lt;/math&gt; ''totale Ordnung''<br /> oder auch<br /> :''Halbordnung'' &lt;math&gt; \quad \longleftrightarrow \quad &lt;/math&gt; ''Ordnung'' (im Sinn von totale Ordnung).<br /> <br /> == Siehe auch ==<br /> * Eine Ordnungsrelation auf einer Menge von ''Güterbündeln'' heißt in der Mikroökonomie [[Präferenzrelation]].<br /> * In der [[Algebra]] werden (meist totale) Ordnungsrelationen auf einer Menge betrachtet, die mit der Verknüpfung bzw. den Verknüpfungen auf dieser Menge verträglich sind. Siehe als Beispiel [[Geordneter Körper]].<br /> * In der Geometrie lassen sich unter bestimmten Bedingungen Anordnungen der Punkte auf jeder Geraden einführen. Man spricht hier zunächst von [[Seiteneinteilung#Zwischenrelation|Zwischenrelationen]] (dies sind dreistellige Relationen), aus denen sich in wichtigen Spezialfällen totale, miteinander und mit der geometrischen Struktur verträgliche Ordnungen auf diesen Punktreihen ergeben.<br /> * Jede totalgeordnete Menge lässt sich mit einer durch die Ordnung bestimmten [[Topologie (Mathematik)|topologischen Struktur]], der [[Ordnungstopologie]] ausstatten.<br /> <br /> == Weblinks ==<br /> {{Wikibooks|Mathe für Nicht-Freaks: Ordnungsrelation}}<br /> <br /> == Literatur ==<br /> * Rudolf Berghammer: ''Ordnungen, Verbände und Relationen mit Anwendungen''. Springer+Vieweg, 2. Auflage 2012. ISBN 978-3658006181<br /> * Marcel Erné: ''Einführung in die Ordnungstheorie''. Bibliographisches Institut, Mannheim 1982. ISBN 3-411-01638-8<br /> * {{Literatur<br /> |Autor=Egbert Harzheim<br /> |Titel=Ordered Sets<br /> |Verlag=Springer<br /> |Ort=New York <br /> |Jahr=2005<br /> |ISBN=0-387-24219-8<br /> }}<br /> * Ingmar Lehmann und Wolfgang Schulz: ''Mengen - Relationen - Funktionen: Eine anschauliche Einführung''. Vieweg+Teubner 2007. ISBN 978-3835101623<br /> <br /> {{Normdaten|TYP=s|GND=4172733-2|LCCN=|NDL=|VIAF=}}<br /> <br /> [[Kategorie:Ordnungsstruktur|!]]<br /> [[Kategorie:Ordnungstheorie]]<br /> [[Kategorie:Mathematischer Grundbegriff]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Formale_Begriffsanalyse&diff=140525460 Formale Begriffsanalyse 2015-04-03T10:01:07Z <p>MickHaskell: /* Formale Kontexte und Formale Begriffe */</p> <hr /> <div>'''Formale Begriffsanalyse''' (FBA) ist ein Teil der mathematischen [[Ordnungstheorie]]. Ihre ursprüngliche Motivation ist die konkrete Darstellung vollständiger [[Verband (Mathematik)|Verbände]] und deren Eigenschaften mittels ''formaler Kontexte'', um Eigenschaften dieser Verbände als Eigenschaften der zugeordneten Kontexte zu studieren. Wegen der englischen Übersetzung ''Formal Concept Analysis'' findet man zuweilen im Deutschen auch die eigentlich falsche Bezeichnung ''Formale Konzeptanalyse''.<br /> <br /> Die Theorie in ihrer heutigen Form geht zurück auf die Darmstädter Forschungsgruppe um [[Rudolf Wille (Mathematiker)|Rudolf Wille]], [[Bernhard Ganter]] und [[Peter Burmeister]], in welcher <br /> Anfang der 1980er Jahre die Formale Begriffsanalyse entstand. Die mathematischen Grundlagen wurden jedoch bereits von [[Garrett Birkhoff]] in den 1930er Jahren im Rahmen der allgemeinen [[Verbandstheorie]] geschaffen. Vor den Arbeiten der Darmstädter Gruppe gab es bereits Ansätze in verschiedenen französischen Gruppen. Philosophische Fundierungen der Formalen Begriffsanalyse berufen sich insbesondere auf [[Charles S. Peirce]] und [[Hartmut von Hentig]].<br /> <br /> FBA findet in vielfältigen Bereichen praktische Anwendung, wie [[Datamining|Data-]] und [[Textmining]], [[Wissensmanagement]], [[Semantic Web]], [[Softwareentwicklung]], [[Wirtschaft]] oder [[Biologie]].<br /> <br /> == Motivation und philosophischer Hintergrund ==<br /> <br /> Im Artikel ''Restructuring Lattice Theory'' (1982), der die Formale Begriffsanalyse als Disziplin begründete, wird als Motivation das Unbehagen an der Verbandstheorie und der Reinen Mathematik allgemein genannt: Die oft durch „geistigen Hochleistungssport“ erreichte Produktion theoretischer Resultate sei beeindruckend, die Verknüpfungen zwischen benachbarten Gebieten und sogar Teilen einer Theorie würden jedoch schwächer.<br /> <br /> {{Zitat | Text=Die Restrukturierung der Verbandstheorie ist ein Versuch, Verbindungen zu unserer allgemeinen Kultur wieder zu verstärken, indem die Theorie so konkret wie möglich interpretiert und dadurch eine bessere Kommunikation zwischen Verbandstheoretikern und potentiellen Anwendern der Verbandstheorie gefördert wird. | Autor=Rudolf Wille | Quelle=&lt;ref name=&quot;restructuring&quot;&gt;Rudolf Wille: ''[http://books.google.de/books?hl=de&amp;lr=&amp;id=gwpq0acO3kgC&amp;oi=fnd&amp;pg=PA314&amp;dq=Wille+Restructuring+Lattice+Theory&amp;ots=zYmNQeCJKb&amp;sig=TyDygU5lU_91iJWIuJbNi2or6Ls#v=onepage&amp;q=Wille%20Restructuring%20Lattice%20Theory&amp;f=false Restructuring lattice theory: An approach based on hierarchies of concepts.]'' Nachdruck in: ICFCA '09: Proceedings of the 7th International Conference on Formal Concept Analysis, Berlin, Heidelberg, 2009, S. 314. Eigene Übersetzung [[Benutzer:Jwollbold|Jwollbold]]; „geistiger Hochleistungssport“: „elaborate mental gymnastics“.&lt;/ref&gt;}}<br /> <br /> Dieses Ziel geht direkt zurück auf Hartmut von Hentig, der 1972 eine Restrukturierung der Wissenschaften forderte, „um sie besser lernbar, gegenseitig verfügbar und allgemeiner (d.h. jenseits der Fachkompetenz) kritisierbar zu machen.“&lt;ref&gt;Hartmut von Hentig: ''Magier oder Magister? Über die Einheit der Wissenschaft im Verständigungsprozeß''. Klett 1972 / Suhrkamp 1974. Zitiert nach Karl Erich Wolff: ''[http://www.fbmn.h-da.de/~wolff/Publikationen/Ordnung_Wille_und_Begriff.doc Ordnung, Wille und Begriff] ([[Microsoft Word|MS Word]]; 2,0&amp;nbsp;MB)'', Ernst Schröder Zentrum für Begriffliche Wissensverarbeitung, Darmstadt 2003.&lt;/ref&gt; Somit zielt auch FBA von ihren Ursprüngen her auf Interdisziplinarität und demokratische Kontrolle von Forschung.&lt;ref name=&quot;AttrExGeneRegProc&quot;&gt;Johannes Wollbold: ''[http://www.db-thueringen.de/servlets/DerivateServlet/Derivate-24615/Wollbold/Dissertation.pdf Attribute Exploration of Gene Regulatory Processes] (PDF; 4,6&amp;nbsp;MB)''. Doktorarbeit, Universität Jena 2011, S. 9.&lt;/ref&gt;<br /> <br /> Sie korrigiert den ursprünglichen Ansatz der Verbandstheorie mit der Entstehung der [[Formale Logik|Formalen Logik]] im 19. Jahrhundert. Während ein Begriff als einstelliges [[Prädikat (Logik)|Prädikat]] auf seinen Umfang reduziert wurde (ähnlich auch in der [[Modelltheorie]]), sollte nun durch Berücksichtigung auch des Inhalts die Begriffslehre wieder weniger abstrakt werden.&lt;ref name=&quot;restructuring&quot; /&gt; Damit orientiert sich FBA an den Kategorien [[Extension und Intension]] der [[Linguistik]] und klassischen [[Begriffslogik]]. Ihr Begriffsverständnis entspricht auch dem der [[Begriff#Terminologische_Festlegungen_in_DIN-Normen|DIN-Normen]] 2330 ''Begriffe und Benennungen'', DIN 2331 ''Begriffssysteme und ihre Darstellung'' sowie DIN 2342 ''Begriffe der Terminologielehre''.&lt;ref&gt;Ganter, Wille: ''Formale Begriffsanalyse'', 1996, S. 1.&lt;/ref&gt;<br /> <br /> Klarheit von Begriffen wird im Sinn von Charles S. Peirce's [[Pragmatische_Maxime#Von_der_Klarheit_der_Gedanken|Pragmatischer Maxime]] dadurch angestrebt, dass beobachtbare, elementare Eigenschaften der [[Subsumption|subsumierten]] Gegenstände entfaltet werden.&lt;ref name=&quot;AttrExGeneRegProc&quot; /&gt; In seiner Spätphilosophie ging Peirce davon aus, dass logisches Denken auf das Erfassen von [[Wirklichkeit]] zielt, durch den Dreischritt Begriff, [[Urteil (Logik)|Urteil]] und [[Syllogismus|Schluss]]. Mathematik abstrahiert logisches Denken, entwickelt Formen [[Möglichkeit|möglicher]] Realität und kann daher [[Kommunikative_Vernunft#Kommunikative_Rationalität|rationale Kommunikation]] unterstützen. Rudolf Wille definiert vor diesem Hintergrund:<br /> {{Zitat | Text=Ziel und Bedeutung Formaler Begriffsanalyse als mathematische Theorie von Begriffen und Begriffshierarchien ist es, die rationale Kommunikation von Menschen zu unterstützen, indem sie mathematisch geeignete Begriffsstrukturen entwickelt, die logisch aktiviert werden können. | Autor=Rudolf Wille | Quelle=&lt;ref&gt;Rudolf Wille: [http://books.google.de/books?hl=de&amp;lr=&amp;id=nEh4D4e88NwC&amp;oi=fnd&amp;pg=PA1&amp;dq=Formal+Concept+Analysis+Fondations+and+Applications&amp;ots=GSCkikE8pv&amp;sig=8TJOPrSW07sJqLH0hF8_-HH_gb4#v=onepage&amp;q=Formal%20Concept%20Analysis%20Fondations%20and%20Applications&amp;f=false Formal Concept Analysis as Mathematical Theory of Concepts and Concept Hierarchies]. In: B. Ganter et al.: ''Formal Concept Analysis. Foundations and Applications'', 2005, S. 1f. Eigene Übersetzung [[Benutzer:Jwollbold|Jwollbold]].&lt;/ref&gt;}}<br /> <br /> == Mathematische Grundlagen ==<br /> <br /> Das Hauptziel der Formalen Begriffsanalyse ist die Darstellung von vollständigen Verbänden mittels formaler Kontexte. Darüber hinaus erlaubt sie aber auch umgekehrt die Untersuchung von Daten in Form formaler Kontexte mit Mitteln der Ordnungstheorie. Die dafür grundlegenden Definitionen sollen in diesem Abschnitt diskutiert werden.<br /> <br /> === Formale Kontexte und Formale Begriffe ===<br /> <br /> Gegeben seien zwei Mengen &lt;math&gt;G,\, M&lt;/math&gt; und eine [[Relation]] &lt;math&gt;I \subseteq G\times M&lt;/math&gt;. Das Tripel &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; wird dann als ''formaler Kontext''&lt;ref name=&quot;GW96Basics&quot;&gt;Bernhard Ganter, Rudolf Wille: ''Formale Begriffsanalyse;'' Springer, Heidelberg, 1996, Kap. 1 „Begriffsverbände von Kontexten“. ISBN 3-540-60868-0.&lt;/ref&gt; bezeichnet, &lt;math&gt;G&lt;/math&gt; als seine ''Gegenstandsmenge'' und &lt;math&gt;M&lt;/math&gt; als seine ''Merkmalsmenge''; für einen Gegenstand &lt;math&gt;g \in G&lt;/math&gt; und ein Merkmal &lt;math&gt;m \in M&lt;/math&gt; bedeutet &lt;math&gt;(g, m) \in I&lt;/math&gt; „der Gegenstand &lt;math&gt;g&lt;/math&gt; ''hat'' das Merkmal &lt;math&gt;m&lt;/math&gt;“. Oft wird auch &lt;math&gt;g\mathrel{I}m&lt;/math&gt; statt &lt;math&gt;(g,m) \in I&lt;/math&gt; geschrieben. Die Menge &lt;math&gt;I&lt;/math&gt; wird als ''Inzidenzrelation'' des formalen Kontextes bezeichnet.<br /> <br /> Sind die Mengen &lt;math&gt;G&lt;/math&gt; und &lt;math&gt;M&lt;/math&gt; endlich, so lassen sich formale Kontexte gut in Form von „Kreuztabellen“ darstellen. Man beachte dabei, dass die Gegenstände und Merkmale in dieser Darstellung willkürlich geordnet werden können. Diese Ordnung ist dann aber nicht Teil des formalen Kontextes, sondern nur seiner Darstellung.<br /> <br /> [[Datei:1-10Context.gif|thumb|200px|Ein formaler Kontext zu Eigenschaften der Zahlen 1-10.]]<br /> <br /> Ist &lt;math&gt;A \subseteq G&lt;/math&gt; eine Menge von Gegenständen eines formalen Kontextes &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt;, so bezeichnet man mit<br /> :&lt;math&gt;A' := \{\, m \in M \mid \forall g \in A: g\mathrel{I}m \,\}&lt;/math&gt;<br /> die Menge der gemeinsamen Merkmale der Gegenstände in &lt;math&gt;A&lt;/math&gt;. Entsprechend definiert wird für eine Menge &lt;math&gt;B \subseteq M&lt;/math&gt; von Merkmalen von &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; die Menge<br /> :&lt;math&gt;B' := \{\, g \in G \mid \forall m \in B: g\mathrel{I}m \,\}&lt;/math&gt;<br /> aller Gegenstände, die alle Merkmale aus &lt;math&gt;B&lt;/math&gt; besitzen. Die Menge &lt;math&gt;A'&lt;/math&gt; und &lt;math&gt;B'&lt;/math&gt; werden als die ''Ableitungen'' der entsprechenden Mengen &lt;math&gt;A&lt;/math&gt; und &lt;math&gt;B&lt;/math&gt; bezeichnet und die Funktionen, welche beide mit &lt;math&gt;(\cdot)'&lt;/math&gt; benannt sind, ''Ableitungsoperatoren'' von &lt;math&gt;\mathbb{K}&lt;/math&gt; genannt.<br /> <br /> Die Ableitungsoperatoren erfüllen eine Reihe von sehr grundlegenden Eigenschaften. Sind &lt;math&gt;A,\, A_1,\, A_2&lt;/math&gt; Mengen von Gegenständen und &lt;math&gt;B,\, B_1,\, B_2&lt;/math&gt; Mengen von Merkmalen, so gilt<br /> * &lt;math&gt;A_1 \subseteq A_2\, \implies\, A_2' \subseteq A_1'&lt;/math&gt; und dual &lt;math&gt;B_1 \subseteq B_2\, \implies\, B_2' \subseteq B_1'&lt;/math&gt;,<br /> * &lt;math&gt;A \subseteq A''&lt;/math&gt; und dual &lt;math&gt;B \subseteq B''&lt;/math&gt;,<br /> * &lt;math&gt;A' = A'''&lt;/math&gt; und &lt;math&gt;B' = B'''&lt;/math&gt;,<br /> * &lt;math&gt;A \subseteq B' \iff A' \supseteq B&lt;/math&gt;.<br /> <br /> Tatsächlich definieren damit die Ableitungsoperatoren eine [[Galoisverbindung|antitone Galoisverbindung]] zwischen den [[Potenzmenge|Potenzmengenverbänden]] der Gegenstandsmenge und der Merkmalmenge. Umgekehrt lässt sich jede solche Galoisverbindung zwischen Potenzmengenverbänden als Paar von Ableitungsoperatoren eines formalen Kontextes darstellen.<br /> <br /> Zu einem formalen Kontext &lt;math&gt;\mathbb{K}&lt;/math&gt; heißt nun ein Paar &lt;math&gt;(A, B)&lt;/math&gt; ein ''formaler Begriff''&lt;ref name=&quot;GW96Basics&quot; /&gt; von &lt;math&gt;\mathbb{K}&lt;/math&gt;, falls<br /> * &lt;math&gt;A&lt;/math&gt; eine Menge von Gegenständen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist,<br /> * &lt;math&gt;B&lt;/math&gt; eine Menge von Merkmalen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist,<br /> * &lt;math&gt;A' = B&lt;/math&gt; und<br /> * &lt;math&gt;B' = A&lt;/math&gt; gilt.<br /> Die Menge &lt;math&gt;A&lt;/math&gt; wird dann ''Umfang'' und die Menge &lt;math&gt;B&lt;/math&gt; ''Inhalt'' des Begriffes &lt;math&gt;(A,B)&lt;/math&gt; genannt. Die Menge aller Begriffe wird mit &lt;math&gt;\mathfrak{B}(\mathbb{K})&lt;/math&gt; bezeichnet. Stellt man formale Kontexte als Kreuztabellen dar, so lassen sich formale Begriffe - bei geeigneter Ordnung der Gegenstände und Merkmale - als ''maximale, vollständig gefüllte Rechtecke'' in dieser Kreuztabelle verstehen.<br /> <br /> Sind nun &lt;math&gt;(A, B), (C, D) \in \mathfrak{B}(\mathbb{K})&lt;/math&gt;, so lässt sich mit<br /> :&lt;math&gt;(A, B) \le (C, D)\, \Leftrightarrow\, A \subseteq C&lt;/math&gt;<br /> eine Halbordnung auf &lt;math&gt;\mathfrak{B}(\mathbb{K})&lt;/math&gt; definieren. Diese Ordnung macht dann die Struktur &lt;math&gt;(\mathfrak{B}(\mathbb{K}), \le)&lt;/math&gt; zu einem vollständigen [[Verband (Mathematik)|Verband]]. Tatsächlich ist umgekehrt nach dem Hauptsatz der Formalen Begriffsanalyse jeder vollständige Verband ordnungsisomorph zu einem Begriffsverband.<br /> <br /> [[Datei:1-10Lattice.png|thumb|300px|Begriffsverband zum obigen Zahlenkontext.]]<br /> <br /> Begriffsverbände können als [[Ordnungsdiagramm]]e (Liniendiagramme) dargestellt werden und entfalten so die Daten in ihrer Struktur und ihren Zusammenhängen. Die Gegenstände haben dabei alle (durch Kanten verbundene) darüber stehenden Merkmale; in nebenstehendem Beispiel ist 4 gerade, zusammengesetzt und quadratisch.<br /> <br /> Mathematisch genauer kann zunächst die vereinfachte Beschriftung von Begriffsverbänden begründet werden. Betrachtet man für einen Gegenstand &lt;math&gt;g \in G&lt;/math&gt; die Menge aller Begriffe, die &lt;math&gt;g&lt;/math&gt; in ihrem Umfang haben, so hat diese Menge einen [[Filter (Mathematik)#Hauptfilter|Hauptfilter]] im Begriffsverband. Daher wird nur ''unterhalb'' des kleinsten Begriffs, der &lt;math&gt;g&lt;/math&gt; im Umfang enthält, der Gegenstand &lt;math&gt;g&lt;/math&gt; notiert. Dual dazu wird ''oberhalb'' des größten Begriffs, der ein gegebenes Merkmal &lt;math&gt;m \in M&lt;/math&gt; im Inhalt besitzt, das Merkmal &lt;math&gt;m&lt;/math&gt; notiert. Ein Begriff im Ordnungsdiagramm hat also genau dann einen Gegenstand in seinem Umfang, wenn er oberhalb des Begriffes liegt, der mit dem Gegenstand beschriftet ist. Entsprechend hat ein Begriff im Ordnungsdiagramm ein Merkmal in seinem Inhalt, wenn er unterhalb des Begriffes liegt, der mit dem Merkmal beschriftet ist.<br /> <br /> === Hauptsatz der Formalen Begriffsanalyse ===<br /> <br /> Es sei &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; ein formaler Kontext und &lt;math&gt;\underline{\mathfrak{B}}(\mathbb{K})&lt;/math&gt; sein Begriffsverband. Man kann für Gegenstände &lt;math&gt;g \in G&lt;/math&gt; und Merkmale &lt;math&gt;m \in M&lt;/math&gt; dann die Begriffe<br /> <br /> :&lt;math&gt;\gamma(g) = (\{\,g\,\}'', \{\,g\,\}'),&lt;/math&gt;<br /> :&lt;math&gt;\mu(m) = (\{\,m\,\}', \{\,m\,\}'')&lt;/math&gt;<br /> <br /> betrachten. Es wird &lt;math&gt;\gamma(g)&lt;/math&gt; der ''Gegenstandsbegriff von &lt;math&gt;g&lt;/math&gt;'' und &lt;math&gt;\mu(m)&lt;/math&gt; der ''Merkmalsbegriff von &lt;math&gt;m&lt;/math&gt;'' genannt. Weiterhin gilt<br /> <br /> :&lt;math&gt; g\mathrel{I}m \iff \gamma(g) \le \mu(m)&lt;/math&gt; <br /> <br /> Ist nun &lt;math&gt;\underline{L} = (L, \le_L)&lt;/math&gt; ein vollständiger Verband, so ist &lt;math&gt;\underline{L}&lt;/math&gt; genau dann isomorph zu &lt;math&gt;\underline{\mathfrak{B}}(\mathbb{K})&lt;/math&gt;, wenn es Abbildungen &lt;math&gt;\gamma_{\underline{L}}\colon G \to L, \mu_{\underline{L}}\colon M \to L&lt;/math&gt; gibt derart, dass<br /> <br /> :&lt;math&gt; g\mathrel{I}m \iff \gamma_{\underline{L}}(g) \le \mu_{\underline{L}}(m)&lt;/math&gt;<br /> <br /> gilt. Insbesondere ist &lt;math&gt;\underline{L}&lt;/math&gt; isomorph zu &lt;math&gt;\underline{\mathfrak{B}}(L, L, \le_L)&lt;/math&gt;.<br /> <br /> == Implikationentheorie Formaler Kontexte ==<br /> <br /> Für einen formalen Kontext &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; kann seine ''Implikationentheorie'' untersucht werden. Dabei ist eine Implikation von &lt;math&gt;\mathbb{K}&lt;/math&gt; einfach ein Paar &lt;math&gt;(A, B)&lt;/math&gt; mit &lt;math&gt;A, B \subseteq M&lt;/math&gt;, was meist mit &lt;math&gt;A \to B&lt;/math&gt; geschrieben wird. Man sagt, dass &lt;math&gt;A \to B&lt;/math&gt; in &lt;math&gt;\mathbb{K}&lt;/math&gt; ''gilt'', wenn jeder Gegenstand, der alle Merkmale aus &lt;math&gt;A&lt;/math&gt; besitzt, auch alle Merkmale aus &lt;math&gt;B&lt;/math&gt; besitzt, wenn also &lt;math&gt;A' \subseteq B'&lt;/math&gt; gilt. Diese Bedingung ist äquivalent dazu, dass &lt;math&gt;B \subseteq A''&lt;/math&gt; gilt.<br /> <br /> Ist &lt;math&gt;\mathcal{L}&lt;/math&gt; eine Menge von Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt; und ist &lt;math&gt;A \subseteq M&lt;/math&gt;, so bezeichnet man mit &lt;math&gt;\mathcal{L}(A)&lt;/math&gt; die kleinste Menge, die &lt;math&gt;A&lt;/math&gt; enthält und abgeschlossen ist unter &lt;math&gt;\mathcal{L}&lt;/math&gt;. Dabei heißt eine Menge &lt;math&gt;X \subseteq M&lt;/math&gt; ''abgeschlossen unter &lt;math&gt;\mathcal{L}&lt;/math&gt;'', falls für alle Implikationen &lt;math&gt;(A \to B) \in \mathcal{L}&lt;/math&gt; stets &lt;math&gt;A \not\subseteq X&lt;/math&gt; oder &lt;math&gt;B \subseteq X&lt;/math&gt; gilt, wenn also &lt;math&gt;A \subseteq X&lt;/math&gt; stets &lt;math&gt;B \subseteq X&lt;/math&gt; impliziert. Man sieht dann, dass die Abbildung &lt;math&gt;A \to \mathcal{L}(A)&lt;/math&gt; ein [[Hüllenoperator]] auf der Potenzmenge von &lt;math&gt;M&lt;/math&gt; ist.<br /> <br /> Ist &lt;math&gt;A \to B&lt;/math&gt; eine Implikation von &lt;math&gt;\mathbb{K}&lt;/math&gt;, so ''folgt'' &lt;math&gt;A \to B&lt;/math&gt; aus &lt;math&gt;\mathcal{L}&lt;/math&gt;, falls &lt;math&gt;B \subseteq \mathcal{L}(A)&lt;/math&gt; gilt. Dies ist äquivalent dazu, dass in jedem formalen Kontext, in dem alle Implikationen aus &lt;math&gt;\mathcal{L}&lt;/math&gt; gelten, auch stets die Implikation &lt;math&gt;A \to B&lt;/math&gt; gilt. <br /> <br /> Eine ''Basis'' für &lt;math&gt;\mathbb{K}&lt;/math&gt; ist dann eine Menge &lt;math&gt;\mathcal{L}&lt;/math&gt; von gültigen Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt;, so dass jede ([[semantisch]]) gültige Implikation aus &lt;math&gt;\mathbb{K}&lt;/math&gt; bereits aus &lt;math&gt;\mathcal{L}&lt;/math&gt; folgt, durch Anwendung geeigneter [[syntaktisch]]er [[Inferenzregel]]n wie der ''Armstrong-Regeln''&lt;ref&gt;W.W. Armstrong: Dependency structures of data base relationships. ''IFIP congress'', Genf 1974, S. 580 - 583.&lt;/ref&gt;. Die in diesem neuen Sinn abgeschlossene Menge aller Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist eine [[Theorie#Definition|Theorie]], da sie außerdem laut Konstruktion zum Beispiel bezüglich des zugrunde liegenden Kontexts [[Erfüllbarkeit|erfüllbar]] ist.<br /> <br /> Die Basis heißt ''irredundant'', falls sie &lt;math&gt;\subseteq&lt;/math&gt;-minimal mit dieser Eigenschaft ist. Ein Beispiel für eine irredundante Basis ist die ''kanonische Basis'' (siehe auch [[Merkmalexploration#Mathematische Grundlagen|Merkmalexploration]]), die darüber hinaus die Eigenschaft hat, auch minimal bezüglich der Größe der Basis zu sein. <br /> <br /> Es gilt, dass eine Menge &lt;math&gt;\mathcal{L}&lt;/math&gt; von Implikationen genau dann eine Basis eines Kontextes &lt;math&gt;\mathbb{K}&lt;/math&gt; ist, wenn die Menge der unter &lt;math&gt;\mathcal{L}&lt;/math&gt; abgeschlossenen Mengen genau die der Inhalte von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist.<br /> <br /> === Merkmalexploration ===<br /> {{Hauptartikel|Merkmalexploration}}<br /> <br /> Es ist möglich, die Implikationentheorie eines bestimmten Themengebietes mit Hilfe eines formalen Kontextes darzustellen. Dies bedeutet insbesondere, dass man dies mit Hilfe einer ausreichenden Menge von Beispielen tun kann, die dann die Gegenstände des formalen Kontextes werden. Theoretisch kann solch eine Menge von Beispielen von einem menschlichen Experten oder auch einer Maschine angegeben werden.<br /> <br /> Dabei entsteht allerdings das Problem, dass weder von vornherein garantiert ist, dass eine ausreichende Menge von Beispielen angegeben ist, noch, ob nicht einige generierte Beispiele redundant sind, da bereits gegebene Beispiele ausreichen. Unter den Gesichtspunkten, dass die Generierung guter Beispiele schwierig ist, die Befragung von Experten oder gar neue Experimente teuer sind, und Literatursuche oder Algorithmen aufwendig werden können, ist dies ein ernstzunehmendes Problem.<br /> <br /> Abhilfe kann hier der Algorithmus der Merkmalexploration schaffen. Ausgehend von einer bereits bekannten Menge von Implikationen und einer bereits bekannten Menge von Beispielen aus dem Themengebiet schlägt der Algorithmus Implikationen vor, die dann von einem Experten (menschlich oder nicht) akzeptiert oder zurückgewiesen werden können. Dabei soll eine Implikation genau dann akzeptiert werden, wenn diese im besagten Themengebiet gültig ist. Wird eine Implikation zurückgewiesen, so muss der Experte ein Gegenbeispiel erzeugen, das dann von einem Experten (menschlich oder nicht) akzeptiert oder zurückgewiesen werden kann. Dabei soll eine Implikation genau dann akzeptiert werden, wenn diese im besagten Themengebiet gültig ist. Durch ein akzeptiertes Gegenbeispiel, wird die Implikation widerlegt und somit eine kleinstmögliche Menge von akzeptierten Implikationen generiert, die am Ende das Themengebiet vollständig beschreibt. Darüber hinaus wird auch die Menge von Beispielen vervollständigt.<br /> <br /> == Anwendungen ==<br /> <br /> Die Formale Begriffsanalyse lässt sich als qualitative Methode zur Datenanalyse einsetzen, etwa in Data- und Textmining, Wissensmanagement, Semantic Web, Softwareentwicklung, Wirtschaft oder Biologie.&lt;ref&gt;Bernhard Ganter, Gerd Stumme, Rudolf Wille (Hg.): ''Formal Concept Analysis. Foundations and Applications''; Springer, 2005, ISBN 3-540-27891-5. [http://books.google.de/books?id=nEh4D4e88NwC&amp;printsec=frontcover&amp;hl=de&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false Online-Vorschau]&lt;/ref&gt;&lt;ref&gt;Konferenzbände wie zur ''[http://www.springer.com/computer/ai/book/978-3-642-20513-2 International Conference on Formal Concept Analysis (ICFCA 2011)]'' oder zu ''[http://cla.inf.upol.cz/papers.html Concept Lattices and Their Applications (CLA)]'' mit [[Open Access]]-Artikeln aller Konferenzen seit 2004.&lt;/ref&gt; Eine direkte Anwendung ist es, die ursprünglichen Daten anders zu strukturieren und zu visualisieren.<br /> <br /> == Literatur ==<br /> * {{Literatur | Autor=Bernhard Ganter, Rudolf Wille | Titel=Formale Begriffsanalyse | Verlag=Springer | Jahr=1996 | ISBN=3-540-60868-0}}<br /> * {{Literatur | Herausgeber=Bernhard Ganter, Gerd Stumme, Rudolf Wille | Titel=Formal Concept Analysis. Foundations and Applications | Verlag=Springer | Jahr=2005 | ISBN=3-540-27891-5 | Online=[http://books.google.de/books?id=nEh4D4e88NwC&amp;printsec=frontcover&amp;hl=de&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false Online-Vorschau]}}<br /> * {{Literatur | Autor=R. Missaoui, Jürg Schmid | Titel=Formal Concept Analysis | Verlag=Springer | Jahr=2006 | ISBN=3-540-32203-5}}<br /> * {{Literatur | Herausgeber=Raoul Medina, Sergei Obiedkov | Titel=Formal Concept Analysis. 6th International Conference, ICFCA 2008, Montreal, Canada, February 25-28, 2008 | Verlag=Springer | Ort=Heidelberg | Jahr=2008 | ISBN=978-3-540-78136-3 | Kommentar=LNCS/LNAI 4933 | Online=[http://www.springerlink.com/content/978-3-540-78136-3 Online-Version]}}<br /> <br /> == Weblinks ==<br /> * [http://www.upriss.org.uk/fca/ Formal Concept Analysis] Seite von Uta Priss, mit Links zu weiteren Programmen<br /> * [http://www.math.tu-dresden.de/~ganter/fba.html The Dresden Formal Concept Analysis Page] von Bernhard Ganter<br /> * [http://www.bibsonomy.org/ Literatur und Weblinks nicht nur zu FBA (social bookmarking)]<br /> <br /> == Einzelnachweise ==<br /> &lt;references/&gt;<br /> <br /> [[Kategorie:Algebra]]<br /> [[Kategorie:Mathematische Logik]]<br /> [[Kategorie:Ordnungstheorie]]<br /> [[Kategorie:Ontologie]]<br /> [[Kategorie:Künstliche Intelligenz]]<br /> [[Kategorie:Business Intelligence]]</div> MickHaskell https://de.wikipedia.org/w/index.php?title=Formale_Begriffsanalyse&diff=140524393 Formale Begriffsanalyse 2015-04-03T09:27:52Z <p>MickHaskell: /* Formale Kontexte und Formale Begriffe */</p> <hr /> <div>'''Formale Begriffsanalyse''' (FBA) ist ein Teil der mathematischen [[Ordnungstheorie]]. Ihre ursprüngliche Motivation ist die konkrete Darstellung vollständiger [[Verband (Mathematik)|Verbände]] und deren Eigenschaften mittels ''formaler Kontexte'', um Eigenschaften dieser Verbände als Eigenschaften der zugeordneten Kontexte zu studieren. Wegen der englischen Übersetzung ''Formal Concept Analysis'' findet man zuweilen im Deutschen auch die eigentlich falsche Bezeichnung ''Formale Konzeptanalyse''.<br /> <br /> Die Theorie in ihrer heutigen Form geht zurück auf die Darmstädter Forschungsgruppe um [[Rudolf Wille (Mathematiker)|Rudolf Wille]], [[Bernhard Ganter]] und [[Peter Burmeister]], in welcher <br /> Anfang der 1980er Jahre die Formale Begriffsanalyse entstand. Die mathematischen Grundlagen wurden jedoch bereits von [[Garrett Birkhoff]] in den 1930er Jahren im Rahmen der allgemeinen [[Verbandstheorie]] geschaffen. Vor den Arbeiten der Darmstädter Gruppe gab es bereits Ansätze in verschiedenen französischen Gruppen. Philosophische Fundierungen der Formalen Begriffsanalyse berufen sich insbesondere auf [[Charles S. Peirce]] und [[Hartmut von Hentig]].<br /> <br /> FBA findet in vielfältigen Bereichen praktische Anwendung, wie [[Datamining|Data-]] und [[Textmining]], [[Wissensmanagement]], [[Semantic Web]], [[Softwareentwicklung]], [[Wirtschaft]] oder [[Biologie]].<br /> <br /> == Motivation und philosophischer Hintergrund ==<br /> <br /> Im Artikel ''Restructuring Lattice Theory'' (1982), der die Formale Begriffsanalyse als Disziplin begründete, wird als Motivation das Unbehagen an der Verbandstheorie und der Reinen Mathematik allgemein genannt: Die oft durch „geistigen Hochleistungssport“ erreichte Produktion theoretischer Resultate sei beeindruckend, die Verknüpfungen zwischen benachbarten Gebieten und sogar Teilen einer Theorie würden jedoch schwächer.<br /> <br /> {{Zitat | Text=Die Restrukturierung der Verbandstheorie ist ein Versuch, Verbindungen zu unserer allgemeinen Kultur wieder zu verstärken, indem die Theorie so konkret wie möglich interpretiert und dadurch eine bessere Kommunikation zwischen Verbandstheoretikern und potentiellen Anwendern der Verbandstheorie gefördert wird. | Autor=Rudolf Wille | Quelle=&lt;ref name=&quot;restructuring&quot;&gt;Rudolf Wille: ''[http://books.google.de/books?hl=de&amp;lr=&amp;id=gwpq0acO3kgC&amp;oi=fnd&amp;pg=PA314&amp;dq=Wille+Restructuring+Lattice+Theory&amp;ots=zYmNQeCJKb&amp;sig=TyDygU5lU_91iJWIuJbNi2or6Ls#v=onepage&amp;q=Wille%20Restructuring%20Lattice%20Theory&amp;f=false Restructuring lattice theory: An approach based on hierarchies of concepts.]'' Nachdruck in: ICFCA '09: Proceedings of the 7th International Conference on Formal Concept Analysis, Berlin, Heidelberg, 2009, S. 314. Eigene Übersetzung [[Benutzer:Jwollbold|Jwollbold]]; „geistiger Hochleistungssport“: „elaborate mental gymnastics“.&lt;/ref&gt;}}<br /> <br /> Dieses Ziel geht direkt zurück auf Hartmut von Hentig, der 1972 eine Restrukturierung der Wissenschaften forderte, „um sie besser lernbar, gegenseitig verfügbar und allgemeiner (d.h. jenseits der Fachkompetenz) kritisierbar zu machen.“&lt;ref&gt;Hartmut von Hentig: ''Magier oder Magister? Über die Einheit der Wissenschaft im Verständigungsprozeß''. Klett 1972 / Suhrkamp 1974. Zitiert nach Karl Erich Wolff: ''[http://www.fbmn.h-da.de/~wolff/Publikationen/Ordnung_Wille_und_Begriff.doc Ordnung, Wille und Begriff] ([[Microsoft Word|MS Word]]; 2,0&amp;nbsp;MB)'', Ernst Schröder Zentrum für Begriffliche Wissensverarbeitung, Darmstadt 2003.&lt;/ref&gt; Somit zielt auch FBA von ihren Ursprüngen her auf Interdisziplinarität und demokratische Kontrolle von Forschung.&lt;ref name=&quot;AttrExGeneRegProc&quot;&gt;Johannes Wollbold: ''[http://www.db-thueringen.de/servlets/DerivateServlet/Derivate-24615/Wollbold/Dissertation.pdf Attribute Exploration of Gene Regulatory Processes] (PDF; 4,6&amp;nbsp;MB)''. Doktorarbeit, Universität Jena 2011, S. 9.&lt;/ref&gt;<br /> <br /> Sie korrigiert den ursprünglichen Ansatz der Verbandstheorie mit der Entstehung der [[Formale Logik|Formalen Logik]] im 19. Jahrhundert. Während ein Begriff als einstelliges [[Prädikat (Logik)|Prädikat]] auf seinen Umfang reduziert wurde (ähnlich auch in der [[Modelltheorie]]), sollte nun durch Berücksichtigung auch des Inhalts die Begriffslehre wieder weniger abstrakt werden.&lt;ref name=&quot;restructuring&quot; /&gt; Damit orientiert sich FBA an den Kategorien [[Extension und Intension]] der [[Linguistik]] und klassischen [[Begriffslogik]]. Ihr Begriffsverständnis entspricht auch dem der [[Begriff#Terminologische_Festlegungen_in_DIN-Normen|DIN-Normen]] 2330 ''Begriffe und Benennungen'', DIN 2331 ''Begriffssysteme und ihre Darstellung'' sowie DIN 2342 ''Begriffe der Terminologielehre''.&lt;ref&gt;Ganter, Wille: ''Formale Begriffsanalyse'', 1996, S. 1.&lt;/ref&gt;<br /> <br /> Klarheit von Begriffen wird im Sinn von Charles S. Peirce's [[Pragmatische_Maxime#Von_der_Klarheit_der_Gedanken|Pragmatischer Maxime]] dadurch angestrebt, dass beobachtbare, elementare Eigenschaften der [[Subsumption|subsumierten]] Gegenstände entfaltet werden.&lt;ref name=&quot;AttrExGeneRegProc&quot; /&gt; In seiner Spätphilosophie ging Peirce davon aus, dass logisches Denken auf das Erfassen von [[Wirklichkeit]] zielt, durch den Dreischritt Begriff, [[Urteil (Logik)|Urteil]] und [[Syllogismus|Schluss]]. Mathematik abstrahiert logisches Denken, entwickelt Formen [[Möglichkeit|möglicher]] Realität und kann daher [[Kommunikative_Vernunft#Kommunikative_Rationalität|rationale Kommunikation]] unterstützen. Rudolf Wille definiert vor diesem Hintergrund:<br /> {{Zitat | Text=Ziel und Bedeutung Formaler Begriffsanalyse als mathematische Theorie von Begriffen und Begriffshierarchien ist es, die rationale Kommunikation von Menschen zu unterstützen, indem sie mathematisch geeignete Begriffsstrukturen entwickelt, die logisch aktiviert werden können. | Autor=Rudolf Wille | Quelle=&lt;ref&gt;Rudolf Wille: [http://books.google.de/books?hl=de&amp;lr=&amp;id=nEh4D4e88NwC&amp;oi=fnd&amp;pg=PA1&amp;dq=Formal+Concept+Analysis+Fondations+and+Applications&amp;ots=GSCkikE8pv&amp;sig=8TJOPrSW07sJqLH0hF8_-HH_gb4#v=onepage&amp;q=Formal%20Concept%20Analysis%20Fondations%20and%20Applications&amp;f=false Formal Concept Analysis as Mathematical Theory of Concepts and Concept Hierarchies]. In: B. Ganter et al.: ''Formal Concept Analysis. Foundations and Applications'', 2005, S. 1f. Eigene Übersetzung [[Benutzer:Jwollbold|Jwollbold]].&lt;/ref&gt;}}<br /> <br /> == Mathematische Grundlagen ==<br /> <br /> Das Hauptziel der Formalen Begriffsanalyse ist die Darstellung von vollständigen Verbänden mittels formaler Kontexte. Darüber hinaus erlaubt sie aber auch umgekehrt die Untersuchung von Daten in Form formaler Kontexte mit Mitteln der Ordnungstheorie. Die dafür grundlegenden Definitionen sollen in diesem Abschnitt diskutiert werden.<br /> <br /> === Formale Kontexte und Formale Begriffe ===<br /> <br /> Gegeben seien zwei Mengen &lt;math&gt;G,\, M&lt;/math&gt; und eine [[Relation]] &lt;math&gt;I \subseteq G\times M&lt;/math&gt;. Das Tripel &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; wird dann als ''formaler Kontext''&lt;ref name=&quot;GW96Basics&quot;&gt;Bernhard Ganter, Rudolf Wille: ''Formale Begriffsanalyse;'' Springer, Heidelberg, 1996, Kap. 1 „Begriffsverbände von Kontexten“. ISBN 3-540-60868-0.&lt;/ref&gt; bezeichnet, &lt;math&gt;G&lt;/math&gt; als seine ''Gegenstandsmenge'' und &lt;math&gt;M&lt;/math&gt; als seine ''Merkmalsmenge''; für einen Gegenstand &lt;math&gt;g \in G&lt;/math&gt; und ein Merkmal &lt;math&gt;m \in M&lt;/math&gt; bedeutet &lt;math&gt;(g, m) \in I&lt;/math&gt; „der Gegenstand &lt;math&gt;g&lt;/math&gt; ''hat'' das Merkmal &lt;math&gt;m&lt;/math&gt;“. Oft wird auch &lt;math&gt;g\mathrel{I}m&lt;/math&gt; statt &lt;math&gt;(g,m) \in I&lt;/math&gt; geschrieben. Die Menge &lt;math&gt;I&lt;/math&gt; wird als ''Inzidenzrelation'' des formalen Kontextes bezeichnet.<br /> <br /> Sind die Mengen &lt;math&gt;G&lt;/math&gt; und &lt;math&gt;M&lt;/math&gt; endlich, so lassen sich formale Kontexte gut in Form von „Kreuztabellen“ darstellen. Man beachte dabei, dass die Gegenstände und Merkmale in dieser Darstellung willkürlich geordnet werden können. Diese Ordnung ist dann aber nicht Teil des formalen Kontextes, sondern nur seiner Darstellung.<br /> <br /> [[Datei:1-10Context.gif|thumb|200px|Ein formaler Kontext zu Eigenschaften der Zahlen 1-10.]]<br /> <br /> Ist &lt;math&gt;A \subseteq G&lt;/math&gt; eine Menge von Gegenständen eines formalen Kontextes &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt;, so bezeichnet man mit<br /> :&lt;math&gt;A' := \{\, m \in M \mid \forall g \in A: g\mathrel{I}m \,\}&lt;/math&gt;<br /> die Menge der gemeinsamen Merkmale der Gegenstände in &lt;math&gt;A&lt;/math&gt;. Entsprechend definiert wird für eine Menge &lt;math&gt;B \subseteq M&lt;/math&gt; von Merkmalen von &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; die Menge<br /> :&lt;math&gt;B' := \{\, g \in G \mid \forall m \in B: g\mathrel{I}m \,\}&lt;/math&gt;<br /> aller Gegenstände, die alle Merkmale aus &lt;math&gt;B&lt;/math&gt; besitzen. Die Menge &lt;math&gt;A'&lt;/math&gt; und &lt;math&gt;B'&lt;/math&gt; werden als die ''Ableitungen'' der entsprechenden Mengen &lt;math&gt;A&lt;/math&gt; und &lt;math&gt;B&lt;/math&gt; bezeichnet und die Funktionen, welche beide mit &lt;math&gt;(\cdot)'&lt;/math&gt; benannt sind, ''Ableitungsoperatoren'' von &lt;math&gt;\mathbb{K}&lt;/math&gt; genannt.<br /> <br /> Die Ableitungsoperatoren erfüllen eine Reihe von sehr grundlegenden Eigenschaften. Sind &lt;math&gt;A,\, A_1,\, A_2&lt;/math&gt; Mengen von Gegenständen und &lt;math&gt;B,\, B_1,\, B_2&lt;/math&gt; Mengen von Merkmalen, so gilt<br /> * &lt;math&gt;A_1 \subseteq A_2\, \implies\, A_2' \subseteq A_1'&lt;/math&gt; und dual &lt;math&gt;B_1 \subseteq B_2\, \implies\, B_2' \subseteq B_1'&lt;/math&gt;,<br /> * &lt;math&gt;A \subseteq A''&lt;/math&gt; und dual &lt;math&gt;B \subseteq B''&lt;/math&gt;,<br /> * &lt;math&gt;A' = A'''&lt;/math&gt; und &lt;math&gt;B' = B'''&lt;/math&gt;,<br /> * &lt;math&gt;A \subseteq B' \iff A' \supseteq B&lt;/math&gt;.<br /> <br /> Tatsächlich definieren damit die Ableitungsoperatoren eine [[Galoisverbindung|antitone Galoisverbindung]] zwischen den [[Potenzmenge|Potenzmengenverbänden]] der Gegenstandsmenge und der Merkmalmenge. Umgekehrt lässt sich jede solche Galoisverbindung zwischen Potenzmengenverbänden als Paar von Ableitungsoperatoren eines formalen Kontextes darstellen.<br /> <br /> Zu einem formalen Kontext &lt;math&gt;\mathbb{K}&lt;/math&gt; heißt nun ein Paar &lt;math&gt;(A, B)&lt;/math&gt; ein ''formaler Begriff''&lt;ref name=&quot;GW96Basics&quot; /&gt; von &lt;math&gt;\mathbb{K}&lt;/math&gt;, falls<br /> * &lt;math&gt;A&lt;/math&gt; eine Menge von Gegenständen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist,<br /> * &lt;math&gt;B&lt;/math&gt; eine Menge von Merkmalen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist,<br /> * &lt;math&gt;A' = B&lt;/math&gt; und<br /> * &lt;math&gt;B' = A&lt;/math&gt; gilt.<br /> Die Menge &lt;math&gt;A&lt;/math&gt; wird dann ''Umfang'' und die Menge &lt;math&gt;B&lt;/math&gt; ''Inhalt'' des Begriffes &lt;math&gt;(A,B)&lt;/math&gt; genannt. Die Menge aller Begriffe wird mit &lt;math&gt;\mathfrak{B}(\mathbb{K})&lt;/math&gt; bezeichnet. Stellt man formale Kontexte als Kreuztabellen dar und wählt dabei eine geeignete Ordnung auf den Gegenständen und Merkmalen, so lassen sich formale Begriffe als ''maximale Rechtecke'' in dieser Kreuztabelle verstehen.<br /> <br /> Sind nun &lt;math&gt;(A, B), (C, D) \in \mathfrak{B}(\mathbb{K})&lt;/math&gt;, so lässt sich mit<br /> :&lt;math&gt;(A, B) \le (C, D)\, \Leftrightarrow\, A \subseteq C&lt;/math&gt;<br /> eine Ordnung auf &lt;math&gt;\mathfrak{B}(\mathbb{K})&lt;/math&gt; definieren. Diese Ordnung macht dann die Struktur &lt;math&gt;(\mathfrak{B}(\mathbb{K}), \le)&lt;/math&gt; zu einem vollständigen [[Verband (Mathematik)|Verband]]. Tatsächlich ist umgekehrt nach dem Hauptsatz der Formalen Begriffsanalyse jeder vollständige Verband ordnungsisomorph zu einem Begriffsverband.<br /> <br /> [[Datei:1-10Lattice.png|thumb|300px|Begriffsverband zum obigen Zahlenkontext.]]<br /> <br /> Begriffsverbände können als [[Ordnungsdiagramm]]e (Liniendiagramme) dargestellt werden und entfalten so die Daten in ihrer Struktur und ihren Zusammenhängen. Die Gegenstände haben dabei alle (durch Kanten verbundene) darüber stehenden Merkmale; in nebenstehendem Beispiel ist 4 gerade, zusammengesetzt und quadratisch.<br /> <br /> Mathematisch genauer kann zunächst die vereinfachte Beschriftung von Begriffsverbänden begründet werden. Betrachtet man für einen Gegenstand &lt;math&gt;g \in G&lt;/math&gt; die Menge aller Begriffe, die &lt;math&gt;g&lt;/math&gt; in ihrem Umfang haben, so hat diese Menge einen [[Filter (Mathematik)#Hauptfilter|Hauptfilter]] im Begriffsverband. Daher wird nur ''unterhalb'' des kleinsten Begriffs, der &lt;math&gt;g&lt;/math&gt; im Umfang enthält, der Gegenstand &lt;math&gt;g&lt;/math&gt; notiert. Dual dazu wird ''oberhalb'' des größten Begriffs, der ein gegebenes Merkmal &lt;math&gt;m \in M&lt;/math&gt; im Inhalt besitzt, das Merkmal &lt;math&gt;m&lt;/math&gt; notiert. Ein Begriff im Ordnungsdiagramm hat also genau dann einen Gegenstand in seinem Umfang, wenn er oberhalb des Begriffes liegt, der mit dem Gegenstand beschriftet ist. Entsprechend hat ein Begriff im Ordnungsdiagramm ein Merkmal in seinem Inhalt, wenn er unterhalb des Begriffes liegt, der mit dem Merkmal beschriftet ist.<br /> <br /> === Hauptsatz der Formalen Begriffsanalyse ===<br /> <br /> Es sei &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; ein formaler Kontext und &lt;math&gt;\underline{\mathfrak{B}}(\mathbb{K})&lt;/math&gt; sein Begriffsverband. Man kann für Gegenstände &lt;math&gt;g \in G&lt;/math&gt; und Merkmale &lt;math&gt;m \in M&lt;/math&gt; dann die Begriffe<br /> <br /> :&lt;math&gt;\gamma(g) = (\{\,g\,\}'', \{\,g\,\}'),&lt;/math&gt;<br /> :&lt;math&gt;\mu(m) = (\{\,m\,\}', \{\,m\,\}'')&lt;/math&gt;<br /> <br /> betrachten. Es wird &lt;math&gt;\gamma(g)&lt;/math&gt; der ''Gegenstandsbegriff von &lt;math&gt;g&lt;/math&gt;'' und &lt;math&gt;\mu(m)&lt;/math&gt; der ''Merkmalsbegriff von &lt;math&gt;m&lt;/math&gt;'' genannt. Weiterhin gilt<br /> <br /> :&lt;math&gt; g\mathrel{I}m \iff \gamma(g) \le \mu(m)&lt;/math&gt; <br /> <br /> Ist nun &lt;math&gt;\underline{L} = (L, \le_L)&lt;/math&gt; ein vollständiger Verband, so ist &lt;math&gt;\underline{L}&lt;/math&gt; genau dann isomorph zu &lt;math&gt;\underline{\mathfrak{B}}(\mathbb{K})&lt;/math&gt;, wenn es Abbildungen &lt;math&gt;\gamma_{\underline{L}}\colon G \to L, \mu_{\underline{L}}\colon M \to L&lt;/math&gt; gibt derart, dass<br /> <br /> :&lt;math&gt; g\mathrel{I}m \iff \gamma_{\underline{L}}(g) \le \mu_{\underline{L}}(m)&lt;/math&gt;<br /> <br /> gilt. Insbesondere ist &lt;math&gt;\underline{L}&lt;/math&gt; isomorph zu &lt;math&gt;\underline{\mathfrak{B}}(L, L, \le_L)&lt;/math&gt;.<br /> <br /> == Implikationentheorie Formaler Kontexte ==<br /> <br /> Für einen formalen Kontext &lt;math&gt;\mathbb{K} = (G, M, I)&lt;/math&gt; kann seine ''Implikationentheorie'' untersucht werden. Dabei ist eine Implikation von &lt;math&gt;\mathbb{K}&lt;/math&gt; einfach ein Paar &lt;math&gt;(A, B)&lt;/math&gt; mit &lt;math&gt;A, B \subseteq M&lt;/math&gt;, was meist mit &lt;math&gt;A \to B&lt;/math&gt; geschrieben wird. Man sagt, dass &lt;math&gt;A \to B&lt;/math&gt; in &lt;math&gt;\mathbb{K}&lt;/math&gt; ''gilt'', wenn jeder Gegenstand, der alle Merkmale aus &lt;math&gt;A&lt;/math&gt; besitzt, auch alle Merkmale aus &lt;math&gt;B&lt;/math&gt; besitzt, wenn also &lt;math&gt;A' \subseteq B'&lt;/math&gt; gilt. Diese Bedingung ist äquivalent dazu, dass &lt;math&gt;B \subseteq A''&lt;/math&gt; gilt.<br /> <br /> Ist &lt;math&gt;\mathcal{L}&lt;/math&gt; eine Menge von Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt; und ist &lt;math&gt;A \subseteq M&lt;/math&gt;, so bezeichnet man mit &lt;math&gt;\mathcal{L}(A)&lt;/math&gt; die kleinste Menge, die &lt;math&gt;A&lt;/math&gt; enthält und abgeschlossen ist unter &lt;math&gt;\mathcal{L}&lt;/math&gt;. Dabei heißt eine Menge &lt;math&gt;X \subseteq M&lt;/math&gt; ''abgeschlossen unter &lt;math&gt;\mathcal{L}&lt;/math&gt;'', falls für alle Implikationen &lt;math&gt;(A \to B) \in \mathcal{L}&lt;/math&gt; stets &lt;math&gt;A \not\subseteq X&lt;/math&gt; oder &lt;math&gt;B \subseteq X&lt;/math&gt; gilt, wenn also &lt;math&gt;A \subseteq X&lt;/math&gt; stets &lt;math&gt;B \subseteq X&lt;/math&gt; impliziert. Man sieht dann, dass die Abbildung &lt;math&gt;A \to \mathcal{L}(A)&lt;/math&gt; ein [[Hüllenoperator]] auf der Potenzmenge von &lt;math&gt;M&lt;/math&gt; ist.<br /> <br /> Ist &lt;math&gt;A \to B&lt;/math&gt; eine Implikation von &lt;math&gt;\mathbb{K}&lt;/math&gt;, so ''folgt'' &lt;math&gt;A \to B&lt;/math&gt; aus &lt;math&gt;\mathcal{L}&lt;/math&gt;, falls &lt;math&gt;B \subseteq \mathcal{L}(A)&lt;/math&gt; gilt. Dies ist äquivalent dazu, dass in jedem formalen Kontext, in dem alle Implikationen aus &lt;math&gt;\mathcal{L}&lt;/math&gt; gelten, auch stets die Implikation &lt;math&gt;A \to B&lt;/math&gt; gilt. <br /> <br /> Eine ''Basis'' für &lt;math&gt;\mathbb{K}&lt;/math&gt; ist dann eine Menge &lt;math&gt;\mathcal{L}&lt;/math&gt; von gültigen Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt;, so dass jede ([[semantisch]]) gültige Implikation aus &lt;math&gt;\mathbb{K}&lt;/math&gt; bereits aus &lt;math&gt;\mathcal{L}&lt;/math&gt; folgt, durch Anwendung geeigneter [[syntaktisch]]er [[Inferenzregel]]n wie der ''Armstrong-Regeln''&lt;ref&gt;W.W. Armstrong: Dependency structures of data base relationships. ''IFIP congress'', Genf 1974, S. 580 - 583.&lt;/ref&gt;. Die in diesem neuen Sinn abgeschlossene Menge aller Implikationen von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist eine [[Theorie#Definition|Theorie]], da sie außerdem laut Konstruktion zum Beispiel bezüglich des zugrunde liegenden Kontexts [[Erfüllbarkeit|erfüllbar]] ist.<br /> <br /> Die Basis heißt ''irredundant'', falls sie &lt;math&gt;\subseteq&lt;/math&gt;-minimal mit dieser Eigenschaft ist. Ein Beispiel für eine irredundante Basis ist die ''kanonische Basis'' (siehe auch [[Merkmalexploration#Mathematische Grundlagen|Merkmalexploration]]), die darüber hinaus die Eigenschaft hat, auch minimal bezüglich der Größe der Basis zu sein. <br /> <br /> Es gilt, dass eine Menge &lt;math&gt;\mathcal{L}&lt;/math&gt; von Implikationen genau dann eine Basis eines Kontextes &lt;math&gt;\mathbb{K}&lt;/math&gt; ist, wenn die Menge der unter &lt;math&gt;\mathcal{L}&lt;/math&gt; abgeschlossenen Mengen genau die der Inhalte von &lt;math&gt;\mathbb{K}&lt;/math&gt; ist.<br /> <br /> === Merkmalexploration ===<br /> {{Hauptartikel|Merkmalexploration}}<br /> <br /> Es ist möglich, die Implikationentheorie eines bestimmten Themengebietes mit Hilfe eines formalen Kontextes darzustellen. Dies bedeutet insbesondere, dass man dies mit Hilfe einer ausreichenden Menge von Beispielen tun kann, die dann die Gegenstände des formalen Kontextes werden. Theoretisch kann solch eine Menge von Beispielen von einem menschlichen Experten oder auch einer Maschine angegeben werden.<br /> <br /> Dabei entsteht allerdings das Problem, dass weder von vornherein garantiert ist, dass eine ausreichende Menge von Beispielen angegeben ist, noch, ob nicht einige generierte Beispiele redundant sind, da bereits gegebene Beispiele ausreichen. Unter den Gesichtspunkten, dass die Generierung guter Beispiele schwierig ist, die Befragung von Experten oder gar neue Experimente teuer sind, und Literatursuche oder Algorithmen aufwendig werden können, ist dies ein ernstzunehmendes Problem.<br /> <br /> Abhilfe kann hier der Algorithmus der Merkmalexploration schaffen. Ausgehend von einer bereits bekannten Menge von Implikationen und einer bereits bekannten Menge von Beispielen aus dem Themengebiet schlägt der Algorithmus Implikationen vor, die dann von einem Experten (menschlich oder nicht) akzeptiert oder zurückgewiesen werden können. Dabei soll eine Implikation genau dann akzeptiert werden, wenn diese im besagten Themengebiet gültig ist. Wird eine Implikation zurückgewiesen, so muss der Experte ein Gegenbeispiel erzeugen, das dann von einem Experten (menschlich oder nicht) akzeptiert oder zurückgewiesen werden kann. Dabei soll eine Implikation genau dann akzeptiert werden, wenn diese im besagten Themengebiet gültig ist. Durch ein akzeptiertes Gegenbeispiel, wird die Implikation widerlegt und somit eine kleinstmögliche Menge von akzeptierten Implikationen generiert, die am Ende das Themengebiet vollständig beschreibt. Darüber hinaus wird auch die Menge von Beispielen vervollständigt.<br /> <br /> == Anwendungen ==<br /> <br /> Die Formale Begriffsanalyse lässt sich als qualitative Methode zur Datenanalyse einsetzen, etwa in Data- und Textmining, Wissensmanagement, Semantic Web, Softwareentwicklung, Wirtschaft oder Biologie.&lt;ref&gt;Bernhard Ganter, Gerd Stumme, Rudolf Wille (Hg.): ''Formal Concept Analysis. Foundations and Applications''; Springer, 2005, ISBN 3-540-27891-5. [http://books.google.de/books?id=nEh4D4e88NwC&amp;printsec=frontcover&amp;hl=de&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false Online-Vorschau]&lt;/ref&gt;&lt;ref&gt;Konferenzbände wie zur ''[http://www.springer.com/computer/ai/book/978-3-642-20513-2 International Conference on Formal Concept Analysis (ICFCA 2011)]'' oder zu ''[http://cla.inf.upol.cz/papers.html Concept Lattices and Their Applications (CLA)]'' mit [[Open Access]]-Artikeln aller Konferenzen seit 2004.&lt;/ref&gt; Eine direkte Anwendung ist es, die ursprünglichen Daten anders zu strukturieren und zu visualisieren.<br /> <br /> == Literatur ==<br /> * {{Literatur | Autor=Bernhard Ganter, Rudolf Wille | Titel=Formale Begriffsanalyse | Verlag=Springer | Jahr=1996 | ISBN=3-540-60868-0}}<br /> * {{Literatur | Herausgeber=Bernhard Ganter, Gerd Stumme, Rudolf Wille | Titel=Formal Concept Analysis. Foundations and Applications | Verlag=Springer | Jahr=2005 | ISBN=3-540-27891-5 | Online=[http://books.google.de/books?id=nEh4D4e88NwC&amp;printsec=frontcover&amp;hl=de&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false Online-Vorschau]}}<br /> * {{Literatur | Autor=R. Missaoui, Jürg Schmid | Titel=Formal Concept Analysis | Verlag=Springer | Jahr=2006 | ISBN=3-540-32203-5}}<br /> * {{Literatur | Herausgeber=Raoul Medina, Sergei Obiedkov | Titel=Formal Concept Analysis. 6th International Conference, ICFCA 2008, Montreal, Canada, February 25-28, 2008 | Verlag=Springer | Ort=Heidelberg | Jahr=2008 | ISBN=978-3-540-78136-3 | Kommentar=LNCS/LNAI 4933 | Online=[http://www.springerlink.com/content/978-3-540-78136-3 Online-Version]}}<br /> <br /> == Weblinks ==<br /> * [http://www.upriss.org.uk/fca/ Formal Concept Analysis] Seite von Uta Priss, mit Links zu weiteren Programmen<br /> * [http://www.math.tu-dresden.de/~ganter/fba.html The Dresden Formal Concept Analysis Page] von Bernhard Ganter<br /> * [http://www.bibsonomy.org/ Literatur und Weblinks nicht nur zu FBA (social bookmarking)]<br /> <br /> == Einzelnachweise ==<br /> &lt;references/&gt;<br /> <br /> [[Kategorie:Algebra]]<br /> [[Kategorie:Mathematische Logik]]<br /> [[Kategorie:Ordnungstheorie]]<br /> [[Kategorie:Ontologie]]<br /> [[Kategorie:Künstliche Intelligenz]]<br /> [[Kategorie:Business Intelligence]]</div> MickHaskell