Python:使用scipy quad将整数和函数嵌套在另一个整数中

Python:使用scipy quad将整数和函数嵌套在另一个整数中,python,scipy,probability,numeric,stochastic-process,Python,Scipy,Probability,Numeric,Stochastic Process,我已经设法为我的随机过程类使用scipy.integrate.quad编写了几行代码 我有标准布朗运动的马尔可夫转移函数 import numpy as np def p(x,t): return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t)) 但是我想计算以下我将要用不起作用的代码编写的代码。我这样写是为了不使用乳胶就能理解问题 from scipy.integrate import quad integral = quad(quad(p(y

我已经设法为我的随机过程类使用scipy.integrate.quad编写了几行代码

我有标准布朗运动的马尔可夫转移函数

import numpy as np
def p(x,t):
    return (1/np.sqrt(2*np.pi*t))*np.exp(-x**2/(2*t))
但是我想计算以下我将要用不起作用的代码编写的代码。我这样写是为了不使用乳胶就能理解问题

 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提供了

优点是这些例程更容易处理复杂的边界(例如,边界依赖于其他坐标)

我将你的例子改写为:

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])

打印出相同的结果。我相信上面的代码更容易阅读,因为被积函数是作为两个变量的函数显式编写的。

这里有问题吗?你似乎只是在征求意见。你不确定答案或最有效的方法?为了解决前一个问题,尝试使用一些已知的基准分析积分。我想我很不好意思这么直接地问:“老师,我的答案正确吗?”。我想这差不多就是总结了。你认为我得到的价值是正确的吗?就效率而言,我对此感到满意。我一开始真的试过Sympy。它似乎无法做到这一点。非常感谢您的宝贵学习经验。我非常喜欢这个解释和附加示例!