首页 > 解决方案 > 无循环求和

问题描述

我有以下双重求和: ∑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) 

在此处输入图像描述

或者

    i = rep(1:10, each=5)
    j = rep(i, 10) 
    sum(i^5/(10+j^i))

标签: r

解决方案


做一个内部和的函数:

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

通过对其进行矢量化,您可以将其应用于数组,它将在其中逐个组件地操作:这就是i的外部总和所说的。因此,值为

sum(f(1:10))

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

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

但是,由于它的紧凑性和简单性,它是一种很好的技术。


推荐阅读