On 7/12/05, Robin Hankin <[EMAIL PROTECTED]> wrote: > Hi > > I want to write a little function that takes a vector of arbitrary > length "n" and returns a matrix of size n+1 by n+1. > > I can't easily describe it, but the following function that works for > n=3 should convey what I'm trying to do: > > > f <- function(x){ > matrix(c( > 1 , 0 , 0 , 0, > x[1] , 1 , 0 , 0, > x[1]*x[2] , x[2] , 1 , 0, > x[1]*x[2]*x[3], x[2]*x[3], x[3], 1 > ), > 4,4, byrow=T) > } > > f(c(10,7,2)) > [,1] [,2] [,3] [,4] > [1,] 1 0 0 0 > [2,] 10 1 0 0 > [3,] 70 7 1 0 > [4,] 140 14 2 1 > > > > > As one goes down column "i", the entries get multiplied by successive > elements of x, starting with x[i], after the first "1" > > As one goes along a row, one takes a product of the tail end of x, > until the zeroes kick in.
I have not checked this generally but at least for the 4x4 case its inverse is 0 except for 1s on the diagonal and -x on the subdiagonal. We can use diff on a diagonal matrix to give a matrix with a diagonal and superdiagonal and then massage that into the required form, invert and round -- leave off the rounding if the components of x are not known to be integer. round(solve(diag(4) - t(diff(diag(5))[,1:4])+diag(4) * c(0,x))) ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html