epoh 发表于 2012-3-26 15:23 
这个程序,只是让你的数据能运行
你的模型,还存在问题
就让你自行慢慢修改.
您好,我按您所说的添加线性约束条件x(7)+x(8)<1,将您的程序修改为
load szzs.txt
a = szzs(:);
y =100*(diff(log(a)));
n=length(y);
x0 = [0,0,0,1,1,1,0,0,0.5];
lb=[-inf,-inf,-inf,0,-inf,-inf,-inf,-inf,0];
ub=[inf,inf,inf,inf,inf,inf,inf,inf,1];
A=[0,0,0,0,0,0,1,1,0];
b=[1];
[x,fval] = fmincon(@(x)subfun(x,y,n),x0,[],[],[],[],lb,ub,@nonlcon)
%%%%subfun.m
function f = subfun(x,y,n)
mu =(x(1)+x(5)*x(4))/(1-x(2)-x(3));
m = sum((y-mu)'*(y-mu));
deta =((x(6)/(1-x(7)-x(8)))-(2*((x(9)^2))*x(4)*(1-x(4))))*(1/(1-x(2)^2-x(3)^2));
f = -(n/2)*log((2*pi)*deta)+((1/(2*deta))*m);
%nonlinear inequalities c(x)
%%%%%%%nonlcon.m
function [c,ceq]=nonlcon(x)
c(1)=x(2)^2+x(3)^2-1;
c(2)=x(7)^2+x(8)^2-1;
ceq=[];
这便解决了方差为负的问题,但是我仍然得不到结果,麻烦您帮忙看一下是什么原因?还有您说的我的模型还存在问题具体是什么方面的问题啊?我对这方面了解的很少,能不能麻烦您具体讲讲啊?非常感谢!
ceq=[];