首页/文章/ 详情

代数方程组求解|TDMA算法

1年前浏览3604

本文介绍TDMA算法。

1 TDMA算法介绍

三对角矩阵算法(TDMA)也称托马斯算法,用于求解具有三对角线系数矩阵的代数方程组。其一般形式为:

对于本书中采用的网格布置,  指的是图中所示的网格点位置。

 

对于  ,可以根据  来求解  ,即:

类似的方式,对于  ,通过式(1),同时借助式(2),可以只用  来表示  ,即有:

对  至  重复上面的操作。

总之,  可以写成  的函数,即:

令式(4)的下标为  ,结合式(1)可得到:

将式(4)  P_i  Q_i$有以下的递归关系:

对于  ,  与  的值为:

对于  ,由于  ,可以得到如下关系式:

TDMA求解算法可以总结为:

 
  1. 利用式(7)计算      与      
  2. 对于      ,利用式(6)采用向前递归的方法计算      与      
  3. 依照式(8)令      
  4. 对于      ,利用式(4)使用向后递归的方法计算      

2 案例练习

矩阵方程为:

可以编写TDMA程序进行求解:

import numpy as np
from pandas import array

def tdma(A,b):
   m,n = A.shape
   p = np.zeros(m)
   q = np.zeros(n)
   phi = np.zeros(m)

   p[0] = -A[0,1]/A[0,0]
   q[0] = b[0]/A[0,0]

   for i in range(1,m):
       if i != m-1 :
           p[i] = -A[i,i 1]/(A[i,i] A[i,i-1]*p[i-1])
       else:
           p[i]= 0
       q[i] = (b[i]-A[i,i-1]*q[i-1])/(A[i,i] A[i,i-1]*p[i-1])

   # 回代
   phi[m-1] = q[m-1]
   for i in range(m-2,-1,-1):
       phi[i] = p[i]*phi[i 1] q[i]

   return phi

# 测试
A = np.array([[20,-5,0,0,0],[-5,15,-5,0,0],
   [0,-5,15,-5,0],[0,0,-5,15,-5],[0,0,0,-5,10]
])
b = np.array([1100,100,100,100,100])

phi = tdma(A,b)
print(phi)

程序输出结果:

[64.22764228 36.91056911 26.50406504 22.60162602 21.30081301]
 

注:本文内容采集自《The Finite Volume Method in Computational Fluid Dynamics》及《计算流体力学中的有限体积法》。


(完)



来源:CFD之道
代码&命令科普几何处理
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-10-12
最近编辑:1年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2539粉丝 11011文章 712课程 27
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