写一段用龙贝格算法构造从0.00到4.99的标准正态分布表的python代码
时间: 2023-12-22 22:02:23 浏览: 87
以下是一段使用龙贝格算法构造从 0.00 到 4.99 的标准正态分布表的 Python 代码:
```python
import math
def normal_pdf(x):
"""正态分布概率密度函数"""
return math.exp(-x**2/2) / math.sqrt(2*math.pi)
def integrate(f, a, b, n):
"""使用龙贝格算法进行数值积分"""
h = (b - a) / n
x_vals = [a + i*h for i in range(n+1)]
y_vals = [f(x) for x in x_vals]
s = y_vals[0] + y_vals[-1] + 4*sum(y_vals[1:-1:2]) + 2*sum(y_vals[2:-1:2])
return s*h/3
def make_normal_table(step=0.01, digits=4):
"""构造标准正态分布表"""
table = []
for z in range(500):
x = z*step
p = integrate(normal_pdf, -math.inf, x, n=1000)
cdf = round(0.5*(1 + math.erf(x/math.sqrt(2))), digits)
table.append((x, p, cdf))
return table
# 输出标准正态分布表
table = make_normal_table(step=0.01, digits=4)
print("x | P(X<=x) | CDF")
for x, p, cdf in table:
print(f"{x:.2f} | {p:.4f} | {cdf:.4f}")
```
代码和前面的例子类似,但是使用了不同的步长和取值范围。首先定义了正态分布概率密度函数 `normal_pdf(x)`,然后定义了使用龙贝格算法进行数值积分的函数 `integrate(f, a, b, n)`。最后定义了构造标准正态分布表的函数 `make_normal_table(step, digits)`。该函数接受一个步长 `step` 和保留小数位数 `digits` 作为参数,使用 `integrate` 函数计算标准正态分布的概率密度函数和累积分布函数,并将结果保存到一个列表中。列表中的每个元素包括一个取值 `x`、对应的概率密度 `P(X<=x)` 和累积分布函数值 `CDF`,可以输出到控制台作为标准正态分布表。
该代码生成的标准正态分布表包括从 0.00 到 4.99 的取值范围,步长为 0.01,可以根据需要进行调整。输出的表格中包括三列,分别是取值 `x`、对应的概率密度 `P(X<=x)` 和累积分布函数值 `CDF`,可以保存到文件中用于后续计算和分析。
阅读全文