You are on page 1of 2

!

!
!
!
!

MidTerm
x+y+z+w=1
2x+y-2z-w=0
-x+y+z+2w=0
x+2y+3z-2w=-3

program Gauss_Method
IMPLICIT NONE
INTEGER, PARAMETER :: n=4
INTEGER :: i,j,k,l
REAL*8, DIMENSION (n) :: X,B
REAL*8, DIMENSION (n+1,n) :: A
real*8 :: det,hd,hds, ss
DATA B /1.0, 1.0, 1.0, 1.0 /, &
((A(j,i), j=1,n+1),i=1,n) / 1.0, 1.0, 1.0, 1.0, 1.0,
&
2.0, 1.0, -2.0, -1.
0, 0.0,
&
-1.0, 1.0, 1.0, 2.
0, 0.0,
&
1.0, 2.0,
3.0, -2.0, -3.0/
write(6, 100) A
100
format(1x, 5(6(f6.2,1x)/,1x))
!
WRITE (6, "(1x,5(F13.8,1x))") (A(1,i), i=1,N) !1-colum
!
WRITE (6, "(1x,6(F13.8,1x))") (A(i,1), i=1,(N+1)) !1-row
det = 1.d0
write(6, *) " 1"
do i=1,n
hd = A(i,i)
det = det * hd
do j=i,n+1
A(j,i) = A(j,i)/hd
enddo
WRITE (6, "(1x,6(F7.3,1x))") (A(l,i), l=1,n+1)
write(6, *) " "
do k=i+1,n
hds = A(i,k)
do j=i,n+1
A(j,k) = A(j,k) - hds*A(j,i)
enddo
WRITE (6, "(1x,6(F7.3,1x))") (A(l,k), l=1,n+1)
enddo
write(6, *) (i+1)
enddo
write(6, *) "det = ", det
write(6, 100) A
! solution
x(:) = 0.d0
x(n) = A(n+1,n)
do i=(n-1),1,-1
ss = 0.d0
do j=n,(i+1),-1
ss = ss + A(j,i)*x(j)
enddo
x(i) = A(n+1,i) - ss
enddo
WRITE (6, "(1x,A, 5(F13.8,1x))") "Solution: ", (x(i), i=1,n)
! Solution

! check
do i=1,n
!

ss = 0.d0
do j=1,n;
ss = ss + A(j,i)*x(j); enddo
print*, ss, A(n+1,i)

enddo
ss = 0.d0
do i=1,n
ss = ss + A(i,2)*x(i)
enddo
write(6, *) "check: ", ss
end program Gauss_Method

You might also like