Даже без умного наблюдения , которое gnovice сделал , код легко упростить.
Внутренний цикл:
for j = i+1:NRoads
x = rand;
if ismember(j, [i+1, i+CitySize, i+CitySize+1]) && x < PCross
Adj(i, j) = 1;
end
end
Зацикливается на всех j
затем видит, является ли j
одним из 3 заданных значений.Почему бы просто не зациклить только эти три значения?
for j = [i+1, i+CitySize, i+CitySize+1]
x = rand;
if j <= NRoads && x < PCross
Adj(i, j) = 1;
end
end
Это, конечно, больше не нуждается в цикле:
j = [i+1, i+CitySize, i+CitySize+1];
x = rand(1,3);
j = j(j <= NRoads & x < PCross); % note elementwise &, not &&
Adj(i, j) = 1;