scipy.special.hyp2f1

scipy.special.hyp2f1(a, b, c, z) = <ufunc 'hyp2f1'>

Gauss hypergeometric function 2F1(a, b; c; z)

Parameters
a, b, carray_like

Arguments, should be real-valued.

zarray_like

Argument, real or complex.

Returns
hyp2f1scalar or ndarray

The values of the gaussian hypergeometric function.

See also

hyp0f1

confluent hypergeometric limit function.

hyp1f1

Kummer’s (confluent hypergeometric) function.

Notes

This function is defined for \(|z| < 1\) as

\[\mathrm{hyp2f1}(a, b, c, z) = \sum_{n=0}^\infty \frac{(a)_n (b)_n}{(c)_n}\frac{z^n}{n!},\]

and defined on the rest of the complex z-plane by analytic continuation [1]. Here \((\cdot)_n\) is the Pochhammer symbol; see poch. When \(n\) is an integer the result is a polynomial of degree \(n\).

The implementation for complex values of z is described in [2].

References

1

NIST Digital Library of Mathematical Functions https://dlmf.nist.gov/15.2

2
  1. Zhang and J.M. Jin, “Computation of Special Functions”, Wiley 1996

3

Cephes Mathematical Functions Library, http://www.netlib.org/cephes/

Examples

>>> import scipy.special as sc

It has poles when c is a negative integer.

>>> sc.hyp2f1(1, 1, -2, 1)
inf

It is a polynomial when a or b is a negative integer.

>>> a, b, c = -1, 1, 1.5
>>> z = np.linspace(0, 1, 5)
>>> sc.hyp2f1(a, b, c, z)
array([1.        , 0.83333333, 0.66666667, 0.5       , 0.33333333])
>>> 1 + a * b * z / c
array([1.        , 0.83333333, 0.66666667, 0.5       , 0.33333333])

It is symmetric in a and b.

>>> a = np.linspace(0, 1, 5)
>>> b = np.linspace(0, 1, 5)
>>> sc.hyp2f1(a, b, 1, 0.5)
array([1.        , 1.03997334, 1.1803406 , 1.47074441, 2.        ])
>>> sc.hyp2f1(b, a, 1, 0.5)
array([1.        , 1.03997334, 1.1803406 , 1.47074441, 2.        ])

It contains many other functions as special cases.

>>> z = 0.5
>>> sc.hyp2f1(1, 1, 2, z)
1.3862943611198901
>>> -np.log(1 - z) / z
1.3862943611198906
>>> sc.hyp2f1(0.5, 1, 1.5, z**2)
1.098612288668109
>>> np.log((1 + z) / (1 - z)) / (2 * z)
1.0986122886681098
>>> sc.hyp2f1(0.5, 1, 1.5, -z**2)
0.9272952180016117
>>> np.arctan(z) / z
0.9272952180016123