-1

所以我一直在尝试在特定表达式上使用 Scipy 中的通用积分方法(四元法)在 numpy 上;但是,我收到以下错误

TypeError: unsupported operand type(s) for *: 'function' and 'float'

这是我要集成的功能(这里似乎没有 mathjax):

t*y(t) * J0(u_{i} * t/a) dt 从 0 到 a 的积分,其中 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)
4

1 回答 1

0

第一个问题是你没有调用你的函数,你的意思是

func(y)*y

否则,您只是将函数名称乘以数字/数组,这是您看到的错误。除此之外,初始参数integrate.quad是一个可调用的,这是您要集成的函数。它不接受向量,因此您的初始y向量被完全忽略。如果有的话,你想要这个:

result = integrate.quad(lambda y: func(y) * y , 0, a)

但这完全忽略了数据集。要集成到样本上,请使用trapz 或 simps,它们接受一个x数组和一个y数组。您可能需要使用或类似的东西来生成您的y数组。np.linspace

于 2018-08-13T06:19:06.873 回答