随机发生器:线性同余法
生活随笔
收集整理的這篇文章主要介紹了
随机发生器:线性同余法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線性同余法
這里不做過多介紹,搜一下就知道
核心函數:
xn+1=(a?xn+b)%mx_{n+1}=(a*x_n+b) \% mxn+1?=(a?xn?+b)%m
xn+1x_{n+1}xn+1?就是我們下一個要算的隨機數
x0x_0x0?是我們的種子數
Code
// jave.lin 2019.08.20public class Ran{private static Random s_r = new Random();private int seed;private Random ran;public Ran(int seed = int.MinValue){if (seed == int.MinValue){this.seed = s_r.Next();}else{this.seed = seed;}ran = new Random(this.seed);}public int Range(int min, int max){return ran.Next(min, max);}public int Seed => seed;} // jave.lin 2019.08.20// linear congruential method// references:// - 隨機數原理揭秘:線性同余法;http://blog.sina.com.cn/s/blog_d324e9ca0102wk4b.html// - 線性同余法:https://baike.baidu.com/item/%E7%BA%BF%E6%80%A7%E5%90%8C%E4%BD%99%E6%B3%95/10528746?fr=aladdinpublic class LinearCongruentialMethod{private static Ran r = new Ran();public int seed;private int a;private int b;private int m;private float invMF;private double invMD;public LinearCongruentialMethod(int s = -1){//seed = s == -1 ? r.Range(int.MinValue, int.MaxValue) : s;//a = r.Range(int.MinValue, int.MaxValue);//b = r.Range(int.MinValue, int.MaxValue);//m = r.Range(1099999999, 2099999999);seed = s == -1 ? r.Range(0, int.MaxValue) : s;a = -536363;b = 83517;m = 2099999999;invMF = 1 / (float)m;invMD = 1 / (double)m;}public int Ran() => seed = (seed * a + b) % m;public float RanF() => float.MinValue + RanF01() * (float.MaxValue - float.MinValue);public double RanD() => double.MinValue + RanD01() * (double.MaxValue - double.MinValue);public int Range(int min, int max) => (int)(min + RanF01() * (max - min)); public float RanF(float min, float max) => min + RanF01() * (max - min);public double RanD(double min, double max) => min + RanD01() * (max - min);// 這里我簡寫:n121意思是:negative 1 to 1==>n121==>[-1~1)public float RanFn121() => (Ran() * invMF);public double RanDn121() => (Ran() * invMD);// [0~1)public float RanF01() => RanFn121() * 0.5f + 0.5f;public double RanD01() => RanDn121() * 0.5f + 0.5f;}運行效果
使用該隨機發生器生成的白色噪點(white noise)
使用excel來將采樣數據的線表圖顯示效果
References
- 隨機數原理揭秘:線性同余法
- 線性同余法
總結
以上是生活随笔為你收集整理的随机发生器:线性同余法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线PPT—Sway初级教程
- 下一篇: 被 YYUC $is_developin