Почему уменьшение диапазона np.linspace увеличивает точность численного интегрирования? - PullRequest
1 голос
/ 25 сентября 2019

Чтение руководства по простому числовому интегрированию (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. Почему это так?

1 Ответ

1 голос
/ 26 сентября 2019

Две вещи:

  • Ширина шага в вашем первом integrate не (b-a) / N, а (b-a) / (N-1).

  • В вашем первом методе в погрешности преобладают перегибы на полбара слева и справа, то есть (b-a)/(N-1)/2 * f(a) и (b-a)/(N-1)/2 * f(b).Если вы вычтете эти два, вы получите точность, сравнимую с вашим вторым методом.

...