Python SciPy zeta函数返回非常大的值

Python SciPy zeta函数返回非常大的值,python,scipy,Python,Scipy,关于美国的SciPy文件: y=zetax,q返回两个参数的Riemann zeta函数: sumk+q**-x,k=0..inf 给出参数x=2,q=0,我们应该得到sumk**-2,k=0..inf,根据公式应该给出大约1.645 然而,SciPy给出了以下内容 >>> from scipy.special import zeta >>> zeta(2,0) 1.7976931348623157e+308 我是否遗漏了什么,或者scipy zeta函数是

关于美国的SciPy文件:

y=zetax,q返回两个参数的Riemann zeta函数: sumk+q**-x,k=0..inf

给出参数x=2,q=0,我们应该得到sumk**-2,k=0..inf,根据公式应该给出大约1.645

然而,SciPy给出了以下内容

>>> from scipy.special import zeta
>>> zeta(2,0)
1.7976931348623157e+308
我是否遗漏了什么,或者scipy zeta函数是否已损坏

#!/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.433299151
产生

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.433299151
用于以下内容的旧文档字符串:

根据维基百科上的文章,这是Hurwitz zeta函数,当q=1而不是q=0时,它与Riemann zeta函数一致。事实上,它确实:

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。

旧docstring表示:

根据维基百科上的文章,这是Hurwitz zeta函数,当q=1而不是q=0时,它与Riemann zeta函数一致。事实上,它确实:

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。

请注意scipy页面上的总和从0开始,而不是通常定义的1。这可能解释了为什么它会导致双最大值,我将查看源代码检查更新的答案。我准备赌25比1,就是这样。请注意scipy页面上的总和从0开始,而不是通常定义的1。这可能解释了为什么它会导致双倍最大值,我将查看源代码检查更新的答案。我准备赌25比1,就是这样。谢谢你敏锐的观察。我不确定我是否关注你的帖子,但我想在发布一个已经解决的问题之前我会问你:zeta函数将复数作为参数。从上面所说的一切来看,在scipy.special中处理zeta函数的方法就是在第二个参数中插入一个1:zeta.,1,但是如何插入复数?谢谢你的敏锐观察。我不确定我是否关注你的帖子,但是我想在发布一个已经解决的问题之前我会问你:zeta函数以复数作为参数。从上面所说的一切来看,在scipy.special中处理zeta函数的方法就是在第二个参数中插入一个1:zeta.,1,但是如何插入复数?我今天早上终于意识到了,谢谢你把这个写进了答案。我今天早上终于意识到,谢谢你把这个写进一个答案。