Правильно рассчитать площадь под кривой, используя trapz и simpson в python

Я использовал np.trapz и scipy simps для вычисления площади под кривой и заметил, что, возможно, делаю это неправильно. В качестве примера ниже

import numpy as np
from scipy.integrate import simps


y = np.array([1,2,3,4,5])
y1= np.array([5,5,5,5,5])

print np.trapz(y,dx=1)
print simps(y,dx=1)
print np.trapz(y1,dx=1)
print simps(y1,dx=1)

Они дают

12.0
12.0
20.0
20.0

Но разве они не должны давать соответственно 15 и 25? Вроде как между малыми пределами?


person Atamsih    schedule 06.12.2017    source источник
comment
Почему они должны давать 15 и 25 соответственно?   -  person Ignacio Vergara Kausel    schedule 06.12.2017
comment
Ну, сценарий Python может и не работать, потому что он делает что-то другое, чем я ожидаю. Но я хотел получить всю площадь под этими точками, и если вы укажете числа, вы получите 15 и 25.   -  person Atamsih    schedule 06.12.2017


Ответы (1)


У вас неявно, что x = [0, 1, 2, 3, 4], помните, что в программировании почти везде и все начинается с 0. Кроме того, как правило, не учитываются верхние пределы.

Для y это означает прямоугольник с вершинами (0,0), (0,1), (4,0) и (4,1) плюс треугольник с вершинами (0,1), (4,5) и (4,1). Площадь прямоугольника 4*1=4, а площадь треугольника 4*4/2=8 равна 12.

Для y1 у вас есть прямоугольник с вершинами (0,0), (0,5), (4,0) и (4,5), что дает вам площадь 20.

person Ignacio Vergara Kausel    schedule 06.12.2017
comment
Да вот это я и подозревал. Как включить верхний предел и опустить 0? Я должен подчеркнуть, что я делаю это для большой серии чисел в другом сценарии. - person Atamsih; 06.12.2017
comment
Вы можете определить x=[1,2,3,4,5] и передать его функции, например np.trapz(y,x) - person Ignacio Vergara Kausel; 06.12.2017
comment
Когда я пытаюсь это сделать, он дает тот же результат, что и раньше, как для y, так и для y1 как в ловушках, так и в упрощенцах. - person Atamsih; 06.12.2017
comment
Да, извините... это должно было быть что-то вроде np.trapz(y=[1,2,3,4,5,6], x=[0,1,2,3,4,5] Я пропустил первое 0. - person Ignacio Vergara Kausel; 07.12.2017