Explizite Berechnung der primitiven pythagoreischen Zahlentripel

Es werden die Eigenschaften von primitiven pythagoreischen Zahlentripeln gezeigt und die SĂ€tze bewiesen, die angeben, wie man alle primitiven pythagoreischen Zahlentripel explizit berechnen kann.
Noch keine Stimmen abgegeben
Noch keine Kommentare

Einordnung des Artikels

Hier werden die Bezeichnungen verwendet, die im Kapitel Der Satz des Pythagoras und pythagoreische Zahlentripel eingefĂŒhrt wurden.

Voraussetzungen

Dieses Kapitel setzt nur elementare Geometrie- und Algebra-Kenntnisse voraus, die deutlich unterhalb des Abiturniveaus liegen.

EinfĂŒhrung

In Der Satz des Pythagoras und pythagoreische Zahlentripel wurden schon die Fragestellungen im Zusammenhang mit dem Lehrsatz des Pythagoras formuliert, insbesondere:

  • Lassen sich die primitiven pythagoreischen Zahlentripel explizit berechnen?
  • Gibt es eine Rekursionsformel, die aus einem gegebenem primitiven pythagoreischen Zahlentripel ein neues erzeugt? Lassen sich alle primitiven pythagoreischen Zahlentripel rekursiv erzeugen?

Die Ausdrucksweise "explizit berechnen" und "Rekursionsformel" bedarf vielleicht einer nÀheren ErklÀrung; dazu diene der Vergleich mit der geometrischen Folge.

Die Folge von Zahlen

1, 1/2, 1/4, 1/8, 1/16, 1/32, ...

lÀsst sich explizit berechnen, nÀmlich mit der Formel:

an = 2-n, n = 0, 1, 2, 3, ...

Man muss sich nur den Wert von n vorgeben – das ist die Stelle, an der ein Folgenglied steht, wenn man mit 0 zu zĂ€hlen beginnt, – und in die Formel einsetzen.

Die Folge kann aber auch rekursiv berechnet werden – dazu muss man sich den Startwert 1 vorgeben und benötigt eine Formel, wie aus einem Folgenglied das nĂ€chste Folgenglied berechnet wird:

a0 = 1, an+1 = an/2, n = 0, 1, 2, 3, ...

In diesem Kapitel werden:

  • Die Überlegungen angestellt, die zu einer Formel zur expliziten Berechnung der primitiven pythagoreischen Zahlentripel fĂŒhren.
  • Der Satz bewiesen, wonach man mit diesen Formeln tatsĂ€chlich alle primitiven pythagoreischen Zahlentripel berechnen kann.

Im folgenden Kapitel wird untersucht, ob sich die pythagoreischen Zahlentripel rekursiv berechnen lassen.

Man sollte sich dazu klar machen, dass die Vorgehensweise, wie in Der Satz des Pythagoras und pythagoreische Zahlentripel die pythagoreischen Zahlentripel berechnet wurden, von einem systematischen Standpunkt aus nicht zufriedenstellend ist – das Verfahren gleicht eher "Versuch und Irrtum": Man gibt sich fĂŒr a und b alle möglichen Kombinationen von ganzen Zahlen vor und berechnet a2 + b2. Ist dies eine Quadratzahl, hat man ein pythagoreisches Zahlentripel gefunden. Das zugehörige primitive pythagoreische Zahlentripel muss man erst mĂŒhsam bestimmen, indem man die Primfaktoren von a, b und c sucht.

Um die ersten – etwa 100 – primitiven pythagoreischen Zahlentripel zu finden, mag das Verfahren geeignet sein, nicht aber, wenn man beliebig viele sucht.

Explizite Berechnung der primitiven pythagoreischen Zahlentripel

Punkte mit rationalen Koordinaten auf dem Einheitskreis

Um die explizite Berechnung der pythagoreischen Zahlentripel vorzubereiten, wird ein Zusammenhang zwischen pythagoreischen Zahlentripeln und Punkten mit rationalen Koordinaten auf dem Einheitskreis hergestellt.

Abbildung 1 zeigt den Einheitskreis und ein rechtwinkliges Dreieck (hellblau, teilweise verdeckt, mit SeitenlĂ€ngen a, b und c), dessen Kathete a parallel zur x-Achse verlĂ€uft und ein Eckpunkt im Ursprung liegt. Wird das Dreieck um den Faktor c gestaucht, entsteht ein rechtwinkliges Dreieck mit Hypothenuse 1 (orange eingezeichnet). Das heißt ein Eckpunkt liegt auf dem Einheitskreis (rot eingezeichnet) und besitzt die Koordinaten (a/c, b/c). Diese Tatsache ist noch nicht bemerkenswert, denn diese Konstruktion kann mit jedem rechtwinkligen Dreieck durchgefĂŒhrt werden (je nach LĂ€nge von c muss eine Stauchung oder Streckung durchgefĂŒhrt werden).

Bemerkenswert ist diese Vorgehensweise erst, wenn (a, b, c) ein pythagoreisches Zahlentripel bilden. Denn jetzt sind a, b, c natĂŒrliche Zahlen und somit sind beide Koordinaten a/c und b/c des Punktes auf dem Einheitskreis rationale Zahlen.

Abbildung 1: Der Einheitskreis und ein rechtwinkliges Dreieck mit SeitenlÀngen a, b und c (hellblau). Wird das dazu Àhnliche Dreieck betrachtet, das um den Faktor c gestaucht wurde (orange), so liegt ein Eckpunkt auf dem Einheitskreis.Abbildung 1: Der Einheitskreis und ein rechtwinkliges Dreieck mit SeitenlÀngen a, b und c (hellblau). Wird das dazu Àhnliche Dreieck betrachtet, das um den Faktor c gestaucht wurde (orange), so liegt ein Eckpunkt auf dem Einheitskreis.

Gegenbeispiel:

Geht man vom rechtwinkligen, gleichschenkligen Dreieck aus (also a = b, c = a · √2), so erhĂ€lt man mit obiger Vorgehensweise einen Punkt auf dem Einheitskreis mit irrationalen Koordinaten, nĂ€mlich den Punkt (1/√2, 1/√2); dies ist der Schnittpunkt des Einheitskreises mit der Winkelhalbierenden. Hierbei spielt es keine Rolle, ob a ganzzahlig ist oder nicht.

♩ ♩ ♩

Dieses Gegenbeispiel soll zeigen, dass Punkte mit zwei rationalen Koordinaten auf dem Einheitskreis eher die Ausnahme und nicht der typische Fall sind.

Man kann die in Abbildung 1 gezeigte Konstruktion auch folgendermaßen interpretieren:

Jedes pythagoreische Zahlentripel erzeugt einen Punkt auf dem Einheitskreis mit rationalen Koordinaten. Ähnliche pythagoreische Zahlentripel erzeugen allerdings den identischen Punkt auf dem Einheitskreis (die zugehörigen Dreiecke gehen ja nur durch Streckung auseinander hervor). Dagegen erzeugen unterschiedliche primitive pythagoreische Zahlentripel unterschiedliche Punkte auf dem Einheitskreis. Man kann daher jedem primitiven pythagoreischen Zahlentripel eindeutig einen Punkt auf dem Einheitskreis mit rationalen Koordinaten zuordnen.

Umgekehrt kann man auch zu einem Punkt (p, q) auf dem Einheitskreis mit rationalen Koordinaten ein primitives pythagoreisches Zahlentripel finden. Denn dass der Punkt auf dem Einheitskreis liegt, bedeutet:

p2 + q2 = 1.

Und dass p und q rational sind bedeutet, dass sich beide Zahlen als Quotient von ganzen Zahlen darstellen lassen:

p= i/j, q = k/l.

Man multipliziert jetzt diese BrĂŒche so lange mit ganzen Zahlen, bis beide Zahlen ganzzahlig, aber noch teilerfremd sind; der dazu benötigte Faktor entspricht dem Streckungsfaktor aus Abbildung 1.

Beispiel:

Der Punkt (p, q) = (5/13, 12/13) liegt auf dem Einheitskreis, da

p2 + q2 = (25 + 144) / 169 = 1.

Der Streckungsfaktor ist hier gleich 13 und fĂŒhrt auf das primitive pythagoreische Zahlentripel (5, 12, 13).

♩ ♩ ♩

Interessant ist jetzt die Frage, ob man alle primitiven pythagoreischen Zahlentripel dadurch erhÀlt, indem man alle Punkte auf dem Einheitskreis mit rationalen Koordinaten bestimmt und das zugehörige primitive pythagoreische Zahlentripel berechnet.

Heuristische Überlegung: Auffinden einer Formel zur expliziten Berechnung der primitiven pythagoreischen Zahlentripel

Um einen Hinweis zu bekommen, wie eine Formel aussehen könnte, die alle primitiven pythagoreischen Zahlentripel berechnet, geht man zunÀchst von einem pythagoreischen Zahlentripel (a, b, c) aus, das einen Punkt (a/c, b/c) auf dem Einheitskreis mit rationalen Koordinaten erzeugt. Der Einfachheit halber setzt man

a/c = p und b/c = q

