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

R语言函数迭代求助:新手需多次运行MC函数并计算标准差

解决R语言蒙特卡洛模拟的多次迭代问题

嘿,别担心,新手阶段遇到这类问题太正常了!你的基础函数已经搭得很好了,咱们来一步步实现多次迭代、计算标准差和绘制直方图的需求,这里有几种简单好用的方法:

方法1:用for循环实现迭代

如果你习惯用循环的思路,可以先创建一个空向量来存储每次迭代的结果,然后循环调用你的MC函数:

# 先设定你想要的迭代次数,比如1000次
n_times <- 1000

# 创建一个空向量,用来存放每次得到的r值
all_r <- numeric(n_times)

# 循环执行函数,把结果存入向量
for (idx in 1:n_times) {
  all_r[idx] <- MC(1, 1)
}

拿到结果向量后,计算标准差和绘制直方图就很简单了:

# 计算所有r值的标准差
sd(all_r)

# 绘制直方图
hist(all_r, main = "直方图:模拟得到的r值分布", xlab = "r值", col = "lightgreen")

方法2:用replicate函数(更简洁的R风格写法)

R里有个专门用来重复执行函数的工具——replicate,它能帮你省去写循环的麻烦,代码更简洁:

# 直接生成1000次迭代的r值向量
all_r <- replicate(1000, MC(1, 1))

# 计算标准差
sd(all_r)

# 绘制更美观的直方图
hist(all_r, 
     main = "蒙特卡洛模拟r值的分布", 
     xlab = "r", 
     col = "lightblue",
     border = "white")

进阶:优化函数,一次生成多个结果

如果你的迭代次数非常多(比如上万次),可以优化原函数,让它直接生成多个样本,效率会更高:

# 优化后的向量版函数,支持指定生成n个r值
MC_vectorized <- function(PV, t, n) { 
  # 一次生成n个正态分布的i值
  i <- rnorm(n, .056, .01) 
  FV <- PV * exp(i * t) 
  r <- log(FV / PV) 
  return(r)
}

# 直接生成1000个r值
all_r <- MC_vectorized(1, 1, 1000)

这样修改后,函数内部用向量化操作替代了循环,在大数据量下运行速度会快很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:24:10