标准正态分布的累积密度函数

先是考虑把正态分布的那张表搞到程序中,通过查表的方式,小数点三位后面多出来的值使用公式来计算,代码如下

转自:http://my.oschina.net/jianfengz/blog/224256,感谢分享!

private static double[][] normdist = { {0.5,0.504,0.508,0.512,0.516,0.5199,0.5239,0.5279,0.5319,0.5359}, {0.5398,0.5438,0.5478,0.5517,0.5557,0.5596,0.5636,0.5675,0.5714,0.5753}, {0.5793,0.5832,0.5871,0.591,0.5948,0.5987,0.6026,0.6064,0.6103,0.6141}, {0.6179,0.6217,0.6255,0.6293,0.6331,0.6368,0.6406,0.6443,0.648,0.6517}, {0.6554,0.6591,0.6628,0.6664,0.67,0.6736,0.6772,0.6808,0.6844,0.6879}, {0.6915,0.695,0.6985,0.7019,0.7054,0.7088,0.7123,0.7157,0.719,0.7224}, {0.7257,0.7291,0.7324,0.7357,0.7389,0.7422,0.7454,0.7486,0.7517,0.7549}, {0.758,0.7611,0.7642,0.7673,0.7703,0.7734,0.7764,0.7794,0.7823,0.7852}, {0.7881,0.791,0.7939,0.7967,0.7995,0.8023,0.8051,0.8078,0.8106,0.8133}, {0.8159,0.8186,0.8212,0.8238,0.8264,0.8289,0.8315,0.834,0.8365,0.8389}, {0.8413,0.8438,0.8461,0.8485,0.8508,0.8531,0.8554,0.8577,0.8599,0.8621}, {0.8643,0.8665,0.8686,0.8708,0.8729,0.8749,0.877,0.879,0.881,0.883}, {0.8849,0.8869,0.8888,0.8907,0.8925,0.8944,0.8962,0.898,0.8997,0.9015}, {0.9032,0.9049,0.9066,0.9082,0.9099,0.9115,0.9131,0.9147,0.9162,0.9177}, {0.9192,0.9207,0.9222,0.9236,0.9251,0.9265,0.9278,0.9292,0.9306,0.9319}, {0.9332,0.9345,0.9357,0.937,0.9382,0.9394,0.9406,0.9418,0.943,0.9441}, {0.9452,0.9463,0.9474,0.9484,0.9495,0.9505,0.9515,0.9525,0.9535,0.9545}, {0.9554,0.9564,0.9573,0.9582,0.9591,0.9599,0.9608,0.9616,0.9625,0.9633}, {0.9641,0.9648,0.9656,0.9664,0.9671,0.9678,0.9686,0.9693,0.97,0.9706}, {0.9713,0.9719,0.9726,0.9732,0.9738,0.9744,0.975,0.9756,0.9762,0.9767}, {0.9772,0.9778,0.9783,0.9788,0.9793,0.9798,0.9803,0.9808,0.9812,0.9817}, {0.9821,0.9826,0.983,0.9834,0.9838,0.9842,0.9846,0.985,0.9854,0.9857}, {0.9861,0.9864,0.9868,0.9871,0.9874,0.9878,0.9881,0.9884,0.9887,0.989}, {0.9893,0.9896,0.9898,0.9901,0.9904,0.9906,0.9909,0.9911,0.9913,0.9916}, {0.9918,0.992,0.9922,0.9925,0.9927,0.9929,0.9931,0.9932,0.9934,0.9936}, {0.9938,0.994,0.9941,0.9943,0.9945,0.9946,0.9948,0.9949,0.9951,0.9952}, {0.9953,0.9955,0.9956,0.9957,0.9959,0.996,0.9961,0.9962,0.9963,0.9964}, {0.9965,0.9966,0.9967,0.9968,0.9969,0.997,0.9971,0.9972,0.9973,0.9974}, {0.9974,0.9975,0.9976,0.9977,0.9977,0.9978,0.9979,0.9979,0.998,0.9981}, {0.9981,0.9982,0.9982,0.9983,0.9984,0.9984,0.9985,0.9985,0.9986,0.9986}, {0.9987,0.999,0.9993,0.9995,0.9997,0.9998,0.9998,0.9999,0.9999,1}, {0.999032,0.999065,0.999096,0.999126,0.999155,0.999184,0.999211,0.999238,0.999264,0.999289}, {0.999313,0.999336,0.999359,0.999381,0.999402,0.999423,0.999443,0.999462,0.999481,0.999499}, {0.999517,0.999534,0.999550,0.999566,0.999581,0.999596,0.999610,0.999624,0.999638,0.999660}, {0.999663,0.999675,0.999687,0.999698,0.999709,0.999720,0.999730,0.999740,0.999749,0.999760}, {0.999767,0.999776,0.999784,0.999792,0.999800,0.999807,0.999815,0.999822,0.999828,0.999885}, {0.999841,0.999847,0.999853,0.999858,0.999864,0.999869,0.999874,0.999879,0.999883,0.999880}, {0.999892,0.999896,0.999900,0.999904,0.999908,0.999912,0.999915,0.999918,0.999922,0.999926}, {0.999928,0.999931,0.999933,0.999936,0.999938,0.999941,0.999943,0.999946,0.999948,0.999950}, {0.999952,0.999954,0.999956,0.999958,0.999959,0.999961,0.999963,0.999964,0.999966,0.999967}, {0.999968,0.999970,0.999971,0.999972,0.999973,0.999974,0.999975,0.999976,0.999977,0.999978}, {0.999979,0.999980,0.999981,0.999982,0.999983,0.999983,0.999984,0.999985,0.999985,0.999986}, {0.999987,0.999987,0.999988,0.999988,0.999989,0.999989,0.999990,0.999990,0.999991,0.999991}, {0.999991,0.999992,0.999992,0.999930,0.999993,0.999993,0.999993,0.999994,0.999994,0.999994}, {0.999995,0.999995,0.999995,0.999995,0.999996,0.999996,0.999996,1.000000,0.999996,0.999996}, {0.999997,0.999997,0.999997,0.999997,0.999997,0.999997,0.999997,0.999998,0.999998,0.999998}, {0.999998,0.999998,0.999998,0.999998,0.999998,0.999998,0.999998,0.999998,0.999999,0.999999}, {0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999}, {0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999,0.999999}, {1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,1.000000} }; 

