[R] Solving a tridiagonal system

Roger Koenker roger at ysidro.econ.uiuc.edu
Wed Oct 1 16:32:41 CEST 2003


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/01pa/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
>




More information about the R-help mailing list