正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution);
是一个在数学、物理及工程等领域都非常重要的概率分布,
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线;
若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2);
正态分布有两个参数,即期望(均数)μ和标准差σ,σ2为方差。
正态分布具有两个参数μ和σ^2的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ^2是此随机变量的方差,所以正态分布记作N(μ,σ2)。
μ是正态分布的位置参数,描述正态分布的集中趋势位置。概率规律为取与μ邻近的值的概率大,而取离μ越远的值的概率越小。正态分布以X=μ为对称轴,左右完全对称。
σ描述正态分布资料数据分布的离散程度,σ越大,数据分布越分散,σ越小,数据分布越集中。也称为是正态分布的形状参数,σ越大,曲线越扁平,反之,σ越小,曲线越瘦高。
曾学过一点,已经忘记了;
下面来C#做一个自定义控件;可对外提供正态分布随机数;
解决方案新建一个winform项目和一个用户控件项目;
用户控件界面,
运行一下控件项目;
之后在工具箱中出现此自定义控件;
工程结构;
UserControl1.cs,
public partial class UserControl1: UserControl
{
public delegate void BtnClickHandle(object sender, EventArgs e);
public event BtnClickHandle GSBtnClicked;
public string Gss;
public UserControl1()
{
InitializeComponent();
}
private void UserControl1_Load(object sender, EventArgs e)
{
double[] x = NormalDistribution();
Gss = x[0].ToString() + ", " + x[1].ToString();
}
private static double[] NormalDistribution()
{
Random rand = new Random();
double[] y;
double u1, u2, v1 = 0, v2 = 0, s = 0, z1 = 0, z2 = 0;
while (s > 1 || s == 0)
{
u1 = rand.NextDouble();
u2 = rand.NextDouble();
v1 = 2 * u1 - 1;
v2 = 2 * u2 - 1;
s = v1 * v1 + v2 * v2;
}
z1 = Math.Sqrt(-2 * Math.Log(s) / s) * v1;
z2 = Math.Sqrt(-2 * Math.Log(s) / s) * v2;
y = new double[] { z1, z2 };
return y; //返回两个服从正态分布N(0,1)的随机数z0 和 z1
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = Gss;
if (GSBtnClicked != null)
{
GSBtnClicked(sender, new EventArgs());
}
}
}
运行一下控件项目;
外部可获取自定义控件的Gss属性;可触发用户控件的自定义事件;
winform项目添加一个自定义控件,一个label、一个button、一个textBox;
private void button1_Click_1(object sender, EventArgs e)
{
label1.Text = userControl11.Gss;
}
private void userControl11_GSBtnClicked_1(object sender, EventArgs e)
{
textBox1.Text = userControl11.Gss;
}
运行winform项目;点form1上的button1;
点自定义控件中的button;
窗体使用了自定义控件以后,可看到自定义的事件;
生成正态分布随机数的代码来自,
[转载]用C#产生正态分布随机数_suqin814_新浪博客