我必须编写代码来为我的 diffeq 类执行欧拉近似方法,步长为 0.5 和 0.1。当它是 0.5 时,我的代码运行良好并提供了近似值。但是,当它几乎小于 0.5 时,我得到
RuntimeError: maximum recursion depth exceeded in cmp
如果我尝试增加递归深度,我最终会得到Segmentation fault: 11
.
这是代码。请帮助我弄清楚为什么会出现递归错误,或者如何改进代码以减少递归。
import sys
from pylab import *
h=.4
t=0
dep=[]
ind=[]
def sqr(q):
return q*q
def d(x,t):
return x+sqr(t)-2
while t<=3:
def x(t):
if t==0:
return 1
else:
return x(t-h)+h*d(x(t-h),t)
dep.append(x(t))
ind.append(t)
t+=h
plot(ind,dep,'o')
t=arange(0,3,.01)
x=exp(t)-t*(t+2)
plot(t,x,)
title("Euler's Method for dx/dt=x+t^2-2")
xlabel('t')
ylabel('x')
show()