cvx问题,大神帮帮忙。解决了有偿感谢
我下面这段优化向量P想让获得最大目标函数的代码为什么永远只优化其中一列向量,其他几列刚开始是几还是几
function [eta P] = subfun_cvx(K,M,N,X,G,P_max,P_old,phi,c)
D=zeros(K,M);
R_ub=zeros(K,M);
cvx_begin quiet
variables P(M) eta
expression R_ub(K,M)
expression D(K,M)
expression Objection
maximize eta;
subject to
for k=1:K
for m=1:M
s1=0;s2=0;
for j=1:M
if j==m
continue;
end
s3=0;
for l=1:M
if l==m
continue;
end
s3=s3+P_old(j)*G(k,l);
end
D(k,j)=G(k,j)*log(exp(1))/(log(2)*(s3+phi^2));
s1=s1+D(k,j)*(P(j)-P_old(j));
s2=s2+P_old(j)*G(k,j);
end
R_ub(k,m)=s1+log(s2+phi^2)/log(2);
end
end
Objection = 0;
for m=1:M
ss1=0;
for k=1:K
ss=0;
for j=1:M
ss=ss+P(j)*G(k,j);
end
ss=ss+phi^2;
% if sum(X(:,m))==0
% ss1=ss1;
% else
% ss1=ss1+X(k,m)/sum(X(:,m))*(log(ss)/log(2)-R_ub(k,m));
% end
ss1=ss1+X(k,m)*(log(ss)/log(2)-R_ub(k,m));
end
Objection = Objection + ss1;
end
c*Objection>=eta;
for mm=1:M
0<=P(mm)<=P_max(mm);
end
cvx_end
eta;
P;
% fprintf('CVX原问题结果:%f\n',objcvx);
end