所以我试图制作一个简单的对数日志图。但是,我得到了一些数值不稳定性,我的情节非常嘈杂:
我尝试过使用np.float128,以防这是一个精确的问题,使得情节减少噪音但不够。我认为这个问题来自日志中的一个非常小的因素,如果我们扩展它会变成负数,但我想知道是否有任何解决方案来获得平滑的情节。
我的代码如下:
import matplotlib.pyplot as pyplot
from pylab import *
import numpy as np
from decimal import Decimal
mDM = np.float128(np.logspace(1.0,10.0,10000,True,10.0))
#mDM=np.arange(1.0*10**8, 10**12, 500000)
#Parameters
#B=0.99999
B=0
Edm=np.float128(mDM*(1.0/np.sqrt(1.0-B**2.0)))
print (1.0/np.sqrt(1.0-B**2.0))
v=0.0
A= np.float128(2.5681887353e-27)
fig = plt.figure(figsize=(10,6), dpi=100)
ax = fig.add_subplot(1,1,1)
Enu1=np.float128(1.0e3)
x=np.float128(2.0*Edm*Enu1*(1.0 - B*v)/mDM**2.0)
mM=np.float128(np.sqrt(4.0*mDM**2.0 + mDM/(10000000.0*np.sqrt(3.0*A*math.pi))))
y=np.float128( (0.01)**4.0*(1.0/(5.06773e4)**2.0)*(mDM**2.0*x**2.0 + mM**2.0*(1.0 + x)*(np.log(mM**2.0*(1.0 + x)/(mDM**2.0*x**2.0 + mM**2.0*(1.0 + x)))))/(8.0*mDM**2.0*mM**2.0*math.pi*x**2.0)) #(Seems Better)
ax.loglog(mDM,y)
ax.set_xlabel('mDM')
ax.set_ylabel('y')
plt.show()
fig.savefig("Check.jpeg")