Чтение руководства по простому числовому интегрированию (https://helloacm.com/how-to-compute-numerical-integration-in-numpy-python/),, которое, по-видимому, предполагает, что уменьшение диапазона значений x, используемых в вашей функции, возвращает более точный числовой ответ. Используемый код -
def integrate(f, a, b, N):
x = np.linspace(a, b, N)
fx = f(x)
area = np.sum(fx)*(b-a)/N
return area
integrate(np.sin, 0, np.pi/2, 100)
Возвращает значение 0,99783321217729803.
Однако при изменении метода интеграции на:
def integrate(f, a, b, N):
x = np.linspace(a+(b-a)/(2*N), b-(b-a)/(2*N), N)
fx = f(x)
area = np.sum(fx)*(b-a)/N
return area
integrate(np.sin, 0, np.pi/2, 100)
Это возвращает более точное значение 1,0000102809119051. Почему это так?