乘同余法
概述
该方法用于产生(0,1]之间的随机数,计算公式如下:
x
i
=
(
A
x
i
−
1
)
(
M
o
d
M
)
r
i
=
x
i
/
M
x_i=(Ax_{i-1})(Mod M)\\ r_i=x_i/M
xi=(Axi−1)(ModM)ri=xi/M
实现
c++实现代码如下:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n;
cout<<"伪随机数个数:"<<endl;
cin>>n;
int number[n];
double pse_number[n];
number[0]=1;
int A=3,M=16;
for(int i=1;i<n;i++)
{
number[i]=(A*number[i-1])%M;
}
for(int i=0;i<n;i++)
{
pse_number[i]=float(number[i])/float(M);
}
for(int i=0;i<n;i++)
{
cout<<pse_number[i]<<endl;
}
return 0;
}
matlab代码如下:
//randon.m
function [xx,rr]=randon(x,r,A,M,n)
x(1)=1;
for i = 1:n
x(i+1)=mod((x(i)*A),M);
end
for i = 1:n
r(i)=x(i)/M;
end
//主程序
x=[]
r=[]
[x,r]=randon(x,r,1001,999988,1000)
plot(r)
检验
A=101 M=97 n=1000
A=1001 M=999988 n=1000