用Matlab拟合分布?

时间:2015-05-20 14:55:41

标签: matlab optimization parameters distribution curve-fitting

我从2011年的人口普查中获得了意大利城市规模的数据,我想用双Pareto LogNormal来装配它们,但我不能。我尝试定义一个函数句柄,这是以这种方式分发的对数可能性

ln_lik_dpln=@(alpha,beta,mu,sigma)                                         ...
    - sum(log(alpha) + log(beta) - log(alpha+beta) +                       ...
    normpdf((pop2011-mu)/sigma) +                                          ...
    log(normpdf((alpha*sigma)-((pop2011-mu)/sigma))/normcdf((alpha*sigma)- ...
    ((pop2011-mu)/sigma)) +                                                ...
    normpdf((beta*sigma)-((pop2011-mu)/sigma))/normcdf((beta*sigma) -      ...
    ((pop2011-mu)/sigma))))

然后使用fminconfminunc将其最小化,但两者都无法识别beta。

1 个答案:

答案 0 :(得分:1)

您需要编写匿名函数,以便其参数由单个向量而不是多个标量参数描述。例如,

ln_lik_dpln=@(x) ...
    - sum(log(x(1)) + log(x(2)) - log(x(1)+x(2)) + ...
    normpdf((pop2011-x(3))/x(4)) + ...
    log(normpdf((x(1)*x(4))-((pop2011-x(3))/x(4)))/normcdf((x(1)*x(4))- ...
    ((pop2011-x(3))/x(4))) + ...
    normpdf((x(2)*x(4))-((pop2011-x(3))/x(4)))/normcdf((x(2)*x(4)) ...
    ((pop2011-x(3))/x(4)))))​

然后,您可以将此函数句柄传递给fminconfminunc,以便从长度为4的初始向量最小化。