# The index is beyond the matrix dimension

(hua meng) #1

Dear everyone,

I encounter one problem in CVX. The matlab code is provided below.
function [ L_mu,L_u,L_um,Rho,Objective] = BitOptimizationWithfixedScheduling()

``````global h_G2U  EU k L N SNR_um SNR_mu C gamma T B delta1
cvx_begin
cvx_solver mosek
variable  Rho
variable  L_mu(N-2,1) nonnegative
variable  L_um(N-2,1) nonnegative
variable  L_u(N-2,1) nonnegative
expression  E_mu(N-2,1)
expression  E_m
expression  E_u(N-2,1)
expression  E_um(N-2,1)
%%
for n=1:N-2
E_um(n,1)=(2^(L_um(n,1)/(B*delta1))-1)*h_G2U(n+2,1)^2*delta1/SNR_um;
end
for n=1:N-2
E_u(n,1)=ComputEnergy(L_u(n,1));
end
%%

E_m=C^3*gamma*pow_pos(Rho*L,3)./T^2;

for n=1:N-2
E_mu(n,1)=CommunEnergy(L_mu(n,1), h_G2U(n,1),SNR_mu);
end
% %%
minimize sum(E_mu)+E_m
subject to
sum(E_um)+sum(E_u)<=EU;
for n=1:N-2
sum(L_u(1:n,1))<=sum(L_mu(1:n,1));
end
for n=1:N-2
sum(L_um(1:n,1))<=k*sum(L_u(1:n,1));
end
sum(L_mu)==(1-Rho)*L;
sum(L_u)==(1-Rho)*L;
sum(L_um)==k*(1-Rho)*L;
0<=Rho<=1;
cvx_end
Objective=cvx_optval;
end
``````

%%%%%%%%%%%%%%%%%%%%%%%%
Maltab window shows CVX index exceeds matrix dimensions.

I have carefully checked the matrix dimension one by one, and find the dimensions of matrices are well matched. what’s wrong with it ?
The other parameters are scalar variables, which is given as following

Hope someone can help me, thanks in advance.

(Mark L. Stone) #2

Are you using CVX 30.beta? If so, try CVX 2.1.

Have you done `whos` immediately before the for loop in which the error occurs?

(hua meng) #3

Dear Mark, these results are ran in CVX 2.1 , not CVX3.0beta.

The parameters like `B, delta1, h_G2U, SNR_um` are all constant scalars or vectors. And are given as following. I type `whos` before for loop.

``````Name                Size             Bytes  Class     Attributes

B                   1x1                  8  double    global
C                   1x1                  8  double    global
EU                  1x1                  8  double    global
L                   1x1                  8  double    global
N                   1x1                  8  double    global
N0_dB               1x1                  8  double
SNR_mu              1x1                  8  double    global
SNR_mu_dB           1x1                  8  double
SNR_um              1x1                  8  double    global
SNR_um_dB           1x1                  8  double
T                   1x1                  8  double    global
UserPosition        3x1                 24  double
ans                 0x0               1281  cvx
delta1              1x1                  8  double    global
delta2              1x1                  8  double    global
gamma               1x1                  8  double    global
h_G2U             160x1               1280  double
k                   1x1                  8  double    global
q                   3x160             3840  double
q0                  3x1                 24  double
sigma               1x1                  8  double    global
v                   3x1                 24  double``````

(Mark L. Stone) #4

is `whos` immediately before the for loop? If so, all of your declared CVX variables and expressions should be shown, and listed as Class `cvx` But none of them are shown.

Edit: Let’s see the results of a properly executed `whos`. Either you made a mistake or you have encountered a CVX bug. CVX_SDP Index exceeds matrix dimensions problem

(hua meng) #5

Dear Mark,

I have found the mistake. The global parameter `h_G2U` miss stated in function. Thank you for your suggestions.

(Mark L. Stone) #6

global variables are very dangerous. It is easy for bad things to happen when you use them without sufficient care.

(hua meng) #7

Thank you for your suggestion. It help me a lot.