kevin_sky 发表于 2009-3-16 19:46

求助!fmincon非线性约束,迭代时条件无法满足!

求助!
在调用fmincon时,我加入了非线性约束,其中有一个约束相当于
a=diag(param(5:8)) - reshape(param(17:32),4,4);
然后要求 eig(a)>0
但是我在程序运行过程中,一直出现错误,会使得eig(a)<0.。这是为什么啊??
搞了好久了,还是没弄明白怎么回事。。。
下面是我调用fmincon的程序,然后全部程序在附件中
我选用了初始值:param0=[
2.808032
0.367534
0.959048
0.100000
71.057371
0.100092
0.281932
0.100000
0.944699
0.212290
0.805673
0.100000
1.042629
-0.155304
-0.480896
0.100000
70.057371
0.000000
0.000000
0.000000
0.000000
-0.899908
0.000000
0.000000
0.000000
0.000000
-0.718068
0.000000
0.000000
0.000000
0.000000
-0.900000
0.150872 ]


function=kalman_extcir4(param0)


options=optimset('Display','iter','maxfunevals',inf,'maxiter',4000,'LargeScale','off');

lb=repmat(-300,33,1);
ub=repmat(300,33,1);
lb(5:8)=0.0000001;
lb(9:12)=0.0000001;
lb(18:21)=0.00001;
lb(23:26)=0.00001;
lb(28:31)=0.00001;
lb(33)=0.0000001;
ub(33)=1;
=fmincon(@kalfun_extcir4,param0,[],[],[],[],lb,ub,@mycon,options);


function =mycon(param)

ktQ=reshape(param(1:4),4,1);
kQ=diag(param(5:8));
lamda1=reshape(param(13:16),4,1);
lamda2=reshape(param(17:32),4,4);
ktP=ktQ+lamda1;
kP=kQ-lamda2;
if det(kP)==0
    logfun=0;
    return
end
ev=-eig(kP)+;%------------------------------就是这个约束一直无法满足
ctemp=-inv(kP)*ktP+;%------------------------------还有这个约束经常也无法满足

c=zeros(15,1);
c(1)=0.5*param(9).^2 - param(1)+0.000001;%
c(2)=0.5*param(10).^2 - param(2)+0.000001;
c(3)=0.5*param(11).^2 - param(3)+0.000001;
c(4)=0.5*param(12).^2 - param(4)+0.000001;
c(5)=0.5*param(9).^2 - param(1)- param(13)+0.000001;
c(6)=0.5*param(10).^2 - param(2)- param(14)+0.000001;
c(7)=0.5*param(11).^2 - param(3)- param(15)+0.000001;
c(8)=0.5*param(12).^2 - param(4)- param(16)+0.000001;
c(9:12)=ev;
c(12:15)=ctemp;
c=c;
ceq=0;

[ 本帖最后由 kevin_sky 于 2009-3-16 19:52 编辑 ]

kevin_sky 发表于 2009-3-16 19:48

求求各位大侠了!搞了很久了,还是不行~~~~
页: [1]
查看完整版本: 求助!fmincon非线性约束,迭代时条件无法满足!