Solving LMIs using feasp when an LMI variable is a term inside a trace

12 次查看(过去 30 天)
I am attempting to use feasp to solve the below LMI for and .
Where denotes the trace opperator, . All other matrices are known and of appropriate dimension.
I am using the following code;
setlmis([]) ;
P = lmivar(1,[3 1]) ;
d = lmivar(1,[1 1]) ;
lmiterm([-1 1 1 P],1,1) ;
lmiterm([-1 1 1 P],A',-A) ;
lmiterm([-1 1 1 0],-trace(P*T)*(M+K'*N*K)) ;
lmiterm([-1 1 1 d],1,-C'*C) ;
lmiterm([-2 1 1 P],1,1);
lmiterm([-3 1 1 d],1,1);
LMI = getlmis ;
[tmin, xfeas] = feasp(LMI) ;
P = dec2mat(LMI,xfeas,P)
d = dec2mat(LMI,xfeas,d)
and get a result that satisfies and ; however, when I plug P and d into the LMI in (1), I find that the eigenvalues are positive and negative (I am using eig() to determine the eigenvalues). Meaning, the values MATLAB returned for P and d do not satisfy (1).
I suspect the fact thap P appears inside the trace may be what is causing the issue. Is this the case? If so, how can I work around this? If not, any ideas what the issue could be?
I am using R2022a Update 5. Please let me know if I have not provided enough information.

回答(1 个)

Yash
Yash 2023-10-3
编辑:Yash 2023-10-3
The issue you're encountering may indeed be related to how the trace operator is handled in your code. When you use Tr(P*T) inside your LMI, it represents the trace of the product of matrices P and T. However, the trace operator is a linear operator, and the product of two matrices with the trace operator can't be simplified as Tr(P*T). Instead, you should compute the trace of the product explicitly.
To work around this issue, you can modify your code to compute the trace of the product P*T separately and then use it in the LMI. Here's how you can modify your code:
setlmis([]);
P = lmivar(1, [3, 1]);
d = lmivar(1, [1, 1]);
lmiterm([-1, 1, 1, P], 1, 1);
lmiterm([-1, 1, 1, P], A', -A);
lmiterm([-1, 1, 1, 0], -(M + K' * N * K)); % No trace here
lmiterm([-1, 1, 1, 0], P); % Adding P
lmiterm([-1, 1, 1, 0], T, 1); % Adding T with a coefficient of 1
lmiterm([-1, 1, 1, d], 1, -C' * C);
lmiterm([-2, 1, 1, P], 1, 1);
lmiterm([-3, 1, 1, d], 1, 1);
LMI = getlmis;
[tmin, xfeas] = feasp(LMI);
P = dec2mat(LMI, xfeas, P);
d = dec2mat(LMI, xfeas, d);
With this modification, you explicitly add the term P*T with a coefficient of 1 in the LMI. This should correctly account for the trace operation and give you a solution that satisfies your constraint P - A'PA - dC'C - Tr(PT)(M + K'NK) > 0.
However, it's also important to ensure that your matrices A, C, M, K, and N are defined correctly and consistently with the problem you're trying to solve, as errors in these matrices can also lead to issues with the feasibility of the LMI.
Also refer to the below documentation for more information on trace : https://in.mathworks.com/help/matlab/ref/double.trace.html
I hope this helps.

类别

Help CenterFile Exchange 中查找有关 Linear Matrix Inequalities 的更多信息

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by