首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SciPy zeta函数返回的值非常大

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

Stack Overflow用户
提问于 2012-02-19 23:21:02
回答 2查看 3.2K关注 0票数 2

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给出了以下内容

代码语言:javascript
复制
>>> from scipy.special import zeta
>>> zeta(2,0)
1.7976931348623157e+308

我是遗漏了什么,还是参与了zeta功能的破坏?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-20 02:36:31

scipy.special.zeta的旧文档字符串说:

代码语言:javascript
复制
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)。事实上,它做到了:

代码语言:javascript
复制
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“。

票数 6
EN

Stack Overflow用户

发布于 2012-02-19 23:38:58

代码语言:javascript
复制
#!/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

产生

代码语言:javascript
复制
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值之和:

代码语言:javascript
复制
print "*****"
x, q=2, 0.1
print mzeta(x,q,10000) + 1./q**x, zeta(x,q)

这给

代码语言:javascript
复制
*****
101.433199147 101.433299151
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9354343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档