返回方程的函数

3
我正在编写一个脚本来计算方程的定积分。我正在编写一个辅助函数,该函数将以系数作为参数,并返回一个关于x的函数。
def eqn(x, k, c, a):
    return ((k*x + c**(1-a))

接下来,我定义了一个函数,使用从scipy导入的quad计算定积分:

from scipy.integrate import quad
def integral(eqn, c_i, y_i):
    integral_i, integral_err = quad(eqn, c_i, y_i)
    print integral_i

然后我通过传递参数调用该函数

k = calc_k(7511675,1282474,0,38,2)
eqn = carbon_path_eqn(x, k, 7511675, 2)
carbon_path_def_int(eqn,0,38)

然而,我收到一个错误,说“名称x未定义”。我理解x没有全局定义,但我想知道如何编写一个帮助函数,它需要参数,并仍然返回可以在quad中使用的x函数?谢谢!PS - @bpachev,这是另一篇文章的后续。

1
你的 eqn 不会返回一个函数,它会根据输入的 x 等值返回一个数值。 - hpaulj
quad 没有使用带辅助参数的函数的示例吗?你尝试过 quad 的示例了吗? - hpaulj
1
你知道吗,你可以在 Sympy 中使用符号积分和数值积分,为什么要重复造轮子呢? - Akshat Mahajan
2个回答

0

这不是你要求的内容。但是,正如其他人提到的那样,sympy 可能会让你的生活更加轻松。例如,假设您需要能够评估代码中的函数 f 的 x 积分,其中 ab 是任意常数。以下是您可以使用 sympy 完成此操作的方法。

定义函数,对 x 进行积分并保存结果,然后为 abx 的值评估结果。

sample use of sympy


0

这里的错误在于函数'eqn'并没有返回一个函数,而是返回了给定参数k、c、a下某一点x处函数的

quad应该传递一个函数(在您的情况下为eqn),其中第一个参数(在您的情况下为x)被假定为函数被积分的变量。您还需要向quad传递剩余参数的元组(在您的情况下为(k、c、a))和两个限制(在您的情况下为c_i、y_i)。换句话说,像这样调用quad:

quad(eqn,c_i,y_i,args=(k,c,a))

这一切都在scipy文档http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.quad.html中有详细解释。


非常有帮助!我更新了我的integral函数,加入了k,c,a参数以及quad函数。这也让我意识到我不需要将eqn定义为全局变量。我只需在integral函数中调用'eqn'作为参数即可。 - Moiz Kapadia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接