2013-12-15 78 views
1

我使用下面的代码绘制一个函数。精确计算和绘图

from __future__ import division 
from scipy.misc import comb 
import matplotlib.pyplot as plt 
import numpy as np 

N = 100 
X = np.arange(2,N) 

def k_loop(w,n): 
    K = np.arange(0, w+1) 
    return (comb(w,K)*(comb(w,K)/2**w)**(3*float(n)/np.log(n))).sum() 

def w_loop(n): 
    v = [comb(n,w)*k_loop(w,n) for w in range(1,n+1)] 
    return sum(v) 

Y = [w_loop(n) for n in X] 
plt.plot(X,Y) 
plt.show() 

但是我想确保没有数字错误。 python可以精确地进行计算,并且只能在绘图的最后时刻转换为浮点数?日志不能确切,但我想尽可能保持一切准确。

回答

4

如果您希望计算与基数为10的数字尽可能精确,请尝试使用decimal模块。

虽然这将需要重写你的代码。

  • decimal具有lnlog10功能,和一个power功能。
  • 但是您可能需要按照decimal s重写comb,或者使用exact=True并将结果转换为decimal