Re: Converting a 3F2 to elementary functions

*To*: mathgroup at smc.vnet.net*Subject*: [mg58189] Re: Converting a 3F2 to elementary functions*From*: Paul Abbott <paul at physics.uwa.edu.au>*Date*: Tue, 21 Jun 2005 06:03:38 -0400 (EDT)*Organization*: The University of Western Australia*References*: <d9632c$q2i$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

In article <d9632c$q2i$1 at smc.vnet.net>, carlos at colorado.edu wrote: > In a fluid-mechanics application I need the 3F2 hypergeometric > function (parameter m is a positive integer) > > g32[m_,x_]:= x^2*HypergeometricPFQ[{1,2*m-1,1},{m+1/2,2},x^2]; > > For small m this converts (via FunctionExpand and Simplify) to > elementary functions: > > g32[1,x]= ArcSin[x]^2 > g32[2,x]= (3*(x*Sqrt[1-x^2]+(-1+2*x^2)*ArcSin[x]))/(4*x*Sqrt[1-x^2]) > g32[3,x]= (-5*(x*Sqrt[1-x^2]*(-3-20*x^2+20*x^4)+3* > (1+6*x^2-24*x^4+16*x^6)*ArcSin[x]))/(192*x^3*(1-x^2)^(3/2)) > g32[4,x]= (7*(x*Sqrt[1-x^2]*(45+180*x^2+1324*x^4-3008*x^6+1504*x^8)+ > 15*(-3-10*x^2-80*x^4+480*x^6-640*x^8+256*x^10)*ArcSin[x]))/ > (23040*x^5*(1-x^2)^(5/2)) > > The conversion time grows quickly, however, as m increases: > m=1: 0.05 sec, m=2: 0.92 sec, m=3: 22.7 sec, m=4: 35 min > so for m=5 I estimate several hours. > > Question: would there be a faster built-in way? (I would like > to go up to m ~ 12) Yes. I suspect that this computation is slow, not because of a problem with the evaluation of the 3F2, but with a set of 2F1's generated for integral m. To see this, consider a generalization of your function: g32[m_,n_][x_]:= x^2 HypergeometricPFQ[{1,2 m-1,1},{n+1/2,2},x^2] This evaluates very quickly for integral m. For example try g32[11,n][x] However, FunctionExpand on the resulting expression, involving 2F1's of the form HypergeometricPFQ[{i, i}, {n + j/2}, x^2] is _very_ slow. I do not know why the evaluation of these 2F1's is so slow. There is an alternative approach that is _much_ faster. Consider the function f[m_][z_] := HypergeometricPFQ[{1, 2 m - 1}, {m + 1/2}, z] The (indefinite) integral of this function is equivalent to g32: FunctionExpand[Integrate[f[m][z], z]] z HypergeometricPFQ[{1, 1, 2 m - 1}, {2, m + 1/2}, z] Evaluating f[m][z] for integral m is very quick, and integrating the resulting expression is acceptably fast. For example, with m = 11, here is the computation: [1] Compute and simplify the integrand: Collect[f[11][z], {ArcSin[_]}, Simplify[#, z > 0] & ] [2] Map the integration over each term, and simplify: FullSimplify[#, x > 0] & /@ (Collect[Integrate[#, z] & /@ %, {ArcSin[_]}, Simplify[#, z > 0] & ] /. z -> x^2) [3] Since we've used indefinite integration, the result can differ from the correct result by an arbitrary constant. Use Series expansion to eliminate this constant: % - Normal[% + O[x]] This is the result that you're after. [4] Here is a routine that puts this all together: g[m_ /; m > 1][x_] := Module[{z, int, ans}, int = Collect[f[m][z], {ArcSin[_]}, Simplify[#, z > 0] & ]; ans = FullSimplify[#, x > 0] & /@ (Collect[Integrate[#, z] & /@ int, {ArcSin[_]}, Simplify[#, z > 0] & ] /. z -> x^2); Factor /@ (ans - Normal[ans + O[x]])] Cheers, Paul -- Paul Abbott Phone: +61 8 6488 2734 School of Physics, M013 Fax: +61 8 6488 1014 The University of Western Australia (CRICOS Provider No 00126G) AUSTRALIA http://physics.uwa.edu.au/~paul http://InternationalMathematicaSymposium.org/IMS2005/