Gamma-Funktion - der HTL Saalfelden

Werbung
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
Herunterladen