Проблемы с вычислениями 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 или что-то подобное.

Другие вопросы по тегам