标准正态分布表的计算

您所在的位置:网站首页 年龄分布表 标准正态分布表的计算

标准正态分布表的计算

2023-04-12 07:04| 来源: 网络整理| 查看: 265

1.标准正态分布定义\Phi(x)=\int_{-\infty}^{x}\frac{1}{\sqrt{2\pi}}e^{-\frac{t^{2}}{2}}dt 2.标准正态分布级数展开t=\sqrt{2}v,\Phi(x)=\int_{-\infty}^{\sqrt{2}x}\frac{1}{\sqrt{\pi}}e^{-v^{2}}dv

不难注意不定积分 \int e^{-t^{2}}dt 可以展开后逐项积分为一个收敛很快的级数

\int e^{-t^{2}}dt=\int \sum_{k=0}^{\infty}{\frac{(-t^{2})^{k}}{k!}}dt=\sum_{k=0}^{\infty}\int{\frac{(-t^{2})^{k}}{k!}}dt=\sum_{k=0}^{\infty}{\frac{(-1)^{k}t^{2k+1}}{(2k+1)k!}}

为了避免上面的级数无意义,利用对称性:

\Phi(x)=\frac{1}{2}+\frac{1}{\sqrt{\pi}}\int_{0}^{\sqrt{2}x}e^{-v^{2}}dv =\frac{1}{2}+\frac{1}{\sqrt{\pi}}\sum_{k=0}^{\infty}{\frac{(-1)^{k}(\sqrt{2}x)^{2k+1}}{(2k+1)k!}}

这显然是一个收敛很快的级数,很容易计算得到高精度的结果,不然直接利用积分计算,误差一般是 o(\frac{1}{n}) ,要精确到n位有效数字大概时间复杂度是 O(10^{n}) 效率非常低,稍微好点的拟合积分和(比如 Eular-Maclaurin 求和公式)得到的误差将会是 O(\frac{1}{n^{k}}) 仍然好不了太多。

3.c++代码实现。

这个我先问问GPT,跑\doge,以下是gpt的回答:

由于标准正态分布表需要计算数学函数Erf的值,为了实现高精度计算,我们可以使用C++数学库Boost中的多倍精度浮点数类型`cpp_bin_float_100`。

以下是用C++编写的计算标准正态分布表的程序代码:

```cpp

#include #include #include #include using namespace std; using namespace boost::math::constants; using namespace boost::multiprecision; cpp_bin_float_100 norm_pdf(const cpp_bin_float_100& x) { return exp(-x * x / 2) / sqrt(2 * pi()); } cpp_bin_float_100 norm_cdf(const cpp_bin_float_100& x) { if (x 6) { return 1; } cpp_bin_float_100 sum = 0; cpp_bin_float_100 term = x; cpp_bin_float_100 n = 0; while (sum != sum + term) { sum += term; n++; term *= -x * x / n / (n + 1); } return 0.5 + sum * norm_pdf(x); } int main() { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3