我正在尝试在 R 中实现以下简单公式:
- 公式1:
当区间的限制非常大(例如上限的值 = 10,000 而不是 5)时,我不知道如何在 R 中实现乘积运算符
- 公式 2
第二个公式的示例输入(实际上,区间 S 的维度要大得多)
S = list(c(1,0,0), c(0,1,0), c(0,0,1))
X = c(1,2,3)
任何帮助,将不胜感激!
也许更紧凑:
第一个公式:
function(n, x) exp(sum(seq_len(n)*log(1+x)))
第二个公式:
function(X, S) rowSums(sapply(S, function(y) sum(X*y)*X ))
首先,获取日志:
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
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
对于第一个公式,已经提到最好在对数刻度上执行此操作,如果 x 的真实值接近 0,则该log1p
函数可能会有所帮助。
一般来说,对于这些类型的问题,您可以使用lapply
orsapply
计算需要相乘或相加(或其他)的部分,然后使用sum
orprod
相加,相乘。如果你想用一个没有很好功能的运算符折叠/组合这些值,sum
或者prod
然后使用该Reduce
函数。