Golang 正态分布实现

前端之家收集整理的这篇文章主要介绍了Golang 正态分布实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

简介

from 百度百科

正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由A.棣莫弗在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。[1] 是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

公式

  1. 其中μ为数学期望(其实就是平均数),σ为标准差(标准差也被称为标准偏差,或者实验标准差,公式如下所示:标准差=方差的算术平方根=s=sqrt(((x1-x)^2 +(x2-x)^2 +……(xn-x)^2)/n));
  2. 正太分布标准图形,

代码实现

package main

import (
    "fmt"
    "math"
)
//测试数据源
var data_source = []float64{1, 2, 3, 4, 5, 6, 1, 7, 8, 9, 10, 2}

func main() {
    //数学期望
    var sum float64 = 0
    for _,v := range data_source {
        sum += v
    }
    μ := float64(sum) / float64(len(data_source))

    //标准差
    var variance float64
    for _,v := range data_source {
        variance += math.Pow((v - μ), 2)
    }
    σ := math.Sqrt(variance / float64(len(data_source)))
    fmt.Println("σ:",σ)
    fmt.Println("μ:",μ)

    //正态分布公式
    a := 1 / (math.Sqrt(2*math.Pi) * σ) * math.Pow(math.E,(-math.Pow((μ-μ), 2)/(2*math.Pow(σ, 2))))
    fmt.Println(a)
}


ps:

  1. 其中当x=μ时,处于正态分布的曲线顶点;
  2. 当μ = 0,σ = 1时的正态分布是标准正态分布
  3. 正态曲线下,横轴区间(μ-σ,μ+σ)内的面积为68.268949%。
    P{|X-μ|<σ}=2Φ(1)-1=0.6826
    横轴区间(μ-1.96σ,μ+1.96σ)内的面积为95.449974%。
    P{|X-μ|<2σ}=2Φ(2)-1=0.9544
    横轴区间(μ-2.58σ,μ+2.58σ)内的面积为99.730020%。
    P{|X-μ|<3σ}=2Φ(3)-1=0.9974
    由于“小概率事件”和假设检验的基本思想 “小概率事件”通常指发生的概率小于5%的事件,认为在一次试验中该事件是几乎不可能发生的。由此可见X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
  4. 第3点很重要
原文链接:https://www.f2er.com/go/187993.html

猜你在找的Go相关文章