簡體   English   中英

Python 中出現“最大遞歸錯誤”的原因

[英]Reason for “Maximum recursion error” in Python

我編寫了這個程序,描述了一種用於模擬偏微分方程的算法。 我使用的基本功能由

import numpy as np
import math
from scipy import integrate, stats


def shift(func, x, a=0):
    return func(x-a)


def scale(func, a=1):
    return a*func


def trunc(func, x):
    if x <= 0:
        return 0
    else:
        return func(x)


def quad(func, a, b):
    return integrate.quad(func, a, b)


def gauss(func, t, x):
    def pregau(z):
        k = (-t ** (1 / 2)) * z
        return shift(func, x, k)*math.exp(-(z**2)/2)

    fa = (1 / ((2 * math.pi) ** (1 / 2)) * integrate.quad(pregau, -np.inf, np.inf)[0])
    return fa

然后程序通過以下方式模擬偏微分方程的解

def vundl(x, u, l0=0.0, a=a, b=b, c=c):
    v = [u(x)]
    l = [l0]
    f_temp_rec = u
    for i in range(10):
        def f_temp(x):
            y = x - c * dt + B[i + 1] * 2 * a
            z = b * dt
            return gauss(f_temp_rec, z, y)

        li = l[i] + quad(f_temp, 0, np.inf)[0]
        l = np.append(l, li)

        if x <= 0:
            v = np.append(v, 0)
            f_temp_rec = 0

        else:
            f_temp_rec = f_temp
            v = np.append(v, f_temp(x))

    return [v, l]


def u0(x):
    return stats.beta.pdf(x, 2.7, 3.05)


print(vundl(x = 0.5, u0))

如果我為 N=0 運行這個程序,它會產生一個向量。 運行 N>0 的程序會給我以下錯誤:

“RecursionError:超出最大遞歸深度”

但它實際上應該給我一個向量 v 和一個向量 l。

我不確定您在vundl中使用f_tempf_temp_rec究竟要做什么,但在else:塊中您分配:

f_temp_rec = f_temp

然后調用f_temp調用gauss(f_temp_rec, z, y) 因為此時f_temp_rec is f_temp ,所以 function f_temp在無限遞歸中調用自身。

您應該能夠在回溯中看到f_temp反復調用自己。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM