基于Hit and Miss法求解定积分的R语言实现及绘图需求
用Hit and Miss(命中-错失)法计算定积分∫₀¹x³dx的R实现
没问题!我帮你写一套完整的R代码来实现Hit and Miss法计算这个积分,还包含可视化部分,用100000个随机数完全没问题~
先简单回顾下Hit and Miss法的核心逻辑:我们在**[0,1]×[0,1]的正方形区域**里生成大量随机点,统计落在曲线( y=x^3 )下方的点的数量占总点数的比例——因为正方形的面积是1,这个比例就近似等于积分值(积分本质是曲线下的面积)。
1. 核心计算代码
下面是生成100000个随机数并计算积分近似值的代码:
# 设置随机种子,保证结果可复现 set.seed(123) # 生成100000个[0,1]区间的均匀随机数作为x坐标 x <- runif(n = 100000, min = 0, max = 1) # 生成100000个[0,1]区间的均匀随机数作为y坐标 y <- runif(n = 100000, min = 0, max = 1) # 统计命中次数:y <= x^3的点的数量 hit_count <- sum(y <= x^3) # 计算积分近似值:命中次数 / 总点数 approx_integral <- hit_count / 100000 # 输出结果 cat("积分的近似值:", approx_integral, "\n") cat("积分的真实值:", 1/4, "\n") # 因为∫₀¹x³dx = [x⁴/4]₀¹ = 1/4 = 0.25
运行这段代码后,你会得到一个接近0.25的近似值,用随机种子123的话,结果大概是0.249左右,和真实值非常接近。
2. 可视化命中/错失点的绘图代码
为了更直观展示方法原理,我们可以把所有随机点画出来,命中的点(在曲线下方)用蓝色,未命中的用红色:
# 创建空白画布,设置坐标轴范围和标题 plot(x = NULL, y = NULL, xlim = c(0,1), ylim = c(0,1), xlab = "x", ylab = "y", main = "Hit and Miss法计算∫₀¹x³dx") # 绘制曲线y = x³,用黑色实线,线宽2 curve(expr = x^3, from = 0, to = 1, add = TRUE, col = "black", lwd = 2) # 绘制命中的点(蓝色) points(x[y <= x^3], y[y <= x^3], col = "blue", pch = 16, cex = 0.5) # 绘制未命中的点(红色) points(x[y > x^3], y[y > x^3], col = "red", pch = 16, cex = 0.5) # 添加图例 legend("topleft", legend = c("命中点", "未命中点", "y=x³"), col = c("blue", "red", "black"), pch = c(16,16,NA), lty = c(NA,NA,1), lwd = 2)
运行这段代码后,你会看到一张清晰的可视化图:黑色曲线是( y=x^3 ),蓝色点集中在曲线下方,红色点在上方,能直观理解Hit and Miss法的统计逻辑。
内容的提问来源于stack exchange,提问作者Elen
相关产品推荐
相关产品推荐

