Python: интегрирование площади под кривой с неравномерными шагами по x

У меня есть список значений y и список значений x. Я хотел бы найти площадь под кривой, определяемой этими точками. Я нашел несколько решений этой проблемы для значений x с четным интервалом:

1) Расчет площадь под кривой с заданным набором координат, не зная функции

2) Использование scipy для дискретного интегрирования образца

Но ни один из них не работает, когда значения x не распределены равномерно.

Например:

>>> from scipy.integrate import simps
>>> y = np.array([1,1,1,1])
>>> x = np.array([0,5,20,30])
>>> simps(y,x)
-inf

Конечно, использование x = np.array([0,10,20,30]) в приведенном выше коде возвращает 30,0, как и ожидалось.

Может ли кто-нибудь предложить способ найти площадь под кривой с неравномерным расстоянием по оси x?


person user3390452    schedule 06.03.2014    source источник
comment
Какую версию scipy вы используете? Я получаю -inf в scipy 0.9.0 и 30.0 в scipy 0.13.2.   -  person Warren Weckesser    schedule 07.03.2014
comment
Я использовал 0.11.0. Я установил 0.13.3, и теперь он работает. Спасибо за предложение!   -  person user3390452    schedule 07.03.2014


Ответы (1)


Я бы просто использовал простое правило трапеций:

import numpy as np

x = np.array([0,5,20,30])
y = np.array([1,1,1,1])

s = np.sum((x[1:] - x[:-1]) * (y[1:] + y[:-1]) / 2)
# same as
# s = 0.0
# for k in range(len(x) - 1):
#    s += (x[k+1] - x[k]) * (y[k+1] + y[k]) / 2

print(s)
30.0
person Nico Schlömer    schedule 15.06.2020