0

我正在尝试在 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)

任何帮助,将不胜感激!

4

4 回答 4

2

也许更紧凑:

第一个公式:

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

第二个公式:

function(X, S) rowSums(sapply(S, function(y) sum(X*y)*X ))
于 2013-09-09T20:23:26.320 回答
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
于 2013-09-09T19:04:38.980 回答
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
于 2013-09-09T19:37:48.770 回答
1

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

一般来说,对于这些类型的问题,您可以使用lapplyorsapply计算需要相乘或相加(或其他)的部分,然后使用sumorprod相加,相乘。如果你想用一个没有很好功能的运算符折叠/组合这些值,sum或者prod然后使用该Reduce函数。

于 2013-09-09T22:32:03.893 回答