Exercise 4.57: Capacity of a communication channel
rand('state', 0);
n = 15;
m = 10;
P = rand(m,n);
P = P./repmat(sum(P),m,1);
c = sum(P.*log2(P))';
cvx_begin
variable x(n)
y = P*x;
maximize (c'*x + sum(entr(y))/log(2))
x >= 0;
sum(x) == 1;
cvx_end
C = cvx_optval;
display(['The channel capacity is: ' num2str(C) ' bits.'])
Successive approximation method to be employed.
SDPT3 will be called several times to refine the solution.
Original size: 45 variables, 21 equality constraints
Approximation size: 126 variables, 71 equality constraints
-----------------------------------------------------------------
Target Conic Solver
Precision Error Status
---------------------------
1.221e-04 4.915e-01 Solved
1.221e-04 2.013e-03 Solved
1.221e-04 1.504e-05 Solved
1.221e-04 0.000e+00 Solved
1.490e-08 2.332e-09 Solved
1.490e-08 0.000e+00 Solved
-----------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +0.296291
The channel capacity is: 0.29629 bits.