2016-12-22 5 views
0

私が作業している式のコード構造はこうです。 tempを印刷Pythonのオーバーフローエラーの乗算

import matplotlib.pyplot as plt 
    for x in range (0 ,20): 
     temp = x * (-1*10**(-9)*(2.73**(x/0.0258*0.8) - 1) + 3.1) 
     P.append(temp) 
     Q.append(x) 
     print temp 
plt.plot(Q,P) 
plt.show() 

が私にこの

4.759377049180328889121938118 
-33447.32349862001706705983714 
-2238083697441414267.104517188 
-1.123028419942448387512537968E+32 
-5.009018636753031534804021565E+45 
-2.094526332030486492065138064E+59 
-8.407952213322881981287736804E+72 
-3.281407666305436036872349205E+86 
-1.254513385166959745710275399E+100 
-4.721184644539803475363811828E+113 
-1.754816222227633792004755288E+127 
-6.457248346728221564046430946E+140 
-2.356455347384037854507854340E+154 
-8.539736787129928434375037129E+167 
-3.076467506425168063232368199E+181 
-1.102652635599075169095479067E+195 
-3.934509583907661118429424988E+208 
-1.398436369682635574296418585E+222 
-4.953240988408539700713401539E+235 
-1.749015740500628326472633516E+249 

を与える示された結果は非常に不正確です。私はこれを知っている、得られたグラフは私が得ると思われるものではない。 googleの同じ方程式の簡単なプロットは私にこれを与えた

This pic shows the differences in the graphs 実際のプロットはgoogle.comのものです。 エラーは浮動小数点計算によるものであることは確かです。誰かが定式化された方程式を修正するのを助けることができますか

+4

それがカバーするように、あなたのGoogleプロットは、0から0.8まで実行しているx軸を持っていますが、あなたのコードでは、あなたが0から20までの値をプラグインしているあなたは 'X'を変更してみましたGoogleのプロットのそれより似た範囲ですか? – BrenBarn

+0

あなたの計算上のすべての括弧は正しいですか? – wwii

+0

xが0のとき、tempはゼロでなければならないので、あなたの投稿の何かが間違っています。 – wwii

答えて

2

あなたの得点は約0.7から始まり、無駄になります。 Googleはそれを理解することが非常に賢明であり、y軸を合理的なスケールに制限しています。 matplotlibでは、このスケールを手動で設定する必要があります。

また、0から19までの整数をプロットすることにも注意してください。連続関数をプロットすると、ある間隔で線形に離間した点がしばしば意味があります。

import numpy as np 
import matplotlib.pyplot as plt 
x = np.linspace(0, 0.8, 100) 
y = x * (-1e-9 *(2.73**(x/0.0258*0.8) - 1) + 3.1) 
plt.plot(x,y) 
plt.ylim(-0.5, 2) 

plot