我必須編寫代碼來執行歐拉的近似方法爲diffeq類的步長爲.5和.1。當它是.5我的代碼運行良好,並提供近似值。然而,當它比0.5少幾乎所有的東西,我得到歐拉的方法在Python給RuntimeError
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()
爲什麼<0.001,而不是<0?不是0.001只是在計算中添加一個錯誤,或者我錯過了什麼?看來這真的是「<」在這裏很重要。 – tom10
<0會改變代碼的含義,它會在迭代中觸發大約爲0的中斷,並在下一次迭代中斷裂它。當然,我不知道算法,所以我可能是錯誤的意圖。 –
我改變了t條件,現在運行時間更短。謝謝! – zeke21703