R中的总和和产品间隔

时间:2013-09-09 19:00:22

标签: r sum

我正在尝试在R中实现以下简单公式:

  • 公式1:

enter image description here

当间隔的限制非常大时(例如,上限的值= 10,000而不是5),我不知道如何在R中实现产品运算符

  • 公式2

enter image description here

第二个公式的示例输入(实际上,区间S的维度要大得多)

 S = list(c(1,0,0), c(0,1,0), c(0,0,1))
 X = c(1,2,3)

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

首先,请记录日志:

i *log(1+x)

对于第二个公式:(不清楚预期的输出是什么)

ss<-matrix(unlist(S), ncol = 3, byrow = TRUE)
X<-as.matrix(X)
crossprod(crossprod(X,ss),t(X))

  [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    4    6
[3,]    3    6    9

答案 1 :(得分:2)

也许更紧凑:

第一个公式:

function(n, x) exp(sum(seq_len(n)*log(1+x)))

第二个公式:

function(X, S) rowSums(sapply(S, function(y) sum(X*y)*X ))

答案 2 :(得分:1)

 S = list c((1,0,0), c(0,1,0), c(0,0,1))
 X = c(1,2,3)

 lapply( lapply(S, function(x) X %*% x %*% t(X) ) , sum)
[[1]]
[1] 6

[[2]]
[1] 12

[[3]]
[1] 18

答案 3 :(得分:1)

对于第一个公式,已经提到最好在对数刻度上执行此操作,如果x的真实值接近0,那么log1p函数可能会有所帮助。

通常,对于这些类型的问题,您可以使用lapplysapply来计算需要乘以或求和(或其他)的片段,然后使用sum或{{ 1}}求和,相乘。如果要将值折叠/组合到没有像prodsum这样的好函数的运算符,请使用prod函数。