Обновление
Я перешел на использование scipy.integrate.quad
, так как cumtrapz
вызывал проблемы больше нуля.Обратите внимание на троичное условие для предоставления логики initial = 0
, которую обеспечивает cumtrapz
.
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
x = np.linspace(0, 3, num = 1000)
a = 0.5
f = lambda v: np.cos(np.pi * v) + 1
def y_int(v):
integral = scipy.integrate.quad(f, v - a if v > a else 0, v + a)
return integral[0]
plt.plot(x, f(x), 'b-')
plt.plot(x, np.array(map(y_int, x)), 'r-')
plt.show()
Оригинал
Я переформатировал/ немного подправил ваш код, чтобы мне было легче работать со значениями, которые легче проверять, например, сделать интервал от 0 до 2pi.Я также убрал ваш интервал допуска для проверки, и вы, я полагаю, допустили ошибку, вызвав "v" "x" в функции scipy.integrate.cumtrapz
.Здесь это очищено:
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
x = np.linspace(0, np.pi * 2, num = 1000)
def f(v):
f=np.cos(np.pi * v)
return f
def y_int(v):
y_int = scipy.integrate.cumtrapz(f(v), v, initial=0)
return y_int
plt.plot(x, f(x), 'b-') #plot the function from 0 to 2pi
plt.plot(x, y_int(x), 'r-')
plt.show()
Выход:
Это производит то, что я ожидаю, кумулятивная площадь под функциейвыглядеть так, как он обнуляется с интервалами в pi / 3 и так как область удваивается каждые (2/3) pi.
Вот ваш код немного очищен, а также в диапазоне от 1 до 4 (с интервалом от 0 до 3, есть что-то в том, что интервал x переходит в отрицательное значение, а первоначальное значение 0 дает странные результаты):
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
x = np.linspace(1, 4, num = 1000)
a = 0.5
def f(v):
f=np.cos(np.pi * v) + 1
return f
def y_int(v):
y_int = scipy.integrate.cumtrapz(f(v), v, initial=0)
return y_int
plt.plot(x, f(x), 'b-')
plt.plot(x, y_int(x + a) - y_int(x - a), 'r-')
plt.show()
Вывод: