I’m using CVX to iteratively update the Taylor series expansion point to be close to the original function. However, my constraint is that beta1 is greater than 0.1 and less than 0.5. The optimal result of the final iteration is beta1=0.1, but the objective function can reach a larger value when I manually calculate the optimal result beta1=0.5. Why is that? I used a different solver and still found beta1=0.1 as the optimal value. But this is not true. Why not 0.5? Here’s my key code
syms beta_func
f3 = log2(T_t1 + P(1-beta_func)abs(hAE’w2_opt)^2 …
+ Pbeta_funcabs(hAE’w1_opt)^2);
f6 = log2(T_t1 + Pbeta_funcabs((hR2’Theta_opthAR + hA2’)*w1_opt)^2);
f7 = f3;
beta1 = beta1_opt;
obj_val = zeros(1,10);
for i = 1:10
cvx_begin quiet
variable beta1_cvx
maximize( T_t*(log(T_t*1 + P*beta1_cvx*abs(hA1'*w1_opt)^2)/log(2) ...
- log(T_t*1)/log(2) ...
- (eval(subs(f3,beta_func,beta1)) + (eval(subs(diff(f3),beta_func,beta1)))*(beta1_cvx - beta1)) ...
+ log(T_t*1 + P*(1-beta1_cvx)*abs(hAE'*w2_opt)^2)/log(2) ...
+ log(T_t*1 + P*beta1_cvx*abs((hR2'*Theta_opt*hAR + hA2')*w1_opt)^2 + P*(1-beta1_cvx)*abs((hR2'*Theta_opt*hAR + hA2')*w2_opt)^2)/log(2) ...
- (eval(subs(f6,beta_func,beta1)) + (eval(subs(diff(f6),beta_func,beta1)))*(beta1_cvx - beta1)) ...
- (eval(subs(f7,beta_func,beta1)) + (eval(subs(diff(f7),beta_func,beta1)))*(beta1_cvx - beta1)) ...
+ log(T_t*1 + P*beta1*abs(hAE'*w1_opt)^2)/log(2)) )
subject to
beta1_cvx >= 0.1;
beta1_cvx <= 0.5;
cvx_end
beta1 = beta1_cvx;
obj_val(i+1) = cvx_optval;
if abs(obj_val(i+1) - obj_val(i)) < 0.001
break;
end
end