und es gilt Gleichung 1 in Abbildung 2. Gleichung 1 kann nun zu Gleichung 3 umgeformt werden. Da p und q rationale Zahlen sind, gilt dies auch fĂŒr die linke und rechte Seite von Gleichung 3. Dann gibt es aber teilerfremde natĂŒrliche Zahlen i und j, durch die sich die linke und rechte Seite von Gleichung 3 ausdrĂŒcken lassen (siehe Gleichung 5).

Gleichung 5 kann man jetzt wie 2 Gleichungen mit den 2 Unbekannten p und q lesen, die nach p und q aufgelöst werden. Man erhÀlt Gleichung 6.

Abbildung 2: Heuristische Überlegung fĂŒr die Herleitung einer Formel zur Berechnung von primitiven pythagoreischen Zahlentripeln.Abbildung 2: Heuristische Überlegung fĂŒr die Herleitung einer Formel zur Berechnung von primitiven pythagoreischen Zahlentripeln.

Aufgabe:

FĂŒhren Sie die Umformungen durch, die von Gleichung 5 zu Gleichung 6 fĂŒhren.

♩ ♩ ♩

Man mache sich an dieser Stelle nochmal die bisherige Vorgehensweise das eigentliche Ziel der Untersuchung klar:

  • Man ist von einem beliebigen pythagoreischen Zahlentripel (a, b, c) ausgegangen; man hat dies gemacht, um:
  • einen Punkt auf dem Einheitskreis mit rationalen Koordinaten (p, q) zu finden (Gleichung 1).
  • Zu (p, q) gibt es dann natĂŒrliche Zahlen i und j, so dass Gleichung 6 gilt.
  • Zu (p, q) möchte man ein primitives pythagoreisches Zahlentripel finden; (a, b, c) war ein beliebiges pythagoreisches Zahlentripel und ist daher ungeeignet.
  • Setzt man in Gleichung 7 den Streckungsfaktor s gleich c, so erhĂ€lt man den Ausgangspunkt (a, b, c); das zugehörige primitive pythagoreische Zahlentripel – das, um die Notation nicht aufzublĂ€hen, wieder mit (a, b, c) bezeichnet wird, – muss dann Gleichung 8 erfĂŒllen. Dabei ist s ein immer noch unbekannter Streckungsfaktor.
  • Oder wenn man den Nenner i2 + j2 in den Streckungsfaktor integriert: Gleichung 9, wobei auch hier der Streckungsfaktor r unbekannt ist.

Streng genommen ist mit diesen Überlegungen noch nichts gewonnen; die Hoffnung ist aber:

  1. Dass sich der unbekannte Streckungsfaktor r in Gleichung 9 leicht berechnen lÀsst.
  2. Dass man ein Kriterium angeben kann, fĂŒr welche Zahlen i und j ein primitives pythagoreisches Zahlentripel entsteht.
  3. Dass man fĂŒr eine gewisse Menge von Zahlen i und j alle primitiven pythagoreischen Zahlentripel berechnen kann.

Im folgenden Abschnitt wird gezeigt, dass diese heuristischen Überlegungen tatsĂ€chlich zu den gesuchten Aussagen fĂŒhren.

Die Bedeutung des unbekannten Streckungsfaktors r ist an dieser Stelle noch schwer zu verstehen; sobald die entsprechenden SĂ€tze formuliert sind, wird seine Bedeutung klarer werden. Es wird dann auch eine Aufgabe formuliert, die zeigen wird, dass es in Formel 9 zwei Möglichkeiten fĂŒr die Wahl von r gibt, die zu den gesuchten SĂ€tzen fĂŒhren.

Formel zur expliziten Berechnung der primitiven pythagoreischen Zahlentripel und Formulierung der SĂ€tze

Jetzt werden die SĂ€tze formuliert, die sich aus obigen Überlegungen – mit einigen zusĂ€tzlichen Argumenten – herleiten lassen.

Satz 1 (Berechnung von pythagoreischen Zahlentripeln): Sind j und i natĂŒrliche Zahlen mit j > i, i = 1, 2, ..., dann definiert

a = j2 - i2, b = 2ji, c = j2 + i2

ein pythagoreisches Zahlentripel.

Beachte: Der Satz 1 behauptet nicht, dass durch die Formeln ein primitives pythagoreisches Zahlentripel erzeugt wird. Diese VerschÀrfung liefert der folgende Satz.

Satz 2 (Berechnung von primitiven pythagoreischen Zahlentripeln): Sind j und i natĂŒrliche Zahlen mit

  • j > i, i = 1, 2, ...,
  • j und i sind teilerfremd,
  • genau eine der Zahlen j und i ist ungerade und eine ist gerade,

dann definiert

a = j2 - i2, b = 2ji, c = j2 + i2

ein primitives pythagoreisches Zahlentripel.

Beachte: Mit Satz 2 ist immer noch nicht gesagt, dass man ĂŒber die Formeln tatsĂ€chlich alle primitiven pythagoreischen Zahlentripel finden kann. Diese Aussage macht erst der folgende Satz.

Satz 3 (Berechnung aller primitiven pythagoreischen Zahlentripel): Ist (a, b, c) ein primitives pythagoreisches Zahlentripel, dann gibt es natĂŒrliche Zahlen j und i, so dass sich a, b, c durch folgende Formeln berechnen lassen:

a = j2 - i2, b = 2ji, c = j2 + i2.

Dabei sind j und i natĂŒrliche Zahlen mit

  • j > i, i = 1, 2, ...,
  • j und i sind teilerfremd,
  • genau eine der Zahlen j und i ist ungerade und eine ist gerade.

Beweis von Satz 1: Sind i und j natĂŒrliche Zahlen, dann sind auch i*j, i2, j2, j2 - i2 und j2 + i2 natĂŒrliche Zahlen; ein negative Zahl kann nicht entstehen, da j > i. Somit sind a, b und c natĂŒrliche Zahlen.

Es ist nur noch zu zeigen, dass sie den Satz des Pythagoras erfĂŒllen:

a2 + b2 = (j2 - i2)2 + (2ji)2 = j4 + i4 - 2i2j2 + (2ji)2 = j4 + i4 + 2i2j2 = (j2 + i2)2 = c2.

♩ ♩ ♩

Man beachte: fĂŒr den Beweis, dass a, b und c den Satz des Pythagoras erfĂŒllen, wurde nicht verwendet, dass i und j natĂŒrliche Zahlen sind. Das heißt man kann in die Formeln zur Berechnung von a, b und c beliebige Zahlen i und j einsetzen und erhĂ€lt immer die SeitenlĂ€ngen eines rechtwinkligen Dreiecks - ganzzahlig werden die SeitenlĂ€ngen mit Sicherheit, wenn ganzzahlige i und j verwendet werden.

Satz 1 war nach den VorĂŒberlegungen oben der ganz einfache Teil. Bevor die beiden schwierigen SĂ€tze bewiesen werden, sollen einige Eigenschaften der Zahlen (a, b, c) und i, j untersucht werden, wenn sie ĂŒber obige Formeln zusammenhĂ€ngen.

Die Gitter-Koordinaten eines pythagoreischen Zahlentripels

Die Gleichungen 4 und 5 in Abbildung 2 wirken eher etwas befremdlich – im Folgenden wird ein neues Koordinatensystem eingefĂŒhrt, das helfen soll, diese Gleichungen besser zu verstehen.

ZunÀchst soll eine andere Möglichkeit gezeigt werden, wie man Punkte mit rationalen Koordinaten auf dem Einheitskreis findet; die Vorgehensweise oben wirkte eher wie ein Zirkelschluss, da man von einem pythagoreischen Zahlentripel ausgeht, um eine Formel zu finden, wie es berechnet wird.

In Abbildung 3 kann man leicht erkennen, dass die linke Seite von Gleichung 5 mit der Steigung m der eingezeichneten Gerade (blau) ĂŒbereinstimmt. Man kann sich nun ĂŒberlegen: Geht man immer vom Punkt (-1|0) aus (rot eingezeichnet in Abbildung 3) und bildet Geraden mit rationaler Steigung, so erhĂ€lt man als Schnittpunkt zwischen der Gerade und dem Einheitskreis einen Punkt mit rationalen Koordinaten (in Abbildung 3 der Punkt (p, q)). Setzt man die Steigung m gleich dem Quotienten i/j, mit natĂŒrlichen Zahlen i und j, so erhĂ€lt man auch Gleichung 5.

Abbildung 3: Hat die Gerade durch den Punkt (-1|0) eine rationale Steigung m, so schneidet sie den Einheitskreis in einem Punkt mit rationalen Koordinaten.Abbildung 3: Hat die Gerade durch den Punkt (-1|0) eine rationale Steigung m, so schneidet sie den Einheitskreis in einem Punkt mit rationalen Koordinaten.

Aufgabe:

Wie kann man in Abbildung 3 die Gleichung (1 - p)/q = m erkennen?

♩ ♩ ♩

Möchte man jetzt alle möglichen rationalen Steigungen m bilden, so lĂ€sst man die Zahlen i und j durch alle natĂŒrlichen Zahlen laufen. (Hilfreich ist dies, wenn beim Durchlaufen aller rationalen Steigungen m auch alle Punkte auf dem Einheitskreis mit rationalen Koordinaten erzeugt werden.) Dabei kann aber i < j gesetzt werden, da fĂŒr i > j die Steigung m grĂ¶ĂŸer wird als 1 und die Gerade den Einheitskreis nicht mehr im ersten Quadraten schneidet. Auch der Schnittpunkt mit m = 1 ist irrelevant, da er zu keinem pythagoreischen Zahlentripel fĂŒhrt.

