在 Python 中计算积分的问题
Problems with computing Integral in Python
所以我一直在尝试在特定表达式的 numpy 上使用 Scipy 中的通用积分方法(quad);但是,我收到以下错误
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)
第一个问题是你没有调用你的函数,你的意思是
func(y)*y
否则您只是将函数名称乘以 number/array,这就是您看到的错误。除此之外,integrate.quad
的初始参数是可调用的,这是您要集成的函数。它不接受向量,因此您的初始 y
向量将被完全忽略。如果有的话,你想要这个:
result = integrate.quad(lambda y: func(y) * y , 0, a)
但这完全忽略了数据集。要集成示例,请使用 trapz, or simps,它接受一个 x
数组和一个 y
数组。您可能需要使用 np.linspace
或类似的东西生成 y
数组。
所以我一直在尝试在特定表达式的 numpy 上使用 Scipy 中的通用积分方法(quad);但是,我收到以下错误
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)
第一个问题是你没有调用你的函数,你的意思是
func(y)*y
否则您只是将函数名称乘以 number/array,这就是您看到的错误。除此之外,integrate.quad
的初始参数是可调用的,这是您要集成的函数。它不接受向量,因此您的初始 y
向量将被完全忽略。如果有的话,你想要这个:
result = integrate.quad(lambda y: func(y) * y , 0, a)
但这完全忽略了数据集。要集成示例,请使用 trapz, or simps,它接受一个 x
数组和一个 y
数组。您可能需要使用 np.linspace
或类似的东西生成 y
数组。