高斯分布概念学习和C#自定义控件

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯分布概念学习和C#自定义控件相关的知识,希望对你有一定的参考价值。

正态分布(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_新浪博客 

以上是关于高斯分布概念学习和C#自定义控件的主要内容,如果未能解决你的问题,请参考以下文章

C# 自定义FileUpload控件

学习要点自定义类和结构

C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随变化?

在 WPF C# 中无法访问用户控件的自定义属性

c# winform 制作自定义控件

做WPF页面的时候我想通过C#代码触发自定义控件中的事件怎么做