数学建模社区-数学中国

标题: 用全局内存分享数据---例题 [打印本页]

作者: 森之张卫东    时间: 2015-9-17 22:52
标题: 用全局内存分享数据---例题
用全局内存分享数据---例题
随机数发生器对真实世界进行精确度量是十分重要的。
对于每一个测量值来说,都有一定的测量噪声(误差)。
对于系统的设计来说,这个情况必须要重要考虑,例如,真实世界中机械装置(飞机等)的运转。好的工程设计必须把他的测量误差控制在一定的范围之内,不能因误差导致系统的不稳定。
在系统建立之前,许多的工程设计的检测是通过系统操作的模拟(simulation)来完成的。
模拟包括系统动作的数学模型符合这个模型的输入数据。如果这个模型对模拟输入数据反应正确,那么我们就能合理的证明,真实世界中的系统对真实世界中输入值有正确的反应。
提供给数学模型的模拟输入数据必须带有模拟测量噪声。模拟测量噪声是指加入理想输入值中的一系列随机数。
模拟噪声一般由随机数发生器产生。
随机数发生器是一个函数,当它每一次被调用时,将会返回一个不同的随机出现的数。事实上,这些数是由一个确定性算法产生的,它们只是表现为随机。但是,如果产生它们的算法足够复杂,那么应用于模拟中的这些数就足够地随机。
下面是一个简单随机数发生器的算法。它是利用大数求余的不可预知性。考虑下面的等式。
ni+1 = mod(8121ni +28411, 134456)                  (5.6)
假设ni为非负整数,那么由于求余函数的关系,ni+1只能在0到13445之间的整数中进行取值。重复以上过程,得到的结果永远是在区间[0, 134455]中。如果我们事先不知道8121,28411和134456这三个数你很可能猜测这个顺序是由n值产生的。进一步说,它说明,所有在0到13445之间的整数出现的次序是等可能性。由于这些属性,等式(5.6)可以当一个简单的随机数发生器的基础。
现在我们用公式(5.6)设计一个随机数发生器,它的输出是一个实数,其取值范围这
[0.0,1.0]
答案见附件:
先附上程序:(见回复)


作者: 森之张卫东    时间: 2015-9-17 22:53
  1. function ran = random0(n,m)
  2. %RANDOM0 Generate uniform random numbers in [0,1)
  3. % Function RANDOM0 generates an array of uniform
  4. % random numbers in the range [0,1). The usage
  5. % is:
  6. %
  7. % random0(n)        --Generate an n x n array
  8. % random0(n,m)      --Generate an n x m array
  9. % Define variables:
  10. % ii                --Index variable
  11. % ISEED             --Random number seed (global)
  12. % jj                --Index variable
  13. % m                 --Number of columns
  14. % msg               --Error message
  15. % n                 --Number of rows
  16. % ran               --Output array
  17. % Record of revisions:
  18. % Date Programmer Description of change
  19. % ==== ========== =====================
  20. % 12/16/98 S. J. Chapman Original code
  21. % Declare globl values
  22. global ISEED        % Seed for random number generator
  23. % Check for a legal number of input arguments.
  24. msg = nargchk(1,2,nargin);
  25. error(msg);
  26. % If the m argument is missing, set it to n.
  27. if nargin < 2
  28.     m = n;
  29. end
  30. % Initialize the output array
  31. ran = zeros(n,m);
  32. % Now calculate random values
  33. for ii = 1:n
  34.     for jj = 1:m
  35.         ISEED = mod(8121*ISEED + 28411, 134456 );
  36.         ran(ii,jj) = ISEED / 134456;
  37.     end
  38. end
复制代码


作者: 森之张卫东    时间: 2015-9-17 22:53
提供附件:

答案.doc

77 KB, 下载次数: 0, 下载积分: 体力 -2 点

答案----详细内容






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5