H ÖHERE T ECHNISCHE B UNDESLEHRANSTALT S AALFELDEN HÖHERE ABTEILUNG FÜR ELEKTROTECHNIK UND INFORMATIONSTECHNIK IV.E 2004/2005 Gamma-Funktion Fakultät von reellen Zahlen mit dem TI-Voyage 200/TI92 Michael WALSER E-Mail: [email protected] INHALT 1 mathematische Grundlagen ............................................................................ 2 1.1 Darstellung und Näherung der Γ-Funktion.....................................................3 1.1.1 Gamma-Funktion nach Gauß ..................................................................3 1.1.2 Nährung nach Stirling............................................................................4 1.1.3 Ergänzungssatz der Gamma-Funktion ...................................................4 2 Entwurf eines Algorithmus für den TI92/Voyage 200 ..................................... 6 2.1 2.2 3 Umschreiben in TI- Basic ............................................................................7 Anwendung der Funktion ............................................................................8 Quellenangaben .............................................................................................. 9 1 Die mathematische Grundlagen Gamma-Funktion wurde von Leonhard Euler zur Interpolation (Nährung) der Fakultätsfunktion (f(x)=x!) entdeckt. Er stellte es 1730 in einem Brief an Christian Goldbach folgendes Integral vor: ∞ Γ( x) = ∫ t x −1 ⋅ e − t dt 0 Dieses Integral gilt für alle x ∈ \ > 0 . Die Gammafunktion hat außerdem keine Nullstelle. Abbildung 1.1 zeigt die Gammafunktion graphisch. 40 Γ ( x) 20 0 2 4 6 8 x Abbildung 1.1 Aus der Funktionsgleichung Γ( x + 1) = x ⋅ Γ( x) lässt sich mit Hilfe der vollständigen Induktion für alle natürlichen Zahlen ( ` ) folgendes Beweisen: Γ( n) = ( n − 1)! Die Gammafunktion ist genau so bestimmt, dass sie für alle n ∈ ` genau (n − 1)! als Ergebnis bringt. Es gibt demnach also 2 Arten die Fakultätsfunktion darzustellen: 1. Für alle n ∈ ` kann mit der Produktformel gearbeitet werden, die jeder Taschenrechner verwendet: n n! = ∏ n n =1 © 2004/05 by Michael WALSER, HTL Saalfelden 2 2. Für alle n ∈ \ muss das Euler-Integral angesetzt werden. Dies kann aber besonders bei CAS (=Computer Algebra Systemen) wie der „Advanced Mathematics Software“ die etwa beim TI92/Voyage 200 eingesetzt wird besonders lange dauern, da es sich bei dem oben genannten Integral noch dazu um ein uneigentliches Integral handelt. 1.1 Darstellung und Näherung der Γ-Funktion 1.1.1 Gamma-Funktion nach Gauß Carl Friedrich Gauß hat um 1820 durch die Ausweitung des Definitionsbereichs der GammaFunktion auf x ∈ \ \{0, −1, −2, −3,...} folgende Formel errechnet, die Gamma-Funktion nach Gauß ⎛ ⎞ n !n x Γ( x ) = lim ⎜ ⎟ n →∞ x ( x + 1)( x + 2)...( x + n ) ⎝ ⎠ für x ∈ \ \ {0, −1, −2, −3,...} oder auch wie folgt ⎛ ⎞ x ⎜ ⎟ n !n ⎜ ⎟ Γ ( x) = lim n n →∞ ⎜ x ⋅ ( x + n) ⎟ ⎜ ∏ ⎟ ⎝ n =1 ⎠ für x ∈ \ \ {0, −1, −2, −3,...} 5 Γ ( x) 4 2 0 2 4 5 x Abbildung 1.2: Die Gammafunktion mit erweitertem Definitionsbereich © 2004/05 by Michael WALSER, HTL Saalfelden 3 1.1.2 Nährung nach Stirling James Stirling entwickelte um etwa 1720 herum eine Nährungsformel zur Berechnung der Gammafunktionswerte: Γ ( x) = 2π ⋅ x x− 1 2 ⋅ e− x Allerdings unterschätzt diese einfache Nährungsformel den tatsächlichen Funktionswert an der stelle x. Im laufe der Zeit hat man der „einfachen Stirling-Formel“ einen Korrekturfaktor µ ( x) in der e-Potenz erweitert: Γ ( x) = 2π ⋅ x setzt man für x = x− 1 2 ⋅ e− x+ µ ( x ) 1 ein so überschätzt man den tatsächlichen wert aber um höchstens 1 360 ⋅ x 3 12x wobei zu erwähnen ist, das eine derart korrigierte Stirling-Formel eine erstaunliche Genauigkeit erreicht. Der relative Fehler entspricht in etwa 3 ⋅ 10 -3 . Eine weitere Korrektur würde die Genauigkeit weiter verbessern. Deshalb ist der wert exakt mit 0 < µ(x) < zu berechnen, wobei die Lage von 1.1.3 1 12x µ ( x) nur geschätzt werden kann. Ergänzungssatz der Gamma-Funktion Aus dem Ergänzungssatz der Gamma-Funktion ergibt sich folgende Beziehung Γ( x) = Γ1 ( x + n) x ⋅ ( x + 1) ⋅ ( x + 2) ⋅ ( x + 3)... ⋅ ( x + ( n − 1)) setzt man nun für Γ1 ( x) die Gamma-Funktion nach Stirling ein und beachtet den Korrekturfaktor µ ( x) und den Zusammenhang, dass man für x = 1 den tatsächlichen Wert um 1 3 über12x 360 ⋅ x schätzt so ergibt sich nach einigen Vereinfachungen 2π a − a +12 a − 360⋅a3 ⋅a ⋅e a b 1 Γ( x) = 1 wobei a = (x + n) und b = x ⋅ ( x + 1) ⋅ ( x + 2) ⋅ ( x + 3)... ⋅ ( x + (n − 1)) © 2004/05 by Michael WALSER, HTL Saalfelden 4 Diese Formel arbeitete bereits bei einem n = 4 erstaunlich genau: Beispiel: Wert für Γ ⎛ 1 ⎞ ⎜ ⎟ ⎝3⎠ exakte Lösung (Mathcad auf 12 Dezimalen) 2.67893853470 Nährung für n = 4 (12 Dezimalen): 2.67893719504 Damit ergibt sich ein relativer Fehler von −5, 00 ⋅10−7 , womit sich durchaus arbeiten lässt. Nährung für n = 6 (12 Dezimalen): 2.67893832982 Damit ergibt sich ein relativer Fehler von −7.64 ⋅10−8 , womit sich durchaus arbeiten lässt. Nährung für n = 10 (12 Dezimalen): 2.67893851678 Damit ergibt sich ein relativer Fehler von −6, 69 ⋅10−9 , womit sich durchaus arbeiten lässt. Man kann also sagen, das sich eine Erhöhung von n=4 auf n = 10 kaum spürbare Veränderungen bring. Da der TI92 Standardmäßig auf Float-6 (Fließkommzahlen bis zur 6. Dezimale anzeigen) eingestellt ist, ist ein n = 10 hier wohl die passende Lösung, da die letzte Dezimale ja dann sowieso vom Taschenrechner gerundet wird und mit einer Genauigkeit von −6, 69 ⋅10−9 kann man hoffentlich auch leben (ansonsten sollte man auf eine Software wie Mathcad oder Mathematica umsteigen, die die Gamma-Funktion auf beliebige Genauigkeit berechnen anhand des EulerIntegrals). © 2004/05 by Michael WALSER, HTL Saalfelden 5 2 Entwurf eines Algorithmus für den TI92/Voyage 200 Wir haben nun eine Formel, die den Funktionswert an der Stelle x mit einem relativen Fehler von −6, 69 ⋅10−9 berechnet. Weiters müssen wir aber auch noch einige Sonderfälle berücksichtigen: 1. ist x eine positive ganze Zahl, so gilt Γ(n) = (n − 1)! 2. ist x eine negative ganze Zahl oder x=0, so ist die Funktion nicht definiert 3. für negative Zahlen (mit Ausnahme der negativen ganzen Zahlen) müssen noch ein paar spezielle Korrekturen durchgeführt werden 2π a − a + 12a − 360⋅a3 ⋅a ⋅e a b 1 c= 1 Abbildung 2.1: Flussdiagramm des Algorithmus © 2004/05 by Michael WALSER, HTL Saalfelden 6 2.1 Umschreiben in TI- Basic So, nachdem der Algorithmus zumindest einmal Theoretisch auf dem Papier existiert muss er jetzt noch in ein TI-Basic-Programm umgeschrieben werden. Hilfestellung dazu gibt es in diversen Referenz-Manuals auf der Webseite von Texas Instrumens. Gamma(var) Func Local a,b,c,i,x If iPart(var)=var Then If var>0 Then Return (var-1)! Else Return "undefiniert" EndIf Else 0→i var→x While x<0 i+1→i x+1→x EndWhile (x+10)→a x*(x+1)*(x+2)*(x+3)*(x+4)*(x+5)*(x+6)*(x+7)*(x+8)*(x+9)→b √((2*Œ)/a)*a^a*ℯ^(⁻a+(1/(12*a))-(1/(360*a^3)))/b→c If i>0 Then While i>0 i-1→i c/(var+i)→c EndWhile EndIf Return approx(c) EndIf EndFunc Der oben beschriebene Programmablauf lässt sich ohne weiteres in den TI abschreiben mit Hilfe des Programmeditors (NEUÆFunktion) erstellen. Wichtig ist dabei nur, dass die fertige Funktion einmal ausgeführt wurde, bevor man Sie archiviert und damit vor dem Löschen schützt. Das ist nötig, damit der TI das File mit dem kompilierten Code speichert, und die Datei nicht vor jedem ausführen erst neu kompilieren muss. Damit der TI den kompilierten Code anhängen kann, darf die Funktion nicht archiviert und damit vor Veränderungen geschützt sein. Das gilt auch bei der Übertragung auf einen anderen TI. Erst einmal mit beliebigem wert ausführen und DANN erst archivieren. Es ist ein enormer Geschwindigkeitsgewinn zu bemerken. © 2004/05 by Michael WALSER, HTL Saalfelden 7 2.2 Anwendung der Funktion Anwenden lässt sich die Funktion ganz einfach. Wenn die Funktion beispielsweise unter dem Namen „gamma“ abgespeichert wird, wendet man die Funktion wie folgt an: Für den Funktionswert an der Stelle 1/3: gamma(1/3) 2.67893851679 Um die Fakultät von 1/3 zu berechnen, gilt wiederum die Formel: Für die Fakultät gilt also Γ( n) = ( n − 1)! n ! = Γ( n + 1) Die Fakultät von 1/3 erhält man demnach durch gamma(1/3+1) 0.8929795078 Am besten ist es man erstellt auch noch gleich eine 2 Funktion mit dem Namen fakult und folgendem Inhalt: fakult(var) Func Gamma(var+1) EndFunc Wichtig ist nur, dass sich die Funktion gamma() und fakult() im gleichen Ordner auf dem Taschenrechner befinden. Jetzt kann man die Fakultät ganz einfach mit fakult(1/3) 0.8929795078 berechnen. © 2004/05 by Michael WALSER, HTL Saalfelden 8 3 • Quellenangaben Wikipedia – Die freie Online-Enzykopedädie (http://www.wikipedia.org) • Wolfram Research - Mathematica MathWorld (http://mathworld.wolfram.com/GammaFunction.html) • Analysis I Gammafunktion (Skriptum) Prof. Rost – Universität Heidelberg (http://mathphys.fsk.uni-heidelberg.de/skripte/Files/Mathe/Analysis/Rost/ana1_WS9798.zip) • Funktionstheorie (Skriptum) Dr. Demel-Team & Trappaschmidti (http://www.hirnwindungen.de/Mathe/skripte/funktionentee.pdf) • Diverse GuideBooks, Software, SDK’s… (http://www.education.ti.com) Alle in diesem Skriptum vorhandenen Befehle und Funktionen wurden auf einem Texas Instrumens voyage 200 PLT mit OS Version 2.09 (03/27/2003) nachvollzogen. Sollten Sie Fehler in diesem Skriptum, den Formeln oder dergleichen Finden, senden Sie mir die Fehler und eventuelle Lösungsvorschläge bitte per E-Mail zu. Für eventuelle Verbesserungen, Ideen, Kritiken oder andere Anregungen bin ich ebenfalls immer Dankbar. Januar 2005 Michael WALSER HTL Saalfelden [email protected] © 2004/05 by Michael WALSER, HTL Saalfelden 9