2015-05-08 3 views
0

Я пытаюсь реализовать отображение/функции, которая имеет уравнение Bernoulli Shift MapMatlab: Помощь в работе модуля

x_n + 1 = 2 * x_n мод 1

Выход этой карты будет двоичным числом который будет либо 0/1.

Итак, я сгенерировал первый образец x_1, используя rand. Ниже приведен код. Проблема в том, что я получаю реальные цифры. При использовании цифрового калькулятора я могу получить двоичный файл, тогда как при использовании Matlab я получаю реальные числа. Пожалуйста, помогите, где я ошибаюсь. Спасибо.

>> x = rand(); 
>> x 

x = 

    0.1647 

>> y = mod(2* x,1) 

y = 

    0.3295 
+1

использовать 'x = randi ([0 1])', чтобы получить целое число от 0 до 1, и имейте в виду, что 'mod (x, 1)' будет ** всегда ** возвращать 0 (в остатке нет деление на 1). Вы можете использовать 'y = mod (2 * x, 2)' – Hoki

ответ

1

Я неправильно понял ваш вопрос, потому что я сосредоточился на предположении, что выход должен быть двоичным [0 или 1], что неверно.

Чтобы воспроизвести выход двоичном преобразования, как в ссылке вы предоставили, ваш код работает отлично (1 значение), и вы можете использовать эту функцию для вычисления N условия (при условии, начальный срок x0):

function x = dyadic(x0,n) 

x = zeros(n,1) ; %// preallocate output vector 
x(1) = x0 ;  %// assign first term 

for k=2:n 
    x(k) = mod(2*x(k-1) , 1) ; %// calculate all terms of the serie 
end 

Обратите внимание, что выход не должен быть двоичную, он должен быть между0 и 1.

В случае целых чисел, результат mod(WhateverInteger,1) всегда 0, но в случае реальных чисел (который является то, что вы используете здесь), результат mod(AnyRealNumber,1) будет дробная часть, поэтому число между 0 и 1. (1 не учитывается при математической схеме, 0 может выполняться операцией mod(x,1), но в случае вашей серии это означает, что все последующие члены тоже будут равны нулю).

+0

Поведение по умолчанию round - это MATLAB, в точности равное жесткому пороговому уравнению, используемому в статье. – hiandbaii

2

Диадическое преобразование, по-видимому, является преобразованием из [0,1) непрерывным до [0,1) непрерывным. Я не вижу ничего плохого в вашем тестовом коде, если вы пытаетесь реализовать диадическое сопоставление. Вы должны ожидать выхода в [0,1]

+2

На основе того, как я читаю уравнение. Кажется, что y в вашем исходном коде действительно x (k + 1). После вычисления x (k + 1). y = round (x (k + 1)). Это будет удовлетворять уравнению 3. – hiandbaii

+0

Вы правы в том, что переменная y равна x (k + 1). По существу, выход Eq (3) будет вещественным числом в диапазоне [0,1]. Будет ли округление операции эквивалентным порогу с использованием 0,5 для получения двоичных чисел? Разве не будет разницы в значениях? – SKM

+0

Кроме того, Хоки говорит, что когда я делаю x (k + 1) = mod (2 * x, 1), код всегда будет возвращать 0, так как нет остатка в делении на 1. Не могли бы вы прояснить, что такое фактическое код/​​уравнение для генерации x (k + 1), а затем как преобразовать его в 0 и 1? – SKM