how to reduce the use of repeated for loops as i explained below???

조회 수: 2 (최근 30일)
M.Prasanna kumar
M.Prasanna kumar 2019년 8월 22일
댓글: M.Prasanna kumar 2019년 8월 23일
when SS =1 , KK loop should not take the value from 1 to 3
when SS = 2:23 , KK loop should not run for SS-1:SS+1
when SS =24 , KK loop should not take the value from 22 to 24
to calculate the variable "dist" i used three sets of for loops. is it possible to reduce
I am able to get the answer but i dont want to repeat the same code for three times. how to resolve the problem???
for ss = 1
for kk = setdiff(1:no_receivers+1,1:3)
for ii = 1:no_gridsx
dist(ii,1:250,kk,ss) = sqrt((apert_x(1,ss)-X(ii,1:250)).^2+(apert_y(1,ss)-Y(ii,1:250)).^2)+sqrt((X(ii,1:250)-apert_x(1,kk)).^2+(Y(ii,1:250)-apert_y(1,kk)).^2);
end
end
end
for ss = 2:23
for kk = setdiff(1:no_receivers+1,ss-1:ss+1)
for ii = 1:no_gridsx
dist(ii,1:250,kk,ss) = sqrt((apert_x(1,ss)-X(ii,1:250)).^2+(apert_y(1,ss)-Y(ii,1:250)).^2)+sqrt((X(ii,1:250)-apert_x(1,kk)).^2+(Y(ii,1:250)-apert_y(1,kk)).^2);
end
end
end
for ss = 24
for kk = setdiff(1:no_receivers+1,22:24)
for ii = 1:no_gridsx
dist(ii,1:250,kk,ss) = sqrt((apert_x(1,ss)-X(ii,1:250)).^2+(apert_y(1,ss)-Y(ii,1:250)).^2)+sqrt((X(ii,1:250)-apert_x(1,kk)).^2+(Y(ii,1:250)-apert_y(1,kk)).^2);
end
end
end

채택된 답변

Rik
Rik 2019년 8월 22일
Use a temporary variable to adapt your range. The code below show one such approach.
%intitialize for testing
no_gridsx=10;
no_receivers=26;
ss_max=24;
dist=NaN(no_gridsx,250,no_receivers+1,ss_max);
for ss = 1:ss_max
skips=ss-1:ss+1;
if ss==1%correct for edge cases
skips=skips+1;
elseif ss==ss_max
skips=skips-1;
end
for kk = setdiff(1:no_receivers+1,skips)
for ii = 1:no_gridsx
dist(ii,1:250,kk,ss) = ...
sqrt((apert_x(1,ss)-X(ii,1:250)).^2+(apert_y(1,ss)-Y(ii,1:250)).^2) ...
+sqrt((X(ii,1:250)-apert_x(1,kk)).^2+(Y(ii,1:250)-apert_y(1,kk)).^2);
end
end
end
  댓글 수: 4
Stephen23
Stephen23 2019년 8월 23일
편집: Stephen23 2019년 8월 23일
"why did you subtract ss==24 & add ss==1 , what is the logic behind this"
(ss-1:ss+1)-(ss==24)+(ss==1)
%^^^^^^^^^^ creates a vector, exactly like you did
% ^^^^^^^^^ when ss==24 subtracts 1 from the vector
% ^^^^^^^^ when ss==1 adds 1 to the vector
With setdiff this provides exactly the vectors described on the first three lines of your question.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by