zoukankan      html  css  js  c++  java
  • 三对角矩阵(Tridiagonal Matrices)的求法:Thomas Algorithm(TDMA)

    转载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];
    }
  • 相关阅读:
    Linux下安装confluence汉化破解版
    某种可以解决一切问题的方法
    普通平衡树(treap)
    文艺平衡树(splay模板)
    [CQOI2015]任务查询系统
    [NOIP2016]天天爱跑步
    NOI2018_Day1_T1_归程
    Picture
    bzoj3524 Couriers
    bzoj2588 counting on a tree
  • 原文地址:https://www.cnblogs.com/wft1990/p/5947162.html
Copyright © 2011-2022 走看看