wenjinghongyu999
2022-02-12 20:56
采纳率: 100%
浏览 102

matlab关于CVX优化的问题

问题遇到的现象和发生背景

cvx目标函数表达式含有两个问题,一是表达式中含有求矩阵的核范数代码,即所有奇异值之和,二是含有Log(变量)的表达式;cvx约束表达式含有一个问题是想表达矩阵的对角线向量为全一向量

问题相关代码,请勿粘贴截图

cvx_begin sdp
    variable V(64,64) complex semidefinite
    variable p13  nonnegative
    variable p23  nonnegative
    variable p14  nonnegative
    variable p24  nonnegative
obj=1/2/rho*sum(svd(V))-log(trace(L1*Z*L1'*V')+sigmak^2+trace(L1*W1*L1'*V')+trace(L1*W2*L1'*V'))-log(trace(L2*Z*L2'*V')+sigmak^2+trace(L2*W1*L2'*V')+trace(L2*W2*L2'*V'))-trace((1/2/rho*null(Vt-max(eig(Vt))*eye(length(Vt)))*(null(Vt-max(eig(Vt))*eye(length(Vt))))'-1/log(2)*conj(L1)*(Z.'+W2.')*L1.'/(trace(L1*Z*L1'*Vt.')+sigmak^2+trace(L1*W2*L1'*Vt.'))-1/log(2)*conj(L2)*(Z.'+W1.')*L2.'/(trace(L2*Z*L2'*Vt.')+sigmak^2+trace(L2*W1*L2'*Vt.')))'*V);
minimize obj
subject to 
diag(V)=ones(64,1);
V>=0;
cvx_end
运行结果及报错内容

第一个错误关于求矩阵的核范数,其代码为sum(svd(V)),报错内容:错误使用 svd,第一个输入必须为单精度值或双精度值。
第二个错误是关于Log表达式的,代码为obj表达式中含有log的成分,报错内容:错误使用 cvx/log (第 64 行)
Disciplined convex programming error:
Illegal operation: log( {complex affine} ).
第三个错误关于规定矩阵V对角线为全一向量,代码为diag(V)=ones(64,1),报错内容为:无法将类型为 cvx 的值用作索引。
出错 main (第 141 行)
diag(V)=ones(M_irs,1);

我的解答思路和尝试过的方法

关于第一第三个我没有什么思路,第二个问题我想把Log(a+bi)的实数和虚数分开求,但是好像log中的表达式太过复杂,处理起来很是有很多问题

我想要达到的结果

可以运行通,不报错

1条回答 默认 最新

相关推荐 更多相似问题