Python 使用梯形规则定义积分(初学者)

Python 使用梯形规则定义积分(初学者),python,Python,我的程序旨在使用n个梯形定义给定函数在两个数(x1,x2)之间的积分。看起来,我系的自动求值程序给出的答案与我的不同。问题是我在代码中找不到任何错误 def funct(x): val= -(1./6)*(x-1)*(x-2)*(x+2)*(x-4) return val x1,x2,n=input() Dx=float(x2-x1)/n Sum=0 i=x1+Dx while i<x2: val=funct(i) Sum+=val i+=Dx

我的程序旨在使用n个梯形定义给定函数在两个数(x1,x2)之间的积分。看起来,我系的自动求值程序给出的答案与我的不同。问题是我在代码中找不到任何错误

def funct(x):
    val= -(1./6)*(x-1)*(x-2)*(x+2)*(x-4)
    return val


x1,x2,n=input()
Dx=float(x2-x1)/n
Sum=0
i=x1+Dx
while i<x2:
    val=funct(i)
    Sum+=val
    i+=Dx
Sum=2*Sum
val1=funct(x1)
val2=funct(x2)
S=(Dx/2)*(val1+val2+Sum)
print "%.3f" %S  
def函数(x):
val=-(1./6)*(x-1)*(x-2)*(x+2)*(x-4)
返回值
x1,x2,n=输入()
Dx=浮点数(x2-x1)/n
总和=0
i=x1+Dx

由于舍入问题,i,而您的
周期始终包含
x
的最后一个值,请尝试使用精确的整数算法

x0, x1 = -88.787529, 83.494648
n = 1942

dx = (x1-x0)/n
s = 0
i = 1
while i < n:

   # if we allow i == n, in the following row we'll have
   #   x0 + n*dx = x0 + n * (x1-x0) / n = x0 + x1 - x0 = x1
   # but we want to exclude the last term

   s = s + funct(x0+i*dx)
   i = i + 1
result = (s + funct(x0)/2.0 + funct(x1)/2.0)*dx
x0,x1=-88.787529,83.494648
n=1942
dx=(x1-x0)/n
s=0
i=1
而i
我知道这可能是一个家庭作业问题,但一般来说,不要重新发明轮子:

import numpy

def funct(x):
    return -(1./6)*(x-1)*(x-2)*(x+2)*(x-4)

x1, x2 = -88.787529, 83.494648
n = 1942
# n "panels", n+1 points
x = numpy.linspace(x1, x2, n+1)
y = funct(x)

result = numpy.trapz(y, x)

你用的x1和x2的值是多少?答案应该是什么?x1和x2可以是任何实数,只要x1。我可以说你的风格相当巴洛克风格吗?特别是语句
Sum=Sum*2
。。。另一句话:由于先是数学,后是编程,一个字母的变量
i,j,k,m,n
l
被用来表示用作索引或计数的整数。例如,一个更惯用的用法是
x_i=x1+Dx
不要像那样循环一个实变量,要么使用整数,要么使用公差(例如
,而x_i<(x1-0.1*Dx)
),因为你不能想当然地认为舍入不会是一个问题。哦,我明白了,我很担心那件事,但不确定它是否真的有问题。程序现在运行得很好。事实上,我知道numpy函数。只是我不能跳过整个思考过程。你知道……为了编程。不过谢谢