[英]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_temp
和f_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.