static DecimalFormat format = new DecimalFormat("#.00"); static{ format.setRoundingMode(RoundingMode.DOWN);  } public static double NORMSDIST(double x) { if(x<0 || x>4.99) { return 0; } double rx = x; x = Double.valueOf(format.format(x)); int row = (int)(x*100)%10; int col = (int)(x*10); double rtn = normdist[col][row]; double step = 0.00001; for(double i = x+step ; i <= rx ; i+=step) { rtn+=N_(i)*step; } return rtn; } private static double N_(double x) { double rsp = (1/Math.sqrt(2*Math.PI)) * Math.exp((-1)*Math.pow(x, 2)/2); return rsp; }

但是以上方法只能保证精确到小数点后四位,对于计算理论价还是不够;后面去网上搜索,有个牛逼的哥们用了几行代码就搞定了,而且精确度达到小数点后7位。

public static double NORMSDIST(double a) { double p = 0.2316419; double b1 = 0.31938153; double b2 = -0.356563782; double b3 = 1.781477937; double b4 = -1.821255978; double b5 = 1.330274429; double x = Math.abs(a); double t = 1/(1+p*x); double val = 1 - (1/(Math.sqrt(2*Math.PI))  * Math.exp(-1*Math.pow(a, 2)/2)) * (b1*t + b2 * Math.pow(t,2) + b3*Math.pow(t,3) + b4 * Math.pow(t,4) + b5 * Math.pow(t,5) ); if ( a < 0 ) { val = 1- val; } return val; }
时间: 2025-01-03 18:56:35

标准正态分布的累积密度函数的相关文章

标准正态分布随机变量的倒数的分布

背景 看到有人在问这个问题,拿来算算. 自从有了CSDN-MarkDown之后,写博客舒服多了,尤其是数学公式部分. 原理 推荐的参考书是: Schaum's outline of Probability and Statistics, 3rd Edition, 2009; 科学出版社2002年翻译出版了该书的第二版,所以有中文版. Continuous Variables Theorem: Let X be a continous random variable with probabilit

T 分布(近似标准正态分布)

