i want to ask how can i store the value of d_eb for each iteration of loop

1 view (last 30 days)
I am stuck in one thing if you could help please. how can i store deb mentoined by bold letters in the end for each iteration. code: %% Large intelligent reflecting surfaces X3=[-7.655; -6.189; -3.251; 2.926; 6.534; 10.79; 5.203; -4.465; 1.42; -8.66; -0.8748; 6.534] ; Y3=[1.393; 10.42; 6.639; 5.821; 8.425; 2.924; 1.139; 0.7508; -7.917; -6.928; -10.01; -7.03]; plot(X3,Y3,'r*','MarkerSize', 10, 'Linewidth', 2); %legend('','Base stations','Users','Intelligent Reflecting Surfaces') hold on l=0.03; p=0; %% loop for the elements of irs x_e = zeros(10, 10, 12); y_e = zeros(10, 10, 12);
for i=1:L for j=1:elements for k=1:elements x3(j,k) = X3(i,1) + p; % X coordinate of an element of IRS for plotting y3(j,k) = Y3(i,1); % Y coordinate of an element of IRS for plotting p=k*l; x_e(j,k,i) = x3(j,k); y_e(j,k,i)= y3(j,k); end p=0; Y3(i,1) = Y3(i,1) + l; end plot(x3,y3,'bo') end for s=1:4 for n=1:12 for p=1:10 for r=1:10 d_eb=sqrt(((x_e(p,r,n)-x_b(s,1))^2)+((y_e(p,r,n)-y_b(s,1))^2)); % distance end
end
end
end
thanks

Accepted Answer

Voss
Voss on 16 Dec 2021
Case 1: If you want one d_eb value for each (x_e, y_e) point, you can initialize d_eb to be the same size as x_e and store each element of d_eb as it is calculated:
x_e = zeros(10, 10, 12);
y_e = zeros(10, 10, 12);
d_eb = zeros(10, 10, 12);
for s=4
for i=1:L
for j=1:elements
for k=1:elements
x3(j,k) = X3(i,1) + p; % X coordinate of an element of IRS for plotting
y3(j,k) = Y3(i,1); % Y coordinate of an element of IRS for plotting
p=k*l;
x_e(j,k,i) = x3(j,k);
y_e(j,k,i)= y3(j,k);
end
p=0;
Y3(i,1) = Y3(i,1) + l;
end
plot(x3,y3,'bo')
end
for n=1:12
for p=1:10
for r=1:10
d_eb(p,r,n)=sqrt(((x_e(p,r,n)-x_b(s,1))^2)+((y_e(p,r,n)-y_b(s,1))^2)); % distance
end
end
end
end
Case 2: If you want to keep d_eb values for each value of s as well (currently s is always only 4), you can initialize d_eb to be a 4-D matrix with the fourth dimension representing the values for each value of s:
x_e = zeros(10, 10, 12);
y_e = zeros(10, 10, 12);
s_all = 4;
NS = numel(s_all);
d_eb = zeros(10, 10, 12, NS);
for s=1:NS
for i=1:L
for j=1:elements
for k=1:elements
x3(j,k) = X3(i,1) + p; % X coordinate of an element of IRS for plotting
y3(j,k) = Y3(i,1); % Y coordinate of an element of IRS for plotting
p=k*l;
x_e(j,k,i) = x3(j,k);
y_e(j,k,i)= y3(j,k);
end
p=0;
Y3(i,1) = Y3(i,1) + l;
end
plot(x3,y3,'bo')
end
for n=1:12
for p=1:10
for r=1:10
d_eb(p,r,n,s)=sqrt(((x_e(p,r,n)-x_b(s_all(s),1))^2)+((y_e(p,r,n)-y_b(s_all(s),1))^2)); % distance
end
end
end
end
Note that in this case I redefined s to be an index into a new vector called s_all, which contains all values of s to be used, and I modified the indexing into x_b and y_b accordingly.
In either case, you can avoid the last triple for loop over n, p, r by using element-wise operations (.^ instead of ^) in your distance calculation. For example, in Case 1, this:
for n=1:12
for p=1:10
for r=1:10
d_eb(p,r,n)=sqrt(((x_e(p,r,n)-x_b(s,1))^2)+((y_e(p,r,n)-y_b(s,1))^2)); % distance
end
end
end
Is the same as this:
d_eb = sqrt(((x_e-x_b(s,1)).^2)+((y_e-y_b(s,1)).^2)); % distance
And in Case 2, this:
for n=1:12
for p=1:10
for r=1:10
d_eb(p,r,n,s)=sqrt(((x_e(p,r,n)-x_b(s_all(s),1))^2)+((y_e(p,r,n)-y_b(s_all(s),1))^2)); % distance
end
end
end
is the same as this:
d_eb(:,:,:,s) = sqrt(((x_e-x_b(s_all(s),1)).^2)+((y_e-y_b(s_all(s),1)).^2)); % distance

More Answers (1)

Torsten
Torsten on 16 Dec 2021
d_eb = sqrt((x_e - x_b(4,1)).^2 + (y_e - y_b(4,1)).^2); % distance
without any loops.

Categories

Find more on Programming 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!