[R] Fwd: Quadratic programming, for loop

Eric Berger er|cjberger @end|ng |rom gm@||@com
Tue Jun 26 10:24:16 CEST 2018

``` The statement

dvec <- -hsmooth

looks like it might be the source of the problem, depending on what hsmooth
is.

On Tue, Jun 26, 2018 at 11:16 AM, Maija Sirkjärvi <maija.sirkjarvi using gmail.com
> wrote:

> Thanks for the reply! I got that figured out, but still have some problems
>
> It seems that my Amat and dvec are incompatible. Amat is a matrix of zeros
> size: *2*J-3,J* and dvec is a vector of length *J*. There should be no
> problem, but apparently there is. The piece of code looks like this:
>
> Dmat <- matrix(0,nrow= J, ncol=J)
> diag(Dmat) <- 1
> dvec <- rep(0,J)
> dvec
> dvec <- -hsmooth
> Aeq <- 0
> beq <- 0
> Amat <- matrix(0,2*J-3,J)
> bvec <- rep(0,2*J-3)
>
> for(j in 2:J)
> {
> Amat[j-1,j-1] = -1
> Amat[j-1,j] = 1
> bvec[j-1] = Delta1
> }
>
> for(j in 3:J)
> {
> Amat[J-1+j-2,j] = -1/(Q[j] - Q[j-1])
> Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2])
> Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2])
> bvec[J-1+j-2]= Delta2
> }
>
> solution <- solve.QP(Dmat, dvec, Amat, bvec)
>
>
> 2018-06-14 15:52 GMT+03:00 Boris Steipe <boris.steipe using utoronto.ca>:
>
> > Keep replies on list please.
> >
> > You are not accessing a value from vector Q if you access the zero'th
> > element!
> > R > Q <- c(3, 5, 8)
> > R > Q[0]
> > numeric(0)
> > R > Q[1]
> > [1] 3
> > R > Q[2]
> > [1] 5
> >
> > In the first iteration of the loop j is 2 thus j-2 is 0 and that's the
> > reason for the error message: you are trying to replace a matrix element
> > with a zero-length (i.e. unassigned) numeric value. Perhaps, in your
> mind,
> > you are mixing up the index of a vector element and its value? If you
> need
> > two zeros to start your vector, do something like
> >
> > R > Q <- c(0, 0, Q)
> > R > Q
> > [1] 0 0 3 5 8
> >
> >
> > Clear now?
> > B.
> >
> >
> >
> > > On 2018-06-14, at 01:22, Maija Sirkjärvi <maija.sirkjarvi using gmail.com>
> > wrote:
> > >
> > > Many thanks for your message!
> > >
> > > The thing is that I need  Q[j-2] to be zero for the first two
> iterations
> > because I don't have those values (J starts from 1). Do you have any idea
> > how to do it?
> > >
> > > Thanks again!
> > >
> > > Maija
> > >
> > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <boris.steipe using utoronto.ca>:
> > > Q[j-2] gives you Q[0] in your first inner loop iteration.
> > > R arrays start at one.
> > >
> > > B.
> > >
> > >
> > > > On 2018-06-13, at 07:21, Maija Sirkjärvi <maija.sirkjarvi using gmail.com>
> > wrote:
> > > >
> > > >  Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2])
> > >
> > >
> >
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help