C# 产生均匀分布随机数并求方差和期望 c#均匀分布 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 随机数用Random求方差套公式 s^2=[(x1-x)^2 +(x2-x)^2 +......(xn-x)^2]/(n)其中x是平均数期望这个要看你要求什么的期望。你没有说清楚 using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>///正态分布/// </summary>public class NormalDistribution{ public NormalDistribution() { // //TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 正态分布随机数 /// </summary> const int N = 100; const int MAX = 50; const double MIN = 0.1; const int MIU = 40; const int SIGMA = 1; static Random aa = new Random((int)(DateTime.Now.Ticks / 10000)); /// <summary> /// 产生(min,max)之间均匀分布的随机数 /// </summary> /// <param name="min"></param> /// <param name="max"></param> /// <returns></returns> public double AverageRandom(double min, double max) { int MINnteger = (int)(min * 10000); int MAXnteger = (int)(max * 10000); int resultInteger = aa.Next(MINnteger, MAXnteger); return resultInteger / 10000.0; } /// <summary> /// 正态分布概率密度函数 /// </summary> /// <param name="x"></param> /// <param name="miu"></param> /// <param name="sigma"></param> /// <returns></returns> public double Normal(double x, double miu, double sigma) { return 1.0 / (x * Math.Sqrt(2 * Math.PI) * sigma) * Math.Exp(-1 * (Math.Log(x) - miu) * (Math.Log(x) - miu) / (2 * sigma * sigma)); } /// <summary> /// 产生正态分布随机数 /// </summary> /// <param name="miu"></param> /// <param name="sigma"></param> /// <param name="min"></param> /// <param name="max"></param> /// <returns></returns> public double Random_Normal(double miu, double sigma, double min, double max) { double x; double dScope; double y; do { x = AverageRandom(min, max); y = Normal(x, miu, sigma); dScope = AverageRandom(0, Normal(miu, miu, sigma)); } while (dScope > y); return x; } /// <summary> /// 指数分布随机数 /// </summary> /// <param name="const_a">const_a是指数分布的参数λ</param> /// <returns></returns> public double RandExp(double const_a) { Random rand = new Random(Guid.NewGuid().GetHashCode()); double p; double temp; if (const_a != 0) temp = 1 / const_a; else throw new System.InvalidOperationException("除数不能为零!不能产生参数为零的指数分布!"); double randres; while (true) //用于产生随机的密度,保证比参数λ小 { p = rand.NextDouble(); if (p < const_a) break; } randres = -temp * Math.Log(temp * p, Math.E); return randres; } /// <summary> /// 求出数据平均值,并保留三位小数 /// </summary> /// <param name="Valist">数据集合</param> /// <returns></returns> public double average(List<double> Valist) { double sum = 0; foreach (double d in Valist) { sum = sum + d; } double revl = System.Math.Round(sum / Valist.Count, 2); return revl; } /// <summary> /// 求数据集合标准差 /// </summary> /// <param name="ValList"></param> /// <returns></returns> public double stdev(List<double> ValList) { double avg = average(ValList); double sumstdev = 0; foreach (double d in ValList) { sumstdev = sumstdev + (d - avg) * (d - avg); } double stdeval = System.Math.Sqrt(sumstdev); return System.Math.Round(stdeval, 2); }}以前做项目时候用到的正态分布,应该是你需要的.. 你也没有说范围,比如说Random rnd = new Random();int rndData = Enumerable.Range(0, 100).Select(x => rnd.Next(0, 100)).ToArray(); //产生100个0~100的随机整数double avg = rndData.Average(x => (double)x);double 方差 = rndData.Sum(x => ((double)x - avg) * ((double)x - avg)); 以前毕业设计做过,random比较坑,产生的N组随机数一摸一样。http://www.cnblogs.com/izanami/archive/2011/04/20/2022173.html看这个 记得后来我是用的第三个RNGCryptoServiceProvider 类来着 用不着,用Random就可以了。 关于Lambda表达式 伪造document.referer的有米有知道方法的? 如何用c#生成ini文件 并读取文件内容 常量中有换位符!!! 关于.NET haiwangstar (南河三(信为万事之本)) 和 longlijun(风之力)来接分!!! 如何限制在一个多文档窗体中重复弹出一个窗体 怎么添加双引号 C#中自定义鼠标经过窗口时的样式 请教个dataGridView1的绑定问题。 c#往图片上画带有下划线的文字问题 C#中的datagridview控件如何设置某行的格式
方差套公式 s^2=[(x1-x)^2 +(x2-x)^2 +......(xn-x)^2]/(n)其中x是平均数
期望这个要看你要求什么的期望。你没有说清楚
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;/// <summary>
///正态分布
/// </summary>
public class NormalDistribution
{
public NormalDistribution()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 正态分布随机数
/// </summary>
const int N = 100;
const int MAX = 50;
const double MIN = 0.1;
const int MIU = 40;
const int SIGMA = 1;
static Random aa = new Random((int)(DateTime.Now.Ticks / 10000));
/// <summary>
/// 产生(min,max)之间均匀分布的随机数
/// </summary>
/// <param name="min"></param>
/// <param name="max"></param>
/// <returns></returns>
public double AverageRandom(double min, double max)
{
int MINnteger = (int)(min * 10000);
int MAXnteger = (int)(max * 10000);
int resultInteger = aa.Next(MINnteger, MAXnteger);
return resultInteger / 10000.0;
}
/// <summary>
/// 正态分布概率密度函数
/// </summary>
/// <param name="x"></param>
/// <param name="miu"></param>
/// <param name="sigma"></param>
/// <returns></returns>
public double Normal(double x, double miu, double sigma)
{
return 1.0 / (x * Math.Sqrt(2 * Math.PI) * sigma) * Math.Exp(-1 * (Math.Log(x) - miu) * (Math.Log(x) - miu) / (2 * sigma * sigma));
}
/// <summary>
/// 产生正态分布随机数
/// </summary>
/// <param name="miu"></param>
/// <param name="sigma"></param>
/// <param name="min"></param>
/// <param name="max"></param>
/// <returns></returns>
public double Random_Normal(double miu, double sigma, double min, double max)
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min, max);
y = Normal(x, miu, sigma);
dScope = AverageRandom(0, Normal(miu, miu, sigma));
} while (dScope > y);
return x;
}
/// <summary>
/// 指数分布随机数
/// </summary>
/// <param name="const_a">const_a是指数分布的参数λ</param>
/// <returns></returns>
public double RandExp(double const_a)
{
Random rand = new Random(Guid.NewGuid().GetHashCode());
double p;
double temp;
if (const_a != 0)
temp = 1 / const_a;
else
throw new System.InvalidOperationException("除数不能为零!不能产生参数为零的指数分布!");
double randres;
while (true) //用于产生随机的密度,保证比参数λ小
{
p = rand.NextDouble();
if (p < const_a)
break;
}
randres = -temp * Math.Log(temp * p, Math.E);
return randres;
} /// <summary>
/// 求出数据平均值,并保留三位小数
/// </summary>
/// <param name="Valist">数据集合</param>
/// <returns></returns>
public double average(List<double> Valist)
{
double sum = 0;
foreach (double d in Valist)
{
sum = sum + d;
}
double revl = System.Math.Round(sum / Valist.Count, 2);
return revl;
}
/// <summary>
/// 求数据集合标准差
/// </summary>
/// <param name="ValList"></param>
/// <returns></returns>
public double stdev(List<double> ValList)
{
double avg = average(ValList);
double sumstdev = 0;
foreach (double d in ValList)
{
sumstdev = sumstdev + (d - avg) * (d - avg);
}
double stdeval = System.Math.Sqrt(sumstdev);
return System.Math.Round(stdeval, 2);
}
}
以前做项目时候用到的正态分布,应该是你需要的..
Random rnd = new Random();
int rndData = Enumerable.Range(0, 100).Select(x => rnd.Next(0, 100)).ToArray(); //产生100个0~100的随机整数
double avg = rndData.Average(x => (double)x);
double 方差 = rndData.Sum(x => ((double)x - avg) * ((double)x - avg));
看这个 记得后来我是用的第三个RNGCryptoServiceProvider 类来着
用不着,用Random就可以了。