swh:1:snp:887de40c312a4259a22e92c95293ef0f709b045b
Tip revision: f0ba8a5d88ce30d08c8312fd9b882f2ff051d91b authored by Hans W. Borchers on 25 August 2018, 21:00:11 UTC
version 2.1.5
version 2.1.5
Tip revision: f0ba8a5
trisolve.Rd
\name{trisolve}
\alias{trisolve}
\title{
Tridiagonal Linear System Solver
}
\description{
Solves tridiagonal linear systems \code{A*x=rhs} efficiently.
}
\usage{
trisolve(a, b, d, rhs)
}
\arguments{
\item{a}{diagonal of the tridiagonal matrix \code{A}.}
\item{b, d}{upper and lower secondary diagonal of \code{A}.}
\item{rhs}{right hand side of the linear system \code{A*x=rhs}.}
}
\details{
Solves tridiagonal linear systems \code{A*x=rhs} by applying Givens
transformations.
By only storing the three diagonals, \code{trisolve} has memory requirements
of \code{3*n} instead of \code{n^2} and
is faster than the standard \code{solve} function for larger matrices.
}
\value{
Returns the solution of the tridiagonal linear system as vector.
}
\note{
Has applications for spline approximations and for solving boundary value
problems (ordinary differential equations).
}
\references{
Gander, W. (1992). Computermathematik. Birkhaeuser Verlag, Basel.
}
\seealso{
\code{\link{qrSolve}}
}
\examples{
set.seed(8237)
a <- rep(1, 100)
e <- runif(99); f <- rnorm(99)
x <- rep(seq(0.1, 0.9, by = 0.2), times = 20)
A <- diag(100) + Diag(e, 1) + Diag(f, -1)
rhs <- A \%*\% x
s <- trisolve(a, e, f, rhs)
s[1:10] #=> 0.1 0.3 0.5 0.7 0.9 0.1 0.3 0.5 0.7 0.9
s[91:100] #=> 0.1 0.3 0.5 0.7 0.9 0.1 0.3 0.5 0.7 0.9
}
\keyword{ array }