近日使用MATLAB求解极大似然估计,在优化时遇到问题,请高手帮忙看看:
opts =optimset('DerivativeCheck','off','Display','off','TolX',1e-6,'TolFun',1e-6,'Diagnostics','off','MaxIter',200,'LargeScale','off'); %优化设置
n=100;d=3;
x=normrnd(0,0.25,n,d); %x赋值
y=10*sin(normrnd(1,0.5,n,1)); %y赋值
sigma_0=zeros(1,1);r0=zeros(1,1);gama_0=zeros(1,1); %变量初始赋值
sigma_1=zeros(d,1);r1=zeros(d,1);gama_1=zeros(d,1);
[w1,lik1,exit1] = fmincon('multinorm_mle',[0;zeros(d,1);0;zeros(d,1);0;zeros(d,1);],[],[],[],[],[],[],opts); %红色部分为变量初值,部分变量为向量。
format long;
disp(num2str([w1],5));
disp(num2str([lik1 exit1],5));
function loglik = multinorm_mle(w) % multinorm_MLE The log-likelihood function of the local polynomial model
global n d sigma_0 sigma_1 r0 r1 gama_0 gama_1;
for i=1:n;
loglik=-1/2*(sigma_0^2+sigma_1'.^2*(x(i)-x))-1/2*(y(i)-r0-r1'*(x(i)-x))^2/exp(sigma_0^2+sigma_1'.^2*(x(i)-x))+log(normcdf(-(y(i)-r0-r1'*(x(i)-x)))*exp(gama_0+gama_1'.*(x(i)-x)-1/2*(sigma_0^2+sigma_1'.^2*(x(i)-x))));
loglik=sum(loglik);
end;
运行程序后显示:
??? Error using ==> optimfcnchk
NONLCON must be a function.
Error in ==> fmincon at 246
[confcn, msg] = optimfcnchk(NONLCON,'fmincon',length(varargin),funValCheck,gradconstflag,false,1);
该怎么样改进呢?苦思数日,难以突破,请高手帮忙看看。


雷达卡



京公网安备 11010802022788号







