我正在尝试编写 Thomas 算法来解决形式的三对角矩阵问题,AX=b
其中A
是三对角矩阵、X
未知向量和b
独立项向量。
当我尝试提取主对角线A(i,i)
、左右对角线A(i,i+1)
和A(i,i-1)
时,程序无法这样做。真正尴尬的是,如果我把 它放在print *,
do 循环的中间,它就可以工作。
我知道在单独的向量中获取对角线并不是绝对必要的,但为了解释的目的,我试图尽可能明确地做到这一点。
有人可以帮忙吗?
提前致谢
这是求解向量 X 的子程序(AM 是矩阵)
subroutine LU(N,AM,D,X)
implicit none
integer(kind=4) i,N
real(kind=4),dimension(N,N) :: AM
real(kind=4),dimension(N) :: G,X,D
real(kind=4),dimension(N) :: A,B,C,L,U
A(1)=AM(1,1)
B(1)=AM(1,2)
C(1)=0
A(N)=AM(N,N)
B(N)=0
C(N)=AM(N,N-1)
L(1)=A(1)
U(1)=B(1)/A(1)
G(1)=D(1)/L(1)
do i=2,N-1,+1
C(i)=AM(i,i-1)
A(i)=AM(i,i)
print *, !THIS IS THE "MAGICAL" print *,. REMOVE IT AND IT WON`T WORK
B(i)=AM(i,i+1)
L(i)=A(i)-C(i)*U(i-1)
U(i)=B(i)/L(i)
G(i)=(D(i)-C(i)*G(i-1))/L(i)
end do
i=N
L(i)=A(i)-C(i)*U(i-1)
U(i)=B(i)/L(i)
G(i)=(D(i)-C(i)*G(i-1))/L(i)
X(N)=G(N)
do i=N-1,1,-1
X(i)=G(i)-U(i)*X(i+1)
end do
end subroutine LU