#python #numerical-integration
#python #численное интегрирование
Вопрос:
Я хочу использовать метод Римана для численного вычисления частичного интеграла в Python. Я хотел бы интегрировать относительно x и найти функцию от t, но я не знаю, как это сделать, моя функция: f(x) = cos(2*pi*x*t)
ее примитив между [-1/2,1/2 ]: f(t) = sin(pi*t)/t
def riemann(a, b, dx):
if a > b:
a,b = b,a
n = int((b - a) / dx)
s = 0.0
x = a
for i in range(n):
f_i[k] = np.cos(2*np.pi*x)
s = f_i[k]
x = dx
f_i = s * dx
return f_i,t
Ответ №1:
В вашем подходе нет ничего слишком ужасного. Результат действительно близок к истинному значению:
import numpy as np
def riemann(a, b, dx):
if a > b:
a, b = b, a
n = int((b - a) / dx)
s = 0.0
x = a
for i in range(n):
s = np.cos(2 * np.pi * x)
x = dx
return s * dx
print(riemann(0.0, 0.25, 1.0e-3))
print(1 / (2 * np.pi))
0.15965441949277526
0.15915494309189535
Некоторые замечания:
- Вы бы не назвали этот метод Римана. Это метод средней точки (численного интегрирования).
- Обратите немного больше внимания на границы вашей области. Прямо сейчас ваша числовая область
[a - dx, b dx]
. - Если вы ищете скорость, лучше всего собрать все ваши
x
значения (возможно, сlinspace
помощью), оценить функцию один раз со всеми точками, а затемnp.sum
значения вверх. (Циклы в Python медленные.)