声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1084|回复: 1

[综合讨论] 关于fmincon函数非线性限制的问题

[复制链接]
发表于 2009-3-4 15:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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;
回复
分享到:

使用道具 举报

发表于 2009-3-4 18:49 | 显示全部楼层

回复 楼主 kevin_sky 的帖子

LZ给的不齐无法试跑!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 19:34 , Processed in 0.051093 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表