作业帮 > 综合 > 作业

解线性方程组,写程序实现,要求用LU分解的办法,给出代码.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/07 14:43:28
解线性方程组,写程序实现,要求用LU分解的办法,给出代码.
用LU分解解方程的程序.
给出程序如下:
subroutine LinearLU (A,B,X,N)
implicit none
integer ::N
real*8 ::A(N,N),B(N),X(N)
real*8,allocatable ::U(:,:),L(:,:),Y(:)
real*8 ::sum
integer ::i,j,k,s
allocate (U(N,N))
allocate (L(N,N))
allocate (Y(N))
U = 0
L = 0
do k = 1,N !LU的 Doolittle 分解
L(k,k) = 1
do j = k,N
sum = 0
do s = 1,k-1
sum = sum + L(k,s) * U(s,j)
end do
U(k,j) = A(k,j) - sum
end do
do i = k+1,N
sum = 0
do s = 1,k-1
sum = sum + L(i,s) * U(s,k)
end do
L(i,k) = (A(i,k) - sum) / U(k,k)
end do
end do
Y = 0
do i=1,N
sum = 0
do j=1,i-1
sum = sum + L(i,j) * Y(j)
end do
Y(i) = (B(i) - sum) / L(i,i)
end do
X = 0
do i=N,1,-1
sum = 0
do j=i+1,N
sum = sum + U(i,j) * X(j)
end do
X(i) = (Y(i) - sum) / U(i,i)
end do
!do i=1,N
!if (X(i) > 1.79E308) then
!write(*,*) "Some errors happend when solving linear equations!"
!stop
!end if
!end do
end subroutine
subroutine LinearLU (A,B,X,N)
implicit none
integer ::N
real*8 ::A(N,N),B(N),X(N)
real*8,allocatable ::U(:,:),L(:,:),Y(:)
real*8 ::sum
integer ::i,j,k,s
allocate (U(N,N))
allocate (L(N,N))
allocate (Y(N))
U = 0
L = 0
do k = 1,N !LU的 Doolittle 分解
L(k,k) = 1
do j = k,N
sum = 0
do s = 1,k-1
sum = sum + L(k,s) * U(s,j)
end do
U(k,j) = A(k,j) - sum
end do
do i = k+1,N
sum = 0
do s = 1,k-1
sum = sum + L(i,s) * U(s,k)
end do
L(i,k) = (A(i,k) - sum) / U(k,k)
end do
end do
Y = 0
do i=1,N
sum = 0
do j=1,i-1
sum = sum + L(i,j) * Y(j)
end do
Y(i) = (B(i) - sum) / L(i,i)
end do
X = 0
do i=N,1,-1
sum = 0
do j=i+1,N
sum = sum + U(i,j) * X(j)
end do
X(i) = (Y(i) - sum) / U(i,i)
end do
end subroutine