# [R] Problems dealing with matrices

halim10-fes halim10-fes at sust.edu
Thu Nov 28 08:17:24 CET 2013

```Hi,

Sorry for continuous bothering. Continuum of the previous problem...

I have the following matrices and vectors,

dcmat<-matrix(c(0.13,0.61,0.25,0.00,0.00,0.00,0.52,0.37,0.09,0.00,0.00,0.00,
0.58,0.30,0.11,0.00,0.00,0.00,0.46,0.22,0.00,0.00,0.00,0.00,
0.09),nrow=5,ncol=5)

volini<-matrix(c(0,0,0,0,0),nrow=5,ncol=1)

volinp1<-c(0, 0.0004669094, 0.0027610861, 0.0086204692, 0.0200137754,
0.0389069106 ,0.0670942588, 0.1060941424, 0.1570990708, 0.2209672605,
0.2982420945, 0.3891882830, 0.4938361307, 0.6120278338, 0.7434618363,
0.8877329008, 1.0443667375, 1.2128488387, 1.3926476912, 1.5832328410,
1.7840884399, 1.9947229566, 2.2146757191, 2.4435209092, 2.6808695568,
2.9263700050, 3.1797072430, 3.4406014299, 3.7088058696, 3.9841046430,
4.2663100561, 4.5552600226, 4.8508154713, 5.1528578389, 5.4612866929,
5.7760175114, 6.0969796345, 6.4241143947, 6.7573734248, 7, 7 ,7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,  7,
7, 7, 7)

I've calculated the following matrices vol and volyrdc1 (obviously with the
help of Jeff and Arun):

#Blank matrices for dumping final values

vol <- matrix( NA, nrow=5, ncol=length(volinp1))

volyrdc1<-matrix(NA, nrow=5,ncol=length(volinp1),dimnames=
list(c("DC1","DC2","DC3","DC4","DC5"),c(seq(0,500,5))))

vol[ , 1 ] <- dcmat %*% (volini+(volinp1[1]*wt))

wt<-matrix(c(1,0,0,0,0),nrow=5)

for ( idx in seq_along(volinp1)[ -1 ] ) {
vol[ , idx ] <- dcmat %*% ( vol[ , idx-1 ] + volinp1[idx] * wt )
}

vol

volyrdc1[,1]<-vol[,1]

for ( idx in seq_along(volinp1)[ -1 ] ) {
volyrdc1[ , idx ] <- vol[ , idx-1 ] + volinp1[idx] * wt
}
volyrdc1

My final matrix in 'volyrdc1' (kind of transition matrix model).

Now, what I want to do is to calculate when the colsum<-colSums(volyrdc1)
reaches a certain value and I want to get the index of the element in the
'colsum' vector at that point. For e.g. when colsum[colsum>=18] ? It will give
a series of cases where the condition is true. But I want index of the element
immediately when the condition is met. In this case, the answer I want is 140
(colsum[29] returns both value (18.63) and the character ("140") attributing
the index). Actually, in my case 140 is year (age) when the 'colsum' becomes
>=18. At is point it would be great if I can calculate when 'colsum' levels
off (up to two decimal place)? The answer is: 305 and at that point
colsum==45.37.

I also want to calculate what should be the value in volini[1,1] to get a
certain value in 'colsum' at a certain year (age)(vector element index
explained earlier)? For e.g. I want to find out that what should be the value
in volini[1,1] if I want colsum==18 at 100(charater attributing colsum[21])?
The answer is: 15910 and the 'volini' matrix will look like:

volini<-matrix(c(15910,0,0,0,0),nrow=5,ncol=1)

Any pointer, suggestions,... will be gratefully acknowledged.

P.S. Can you please suggest me any effective R programming book that describe
core elements of R programming?

Regards,

Halim
---------------
Md. Abdul Halim
Assistant Professor
Department of Forestry and Environmental Science
Shahjalal University of Science and Technology,Sylhet-3114,
Cell: +8801714078386.
alt. e-mail: xou03 at yahoo.com

On Tue, 26 Nov 2013 20:21:14 -0800 (PST), arun wrote
> HI Halim,
>
> No problem.
> Regards,
> Arun
>
> On Tuesday, November 26, 2013 11:18 PM, halim10-fes <halim10-
> fes at sust.edu> wrote: Hi Arun,
>
> Thanks for your help. Sorry for my late response. Take care and stay
> fine.
>
> Regards,
>
> Halim
>
> On Sun, 24 Nov 2013 07:45:24 -0800 (PST), arun wrote
> > Hi Halim,
> > I guess this works for you.  Modifying Jeff's solution:
> >
> > volinp<-c(0,0.000467,0.002762,0.008621,0.020014,0.038907,0.067094)
> > vol1 <- dcmat %*% (volmat +wt)
> > for(idx in seq_along(volinp)[-1]){
> >  vol1 <- cbind(vol1,dcmat %*% (vol1[,idx-1] + volinp[idx] *wt))
> >  }
> >
> > #or
> >
> > vol <- matrix( NA, nrow=5, ncol=length( volinp ) )
> > vol[ , 1 ] <- dcmat %*% ( volmat + wt )
> >
> > for ( idx in seq_along(volinp)[ -1 ] ) {
> >   vol[ , idx ] <- dcmat %*% ( vol[ , idx-1 ] + volinp[idx] * wt )
> > }
> > identical(vol,vol1)
> > #[1] TRUE
> >
> > A.K.
> >
> > On Sunday, November 24, 2013 7:16 AM, halim10-fes <halim10-
> > fes at sust.edu> wrote: Hi Arun,
> >
> > OK, no problem. Thank you very much for your attention. I've posted
> > an annex to my previous problem. I will appreciate your
> >
> > Off-topic: You're a very helpful man. I like your attitude to
> > helping others.
> >
> > Take care.
> >
> > Halim
> >
> > On Sun, 24 Nov 2013 01:18:18 -0800 (PST), arun wrote
> > > Hi,
> > > Please disregard my earlier message. Looks like Jeff understand it
> > > better and answered it. Regards, Arun
> > >
> > > On Sunday, November 24, 2013 3:23 AM, arun <smartpink111 at yahoo.com>
wrote:
> > > Hi,
> > > I am finding some inconsistency with your description.
> > > For example:
> > > volinp[1]+volmat[1,1]
> > > [1] 101
> > >
> > > On Sunday, November 24, 2013 1:52 AM, halim10-fes <halim10-
> > > fes at sust.edu> wrote:
> > >
> > > Please apologize me! Earlier I've sent a message erroneously.
> > > Following is the original problem for which I'm seeking help.
> > > Extremely sorry...
> > >
> > > Hi Arun,
> > >
> > > Thank you very much for your response. Sorry, if I couldn't explain
> > > clearly. I think, I should restate the problem to get exactly what I
> > > want. Here it goes:
> > >
> > > I have 2 matrices and 1 vector, namely,
> > >
> > > dcmat<-matrix(c(0.13,0.61,0.25,0.00,0.00,0.00,0.52,0.37,0.09,0.00,
> > > 0.00,0.00,                 0.58,0.30,0.11,0.00,0.00,0.00,0.46,0.22,
> > > 0.00,0.00,0.00,0.00,                 0.09),nrow=5,ncol=5)
> > >
> > > volmat<-matrix(c(100,0,0,0,0),nrow=5,ncol=1)
> > >
> > > volinp<-c(1:40)
> > >
> > > What I essentially want to do is to multiply 'dcmat' with 'volmat'
> > > and dump the output in a new matrix 'vol'. But before that, in the
> > > first step, I want to add volinp[1] with volmat[1,1]. So, the first
> > > column of the output matrix 'vol' matrix will be:
> > >
> > >         [,1]
> > > [1,]   13.13
> > > [2,]   61.61
> > > [3,]   25.25
> > > [4,]    0.00
> > > [5,]    0.00
> > >
> > > In the 2nd step, I want to replace 'volmat' with vol[,1] and add
> > > volinp[2] with vol[1,1]. The new 'volmat' will look like:
> > >
> > >         [,1]
> > > [1,]   15.13
> > > [2,]   61.61
> > > [3,]   25.25
> > > [4,]    0.00
> > > [5,]    0.00
> > >
> > > Then multiply 'dcmat' with the new 'volmat', and the 2nd column of
> > > output matrix 'vol' will look like:
> > >
> > >         [,2]
> > > [1,]  1.9669
> > > [2,] 41.2665
> > > [3,] 41.2232
> > > [4,] 13.1199
> > > [5,]  2.7775
> > >
> > > Then again, replace the 'volmat' with vol[,2], add volinp[3] with
> > > vol[1,2] and multiply the new 'volmat' with 'dcmat'. This
> > > replacement, addition, multiplication, and dumping will continue up
> > > to the length of 'volinp' and the final output matrix 'vol' will be
> > > something like:
> > >
> > >       [,1]    [,2]      [,3]    ...length(volinp)
> > > [1,] 13.13   1.9669   0.645697  ...
> > > [2,] 61.61  41.2665  24.488389  ...
> > > [3,] 25.25  41.2232  40.419786  ...
> > > [4,]  0.00  13.1199  22.116099  ...
> > > [5,]  0.00   2.7775   7.670905  ...
> > >
> > > Within my limited capacity, I've tried to come up with a solution
> > > but failed.
> > >
> > > I'll appreciate your/others' help with gratefulness.
> > >
> > > Regards,
> > >
> > > Halim
> > >
> > > ---------------
> > > Md. Abdul Halim
> > > Assistant Professor
> > > Department of Forestry and Environmental Science
> > > Shahjalal University of Science and Technology,Sylhet-3114,
> > > Cell: +8801714078386.
> > > alt. e-mail: xou03 at yahoo.com
> > >
> > > On Sat, 23 Nov 2013 14:10:12 -0800 (PST), arun wrote
> > > > Hi,
> > > > Could you show your expected output?  It is a bit unclear from the
> > > description.
> > > >
> > > > On Saturday, November 23, 2013 2:00 PM, halim10-fes <halim10-
> > > > fes at sust.edu> wrote: Dear R-friends,
> > > >
> > > > Hope you doing well. I've been trying to deal with the following
> > > > problem for the couple of days but couldn't come up with a solution.
> > > > It would be great if any of you could give some insight into it.
> > > >
> > > > I have three matrices like:
> > > >
> > > > dcvol<-matrix(c(0.13,0.61,0.25,0.00,0.00,0.00,0.52,0.37,0.09,0.00,
> > > > 0.00,0.00,                 0.58,0.30,0.11,0.00,0.00,0.00,0.46,0.22,
> > > > 0.00,0.00,0.00,0.00,                 0.09),nrow=5,ncol=5)
> > > volinp<-
> > > > matrix(c(100,0,0,0,0),nrow=5,ncol=1)
> > > >
> > > > scvol<-matrix(c(1:40),nrow=5,ncol=8)
> > > >
> > > > What I essentially want to do is to add each value in scvol[1,] with
> > > > the volinp[1,1] and then multiply each new volinp with dcvol and
> > > > finally put the outputs in a new matrix.
> > > >
> > > > Thanks in advance.
> > > >
> > > > Halim
> > > > ---------------
> > > > Md. Abdul Halim
> > > > Assistant Professor
> > > > Department of Forestry and Environmental Science
> > > > Shahjalal University of Science and Technology,Sylhet-3114,
> > > > Cell: +8801714078386.
> > > > alt. e-mail: xou03 at yahoo.com
> > > >
> > > > --
> > > > This message has been scanned for viruses and
> > > > dangerous content by MailScanner, and is
> > > > believed to be clean.
> > > >
> > > > ______________________________________________
> > > > R-help at r-project.org mailing list
> > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > guide.html
> > > > and provide commented, minimal, self-contained, reproducible code.
> > >
> > > --
> > > This message has been scanned for viruses and
> > > dangerous content by MailScanner, and is
> > > believed to be clean.
> > >
> > > --
> > > This message has been scanned for viruses and
> > > dangerous content by MailScanner, and is
> > > believed to be clean.
>
> >
> > ---------------
> > Md. Abdul Halim
> > Assistant Professor
> > Department of Forestry and Environmental Science
> > Shahjalal University of Science and Technology,Sylhet-3114,
> > Cell: +8801714078386.
> > alt. e-mail: xou03 at yahoo.com
> >
> > --
> > This message has been scanned for viruses and
> > dangerous content by MailScanner, and is
> > believed to be clean.
> >
> > --
> > This message has been scanned for viruses and
> > dangerous content by MailScanner, and is
> > believed to be clean.
>
> ---------------
> Md. Abdul Halim
> Assistant Professor
> Department of Forestry and Environmental Science
> Shahjalal University of Science and Technology,Sylhet-3114,
> Cell: +8801714078386.
> alt. e-mail: xou03 at yahoo.com
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.

---------------
Md. Abdul Halim
Assistant Professor
Department of Forestry and Environmental Science
Shahjalal University of Science and Technology,Sylhet-3114,