五种常用的随机数发生器包括平方取中发生器、乘积取中发生器、线性同余发生器、常数乘子发生器和斐波那契发生器。原理可问度娘,这里不再介绍,只总结代码实现。 3、线性同余发生器 4、常数乘子发生器 5、斐波那契发生器 以上用matlab简单实现的五种随机数发生器,接下来有时间会补充组合发生器以及所生成的随机数序列的性能检验。
五种常用的随机数发生器-matlab实现
clc clear all close all % 调用函数---参数可修改 [x0,u0] = Square_mid_rand(156, 2, 20); % 定义函数 function [x u] = Square_mid_rand(x0, k, maxIter) x = []; % 初始化空矩阵 u = []; x(1) = x0; % 赋值操作,即: x0 放到向量x的第一个分量中 u(1) = x(1) / 10^(2*k); for i = 2 : maxIter % 循环 x(i) = rem(floor(x(i-1)^2 / 10^k), 10^(2*k)); % 随机数迭代发生器 u(i) = x(i) / 10^(2*k); end % 绘制图像 subplot(1,2,1); hold on; % 保持当前状态。 plot(u(3:end), '*-'); % 数据为u的第3个分量开始到最后一个分量,*标记关键点 sTitle = sprintf('平方取中随机数发生器 (x0=%d, k=%d)', x0, k); % 格式化输出字符串 title(sTitle); hold off; subplot(1,2,2); hold on; hist(u(3:end)); title('随机数直方图分布'); hold off; end
clc clear all close all % 调用函数---参数可修改 [x0, u0] = multiply_mid_rand(5167, 3729, 2, 20) % 定义函数 function [x u] = multiply_mid_rand(x0, x1, k, maxIter) x = []; u = []; x(1) = x0; x(2) = x1; u(1) = x(1) / 10^(2*k); for i = 3 : maxIter x(i) = rem(floor(x(i-1) * x(i-2) / 10^k), 10^(2*k)); u(i) = x(i) / 10^(2*k); end hold on; subplot(1,2,1); plot(u(3:end), '*-'); sTitle = sprintf('乘积取中随机数发生器 (x0=%d, x1=%d, k=%d)', x0, x1, k); title(sTitle); subplot(1,2,2); hist(u(3:end)); title('随机数直方图分布'); hold off; end
clc clear all close all % 调用函数---参数可修改 [x0,u0] = linear_mod_random(5, 5, 9, 5, 20) % 定义函数 function [x,u] = linear_mod_random(a, c, m, x0, iterMax) x = []; u = []; x(1) = x0; u(1) = x(1) / m; for i = 2 : iterMax x(i) = a * x(i-1) + c; x(i) = mod(x(i), m); u(i) = x(i) / m; end hold on; subplot(1,2,1); plot(x(2:end), '*-'); sTitle = sprintf('线性同余随机数发生器 (a=%d, c=%d, m=%d, x0=%d)', a, c, m, x0); title(sTitle); subplot(1,2,2); hist(u(2:end)); title('随机数直方图分布'); hold off; end
clc clear all close all % 调用函数---参数可修改 [x0,u0] = con_mid_rand(6983, 2687, 2, 20); % 定义函数 function [x u] = con_mid_rand(x0, M, k, maxIter) x = []; u = []; x(1) = x0; u(1) = x(1) / 10^(2*k); for i = 2 : maxIter x(i) = rem(floor(x(i-1) * M / 10^k), 10^(2*k)); u(i) = x(i) / 10^(2*k); end hold on; subplot(1,2,1); plot(u(2:end), 'r*-'); Title = sprintf('常数乘子随机数发生器 (x0=%d, M=%d, k=%d)', x0, M, k); title(Title); subplot(1,2,2); hist(u(2:end)); title('随机数直方图分布'); hold off; end
clc clear all close all % 调用函数---参数可修改 [x0,u0] = fib_rand(9, 20); % 定义函数 function [x u] = fib_rand(m, MaxIter) x = []; modX = []; u = []; x(1) = 1; x(2) = 1; for i = 3 : MaxIter x(i) = x(i-1) + x(i-2); modX(i) = rem(x(i), m); u(i) = modX(i) / m; end hold on; subplot(1,2,1); plot(modX(3:end), 'r*-'); sTitle = sprintf('斐波那契随机数发生器 (m=%d)',m); title(sTitle); subplot(1,2,2); hist(u(3:end)); title('随机数直方图分布'); hold off; end
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算