Math LU分解分解误差

Math LU分解分解误差,math,matrix,fortran,Math,Matrix,Fortran,我一直在尝试制作自己的LU分解程序,用于分解矩阵a,从而LU=a。我的L矩阵和U矩阵的两个分量似乎交换了符号,我似乎找不到错误是什么 有符号问题的组件是L(3,2)和U(3,3) 我知道我遇到问题的组件应该是以下形式 L(3,2)=(A(3,2)-L(31)*U(1,2))/U(2,2) U(3,3)=A(3,3)-L(3,2)U(2,3)-L(3,1)U(1,3) 就我所知,我的代码是正确的 下面是我的程序,非常感谢您的帮助 program lu implicit none real, al

我一直在尝试制作自己的LU分解程序,用于分解矩阵a,从而
LU=a
。我的L矩阵和U矩阵的两个分量似乎交换了符号,我似乎找不到错误是什么

有符号问题的组件是
L(3,2)
U(3,3)

我知道我遇到问题的组件应该是以下形式

L(3,2)=(A(3,2)-L(31)*U(1,2))/U(2,2)
U(3,3)=A(3,3)-L(3,2)U(2,3)-L(3,1)U(1,3)
就我所知,我的代码是正确的

下面是我的程序,非常感谢您的帮助

program lu
implicit none
real, allocatable ::B(:,:), L(:,:), U(:,:), A(:,:)
integer :: i,j,k, sz

sz=3

allocate(B(sz,sz),L(sz,sz), U(sz,sz), A(sz,sz))

A(1,1)=1
A(1,2)=2
A(1,3)=4

A(2,1)=3
A(2,2)=8
A(2,3)=14

A(3,1)=2
A(3,2)=6

A(3,3)=3

U(:,:)=0
L(:,:)=0

!input the matrix A
! i is row, j is column

U(1,:)=A(1,:)

do i=1,sz
  do j=1,sz

    if (i==j) L(i,j)=1

    if (j.ge.i) then
      U(i,j)=A(i,j)
      do k=1,i-1

        U(i,j)=U(i,j)-L(i,k)*U(k,j)
      enddo
    endif

    if (i.gt.j) then
      L(i,j)=A(i,j)
       do k=1,j-1
         L(i,j)=L(i,j)-L(i,k)*U(k,i)
        enddo
      L(i,j)=L(i,j)/U(j,j)
    endif

  enddo
enddo


B=Matmul(L,U)
do i=1,sz
do j=1,sz
write(*,*) i, j,L(i,j), U(i,j) , A(i,j), B(i,j)
enddo
enddo

end program

你能给出一个示例结果吗?嗨,各位,我发现了一个错误,行L(i,j)=L(i,j)-L(i,k)*U(k,i)应该替换为L(i,j)=L(i,j)-L(i,k)*U(k,j)