我正在尝试实现具有等式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 :(得分:2)
二元变换似乎是从[0,1]连续到[0,1]连续的变换。如果您尝试实现二元映射,我认为您的测试代码没有任何问题。您应该期待[0,1)
中的输出答案 1 :(得分:1)
我误解了你的问题,因为我专注于假设输出应该是二进制[0
或1
],这是错误的。
要像您提供的链接一样重现二元变换的输出,您的代码工作正常(1个值),您可以使用此函数计算N
个术语(假设起始术语{{1 }}):
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
和{{1}之间的 }。
对于整数,0
的结果始终为1
,但对于 Real 数字(这是您在此处使用的),结果mod(WhateverInteger,1)
的{{1}}将是小数部分,因此是0
和mod(AnyRealNumber,1)
之间的数字。 (0
在数学上被排除,1
操作可以1
,但对于你的系列,这意味着所有连续的术语也将为零。)