You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中同一张图绘制不同epsilon对应的res密度曲线?

多epsilon值的tau_epsilon密度曲线绘制方案

问题背景

已有R代码实现单个epsilon(0.9)下,1000个初始值对应的tau_epsilon(即满足h1t(t,x0)=epsilon的t值)的密度图,现需要在同一张图中绘制epsilon取0.1、0.2、0.3、0.9时的密度曲线。

解决方案步骤

1. 优化t值查找函数

调整find_t函数,支持外部传入epsilon参数,同时添加异常捕获避免个别初始值导致程序中断:

find_t <- function(x, epsilon, range = c(-500, 500)) {
  # 捕获uniroot报错,返回NA避免中断流程
  result <- tryCatch({
    uniroot(function(t) h1t(t, x) - epsilon, range, tol = .Machine$double.eps)$root
  }, error = function(e) {
    NA
  })
  result
}

2. 批量计算不同epsilon对应的res

定义目标epsilon集合,批量生成每个epsilon对应的t值结果:

# 设定要测试的epsilon值
epsilon_values <- c(0.1, 0.2, 0.3, 0.9)

# 批量计算每个epsilon对应的所有初始值的t值
res_list <- lapply(epsilon_values, function(eps) {
  lapply(xmats, find_t, epsilon = eps)
})
# 给结果列表命名,方便后续识别
names(res_list) <- paste0("epsilon_", epsilon_values)

3. 绘制叠加密度曲线

先绘制第一条曲线作为基础,再用lines()函数依次叠加其他曲线,同时添加图例区分不同epsilon:

# 定义对应每个epsilon的颜色
color_vec <- c("blue", "green", "orange", "red")

# 绘制第一个epsilon的密度曲线作为基底
dens_first <- density(unlist(res_list[[1]]), na.rm = TRUE)
plot(dens_first, xlim = c(0, 300), col = color_vec[1],
     main = "Density of tau_epsilon for different epsilon values (n=500)",
     xlab = "tau_epsilon", ylab = "Density")

# 循环叠加剩余epsilon的密度曲线
for (i in 2:length(epsilon_values)) {
  dens <- density(unlist(res_list[[i]]), na.rm = TRUE)
  lines(dens, col = color_vec[i])
}

# 添加图例说明各曲线对应的epsilon值
legend("topright", legend = paste0("epsilon=", epsilon_values),
       col = color_vec, lty = 1, cex = 0.8)

补充说明

  • 加入tryCatch是为了处理个别初始值无法在指定区间内找到满足条件的t值的情况,避免程序崩溃;绘图时通过na.rm=TRUE忽略无效的NA值。
  • 可根据需求调整xlim范围、颜色配置、图例位置等参数,优化图表展示效果。

内容的提问来源于stack exchange,提问作者oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:40:34