Undefined operator '/' for input arguments of type 'matlab.ui​.control.U​IControl'.

Hello, Please i have this error whene i run my interface matlab:
Undefined operator '/' for input arguments of type 'matlab.ui.control.UIControl'.
Error in UAQP_power_control_method (line 63)
SINR2=target_SINR/currentSINR;
The code of my function is:
function [Pmacro Pfemto] = UAQP_power_control_method(handles)
Pmacro_dbm=handles.edit1;
%Pmacro_dbm = str2num(get(handles.edit1,'String'));
%Pmacro = (10^(Pmacro_dbm / 10)) / 1000;
Pfemto_max_dbm=handles.edit2;
%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_dbm=handles.edit4;
%Pfemto_def = (10^(Pfemto_def_dbm / 10)) / 1000;
target_SINR =handles.edit5;
%target_SINR = str2double(get(handles.edit5,'String'));
% N21=handles.edit15;
% N31=handles.edit35;
% N1=handles.edit47;
% N2=handles.edit18;
% N3=handles.edit19;
N21 = str2double(get(handles.edit15,'String'));
N31 = str2double(get(handles.edit35,'String'));
N1=str2num(get(handles.edit47,'String'));
N2=str2num(get(handles.edit18,'String'));
N3=str2num(get(handles.edit19,'String'));
coordVectors = get(handles.figure1, 'UserData');
numOfFemtocells = str2num(get(handles.edit20,'String'));
%numOfFemtocells = handles.edit20;
numOfFemtousers = handles.edit11;
numOfMacrocells = 1;
%N1=2;
% numOfFemtousers = str2num(get(handles.edit11,'String'));
P_min=-10;
SINR_th=10;
% N1=round(rand*8);
% N2=round(rand*8);
% N3=round(rand*8);
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=o2*Q21;
% b=o2*Q22;
% c=o2*Q31;
% d=o2*Q32;
a = o2*Q21*ones(N2,1);
b = o2*Q22*ones(N2,1 );
c = o2*Q31*ones(N3,1 );
d = o2*Q32*ones(N3,1);
SINR1=0;
SINR2=0;
SINR3=0;
%for i=1:numOfFemtocells
for i=1:N1
currentSINR = findRangeSINR(handles);
SINR1=currentSINR;
end
for i=1:N2
currentSINR = findRangeSINR(handles);
SINR2=target_SINR/currentSINR;
end
for i=1:N3
currentSINR = findRangeSINR(handles);
SINR3=target_SINR/currentSINR;
end
SINRp1=SINR1;
SINRp2=SINR2;
SINRp3=SINR3;
for i=1:numOfFemtocells
if (SINRp1(i+1)> SINR(i) && SINRp2(i+1)> SINR(i)&& SINRp3(i+1)> SINR(i))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
else if (SINRp1(i)> SINR(i) && SINRp2(i+1)> SINR(i))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))*D;
else if(SINRp1(i+1)> SINR(i))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N21))*D;
else
Pfemto(i)=Pfemto(i-1);
end
end
end
end
end

 Accepted Answer

You have
target_SINR =handles.edit5;
so target_SINR is a handle, not the content stored at the handle.
You have
SINR2=target_SINR/currentSINR;
so you are trying to divide the handle by something.
We cannot tell what the something is:
currentSINR = findRangeSINR(handles);
does not tell us what findRangeSINR does, and the code for that function was not included.
If you want the number the user has entered in the edit5 handle then you need
target_SINR = str2double(handles.edit5.String);
Caution: this will not update as the user enters new values: it will only update when the line is re-executed.
Note that you have three loops with the general form
for i=1:N1
currentSINR = findRangeSINR(handles);
SINR1=currentSINR;
end
Unless findRangeSINR is keeping a counter or choosing information randomly, then the output of that loop is not affected by how many times you run the loop body, since you do not use i anywhere in the loop, and you completely overwrite all of SINR1 each iteration of the loop. It is not obvious why you do not just do the assignments once without a for loop.

6 Comments

