2013-12-23 76 views
0

我從1970年代的流程圖和演算例子中得到了一個weird, old book這個例子。這篇文章寫得不是很好,但我很樂意將流程圖寫入Python,並試圖弄清楚這些方程式實際是什麼以及它們是如何工作的。爲什麼我的Python3代碼返回一個OverflowError?

這個特殊的例子聲稱代表馬爾薩斯和Verhulst種羣增長模型的線性近似。 (買者講師:我能找到我的書的公式和所謂Verhulst的方程物流功能之間沒有關係。)

import math 

def malthus_verhulst(): 
    a = int(input("please enter a value for a\n:%")) 
    b = int(input("please enter a value for b\n:%")) 
    c = int(input("please enter a value for c\n:%")) 
    p = [] 
    v = [] 
    p1 = float(input("please enter a value for p1\n:%")) 
    v1 = float(input("please enter a value for v1\n:%")) 
    p.append(p1) 
    v.append(v1) 
    for k in range(50): 
     p.append((1+c)*p[k]) 
     v.append(v[k]+(a*v[k] - math.pow(b*v[k],2))) 
    print(p,v) 

有改寫這個到它的工作方式對於a,b,c,p1和v1的各種值?

$ python -i scratchpad.py 
>>> malthus_verhulst() 
please enter a value for a 
:%2 
please enter a value for b 
:%2 
please enter a value for c 
:%2 
please enter a value for p1 
:%2 
please enter a value for v1 
:%2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "scratchpad.py", line 92, in malthus_verhulst 
    v.append(v[k]+(a*v[k] - math.pow(b*v[k],2))) 
OverflowError: math range error 
>>> 

回答

0

如果您在異常處理打印v的價值,你會看到,它生長快出界,隨着最後值爲-3.1331863238009388e + 206。由於對一個數字進行平方處理會使指數加倍,並且float的最大指數大約是308,所以算法會爆炸。確保您的輸入值在算法的域內。

相關問題