为拉马努金嵌套部首编写函数

问题描述 投票:0回答:2

我正在R中编写Ramanujan嵌套部首的函数。Ramanujan嵌套部首方程如下: enter image description here

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

r loops nested-loops
2个回答
2
投票

我认为这应该可以实现

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

1
投票

使用递归进行矢量化:

ram <- function(n, r = rep(1, length(n))) {
  i <- which(n > 1)
  if (length(i)) r[i] <- Recall(n[i] - 1, sqrt(1 + n[i]*r[i]))
  r
}

ram(1:5)
#> [1] 1.000000 1.732051 2.236068 2.559830 2.755053

机器精度达到极限 3

n = 57
:

which.max(ram(1:100) == 3)
#> [1] 57

针对已接受答案的基准:

microbenchmark::microbenchmark(
  RNR = sapply(2:100, RNR),
  ram = ram(2:100),
  check = "equal"
)
#> Unit: microseconds
#>  expr      min        lq     mean   median        uq       max neval
#>   RNR 5874.801 6084.7515 6715.348 6193.950 6815.1510 11175.500   100
#>   ram  659.101  737.1515  811.721  776.801  875.1505  1621.401   100
© www.soinside.com 2019 - 2024. All rights reserved.