微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

超出了 Lambda 函数的最大递归深度

如何解决超出了 Lambda 函数的最大递归深度

我试图创建一个使用 Simpson 方法求解多个积分的函数,我的想法是将变量一个一个地积分,直到只剩下一个积分,但我超出了递归深度,我无法找出原因(我怀疑这是因为我使用了太多的 lambda 函数)。

def simpson(dim:int,f,dom:list,h=0.01): #dim:dimensions,f:function to be integrated,dom:domain,h:step size

    def integrate(f,interval,h):      #integrates single variable function f using simpson's method 
        integral = 0
        x=interval[0]
        while x<interval[1]:
            integral+=h/6*(f(x)+4*f(x+h/2)+f(x+h))
            x+=h
        return integral

    for d in range(dim-1,-1,-1):            #integrate out variables one by one
        if d==0:
            return integrate(lambda x:f([x]),dom[0],h)
        f = lambda x: integrate(lambda y:f([*x,y]),dom[d],h) #new function that takes one less variable (last variable integrated out)
#test function of two variables (takes input as a vector)   
def T(x):                        
    x,y = x
    return -x**2-2*y**2+2*x*y+2*x+72
print(simpson(2,T,[(0,8),(0,6)])/48)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。