19) Hypergeometrische Funktion [20.txt] (pochhammer, convert( ,hypergeom), hypergeom, readlib(hypergeom), simplify( ,hypergeom), Formelsammlung, Konvergenzbereich) ========================================================================= Gelegentlich konfrontiert Maple den Benutzer mit der hypergeometrischen Funktion. Das geschieht zum Beispiel, wenn man in dem Integral aus Uebung 7, Aufgabe 1 d) die obere Grenze "1" durch "X" ersetzt und es dann mit den Integrationsmethoden aus dem Skript (Abschnitt 8 F) behandelt: > restart: > Int(x^(2*k+1)/sqrt(1-x^2),x=0..X)= student[changevar](x=sin(t), Int(x^(2*k+1)/sqrt(1-x^2),x=0..X), t); > about(k); > assume(k,posint);about(k); Das Integral ist offenbar = Int(sin(x)^(2*k+1),x = 0 .. arcsin(X)); . Hier wird gemaess dem Skript "Integrationsmethoden", Abschnitt 8 B, eingesetzt: dx=2/(1+t^2) dt, sin(x)=2t/(1+t^2) mit t=tan(x/2): > int((2*t)^(2*k+1)*2/(1+t^2)^(2*k+2),t=0..tan(arcsin(X)/2)); Im Spezialfall X=1 tritt die hypergeometrische Funktion nicht in Erscheinung: > arcsin(1); > tan(arcsin(1)/2); > int((2*t)^(2*k+1)*2/(1+t^2)^(2*k+2),t=0..tan(Pi/4)); > k:=3; > evalf(%%); > k:=5:evalf(int((2*t)^(2*k+1)*2/(1+t^2)^(2*k+2),t=0..tan(Pi/4))); Vergleich mit dem im vorigen Abschnitt erhaltenen Ergebnis: > k:=3:evalf(Beta(1/2,k+1)/2); > k:=5:evalf(Beta(1/2,k+1)/2); > k:='k'; OK ##################################################################################### Nun wollen wir die obige Formel weiterdiskutieren, in der die hypergeometrische Funktion auftritt: > ?hypergeom The function hypergeom(n, d, z) is the generalized hypergeometric function F(n, d, z). This function is also known as Barnes's extended hypergeometric function. If there are j coefficients in n, and k coefficients in d, this function is also known as jFk. The definition of F(n, d, z) is sum ( (product( GAMMA( n[i]+k ) / GAMMA( n[i] ), i=1..j)*z^k ) / (product( GAMMA( d[i]+k ) / GAMMA (d[i] ), i=1..m)*k! ), k=0..infinity) where j is the number of terms in the list [n1, n2, ... ] and m is the number of terms in the list [d1, d2, ...]. If n[i] = -m, a non-positive integer, the series stops after m terms. Die gebraeuchlichste Definition benutzt das Pochhammer-Symbol `(a)`[n]; , das definiert ist durch pochhammer(x,n) = x*(x+1)*...*(x+n-1) fuer natuerliche n und reelle x sowie durch pochhammer(z,a) = GAMMA(z+a)/GAMMA(z) fuer komplexe z und lautet: hypergeom([a[1],a[2],...,a[p]],[b[1],b[2],...b[q]],z)= Sum(product(`(a[j])`[n],j = 1 .. p)*z^n/(product(`(b[j])`[n],j = 1 .. q)*n!), n = 0 .. infinity); Unter > ?convert,hypergeom findet man den Hinweis: No attempt is made to ensure that the resulting hypergeometric function is convergent or ---------------------------------------------------------------------------------------- terminates. ----------- Fuer den Spezialfall p=2, q=1 spricht man von der Gauss'schen hypergeometrischen Funktion. Hypergeometrische Funktionen der Form hypergeom([-m,b],[c],z) oder F([-m,b],[-m-l;z) mit m,l=0,1,2, ... haben abbrechende Reihen, sind also Polynome der Ordnung m. Das liegt daran, dass in dem Produkt, das das Pochhammersymbol definiert, dann eine Null vorkommt: > PP:=k->pochhammer(-5,k); > map(PP,[0,1,2,3,4,5,6,7]); -->> pochhammer (-m,k)=0 falls m = 1,2,3,... und k>m. > ?pochhammer > pochhammer(1,n); > convert(%,factorial); > expand(hypergeom([-5],[],z)); > simplify(hypergeom([-5],[],z),hypergeom); > with(share): > with(FPS): > FPS(hypergeom([-5],[],x),x=0); > taylor(hypergeom([-5],[],x),x=0); > taylor(hypergeom([-5],[],x),x=0,20); Man beachte, dass der 'O'-Term fehlt. > ?convert,hypergeom > Sum(x^k/k!,k=0..infinity); > convert(%,hypergeom); Darstellung der Exponentialfunktion als eine hypergeometrische Reihe: > hypergeom([],[],z); Dass dies die Taylorreihe der Exponentialfunktion ist, kann man nach Einlesen der hypergeometrischen Regeln mittels "simplify" verifizieren: > readlib(hypergeom); > simplify(%%); Man kann auch den Befehl "taylor" dazu verwenden: > taylor(%%%,z=0); > taylor(exp(z),z=0); > convert(exp(z),hypergeom); Mittels "simplify(hypergeom( ))" kann man eine kleine Formelsammlung erstellen, die Darstellungen elementarer Funktionen als hypergeometrische Funktionen enthaelt: FORMELSAMMLUNG: Elementare Funktionen in hypergeometrischer Darstellung. ============================================================= > hypergeom([-a],[],-z)=simplify(hypergeom([-a],[],-z)); > hypergeom([a,a-1/2],[2*a],z)=simplify(hypergeom([a,a-1/2],[2*a],z)); > hypergeom([],[1/2],-z^2/4)=simplify(hypergeom([],[1/2],-z^2/4)); > z*hypergeom([],[3/2],-z^2/4)=z*simplify(hypergeom([],[3/2],-z^2/4)); > z*hypergeom([],[3/2],(z/2)^2)=z*simplify(hypergeom([],[3/2],(z/2)^2)); > hypergeom([],[1/2],(z/2)^2)=simplify(hypergeom([],[1/2],(z/2)^2)); > z*hypergeom([1,1],[2],-z)=z*simplify(hypergeom([1,1],[2],-z)); > 2*z*hypergeom([1/2,1],[3/2],z^2)=2*z*simplify(hypergeom([1/2,1],[3/2],z^2)); > assume(z, positive); > z*hypergeom([1/2,1/2],[3/2],z^2)=z*simplify(hypergeom([1/2,1/2],[3/2],z^2)); > z:='z'; > hypergeom([1,1/2],[3/2],-z^2)=simplify(hypergeom([1,1/2],[3/2],-z^2)); Der Gueltigkeitsbereich dieser Formeln ist die Menge aller komplexen z mit abs(z) < 1; mit Ausnahme der Formeln fuer sin(z), cos(z), sinh(z), cosh(z), die fuer alle komplexen z gelten. Wir bemerken noch, dass man sich das Einlesen von "readlib(hypergeom)" sparen kann, indem man den Befehl "simplify( ,hypergeom)" verwendet: > restart: > hypergeom([],[],z); > simplify(%,hypergeom); ========================================================================== Zurueck zum obigen Beispiel: > restart: > limit(t^(2*k+2)*2^(2*k+1)*hypergeom([k+1, 2*k+2],[2+k],-t^2)/(k+1), t = tan(arcsin(X)/2),left); Wir hatten oben die Testfaelle k=3, k=5, X=1 (d.h. arcsin(X)=Pi/2). > k:=3:simplify(t^(2*k+2)*2^(2*k+1)*hypergeom([2*k+2, k+1],[2+k],-t^2)/(k+1),hypergeom); > subs(t=tan(Pi/4),%); > evalf(%); > k:=5:simplify(t^(2*k+2)*2^(2*k+1)*hypergeom([2*k+2, k+1],[2+k],-t^2)/(k+1),hypergeom); > evalf(subs(t=tan(Pi/4),%)); Die Werte stimmen mit den frueher erhaltenen ueberein. =========================================================================== > k:='k'; =========================================================================== Kontrolle: Konvergiert die hypergeometrische Reihe ueberhaupt im Fall k=3? > test1:=n->pochhammer(k+1,n); > k:=3:map(test1,[1,2,3,4,5]); > convert(pochhammer(k+1,n),factorial); > convert(pochhammer(2*k+2,n),factorial); > convert(pochhammer(k+2,n),factorial); > k:='k'; > assume(n,posint); Die Koeffizienten: > test2:=n->24*(3+n)!*(7+n)!/6/5040/(4+n)!/n!; > map(test2,[2,3,4,5,6,7,8,20]); Genauer: Das Quotientenkriterium liefert: > limit(test2(n)/test2(n+1),n=infinity); -->> Konvergenzradius =1! -->> die hypergeometrische Reihe ist konvergent fuer alle abs(x) < 1;, aber keine Aussage fuer x=-(tan(Pi/4))^2 : > evalf(-(tan(Pi/4))^2); Es lag also keine Konvergenz vor. Das Ergebnis, das Maple lieferte, war trotzdem gueltig. Es beruht auf der sogenannten "analytischen Fortsetzbarkeit" (Stoff der Analysis IV) Wie in "?convert,hypergeom" (siehe oben) zu lesen ist, gibt Maple von sich aus keinen Hinweis darauf, ob die Reihe definiert ist. ======================================================================================== Man braucht also generelle Kenntnisse ueber den Konvergenzradius der hypergeometrischen Reihe! Die Reihe pFq(a[1],a[2], ... a[p]; b[1],b[2], ... b[q]; z) , konvergiert in: ---der ganzen komplexen Ebene, falls p <= q, -b[j] nicht in {0,1,2,3, ...} fuer alle j=1,2, ... q ---der ganzen komplexen Ebene, falls -a[k] in {0,1,2,3, ...} fuer ein natuerliches k und -b[j] nicht in {0,1,2,3, ... ,a[j-1]} fuer alle j=1,2, ... q ---fuer abs(z) <= 1 , falls p=q+1 und eta < 0 ---fuer abs(z) <= 1 , z <> 1 , falls p=q+1 und 0 <= eta < 1 ---fuer abs(z) < 1 , falls p=q+1 und 1 <= eta; ---fuer z = 0 , falls q+1 < p Sie divergiert in allen anderen Faellen. Dabei ist eta = Re(Sum(a[j],j = 1 .. p)-Sum(b[j],j = 1 .. q)) . Im vorliegenden Fall ist p=2, q=1, a[1] = k+1 , a[2] = 2*k+2, b[1] = k+2 , also p=q+1 und eta = 2*k+1 und somit 1 < eta fuer alle k=1,2,3, ...