本文介绍TDMA算法。
三对角矩阵算法(TDMA)也称托马斯算法,用于求解具有三对角线系数矩阵的代数方程组。其一般形式为:
对于本书中采用的网格布置,
对于
类似的方式,对于
对
总之,
令式(4)的下标为
将式(4)
对于
对于
TDMA求解算法可以总结为:
”
利用式(7)计算 与 对于 ,利用式(6)采用向前递归的方法计算 与 。 依照式(8)令 。 对于 ,利用式(4)使用向后递归的方法计算 。
矩阵方程为:
可以编写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》及《计算流体力学中的有限体积法》。
”
(完)