scipy.integrate.quad giving ValueError:无效可回叫给定

kfgdxczn  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(649)

我必须定义一个包含积分的函数,但它一直给我这个错误

ValueError: invalid callable given

下面是我使用的代码

import numpy as np
from scipy.integrate import quad

def w(x, w0):
    return w0*(1+x)

def fun(x, w0, H_i):
    f = ( 3 * (1+w(w0, x)) ) / ( 1+x )
    return quad(f,np.inf,0) + 2*np.log(H_i)

当我用任何值尝试这个函数时,它总是给我那个错误。我能做些什么来解决这个问题?非常感谢,祝你有一个美好的一天:)

qacovj5a

qacovj5a1#

“ValueError:invalid callable given”错误表示代码在传递给quad函数的参数时遇到了问题。此函数需要一个接受单个参数并返回浮点数的可调用函数。然而,在有趣的函数中,实际上是将quad函数本身作为第一个参数传入。
要解决这个问题,您应该修改您的fun函数,以定义一个新函数,该函数接受单个参数并返回被积函数的值。然后可以将这个新函数传递给quad函数。
下面是一个示例,说明如何修改代码以实现此目的:

def fun(x, w0, H_i):
    def integrand(t):
        return ( 3 * (1+w(w0, t)) ) / ( 1+t )
    
    result, _ = quad(integrand, np.inf, x)
    return result + 2*np.log(H_i)

在这个修改的fun函数中,我们定义了一个新的函数被积函数,它接受一个参数t并返回被积函数。然后我们将这个被积函数作为第一个参数传递给quad函数。
通过进行这些更改,您的有趣函数应该可以正常工作,而不会抛出“invalid callable”错误。
希望这有帮助!

相关问题