在Scipy中有两个变量的函数中对一个变量的定积分



我正试图计算一个函数的定积分与多个变量在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)

相关内容

  • 没有找到相关文章

最新更新