0

嗨,我在 MatLab 中创建线性同余生成器时遇到了麻烦,我发现在线工作与我的完全不同。然后我试图打印 m 和 a 的值(相对素数,m 显然是一个大素数)并检查循环何时满。我知道所有的数学知识,我已经习惯了 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 也不太熟悉,所以我可能以错误的方式创建数组。提前致谢。

4

1 回答 1

0

好吧,你并不是真的在那里问问题。这里给你一些建议:

1) 预先分配矩阵:M = zeros(9900,1), A = zeros(9998,1),当你循环时,你会得到更快的结果,或者如果你的值直接工作,甚至更好的 M = 100:10000想放进去就这么简单。

2)您不需要执行 a = a+1,for 循环会自动为您执行此操作(除非它出于其他我不知道的原因而存在)。

于 2012-03-15T19:15:53.400 回答