I am trying to run the following LMI codes on Matlab but it gives me an error called "Segmentation Violation Detected" and I do not know what is the meaning of this? Please any one help me solve the problem? See attached codes
4 次查看(过去 30 天)
显示 更早的评论
clc clear all; close all;
m11=1.0852; m22=2.0575; m23=-0.4087; m32=-0.4087; m33=0.2153; d11=0.0865; d22=0.0762; d23=0.151; d32=0.0151; d33=0.0031; f11=0.0000; f22=0.0000; f33=0; a41=-f11/(m22*m33-m32*m23); a44=d11/(m22*m33-m32*m23); a52=-m22*f22/(m11*(m22*m33-m32*m23)); a53=-m23*f33/(m11*(m22*m33-m32*m23)); a55=((m22*d22)+(m32*d32))/(m11*(m22*m33-m32*m23)); a56=((m22*d23)+(m32*d33))/(m11*(m22*m33-m32*m23)); a62=-m32*f22/(m11*(m22*m33-m32*m23)); a63=-m33*f33/(m11*(m22*m33-m32*m23)); a65=((m23*d22)+(m33*d32))/(m11*(m22*m33-m32*m23)); a66=((m23*d23)+(m33*d33))/(m11*(m22*m33-m32*m23)); b41=1/(m11*(m22*m33-m32*m23)); b52=m22/(m11*(m22*m33-m32*m23)); b53=m32/(m11*(m22*m33-m32*m23)); b62=m23/(m11*(m22*m33-m32*m23)); b63=m33/(m11*(m22*m33-m32*m23)); labda=sin(2); delta=cos(88); A=[0 0 0 1 -labda 0; 0 0 0 labda 1 0; 0 0 0 0 0 1; a41 0 0 a44 0 0; 0 a52 a53 0 a55 a56; 0 a62 a63 0 a65 a66] A1=A B=[0 0 0; 0 0 0; 0 0 0; b41 0 0; 0 b52 b53; 0 b62 b63] A2=[0 0 0 delta -1 0; 0 0 0 1 delta 0; 0 0 0 0 0 1; a41 0 0 a44 0 0; 0 a52 a53 0 a55 a56; 0 a62 a63 0 a65 a66] A3=[0 0 0 delta 1 0; 0 0 0 -1 delta 0; 0 0 0 0 0 1; a41 0 0 a44 0 0; 0 a52 a53 0 a55 a56; 0 a62 a63 0 a65 a66] B1=[0 0 0; 0 0 0; 0 0 0; 1 0 0; 0 b52 b53; 0 b62 b63] B2=B1 B3=B1
A0=[0 0 0 0.0015 0.0050 0; 0 0 0 0.0050 0.0015 0; 0 0 0 0 0 0.0050; 0 0 0.0014 0 0 0; 0 0 0 0 0.0020 0.0033; 0 0 0 0 0.0001 0.0010] B0=[0 0 0; 0 0 0; 0 0 0; 0.0050 0 0; 0 0.1018 0.0048; 0 0.0048 0.0010] Q=[0.0100 0 0 0 0 0; 0 0.0100 0 0 0 0; 0 0 0.0100 0 0 0; 0 0 0 0.0100 0 0; 0 0 0 0 0.0100 0; 0 0 0 0 0 0.0100] I=[1 0 0 0 0 0; 0 1 0 0 0 0; 0 0 1 0 0 0; 0 0 0 1 0 0; 0 0 0 0 1 0; 0 0 0 0 0 1] N=(A0'*A0)+Q; Q=inv(N)
setlmis([]); X=lmivar(1,[6 1]); Y=lmivar(1,[6 1]); Y1=lmivar(2,[3 6]); Y2=lmivar(2,[3 6]); Y3=lmivar(2,[3 6]);
lmiterm([1 1 1 0],1) lmiterm([-1 1 1 X],1,1) % X > I : X
lmiterm([-2 1 1 Y],1,1);
lmiterm([3 1 1 X],A1',1,'s'); lmiterm([3 1 1 Y1],B1,1,'s'); lmiterm([3 1 1 0],2); lmiterm([3 1 1 0],1); lmiterm([3 1 2 Y1],0,B0); lmiterm([3 1 3 X],1,1); lmiterm([3 2 2 0],-1); lmiterm([3 2 3 0],0); lmiterm([3 3 3 0],0); lmiterm([3 3 2 0],0); lmiterm([3 3 3 0],-1);
lmiterm([4 1 1 X],A2',1,'s'); lmiterm([4 1 1 Y2],B2,1,'s'); lmiterm([4 1 1 0],2); lmiterm([4 1 1 0],1); lmiterm([4 1 2 Y2],0,B0); lmiterm([4 1 3 X],1,1); lmiterm([4 2 2 0],-1); lmiterm([4 2 3 0],0); lmiterm([4 3 3 0],0); lmiterm([4 3 2 0],0); lmiterm([4 3 3 0],-1);
lmiterm([5 1 1 X],A3',1,'s'); lmiterm([5 1 1 Y3],B3,1,'s'); lmiterm([5 1 1 0],2); lmiterm([5 1 1 0],1); lmiterm([5 1 2 Y3],0,B0); lmiterm([5 1 3 X],1,1); lmiterm([5 2 2 0],-1); lmiterm([5 2 3 0],0); lmiterm([5 3 3 0],0); lmiterm([5 3 2 0],0); lmiterm([5 3 3 0],-1);
LMIs=getlmis;
[alpha,popt]=gevp(LMIs,6);
X=dec2mat(LMIs,popt,1);
Y=dec2mat(LMIs,popt,2);
Y1=dec2mat(LMIs,popt,3);
Y2=dec2mat(LMIs,popt,4);
Y3=dec2mat(LMIs,popt,5);
P=inv(X);
L1=Y1*P;
L2=Y2*P;
L3=Y3*P;
W=P*Y*P;
% show results
alpha
L1
L2
L3
P
W
0 个评论
回答(1 个)
Johan Löfberg
2014-6-12
It simply means that there is a bug in the MATLAB/LMILAB version you are using, so it crashes. You're not doing anything wrong.
BTW, the command "eye" might be worth learning...
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Linear Matrix Inequalities 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!