R语言如何生成负指数分布?手动构造等比序列的简便替代方案
R原生实现等比型负指数衰减序列的简便方法
你需要的是公比固定的等比衰减序列,不需要手动逐次乘系数、硬编码向量,也不需要加载第三方包,base R自带的函数就能直接实现:
方法1:累积乘积函数cumprod实现
cumprod会对输入向量做累积求积,完全匹配你「从初始值开始逐次乘以0.6」的手动计算逻辑:
- 如果你要生成和你手动构造长度一致(共20个元素)的序列,代码如下:
# 初始值400,公比0.6,序列长度20 y <- 400 * cumprod(c(1, rep(0.6, 19))) plot(y)
运行结果和你手动输入的向量完全一致,绘制出的就是预期的负指数衰减曲线。
方法2:直接通过指数运算生成
负指数等比衰减的数学本质是第k项 = 初始值 * 公比^(k-1),直接用R的向量化幂运算就能一步生成,计算效率更高:
# 指定序列总长度 seq_length <- 20 y <- 400 * 0.6^(0:(seq_length - 1)) plot(y)
如果你不想固定序列长度,想一直生成到数值衰减到指定阈值(比如小于0.02),可以先通过对数运算算出需要的项数再生成:
# 计算衰减到阈值0.02所需的总项数 threshold <- 0.02 seq_length <- ceiling(log(threshold/400, base = 0.6)) y <- 400 * 0.6^(0:(seq_length - 1))
踩坑说明:你之前用
seq函数生成的是等差数列,相邻项的差值固定,输出自然是线性下降的折线;而你需要的负指数衰减是相邻项的比值固定,属于等比序列,无法直接通过seq的by(步长,即固定差值)参数实现。
内容的提问来源于stack exchange,提问作者Shawn Hemelstrand
相关产品推荐
相关产品推荐

