我的直方图似乎符合泊松分布。 为了适应它,我自己声明函数如下
xdata; ydata; % Arrays in which I have stored the data.
%Ydata tell us how many times the xdata is repeated in the set.
fun= @(x,xdata) (exp(-x(1))*(x(1).^(xdata)) )/(factorial(xdata)) %Function I
% want to use in the fit. It is a poisson distribution.
x0=[1]; %Approximated value of the parameter lambda to help the fit
p=lsqcurvefit(fun,x0,xdata,ydata); % Fit in the least square sense
我发现了一个错误。它可能与" factorial"有关。有什么想法吗?
答案 0 :(得分:1)
因子从矢量xdata输出矢量。你为什么在factorial中使用.xdata?
例如:
data = [1 2 3];
然后 factorial(data)
[1! 2! 3!].
尝试./factorial(xdata)
(我不记得在这种情况下是否需要点。)
答案 1 :(得分:0)
您需要使用 gamma(xdata + 1)函数而不是 factorial(xdata)函数。 Gamma函数是阶乘函数的一种通用形式,可用于实数和复数。因此,您的代码将是:
fun = @(x,xdata) exp(-x(1))*x(1).^xdata./gamma(xdata+1);
x = lsqcurvefit(fun,1,xdata,ydata);
或者,你可以使用已经优化的MATLAB fitdist 函数,你可能会得到更好的结果:
pd = fitdist(xdata,'Poisson','Frequency',ydata);
pd.lambda