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.
0 个评论
回答(1 个)
Yash
2023-10-3
编辑:Yash
2023-10-3
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 个评论
另请参阅
类别
在 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!