Python:使用 scipy 四边形嵌套在另一个积分中的积分和函数
Python: Integral and funcion nested in another integral using scipy quad
我已经设法使用 scipy.integrate.quad 为我的随机过程编写了几行代码 class
我有标准布朗运动的马尔可夫转换函数
import numpy as np
def p(x,t):
return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t))
但是我想计算以下我将要用无法运行的代码编写的内容。我这样写是为了不用latex也能理解问题
from scipy.integrate import quad
integral = quad(quad(p(y-x),1,np.inf)*p(x,1),1,np.inf)
您可能注意到问题出在内部积分中发生的双变量问题。我做了以下但不确定:
p_xy = lambda y,x: p(y-x,1)
inner = lambda x : quad(p_xy,1,np.inf,args = (x,))[0]
outer = lambda x: inner(x)*p(x,1)
integral = quad(outer,1,np.inf)[0]
然后我得到
0.10806767286289147
我喜欢 Python 及其 lambda 函数,但似乎对此不太确定。你都有些什么想法呢?谢谢你的时间。
对于您希望执行的积分类型,双变量积分,SciPy 有 dedicated routines。
优点是这些例程更容易处理复杂的边界(例如,边界取决于其他坐标)。
我将您的示例重写为:
import numpy as np
from scipy.integrate import nquad
def p(x,t):
return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t))
def integrand(x, y):
return p(y-x, 1)*p(x, 1)
integral = nquad(integrand, ((1, np.inf), (1, np.inf)))
print(integral[0])
打印出相同的结果。我相信上面的代码更容易阅读,因为被积函数明确地写为两个变量的函数。
我已经设法使用 scipy.integrate.quad 为我的随机过程编写了几行代码 class
我有标准布朗运动的马尔可夫转换函数
import numpy as np
def p(x,t):
return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t))
但是我想计算以下我将要用无法运行的代码编写的内容。我这样写是为了不用latex也能理解问题
from scipy.integrate import quad
integral = quad(quad(p(y-x),1,np.inf)*p(x,1),1,np.inf)
您可能注意到问题出在内部积分中发生的双变量问题。我做了以下但不确定:
p_xy = lambda y,x: p(y-x,1)
inner = lambda x : quad(p_xy,1,np.inf,args = (x,))[0]
outer = lambda x: inner(x)*p(x,1)
integral = quad(outer,1,np.inf)[0]
然后我得到
0.10806767286289147
我喜欢 Python 及其 lambda 函数,但似乎对此不太确定。你都有些什么想法呢?谢谢你的时间。
对于您希望执行的积分类型,双变量积分,SciPy 有 dedicated routines。
优点是这些例程更容易处理复杂的边界(例如,边界取决于其他坐标)。
我将您的示例重写为:
import numpy as np
from scipy.integrate import nquad
def p(x,t):
return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t))
def integrand(x, y):
return p(y-x, 1)*p(x, 1)
integral = nquad(integrand, ((1, np.inf), (1, np.inf)))
print(integral[0])
打印出相同的结果。我相信上面的代码更容易阅读,因为被积函数明确地写为两个变量的函数。