【问题标题】:Writing a function for Ramanujan nested radicals为 Ramanujan 嵌套部首编写函数
【发布时间】:2021-12-28 11:21:19
【问题描述】:

我正在为 R 中的 Ramanujan 嵌套部首编写一个函数。Ramanujan 嵌套部首方程如下:

我需要将 n 作为唯一的输入参数。我不知道如何在 R 中编码。

【问题讨论】:

  • 正如你所写的公式,它是一个无限嵌套的部首。你打算如何停止有限的 n?
  • 我要问n的值。说 n = 5 那么这个系列应该是: (Sqrt(1+2 Sqrt(1+3 Sqrt (1+4 Sqrt(1+5)) @G5W

标签: r loops nested-loops


【解决方案1】:

我认为应该这样做

RNR <- function(N) Reduce(function(n, x) sqrt(1 + n * x), 2:N, 1, right = TRUE)

sapply(2:10, RNR) #only valid for N>1
[1] 1.732051 2.236068 2.559830 2.755053 2.867103 2.929173 2.962723 2.980554 2.989920

【讨论】:

  • 如何得到一个最终值? f = sum(sapply(2:10,RNR)
  • 不,RNR(n) 是最终值。只需将 n 设置为大(例如在 sapply 或循环中)即可获得限制。
【解决方案2】:

使用递归:

ram <- Vectorize(function(n, r = 1) ifelse(n <= 1, r, ram(n - 1, sqrt(1 + n*r))))
ram(1:5)
[1] 1.000000 1.732051 2.236068 2.559830 2.755053

达到 3 的极限,机器精度在 50-60 左右:

3 - ram(seq(10, 100, 10))
[1] 1.007964e-02 1.211940e-05 1.317704e-08 1.382006e-11 1.421085e-14 0.000000e+00
[7] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00

【讨论】:

  • 谢谢@jblood94
猜你喜欢
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多