Die Zahlenpaare (j, i) in der zweidimensionalen Ebene kann man als Punkte eines Gitters auffassen. Und die oben formulierten SĂ€tze zeigen, wie wichtig der Zusammenhang zwischen diesen Gitter-Punkten und den pythagoreischen Zahlentripeln ist.

Abbildung 4 zeigt ein neues Koordinatensystem mit den Achsen j und i, in dem die relevanten Gitter-Punkte (j, i) eingezeichnet sind; sie werden zu einer Menge G zusammengefasst (Abbildung 4 rechts). Die Wahl der Achsen spielt eigentlich keine Rolle; spÀter wird aber das Gitter geometrisch interpretiert, was leichter fallen wird, wenn j nach rechts angetragen wird.

Abbildung 4: Gitter G fĂŒr die möglichen Kombinationen von natĂŒrlichen Zahlen i und j. Die grau eingezeichneten Punkte auf der Winkelhalbierenden fĂŒhren nicht zu pythagoreischen Zahlentripeln. Rot sind alle Kombinationen mit j &gt; i eingezeichnet.Abbildung 4: Gitter G fĂŒr die möglichen Kombinationen von natĂŒrlichen Zahlen i und j. Die grau eingezeichneten Punkte auf der Winkelhalbierenden fĂŒhren nicht zu pythagoreischen Zahlentripeln. Rot sind alle Kombinationen mit j > i eingezeichnet.

Setzt man nun die im Abschnitt Formel zur expliziten Berechnung der primitiven pythagoreischen Zahlentripel formulierten SĂ€tze als gegeben voraus, so sind in Abbildung 4 zu viele Gitter-Punkte eingezeichnet.

Zum Einen kann man alle Gitter-Punkte, die auf einer Ursprungs-Geraden liegen, durch einen Gitter-Punkt ersetzen. In Abbildung 2, Gleichung 5, wird der Quotient i/j gebildet, um eine rationale Zahl zu erzeugen – es reicht daher teilerfremde Kombinationen von i und j zu betrachten. Zum Beispiel besitzen (j, i) = (5, 3), (10, 6), (15, 9) den identischen Wert fĂŒr i/j = 3/5 und erzeugen in Abbildung 3 jeweils die identische Steigung m = 3/5 und somit den identischen Punkt auf dem Einheitskreis.

Zum Anderen besagt Satz 2, dass man fĂŒr primitive pythagoreische Zahlentripel eine ungerade und eine gerade Zahl fĂŒr i und j kombinieren muss. Diese Eigenschaft ist aus den bisherigen heuristischen Überlegungen noch nicht verstĂ€ndlich – sie wird spĂ€ter noch untersucht.

Beachtet man diese EinschrÀnkungen, kann nach den SÀtzen jedem primitiven pythagoreischen Zahlentripel (a, b, c) ein Gitter-Punkt (j, i) zugeordnet werden. Diese Zahlen j und i werden im Folgenden als die Gitter-Koordinaten eines primitiven pythagoreischen Zahlentripels bezeichnet.

Abbildung 5: Darstellung der Gitter-Punkte bis zu j = 50: primitive pythagoreische Zahlentripel sind rot gekennzeichnet, andere blau. Punkte auf der Winkelhalbierenden sind grau.Abbildung 5: Darstellung der Gitter-Punkte bis zu j = 50: primitive pythagoreische Zahlentripel sind rot gekennzeichnet, andere blau. Punkte auf der Winkelhalbierenden sind grau.

In Abbildung 5 ist das Gitter bis zu j = 50 aufgetragen (j nach rechts, i nach oben); zur besseren Orientierung sind wieder die (irrelevanten) Punkte auf der Winkelhalbierenden i = j dargestellt (grau). Die Gitter-Punkte, die zu einem primitiven pythagoreischen Zahlentripel gehören, sind rot dargestellt, andere Gitter-Punkte sind blau.

Man erhÀlt zum Beispiel primitive pythagoreische Zahlentripel in den SpezialfÀllen:

  • i = 1 und j nimmt gerade Zahlenwerte an.
  • i = 2 und j nimmt ungerade Zahlenwerte an.
  • FĂŒr i = 3 ist es schon schwieriger, die Bedingungen fĂŒr j anzugeben: j muss gerade und von 3 teilerfremd sein.
  • Gitter-Punkt der Form (j, i) = (j, j - 1) (also Punkte direkt unterhalb der Winkelhalbierenden).

Abbildung 6 zeigt die Formeln, mit denen zwischen (a, b, c) und (i, j) umgerechnet werden kann.

Abbildung 6: Formeln zum Umrechnen zwischen Gitter-Koordinaten und den SeitenlÀngen eines primitiven pythagoreischen Zahlentripels.Abbildung 6: Formeln zum Umrechnen zwischen Gitter-Koordinaten und den SeitenlÀngen eines primitiven pythagoreischen Zahlentripels.

Aufgabe:

Leiten Sie aus Gleichung 1 die beiden Darstellungen fĂŒr i und j nach Gleichung 2 und 3 her.

♩ ♩ ♩

Man erkennt an den Gleichungen 2 (oder 3), dass sowohl die primitiven pythagoreischen Zahlentripel als auch die Gitter-Punkte nur ganz spezielle Werte erlauben, da man sonst in Gleichung 2 (oder 3) irrationale Zahlen erhÀlt. Diese speziellen Eigenschaften sollen nun nÀher untersucht werden.

Eigenschaften der pythagoreischen Zahlentripel

Die Formeln aus den SĂ€tzen oben werden nun verwendet, um pythagoreische Zahlentripel zu berechnen; fĂŒr die folgende Tabelle wurden j-Werte von 2 bis zu 8 verwendet und i lĂ€uft von 1 bis j - 1. Anstelle von TRUE steht in der letzten Spalte primitiv = 1 und anstelle von FALSE steht primitiv = 0.

j i a b c primitiv
2 1 3 4 5 1
3 1 8 6 10 0
3 2 5 12 13 1
4 1 15 8 17 1
4 2 12 16 20 0
4 3 7 24 25 1
5 1 24 10 26 0
5 2 21 20 29 1
5 3 16 30 34 0
5 4 9 40 41 1
6 1 35 12 37 1
6 2 32 24 40 0
6 3 27 36 45 0
6 4 20 48 52 0
6 5 11 60 61 1
7 1 48 14 50 0
7 2 45 28 53 1
7 3 40 42 58 0
7 4 33 56 65 1
7 5 24 70 74 0
7 6 13 84 85 1
8 1 63 16 65 1
8 2 60 32 68 0
8 3 55 48 73 1
8 4 48 64 80 0
8 5 39 80 89 1
8 6 28 96 100 0
8 7 15 112 113 1

Aus der Tabelle lassen sich sofort einige Eigenschaften ablesen, die teilweise an den Formeln schwieriger nachzuvollziehen sind:

  1. Es fehlen einige pythagoreische Zahlentripel wie zum Beispiel (4, 3, 5). In den Formeln zur Berechnung von a, b, c ist aber b = 2ij, also muss b eine gerade Zahl sein. Man sollte die Formeln besser so lesen: in Gitter-Punkt (i, j) erzeugt stets 2 pythagoreische Zahlentripel, die durch Vertauschung von a und b entstehen. Also erzeugt zum Beispiel j = 2, i = 1 die beiden Tripel (3, 4, 5) und (4, 3, 5).
  2. RegelmĂ€ĂŸigkeiten bezĂŒglich i und j:
    • Die Tabelle bestĂ€tigt folgende Behauptung von Satz 2: Sind i und j beide gerade oder beide ungerade, erhĂ€lt man nicht-primitive pythagoreische Zahlentripel.
    • Ebenso: Haben i und j einen gemeinsamen Teiler, erhĂ€lt man ein nicht-primitives pythagoreisches Zahlentripel (siehe zum Beispiel j = 6 und i = 3; die Zahlen sind zwar gerade/ungerade, haben aber den gemeinsamen Teiler 3). Auch hier bestĂ€tigt sich Satz 2.
  3. RegelmĂ€ĂŸigkeiten bezĂŒglich a und b:
    • Sind beide gerade, haben sie einen gemeinsamen Teiler, also ist das Zahlentripel nicht-primitiv.
    • Bei primitiven pythagoreischen Zahlentripel ist eine Zahl gerade und die andere ungerade.
    • Dass beide ungerade Zahlen sind, kann nicht vorkommen, da b gerade sein muss.
  4. RegelmĂ€ĂŸigkeiten bezĂŒglich a und c:
    • in primitiven pythagoreischen Zahlentripeln ist c stets ungerade, ebenso a (Letzteres wurde schon festgestellt).
    • Dagegen gibt es in nicht-primitiven pythagoreischen Zahlentripeln keine offensichtliche EinschrĂ€nkung fĂŒr c (Beispiele: (6, 8, 10) und (27, 36, 45)).

Diese Beobachtungen bestĂ€tigen allesamt die Behauptungen der SĂ€tze 2 und 3, fĂŒr einen Beweis reichen sie noch nicht aus.

