|
- clc;
- clear all;
- close all;
- format long;
- %users' locations
- x_k=[0,800/3,1600/3,800];
- y_k=[0,0,0,0];
- K=4;
-
- T=30;%duration
- ak=ones(K,1)*(1/K);%rate profile
- Ak=1/K;
- P=1;%user transmit power
- sigma=sqrt(1e-13);%noise power
-
-
- lambda_c=[];
- sub_c=[];
- for run=1:1
-
- lambda=ones(K,1);
- Pmatrix=eye(K)*1e35;
- tot=1e-20;
-
- [subgradient,x_optimal,y_optimal,H_optimal,Rate,Rate_max]=dualfunction_PM(x_k,y_k,K,T,lambda,P,sigma);
- value1=subgradient'*Pmatrix*subgradient;
- value2=value1;
-
- iteration_number=0;
- while(value2>tot)
- a=0;
- b=0;
- c=0;
- value1=real(subgradient.'*Pmatrix*subgradient);
- subgradient=real(subgradient/sqrt(value1));
- lambda=real(lambda-1/((K)+1)*Pmatrix*subgradient);
- iteration_number=iteration_number+1
- Pmatrix=real((((K)^2)/((K)^2-1))*(Pmatrix-(2/(K+1))*Pmatrix*(subgradient*subgradient.')*Pmatrix));
- [test_lambda,minmin]=min(lambda);
-
- if test_lambda<0
- subgradient=zeros((K),1);
- subgradient(minmin)=-1;
- elseif 1-sum(lambda.*ak)<=-10^(-6)
- subgradient=zeros((K),1);
- for kk=1:1:K
- subgradient(kk,1)=1;
- end
- a=1;
- elseif 1-sum(lambda.*ak)>=10^(-6)
- subgradient=zeros((K),1);
- for kk=1:1:K
- subgradient(kk,1)=-1;
- end
- b=1;
- else
-
- value2=value1;
- [subgradient,x_optimal,y_optimal,H_optimal,Rate,Rate_max]=dualfunction_PM(x_k,y_k,K,T,lambda,P,sigma);
- lambda_c=[lambda_c lambda];
- sub_c=[sub_c subgradient];
- end
-
-
- end
- end
- for I=1:K;
- figure(1)
- plot(lambda_c(I,:),'-r');
- hold on;
- figure(2)
- plot(sub_c(I,:),'-r');
- hold on;
- end
-
- figure(3)
- plot(x_k,y_k,'o');
- hold on;
- plot(x_optimal,y_optimal,'+');
- % hold on;
- % rectangle('position',[-300,-300,100,300]);%obstacle
- % rectangle('position',[100,-350,250,150]);
- % rectangle('position',[0,100,200,200]);
-
- % figure(4)
- % Xrange=1:size(Rate(:,:,1));
- % Yrange=1:size(Rate(:,:,1));
- % [Xplot,Yplot]=meshgrid(Xrange,Yrange);
- % surf(Xplot,Yplot,Rate(:,:,1));
- Xsize=1:length(Rate);
- figure(4)
- plot(Xsize,Rate,'-');
|