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

如何在R中完成博弈论模型的s随q变化模拟绘图?

解决方案

你的核心需求是对每个q ∈ [0,1],求解使得偏导函数partial_derivative_pi等于0的s ∈ [0,1],再绘制s随q变化的曲线。以下是具体实现步骤:

1. 定义求解单个q对应s的函数

利用R的uniroot函数寻找方程的根,设置s的搜索区间为[0,1],同时处理可能的无解情况:

# 定义给定q时求解s的函数
solve_s_for_q <- function(q, L, theta, gamma, alpha) {
  # 构造关于s的目标函数:偏导等于0
  target_func <- function(s) {
    partial_derivative_pi(q, L, theta, gamma, alpha, s)
  }
  
  # 尝试求解根,处理区间内函数值同号等无解情况
  tryCatch({
    result <- uniroot(target_func, interval = c(0, 1))
    return(result$root)
  }, error = function(e) {
    return(NA) # 无解时返回NA
  })
}

2. 生成q的取值序列

生成足够多的q值点保证曲线平滑:

# 从0到1生成100个均匀分布的q值
q_vals <- seq(0, 1, length.out = 100)

3. 批量求解每个q对应的s

用sapply批量处理所有q值:

# 求解每个q对应的s
s_vals <- sapply(q_vals, solve_s_for_q, L = L, theta = theta, gamma = gamma, alpha = alpha)

4. 整理数据并绘制图像

提供两种绘图方式,按需选择:

方式1:基础绘图

# 过滤含NA的无效数据
valid_data <- data.frame(q = q_vals, s = s_vals)[!is.na(s_vals), ]

# 绘制曲线
plot(valid_data$q, valid_data$s, type = "l", lwd = 2,
     xlab = "q", ylab = "s", main = "s随q的变化曲线",
     xlim = c(0,1), ylim = c(0,1))
grid() # 添加网格线辅助观察

方式2:ggplot2绘图(美观度更高)

先确保安装并加载ggplot2包:

# 安装并加载ggplot2
if (!require(ggplot2)) {
  install.packages("ggplot2")
  library(ggplot2)
}

# 绘制曲线
ggplot(valid_data, aes(x = q, y = s)) +
  geom_line(linewidth = 1.2, color = "#2E86AB") +
  labs(x = "q", y = "s", title = "s随q的变化曲线") +
  xlim(0, 1) +
  ylim(0, 1) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

注意事项

  • 若部分q值对应的方程在[0,1]内无解,会返回NA,绘图时会自动跳过这些点,可检查此类q值确认是否为函数定义或参数设置问题。
  • 可调整seq的length.out参数增加q的取值点,让曲线更平滑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:48:23