我正试图计算一个函数的定积分与多个变量在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仍然是一个符号。
多亏了杜兰特,以下是可行的方法:
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)
你可能只想让结果是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)
你能做的最好的就是使用functools。局部的,用来绑定当前的参数。但是如果你还没有确定整个定义域就不能对定积分进行数值积分;在这种情况下,结果表达式必然仍然包含符号部分,因此中间结果不是数值。
(假设您正在讨论在给定y
的特定固定值的情况下计算x
的定积分)
你可以使用lambda:
quad(lambda x:integrand(x, 10), 1, 2, args=())
或functools.partial()
:
quad(functools.partial(integrand, y=10), 1, 2, args=())
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)