为 Ramanujan 嵌套部首编写函数
Writing a function for Ramanujan nested radicals
我正在为 R 中的 Ramanujan 嵌套部首编写一个函数。Ramanujan 嵌套部首方程如下:
我需要将 n 作为唯一的输入参数。我不确定如何在 R 中对其进行编码。
我觉得应该这样
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
使用递归:
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
以大约 50-60 的机器精度达到 3 的极限:
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
我正在为 R 中的 Ramanujan 嵌套部首编写一个函数。Ramanujan 嵌套部首方程如下:
我需要将 n 作为唯一的输入参数。我不确定如何在 R 中对其进行编码。
我觉得应该这样
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
使用递归:
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
以大约 50-60 的机器精度达到 3 的极限:
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