C#利用Random得随机数求均值、方差、正态分布的方法

  1. 生成指定数量的随机数

首先需要生成指定数量的随机数,C#中使用Random类可以很方便地实现这个功能。下面是一个生成100个随机数的示例代码:

int n = 100;
double[] nums = new double[n];
Random rand = new Random();
for (int i = 0; i < n; i++)
{
    nums[i] = rand.NextDouble();
}

上面的代码中,定义了一个长度为100的double类型数组nums,然后利用Random类的NextDouble()方法,生成0到1之间的随机数并赋值给数组中的对应元素。

  1. 计算随机数的均值和方差

有了随机数序列之后,可以计算序列的均值和方差。C#中可以使用LINQ语句来计算数组的均值和方差,示例如下:

double average = nums.Average();
double variance = nums.Average(num => Math.Pow(num - average, 2));

上面的代码中,利用nums.Average()方法计算数组的均值,然后利用Lambda表达式和Math.Pow()方法计算数组的方差。

  1. 生成正态分布随机数

如果想要生成符合正态分布的随机数,可以使用Box-Muller算法。下面是一个生成符合正态分布的随机数的示例代码:

double u1 = rand.NextDouble();
double u2 = rand.NextDouble();
double z1 = Math.Sqrt(-2 * Math.Log(u1)) * Math.Cos(2 * Math.PI * u2);
double z2 = Math.Sqrt(-2 * Math.Log(u1)) * Math.Sin(2 * Math.PI * u2);

上面的代码中,首先利用Random类生成两个0到1之间的随机数u1和u2,然后利用Box-Muller算法将它们转换为符合正态分布的随机数z1和z2。

  1. 示例说明

下面是一个完整的示例代码,演示了如何生成100个随机数并计算它们的均值和方差,以及如何生成符合正态分布的随机数:

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int n = 100;

        // 生成随机数序列
        double[] nums = new double[n];
        Random rand = new Random();
        for (int i = 0; i < n; i++)
        {
            nums[i] = rand.NextDouble();
        }

        // 计算均值和方差
        double average = nums.Average();
        double variance = nums.Average(num => Math.Pow(num - average, 2));
        Console.WriteLine("均值:{0}", average);
        Console.WriteLine("方差:{0}", variance);

        // 生成符合正态分布的随机数
        double u1 = rand.NextDouble();
        double u2 = rand.NextDouble();
        double z1 = Math.Sqrt(-2 * Math.Log(u1)) * Math.Cos(2 * Math.PI * u2);
        double z2 = Math.Sqrt(-2 * Math.Log(u1)) * Math.Sin(2 * Math.PI * u2);
        Console.WriteLine("符合正态分布的随机数:{0}, {1}", z1, z2);
    }
}

上面的代码中,首先生成了100个随机数,然后计算它们的均值和方差,并输出结果。最后生成了两个符合正态分布的随机数,并输出结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#利用Random得随机数求均值、方差、正态分布的方法 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#连接数据库的几种方法

    下面是详细讲解“C#连接数据库的几种方法”的完整攻略。 1. 前置条件 在进行C#连接数据库之前,需要确保以下前置条件已经满足: 安装并已经配置好需要使用的数据库管理软件,并启动相应的服务。 在使用数据库管理软件创建一个目标数据库,并为目标数据库添加相应的表和数据,以便在连接测试中使用。 2. C#连接数据库的几种方法 2.1 ADO.NET方式 ADO.N…

    C# 2023年5月31日
    00
  • C#实现将汉字转化为2位大写的16进制Unicode的方法

    下面是“C#实现将汉字转化为2位大写的16进制Unicode的方法”的详细攻略: 标准的Unicode编码格式 Unicode编码格式表示了计算机中所有可能用到的字符,包括英文字母、数字、标点符号和各种语言的文字。其中,汉字的Unicode编码范围是0x4E00到0x9FFF。 在C#中,可以使用\u关键字来表示Unicode编码,如\u4E00表示汉字“一…

    C# 2023年5月31日
    00
  • 在C#和Java语言中for和foreach的区别详解

    在C#和Java语言中for和foreach的区别详解 在C#和Java语言中,for和foreach都是循环语句,但在使用方式和效率上有一些区别。下面详细讲解它们的区别。 for循环 for循环是一种常用的循环语句,用于在已知循环次数的情况下重复执行一段代码。其语法如下: for (初始化; 条件; 递增/递减) { //代码块 } for (初始化; 条…

    C# 2023年6月7日
    00
  • 如何将Winform移植到.NET Core 3.0

    将Winform移植到.NET Core 3.0的完整攻略如下: 确认.NET Core 3.0 SDK已安装 在开始移植之前,需要确认已安装.NET Core 3.0 SDK。您可以在命令行中运行以下命令来检查是否已安装.NET Core 3.0 SDK: dotnet –version 如果输出的版本号为3.0或更高版本,则.NET Core 3.0 …

    C# 2023年5月16日
    00
  • C#统计字符串里中文汉字个数的方法

    下面我将详细讲解“C#统计字符串里中文汉字个数的方法”的完整攻略。 1. 确定需求和情景 在开发过程中,我们需要先确定需求和情景。经过分析,我们的需求是:编写一段 C# 代码,统计给定字符串里汉字的个数。情景是:我们需要在一个网站中统计每个评论中汉字的个数,以便进行敏感信息监控。 2. 了解中文汉字的编码 在编写代码前,需要了解中文汉字的编码情况。中文汉字采…

    C# 2023年6月8日
    00
  • C# 中AutoMapper的使用方法

    下面是“C# 中AutoMapper的使用方法”的完整攻略: 1. AutoMapper 简介 AutoMapper 是一个 .NET 框架下的对象映射工具,它的主要任务是通过配置文件自动地映射实体之间的属性,省去繁琐的手工编写属性映射代码。使用 AutoMapper 可以极大地提高代码的复用性以及开发效率。 2. 安装 AutoMapper 使用 NuGe…

    C# 2023年6月3日
    00
  • C# 中的partial 关键字详解

    C# 中的partial 关键字详解 在C#中,使用 partial 关键字可以将一个类、结构体、接口或者方法分为多个部分进行声明,这些部分可以分布在同一个源文件中,也可以分布在不同的文件中。 partial类 声明方式 在一个类的声明前添加 partial 关键字,该类即可被分为多个部分,示例代码如下: partial class MyClass { //…

    C# 2023年6月7日
    00
  • C#多线程学习(一) 多线程的相关概念

    C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等), 但代码区是共享的,即不同的线程可以执行同样的函数。 什么是多线程? 多线程是指程序…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部