LU-分解因子分解错误

时间:2017-01-06 22:36:24

标签: 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, 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

0 个答案:

没有答案