Ваша формула интеграции выглядит правильно для дискретных точек. У меня проблемы с пониманием того, как вы хотите область под кривой. Кстати, как вы написали это, не отсортированные по оси X, это получение области под линией из точки [0] в точку [1], а затем вычитание области из точки [1] в точку [2]. Если это ваш случай, то это работает.
Если вы хотите, чтобы они находились непосредственно под всеми тремя точками, я бы отсортировал xs. Если вы хотите получить площадь под кривой, даже если учесть, что она удваивается назад, я бы взял абсолютное значение x в цикле for. абс ()
Если вы хотите область под кривой без двойного счета области между точкой [1] и точкой [2]. Я бы написал,
import matplotlib.pyplot as plt
xs = [2, 5, 4]
x_sort = sorted(xs)
ys = [6, 7, 8]
sum = 0
plt.plot(xs, ys, 'bo')
plt.show()
for i in range(1, len(xs)):
slope = (xs[i]-xs[i-1])/(ys[i] - ys[i-1])
delta_x = x_sort[i] - x_sort[i - 1]
delta_y = ys[i - 1] + (ys[i-1] + delta_x * slope)
sum = sum + (delta_y/2 * delta_x)
print(sum)
Это берет наклон между несортированными точками и применяет его к отсортированным значениям, давая вам область непосредственно под графиком, если вы соединили линии в порядке пар [xs, ys].
Надеюсь, это поможет ответить на ваш вопрос.