R 无循环求和

R 无循环求和,r,R,我有以下双重总结:∑10,i=1∑i、 j=1(i^5/(10+j^i)) 我对这个练习很迷茫,我尝试了下面的代码,但是我发现它返回了一个错误,虽然给了我一个数字——我很确定它是不正确的。任何帮助都是非常宝贵的 i <- seq(1, 10, 1) j <- seq(1, i, 1) denominators <- 10+j^i fractions <- (i^5)/denominators sum(fractions) 将

我有以下双重总结:∑10,i=1∑i、 j=1(i^5/(10+j^i))

我对这个练习很迷茫,我尝试了下面的代码,但是我发现它返回了一个错误,虽然给了我一个数字——我很确定它是不正确的。任何帮助都是非常宝贵的

    i <- seq(1, 10, 1) 
    j <- seq(1, i, 1)
    denominators <- 10+j^i
    fractions <- (i^5)/denominators
    sum(fractions) 

将内部和作为函数:

f <- Vectorize(function(i) {
         j <- 1:i
         sum(i^5 / (10 + j^i))
     })

另一种解决方案浪费RAM,速度稍慢,利用外积计算一个矩阵中的双和的所有项。您必须提取
j
不超过
i
的术语:

n <- 10
x <- outer(1:n, 1:n, function(i,j) i^5 / (10 + j^i))
sum(x[!upper.tri(x)])

n您可以展开所有可能的i/j组合,然后汇总所有项

i <- 1:10
ii <- rep(i, i)
jj <- unlist(sapply(i, function(x) seq(1,x)))
sum(ii^5/(10+jj^ii))
# [1] 20835.22

ir中的所有内容都是矢量化的:

i <- seq(10)
j <- sequence(i)
i_use <- rep(i,i)

sum(i_use^5/(10 + j^i_use))
[1] 20835.22

i这个问题现在已经得到了相当彻底的回答,但我将抛出另一个问题
使用
Map()
/
Reduce()
使用不同的技术混合解决方案:

i9求和序列(n)1000 131.5ms 142.1ms 7.01 11.46MB 1.75
#>10总和减少(n)1000 107.5ms 115ms 8.32 5.85MB 1.66

有趣。。。但是缩放到更大的总和是非常糟糕的。当我运行此代码时,它会显示错误:>x sum(x[!upper.tri(x)])错误:找不到对象“x”。我做错什么了吗?对不起(你没做错)——粘贴时我掉了一个括号。我已经修复了它。外部产品代码要求将变量
n
设置为
10
;我已经明确地把这句话放了回去。非常感谢你的努力和解决方案,我真的很感激看到解决这个问题的不同方法!
i <- 1:10
ii <- rep(i, i)
jj <- unlist(sapply(i, function(x) seq(1,x)))
sum(ii^5/(10+jj^ii))
# [1] 20835.22
i <- seq(10)
j <- sequence(i)
i_use <- rep(i,i)

sum(i_use^5/(10 + j^i_use))
[1] 20835.22