首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用Newton-Cotes方法进行积分

在python中使用Newton-Cotes方法进行积分
EN

Stack Overflow用户
提问于 2012-10-20 17:26:46
回答 2查看 4.3K关注 0票数 1

我正在尝试用Python语言编写一个函数,它将使用牛顿-科特斯方法来积分给定的函数,它返回了一些非常奇怪的结果,其中有时给出了正确的答案,而另一些则不是(大多数情况下-ve界限是错误的)。这是我的代码,如果有人能指出任何错误,我们将不胜感激:)

代码语言:javascript
复制
def integrate(function, a, b):
    coeff = [7,32,12,32,7]
    result = 0
    for i in range(0,len(coeff)):
        x = a + (i*(b-a))/(len(coeff)-1)
        result += coeff[i]*eval(function)
        print eval(function)
    result = result*((b-a)/90.)
    return result

我一直遵循的牛顿柯特斯公式来自wikipedia

示例:

代码语言:javascript
复制
print integrate("x**3-4*x+9", -7, 7)

返回:当实际答案为126时返回-38

EN

回答 2

Stack Overflow用户

发布于 2012-10-20 17:49:29

神秘的数学行为通常是因为忘记了在Python 2中,整数除法的默认行为是截断。在循环中添加print x, eval(function)

代码语言:javascript
复制
>>> integrate("x**2+4", 0, 5)
0 4
1 5
2 8
3 13
5 29
50.166666666666664

代码语言:javascript
复制
>>> integrate("x**2+4", 0., 5.)
0.0 4.0
1.25 5.5625
2.5 10.25
3.75 18.0625
5.0 29.0
61.666666666666664

请注意,第一个评估点是错误的。在开头加上from __future__ import division或者'a = 1.0*a;b= 1.0*b`后:

代码语言:javascript
复制
>>> integrate("x**2+4", 0, 5)
0.0 4.0
1.25 5.5625
2.5 10.25
3.75 18.0625
5.0 29.0
61.666666666666664

或者对于您的示例:

代码语言:javascript
复制
>>> integrate("x**3-4*x+9", -7, 7)
-7.0 -306.0
-3.5 -19.875
0.0 9.0
3.5 37.875
7.0 324.0
126.0

eval是一个糟糕的设计选择,但它不是bug的根源。

票数 3
EN

Stack Overflow用户

发布于 2012-10-20 17:46:29

这里有一些有效的代码,正如@DSM指出的那样,问题在于积分极限的整数定义。它集成了一个“func()”。

代码语言:javascript
复制
#! /usr/bin/python

def integrate(function, a, b):
    coeff = [7,32,12,32,7]
    result = 0
    for i in range(0,len(coeff)):
        x = a + (i*(b-a))/(len(coeff)-1)
        result += coeff[i]*function(x)
        #print function(x)
    result = result*((b-a)/90.)
    return result

def func(x):
    return x**3-4*x+9

print integrate(func,-7.0,7.0)

在我的电脑上是126。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12987072

复制
相关文章

相似问题

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