Solving LMIs using feasp when an LMI variable is a term inside a trace
19 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am attempting to use feasp to solve the below LMI for
and
.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481476/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481481/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481486/image.png)
Where
denotes the trace opperator,
. All other matrices are known and of appropriate dimension.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481491/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481496/image.png)
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).
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481476/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1481481/image.png)
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.
0 commentaires
Réponses (1)
Yash
le 3 Oct 2023
Modifié(e) : Yash
le 3 Oct 2023
Hi @AdamsK
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.
0 commentaires
Voir également
Catégories
En savoir plus sur LMI Solvers dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!