Re: Erroneous Mathematica Kummer's (Hypergeometric1F1)
- To: mathgroup at smc.vnet.net
- Subject: [mg81461] Re: [mg81444] Erroneous Mathematica Kummer's (Hypergeometric1F1)
- From: Carl Woll <carlw at wolfram.com>
- Date: Mon, 24 Sep 2007 04:17:39 -0400 (EDT)
- References: <200709240114.VAA01940@smc.vnet.net>
W. Brenig wrote:
>Hi,
>
>This excerpt from a notebook demonstrates that Mathematica's
>implementation of the confluent hypergeometric function is
>erroneous. The integral representation of the Hypergeometric1F1[]
>function is
>
>In[115]:= f11[m_, n_, z_] := ((n - 1)!/((n - m - 1)! (m - 1)!))
> NIntegrate[Exp[ x z] x^(m - 1) (1 - x)^(n - m - 1), {x, 0, 1}];
>
>Now, we use this representation to evaluate f11 for two
>representative sets of parameters
>
>In[116]:= f11[5, 106, 10 Pi I]
>Out[116]= 0.101285+ 0.811816 \[ImaginaryI]
>
>In[117]:= f11[4.6, 105.3, 10 Pi I]
>Out[117]= 0.190397+ 0.80675 \[ImaginaryI]
>
>These values have also been tested to result on use of the
>routine CCHG(A,B,Z,CHG) for the confluent 1F1 hypergeometric
>function, copyrighted to Zhang and Jin, authors of the book
>'Computation of Special Functions', Wiley-Interscience, (1996).
>
>Next we use Mathematica's Hypergeometric1F1[] function with
>the same parameters
>
>In[121]:= N[Hypergeometric1F1[5, 106, 10 Pi I]]
>Out[121]= -5952. - 2512. \[ImaginaryI]
>
>In[122]:= N[Hypergeometric1F1[4.6, 105.3, 10 Pi I]]
>Out[122]= 0.190397+ 0.80675 \[ImaginaryI]
>
>Obviously the 1st result is different from f11's value.
>This is only one of many other examples, which show that
>Mathematica's Hypergeometric1F1[] is broken - at least for
>integer value input parameters.
>
>
Actually, Hypergeometric1F1 is working fine. What goes wrong is
evaluating the result of 1F1 with machine numbers. As is typical of
machine numbers when subtracting large numbers, catastrophic loss of
precision occurs. Use extended precision numbers, as in:
In[463]:= N[Hypergeometric1F1[5, 106, 10 Pi I], 20]
Out[463]= 0.10128468746141561560+0.81181630676361012768 \[ImaginaryI]
When using extended precision numbers, Mathematica will internally
generate numbers to higher precision to attempt to get a result with the
requested precision. When using machine numbers, no such significance
tracking is done.
Alternatively, use at least one machine number as an argument to
Hypergeometric1F1:
In[464]:= Hypergeometric1F1[5., 106, 10 Pi I]
Out[464]= 0.101285+0.811816 \[ImaginaryI]
Carl Woll
Wolfram Research
>Regards,
>Wolfram
>
>
- References:
- Erroneous Mathematica Kummer's (Hypergeometric1F1) function
- From: "W. Brenig" <w.brenig@tu-bs.de>
- Erroneous Mathematica Kummer's (Hypergeometric1F1) function