Einen großen Schritt nĂ€her zu diesem Ziel fĂŒhren folgende Überlegungen:

  • Im vierten Beweis fĂŒr den Satz des Pythagoras in Vierter Beweis im Kapitel Der Satz des Pythagoras und pythagoreische Zahlentripel wurde zu einem gegebenen rechtwinkligen Dreieck ein weiteres rechtwinkliges Dreieck konstruiert, so dass die Hypothenuse b des ursprĂŒnglichen Dreiecks zur Höhe im neuen Dreieck wird. Die Abbildung ist unten als Abbildung 7 nochmals wiedergegeben; das gegebene rechtwinklige Dreieck ist gelb eingezeichnet, das neue Dreieck ist rot eingezeichnet.
  • Der Höhensatz angewendet auf das neue Dreieck liefert die Gleichung b2 = (c + a) · (c - a).
  • Setzt man fĂŒr b (wie hier immer geschehen) die geradzahlige Hypothenuse ein, ist b2 durch 4 teilbar.
  • Es ist daher naheliegend, die GrĂ¶ĂŸen b2 / 4 sowie (c + a) / 2 und (c - a) / 2 zu betrachten.
  • Stellt man zudem einen Zusammenhang zwischen der Skizze zum vierten Beweis des Pythagoras und Abbildung 3 oben her, kann man sowohl die Gitter-Koordinaten des pythagoreischen Zahlentripels als auch den (oben diskutierten) Punkt auf dem Einheitskreis ins Spiel bringen. Ähnlich sind nĂ€mlich folgende Dreiecke:
    • das rechtwinklige Dreieck mit den Katheten j und i
    • das rechtwinklige Dreieck mit Katheten c+a und b (in Abbildung 7) und
    • das rechtwinklige Dreieck mit Katheten 1+p und q (in Abbildung 3).

Abbildung 7: Skizze zum vierten Beweis des Satzes des Pythagoras. Diese Skizze wird jetzt verwendet, um den Zusammenhang zwischen den SeitenlÀngen a, b, c und den Gitter-Koordinaten (j, i) herzustellen.Abbildung 7: Skizze zum vierten Beweis des Satzes des Pythagoras. Diese Skizze wird jetzt verwendet, um den Zusammenhang zwischen den SeitenlÀngen a, b, c und den Gitter-Koordinaten (j, i) herzustellen.

Die folgende Tabelle zeigt pythagoreische Zahlentripeln fĂŒr alle Gitter-Koordinaten bis zu j = 8. Beachtenswert sind die GrĂ¶ĂŸen, die zusĂ€tzlich zu den SeitenlĂ€ngen berechnet werden. Anstelle von TRUE steht in der 6. Spalte primitiv = 1 und anstelle von FALSE steht primitiv = 0. Auf den ersten Blick leicht zu ĂŒbersehen sind Eigenschaften von b und c, wenn sie durch 4 geteilt werden. In den mit b mod 4 und c mod 4 beschrifteten Spalten wird der Rest von b beziehungsweise c bei Division durch 4 angegeben.

j i a b c isPrimitive b mod 4 c mod 4 b2 b2 / 4 (c + a) / 2 (c + a) / 2
2 1 3 4 5 1 0 1 16 4 4 1
3 1 8 6 10 0 2 2 36 9 9 1
3 2 5 12 13 1 0 1 144 36 9 4
4 1 15 8 17 1 0 1 64 16 16 1
4 2 12 16 20 0 0 0 256 64 16 4
4 3 7 24 25 1 0 1 576 144 16 9
5 1 24 10 26 0 2 2 100 25 25 1
5 2 21 20 29 1 0 1 400 100 25 4
5 3 16 30 34 0 2 2 900 225 25 9
5 4 9 40 41 1 0 1 1600 400 25 16
6 1 35 12 37 1 0 1 144 36 36 1
6 2 32 24 40 0 0 0 576 144 36 4
6 3 27 36 45 0 0 1 1296 324 36 9
6 4 20 48 52 0 0 0 2304 576 36 16
6 5 11 60 61 1 0 1 3600 900 36 25
7 1 48 14 50 0 2 2 196 49 49 1
7 2 45 28 53 1 0 1 784 196 49 4
7 3 40 42 58 0 2 2 1764 441 49 9
7 4 33 56 65 1 0 1 3136 784 49 16
7 5 24 70 74 0 2 2 4900 1225 49 25
7 6 13 84 85 1 0 1 7056 1764 49 36
8 1 63 16 65 1 0 1 256 64 64 1
8 2 60 32 68 0 0 0 1024 256 64 4
8 3 55 48 73 1 0 1 2304 576 64 9
8 4 48 64 80 0 0 0 4096 1024 64 16
8 5 39 80 89 1 0 1 6400 1600 64 25
8 6 28 96 100 0 0 0 9216 2304 64 36
8 7 15 112 113 1 0 1 12544 3136 64 49

Die folgende Tabelle zeigt nur die primitiven pythagoreischen Zahlentripeln; jetzt aber bis zur Gitter-Koordinate j = 11.

j i a b c isPrim b mod 4 c mod 4 b2 b2 / 4 (c + a) / 2 (c + a) / 2
2 1 3 4 5 1 0 1 16 4 4 1
3 2 5 12 13 1 0 1 144 36 9 4
4 1 15 8 17 1 0 1 64 16 16 1
4 3 7 24 25 1 0 1 576 144 16 9
5 2 21 20 29 1 0 1 400 100 25 4
5 4 9 40 41 1 0 1 1600 400 25 16
6 1 35 12 37 1 0 1 144 36 36 1
6 5 11 60 61 1 0 1 3600 900 36 25
7 2 45 28 53 1 0 1 784 196 49 4
7 4 33 56 65 1 0 1 3136 784 49 16
7 6 13 84 85 1 0 1 7056 1764 49 36
8 1 63 16 65 1 0 1 256 64 64 1
8 3 55 48 73 1 0 1 2304 576 64 9
8 5 39 80 89 1 0 1 6400 1600 64 25
8 7 15 112 113 1 0 1 12544 3136 64 49
9 2 77 36 85 1 0 1 1296 324 81 4
9 4 65 72 97 1 0 1 5184 1296 81 16
9 8 17 144 145 1 0 1 20736 5184 81 64
10 1 99 20 101 1 0 1 400 100 100 1
10 3 91 60 109 1 0 1 3600 900 100 9
10 7 51 140 149 1 0 1 19600 4900 100 49
10 9 19 180 181 1 0 1 32400 8100 100 81
11 2 117 44 125 1 0 1 1936 484 121 4
11 4 105 88 137 1 0 1 7744 1936 121 16
11 6 85 132 157 1 0 1 17424 4356 121 36
11 8 57 176 185 1 0 1 30976 7744 121 64
11 10 21 220 221 1 0 1 48400 12100 121 100

Man erkennt an den Tabellen:

  • b ist bei primitiven pythagoreischen Zahlentripeln durch 4 teilbar.
  • b2 / 4 ist bei primitiven pythagoreischen Zahlentripeln eine gerade Quadratzahl, bei nicht-primitiven pythagoreischen Zahlentripeln kommen sowohl gerade als auch ungerade Quadratzahlen vor.
  • c liefert in primitiven pythagoreischen Zahlentripeln bei Division durch 4 immer den Rest 1.
  • (a + c) / 2 ist immer eine Quadratzahl, es ist nĂ€mlich gleich j2.
  • (a - c) / 2 ist immer eine Quadratzahl, es ist nĂ€mlich gleich i2.

Formulierung der HilfssÀtze

Diese Beobachtungen aus den Tabellen oben werden nun als HilfssÀtze formuliert, mit deren Hilfe spÀter Satz 2 und Satz 3 bewiesen werden.

Hilfssatz 1: FĂŒr ein primitives pythagoreisches Zahlentripel (a, b, c) gilt:

  1. Eine der Katheten ist eine gerade Zahl und eine ist eine ungerade Zahl (die Kombinationen gerade/gerade und ungerade/ungerade können nicht vorkommen).
  2. Die Hypothenuse c ist ungerade.
  3. Die geradzahlige Kathete ist sogar durch 4 teilbar.

♩ ♩ ♩

Da jetzt bewiesen ist, dass in einem primitiven pythagoreischen Zahlentripel eine Kathete ungerade und eine Kathete gerade (sogar durch 4 teilbar) ist, wird folgende Konvention verwendet:

  • die ungeradzahlige Kathete wird mit a bezeichnet,
  • die geradzahlige Kathete wird mit b bezeichnet.

Hilfssatz 2: FĂŒr ein primitives pythagoreisches Zahlentripel (a, b, c) gilt: Die Zahlen (c + a) / 2 und (c - a) / 2 sind teilerfremd.

Hilfssatz 3: Kann eine Quadratzahl q als das Produkt von zwei teilerfremden Zahlen n und m geschrieben werden, q = n · m, dann sind n und m Quadratzahlen.

Beweis der HilfssÀtze

Beweis von Hilfssatz 1

Vorausgesetzt ist, dass (a, b, c) ein primitives pythagoreisches Zahlentripel ist, also dass die drei Zahlen a, b und c teilerfremd sind und dass

a2 + b2 = c2 gilt.

Zum ersten Teil der Behauptung: sie wird mit einem Widerspruchs-Beweis gezeigt.

