写一段用龙贝格算法构造从0.00到4.99的标准正态分布表的python代码
时间: 2023-12-22 12:02:23 浏览: 96
以下是一段使用龙贝格算法构造从 0.00 到 4.99 的标准正态分布表的 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
,可以保存到文件中用于后续计算和分析。
相关推荐
















