Python 使用梯形规则定义积分(初学者)
我的程序旨在使用n个梯形定义给定函数在两个数(x1,x2)之间的积分。看起来,我系的自动求值程序给出的答案与我的不同。问题是我在代码中找不到任何错误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
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函数。只是我不能跳过整个思考过程。你知道……为了编程。不过谢谢