Matlab。泊松拟合。阶乘

Matlab. Poisson fit. Factorial

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

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

阶乘从向量 xdata 输出一个向量。为什么在阶乘中使用 .xdata?

例如:

data = [1 2 3];

factorial(data) 就是 [1! 2! 3!].

尝试./factorial(xdata)(我不记得在这种情况下是否需要点。)

您需要使用 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