SciPy文档在zeta函数状态下:
y=zeta(x,q)返回两个参数的Riemann函数: sum((k+q)**(-x),k=0..inf)
给出参数x=2, q=0,我们应该得到sum((k)**(-2),k=0..inf),根据Riemann zeta函数的wiki项,它应该给出大约1.645
然而,SciPy给出了以下内容
>>> from scipy.special import zeta
>>> zeta(2,0)
1.7976931348623157e+308我是遗漏了什么,还是参与了zeta功能的破坏?
发布于 2012-02-20 02:36:31
scipy.special.zeta的旧文档字符串说:
y=zeta(x,q) returns the Riemann zeta function of two arguments:
sum((k+q)**(-x),k=0..inf)根据维基百科的文章,这是Hurwitz zeta函数,“当q=1时,它与Riemann zeta函数相一致”(而不是q=0)。事实上,它做到了:
In [3]: zeta(1.5, 1)
Out[3]: 2.6123753486854882
In [4]: zeta(2, 1)
Out[4]: 1.6449340668482266
In [5]: zeta(3, 1)
Out[5]: 1.202056903159594
In [6]: zeta(4,1)
Out[6]: 1.0823232337111381
In [7]: np.pi**4 / 90
Out[7]: 1.082323233711138更新: docstring现在明确表示“双参数版本是Hurwitz zeta函数”和"Riemann zeta函数对应于q=1“。
发布于 2012-02-19 23:38:58
#!/usr/bin/python
import numpy as np
def mzeta(x,q,N=100):
s=0
for j in np.arange(1,N):
s+= 1./(1.*j+1.*q)**x
return s
for N in [100, 500, 1000, 5000, 15000]:
print mzeta(2.,0.,N), np.pi**2/ 6产生
br@ratatoskr:~/sweethome/temp$ ./mzeta.py
1.63488390018 1.64493406685
1.64293206551 1.64493406685
1.64393356668 1.64493406685
1.64473404685 1.64493406685
1.64486739796 1.64493406685注意,这里的求和从1开始
UPD:实际上,它似乎是j=0值之和:
print "*****"
x, q=2, 0.1
print mzeta(x,q,10000) + 1./q**x, zeta(x,q)这给
*****
101.433199147 101.433299151https://stackoverflow.com/questions/9354343
复制相似问题