Tridiagonal matrix algorithm - Wikipedia, the free encyclopedia
Page 1 of 3
H p us improve Wikipedia by supporting
Tridiagonal elmatrix algorithmit financially.
From Wikipedia, the free encyclopedia
The tridiagonal matrix algorithm (TDMA), also known as the Thomas algorithm, is a simplified
form of Gaussian elimination that can be used to solve tridiagonal systems of equations. A
tridiagonal system may be written as
where
and
. In matrix form, this system is written as
For such systems, the solution can be obtained in O(n) operations instead of O(n3) required by
Gaussian elimination. A first sweep eliminates the ai's, and then an (abbreviated) backward
substitution produces the solution. Example of such matrices commonly arise from the discretization
of 1D problems (e.g. the 1D Poisson problem).
Contents
1 Method
1.1 Implementation in C
2 Variants
3 References
4 External links
Method
See the derivation.
The first step consists of modifying the coefficients as follows, denoting the new modified
coefficients with primes:
http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm
10/6/2007
Tridiagonal matrix algorithm - Wikipedia, the free encyclopedia
Page 2 of 3
This is the forward sweep. The solution is then obtained by back substitution:
Implementation in C
The following C function will solve a general tridiagonal system. Note that the index i here is zero
based, in other words
where n is the number of unknowns.
//Fills solution into x. Warning: will modify c and d!
void TridiagonalSolve(const double *a, const double *b, double *c, double *d, double *x, unsigned int
int i;
//Modify the coefficients.
c[0] = c[0]/b[0];
d[0] = d[0]/b[0];
double id;
for(i = 1; i != n; i++){
id = 1.0/(b[i] - c[i - 1]*a[i]);
c[i] = c[i]*id;
d[i] = (d[i] - a[i]*d[i - 1])*id;
}
//Division by zero risk.
//Division by zero risk.
//Last value calculated is redundant.
//Now back substitute.
x[n - 1] = d[n...