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

已知PV、FV及期数n时如何求解折现率r(附R代码示例)

已知现值、终值、期数求解利率的R实现

你现有实现的复利终值计算函数逻辑正确,对应反求利率有两种常用实现方案:

方案1:公式直接计算(解析解)

根据复利终值公式 FV = PV*(1 + r/100)^n,直接变形就能得到利率的解析表达式,计算零误差、速度最快:

推导结果:r = ((FV / PV)^(1/n) - 1) * 100
注:返回的r为百分比单位,和你现有fv函数的r参数单位完全匹配,可直接传入使用。

对应R代码实现:

# 反求利率的解析解函数
calc_r <- function(pv, fv, n) {
  ((fv / pv) ^ (1/n) - 1) * 100
}

# 测试匹配你给出的示例:PV=100,FV=133.1,r=10时对应期数为3
calc_r(pv = 100, fv = 133.1, n = 3)
#> [1] 10

说明:你题干里写的n=2、r=10的参数组合不匹配FV=133.1的结果——n=2、r=10时计算得到的终值为fv(100, 2, 10) = 121;如果固定PV=100、FV=133.1、n=2,计算得到的利率约为15.37%。

方案2:数值求根(通用场景适配)

如果后续遇到无法直接推导解析解的复杂计息场景(比如有不规则现金流、分段计息等),可以用R内置的uniroot函数做一元方程求根,自动找到让终值计算结果等于目标FV的利率值,不需要手动推导公式:

# 基于uniroot的数值法求利率
calc_r_num <- function(pv, fv, n, lower = 0, upper = 100) {
  # 定义目标函数:找到r使得计算出的fv和目标fv差值为0
  target_fun <- function(r) fv(pv, n, r) - fv
  # 区间搜索求根
  uniroot(target_fun, lower = lower, upper = upper)$root
}

# 测试示例
calc_r_num(pv = 100, fv = 133.1, n = 3)
#> [1] 10

使用数值法时注意:默认搜索的利率区间是0%~100%,如果你的业务场景可能出现负利率、或者利率超过100%,调整lower和upper参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:48:38