在Python中重新创建RNG

时间:2017-05-09 16:51:44

标签: python matlab random

我正在尝试重新创建在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中是不可能完成的,或者我是不是只是为了疯狂,但我拼命地需要一些建议。任何见解都非常感谢。

1 个答案:

答案 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