2012-03-15 44 views
0

嗨即时通讯在MatLab中创建线性同余生成器时遇到困难,那些我在网上找到的工作与我的完全不同。那么即时试图打印m和a(相对素数,明显是一个大数字)的值,并检查循环何时已满。我知道所有数学的东西,即时我应该知道,我已经习惯了matlab,并且很难为我实现这个。我的计划是这样的:LCG在MatLab中的执行

M = []; 
    for m = 100:10000; 
     M(m) = m; 

    A = []; 
    for a = 2:(m-1); 
    A(a) = a; 
    B = []; 
    R = []; 
    for n = 1:1000; 
    R(n) = n; 
    B(n) = A(a) * n; 
    K = []; 
      K(n)=mod(B(n),M(m)); 
    n=n+1; 
    a=a+1; 
    m=m+1; 
    if K(n) == R(n) 
     print (m) 
     print (a) 
     print ('the cycle is done') 
    end 

    end 
end 
end 

也即时通讯不太熟悉用Matlab这样的IM可能创建阵列走错了路。提前致谢。

+0

那么你的输出究竟如何不符合你的期望呢?你能详细说明吗?它可以运行吗? – Phonon 2012-03-15 17:49:30

+0

它没有运行,我知道我想要做什么,我不能在matlab中实现它。我想创建一个列A,M,B(它是A * n(种子))和BmodM的矩阵。然后想要将BmodM与n(种子)进行比较。如果它们相等,我需要得到M和A的所有值,如果不是n = n + 1,a = a + 1,m = m + 1。 – 2012-03-15 18:15:38

回答

0

那么你不是真的在那里问一个问题。这里有一些建议给你:

1)预先分配矩阵:M =零(9900,1),A =零(9998,1),当你循环时,你会得到更快的结果,甚至更好M = 100:10000直接工作,如果你想放入的值是如此简单。 2)你不需要做a = a + 1,for循环会自动为你做(除非是因为另一个原因,我不知道)。

+0

一切看起来不错? – 2012-03-15 20:43:31

+0

R =零(10000,10000); n =零(5000,1); M =零(5000,1);对于m = 150:5000而言为 ; M(m)= m; a =零(m,1);对于n = 1:5000为 ; R(n)= n; B =零(10000,1);对于a = 2:m-1,为 ; B =(a * R); K =零(10000,1); K(B,M)= mod(B,M); 如果K(B,M)==滚装 打印(M) 打印的(a) 打印( '循环完成') 端 端 端 端 – 2012-03-15 21:01:51