Besonders einfach ist der Fall, wenn a gerade und b gerade. Denn dann sind auch a2 und b2 gerade und somit auch ihre Summe c2. Wenn aber c2 gerade ist und c ganzzahlig, dann muss c gerade sein. Aber dann sind alle drei Zahlen a, b und c gerade, was der Voraussetzung teilerfremd widerspricht.

Schwieriger ist der Fall, wenn a und b ungerade sind. Jetzt sind a2 und b2 ungerade; ihre Summe c2 ist dann gerade. Versucht man jetzt wie im einfachen Fall oben zu argumentieren, kommt man zu keinem Widerspruch.

Aber die Teilbarkeit durch 4 liefert den entscheidenden Hinweis: Wenn c2 gerade ist, muss der Primfaktor 2 mindestens zweimal enthalten sein, somit ist c2 durch 4 teilbar, oder:

c2 mod 4 = 0

Nach der Voraussetzung muss dann auch

a2 mod 4 + b2 mod 4 = 0

Da a2 und b2 beide ungerade sind, muss bei Division durch 4 eine Zahl den Rest 1 ergeben, die andere Zahl den Rest 3. Also zum Beispiel:

a2 mod 4 = 1 und b2 mod 4 = 3 (Vertauschung von a und b liefert nichts Neues).

Da a und b ungerade sind, gibt es geeignete natĂŒrliche Zahlen m und n: a = 2m + 1, b = 2n + 1:

Aber das Quadrat einer ungeraden Zahl (hier b) kann nicht b2 mod 4 = 3 erfĂŒllen. Denn in:

(2n + 1)2 = 4n2 + 4n + 1

sind die ersten beiden Summanden durch 4 teilbar und somit gilt:

(2n + 1)2 mod 4 = 1.

Die Annahme, dass a und b ungerade sind, fĂŒhrt somit auch zu einem Widerspruch.

Zum zweiten Teil der Behauptung: "Die Hypothenuse c ist ungerade."

Nach dem ersten Teil ist eine Kathete gerade und eine Kathete ungerade. Dann ist die Summe a2 + b2 ungerade. Da diese Summe mit c2 ĂŒbereinstimmt, muss c eine ungerade Zahl sein.

Zum dritten Teil der Behauptung: "Die geradzahlige Kathete ist sogar durch 4 teilbar."

Die geradzahlige Kathete werde mit b bezeichnet.

Inzwischen ist bewiesen, dass a und c ungerade sind; sie können also mit geeigneten natĂŒrlichen Zahlen n und m dargestellt werden:

a = 2n + 1, c = 2m + 1.

a2 = (2n + 1)2 = 4n2 + 4n + 1 = 4(n2 + n) + 1

Egal ob n gerade oder ungerade ist, die Summe n2 + n ist immer gerade. Daraus folgt aber:

a2 mod 8 = 1.

Dasselbe gilt auch fĂŒr c2.

Betrachtet man nun den "Satz des Pythagoras modulo 8", so gilt:

b2 mod 8 = (c2 - a2) mod 8 = 0.

Folglich ist b2 durch 8 teilbar. Da in einer Quadratzahl jeder Primfaktor mit gerader Potenz vorkommen muss, ist b2 durch 16 teilbar und somit ist b durch 4 teilbar.

Beweis von Hilfssatz 2

Da a und c ungerade Zahlen sind, sind c + a und c - a gerade Zahlen, folglich sind auch die BrĂŒche (c + a) / 2 und (c - a) / 2 ganze Zahlen. Die Notation ist aber einfacher, wenn c + a und c - a untersucht werden. Anstelle von Hilfssatz 2 wird daher gezeigt:

FĂŒr das primitive pythagoreische Zahlentripel (a, b, c) besitzen die Zahlen c + a und c - a nur 2 als gemeinsamen Teiler; kĂŒrzt man ihn, sind sie teilerfremd.

Angenommen es gibt einen weiteren gemeinsamen Faktor p, dann gibt es geeignete natĂŒrliche Zahlen n und m mit:

np = c + a und mp = c - a.

Addiert man beide Gleichungen, so gilt:

(n + m)p = 2c.

Subtrahiert man die Gleichungen voneinander, so gilt:

(n - m)p = 2a.

Die Gleichungen besagen dann aber, dass entweder p = 2 (was aber ausgeschlossen wurde) oder dass p sowohl Teiler von c und a ist. Auch dies widerspricht der Voraussetzung, somit gilt Hilfssatz 2.

Beweis von Hilfssatz 3

Es ist q eine Quadratzahl, die als Produkt zweier Zahlen n und m geschrieben werden kann, wobei n und m teilerfremd sind.

Zerlegt man die Quadratzahl q in Primfaktoren, so muss jeder Primfaktor eine gerade Potenz besitzen (sonst hat q eine irrationale Wurzel). Diese Zerlegung ist eindeutig (wenn man den irrelevanten Faktor 1 nicht berĂŒcksichtigt). Werden jetzt diese Primfaktoren auf die Faktoren n und m verteilt, muss jede Potenz eines Primfaktors als Ganzes entweder in n oder m enthalten sein. Andernfalls wĂ€ren n und m nicht teilerfremd.

Aber dann enthalten n und m alle ihre Primfaktoren mit geraden Potenzen und sind somit Quadratzahlen.

♩ ♩ ♩

Beispiel:

Die Zahl q = 900 besitzt die Primfaktor-Zerlegung

q = 22 · 32 · 52.

Dann können teilerfremde n und m etwa lauten:

n = 22, m = 32 · 52,

aber nicht:

n = 2 · 3, m = 2 · 3 · 52.

Beweis der SĂ€tze 2 und 3

Die oben formulierten und bewiesenen HilfssĂ€tze sind "jeder fĂŒr sich genommen" wenig aussagekrĂ€ftig, da sie nur spezielle Eigenschaften von primitiven pythagoreischen Zahlentripeln beschreiben. Im folgenden Abschnitt wird aber gezeigt, dass sie in die Beweise der SĂ€tze 2 und 3 einfließen und somit zum eigentlichen Ziel dieses Kapitels fĂŒhren.

Beweis von Satz 2

Satz 2 (Berechnung von primitiven pythagoreischen Zahlentripeln): Sind j und i natĂŒrliche Zahlen mit

  • j > i, i = 1, 2, ...,
  • j und i sind teilerfremd,
  • genau eine der Zahlen j und i ist ungerade und eine ist gerade,

dann definiert

a = j2 - i2, b = 2ji, c = j2 + i2

ein primitives pythagoreisches Zahlentripel.

Es ist offensichtlich, dass Satz eine VerschĂ€rfung von Satz 1 ist. Hier ist also noch zu zeigen, dass unter den gegebenen Voraussetzungen an j und i ein primitives pythagoreisches Zahlentripel entsteht; dass ein pythagoreisches Zahlentripel entsteht, ist schon mit Satz 1 gezeigt. An den Tabellen oben kann man sofort die Gegenbeispiele ablesen, die zeigen, dass eine Verletzung der Voraussetzungen an j und i zu einem nicht-primitiven pythagoreischen Zahlentripel fĂŒhrt.

Es ist zu zeigen, dass die drei oben definierten Zahlen a, b und c teilerfremd sind. Man untersucht zunÀchst b und c:

Der Beweis erfolgt durch Widerspruch: man nimmt an, dass es eine Zahl p gibt, die sowohl Teiler von b als auch c ist.

Da b das Produkt der 2 und der teilerfremden Zahlen i und j ist, gibt es drei Möglichkeiten:

  1. p = 2,
  2. p ist Teiler von i,
  3. p ist Teiler von j.

Der erste Fall ist sofort auszuschließen, da c die Summe einer geraden und einer ungeraden Zahl ist und somit ungerade ist. Der zweite und dritte Fall beschreiben das identische Problem, weil b und c bezĂŒglich i und j symmetrisch definiert sind; es reicht also, etwa den 2. Fall zu untersuchen.

Wenn p ein Teiler von i ist, dann ist p auch ein Teiler von i2. Da nach Voraussetzung (die Widerspruchs-Annahme) p ein Teiler von c ist, muss p ein Teiler von j2 sein. Aber dann ist p auch Teiler von j. Dies widerspricht aber der Annahme, dass i und j teilerfremd sind.

Somit ist gcd(b, c) = 1. Da aber gcd(a, b, c) = gcd(a, gcd(b, c)) = gcd(a, 1) = 1, sind alle drei Zahlen teilerfremd und (a, b, c) ist ein primitives pythagoreisches Zahlentripel. (Mit gcd wird der grĂ¶ĂŸte gemeinsame Teiler (greatest common divisor) bezeichnet.)

Beweis von Satz 3

Satz 3 (Berechnung aller primitiven pythagoreischen Zahlentripel): Ist (a, b, c) ein primitives pythagoreisches Zahlentripel, dann gibt es natĂŒrliche Zahlen j und i, so dass sich a, b, c durch folgende Formeln berechnen lassen:

a = j2 - i2, b = 2ji, c = j2 + i2.

Dabei sind j und i natĂŒrliche Zahlen mit

  • j > i, i = 1, 2, ...,
  • j und i sind teilerfremd,
  • genau eine der Zahlen j und i ist ungerade und eine ist gerade,

Beweis:

