error in my matlab code

2 visualizaciones (últimos 30 días)
brahmi ibtissem
brahmi ibtissem el 3 de En. de 2018
Editada: Walter Roberson el 4 de En. de 2018
Hi, I have a problem in my code matlab. The error is
"For colon operator with char operands, first and last operands must be char.
This is my code:
function [Pmacro Pfemto] = UAQP_power_control_method(handles)
Pmacro_dbm = str2num(get(handles.edit1,'String'));
Pmacro = (10^(Pmacro_dbm / 10)) / 1000;
Pfemto_max_dbm = str2num(get(handles.edit2,'String'));
Pfemto_max = (10^(Pfemto_max_dbm / 10)) / 1000;
Pfemto_def_dbm = str2num(get(handles.edit4,'String'));
Pfemto_def = (10^(Pfemto_def_dbm / 10)) / 1000;
target_SINR = str2double(get(handles.edit5,'String'));
N2 = get(handles.edit15,'String');
N3 = get(handles.edit13,'String');
coordVectors = get(handles.figure1, 'UserData');
numOfFemtocells = min(size(coordVectors.femt_x, 2), size(coordVectors.femt_y, 2));
numOfMacrocells = 1;
P_min=-10;
SINR_th=0.7;
N1=3.0;
P0=0.0;
o2=0.4;
o1=0.9;
o3=0.1;
Q21=0.7;
Q31=0.3;
Q22=0.6;
Q32=0.2;
D=0.7;
Pfemto = zeros(1,numOfFemtocells);
a=N2*o2*Q21;
b=N2*o2*Q22;
c=N2*o2*Q31;
d=N2*o2*Q32;
while N2~=0 || N3~=0
for i=1:n Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
else
Pfemto(i)=P0+(N1*o1)+sum(b(1:N2))+(sum(d(1:N3))*D);
end % fin du 1er if
end % fin du for
end % fin du while
end %fin du fonction

Respuestas (2)

Walter Roberson
Walter Roberson el 3 de En. de 2018
You have
for i=1:n
but there is no variable named n assigned to in your code.
You have
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
which use N2 and N3 as the endpoints of a : operation. But you defined
N2 = get(handles.edit15,'String');
N3 = get(handles.edit13,'String');
so N2 and N3 are character vectors, not numeric. You should have used str2num() on them like you did for the other handles whose values you are using.
Note: str2double() is better than str2num() when you are converting values that are intended to be scalar numbers.
  3 comentarios
brahmi ibtissem
brahmi ibtissem el 3 de En. de 2018
Editada: Walter Roberson el 3 de En. de 2018
This is my code now:
function [Pmacro Pfemto] = UAQP_power_control_method(handles)
Pmacro_dbm = str2num(get(handles.edit1,'String'));
Pmacro = (10^(Pmacro_dbm / 10)) / 1000;
Pfemto_max_dbm = str2num(get(handles.edit2,'String'));
Pfemto_max = (10^(Pfemto_max_dbm / 10)) / 1000;
Pfemto_def_dbm = str2num(get(handles.edit4,'String'));
Pfemto_def = (10^(Pfemto_def_dbm / 10)) / 1000;
target_SINR = str2double(get(handles.edit5,'String'));
N2 = str2double(get(handles.edit15,'String'));
N3 = str2double(get(handles.edit13,'String'));
coordVectors = get(handles.figure1, 'UserData');
numOfFemtocells = min(size(coordVectors.femt_x, 2), size(coordVectors.femt_y, 2));
numOfMacrocells = 1;
P_min=-10;
SINR_th=0.7;
N1=3.0;
P0=0.0;
o2=0.4;
o1=0.9;
o3=0.1;
Q21=0.7;
Q31=0.3;
Q22=0.6;
Q32=0.2;
D=0.7;
Pfemto = zeros(1,numOfFemtocells);
a=N2*o2*Q21;
b=N2*o2*Q22;
c=N2*o2*Q31;
d=N2*o2*Q32;
while N2~=0 || N3~=0
for i=1:numOfFemtocells
currentSINR = findRangeSINR(handles);
SINR(i)=target_SINR/currentSINR(i);
if (SINR(i)>SINR_th)
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
else
Pfemto(i)=P0+(N1*o1)+sum(b(1:N2))+(sum(d(1:N3))*D);
end % fin du 1er if
end % fin du for
end % fin du while
end %fin du fonction
Walter Roberson
Walter Roberson el 3 de En. de 2018
You define N2, o2, Q21 as scalars, and calculate
a=N2*o2*Q21;
so a is a scalar. But you try to
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
which tries to subscript a . Same problem with c .
I wonder if you should be extracting a, b, c, d from coordVectors ?

Iniciar sesión para comentar.


brahmi ibtissem
brahmi ibtissem el 3 de En. de 2018
Editada: Walter Roberson el 3 de En. de 2018
My code replace this formula:
P_t=P_ini+[((N_1*o_1 )+(∑_(i=1)^(N_2)▒〖o_2*Q_j 〗)+(∑_(i=1)^(N_3)▒〖o_3*Q_j 〗) )*D_p ]
where
Q_j={(Q_21 if the application of Up2 is RT@〖 Q〗_22 if the application of the Up2 is NRT)}
Q_j={(Q_31 if the application of Up3 is RT@〖 Q〗_32 if the application of the Up3 is NRT)}
  3 comentarios
brahmi ibtissem
brahmi ibtissem el 3 de En. de 2018
My code replace this formula:
Pt=Pini+ [[(NUp1*o1)]+[( ∑o2*Qj)+( ∑o3 *Qj)]*Dp]
where
Qj={(Q21 if the application of Up2 is Real Time application
Q22 if the application of the Up2 is Not Real Time application)}
Qj={(Q31 if the application of Up3 is RT@
Q32 if the application of Up3 is Not Real Time application
brahmi ibtissem
brahmi ibtissem el 4 de En. de 2018
My code replace this formula:
Pt=Pini+ [[(N1*o1)]+[( ∑o2*Qj)+( ∑o3 *Qj)]*Dp]
where Qj={█(Q21 if the application of Up2 is Real Time application Q22 if the application of the Up2 is Not Real Time application)} Qj={(Q31 if the application of Up3 is RT@ Q32 if the application of Up3 is Not Real Time application

Iniciar sesión para comentar.

Categorías

Más información sobre App Building en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by