Python中计算积分的问题
所以我一直在尝试在一个特定的表达式上使用Scipy-on-numpy的通用积分方法(quad);但是,我得到了以下错误Python中计算积分的问题,python,scipy,numerical-methods,bessel-functions,Python,Scipy,Numerical Methods,Bessel Functions,所以我一直在尝试在一个特定的表达式上使用Scipy-on-numpy的通用积分方法(quad);但是,我得到了以下错误 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 n
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)
第一个问题是你没有调用你的函数,你的意思是
func(y)*y
否则,您只是将一个函数名乘以一个数字/数组,这就是您看到的错误。除此之外,integrate.quad
的初始参数是一个可调用的函数,这是您想要集成的函数。它不接受向量,因此您的初始y
向量被完全忽略。如果有的话,你想要这个:
result = integrate.quad(lambda y: func(y) * y , 0, a)
但这完全忽略了数据集。要在样本上集成,请使用,它接受
x
数组和y
数组。您可能需要使用np.linspace
或类似的工具来生成y
数组。我注意到arr
拼写错误,但我们还是用双关语吧。谢谢!但现在我似乎遇到了以下错误:ValueError:操作数无法与形状(5,)(1000,)一起广播@Sam看起来像func
正在返回矩阵。您没有发布足够的信息来调试此()。我建议你为你的新问题写一个新问题,但必须先看看func
返回的内容,以及它对你是否有意义。