Fortran三角方程求解


Fortran 三角矩阵求解

参考:《Fotran95 2003科学计算与工程》

原理

$$
\vec{A}(n,n)\cdot\vec{X}(n)=\vec{B}
$$

上三角形方程迭代求解

$$
\begin{cases}
X_n=\frac{B_n}{A_{nn}} \
\
X_i=\frac{B_i-\sum_{k=i+1}^{n} A_{ik}X_k}{A_{ii}},i=n-1,\cdot\cdot\cdot,1

\end{cases}
$$
下三角形方程迭代求解
$$
\begin{cases}
X_1=\frac{B_1}{A_{11}} \
\
X_i=\frac{B_i-\sum_{k=1}^{n-1} A_{ik}X_k}{A_{ii}},i=2,\cdot\cdot\cdot,n

\end{cases}
$$



Fortran代码实现

module parameter
    implicit none

    integer, parameter :: dp=8

end module parameter

module matrix_solve
    use parameter   
    contains

    !上三角方程
    ! A(n,n): 左矩阵
    ! B(n): 右矩阵
    ! X(n): 待求解矩阵
    ! N: 输入的矩阵维数
    !
    subroutine uptri_equation_solve(A,B,X,N)
        implicit none
        integer,INTENT(IN) :: N 
        integer :: i ,j

        real(kind=dp),INTENT(IN) :: A(N,N),B(N)
        real(kind=dp),INTENT(OUT) :: X(N)

        X(n)=B(n)/A(n,n)

        do i=n-1,1,-1
            X(i)=B(i)
            do j=i+1,N 
                X(i)=X(i)-A(i,j)*X(j)
            enddo
            X(i)=X(i)/A(i,i)
        enddo

    end subroutine uptri_equation_solve

    !下三角矩阵
    ! A(n,n): 左矩阵
    ! B(n): 右矩阵
    ! X(n): 待求解矩阵
    ! N: 输入的矩阵维数
    !
    subroutine downtri_equation_solve(A,B,X,N)
        implicit none
        integer,INTENT(IN) :: N 
        integer :: i ,j

        real(kind=dp),INTENT(IN) :: A(N,N),B(N)
        real(kind=dp),INTENT(OUT) :: X(N)

        X(1)=B(1)/A(1,1)

        do i=2,n
            X(i)=B(i)
            do j=1,i-1
                X(i)=X(i)-A(i,j)*X(j)
            enddo
            X(i)=X(i)/A(i,i)
        enddo

    end subroutine downtri_equation_solve
end module

文章作者: 天帝君豪
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 天帝君豪 !
 上一篇
晶体的单晶声速 晶体的单晶声速
晶体的单晶声速计算公式Christoffel’s equation relates acoustic velocitics to crystallo-graphic direction and elastic constants.$$det
下一篇 
AELAS安装教程 AELAS安装教程
AELAS安装教程结合VASP使用的弹性常数计算软件 软件下载地址作者网址:https://sites.google.com/site/zrfbuaa/softwares/aelas 注:可能要翻墙才行 安装编译1 解压文件 tar
  目录