如上图所示的LMI约束,tau是已知的常数,A、B是已知的矩阵,X和Y都是sdpvar变量,想求满足条件的X矩阵和Y矩阵。在用yalmip和sdpt3求解器计算时求不出解,显示NAN。但如果将第一行第二列元素中的Y*inv(X)去掉后,能够正常求解。以前也遇到过这样的问题,只要在LMI中遇见两个sdpvar变量相乘时,yalmip都算不出解,请教各位大佬这是什么原因?
![](https://profile-avatar.csdnimg.cn/084eb338f4564e16b03c620032378db1_weixin_46817362.jpg!4)
LMI约束中有两个sdpvar变量形式的矩阵相乘,发现yalmip工具箱求不出解
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
这是因为在LMI中遇到两个sdpvar变量相乘会导致优化问题的非凸性,使得求解器可能会陷入局部最优解而无法找到全局最优解。为了避免这种情况,可以使用yalmip中的replace,将相乘的sdpvar变量替换成一个新的变量,从而使得LMI构成的优化问题为凸问题,可以更容易地求解。具体代码如下:% 定义变量 X = sdpvar(n); Y = sdpvar(n); W = sdpvar(n); % 构造LMI约束 F = [A*X+B*Y+tau*eye(n) <= 0, Y - W'*W >= 0, X >= eps*n*eye(n), W >= 0]; % 将Y*inv(X)替换成新的变量Z Z = sdpvar(n); F = replace(F, Y*inv(X), Z); % 定义优化目标并求解 obj = trace(W); ops = sdpsettings('solver', 'sdpt3', 'verbose', 0); optimize(F, obj, ops);
其中,replace函数的作用是将第一个参数中的第二个参数替换成第三个参数,可以用来替换LMI中相乘的sdpvar变量。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 Stata链式中介效应代码修改
- ¥15 latex投稿显示click download
- ¥15 请问读取环境变量文件失败是什么原因?
- ¥15 在若依框架下实现人脸识别
- ¥15 添加组件无法加载页面,某块加载卡住
- ¥15 网络科学导论,网络控制
- ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错