MATLAB在线性矩阵不等式(LMI)约束下求解常数jieta的最小值(mincx)

以下是我的代码,怀疑有问题,一直不可解。

希望大神们帮帮我。
n=3;
p=3;
n_=n+2*p;

% 自定义参数
%gama,daerta分别为LMI中参数
gama=0.5;
daerta=0.7;


A_=[-1.46 0 2.428 0 0 0 0 0 0;-0.8357 -2.4 -0.3788 0 0 0 0 0 0;0.3107 0 -2.23 0 0 0 0 0 0;0 0 0 1 0 0 0 0 0;0 0 0 0 1 0 0 0 0;0 0 0 0 0 1 0 0 0;0 0 0 0 0 0 1 0 0;0 0 0 0 0 0 0 1 0;0 0 0 0 0 0 0 0 1];

Aeig=eig(A_);

B_=[-12.5068;-9.4796;-7.4111;0;0;0;0;0;0];
C_=[-0.0700 0.5 1 1 0 0 1 0 0;0.5 -0.5 -0.1 0 1 0 0 1 0;0.1 0.2 0.4 0 0 1 0 0 1];
D_2=[0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0;0 0 0 1 0 0 0 0 0;0 0 0 0 1 0 0 0 0;0 0 0 0 0 1 0 0 0;0 0 0 0 0 0 1 0 0;0 0 0 0 0 0 0 1 0;0 0 0 0 0 0 0 0 1];
D_1=[1 0 0;0 1 0;0 0 1;0 0 0;0 0 0;0 0 0;0 0 0;0 0 0;0 0 0];
%n1为指标集,共36个
nl=[0;1;2;3];

I=eye(n_,n_);


% LMI
jiama=0.5;
deerta=0.7;
Myita=B_*pinv(C_*B_);
A=(I-Myita*C_)*A_;
Tyita=[D_2-Myita*C_*D_2,D_1-Myita*C_*D_1];
setlmis([]);
P=lmivar(1,[n_ 1]);
Q=lmivar(2,[n_,p]);
jieta = lmivar(1,[1 1]);
H=lmivar(2,[12,3]);
lmiterm([1 1 1 P],1,A,'s');
lmiterm([1 1 1 Q],1,-C_,'s');
lmiterm([1 1 1 P],jiama, 1);
lmiterm([1 1 2 0],0);
lmiterm([1 2 1 0],0);
lmiterm([1 2 2 0],-deerta*deerta);
lmiterm([2 1 1 0],-jieta);
lmiterm([2 2 1 P],Tyita.',1);
lmiterm([2 2 1 H],-1,C_);
lmiterm([2 2 2 0],-1);
lmiterm([-3 1 1 P],1,1);
%lmiterm ([3 1 1 0],2);
lmisys = getlmis;
n2=decnbr(lmisys);
c=zeros(n2,1);%预分配c的内存,可以没有,但会降低运行速度
for jj = 1:n2
    [rouj]= defcx(lmisys,jj,jieta);%通过defcx函数求取,如果不能理解mat2dec函数就用defcx函数吧
    c(jj)=rouj;
end
[copt,xopt] = mincx(lmisys,c);
 P = dec2mat(lmisys,xopt,P);%标识符为1,即第一个命名的矩阵变量
 Peig1=eig(P);
 Q = dec2mat(lmisys,xopt,Q);
 H = dec2mat(lmisys,xopt,H);
 L=inv(P)*Q;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值