最近利用碎片时间在读Allen B.Downey的《贝叶斯思维:统计建模的Python学习法》,顺便用手机上的Pythonista写实例。因为Pythonista没有scipy科学计算包,遇上需求标准正态累积分布函数的时候就只能抓瞎,为此决定自己写一个。累积分布函数(Cumulative Distribution Function,CDF)就是概率密度函数(Probability Density Function,PDF)的积分,利用原函数计算定积分的方法建立在牛顿-莱布尼兹公式之上
。然而,原函数可以用初等函数表示的函数为数不多,大部分的可积函数的积分无法用初等函数表示,甚至无法有解析表达式,比如在统计学上很重要的正态分布函数
就是这样一个无法用初等函数直接计算的函数。
在知乎上查找一遍这个积分的计算方法,没找到理想的答案。所以决定写下来和大家一起学习一下。分别用数值积分法的复化辛普森公式和无穷级数的泰勒级数法求解这个积分,包括部分理论、算法和Python代码。
定积分
在几何上可以解释为由
,
,
以及
这四条边所围成的曲边梯形面积。如图1所示。而这个面积之所以难于计算是因为它有一条曲边
。
一、数值积分是利用黎曼积分等数学定义,用数值逼近的方法近似计算给定的定积分值。
1. 矩形公式:就是常见的黎曼和,矩形的高由函数值来决定,可选择使用左矩形、右矩形或中矩形。
如图2所示,用矩形面积来拟合积分,公式为
。通常将积分区间