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)
中的输出
我误解了你的问题,因为我关注的是你假设输出应该是二进制 [0
或 1
],这是错误的。
要重现您提供的 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 0
和 1
.
在整数的情况下,mod(WhateverInteger,1)
的结果始终是 0
,但在 Real 数字的情况下(这就是您使用的此处),mod(AnyRealNumber,1)
的结果将是小数部分,因此是 0
和 1
之间的数字。 (1
在数学上被排除,0
可以通过 mod(x,1)
操作,但在你的系列中,这意味着所有连续的项也将为零)。
我正在尝试实现一个具有等式 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)
中的输出我误解了你的问题,因为我关注的是你假设输出应该是二进制 [0
或 1
],这是错误的。
要重现您提供的 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 0
和 1
.
在整数的情况下,mod(WhateverInteger,1)
的结果始终是 0
,但在 Real 数字的情况下(这就是您使用的此处),mod(AnyRealNumber,1)
的结果将是小数部分,因此是 0
和 1
之间的数字。 (1
在数学上被排除,0
可以通过 mod(x,1)
操作,但在你的系列中,这意味着所有连续的项也将为零)。