Nach Hilfssatz 1 ist eine Kathete ungeradzahlig und eine geradzahlig, Erstere wird mit a bezeichnet, Letztere mit b, wobei b sogar durch 4 teilbar ist. Die Gleichung

a2 + b2 = c2

wird dann umgeformt zu

b2 = c2 - a2 = (c + a) · (c - a).

In der letzten Darstellung sind beide Faktoren geradzahlig (da a und c ungerade); man kann daher die Gleichung durch 4 teilen und die Zahlen (c + a) / 2 und (c - a) / 2 sind nach Hilfssatz 3 (angewendet auf q = b2 / 4) teilerfremde Quadratzahlen.

Das heißt aber, dass es natĂŒrliche Zahlen j und i gibt mit folgenden Eigenschaften:

  • Es ist j2 = (c + a) / 2, i2 = (c - a) / 2; wieder in die Gleichung fĂŒr b eingesetzt, lautet dies: b = 2ij.
  • i und j sind teilerfremd.
  • Eine der Zahlen ist gerade und eine ist ungerade (da b nach Hilfssatz 1 durch 4 teilbar ist, muss eine der Zahlen i und j gerade sein).

Löst man nun die beiden Gleichungen j = (c + a) / 2, i = (c - a) / 2 nach a und c auf (Summe und Differenz der Gleichungen bilden), erhÀlt man

a = j2 - i2, c = j2 + i2.

♩ ♩ ♩

Man kann Satz 2 und 3 auch folgendermaßen lesen:

Satz 2 gibt die Bedingungen an die Gitter-Koordinaten j, i sowie die Formeln fĂŒr (a, b, c) vor, nach denen sich primitive pythagoreische Zahlentripel berechnen lassen. Und Satz 3 besagt, dass es umgekehrt zu jedem primitiven pythagoreischen Zahlentripel (a, b, c) Koordinaten j, i mit den Bedingungen aus Satz 2 gibt. Das heißt aber, dass man jedes primitive pythagoreische Zahlentripel (a, b, c) erhĂ€lt, wenn man in Satz 2 alle erlaubten Gitter-Koordinaten einsetzt. Setzt man nicht-erlaubte Gitter-Koordinaten in Satz 2 ein, erhĂ€lt man nicht-primitive pythagoreische Zahlentripel.

Geometrische Interpretation von Satz 2 und 3

Bei den Beweisen von Satz 2 und 3 wurde nicht – wie eingangs versprochen – die geometrische Interpretation mitgeliefert. Sie soll jetzt nachgeholt werden, indem versucht wird die Abbildungen 3, 5 und 7 zusammenzufĂŒhren.

Bestimmen der Gitter-Koordinaten zu einem gegebenen rechtwinkligen Dreieck

Abbildung 8 zeigt (gelb) ein gegebenes rechtwinkliges Dreieck mit SeitenlĂ€ngen a, b, c. Zu diesem Dreieck wird – nach der bekannten Konstruktion aus dem vierten Beweis des Satzes des Pythagoras (siehe Abbildung 7) – ein weiteres rechtwinkliges Dreieck mit Hypothenuse 2c und Höhe h gezeichnet.

Der linke Eckpunkt dieses Dreiecks ist grĂŒn eingezeichnet; von ihm aus wird eine Gerade (orange) durch den Eckpunkt gezeichnet, an dem sich der rechte Winkel befindet.

Der grĂŒne Punkt links wird jetzt mit dem Koordinaten-Ursprung des Koordinatensystems fĂŒr die Gitter-Punkte (j, i) identifiziert, wobei die Hypothenuse der LĂ€nge 2c parallel zur j-Achse verlĂ€uft.

