The relationship between V and Theta is
Theta is the variable to be optimized by the algorithm, and V is the auxiliary variable.
Here is my code.
cvx_solver mosek
cvx_begin
variable Theta(2,2)
expressions V(3,3) v(3,1)
v=[diag(Theta).' 1].';
V=quad_form(v,eye(3));
f1=log(2).*(trace(H_ak1*V)*ap1+wk(1,1)*ap1+noise);
f2=log(2).*(trace(H_ak2*V)*ap2+wk(1,2)*ap2+noise);
f3=log(2).*(trace(H_ak3*V)*ap3+wk(1,2)*ap3+noise);
ge1=log(2).*(trace(H_ae*V)*(ap1-p_k0(1,1))+we*(ap1-p_k0(1,1))+noise);
ge2=log(2).*(trace(H_ae*V)*(ap2-p_k0(1,2))+we*(ap2-p_k0(1,2))+noise);
ge3=log(2).*(trace(H_ae*V)*(ap3-p_k0(1,3))+we*(ap3-p_k0(1,3))+noise);
der_g1=((ap1-p_k0(1,1))*H_ak1'*log2(exp(1)))/(trace(H_ak1*V0)*(ap1-p_k0(1,1))+wk(1,1)*(ap1-p_k0(1,1))+noise);
der_g2=((ap2-p_k0(1,2))*H_ak2'*log2(exp(1)))/(trace(H_ak2*V0)*(ap2-p_k0(1,2))+wk(1,2)*(ap2-p_k0(1,2))+noise);
der_g3=((ap3-p_k0(1,3))*H_ak3'*log2(exp(1)))/(trace(H_ak3*V0)*(ap3-p_k0(1,3))+wk(1,3)*(ap3-p_k0(1,3))+noise);
g1_ub=log(2).*(trace(H_ak1*V0)*(ap1-p_k0(1,1))+wk(1,1)*(ap1-p_k0(1,1))+noise)+trace(der_g1'*(V-V0));
g2_ub=log(2).*(trace(H_ak2*V0)*(ap2-p_k0(1,2))+wk(1,2)*(ap2-p_k0(1,2))+noise)+trace(der_g2'*(V-V0));
g3_ub=log(2).*(trace(H_ak3*V0)*(ap3-p_k0(1,3))+wk(1,3)*(ap3-p_k0(1,3))+noise)+trace(der_g3'*(V-V0));
The running result is
错误使用 .* (line 173)
Disciplined convex programming error:
Cannot perform the operation: {complex affine} .* {convex}
出错 * (line 36)
z = feval( oper, x, y );
出错 Algorithm2 (line 57)
f1=log(2).(trace(H_ak1V)*ap1+wk(1,1)*ap1+noise);
If my code is written as follows, it will run successfully, but I can’t get the theta I actually want to optimize Theta from the optimized V.
cvx_solver mosek
cvx_begin
variable V(3,3)
f1=log(2).*(trace(H_ak1*V)*ap1+wk(1,1)*ap1+noise);
f2=log(2).*(trace(H_ak2*V)*ap2+wk(1,2)*ap2+noise);
f3=log(2).*(trace(H_ak3*V)*ap3+wk(1,2)*ap3+noise);