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

如何在R中绘制带不同参数的收益递减Reach函数图像?

问题解决:重现收益递减的Reach函数图像

1. 修正Reach函数的R语法

你原代码里的函数有几个关键错误:

  • R中没有e^{}的写法,指数函数要用exp()
  • 分式必须加括号,否则运算顺序会完全错误
  • 函数需要明确以x作为自变量(因为curve()会自动把绘图范围内的x值传入函数)

假设你要实现的是收益递减的饱和增长Reach函数(最常见的形式,随着x增大,Reach趋近于最大值,增长速率逐渐放缓),正确的函数定义如下:

# 定义收益递减的Reach函数
# x: 自变量(比如投放量、时间)
# mu: 转换参数(控制增长快慢,mu越大增长越快)
# M: 最大Reach值(饱和上限,可根据需求调整)
reach <- function(x, mu, M = 50) {
  M * (1 - exp(-mu * x))
}

如果你的原公式是分式形式(比如逻辑斯蒂变体),修正后的函数是:

reach <- function(x, mu, t = 1) {
  # t是固定参数,可根据视频里的设定修改
  (1 - exp(-mu * x * t)) / (1 + exp(-mu * x * t))
}

2. 变量处理说明

  • x:不需要手动模拟,curve()会自动生成from到to之间的x序列作为自变量传入函数
  • mu:你已经定义了要对比的参数向量c(1,3,5,7),直接传入函数即可
  • t/M:属于固定参数,根据视频里的公式设定具体数值即可,不需要模拟

3. 完整绘图代码

以下是可直接运行的代码,用来重现不同mu参数下的Reach曲线:

# 定义Reach函数
reach <- function(x, mu, M = 50) {
  M * (1 - exp(-mu * x))
}

# 设定要对比的mu参数
mu_values <- c(1, 3, 5, 7)
# 设定曲线颜色
cols <- c("#E63946", "#457B9D", "#1D3557", "#A8DADC")

# 绘制第一条曲线,初始化画布
curve(reach(x, mu = mu_values[1]),
      from = 0, to = 2,
      col = cols[1],
      ylim = c(0, 50),
      main = "收益递减的Reach函数(不同mu参数)",
      xlab = "自变量x(如投放量/时间)",
      ylab = "Reach值")

# 循环添加剩余曲线
for(i in 2:length(mu_values)) {
  curve(reach(x, mu = mu_values[i]),
        from = 0, to = 2,
        col = cols[i],
        add = TRUE)
}

# 添加图例,方便区分不同参数
legend("bottomright",
       legend = paste0("mu = ", mu_values),
       col = cols,
       lty = 1)

关键错误修正点

  • 原代码误用了weibull()函数,应该调用你自己定义的reach()函数
  • curve()的add参数在第一次绘图时设为FALSE(默认),后续循环设为TRUE即可
  • 确保ylim的范围符合函数的输出值(比如饱和增长函数的输出在0到M之间)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:30:09