Wenn die Gerade durch die beiden Eckpunkte (orange) zum ersten Mal einen Gitter-Punkt schneidet, hat man die Gitter-Koordinaten (j, i) zum pythagoreischen Zahlentripel (a', b', c') gefunden, wobei das Dreieck mit SeitenlÀngen a', b', c' zum Ausgangsdreieck Àhnlich ist. Dies liegt daran, dass die beiden Dreiecke mit Katheten j und i beziehungsweise c + a und b Àhnlich sind (siehe Gleichung rechts in Abbildung 8).

Nimmt man als Ausgangsdreieck ein primitives pythagoreisches Zahlentripel, erhÀlt man sofort díe zugehörigen Gitter-Koordinaten.

Abbildung 8: Konstruktion der Gitter-Koordinaten i und j zu einem gegebenen rechtwinkligen Dreieck.Abbildung 8: Konstruktion der Gitter-Koordinaten i und j zu einem gegebenen rechtwinkligen Dreieck.

Sollte die Gerade keinen Gitter-Punkt schneiden, heißt dies, dass man von einem Dreieck ausgegangen ist, zu dem es kein Ă€hnliches Dreieck mit ganzzahligen SeitenlĂ€ngen gibt.

Konstruktion des primitiven pythagoreischen Zahlentripels zu gegebenen Gitter-Koordinaten

Etwas schwieriger ist der umgekehrte Fall: Die Gitter-Koordinaten (j, i) sind gegeben und es soll das rechtwinklige Dreieck zu den SeitenlÀngen (a, b, c) berechnet werden, so dass (a, b, c) ein primitives pythagoreisches Zahlentripel ist.

Die Vorgehensweise ist in Abbildung 9 dargestellt – die Konstruktion zu Abbildung 8 muss umgekehrt werden. Links ist ein Gitter-Punkt (rot) gegeben, der Ursprung im zugehörigen Koordinatensystem ist wieder grĂŒn gekennzeichnet. Der Gitter-Punkt definiert ein rechtwinkliges Dreieck mit Katheten j und i.

Dieses Dreieck wird um den Faktor 2j gestreckt; die Katheten-LĂ€ngen sind jetzt 2j2 und 2ij. Ersteres entspricht nach den Umrechnungsformeln c + a, Letzteres entspricht b.

Das gestreckte Dreieck ist in Abbildung 9 rechts rot eingezeichnet; auch die Katheten-LĂ€ngen eingetragen.

Die LĂ€nge der Hypothenuse des roten Dreiecks ist fĂŒr das weitere Vorgehen irrelevant; wichtig ist, dass ihre Mittelsenkrechte eingetragen wird. Sie schneidet die Kathete (mit LĂ€nge 2j2 = c + a) im Punkt P, der die Kathete in zwei Teile der LĂ€nge c und a teilt.

Man kann jetzt das Dreieck mit den SeitenlÀngen a, b und c einzeichnen (gelb in Abbildung 9).

Abbildung 9: Konstruktion des primitiven pythagoreischen Zahlentripels zu gegebenen Gitter-Koordinaten.Abbildung 9: Konstruktion des primitiven pythagoreischen Zahlentripels zu gegebenen Gitter-Koordinaten.

Aufgabe:

BegrĂŒnden Sie:

  • Warum teilt der Punkt P die rote Kathete in Strecken der LĂ€nge c (links) und a (rechts)?
  • Warum sind die SeitenlĂ€ngen des gelben Dreiecks in Abbildung 9 tatsĂ€chlich a, b und c?

♩ ♩ ♩

Aufgabe:

In Satz 2 sind die Formeln fĂŒr a, b, c und Bedingungen an die einzusetzenden Zahlen i und j formuliert, die zu primitiven pythagoreischen Zahlentripeln fĂŒhren.

Zeigen Sie, dass auch die Formeln

a = (j2 - i2) / 2, b = ji, c = (j2 + i2) / 2

zu primitiven pythagoreischen Zahlentripeln fĂŒhren. Allerdings muss man jetzt die Bedingungen an i und j abĂ€ndern.

Wie lauten diese neuen Bedingungen an i und j?

♩ ♩ ♩

Anwendung: Approximation der Seiten eines beliebigen rechtwinkligen Dreiecks durch primitive pythagoreische Zahlentripel

Der eindeutige Zusammenhang zwischen den Gitter-Koordinaten (j, i) und dem primitiven pythagoreischen Zahlentripel (a, b, c) ĂŒber die Formeln

a = j2 - i2, b = 2ji, c = j2 + i2

und den Bedingungen an (j, i)

  • j > i, i = 1, 2, ...,
  • j und i sind teilerfremd,
  • genau eine der Zahlen j und i ist ungerade und eine ist gerade,

erlaubt es, eine Fragestellung ĂŒber rechtwinklige Dreiecke mit ganzzahligen SeitenlĂ€ngen in eine Fragestellung ĂŒber Gitter-Punkte zu ĂŒbersetzen – oder umgekehrt.

Als konkretes Beispiel soll die Approximation eines rechtwinkligen Dreiecks betrachtet werden.

Aufgabenstellung:

Gegeben ist ein rechtwinkliges Dreieck, das nicht zu einem pythagoreischen Zahlentripel Ă€hnlich ist. Hier wird das konkrete Dreieck mit SeitenlĂ€ngen a' = 1, b' = √3, c' = 2 verwendet.

Gesucht ist eine Folge von primitiven pythagoreischen Zahlentripeln (an, bn, cn), die das gegebene Dreieck in folgendem Sinn approximieren: Das SeitenverhÀltnis an / bn soll sich a' / b' annÀhern.

♩ ♩ ♩

Es ist dann zwar keines der Dreiecke mit SeitenlĂ€ngen an, bn, cn Ă€hnlich zum gegebenen Dreieck; durch die AnnĂ€herung eines Seiten-VerhĂ€ltnisses sollte dies aber in guter NĂ€herung erfĂŒllt sein. Im Sinne der Mathematik ist es wĂŒnschenswert, hier einen schĂ€rferen Begriff von Approximation festzulegen, um die Vorgehensweise zu zeigen, soll dieser etwas unscharfe Begriff ausreichen.

Die Aufgabenstellung wird nun in ein Problem ĂŒber Gitter-Koordinaten umformuliert; dabei hilft Abbildung 3.

Das gegebene Dreieck wird zuerst so gestaucht, dass die Eckpunkte wie in Abbildung 3 auf dem Einheitskreis beziehungsweise im Ursprung liegen. Die Koordinaten (p, q) des Punktes auf dem Einheitskreis sind dann:

p = a' / c' = 1/2, q = b' / c' = √3 / 2

Die Gerade durch die Punkte (-1|0) und (p| q) = (0.5 | √3 / 2) besitzt die Steigung

m = q / (1 + p) = √3 / 3 = 1 / √3

und ist irrational. Damit ist aber auch klar, dass diese Gerade niemals einen Gitter-Punkt (aus Abbildung 4 oder 5) schneidet.

Wie man jetzt weiter vorgeht, ist in Abbildung 10 zu sehen. Dazu ist zuerst das Dreieck mit den SeitenlĂ€ngen p, q und 1 mit dem Einheitskreis eingezeichnet. Der Punkt auf dem Einheitskreis hat eine irrationale y-Koordinate und definiert die Gerade mit Steigung 1 / √3 (blau eingezeichnet.)

Abbildung 10: Vorgehensweise zur Approximation eines gegebenen rechtwinkligen Dreiecks (ErklÀrung im Text).Abbildung 10: Vorgehensweise zur Approximation eines gegebenen rechtwinkligen Dreiecks (ErklÀrung im Text).

Man kann versuchen, eine Folge von Gitter-Punkten (jn, in) anzugeben, die der Gerade mit Steigung m möglichst nahe kommen. Rechnet man diese Gitter-Koordinaten in primitive pythagoreische Zahlentripel um, hat man die gesuchten approximierenden Dreiecke.

Man hat somit das Problem, ein gegebenes rechtwinkliges Dreieck durch primitive pythagoreische Zahlentripel zu approximieren, die nahezu Àhnlich sind, auf das Problem reduziert, in Abbildung 5 diejenigen roten Punkte zu finden, die einer Gerade mit irrationaler Steigung möglichst nahe kommen.

Wie man Folge der Gitter-Punkte (jn, in) bestimmt, ist in Abbildung 10 rechts angedeutet: Man geht schrittweise in j-Richtung vor und findet oberhalb und unterhalb der Geraden zwei Gitter-Punkte (nur zu Beginn bei j = 2 gibt es nur einen Punkt unterhalb). Einer dieser beiden Punkte erzeugt mit Sicherheit kein primitives pythagoreisches Zahlentripel, da i und j nicht gleichzeitig gerade beziehungsweise ungerade sein dĂŒrfen. Bei j = 3 ist dies der Gitter-Punkt (3, 1) (er ist blau eingezeichnet). FĂŒr den anderen Punkt muss noch untersucht werden, ob j und i teilerfremd sind. Sind sie nicht teilerfremd, geht man zum nĂ€chsten j. In Abbildung 10 sind (3, 2) teilerfremd und der Gitter-Punkt ist rot eingezeichnet. Jetzt kann man den Abstand des Gitter-Punktes zur Geraden berechnen (in i-Richtung), also ÎŽ = |i - m*j|. (In Abbildung 10 rot eingezeichnet.)

Mit diesem ÎŽ geht man zum nĂ€chsten j und untersucht wieder, ob es einen geeigneten i-Wert gibt. Falls der zugehörige Gitter-Punkt nĂ€her an der Gerade liegt als ÎŽ, hat man eine besser NĂ€herung gefunden und so weiter. In Abbildung 10 sind nur die drei Gitter-Punkte (2, 1), (3, 1) und (3, 2) eingezeichnet (fĂŒr Letzteren ist auch das zugehörige ÎŽ eingetragen); man erkennt, dass von diesen drei Punkten (2, 1) den kleinsten Abstand zur Gerade hat.

LĂ€sst man etwa j bis 100 laufen, erhĂ€lt man fĂŒr die beste Approximation:

j = 97, i = 56

a = 6273, b = 10864, c = 12545

Vergleicht man nun die Seiten-VerhĂ€ltnisse der Dreiecke (mit 5 gĂŒltigen Stellen):

gegebenes Dreieck Approximation
a' / b' = 0.57735 a / b = 0.57741
a' / c' = 0.50000 a / c = 0.50004
b' / c' = 0.86603 b / c = 0.86600

Die folgende Tabelle zeigt auch die Zwischenergebnisse, also alle NĂ€herung, die beginnend bei j = 2 berechnet wurden:

j i ÎŽ a b c
2 1 0.15470 3 4 5
7 4 0.04145 33 56 65
26 15 0.01111 451 780 901
97 56 0.00298 6273 10864 12545

R-Skripte

Eigenschaften der pythagoreischen Zahlentripeln

Das folgende Skript berechnet zu einem gegebenen Maximalwert max.j alle Kombinationen (j, i) mit j = 2, ..., max.j, i = 1, ..., j-1 die zugehörigen pythagoreischen Zahlentripel gemĂ€ĂŸ den Formeln

a = j2 - i2, b = 2ji, c = j2 + i2,

die oben in den SÀtzen verwendet wurden. ZusÀtzlich wird ausgegeben, ob das pythagoreische Zahlentripel primitiv ist oder nicht. Da zur Berechnung eine Matrix verwendet wird, werden die logischen Werte automatisch konvertiert; TRUE = 1 und FALSE = 0 .

triplesExplicit <- function(max.j){
  stopifnot(is.numeric(max.j), max.j > 1)
  m <- c()
  for(j in (2:max.j)){
    for(i in (1:(j-1)) ){
      triple <- tripleExplicit(j, i)
      m <- rbind(m, c(j, i, triple, isPrimitive(triple)) )
    }
  }
  return(m)
}

m <- triplesExplicit(8)
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    2    1    3    4    5    1
# [2,]    3    1    8    6   10    0
# [3,]    3    2    5   12   13    1
# [4,]    4    1   15    8   17    1
# [5,]    4    2   12   16   20    0
# [6,]    4    3    7   24   25    1
# [7,]    5    1   24   10   26    0
# [8,]    5    2   21   20   29    1
# [9,]    5    3   16   30   34    0
# [10,]    5    4    9   40   41    1
# [11,]    6    1   35   12   37    1
# [12,]    6    2   32   24   40    0
# [13,]    6    3   27   36   45    0
# [14,]    6    4   20   48   52    0
# [15,]    6    5   11   60   61    1
# [16,]    7    1   48   14   50    0
# [17,]    7    2   45   28   53    1
# [18,]    7    3   40   42   58    0
# [19,]    7    4   33   56   65    1
# [20,]    7    5   24   70   74    0
# [21,]    7    6   13   84   85    1
# [22,]    8    1   63   16   65    1
# [23,]    8    2   60   32   68    0
# [24,]    8    3   55   48   73    1
# [25,]    8    4   48   64   80    0
# [26,]    8    5   39   80   89    1
# [27,]    8    6   28   96  100    0
# [28,]    8    7   15  112  113    1

Zur ErklÀrung:

Zeile 1: Die Funktion triplesExplicit() erhĂ€lt als Eingabewert den Maximalwert max.j fĂŒr j und berechnet als RĂŒckgabewert eine Matrix.

Zeile 2: Bei unsinnigen Eingaben stopt die Funktion.

Zeile 3: Die Matrix wird vorbereitet. Bei den folgenden SchleifendurchlĂ€ufen wird jeweils eine Zeile mit rbind() hinzugefĂŒgt

Zeile 4 und 5: Die Schleifen durchlaufen den relevanten Bereich mit: j = 2, ..., max.j, i = 1, ..., j-1.

Zeile 6: Die Funktion tripleExplicit() implementiert lediglich die Formeln zur Berechnung von (a, b, c); sie liefert dieses Zahlentripel als Vektor mit drei Komponenten.

Zeile 7: Pro Zeile werden 6 Zahlen hinzugefĂŒgt: die Koordinaten j und i, die drei Zahlen des Zahlentripels, die Zahl 0 oder 1, die angibt, ob das Zahlentripel primitiv ist oder nicht.

Zeile 13: Die Funktion triplesExplicit() wird mit max.j = 8 aufgerufen: Die Ausgabe war im Theorieteil als Tabelle dargestellt.

Aufgabe:

Implementieren Sie die Funktion tripleExplicit(). Sie erhĂ€lt die beiden Zahlen i und j als Eingabewerte und gibt das zugehörige pythagoreische Zahlentripel als Vektor zurĂŒck.

♩ ♩ ♩

m <- triplesExplicitExtended(max.j = 8, isprimitive = FALSE)
m
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  [,9] [,10] [,11] [,12]
# [1,]    2    1    3    4    5    1    0    1    16     4     4     1
# [2,]    3    1    8    6   10    0    2    2    36     9     9     1
# [3,]    3    2    5   12   13    1    0    1   144    36     9     4
# [4,]    4    1   15    8   17    1    0    1    64    16    16     1
# [5,]    4    2   12   16   20    0    0    0   256    64    16     4
# [6,]    4    3    7   24   25    1    0    1   576   144    16     9
# [7,]    5    1   24   10   26    0    2    2   100    25    25     1
# [8,]    5    2   21   20   29    1    0    1   400   100    25     4
# [9,]    5    3   16   30   34    0    2    2   900   225    25     9
# [10,]    5    4    9   40   41    1    0    1  1600   400    25    16
# [11,]    6    1   35   12   37    1    0    1   144    36    36     1
# [12,]    6    2   32   24   40    0    0    0   576   144    36     4
# [13,]    6    3   27   36   45    0    0    1  1296   324    36     9
# [14,]    6    4   20   48   52    0    0    0  2304   576    36    16
# [15,]    6    5   11   60   61    1    0    1  3600   900    36    25
# [16,]    7    1   48   14   50    0    2    2   196    49    49     1
# [17,]    7    2   45   28   53    1    0    1   784   196    49     4
# [18,]    7    3   40   42   58    0    2    2  1764   441    49     9
# [19,]    7    4   33   56   65    1    0    1  3136   784    49    16
# [20,]    7    5   24   70   74    0    2    2  4900  1225    49    25
# [21,]    7    6   13   84   85    1    0    1  7056  1764    49    36
# [22,]    8    1   63   16   65    1    0    1   256    64    64     1
# [23,]    8    2   60   32   68    0    0    0  1024   256    64     4
# [24,]    8    3   55   48   73    1    0    1  2304   576    64     9
# [25,]    8    4   48   64   80    0    0    0  4096  1024    64    16
# [26,]    8    5   39   80   89    1    0    1  6400  1600    64    25
# [27,]    8    6   28   96  100    0    0    0  9216  2304    64    36
# [28,]    8    7   15  112  113    1    0    1 12544  3136    64    49

m <- triplesExplicitExtended(max.j = 11, isprimitive = TRUE)
m
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]  [,9] [,10] [,11] [,12]
# [1,]    2    1    3    4    5    1    0    1    16     4     4     1
# [2,]    3    2    5   12   13    1    0    1   144    36     9     4
# [3,]    4    1   15    8   17    1    0    1    64    16    16     1
# [4,]    4    3    7   24   25    1    0    1   576   144    16     9
# [5,]    5    2   21   20   29    1    0    1   400   100    25     4
# [6,]    5    4    9   40   41    1    0    1  1600   400    25    16
# [7,]    6    1   35   12   37    1    0    1   144    36    36     1
# [8,]    6    5   11   60   61    1    0    1  3600   900    36    25
# [9,]    7    2   45   28   53    1    0    1   784   196    49     4
# [10,]    7    4   33   56   65    1    0    1  3136   784    49    16
# [11,]    7    6   13   84   85    1    0    1  7056  1764    49    36
# [12,]    8    1   63   16   65    1    0    1   256    64    64     1
# [13,]    8    3   55   48   73    1    0    1  2304   576    64     9
# [14,]    8    5   39   80   89    1    0    1  6400  1600    64    25
# [15,]    8    7   15  112  113    1    0    1 12544  3136    64    49
# [16,]    9    2   77   36   85    1    0    1  1296   324    81     4
# [17,]    9    4   65   72   97    1    0    1  5184  1296    81    16
# [18,]    9    8   17  144  145    1    0    1 20736  5184    81    64
# [19,]   10    1   99   20  101    1    0    1   400   100   100     1
# [20,]   10    3   91   60  109    1    0    1  3600   900   100     9
# [21,]   10    7   51  140  149    1    0    1 19600  4900   100    49
# [22,]   10    9   19  180  181    1    0    1 32400  8100   100    81
# [23,]   11    2  117   44  125    1    0    1  1936   484   121     4
# [24,]   11    4  105   88  137    1    0    1  7744  1936   121    16
# [25,]   11    6   85  132  157    1    0    1 17424  4356   121    36
# [26,]   11    8   57  176  185    1    0    1 30976  7744   121    64
# [27,]   11   10   21  220  221    1    0    1 48400 12100   121   100

