[R] Solving a tridiagonal system

Liaw, Andy andy_liaw at merck.com
Wed Oct 1 16:54:17 CEST 2003


I see that the LAPACK routine DGTSV is in the R source, and defined in
R_ext/lapack.h,  but I don't know how to get to it from R.

Andy

> -----Original Message-----
> From: Roger Koenker [mailto:roger at ysidro.econ.uiuc.edu] 
> Sent: Wednesday, October 01, 2003 10:33 AM
> To: Thomas W Blackwell
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] Solving a tridiagonal system
> 
> 
> SparseM is really intended for arbitrary sparse structure,
> for banded structural there are much more efficient methods, 
> some of which are, if I'm not mistaken, now available in lapack.
> 
> 
> url:	www.econ.uiuc.edu/~roger/my.html	Roger Koenker
> email	rkoenker at uiuc.edu			Department of Economics
> vox: 	217-333-4558				University of Illinois
> fax:   	217-244-6678				
> Champaign, IL 61820
> 
> On Wed, 1 Oct 2003, Thomas W Blackwell wrote:
> 
> > Will  -
> >
> > Take a look at Roger Koenker's package  SparseMatrix, 
> available from 
> > CRAN.  Look also for some other package from Roger which depends on 
> > SparseMatrix, but has a different name.  It's a place to look.  I 
> > don't recall whether it will answer your need or not.
> >
> > -  tom blackwell  -  u michigan medical school  -  ann arbor  -
> >
> > On Wed, 1 Oct 2003, Will Harvey wrote:
> >
> > > I need to find solutions to a tridiagonal system. By
> > > this I mean a set of linear equations Ax = d where A
> > > is a square matrix containing elements A[i,i-1],
> > > A[i,i] and A[i,i+1] for i in 1:nrow, and zero
> > > elsewhere. R is probably not the ideal way to do this,
> > > but this is part of a larger problem that requires R.
> > >
> > > In my application it is much easier (and much faster)
> > > to generate the diagonal and off-diagonal elements of
> > > A as vectors, i.e. a = A[i,i-1], b = A[i,i] and c = 
> A[i,i+1]. So I 
> > > have three vectors that define A, along with a solution vector d. 
> > > The conventional method of solving such systems is to use the 
> > > so-called "Thomas algorithm", see e.g.
> > > 
> <http://www.enseeiht.fr/hmf/travaux/CD0001/travaux/optmfn/hi/0
1pa/hyb74/node24.html>.
> > This is very easy to code, but much more difficult to
> > "vectorize". Is anyone aware of a library that
> > contains a fast implementation of this algorithm?
> >
> > Another alternative is to use backsolve. I can easily eliminate the 
> > lower diagonal a, but I'm still left with b and c, whereas backsolve 
> > requires a matrix. Again, I can write a function to read b and c 
> > into a matrix, but this requires loops, and is too slow. Is
> > there a vectorized way of doing it? Of course, the
> > diag command works for b, but what about c? In Octave,
> > diag allows for an offset, but R apparently does not.
> >
> > I would appreciate any and all assistance you experts
> > can offer. Thanks in advance.
> >
> > Will Harvey
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list 
> > https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> >
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list 
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help




More information about the R-help mailing list