Как интегрировать два 1-D массива данных в Python?

У меня есть два табличных массива данных, x и y, и я не знаю функцию, которая генерировала данные. Я хочу иметь возможность оценить Интеграл линии, производимой данными в любой точке вдоль оси Х.

вместо того, чтобы интерполировать кусочную функцию к данным, а затем пытаться интегрировать то, с чем у меня возникают проблемы, есть ли что-то, что я могу использовать, что просто предоставит Интеграл, оценив массивы?

при поиске решения, я видел ссылки на iPython и Pandas, но я не смог найти части тех пакетов, которые помогут в этой задаче.

Если нет способа просто интегрировать массивы, не могли бы вы дать несколько советов о наилучшем способе решения этой задачи?

2 ответов


Scipy имеет некоторые хорошие инструменты для выполнения численного интегрирования.

например, вы можете использовать scipy.integrate.simps для выполнения правила Симпсона, и вы можете передать его следующим образом:

scipy.интегрировать.simps (y, x=None, dx=1, axis=-1, even='avg')

параметры :
y : array_like Массив для интеграции.

x : array_like, необязательно Если задано, точки, в которых производится выборка y.

dx : int, необязательный Расстояние между точками интегрирования вдоль оси y. Используется только тогда, когда x нет. По умолчанию-1.

ось : инт, необязательно Ось, вдоль которой интегрировать. По умолчанию используется последняя ось.

even: {‘avg’, 'first’,’ str'}, необязательно

' avg’: средние два результата:1) Используйте первые N-2 интервала с трапециевидное правило на последнем интервале и 2) Используйте последние N-2 интервала с трапециевидным правилом на первом интервале.

' first’ : Используйте правило Симпсона для первых n-2 интервалов с трапециевидное правило на последнем интервале.

' last’: используйте правило Симпсона для последних N-2 интервалов с трапециевидное правило на первом интервале.

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


У Scipy есть интеграция функция, которая может помочь вам.

Если вы хотите использовать общая сумма трапеций для интеграции, что, вероятно, было бы лучше для ряда точек.

вы можете сделать это:

>>> from scipy import integrate
>>> x = np.linspace(-2, 2, num=20)
>>> y = x
>>> y_int = integrate.cumtrapz(y, x, initial=0)
>>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-')
>>> plt.show()

Это также построит график данных и покажет его вам графически. Это вызов интеграции integrate.cumtrapz(y, x, initial=0) где X и y-ваши два массива.