文章目录
- hyp2f1
- 广义超几何函数
- 其他超几何函数
hyp2f1
当c
不是
0
,
−
1
,
⋯
0,-1,\cdots
0,−1,⋯时,对于
∣
z
∣
<
1
|z|<1
∣z∣<1,超几何函数可表示为
2 F 1 ( a ; b ; c ; z ) = ∑ n = 0 ∞ a ( n ) b ( n ) c ( n ) z n n ! _2F_1(a;b;c;z)=\sum^\infty_{n=0}\frac{a^{(n)}b^{(n)}}{c^{(n)}}\frac{z^n}{n!} 2F1(a;b;c;z)=n=0∑∞c(n)a(n)b(n)n!zn
其中 q ( n ) q^{(n)} q(n)定义为
q ( n ) = { 1 n = 0 q ( q + 1 ) ⋯ ( q + n − 1 ) n > 1 q^{(n)}=\left\{\begin{aligned} &1\quad&n=0\\ &q(q+1)\cdots(q+n-1)&\quad n>1 \end{aligned}\right. q(n)={1q(q+1)⋯(q+n−1)n=0n>1
所以在scipy
中,超几何函数定义为
scipy.special.hyp2f1(a, b, c, z)
2
F
1
_2F_1
2F1在a,b,c
取某些特殊值的时候,可以化身为常见的初等函数,例如
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sc
xs = np.arange(1,1001)/100
ys = sc.hyp2f1(1,1,2, -xs)
fig = plt.figure()
ax = fig.add_subplot(121)
ax.plot(xs,ys)
ax = fig.add_subplot(122)
ax.plot(xs,np.log(1+xs)/xs)
plt.show()
效果如下图,可以说一毛一样
超几何函数常见的特殊情况有
2 F 1 ( 1 , 1 , 2 , − z ) = ln ( 1 + z ) z 2 F 1 ( a , 1 , 1 , z ) = ( 1 − z ) − a 2 F 1 ( 0.5 , 0.5 , 1.5 , z 2 ) = arcsin z z \begin{aligned} _2F_1(1,1,2,-z) &= \frac{\ln(1+z)}{z}\\ _2F_1(a,1,1,z) &= (1-z)^{-a}\\ _2F_1(0.5,0.5,1.5,z^2) &= \frac{\arcsin z}{z} \end{aligned} 2F1(1,1,2,−z)2F1(a,1,1,z)2F1(0.5,0.5,1.5,z2)=zln(1+z)=(1−z)−a=zarcsinz
广义超几何函数
之所以超几何函数表示为 2 F 1 _2F_1 2F1,乃因存在一个更广泛的函数,广义超几何函数,可表示为
p F q ( a 1 , a 2 , ⋯ , a p ; b 1 , b 2 , ⋯ , b q ; z ) = ∑ n = 0 ∞ ∏ i = 1 p ( a i ) n ∏ i = 1 q ( b i ) ( n ) z n n ! _pF_q(a_1,a_2,\cdots,a_p;b_1,b_2,\cdots,b_q;z)=\sum^\infty_{n=0}\frac{\prod^p_{i=1}(a_i)^{n}}{\prod^q_{i=1}(b_i)^{(n)}}\frac{z^n}{n!} pFq(a1,a2,⋯,ap;b1,b2,⋯,bq;z)=n=0∑∞∏i=1q(bi)(n)∏i=1p(ai)nn!zn
当p=0, q=0
时,上式退化为泰勒级数
e
z
e^z
ez。
其他超几何函数
scipy
中提供了
p
=
1
,
q
=
1
p=1,q=1
p=1,q=1以及
p
=
0
,
q
=
1
p=0,q=1
p=0,q=1的形式,如下所示,其中b同样不能为非正整数
。
scipy.special.hyp1f1(a, b, x)
scipy.special.hyp0f1(v, z)
其中 0 F 1 _0F_1 0F1是微分方程 f ′ ′ ( z ) + v f ′ ( z ) = f ( z ) f''(z)+vf'(z)=f(z) f′′(z)+vf′(z)=f(z)的解。
最后,scipy
实现了库默尔函数hyperu(a, b, x)
,为Kummer方程的解,Kummer方程的形式如下
z d 2 w d z 2 + ( b − z ) d w d z − a w = 0 z\frac{\text d^2w}{\text dz^2}+(b-z)\frac{\text dw}{\text dz}-aw=0 zdz2d2w+(b−z)dzdw−aw=0