吾生有涯 学海无涯
析模有界 知识无界

代数方程组求解|TDMA算法

本文介绍TDMA算法。

1 TDMA算法介绍

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

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

图 一维网格布局

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

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

重复上面的操作。

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

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

将式(4)P_iQ_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之道

赞(4) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《代数方程组求解|TDMA算法》
文章链接:https://www.topcfd.cn/20484/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册