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

如何在R中求解递推关系并确定其收敛点

R求解递推关系收敛点操作指南

核心逻辑

  • 递推关系求收敛点的本质是重复执行递推计算,直到前后两次计算结果的差值小于指定精度阈值,此时的结果即可认定为收敛值
  • 优先使用迭代实现,递归实现容易在迭代次数较多时触发栈溢出问题,仅适合迭代深度小的场景

通用实现代码

迭代法实现(推荐)

# 入参说明:
# recur_fun:自定义的递推公式函数
# init_val:递推初始值
# tol:收敛判定精度,可根据考试要求调整
# max_iter:最大迭代次数,避免死循环
solve_recurrence_converge <- function(recur_fun, init_val, tol = 1e-6, max_iter = 10000) {
  current_val <- init_val
  for (i in 1:max_iter) {
    next_val <- recur_fun(current_val)
    if (abs(next_val - current_val) < tol) {
      return(list(收敛值 = next_val, 迭代次数 = i))
    }
    current_val <- next_val
  }
  stop("达到最大迭代次数仍未收敛,请调整初始值或迭代上限")
}

# 调用示例:递推式为x_{n+1} = 0.5*x_n + 2,初始值为0
my_recur <- function(x) {
  0.5 * x + 2
}
result <- solve_recurrence_converge(my_recur, init_val = 0)
# 输出收敛值
print(result$收敛值)

你只需根据题目给出的递推式修改my_recur函数内的计算逻辑,即可适配不同的一阶递推求解需求。

递归法实现(可选)

recur_solve <- function(recur_fun, current_val, tol = 1e-6, iter = 1, max_iter = 10000) {
  next_val <- recur_fun(current_val)
  if (abs(next_val - current_val) < tol || iter >= max_iter) {
    return(next_val)
  }
  Recall(recur_fun, next_val, tol, iter + 1, max_iter)
}

# 调用示例
recur_solve(my_recur, current_val = 0)

高阶递推适配说明

如果是二阶及以上递推,只需调整递推逻辑,每次传入前几步的数值即可,二阶递推示例如下:

# 示例二阶递推:x(n) = 0.6*x(n-1) + 0.3*x(n-2)
solve_2order_recur <- function(init1, init2, tol=1e-6, max_iter=10000) {
  prev2 <- init1
  prev1 <- init2
  for (i in 1:max_iter) {
    current <- 0.6*prev1 + 0.3*prev2
    if (abs(current - prev1) < tol) {
      return(current)
    }
    prev2 <- prev1
    prev1 <- current
  }
  stop("未收敛")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:05