我正在使用以下代码绘制函数。

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精确地进行计算,并且仅在绘图时在最后一刻转换为浮点?日志不能准确,但我想让其他所有内容尽可能长。

最佳答案

如果希望以10为底的数字尽可能精确地进行计算,请尝试使用decimal模块。

不过,这将需要重写您的代码。


decimal具有lnlog10函数以及power函数。
但是您可能必须根据comb重写decimal,或使用exact=True并将结果转换为decimal

关于python - 精确计算和绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20593177/

10-12 18:10