2015-10-26 3 views

ответ

2

Существует несколько способов сделать это.

Способ № 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); 
+0

# 7 не гарантируется для работы при больших 'n'. 'cos (9e7 * pi) -1' не равно нулю. –

+0

@MohsenNosratinia - правда. Однако, если вы видите диапазон генерируемых значений, это дает случайные целые числа 1 и 2 ... и никогда большие значения 'N'. Однако существуют значения «N» 1 или 2 .... поэтому 'cos (pi)' и 'cos (2 * pi)' четко определено. Пожалуйста, перечитайте код и убедитесь, что это сообщение отображается. Если нет, скажите мне, как его перефразировать. – rayryeng

+0

о, это правильно. Я пропустил это, –

3

Один вкладыш для N элементов:

2*randi(2, 1, N) - 3 

или, может быть, понятнее метод

(-1).^randi(2, 1, N) 
+0

Второй метод довольно умный. – rayryeng

+0

2-й способ настолько умный !! – yayaya

Смежные вопросы