1.1      定义 定义:假设X服从标准正态分布N(0,1),Y服从 卡方分布,那么 的分布称为自由度为n的t分布,记为 . 分布密度函数 ,其中,Gam(x)为伽马函数. 可用于两组独立计量资料的假设检验. 由于在实际工作中,往往σ(总体方差)是未知的,常用s(样本方差)作为σ总体方差的估计值,为了与u变换(正态化变换)区别,称为t变换,统计量t 值的分布称为t分布.[u分布也叫标准正态分布] u变换:[(X-μ)/σ]转化成标准正态变量u,以使原来各种形态的正态分布都转换为μ=0,σ=1

Python中怎样生成一个服从标准正态分布的矩阵??

例如要产生一个标准正态分布的矩阵,矩阵维数为2*3,则代码如下: 1 from numpy import *; 2 def rand_Matrix(): 3 randArr=random.randn(2,3); 4 randMat=mat(randArr); 5 return randMat; 一种结果如下: 1 matrix([[ 0.3150869 , -0.02041996, -0.15361071], 2 [-0.75507988, 0.80393683, -0.31790917]])

标准正态分布+标准正态分布概率表+分布函数+积分

X~N(μ,σ²):一般正态分布:均值为μ.方差为σ² http://blog.csdn.net/zhanghongxian123/article/details/39008493 对于标准正态分布来说,存在一张表,称为:标准正态分布表: 该表计算的是:P(X<=x)[某个数落在某个[[email protected],x]]的概率.也就是下面阴影图形所示的面积: 如果x=1.96.则将1.96拆分为1.9和0.06.横轴1.9和纵轴0.06的交汇处:0.975.就是x<=1.96的概率. 也

[C#] 查标准正态分布表

static double[] ayZTFB = null; /// <summary> /// 计算标准正态分布表 /// </summary> /// <param name="input"></param> /// <returns></returns> public static double CalcN(double input) { if (ayZTFB == null) { //从0.00到3.09的

C语言产生标准正态分布或高斯分布随机数

C语言 产生标准正态分布或高斯分布 随机数 产生正态分布或高斯分布的三种方法: 1. 运用中心极限定理(大数定理) 1 #include 2 #include 3 4 #define NSUM 25 5 6 double gaussrand() 7 { 8 double x = 0; 9 int i; 10 for(i = 0; i < NSUM; i++) 11 { 12 x += (double)rand() / RAND_MAX; 13 } 14 15 x -= NSUM / 2.0; 1

正态分布(Normal distribution)又名高斯分布(Gaussian distribution)

正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学.物理及project等领域都很重要的概率分布,在统计学的很多方面有着重大的影响力. 若随机变量X服从一个数学期望为μ.标准方差为σ2的高斯分布,记为: X∼N(μ,σ2), 则其概率密度函数为 正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度.因其曲线呈钟形,因此人们又常常称之为钟形曲线.我们通常所说的标准正态分布是μ = 0,σ = 1的正态分布(见右图中绿色曲

Clustering by density peaks and distance

这次介绍的是Alex和Alessandro于2014年发表在的Science上的一篇关于聚类的文章[13],该文章的基本思想很简单,但是其聚类效果却兼具了谱聚类(Spectral Clustering)[11,14,15]和K-Means的特点,着实激起了我的极大的兴趣,该聚类算法主要是基于两个基本点: 聚类中心的密度高于其临近的样本点的密度 聚类中心与比其密度还高的聚类中心的距离相对较大 基于这个思想,聚类过程中的聚类中心数目可以很直观的选取,离群点也能被自动检测出来并排除在聚类分析外.无论每

【小白话通信】连续分布的产生

由于篇幅有限,前一篇文章<离散分布的产生>中只讲述了用均匀分布产生离散分布的方法,那么本文接着讲如何利用均匀分布产生连续分布的方法. 连续分布 连续分布主要有以下几种:均匀分布 伽马分布 正态分布 贝塔分布 柯西分布 对数正态分布 双指数分布. 产生各种连续分布的方法有很多,我把它分为两类:通用方法.特殊方法.特殊方法就是根据各个连续分布的特性而特有的方法. 通用方法 通用方法指的是对于各种连续分布理论上都适用的方法.下面只讲解分布函数法.舍取法这两种通用的方法. 分布函数法 概率积分变换定理