Matlab:模运算的帮助
我正在尝试实现一个具有以下等式的映射/函数 x_n+1=2*x_n模1 此映射的输出将是一个二进制数,该二进制数为0/1 因此,我使用rand生成了第一个样本x_1。下面是代码。问题是我得到的是真实的数字。使用数字计算器时,我可以得到二进制,而使用Matlab时,我得到的是实数。请帮我找出哪里出了问题。多谢各位Matlab:模运算的帮助,matlab,modulus,Matlab,Modulus,我正在尝试实现一个具有以下等式的映射/函数 x_n+1=2*x_n模1 此映射的输出将是一个二进制数,该二进制数为0/1 因此,我使用rand生成了第一个样本x_1。下面是代码。问题是我得到的是真实的数字。使用数字计算器时,我可以得到二进制,而使用Matlab时,我得到的是实数。请帮我找出哪里出了问题。多谢各位 >> x = rand(); >> x x = 0.1647 >> y = mod(2* x,1) y = 0.3295
>> x = rand();
>> x
x =
0.1647
>> y = mod(2* x,1)
y =
0.3295
二元变换似乎是从[0,1)连续到[0,1)连续的变换。如果您试图实现二元映射,我看您的测试代码没有任何问题。您应该期待[0,1]中的输出。二元变换似乎是从[0,1)连续到[0,1]连续的变换[0,1)连续。如果您试图实现并矢映射,我看您的测试代码没有任何错误。您应该期待[0,1]中的输出。并矢变换似乎是从[0,1)连续到[0,1)连续。如果您试图实现并矢映射,我看您的测试代码没有任何错误。您应该期待[0,1]中的输出。并矢变换似乎是从[0,1)连续到[0,1)连续。如果您试图实现并矢映射,我看您的测试代码没有任何错误。您应该期望[0,1]中的输出我误解了您的问题,因为我集中于您的假设,即输出应该是二进制的[
0
或1
],这是错误的
要像在您提供的链接中一样再现并矢变换的输出,您的代码工作正常(对于1个值),您可以使用此函数计算N
项(假设起始项x0
):
请注意,输出不必是二进制的,它必须介于0
和1
之间
在整数的情况下,
mod(WhateverInteger,1)
的结果总是0
,但在实数的情况下(这里使用的是实数),mod(AnyRealNumber,1)
的结果将是小数部分,因此一个介于0
和1
之间的数字。(1
在数学上被排除在外,0
可以通过mod(x,1)
操作实现,但在serie的情况下,这意味着所有的连续项也将为零)。我误解了你的问题,因为我的重点是假设你的输出应该是二进制的[0
或1
],这是错误的
要像在您提供的链接中一样再现并矢变换的输出,您的代码工作正常(对于1个值),您可以使用此函数计算N
项(假设起始项x0
):
请注意,输出不必是二进制的,它必须介于0
和1
之间
在整数的情况下,
mod(WhateverInteger,1)
的结果总是0
,但在实数的情况下(这里使用的是实数),mod(AnyRealNumber,1)
的结果将是小数部分,因此一个介于0
和1
之间的数字。(1
在数学上被排除在外,0
可以通过mod(x,1)
操作实现,但在serie的情况下,这意味着所有的连续项也将为零)。我误解了你的问题,因为我的重点是假设你的输出应该是二进制的[0
或1
],这是错误的
要像在您提供的链接中一样再现并矢变换的输出,您的代码工作正常(对于1个值),您可以使用此函数计算N
项(假设起始项x0
):
请注意,输出不必是二进制的,它必须介于0
和1
之间
在整数的情况下,
mod(WhateverInteger,1)
的结果总是0
,但在实数的情况下(这里使用的是实数),mod(AnyRealNumber,1)
的结果将是小数部分,因此一个介于0
和1
之间的数字。(1
在数学上被排除在外,0
可以通过mod(x,1)
操作实现,但在serie的情况下,这意味着所有的连续项也将为零)。我误解了你的问题,因为我的重点是假设你的输出应该是二进制的[0
或1
],这是错误的
要像在您提供的链接中一样再现并矢变换的输出,您的代码工作正常(对于1个值),您可以使用此函数计算N
项(假设起始项x0
):
请注意,输出不必是二进制的,它必须介于0
和1
之间
在整数的情况下,mod(WhateverInteger,1)
的结果总是0
,但在实数的情况下(这里使用的是实数),mod(AnyRealNumber,1)
的结果将是小数部分,因此一个介于0
和1
之间的数字。(1
在数学上被排除在外,0
可以通过mod(x,1)
操作实现,但在serie中,这意味着所有的连续项也将为零)。使用x=randi([0 1])
获得0和1之间的整数,并注意mod(x,1)
将始终返回0(1除法中没有余数)。您可能希望使用y=mod(2*x,2)
usex=randi([01])
获得0到1之间的整数,并注意mod(x,1)
将始终返回0(1除法中没有余数)。您可能希望使用y=mod(2*x,2)
usex=randi([01])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