Python溢出错误乘法

时间:2016-12-22 06:13:37

标签: python python-2.7 matplotlib runtime-error overflow

我正在处理的等式的代码结构是这样的。

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()

打印temp给我这个

    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

显示的结果非常不准确。我知道这是因为,获得的图形不是我应该得到的。在谷歌快速绘制相同的方程给了我这个

This pic shows the differences in the graphs 实际的情节是google.com。 我相当肯定错误是由浮点计算引起的。有人可以帮我纠正配方公式吗?

1 个答案:

答案 0 :(得分:2)

从大约0.7开始,你的分数会变成虚无。谷歌非常聪明地想出来并将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