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

1 view (last 30 days)
M.Prasanna kumar on 22 Aug 2019
Commented: M.Prasanna kumar on 23 Aug 2019
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 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 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 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
##### 2 CommentsShowHide 1 older comment
M.Prasanna kumar on 22 Aug 2019
thank you image analyst

Rik on 22 Aug 2019
Use a temporary variable to adapt your range. The code below show one such approach.
%intitialize for testing
no_gridsx=10;
ss_max=24;
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 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
M.Prasanna kumar on 23 Aug 2019
thank you very much sir

### Community Treasure Hunt

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

Start Hunting!

Translated by