Python Scipy中二元函数的一元定积分

Python Scipy中二元函数的一元定积分,python,scipy,integrate,quad,Python,Scipy,Integrate,Quad,我试图在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) 但是,如果我在arg

我试图在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仍然是一个符号

最好使用functools.partial来绑定当前的参数。但是,如果你还没有得到指定的整个区域,就根本无法对定积分进行数值积分;在这种情况下,结果表达式必然仍然包含符号部分,因此中间结果不是数字。

(假设您讨论的是计算
x
上的定积分,给定一个特定的固定值
y

您可以使用lambda:

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


您可能只希望结果是
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)

多亏了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)

quad用于数值积分,因此只能对确定的y值进行积分(在这种情况下,可以使用部分函数)。你想要符号整合吗?在这种情况下,看看sympy,我希望答案是y的函数。我可以将sympy(如y=Symbol('y')与scipy结合使用吗?我不这么认为,scipy是纯数字的(但试试看,也许符号会传播);你应该在Symphy中使用积分是的,我试着将它们组合使用,但它不起作用。但我对Symphy不会有同样的问题,只是现在它只会做符号积分吗?我仍然需要对“x”进行积分。不:Symphy真的可以做实定(和不定)积分积分,返回剩余未知符号的系数的数值,在本例中为y。我希望答案是y的函数,如果不清楚,对不起。我可以打印它,以便它将结果显示为y的函数吗?我希望结果包含y作为符号,如果不清楚,对不起。数值积分不会是do it,如果不清楚;)嗨,在上面的代码中,y是一个符号。如果我们设置
int\u f=integrate(f,(x,1,2))
,原则上,
int\u f
y
的函数,如果我们设置不同的
y
值,我们如何得到
int\u f
的值?谢谢~
-(-y**2 + y)*exp(1/y) + (-y**2 + 2*y)*exp(2/y)
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)