轉載http://www.cnblogs.com/xpvincent/archive/2013/01/25/2877411.html
做三次樣條曲線時,需要解三對角矩陣(Tridiagonal Matrices)。常用解法為Thomas Algorithm,又叫The tridiagonal matrix algorithm (TDMA)。它是一種基於高斯消元法的算法, 分為兩個階段:向前消元forward elimination和回代backward substitution。本文以一個6乘6矩陣為例,介紹一下使用TDMA的求解過程。
1.范例求解

步驟1: 將矩陣變為上三角矩陣
首先要把上面公式中的系數矩陣變為一個上三角矩陣。
第一行:

將上式除以b1:

可寫作:

所以矩陣方程可寫為:

第二行:
將變換后的第一行乘以a2,再與第二行相減,即可消去x1,得:

所以新的矩陣方程為:

同理可推,
第三行:

第四行:

第五行:

第六行:

最后得到新的上三角矩陣公式為:

步驟2:求解
x逆序可以求出,如下:






2. 一般性公式:




注意:
使用TDMA求解,系數矩陣需時diagonally dominant, 即:

3. 實現代碼(C語言)
void tdma(float x[], const size_t N, const float a[], const float b[], float c[]) { size_t n; c[0] = c[0] / b[0]; x[0] = x[0] / b[0]; for (n = 1; n < N; n++) { float m = 1.0f / (b[n] - a[n] * c[n - 1]); c[n] = c[n] * m; x[n] = (x[n] - a[n] * x[n - 1]) * m; } for (n = N - 1; n-- > 0; ) x[n] = x[n] - c[n] * x[n + 1]; }
