当前位置: 首页 > news >正文

C#,《小白学程序》第十六课:随机数(Random)第三,正态分布的随机数的计算方法与代码

1 随机数的问题

用 C# Random 类生成的随机数是平均分布的。也就是各数据段的出现的次数差不多。彩票号码属于这种随机数。

而很多很多常见的随机数,比如:成绩,却是符合正态分布的。

因而很多时候需要生成符合正态分布规律的随机数。

2 文本格式的程序


// 定义一个全局性(公共)的随机数发生器,便于大家(各函数)后面共同使用。
Random global_rnd = new Random();

/// <summary>
/// Box-Muller算法
/// 随机产生一个符合正态分布的数 u均数,d为标准方差
/// 注:本算法来自于网络,原文 d 为方差,错误!
/// </summary>
/// <param name="u"></param>
/// <param name="d"></param>
/// <returns></returns>
public double Rand(double u, double d)
{
    double u1, u2, z, x;
    if (d <= 0)
    {
        return u;
    }
    u1 = global_rnd.NextDouble();
    u2 = global_rnd.NextDouble();
    z = Math.Sqrt(-2 * Math.Log(u1)) * Math.Sin(2 * Math.PI * u2);
    x = u + d * z;
    return x;
}

/// <summary>
/// 《小白学程序》第十六课:随机数(Random)第三,正态分布的随机数的计算方法与代码
/// 一般的随机数是平均分布的,不符合常见的随机数分布,比如:成绩。
/// 因而很多时候需要生成符合正态分布规律的随机数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button16_Click(object sender, EventArgs e)
{
    // 生成随机数,并统计,代码与前一课差不多
    int n = 360;
    int[] freq = new int[n];
    for (int i = 0; i < 10000; i++)
    {
        // 调用 Rand() 生成符合正态分布的随机数
        int a = (int)(Rand(0.5, 0.1) * n);
        if (a < 0) continue;
        if (a >= n) continue;
        freq[a] += 1;
    }

    // 显示统计结果 与 前面一节课 的类似
    // 方柱 的高度就是数字出现的次数(频率)
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("<style>td { padding:0px;text-align:center;text-size:0px; } </style>");
    sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");
    sb.AppendLine("<tr>");
    for (int i = 0; i < n; i++)
    {
        sb.Append("<td style='vertical-align:bottom;'>");
        sb.Append("<div style='width:3px;height:" + freq[i] + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div>");
        sb.AppendLine("</td>");
    }
    sb.AppendLine("</tr>");
    sb.AppendLine("</table>");

    webBrowser1.DocumentText = sb.ToString();
}
 

3 代码格式


// 定义一个全局性(公共)的随机数发生器,便于大家(各函数)后面共同使用。
Random global_rnd = new Random();/// <summary>
/// Box-Muller算法
/// 随机产生一个符合正态分布的数 u均数,d为标准方差
/// 注:本算法来自于网络,原文 d 为方差,错误!
/// </summary>
/// <param name="u"></param>
/// <param name="d"></param>
/// <returns></returns>
public double Rand(double u, double d)
{double u1, u2, z, x;if (d <= 0){return u;}u1 = global_rnd.NextDouble();u2 = global_rnd.NextDouble();z = Math.Sqrt(-2 * Math.Log(u1)) * Math.Sin(2 * Math.PI * u2);x = u + d * z;return x;
}/// <summary>
/// 《小白学程序》第十六课:随机数(Random)第三,正态分布的随机数的计算方法与代码
/// 一般的随机数是平均分布的,不符合常见的随机数分布,比如:成绩。
/// 因而很多时候需要生成符合正态分布规律的随机数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button16_Click(object sender, EventArgs e)
{// 生成随机数,并统计,代码与前一课差不多int n = 360;int[] freq = new int[n];for (int i = 0; i < 10000; i++){// 调用 Rand() 生成符合正态分布的随机数int a = (int)(Rand(0.5, 0.1) * n);if (a < 0) continue;if (a >= n) continue;freq[a] += 1;}// 显示统计结果 与 前面一节课 的类似// 方柱 的高度就是数字出现的次数(频率)StringBuilder sb = new StringBuilder();sb.AppendLine("<style>td { padding:0px;text-align:center;text-size:0px; } </style>");sb.AppendLine("<table width=420 border=0 style='border-collapse:collapse;'>");sb.AppendLine("<tr>");for (int i = 0; i < n; i++){sb.Append("<td style='vertical-align:bottom;'>");sb.Append("<div style='width:3px;height:" + freq[i] + "px;border:solid 1px #FF0000;background-color:rgb(255,255,0);'></div>");sb.AppendLine("</td>");}sb.AppendLine("</tr>");sb.AppendLine("</table>");webBrowser1.DocumentText = sb.ToString();
}

4 运行结果(正态分布) 

http://www.lryc.cn/news/163409.html

相关文章:

  • 一文读懂java变量类型
  • 解决windows下git操作提示用户名密码错误的问题
  • ESP32开发:Clion配置IDF
  • 伦敦金的走势高低的规律
  • 【C#-1】C#调用matlab生成的dll库
  • MATLAB中pdist和pdist2的区别
  • 直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环
  • 【前端】js解码base64
  • Apipost:API开发者的协同工作神器
  • 照片动起来软件有哪些?试试这几个
  • 【LeetCode】146.LRU缓存
  • 2021-2023顶会190+篇ViT高分论文总结(通用ViT、高效ViT、训练transformer、卷积transformer等)
  • 堆相关例子-最大线段重合问题
  • Ztree的日常使用记录
  • PYTHON 3.10中文版官方文档
  • TLS协议深度解析:挖掘现代网络安全防御的底层技术
  • python的time各种用法
  • Vue中使用vue-router
  • uni-app之android原生插件开发
  • javaee spring aop实现事务 项目结构
  • 9.9校招 实习 内推 面经
  • 互联网医院App开发:构建医疗服务的技术指南
  • 阅读分享--重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
  • 使用Python操作CSV文件,方便又快捷
  • 深入探索KVM虚拟化技术:全面掌握虚拟机的创建与管理
  • javaee springMVC model的使用
  • Spring与Docker:如何容器化你的Spring应用
  • 试图替代 Python 的下一代AI编程语言:Mojo
  • 【数据结构】栈、队列和数组
  • python算法调用方案