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

8 visualizaciones (últimos 30 días)
AdamsK el 13 de Sept. de 2023
Editada: Yash el 3 de Oct. de 2023
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.

Respuestas (1)

Yash el 3 de Oct. de 2023
Editada: Yash el 3 de Oct. de 2023
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:
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 :
I hope this helps.





Community Treasure Hunt

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

Start Hunting!

Translated by