我需要一些帮助解决这个问题。 近似积分的中点规则可表示为:
h * summation of f(a -(0.5 * h) + i*h)
其中h =(b - a)/ 2
使用numpy sum函数编写函数midpointint(f,a,b,n)来计算中点规则。
确保您的范围从1到n(含)。您可以使用范围并将其转换为数组。
对于中点(np.sin,0,np.pi,10),该函数应返回2.0082
这是我到目前为止所拥有的
import numpy as np
def midpointint(f,a,b,n):
h = (b - a) / (float(n))
for i in np.array(range(1,n+1)):
value = h * np.sum((f(a - (0.5*h) + (i*h))))
return value
print(midpointint(np.sin,0,np.pi,10))
我的代码没有打印出正确的输出。
答案 0 :(得分:2)
发布的代码问题是我们需要在开始时将其初始化为零后积累到输出:value += ..
。
您可以使用迭代器的范围数组进行矢量化,如下所示 -
I = np.arange(1,n+1)
out = (h*np.sin(a - (0.5*h) + (I*h))).sum()
示例运行 -
In [78]: I = np.arange(1,n+1)
In [79]: (h*np.sin(a - (0.5*h) + (I*h))).sum()
Out[79]: 2.0082484079079745