Я написал программу для аппроксимации интеграла с помощью суммы Римана и построения графика с помощью matplotlib в Python. Для функций с равными площадями выше и ниже оси x результирующая площадь должна быть равна нулю, но вместо этого моя программа выводит очень маленькое число.
Следующий код отображает нечетную функцию f(x) = x^3 от -1 до 1, поэтому площадь должна быть равна нулю. Вместо этого мой код приближает его к 1,68065561477562 e^-15.
Чем это вызвано? Это ошибка округления в delta_x, x или y? Я знаю, что могу просто округлить значение до нуля, но мне интересно, есть ли другая проблема или способ решить эту проблему.
Я попытался использовать класс Decimal.decimal для delta_x, но получил еще меньшее число.
Код Python:
import matplotlib.pyplot as plt
import numpy as np
# Approximates and graphs integral using Riemann Sum
# example function: f(x) = x^3
def f_x(x):
return x**3
# integration range from a to b with n rectangles
a, b, n = -1, 1, 1000
# calculate delta x, list of x-values, list of y-values, and approximate area under curve
delta_x = (b - a) / n
x = np.arange(a, b+delta_x, delta_x)
y = [f_x(i) for i in x]
area = sum(y) * delta_x
# graph using matplotlib
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.bar(x, y, delta_x, alpha=.5)
plt.title('a={}, b={}, n={}'.format(a, b, n))
plt.xlabel('A = {}'.format(area))
plt.show()