Проблемы с вычислениями Integral в Python
Поэтому я пытался использовать общий метод интеграции (quad) от Scipy для numpy для конкретного выражения; однако я получаю следующую ошибку
TypeError: unsupported operand type(s) for *: 'function' and 'float'
Вот функция, которую я пытаюсь интегрировать (похоже, здесь нет mathjax):
интеграл от 0 до a от t*y(t) * J0(u_{i} * t/a) dt, где a - длина y(t), J0 - функция Бесселя нулевого порядка, а u_ {i} - корни J0(u) = 0
Мой код:
import numpy as np
import scipy.integrate as integrate
from scipy.special import *
y = np.load('dataset.npy') # 1000 pts long
a = 1000
roots = jn_zeros(0, 1000)
func = lambda t: t * jv(0, t * (roots/a) )
result = integrate.quad(func * y , 0, a)
1 ответ
Первая проблема заключается в том, что вы не вызываете свою функцию.
func(y)*y
в противном случае вы просто умножаете имя функции на число / массив, что является ошибкой, которую вы видите. Помимо этого, первоначальный аргумент integrate.quad
это вызываемая функция, которую вы хотите интегрировать. Он не принимает вектор, поэтому ваш начальный y
вектор полностью игнорируется. Во всяком случае, вы хотите это:
result = integrate.quad(lambda y: func(y) * y , 0, a)
но это полностью проигнорировало набор данных. Для интеграции с образцами используйте trapz или simps, которые принимают x
массив и y
массив. Вам, вероятно, нужно создать свой y
использование массива np.linspace
или что-то подобное.