在实际项目中,遇到需要正态分布算法去计算一个数值在整体的分布区间,例如:

 100,90,80,70,60,50,40,30,20,10共10个数,按从高到低的顺序排序,总数的10%分布区域为极高频,总数的30%分布区域为高频,总数的40%分布区域为中频,总数的20%分布区域为低频,比如我新增一个数字88,我如何快速得到新增数字位于那个频段?以及其他数字有那些数字频段发生了变化??? 
 
代码实现(计算数值在整体分布的累计概率):
 <?php
/**
* php 实现excel的normdist函数
*
* 使用方法:
$list = array(1.09,1.50,1.31,1.44);
$normdist = new normdist($list);
echo $normdist->getCdf($list[0]);
*/
class normdist { public $list = array();
public $mu;
public $sigma; public function __construct($list)
{
$this->list = $list;
$this->mu = $this->getMu($list); // 获取平均值
$this->sigma = $this->getSigma($list); // 获取标准偏差
} /**
* @name 正态分布的累积概率函数
* @param string|integer $value
* @return number
*/
public function getCdf($value)
{
$mu = $this->mu;
$sigma = $this->sigma;
$t = $value - $mu;
$y = 0.5 * $this->erfcc(-$t / ($sigma * sqrt(2.0)));
if ($y > 1.0) $y = 1.0; return $y;
} private function erfcc($x)
{
$z = abs($x);
$t = 1. / (1. + 0.5 * $z);
$r =
$t * exp(-$z*$z-1.26551223+
$t*(1.00002368+
$t*(.37409196+
$t*(.09678418+
$t*(-.18628806+
$t*(.27886807+
$t*(-1.13520398+
$t*(1.48851587+
$t*(-.82215223+
$t*.17087277)))))))));
if ($x >= 0.)
return $r;
else
return 2 - $r;
} /**
* @name 获取平均值
* @param array $list
* @return number
*/
private function getMu($list)
{
return array_sum($list) / count($list);
} /**
* @name 获取标准差
* @param array $list
* @return number
* @beizhu 标准差 = 方差的平方根
*/
private function getSigma($list)
{
$total_var = 0;
foreach ($list as $v) {
$total_var += pow( ($v - $this->getMu($list)), 2);
} return sqrt( $total_var / (count($list) - 1 )); // 这里为什么数组元素个数要减去1
}
}
 

PHP实现正态分布的累积概率函数的更多相关文章

  1. 标准正态分布表(scipy.stats)

    0. 标准正态分布表与常用值 Z-score 是非标准正态分布标准化后的 x即 z=x−μσ" role="presentation">z=x−μσz=x−μσ 表 ...

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

    正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学.物理及project等领域都很重要的概率分布,在统计学的很多方面有着重大的影 ...

  3. 截断正态分布(Truncated normal distribution)

    Truncated normal distribution - Wikipedia Normal Distribution 称为正态分布,也称为高斯分布,Truncated Normal Distri ...

  4. QM5_Didstribution

    Basic Concepts Probability distribution Discrete distribution (离散分布) The distribution of the discret ...

  5. numpy-Randow

    Randow使用 http://blog.csdn.net/pipisorry/article/details/39508417 概率相关使用 转:http://www.cnblogs.com/Nau ...

  6. (邹博ML)数学分析与概率论

    机器学习入门 深度学习和机器学习? 深度学习在某种意义上可以认为是机器学习的一个分支,只是这个分支非常全面且重要,以至于可以单独作为一门学科来进行研究. 回忆知识 求解S. 对数函数的上升速度 我们使 ...

  7. Clustering by density peaks and distance

    这次介绍的是Alex和Alessandro于2014年发表在的Science上的一篇关于聚类的文章[13],该文章的基本思想很简单,但是其聚类效果却兼具了谱聚类(Spectral Clustering ...

  8. Excel教程(13) - 统计函数

    AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该 函数可以评测数据(例如学生的某科考试成绩)的离散度. 语法:AVEDEV(number1,number2,...) 参数:Number ...

  9. Gauss error function

    0. error function erf(x)=1π∫−xxe−t2dt" role="presentation">erf(x)=1π−−√∫x−xe−t2dte ...

随机推荐

  1. 四 Vue学习 router学习

    index.js: 按需加载组件: const login = r => require.ensure([], () => r(require('@/page/login')), 'log ...

  2. java线程基本原理

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.        假设一个服务器完成一项任务所需时间为:T1 创 ...

  3. CodeForces 485A Factory (抽屉原理)

    A. Factory time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  4. C++读取XML,tinyXml的使用

    前言: 最近在开发的过程中,有个需求是对xml进行格式转化,从一种格式转化到另外一种格式.因此,就需要读取xml进行处理.原本打算写成工具在linux下运行,不过后来考虑到和系统结合,最后也就使用了前 ...

  5. HDU - 5887 2016青岛网络赛 Herbs Gathering(形似01背包的搜索)

    Herbs Gathering 10.76% 1000ms 32768K   Collecting one's own plants for use as herbal medicines is pe ...

  6. 编译出arm Android环境下的C++可执行文件

    要想编译出arm环境的C++可执行文件主要就是利用交叉编译器进行编译.编译过程本身都大同小异. 1.安装交叉编译器,交叉编译器的安装方法大致有下面几种: A.debian/ubuntu 系统可以直接输 ...

  7. apply的使用技巧

    1.什么是apply?他和call有什么区别? apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数 obj:这个对象 ...

  8. 从RAID看垂直伸缩到水平伸缩的演化

    磁盘的读写过程,最消耗时间的地方就是在磁盘中磁道寻址的过程,而一旦寻址完成,写入数据的速度很快. 连续写入:写入只寻址一次 存储位置与逻辑位置相邻 不用多次寻址 随机写入:每写一次 便寻址一次 增加了 ...

  9. window安装android打包环境

    1.下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载:jdk-8u1 ...

  10. scrapy爬取数据的基本流程及url地址拼接

    说明:初学者,整理后方便能及时完善,冗余之处请多提建议,感谢!   了解内容: Scrapy :抓取数据的爬虫框架     异步与非阻塞的区别   异步:指的是整个过程,中间如果是非阻塞的,那就是异步 ...