Существует несколько способов сделать это.
Способ № 1 - Выбор из небольшого массива
Вы можете создать небольшой массив, которые состоят из [-1 1]
, а затем создать случайные целые числа, которые содержат 1 или 2 и индекс в этой последовательности:
N = 10; %// Number of values in the array
%// Generate random indices
ind = randi(2, N, 1);
%// Create small array
arr = [-1; 1];
%// Get final array
out = arr(ind);
Способ № 2 - Генерировать значения из равномерного случайного распределения и порога
Вы также можете генерировать случайные равномерно распределенные значения с плавающей запятой и все, что больше 0,5, вы можете установить 1, а что угодно меньше может установить значение -1.
N = 10; %// Number of values in the array
%// Generate randomly distributed floating point values
out = rand(N, 1);
%// Find those locations that are >= 0.5
ind = out >= 0.5;
%// Set the right locations to +1/-1
out(ind) = 1;
out(~ind) = -1;
Способ № 3 - Использование тригонометрии
Вы можете использовать тот факт, что cos(n*pi)
может либо дать 1 или -1, в зависимости от того, какое значение, что n
покуда n
целое. Нечетные значения дают -1, а даже значения производят 1. Таким образом, вы можете создать набор случайных чисел, которые либо 1 или 2, и вычислить cos(n*pi)
:
N = 10; %// Number of values in the array
%// Generate random integers
ind = randi(2, N, 1);
%// Compute sequence via trigonometry
out = cos(ind*pi);
# 7 не гарантируется для работы при больших 'n'. 'cos (9e7 * pi) -1' не равно нулю. –
@MohsenNosratinia - правда. Однако, если вы видите диапазон генерируемых значений, это дает случайные целые числа 1 и 2 ... и никогда большие значения 'N'. Однако существуют значения «N» 1 или 2 .... поэтому 'cos (pi)' и 'cos (2 * pi)' четко определено. Пожалуйста, перечитайте код и убедитесь, что это сообщение отображается. Если нет, скажите мне, как его перефразировать. – rayryeng
о, это правильно. Я пропустил это, –