Вопрос по python, scipy – Использование scipy для выполнения дискретной интеграции образца

4

Я пытаюсь портировать с labview на python.

В labview есть функция «Интеграл x (t) VI». он принимает набор выборок в качестве входных данных, выполняет дискретную интеграцию выборок и возвращает список значений (областей под кривой) в соответствии с правилом Симпсона.

Я пытался найти эквивалентную функцию в scipy, например, scipy.integrate.simps, но эти функции возвращаютsummed integral через множество образцов, как поплавок.

Как получить список интегрированных значений, а не сумму интегрированных значений?

Я просто смотрю на проблему неправильно?

Ваш Ответ

2   ответа
0

scipy.integrate.cumtrapz() который делает то, что вы хотите, если вам конкретно не нужно использовать правило Симпсона или другой метод. Для этого вы можете, как и всегда, предлагать написать цикл самостоятельно.

5

scipy.integrate.simps немного неправильно. Площадь, возвращеннаяscipy.integrate.simps общая площадь подy (первый параметр передан). Второй параметр является необязательным и представляет собой выборочные значения для оси x (фактические значения x для каждого из значений y). то есть:

>>> import numpy as np
>>> import scipy
>>> a=np.array([1,1,1,1,1])
>>> scipy.integrate.simps(a)
4.0
>>> scipy.integrate.simps(a,np.array([0,10,20,30,40]))
40.0

Я думаю, что вы хотите вернуть области под одной кривой в разных пределах? Для этого вы проходите ту часть кривой, которую хотите, например:

>>> a=np.array([0,1,1,1,1,10,10,10,10,0])
>>> scipy.integrate.simps(a)
44.916666666666671
>>> scipy.integrate.simps(a[:5])
3.6666666666666665
>>> scipy.integrate.simps(a[5:])
36.666666666666664
Error: User Rate Limit Exceeded user1425750
Error: User Rate Limit Exceeded user1425750
Error: User Rate Limit Exceeded[scipy.integrate.simps(y[s:e]) for s,e in [(s1,e1),(s2,e2),...etc.]]Error: User Rate Limit Exceeded

Похожие вопросы