我正在尝试使用梯形规则找到Sin^2(x)/x^2
的集成,但在运行时却说x
id未定义。谁能告诉我什么是错的?
import math
c=math.sin`
def trapezoidal(f, a, b, N):
if x!=0:
h=(b-a)/N
s=0.0
s+=f(a)/2.0
for i in range (1,N):
s+=f(a+i*h)
s+=f(b)/2.0
Y=s*h
else:
y=1
return Y`
for n in range (1,11):
N=2**n
result=trapezoidal(lambda x:((c(x)*c(x))/(x**2)), 0, 1000, N)
print(repr(n).rjust(10), repr(result).rjust(30))`
答案 0 :(得分:1)
你没有在函数中调用x。在你的情况下,你想循环遍历函数f中的每个元素。
如果你不想使用pythonic方式,你可以看看numpy和scipy。这些封装为基本操作(如积分和矩阵计算)提供了优化的功能。看看np.trapz(https://docs.scipy.org/doc/numpy/reference/generated/numpy.trapz.html),sp.integrate(https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/integrate.html)