Причина, почему ваш код не работает из-за вашего while
состояния. В частности, обратите внимание на логику внутри вашего while
заявления:
while isempty(result)==1
Цикл while
будет выполняться только если result
пуст. Это не так, как result = X
в начале вашего кода. Таким образом, цикл while
никогда не выполняется.
Учитывая ваше объяснение в ваш комментарий ниже, вы хотите, чтобы сгенерировать случайное число, и каждый раз, когда вы это делаете, вы хотите проверить, если результат больше, чем 2 или нет. Если это так, добавьте 5 к этому элементу и добавьте это как элемент в новый столбец. Если нет, просто замените это на 0.
Я бы предложил использовать цикл for
вместо цикла while
, потому что вы, вероятно, хотите, чтобы матрица перестала расти после определенной точки.
Таким образом, сделать что-то вроде этого, вместо:
y = round(rand*10);
result = [];
x = randi([-5,5],1,y);
for idx = 1 : y
if x(idx) > 2
result = [result [x(idx); x(idx)+5]];
else
result = [result [x(idx); 0]];
end
end
Что вы делаете в первую очередь это вы определить случайное число, которое определяет предел, сколько случайных чисел вы хотите создать. Затем мы объявляем пустой массив, который сохранит наш результат. После этого мы генерируем наши случайные числа, затем мы используем цикл for
для циклического перехода по каждому элементу x
и проверьте, каково их значение. Если значение равно > 2
, мы добавим это число в нашу двумерную матрицу, где ее значение добавляется 5 к новому столбцу. Если нет, то мы просто установите значение 0.
Когда я сделал бег с этим, это то, что я получил за result
:
result =
5 2 -5 4 5
10 0 0 9 10
Однако, вы можете легко сделать это без for
и сделать это полностью векторизованным. Вы можете просто заменить приведенный выше код с:
y = round(rand*10);
x = randi([-5,5],1,y);
%// NEW
result = [x; zeros(1,y)];
ind = x > 2;
result(2,ind) = result(1,ind) + 5;
Вышеприведенный код делает то, что мы инициализируем result
быть 2D массив уже, где первый ряд состоит из тех чисел, сгенерированных случайным образом, а вторая строка имеет пучок нулей. Мы ищем произвольно генерируемые значения > 2
, затем используем эти позиции для обновления второй строки, где мы берем те значения, которые удовлетворяют этому условию, и добавляют 5 к каждому значению. Затем мы сохраняем результаты во второй строке. Если вы запустите вышеуказанный код, вы сможете получить те же результаты.
Вы знаете, что полуколоны без вывода справа? – chris
Да, это только я подавляю выход.в командной строке я не получаю двухколонный вектор, вместо этого я просто возвращаю те же случайные значения X, что и вектор-столбец, но мне это нужно, но с добавлением столбца с результатами. – Crisp
Я не знаю о MatLab, но 'X = x ';' имеет на нем одну кавычку. – Rafael