本文介绍TDMA算法。
1 TDMA算法介绍
三对角矩阵算法(TDMA)也称托马斯算法,用于求解具有三对角线系数矩阵的代数方程组。其一般形式为:
对于本书中采用的网格布置,指的是图中所示的网格点位置。
对于,可以根据来求解,即:
类似的方式,对于,通过式(1),同时借助式(2),可以只用来表示,即有:
对至重复上面的操作。
总之,可以写成的函数,即:
令式(4)的下标为,结合式(1)可得到:
将式(4)P_iQ_i$有以下的递归关系:
对于,与的值为:
对于,由于,可以得到如下关系式:
TDMA求解算法可以总结为:
利用式(7)计算与 对于,利用式(6)采用向前递归的方法计算与。 依照式(8)令。 对于,利用式(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之道
评论前必须登录!
注册