Matlab:帮助进行模运算

Matlab : Help in modulus operation

我正在尝试实现一个具有等式 Bernoulli Shift Map

的映射/函数

x_n+1 = 2* x_n mod 1

此映射的输出将是二进制数,即 0/1。

因此,我使用 rand 生成了第一个样本 x_1。以下是代码。问题是我得到的是实数。当使用数字计算器时,我可以得到二进制,而当使用 Matlab 时,我得到实数。请帮助我出错的地方。谢谢。

>> x = rand();
>> x

x =

    0.1647

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

y =

    0.3295

二元变换好像是从[0,1)连续到[0,1)连续的变换。如果您尝试实现二元映射,我认为您的测试代码没有任何问题。您应该期待 [0,1)

中的输出

我误解了你的问题,因为我关注的是你假设输出应该是二进制 [01],这是错误的。

要重现您提供的 link 中的二元变换输出,您的代码工作正常(对于 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

注意输出不必是binary,它必须是between 01.

在整数的情况下,mod(WhateverInteger,1) 的结果始终是 0,但在 Real 数字的情况下(这就是您使用的此处),mod(AnyRealNumber,1) 的结果将是小数部分,因此是 01 之间的数字。 (1 在数学上被排除,0 可以通过 mod(x,1) 操作,但在你的系列中,这意味着所有连续的项也将为零)。