在与Python的数值集成中我的错误在哪里?

时间:2015-08-12 14:33:16

标签: python

我尝试将cos(x)从0到2pi整合,但我找不到0.

我的代码使用了这个数值积分:

def rectangles(f,a,b,n) :
    h=(b-a)/n/1.0
    print h
    z=0.0
    for i in range(n) :
        z=z+f(a+i*h)
    return h*z

功能是:

def f1(x):
    return cos(x)

我使用mpmath biblio:

from mpmath import *
mp.dps=300; mp.pretty=True

电话是:

rectangles(f1,0.0,2.0*pi,100000)

从0到pi / 2都可以,从pi / 2到pi等都可以,但如果我想从0到2pi,我会发现:-4.81。

这很奇怪,因为如果我写1.9999 * pi或2.00001 * pi就可以了!

1 个答案:

答案 0 :(得分:3)

  

但如果我想从0到2pi,我会发现:-4.81。

不,你得到了

>>> rectangles(f1,0.0,2.0*pi,100000)
0.000062831853071795864[boring digits deleted]...
-4.81306306411824111[boring digits deleted]...1775099222873051479e-301

和-4.813e-301 = -4.813 * 10 ^( - 301)非常非常非常接近于零。

[旁白:/1.0中的h=(b-a)/n/1.0没有多大帮助 - 如果ban都是整数,那么你就是已经失去了师的精确度。]