Matlab:帮助进行模数运算

时间:2015-05-08 16:40:43

标签: matlab modulus

我正在尝试实现具有等式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

2 个答案:

答案 0 :(得分:2)

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

中的输出

答案 1 :(得分:1)

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

要像您提供的链接一样重现二元变换的输出,您的代码工作正常(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}}将是小数部分,因此是0mod(AnyRealNumber,1)之间的数字。 (0在数学上被排除,1操作可以1,但对于你的系列,这意味着所有连续的术语也将为零。)