【发布时间】:2018-11-18 04:03:57
【问题描述】:
这就是全部,但它仍然不起作用。我猜问题是第二个 Amat 条件和 if else 结构:
Dmat <- matrix(0,nrow= J, ncol=J)
diag(Dmat) <- 1
dvec <- rep(0,J)
dvec <- -hsmooth
Aeq <- matrix(nrow= J, ncol=0)
beq <- rep(0)
Amat <- matrix(0,J,2*J-3)
bvec <- vector(mode="numeric", length=2*J-3)
for(j in 1:J)
{
Amat[j-1,j-1] = -1
Amat[j,j-1] = 1
bvec[j-1] = Delta1
}
for(j in 2:J){
Amat[j,J-1+j-2] = -1/ (Q[j] - Q[j-1])
if (j==2)
{Amat[j-1,J-1+j-2] = 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - 0)
}
else
{Amat[j-1,J-1+j-2] = 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2])
}
Amat[j-2,J-1+j-2] = -1/ (Q[j-1] - Q[j-2])
bvec[J-1+j-2] = Delta2
}
solution1 <- solve.QP(Dmat, dvec, Amat, bvec, meq=0, factorized=FALSE)
数学形式如下:
min sum(mj- m^),其中 j 从 1 到 J。
圣。
mj-1
1/(Qj-1 -Qj-2)(mj-2 -mj-1)
如果能在这里得到帮助,我将不胜感激。
【问题讨论】:
-
你现在知道
R中的索引是从1 开始的吗? (R不是C!) -
@Roland 拍得好!谢谢你的评论。似乎这种行为对于 OP 来说是不需要的——因此 OP 必须重新考虑代码中的索引逻辑。
-
Delta1和Delta2是什么?在第一个 for 循环中,索引 0 存在同样的问题。 -
dvec <- rep(0,J)已过时,因为您在下一行执行dvec <- -hsmooth。hsmooth是什么?