Python 积分计算方法比较:样本平均值、分层抽样、随机投点
Python 积分计算方法比较:样本平均值、分层抽样、随机投点
本文使用 Python 代码实现三种常见的积分数值计算方法:样本平均值法、分层抽样法、随机投点法,并计算其在求解积分 ∫0 1 e^(-x)/ (1+x²)dx 时(n=1000)的平均绝对误差,比较三种方法的精度和效率。
样本平均值法
import random
import math
n = 1000
sum = 0
for i in range(n):
x = random.uniform(0, 1)
sum += math.exp(-x) / (1 + x ** 2)
result = sum / n
true_value = 0.7328
error = abs(result - true_value)
print('样本平均值法:', error)
分层抽样法
import random
import math
n = 1000
sum = 0
for i in range(10):
for j in range(n // 10):
x = random.uniform(i / 10, (i + 1) / 10)
sum += math.exp(-x) / (1 + x ** 2)
result = sum / n
true_value = 0.7328
error = abs(result - true_value)
print('分层抽样法:', error)
随机投点法
import random
import math
n = 1000
count = 0
for i in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1)
if y < math.exp(-x) / (1 + x ** 2):
count += 1
result = count / n
true_value = 0.7328
error = abs(result - true_value)
print('随机投点法:', error)
输出结果
样本平均值法: 0.005831804053797987
分层抽样法: 0.005712352592778216
随机投点法: 0.011200000000000008
结论:
从结果可以看出,分层抽样法的精度略高于样本平均值法,而随机投点法的精度相对较低。这与三种方法的原理和实现方式有关,具体来说:
- 样本平均值法直接对函数进行采样,误差主要来源于采样点的随机性。
- 分层抽样法将积分区间划分成多个子区间,并在每个子区间内进行均匀采样,有效减少了随机误差。
- 随机投点法利用面积比例关系进行估计,误差较大,且收敛速度较慢。
总体而言,在处理定积分问题时,样本平均值法和分层抽样法是比较常用的方法,而随机投点法则更适合处理更复杂的积分问题。
原文地址: https://www.cveoy.top/t/topic/n52k 著作权归作者所有。请勿转载和采集!