R индекс числовой (0) вместо 0 - PullRequest
0 голосов
/ 08 июня 2018

Это все, и это все еще не работает.Я предполагаю, что проблема заключается во втором условии 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 <= mj - delta1 </p>

1 / (Qj-1 -Qj-2) (mj-2 -mj-1) <= 1 / (Qj -Qj-1) (mj-1 - mj) -delta2 </p>

Буду очень признателен, если вам здесь помогут.

1 Ответ

0 голосов
/ 08 июня 2018

R не C.Индексы в R начинаются с 1, а не с нуля.Таким образом, первый элемент в Q ist Q[1].Это не похоже на ряд других (C -инспирированных) языков, но больше похоже на обычную математическую запись.

Так что вы, вероятно, захотите заменить Q[j-2] на Q[j-1].

Редактировать:

Вопрос сильно изменился с тех пор, как я поднял свой ответ.Проблема все еще остается:

for(j in 1:J)
{
    Amat[j-1,j-1] = -1

Wenn j равен 1, тогда j-1 равен нулю и Amat[0,0] не является полезным выражением, когда индексы должны начинаться с 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...