【发布时间】:2014-03-21 03:31:13
【问题描述】:
我有一个像这样的三重求和表达式
sum(l(from 1 to n))
sum(i(from 1 to m))
sum(t(from 1 to m)
[phil_z1_1[i]*phil_z1_1[t}*I(X(l)<min(y(i),y(t))]
我已经完成了:
set.seed(1234567)
x <- rnorm(2900)
n <- length(x)
y <- rnorm(3000)*0.25
m <-length(y)
z1 <- runif(m,min=0,max=1)
z2 <- runif(m,min=0,max=1)
phil_z1_1 <- sqrt(12*(z1/z2)))
对于min(y[i],y[t]),我做了类似的事情
y_m<-matrix(rep(y,length(y)),ncol=length(y))
y_m_t<-t(y_m)
y_min<-pmin(y_m_t,y_m)
展开后两个内求和,例如m=2,n=3
我可以将原始表达式放入矩阵中,例如x*A*x'
在哪里
x=[phil_z1_1[1] phil_z1_1[2]]
A is a 2*2 matrix
A=[sum(from 1 to n) I(x[l]<=min(y[1],y[1]), sum(from 1 to n) I(x[l]<=min(y1,y2); sum(from 1 to n) I(x[l]<=min(y[2],y[1]), sum(from 1 to n) I(x[l]<=min(y[2],y[2])]
因此,
x*A*x'=[phil_z1_1[1] phil_z1_1[2]]*[sum(from 1 to n) I(x[l]<=min(y[1],y[1]), sum(from 1 to n) I(x[l]<=min(y1,y2); sum(from 1 to n) I(x[l]<=min(y[2],y[1]), sum(from 1 to n) I(x[l]<=min(y[2],y[2])][phil_z1_1[1] phil_z1_1[2]]'
基本上我想为A创建一个m*m矩阵,其中每个单独的元素都等于其对应部分的总和,例如sum(from 1 to n)x[l]<=min(y[1],y[1])将是矩阵A我要创建
我尝试过使用
args <- expand.grid(l=1:n, i=1:m, t=1:m)
args <- subset(args, x[l] <= pmin(y[i],y[t])-z1[i]*z2[t])
args <- transform(args, result=phil_z1_1[i]*phil_z1_1[t])
sum(args[,"result"])
但是r不能运行上面的程序,因为数据集的样本量太大了,3000左右。
谁能告诉我如何解决这个问题?
提前致谢!
【问题讨论】:
-
X函数是什么?为什么要在这样的表达式中使用I()?我怀疑您将数学函数符号与 R 索引混合在一起。你没有y函数,但有一个y向量,所以需要写:y[t]。 (而 3,000 是一个很小的数据集。) -
你可能应该用一两个循环制作一个小得多的测试示例,以确保你掌握了 R 语法的基础知识。