Die Funktion triplesExplicitExtended() berechnet weitere GrĂ¶ĂŸen, die triplesExplicit() noch nicht berechnet hat (siehe Abschnitt Eigenschaften der pythagoreischen Zahlentripel).

Aufgabe:

Implementieren Sie die Funktion triplesExplicitExtended() .

Approximation eines rechtwinkligen Dreiecks durch primitive pythagoreische Zahlentripel

Oben wurde im entsprechenden Abschnitt der Algorithmus angedeutet, mit dem man ein gegebenes rechtwinkliges Dreieck mit beliebigen SeitenlÀngen durch primitive pythagoreische Zahlentripel approximieren kann, so dass sich die Seiten-VerhÀltnisse annÀhern.

Das folgende Skript zeigt eine mögliche Realisierung des Vorgehens.

Die Funktion next.i(j, x) untersucht zu gegebenem j und der Geradensteigung x die beiden der Gerade benachbarten Gitter-Punkte. Findet man keinen entsprechenden Wert fĂŒr i, wird NA zurĂŒckgegeben; dies ist der Fall, wenn

  • die Gitter-Punkte gleiche ParitĂ€t haben oder
  • einen gemeinsamen Teiler besitzen.

Andernfalls wird der geeignete Wert von i zurĂŒckgegeben. Ob die NĂ€herung besser ist als frĂŒhere NĂ€herungen (kleineres ÎŽ), wird hier noch nicht untersucht.

Die Implementierung von next.i(j, x) lautet:

next.i <- function(j, x){
  stopifnot(j > 0, x < 1)
  i <- trunc(x * j)    # i ist der kleinere der beiden möglichen Werte
  if(isEven(j + i)){      # gleiche ParitÀt: verwende i + 1
    i <- i + 1            # ungleiche ParitÀt: verwende i
  }
  if(isCoprime(i, j)) return(i)
  else return(NA)
}

Die Funktion verwendet die beiden Funktionen isEven(n) und isCoprime(i, j) ; sie testen, ob eine Zahl gerade ist beziehungsweise ob zwei Zahlen teilerfremd sind.

Die eigentliche Approximation wird durch die Funktion approximate(j = 2, i = 1, x, max.j = 100) durchgefĂŒhrt.

approximate <- function(j = 2, i = 1, x, max.j = 100){
  stopifnot(is.wholenumber(j), is.wholenumber(i), x < 1)
  
  m.result <- c()
  delta <- 0.5    # Startwert fĂŒr delta: 
			  # wird bei jedem Durchlauf geprĂŒft, 
              # ob es kleiner wird und evtl neu gesetzt
  for(k in (2:max.j)){
    i <- next.i(k, x)

    if(is.na(i)) next        # kein i gefunden

    delta.new <- abs(k * x - i)    # Ist i besser als 
							# im letzten Schleifendurchlauf?
    if( delta.new < delta ){
      delta <- delta.new
      m.row <- c(k, i, delta, tripleExplicit(i = i, j = k))
      m.result <- rbind(m.result, m.row)
    }
    else next
  }
  colnames(m.result) <- c("j", "i", "delta", "a", "b", "c")
  row.names(m.result) <- (1:nrow(m.result))
  return(m.result)
}

Die Funktion approximate(j = 2, i = 1, x, max.j = 100) fĂŒhrt die Iteration ĂŒber j durch (bis zu einem vorgegeben Maximalwert). In der Schleife (hier wird der Index mit k bezeichnet) wird der zugehörige Wert von i von next.i(k, x) angefordert und entschieden, ob er zu einer besseren NĂ€herung fĂŒhrt. Falls ja, wird an die Matrix m.result eine weitere Zeile angehĂ€ngt.

Den Aufruf von approximate(j = 2, i = 1, x, max.j = 100) zeigt das folgende Skript (die Ergebnisse waren oben als Tabelle dargestellt):

m <- approximate(x = 1 / sqrt(3))
m
#    j  i       delta    a     b     c
# 1  2  1 0.154700538    3     4     5
# 2  7  4 0.041451884   33    56    65
# 3 26 15 0.011106999  451   780   901
# 4 97 56 0.002976111 6273 10864 12545

Aufgaben

Programmier-Aufgabe:

Punkte mit rationalen Koordinaten auf dem Einheitskreis

Berechnen Sie die rationalen Koordinaten der Punkte auf dem Einheitskreis, die von primitiven pythagoreischen Zahlentripeln erzeugt werden. Berechnen Sie diese aus Gitter-Punkten mit j < max.j, wobei Letzteres vorgegeben ist.

Schreiben Sie das Programm so, dass Sie max.j leicht neu setzen können.

Berechnen Sie fĂŒr benachbarte Punkte auf dem Einheitskreis den maximalen Abstand. Der Abstand soll dazu:

  • als Differenzwinkel (im Bogenmaß) der Punkte beziehungsweise
  • als euklidischer Abstand definiert sein.

LÀsst sich erkennen, wie der maximale Abstand von max.j abhÀngt?

Bei welchem pythagoreischen Zahlentripel ist der Abstand zu den Nachbarn am GrĂ¶ĂŸten?