Matlab的。泊松拟合。阶乘

时间:2017-06-28 08:50:11

标签: matlab curve-fitting factorial poisson

我的直方图似乎符合泊松分布。 为了适应它,我自己声明函数如下

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"有关。有什么想法吗?

2 个答案:

答案 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