I want to reduce the repeated for loops as i explained below. any help??

1 回表示 (過去 30 日間)
M.Prasanna kumar
M.Prasanna kumar 2019 年 8 月 22 日
回答済み: Guillaume 2019 年 8 月 22 日
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
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

採用された回答

Guillaume
Guillaume 2019 年 8 月 22 日
One way:
kk_indices = {setdiff(1:no_receivers+1,1:3);
setdiff(1:no_receivers+1,ss-1:ss+1);
setdiff(1:no_receivers+1,22:24)};
for ss = 1:24
kk_s = kk_indices{(ss > 1) + (ss > 23) + 1}; %(ss>1) + (ss>23) + 1 will be 1 for ss = 1, 2 for ss = 2:23 and 3 for ss = 24
for kk = kk_s
%your ii loop here
end
end
Note that the
for s = 1
%some code
end
you wrote is pointless. It is the same as the more straighforward
ss = 1
%some code

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGet Started with MATLAB についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by