Skip to content
Prev 333786 / 398506 Next

Problems dealing with matrices

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
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?

Thanks in advance.

Regards,

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







On Tue, 26 Nov 2013 20:21:14 -0800 (PST), arun wrote
wrote:
---------------
Md. Abdul Halim
Assistant Professor
Department of Forestry and Environmental Science
Shahjalal University of Science and Technology,Sylhet-3114,
Bangladesh.
Cell: +8801714078386.
alt. e-mail: xou03 at yahoo.com