| |
|
|
p.specht
| Die Funktion "Faktorielle"ist nur für positive GANZE Zahlen definiert: 5 ! = 1 * 2 * 3 * 4 * 5 = 120. Was aber ist z.B. 5.2 ! Wie soll man das rechnen? Auch darüber hat sich Herr Leonard Euler schon A.D. 1729 Gedanken gemacht: Er fand eine Funktion, die ähnlich wie die Fakultät funktioniert, aber im gesamten (im nachstehenden Programm nur positiven) Float-Zahlenbereich Ergebnisse liefert:
Gamma( x+1 ) ergibt dann genau x ! . Will man also die Fakultät von 5.2 wissen, berechne man die Gamma-Funktion für 6.2: Die Antwort: 5.2! = Gamma(6.2) = 169.406099462... Klar, sie mußte ja größer als 120 und kleiner als 6!=720 sein...
Verwendet wird das z.B. in der Versicherungsmathematik zur Bestimmung kleiner und mittlerer Schadenswahrscheinlichkeiten, oder in der Nachrichtentechnik, wo sie die Grundlage der sog. Gammaverteilung darstellt, die in Verkehrsauslastungsgleichungen (Netzwerkkapazitäts-Dimensionierung) zur Anwendung kommt. Die Gammafunktion-1 steht übrigens auch im Google-Sucheingabefeld zur Verfügung: Einfach ' 5.2 ! ' eingeben...
WindowTitle "Gamma-Funktion für Reelle Werte > 0 "
' Fortran90-Source: https://jean-pierre.moreau.pagesperso-orange.fr/Fortran/gamma_f90.txt
' Migriert nach XProfan11.2a 2014-10 by P.Specht, Wien; Ohne jedwede Gewähr!
' Details: https://de.wikipedia.org/wiki/Gammafunktion bzw.
' https://en.wikipedia.org/wiki/Stirling%27s_approximation#Versions_suitable_for_calculators
WindowStyle 24:font 2:randomize
Window %maxx/4,%maxy/4-%maxx/2,%maxy/2
Main:
Test_Gamma
Waitinput
End
'*********************************************
'* Program to demonstrate the Gamma Function *
'* ----------------------------------------- *
'* Reference: *
'* "Numerical Recipes, by W.H. Press, B.P. *
'* Flannery, S.A. Teukolsky and T. Vetter- *
'* ling, Cambridge University Press, 1986" *
'* [BIBLI 08]. *
'* ----------------------------------------- *
'* SAMPLE RUN: *
'* *
'* X Gamma(X) *
'* ------------------------- *
'* 0.5000 1.772453851 *
'* 1.0000 1.000000000 *
'* 1.5000 0.886226925 *
'* 2.0000 1.000000000 *
'* 2.5000 1.329340388 *
'* 3.0000 2.000000000 *
'* 3.5000 3.323350970 *
'* 4.0000 5.999999999 *
'* 4.5000 11.631728395 *
'* 5.0000 23.999999996 *
'* *
'*********************************************
PROC Test_Gamma
declare x!,y!
declare i&
print
print " X Gamma(X) "
print " __________________________________ "
x!=0
whileloop 100
x!=x!+0.1
y! = Gamma(x!)
Print "\n";format$(" ##0.0####",x!),tab(14);format$("%g",round(y!,15))
case %csrlin>20:waitinput
endwhile
print
waitinput
endproc
proc Gamma :parameters xx!
'*******************************************
'* FUNCTION GAMMA(X) *
'* --------------------------------------- *
'* Returns the value of Gamma(x) in double *
'* precision as EXP(LN(GAMMA(X))) for X>0. *
'*******************************************
case xx!<=0:return 0
declare cof![6],x!,tmp!,ser!,stp!,half!,one!,fpf!,j&,gamma!
cof![1]=76.18009173:cof![2]=-86.50532033:cof![3]=24.01409822
cof![4]=-1.231739516:cof![5]=0.00120858003:cof![6]=-0.00000536382
stp!=2.50662827465:half!=0.5:one!=1.0:fpf!=5.5
x!=xx!-one!
tmp!=x!+fpf!
tmp!=(x!+half!)*LN(tmp!)-tmp!
ser!=one!
whileloop 6:j&=&Loop
x!=x!+one!
ser!=ser!+cof![j&]/x!
endwhile
Gamma! = EXP(tmp!+LN(stp!*ser!))
return Gamma!
endproc
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 15.05.2021 ▲ |
|
|
|