- 生成指定数量的随机数
首先需要生成指定数量的随机数,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之间的随机数并赋值给数组中的对应元素。
- 计算随机数的均值和方差
有了随机数序列之后,可以计算序列的均值和方差。C#中可以使用LINQ语句来计算数组的均值和方差,示例如下:
double average = nums.Average();
double variance = nums.Average(num => Math.Pow(num - average, 2));
上面的代码中,利用nums.Average()方法计算数组的均值,然后利用Lambda表达式和Math.Pow()方法计算数组的方差。
- 生成正态分布随机数
如果想要生成符合正态分布的随机数,可以使用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。
- 示例说明
下面是一个完整的示例代码,演示了如何生成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技术站