我正在尝试重新创建在Matlab中使用的乘法同余算法(找到它here,第9.2节,阅读它以获得一些上下文)
基本上,我有4个变量
a = 13
c = 0
m = 31
最后一个,我可以格式化代码,因为它打破了下标:
X <子> 0 子> = 1
有了这四个,我想重现这样的事情:
x k + 1 = a *
x k + c mod m
到目前为止,我已经:
a = 13
c = 0
m = 31
base = 2 # Does not work with 0 for some reason
x = int(x='1', base=base)
for i in range(8):
rand = a * x + c % m
base += 1
x = int(x='1', base=base)
print(rand)
我的输出是:
13, 13, 13, 13, 13, 13, 13, 13...
尽管如此,根据该文件,应该是:
1, 13, 14, 27, 10, 6, 16, 22...
所以我不确定我是否完全误解了这个问题,或者我想要完成的事情在Python中是不可能完成的,或者我是不是只是为了疯狂,但我拼命地需要一些建议。任何见解都非常感谢。
答案 0 :(得分:2)
看起来问题是公式应该是
x k + 1 =(a * x k + c)mod m
从文档中找不到,但如果你使用c mod m,那么每次都会执行相同的操作(0mod31)。这段python代码按原样运行:
a = 13
c = 0
m = 31
x = [1]
for i in range(1, 9):
x.append( (a * x[i-1] + c)%m )
print x[i],
13 14 27 10 6 16 22 7