首页 > 解决方案 > 我怎样才能更简化呢?

问题描述

我正在尝试将 numpy 应用于我为梯形规则集成编写的代码:

def integral(a,b,n):
    delta = (b-a)/float(n)

    s = 0.0
    s+= np.sin(a)/(a*2)
    for i in range(1,n):
         s +=np.sin(a + i*delta)/(a + i*delta)
    s += np.sin(b)/(b*2.0)
    return s * delta

我正在尝试从新函数中获取返回值,如下所示:

return delta *((2 *np.sin(x[1:-1])) +np.sin(x[0])+np.sin(x[-1]) )/2*x

我现在尝试了很长时间来取得任何突破,但我所有的尝试都失败了。

我尝试过但没有得到的一件事是为什么下面的代码会too many indices for array出错?

 def integral(a,b,n):
      d = (b-a)/float(n)
      x = np.arange(a,b,d)
      J = np.where(x[:,1] < np.sin(x[:,0])/x[:,0])[0]

非常感谢每一个提示/建议。

标签: python

解决方案


你忘了总结sin(x)

>>> def integral(a, b, n):
...     x, delta = np.linspace(a, b, n+1, retstep=True)
...     y = np.sin(x)
...     y[0] /= 2
...     y[-1] /= 2
...     return delta * y.sum()
... 
>>> integral(0, np.pi / 2, 10000)
0.9999999979438324
>>> integral(0, 2 * np.pi, 10000)
0.0
>>> from scipy.integrate import quad
>>> quad(np.sin, 0, np.pi / 2)
(0.9999999999999999, 1.1102230246251564e-14)
>>> quad(np.sin, 0, 2 * np.pi)
(2.221501482512777e-16, 4.3998892617845996e-14)

推荐阅读