【发布时间】:2021-03-25 18:35:03
【问题描述】:
我编写了这个程序,描述了一种用于模拟偏微分方程的算法。我使用的基本函数由
定义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。
【问题讨论】:
-
在堆满之前你还没有到达函数的末尾。在堆内存用完之前,您可以在彼此之间进行最大次数的函数调用。
标签: python