最近在做中小学试卷分析系统,其中数据的分析让自己很头疼,整个系统采用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
{
//求随机数平均值方法
static double Ave(double[] a)
{
double sum=0;
foreach(double din a)
{
sum=sum+d;
}
doubleave=sum/a.Length;
return ave;
}
//求随机数方差方法
static double 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;
}
//求正态分布的随机数
static voidFenbu(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#利用Random得随机数求均值、方差、正态分布的方法,涉及C#数学运算及概率统计的相关技巧,需要的朋友可以参考下
根据平均值和标准差生成符合正态分布的随机数
使用 C 语言产生正态分布的随机数。给出了全部的源代码。产生的随机数保存在文本文件中,并给出了 MATLAB 直方图验证的源代码。
最近上通信建模这门课时范平志老师布置的这个作业,我做好后传上来方便后人参考,包括了三个C语言程序,分别产生服从正态分布、瑞利分布、泊松分布的随机数。程序是是用的C语言编写,备有大量注释,浅显易懂,且全部...
用该程序可输出一个(0,1)区间内的服从高斯分布的随机数,精度为15位字长。
解决了C# Random生成随机数重复问题,并生成随机数的 介绍了五种方法。 没有分的童鞋,可以参考博文,博文里有源码: http://blog.csdn.net/shuai_wy/article/details/78606175
用c语言编写的产生正态随机数的源代码: 算法一产生12个(0,1)平均分布的随机函数,用大数定理可以模拟出正态分布。 算法二用到了数学中的雅可比变换,直接生成正态分布,但此算法在计算很大规模的数时 会出现...
用labview实现的正态分布的随机数并生成对应的直方图(Achieved with labview normally distributed random numbers and generate the corresponding histogram)
本资源有两段代码,一段是用rand随机数循环算pi的值和矩阵算pi的值并进行对比和耗时...另一段是用matlab内置伪随机算法rand生成正态分布概率密度函数,并包含图像的生成和对比。有问题可以私信,有问必答,欢迎你的购买
randMat:生成在指定区间 [a,b] 上具有均匀或正态分布的随机数矩阵,或者对于任意数量的 a,b 对具有特定的均值 (a) 和方差 (b)。 对于均匀分布,MATLAB 函数 rand() 返回的值乘以 (ba),然后添加到 a。 对于正态分布...
利用boxmuller算法生成符合正态分布的随机数。输入方差、期望、数目后运行即可。
利用移位寄存器产生均匀随机数,再利用Box-Muller产生高斯随机数。
本文实例讲述了Python使用numpy产生正态分布随机数的向量或矩阵操作。分享给大家供大家参考,具体如下: 简单来说,正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学、物理及...
C#中的随机数使用概述,很系统的讲解了随机数的运用,写的简介明了,更易学习和运用!
实现正态分布的伪随机数发生器
Python random 生成随机数的几个常用 函数
使用现代优化理论中的混合同余法,用C语言产生服从标准正态分布的随机数。
Matlab随机数生成的常用算法实现(用平方取中法产生随机数列 、用混合同余法产生随机数列 、用乘同余法1产生随机数列 、产生柯西分布的随机数列 、产生正态分布的随机数列 、产生贝努里-高斯分布的随机数列 )