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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录