Строка
for i = 1:500
присваивает столбец выражения переменной на каждой итерации.Поскольку 1:500
является вектором строки, i
будет принимать скалярное значение на каждой итерации.Если бы это была матрица MxN, i
был бы столбцом Mx1 на каждом шаге.Количество столбцов определяет количество итераций, независимо от того, что вы делаете с переменной цикла.
Вы можете делать все, что захотите, с помощью i
, в том числе игнорировать его.Фактически вы можете даже присвоить ему материал, но значение на следующей итерации будет сброшено до того, что нужно циклу.
Назначение U = [];
до и в цикле не требуется.Он создает новый пустой массив, но затем сразу отбрасывает его, когда вы делаете U = rand(1, 100);
. Это назначение само по себе достаточно, чтобы отбросить все, что было сохранено под именем U
.
Расширение среднего значения при первой установкеэто с Average = [];
, а затем обновление с Average = [Average mean(U)];
не рекомендуется.Делать это таким образом неоправданно дорого, потому что каждый раз вам приходится перераспределять память для хранения массива размером i
.Лучший вариант - предварительно выделить все 500 элементов и использовать i
для сохранения нужного значения в правильном индексе.Что-то вроде
Average = zeros(1, 500);
for i = 1:500
Average(i) = mean(rand(1, 100))
end
Но, конечно, как и комментарий Криса Луенго , подразумевается, что MATLAB это все о векторизации.Это не часто, что вам действительно нужен цикл.Определенную операцию, которую вы ищете, можно выполнить, сгенерировав все нужные сэмплы в одну матрицу 100x500 и усреднив по первому измерению.
Average = mean(rand(100, 500), 1)