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#程序设计有所帮助。
0
投稿
猜你喜欢
- 分栏是报刊、书籍、杂志常用的排版样式,它不仅能方便阅读,同时也能增加页面的美观度。本文将介绍如何在Java应用程序中给Word文档添加多个栏
- EventBus 可以很方便地进行各组件间的通信,解耦性更强,比广播更好用。EventBus 3 简介EventBus是一种为了优化Andr
- JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送
- 快速入门在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖:<dependen
- 本文研究的主要是Java回调函数与观察者模式的实现,具体介绍和实现代码如下。观察者模式(有时又被称为发布(publish )-订阅(Subs
- Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应
- 使用正则表达式,效率较高public boolean canParseInt(String str){if(str == null){ //
- 本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。
- 思路:先获得当前季度的开始和结束日期,在当前日期的基础上往前推3个月即上个季度的开始和结束日期/** * @param fla
- 本文实例讲述了C#中委托用法。分享给大家供大家参考。具体分析如下:这里演示了如何使用匿名委托来计算员工的薪水奖金。使用匿名委托简化了程序,因
- 今天给大家介绍一下Java实现钢琴的小程序,程序虽小,功能挺多,支持循环播放,录音等功能,首先简单介绍下源码结构:先看看钢琴界面实现,添加相
- 最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程
- 目录字节输入流字节输入流结构图FileInputStream类构造方法:常用读取方法:字节输出流字节输出流结构图:FileOutputStr
- springMVC默认的解析器里面是没有加入对文件上传的解析的,,使用springmvc对文件上传的解析器来处理文件上传的时需要用sprin
- 本人是从事互联网金融行业的,所以会接触到一些金融类的问题,常见的一种就是数字转汉字大小写的问题。所以抽空就写了一个小小的工具类,实现了数字转
- 重写子pagerview的dispatchTouchEvent方法,在返回前添加一句getParent().requestDisallowI
- 一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用import java.util.Arrays;
- 前言:想象一下,有一个服务提供个多个客户端调用,但不是所有客户端都需要全部的返回参数:比如商品列表服务返回商品的所有信息,而订单服务调用商品
- 最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小/** * 自定义TextView,文本内容自动调整字体大小以适应TextVie
- 1、@Select注解基本用法@Select注解的目的是为了取代xml中的select标签,只作用于方法上面。下面看一下@Select注解的