|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我用fmincon时,加了非线性限制(见mycon),但fmincon在迭代参数时,有的参数却不满足mycon中的限制,这是为什么呢?上mathworks的网站查了,好像没有我要的答案。。。。请各位大侠帮忙了~~~
下面是我用fmincon的程序。
%----------------------------
options=optimset('Display','iter','maxfunevals',inf,'maxiter',10,'LargeScale','off');
AAA=zeros(4,26);
AAA(1:2,4)=1;
AAA(1,22)=-1;
AAA(2,20)=-1;
AAA(3,8)=-1;
AAA(3,16)=-1;
AAA(4,9)=-1;
AAA(4,17)=-1;
bbb=[0;0;-0.5;-0.5];
lb=repmat(-inf,26,1);
ub=repmat(inf,26,1);
lb(8:9)=0.50001;
lb(10:11)=0.00001;
lb(15)=0.00001;%
lb(26)=0.00001;
ub(2)=0;ub(4)=0;
[param,fval,exitflag]=fmincon(@kalfun_ext23,param0,AAA,bbb,[],[],lb,ub,@mycon,options);
function [c,ceq]=mycon(param)
kQ12=reshape(param(1:6),3,2);
kQ3=[0;0;param(7)];
kQ=[kQ12 kQ3];
ktQ=[reshape(param(8:9),2,1);0];
alpha=[0;0;1];
beta=[1 0 0;0 1 0;param(10) param(11) 0];
a=param(12);
b=reshape(param(13:15),3,1);
lamda1=reshape(param(16:18),3,1);
lamda21=reshape(param(19:24),3,2);
lamda22=[0;0;param(25)];
lamda2=[lamda21 lamda22];
k=kQ-lamda2;
theta=inv(k)*(ktQ + lamda1);
thetaQ=inv(kQ)*ktQ;
c=zeros(12,1);
c(1:3)=-eig(kQ)+[0.0001;0.0001;0.0001];
c(4:5)=-thetaQ(1:2)+[0.0001;0.0001];
c(6:8)=-eig(k)+[0.0001;0.0001;0.0001];
c(9:10)=-theta(1:2)+[0.0001;0.0001];
c(11:12)=-k(1:2,:);
ceq=0; |
|