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
我有一个似乎符合泊松分布的直方图。 为了适配,我自己声明函数如下
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