Math LU分解分解误差
我一直在尝试制作自己的LU分解程序,用于分解矩阵a,从而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
。我的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)