Thanks a lot. in this code, i have a number of fetocell and femtousers.The function findRangeSINR is to calculate the SINR of each femto.I divide the total number of femtousers into 3 types N1, N2 and N3 and i want to calculate the SINR of each type of user. After, based on the calculated SINRs, I have calculated the transmission power of femto and based on SINR1, SINR2 and SINR3. That's the purpose of my code, can you help me please.
You would need something resembling
for i=1:N1
currentSINR = findRangeSINR(handles, 'N1', i);
SINR1(i) = currentSINR;
end
if each of the N1 entries had an associated value referenced (somehow) in handles.
But I have no information about what values findRangeSINR needs to work with.
Thanks.
I update the code. I have this error:
Attempted to access SINRp1(0); index must be a positive integer or logical.
Error in UAQP_power_control_method (line 76)
if (SINRp1(j)> SINRp1(j-1) & SINRp2(k)> SINRp2(k-1)& SINRp3(l)> SINRp3(l-1)).
This is my new 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;
N21 = str2double(get(handles.edit15,'String'));
N31 = str2double(get(handles.edit35,'String'));
N1=str2num(get(handles.edit47,'String'));
N2=str2num(get(handles.edit18,'String'));
N3=str2num(get(handles.edit19,'String'));
coordVectors = get(handles.figure1, 'UserData');
numOfFemtocells = str2num(get(handles.edit20,'String'));
%numOfFemtocells = handles.edit20;
numOfFemtousers = handles.edit11;
numOfMacrocells = 1;
%N1=2;
% numOfFemtousers = str2num(get(handles.edit11,'String'));
%P_min=-10;
%SINR_th=10;
% N1=round(rand*8);
% N2=round(rand*8);
% N3=round(rand*8);
P0=10;
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=o2*Q21;
% b=o2*Q22;
% c=o2*Q31;
% d=o2*Q32;
a = o2*Q21*ones(N2,1);
b = o2*Q22*ones(N2,1 );
c = o2*Q31*ones(N3,1 );
d = o2*Q32*ones(N3,1);
SINR1=0;
SINR2=0;
SINR3=0;
R = str2num(get(handles.edit11,'String'));
currentSINR=zeros(1,numOfFemtocells);
target_SINR = str2double(get(handles.edit5,'String'));
coordVectors = get(handles.figure1, 'UserData');
for i=1:numOfFemtocells
for j=1:N1
currentSINR = findRangeSINR(handles);
SINR(j)=target_SINR/currentSINR(i);
SINR1= SINR(j) ;
%currentSINR(j) = target_SINR/findRangeSINR(handles);
end
for k=1:N2
currentSINR = findRangeSINR(handles);
SINR(k)=target_SINR/currentSINR(k);
SINR1= SINR(k) ;
end
for l=1:N3
currentSINR = findRangeSINR(handles);
SINR(l)=target_SINR/currentSINR(l);
SINR1= SINR(l) ;
end
SINRp1=SINR1;
SINRp2=SINR2;
SINRp3=SINR3;
% SINRp1(j)=0;
% SINRp2(k)=0;
% SINRp3(l)=0;
for j=1:N1
for k=1:N2
for l=1:N3
if (SINRp1(j)> SINRp1(j-1) & SINRp2(k)> SINRp2(k-1)& SINRp3(l)> SINRp3(l-1))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
else if (SINRp1(j+1)> SINRp1(j) & SINRp2(k+1)> SINRp2(k))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))*D;
else if(SINRp1(j+1)> SINRp1(j))
Pfemto(i)=P0+(N1*o1)+sum(a(1:N21))*D;
else
Pfemto(i)=Pfemto(i);
end
end
end
end
end
end
end
end
You have for j=1:N1 so j starts at 1. You have SINRp1(j)> SINRp1(j-1) so on the first round that compares SINRp1(1)>SINRp1(1-1) which is SINRp1(1)>SINRp1(0) . But 0 is an index before the beginning of the array.
Thanks. I modifie my code, No errors but i still have a problem. When i simulate i have SINR: -lnf dB( false value). how can i solve this problem.
This is my code:
function [Pmacro Pfemto] = UAQP_power_control_method(handles)
Pmacro_dbm = str2double(get(handles.edit1,'String'));
Pmacro = (10.^(Pmacro_dbm / 10)) / 1000;
Pfemto_max_dbm = str2double(get(handles.edit2,'String'));
Pfemto_max = (10.^(Pfemto_max_dbm / 10)) / 1000;
Pfemto_def_dbm = str2double(get(handles.edit4,'String'));
Pfemto_def = (10.^(Pfemto_def_dbm / 10)) / 1000;
target_SINR = str2double(get(handles.edit5,'String'));
coordVectors = get(handles.figure1, 'UserData');
%numOfFemtocells = min(size(coordVectors.femt_x, 2), size(coordVectors.femt_y, 2));
numOfFemtocells = str2num(get(handles.edit20,'String'));
Pfemto_init = ones(1, numOfFemtocells)*Pfemto_def;
pow_default = str2num(get(handles.edit13,'String'));
coordVectors.powFemto = (ones(1, numOfFemtocells))*(10^(pow_default / 10)) / 1000;
Pfemto_last = coordVectors.powFemto;
Pfemto=zeros(1,numOfFemtocells);
N21 = str2double(get(handles.edit15,'String'));
N31 = str2double(get(handles.edit35,'String'));
N1=str2num(get(handles.edit47,'String'));
N2=str2num(get(handles.edit18,'String'));
N3=str2num(get(handles.edit19,'String'));
coordVectors = get(handles.figure1, 'UserData');
numOfFemtocells = str2num(get(handles.edit20,'String'));
%numOfFemtocells = handles.edit20;
numOfFemtousers = handles.edit11;
numOfMacrocells = 1;
P0=10;
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 = o2*Q21*ones(N2,1);
b = o2*Q22*ones(N2,1 );
c = o2*Q31*ones(N3,1 );
d = o2*Q32*ones(N3,1);
SINR1=0;
SINR2=0;
SINR3=0;
R = str2num(get(handles.edit11,'String'));
currentSINR=zeros(1,numOfFemtocells);
target_SINR = str2double(get(handles.edit5,'String'));
coordVectors = get(handles.figure1, 'UserData');
P1=Pfemto;
P2=P0+(N1*o1)+sum(a(1:N2))+(sum(c(1:N3))*D);
SINRp11=0;
SINRp12=0;
SINRp21=0;
SINRp22=0;
SINRp31=0;
SINRp32=0;
SINR11=0;
SINR12=0;
SINR21=0;
SINR22=0;
SINR31=0;
SINR32=0;
for i=1:numOfFemtocells
for j=1:N1
coordVectors.powFemto = P1;
set(handles.figure1, 'UserData', coordVectors);
SINR11=findRangeSINR(handles);
coordVectors.powFemto = P2;
set(handles.figure1, 'UserData', coordVectors);
SINR21 = findRangeSINR(handles);
end
SINRp11=sum( SINR11/N1);
SINRp12=sum(SINR21/N1);
for k=1:N2
coordVectors.powFemto = P1;
set(handles.figure1, 'UserData', coordVectors);
SINR21=findRangeSINR(handles);
coordVectors.powFemto = P2;
set(handles.figure1, 'UserData', coordVectors);
SINR22 = findRangeSINR(handles);
end
SINRp21=sum(SINR21/N2);
SINRp22=sum(SINR22/N2);
for l=1:N3
coordVectors.powFemto = P1;
set(handles.figure1, 'UserData', coordVectors);
SINR1=findRangeSINR(handles);
coordVectors.powFemto = P2;
set(handles.figure1, 'UserData', coordVectors);
SINR2 = findRangeSINR(handles);
end
SINRp31=sum(SINR1/N3);
SINRp32=sum(SINR2/N3);
end
for i=1:numOfFemtocells
if (SINRp11> SINRp12 && SINRp21> SINRp22&& SINRp31> SINRp32)
Pfemto=P2;
else if (SINRp11> SINRp12 && SINRp21> SINRp22);
Pfemto(i)=P0+(N1*o1)+sum(a(1:N2))*D;
else if (SINRp11> SINRp12)
Pfemto(i)=P0+(N1*o1)+sum(a(1:N21))*D;
else
Pfemto=P1;
end
end
end
end
end
If your findRangeSINR needs to look at the handles each time and you are sending it new data by setting the UserData field, then why not just pass it the data directly instead of going through the handles structure?

Sign in to comment.

More Answers (0)

Categories

Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!