2

我正在尝试计算具有多个变量的函数对 scipy 中的一个变量的定积分。这有点像我的代码 -

from scipy.integrate import quad
import numpy as np
def integrand(x,y):
    return x*np.exp(x/y)

quad(integrand, 1,2, args=())

它返回此类型错误:

TypeError: integrand() takes exactly 2 arguments (1 given)

但是,如果我在 args 中输入一个数字,它就会起作用。但我不想这样做,因为我希望 y 保持为 y 而不是数字。有谁知道如何做到这一点?

编辑:对不起,不认为我是清楚的。我希望最终结果是 y 的函数,而 y 仍然是一个符号。

4

5 回答 5

4

感谢 mdurant,以下是有效的方法:

from sympy import integrate, Symbol, exp
from sympy.abc import x
y=Symbol('y')
f=x*exp(x/y)
integrate(f, (x, 1, 2))

回答:

-(-y**2 + y)*exp(1/y) + (-y**2 + 2*y)*exp(2/y)
于 2014-08-18T17:42:11.257 回答
0

您可以做的最好的事情是使用 functools.partial 来绑定您目前拥有的参数。但是,如果您尚未指定整个域,则从根本上无法对定积分进行数值积分;在这种情况下,结果表达式必然仍包含符号部分,因此中间结果不是数字的。

于 2014-08-14T18:13:27.437 回答
0

(假设您正在讨论在x给定的特定固定值上计算定积分y。)

您可以使用 lambda:

quad(lambda x:integrand(x, 10), 1, 2, args=())

functools.partial()

quad(functools.partial(integrand, y=10), 1, 2, args=())
于 2014-08-14T18:13:57.590 回答
0

您可能只是希望结果是y正确的函数?:

from scipy.integrate import quad
import numpy as np
def integrand(x,y):
    return x*np.exp(x/y)

partial_int = lambda y: quad(integrand, 1,2, args=(y,))
print partial_int(5)
#(2.050684698584342, 2.2767173686148355e-14)
于 2014-08-14T18:26:07.863 回答
0
from scipy.integrate import quad
import numpy as np
def integrand(x,y):
    return x*np.exp(x/y)

vec_int = np.vectorize(integrand)
y = np.linspace(0, 10, 100)
vec_int(y)
于 2017-12-03T18:34:07.067 回答