C#利用Random得随机数求均值、方差、正态分布的方法
作者:一羽清宁 发布时间:2022-08-28 14:26:37
标签:C#,Random,随机数
本文实例讲述了C#利用Random得随机数求均值、方差、正态分布的方法。分享给大家供大家参考。具体如下:
最近在做中小学试卷分析系统,其中数据的分析让自己很头疼,整个系统采用B/S架构。在分析试卷难度梯度的时候需要用到正态分布,自己做了一些,也查阅了一些资料,终于掌握了将一组数据分析检验,最后生成正态分布。
(1)利用随机函数rand()生成(0,1)区间的100个均匀分布随机数;
(2)计算这100个均匀分布随机数的均值和方差,
(3)将这100个均匀分布的随机数,及其均值和方差保存到文本文件
首先利用“srand((unsigned)time(NULL))”语句设置产生随机数的开始点(需要包含time.h头文件);产生随机数的函数为rand(),为了将该随机数转换为(0,1)范围内的数,利用“rand()*1.0/RAND_MAX”可实现此目的。
具体生成代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
namespace random
{
classProgram
{
//求随机数平均值方法
staticdouble Ave(double[] a)
{
double sum=0;
foreach(double din a)
{
sum=sum+d;
}
doubleave=sum/a.Length;
return ave;
}
//求随机数方差方法
staticdouble Var(double[] v)
{
//double tt = 2;
//double mm = tt ^ 2;
double sum1= 0;
for (int i =0; i< v.Length; i++)
{
double temp= v[i] * v[i];
sum1 = sum1 + temp;
}
double sum =0;
foreach (double din v)
{
sum = sum + d;
}
double var =sum1 / v.Length - (sum / v.Length) * (sum / v.Length);
return var;
}
//求正态分布的随机数
staticvoidFenbu(double[] f)
{
//doublefenbu=new double[f.Length ];
for (int i =0; i< f.Length; i++)
{
double a = 0, b = 0;
a =Math.Sqrt((-2)*Math.Log(f[i], Math.E));
b = Math.Cos(2 *Math.PI * f[i]);
f[i] = a * b * 0.3 + 1;
}
}
static void Main(string[]args)
{
//生成100个(0,1)之间的随机数
Random ran = newRandom();
double[] dou= new double[100];
for(int i=0;i<dou.Length;i++)
{
dou[i]= ran.NextDouble();
}
//调用Ave方法、Var方法求得随机数均值和方差
doubleavenum = Ave(dou);
doublevarnum = Var(dou);
//写入文件
//将100个随机数,均值,方差保存到文件“d:\SourceData.txt”中
stringDatapath = (@"d:\SourceData.txt");
FileStream fs = new FileStream(Datapath,FileMode.Create);
StreamWriter sw = newStreamWriter(fs);
for (int j =0; j< dou.Length;j++ )
{
sw.WriteLine(dou[j]);
}
sw.Write("100个随机数均值和方差分别是{0}和{1}",avenum,varnum);
sw.Close();
//读取数据文件“d:\SourceData.txt”
FileStream fs1= new FileStream(Datapath, FileMode.Open);
StreamReader sr = newStreamReader(fs1);
string temp=null;
string str =null;
while((temp=sr.ReadLine())!=null)
{
str = str+temp+"";
}
//对数组进行分割Regax
Regex re = newRegex(" ");
string[]str1=re.Split(str);
double[]nums=newdouble[str1.Length-2];
for(int i=0;i<str1.Length-2;i++)
{
nums[i]=Convert.ToDouble(str1[i]);
}
//调用正态分布随机函数,求均值和方差
Fenbu(nums);
doubleaveresult= Ave(nums);
doublevarresult = Var(nums);
//写入文件
//将100个随机数,均值,方差保存到文件“d:\ResultData.txt”中
stringResultpath = (@"d:\ResultData.txt");
FileStream fs2 = newFileStream(Resultpath, FileMode.Create);
StreamWriter sw1 = newStreamWriter(fs2);
for (int j =0; j< nums.Length; j++)
{
sw1.WriteLine(nums[j]);
}
sw1.Write("100个随机数均值和方差分别是{0}和{1}",averesult, varresult);
sw1.Close();
Console.ReadKey();
}
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 本文实例讲述了Android编程之菜单实现方法。分享给大家供大家参考,具体如下:菜单是许多应用程序不可或缺的一部分,Android中更是如此
- Dubbo服务暴露机制前言在进行服务暴露机制的分析之前,必须谈谈什么是URL,在Dubbo服务暴露过程中URL是无处不在的,贯穿了整个过程。
- 前言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯
- 一、 进程 简单来说,进程是对资源的抽象,是资源的容器,
- 使用Vibrator的vibrate()可调节震动时间;cancel()取消震动。 <!—震动权限--><use
- 最近,Oracle 宣布 Java 14(或 Oracle JDK 14)公开可用。如果你想进行最新的实验或者开发的话,那么你可以试试在 L
- 1.)说明.本项目是来自github上的一个项目roottools (https://github.com/Stericson/RootTo
- 本文研究的主要是Java ArrayList扩容问题实例详解的相关内容,具体介绍如下。首先我们需要知道ArrayList里面的实质的其实是一
- 参数设置java程序启动参数 -D是用来做什么的呢? 官方解释如下:Set a system property value. If valu
- LockSupport类用于创建锁和其他同步类的基本线程阻塞原语,此类与使用它的每个线程关联一个许可。如果获得许可,将立即返回对park的调
- c#开发cad如何预览图块1.定义变量的方法代码如下2. 获取GetDwgImag图像的方法代码3.实现显示DWG文件的方法代码方
- 背景我们都知道http协议只能在浏览器单方面向服务器发起请求时获得响应,然而服务器不能主动向浏览器推送消息,想要实现浏览器的主动推送目前有两
- 1. 确保你项目能编译通过,安装java jdk 环境填写环境变量2. 添加SpringBootServletInitializer的子类重
- 一、PriorityQueue的数据结构JDK7中PriorityQueue(优先级队列)的数据结构是二叉堆。准确的说是一个最小堆。二叉堆是
- 代码从windows下visual studio到andriod平台迁移实现步骤:前言前言也是迁言,从windows的visual stud
- 数据访问之Druid数据源的使用说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。为什么要使用数
- 本文实例为大家分享了WPF实现半圆形导航菜单的具体代码,供大家参考,具体内容如下实现效果如下:思路:扇形自定义控件组合成半圆型菜单,再通过c
- java 中基本算法之希尔排序的实例详解希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的
- 一、简介   Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布
- 本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下摄像机镜头跟随鼠标移动,并限制上下左右的移