[R] Solving a tridiagonal system

Liaw, Andy
Wed, 01 Oct 2003 14:54:17 -0000

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
>