我试图拟合对数正态分布:
import numpy as np
import scipy.stats as sp
from scipy.optimize import curve_fit
def pdf(x, mu, sigma):
return (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2)) / (x * sigma * np.sqrt(2 * np.pi)))
x_axis = [5e5,1e6,2e6,5e6,6e6]
y_axis = [0,0.2,0.4,0.6,0.8]
curve_fit(pdf,x_axis,y_axis,maxfev=10000,)
这将返回以下结果:
^{pr2}$这些结果看起来不太合适。我知道只有五个数据点,但当我在excel中使用solver时,我得到的参数是0.1536和3.1915,这不是完美的,但它更接近。在
编辑:用cdf试试这个
def cdf(x,mu,sigma):
return sp.norm.cdf((np.log(x)-mu)/sigma)
curve_fit(cdf,x_axis,y_axis,)
这将返回与上面相同的错误
你把数据可视化了吗?在
x_axis
和y_axis
的给定值如下所示:如果您使用给定的
x_axis
值和mu=0.1536
和sigma=3.1915
的Excel解算器值,然后可视化pdf
,您将得到以下结果:所以我想知道你想得到什么结果?在
实际上,第一张图片中的数据看起来并不像普通的pdf格式,是吗?在
相关问题 更多 >
编程相关推荐