Você está na página 1de 10

Ass-1

PROGRAM Gaussian_Elimination
REAL::a(20,20),b(20,20)
OPEN (1,"GE1.DAT")
OPEN (2,"GE2.DAT")
READ (1,*)n
READ (1,*)((a(i,j),j=1,n+1),i=1,n)
DO i=1,n
DO j=1,n+1
b(i,j)=a(i,j)
END DO
END DO
CALL Without_pivot(a,n)
CALL With_pivot(b,n)
STOP
END PROGRAM
!___________________________________________
SUBROUTINE Without_pivot(a,n)
INTEGER::i,j,k
REAL::a(20,20),x(20),sum1,value
WRITE (2,*)"Solutions without pivoting:"
IF (a(1,1)==0) THEN
DO i=1,n-1
DO j=i+1,n
IF (a(j,i)/=0) THEN
DO k=1,n+1
temp=a(i,k)
a(i,k)=a(j,k)
a(j,k)=temp
END DO
END IF
END DO
END DO
END IF
DO i=1,n-1
DO j=i+1,n
value=a(j,i)/a(i,i)
DO k=1,n+1
a(j,k)=a(j,k)-a(i,k)*value
END DO
END DO
END DO
IF (a(n,n)==0) THEN
IF (a(n,n+1)==0) THEN

WRITE (2,*)"Many solution"


GO TO 11
ELSE
WRITE (2,*)"No solution"
GO TO 11
END IF
ELSE
WRITE (2,*)"Unique solution"
END IF
x(n)=a(n,n+1)/a(n,n)
DO i=n-1,1,-1
sum1=0.0
DO j=i+1,n
sum1=sum1+a(i,j)*x(j)
END DO
x(i)=(a(i,n+1)-sum1)/a(i,i)
END DO
WRITE (2,20)(i,x(i),i=1,n)
20 FORMAT (2x,"x",I1,"=",F12.6)
11 END SUBROUTINE
!______________________________________
SUBROUTINE With_pivot(b,n)
INTEGER::i,j,k
REAL::b(20,20),x(20),sum1,value
WRITE (2,*)"Solutions with pivoting:"
DO i=1,n-1
CALL Pivot(b,i,n)
DO j=i+1,n
value=b(j,i)/b(i,i)
DO k=1,n+1
b(j,k)=b(j,k)-b(i,k)*value
END DO
END DO
END DO
IF (b(n,n)==0) THEN
IF (b(n,n+1)==0) THEN
WRITE (2,*)"Many solution"
GO TO 22
ELSE
WRITE (2,*)"No solution"
GO TO 22
END IF
ELSE
WRITE (2,*)"Unique solution"

END IF
x(n)=b(n,n+1)/b(n,n)
DO i=n-1,1,-1
sum1=0.0
DO j=i+1,n
sum1=sum1+b(i,j)*x(j)
END DO
x(i)=(b(i,n+1)-sum1)/b(i,i)
END DO
WRITE (2,30)(i,x(i),i=1,n)
30 FORMAT (2x,"x",I1,"=",F12.6)
22 END SUBROUTINE
!___________________________________
SUBROUTINE Pivot(b,i,n)
INTEGER::i,j,k,p
REAL::b(20,20),lar,temp
p=i
lar=ABS(b(i,i))
DO j=i+1,n
IF (ABS(b(j,i))>lar) THEN
lar=ABS(b(j,i))
p=j
END IF
END DO
IF (p/=j) THEN
DO k=1,n+1
temp=b(p,k)
b(p,k)=b(i,k)
b(i,k)=temp
END DO
END IF
END SUBROUTINE

Ass-2
PROGRAM LU_factorization
INTEGER,PARAMETER::n=3
INTEGER::i,j
REAL::a(10,10),b(10),c(10,10)
OPEN (1,"LU1.DAT")
OPEN (2,"LU2.DAT")

OPEN (3,"TRI3.DAT")
OPEN (4,"TRI4.DAT")
READ (1,*)((a(i,j),j=1,n),i=1,n)
READ (1,*)(b(i),i=1,n)
READ (3,*)((c(i,j),j=1,n+1),i=1,n)
CALL LU_method(a,b,n)
CALL TRI_diagonal(c,n)
STOP
END PROGRAM
!__________________________________________
SUBROUTINE LU_method(a,b,n)
REAL::a(10,10),b(10),l(10,10),u(10,10),x(10),y(10),s1,s2,s3,s4
IF (a(1,1)==0) THEN
WRITE (2,*)"Impossible"
RETURN
END IF
DO i=1,n
l(i,i)=1
u(1,i)=a(1,i)
END DO
DO i=2,n
l(i,1)=a(i,1)/u(1,1)
END DO
DO i=2,n-1
s1=0.0
DO j=1,i-1
s1=s1+l(i,j)*u(j,i)
END DO
u(i,i)=a(i,i)-s1
DO j=i+1,n
s2=0.0
s3=0.0
DO k=1,i-1
s2=s2+l(i,k)*u(k,j)
s3=s3+l(j,k)*u(k,i)
END DO
u(i,j)=a(i,j)-s2
l(j,i)=(a(j,i)-s3)/u(i,i)
END DO
END DO
s4=0.0
DO i=1,n-1
s4=s4+l(n,i)*u(i,n)
END DO
u(n,n)=a(n,n)-s4
WRITE (2,*)"Lower triangular matrix:"

WRITE (2,11)((l(i,j),j=1,n),i=1,n)
11 FORMAT (3(F8.2,2x))
WRITE (2,*)"Upper triangular matrix:"
WRITE (2,22)((u(i,j),j=1,n),i=1,n)
22 FORMAT (3(F8.2,2x))
y(1)=b(1)/l(1,1)
DO i=2,n
s1=0.0
DO j=1,i-1
s1=s1+l(i,j)*y(j)
END DO
y(i)=(b(i)-s1)/l(i,i)
END DO
x(n)=y(n)/u(n,n)
DO i=n-1,1,-1
s2=0.0
DO j=i+1,n
s2=s2+u(i,j)*x(j)
END DO
x(i)=(y(i)-s2)/u(i,i)
END DO
WRITE (2,*)"The solution is:"
WRITE (2,*)(x(i),i=1,n)
END SUBROUTINE
!__________________________________________
SUBROUTINE TRI_diagonal(c,n)
REAL::c(10,10),u(10,10),l(10,10),x(10),z(10)
INTEGER::i,j
IF (c(1,1)==0) THEN
WRITE (4,*)"Impossible"
RETURN
END IF
l(1,1)=c(1,1)
u(1,2)=c(1,2)/l(1,1)
z(1)=c(1,n+1)/l(1,1)
DO i=1,n
u(i,1)=1
END DO
DO i=2,n-1
l(i,i-1)=c(i,i-1)
l(i,i)=c(i,i)-l(i,i-1)*u(i-1,i)
u(i,i+1)=c(i,i+1)/l(i,i)
z(i)=(c(i,n+1)-l(i,i-1)*z(i-1))/l(i,i)
END DO

l(n,n-1)=c(n,n-1)
l(n,n)=c(n,n)-(l(n,n-1)*u(n-1,n))
z(n)=(c(n,n+1)-l(n,n-1)*z(n-1))/l(n,n)
x(n)=z(n)
DO i=n-1,1,-1
x(i)=z(i)-u(i,i+1)*x(i+1)
END DO
WRITE (4,*)"Upper triangular matrix:"
WRITE (4,33)((u(i,j),j=1,n),i=1,n)
33 FORMAT (3(F8.2,2x))
WRITE (4,*)"Lower triangular matrix:"
WRITE (4,44)((l(i,j),j=1,n),i=1,n)
44 FORMAT (3(F8.2,2x))
WRITE (4,*)"The solution is:"
WRITE (4,*)(x(i),i=1,n)
END SUBROUTINE
Ass-4
PROGRAM SOR_method
INTEGER,PARAMETER::n=3
INTEGER::i,j,it
REAL::a(30,30),b(30),xo(30),tol,w
OPEN (1,"SOR1.DAT")
OPEN (2,"SOR2.DAT")
READ (1,*)((a(i,j),j=1,n),i=1,n)
READ (1,*)(b(i),i=1,n)
READ (1,*)(xo(i),i=1,n)
READ (1,*)it,tol,w
CALL SOR(a,b,xo,n,it,tol,w)
STOP
END PROGRAM
!________________________________________
SUBROUTINE SOR(a,b,xo,n,it,tol,w)
REAL::a(30,30),b(30),x(30),xo(30),tol,w,norm,sum1,sum2
INTEGER::k,j
WRITE (2,*)"Result for SOR method:"
DO k=1,it
DO i=1,n
sum1=0.0
sum2=0.0
DO j=1,n
IF (j<i) sum1=sum1+a(i,j)*x(j)

IF (j>i) sum2=sum2+a(i,j)*xo(j)
END DO
x(i)=(1.0-w)*xo(i)+(w*(b(i)-sum1-sum2))/a(i,i)
END DO
norm=ABS(x(1)-xo(1))
DO i=2,n
IF (norm<ABS(x(i)-xo(i))) THEN
norm=ABS(x(i)-xo(i))
END IF
END DO
DO i=1,n
xo(i)=x(i)
END DO
WRITE (2,11)k,(x(i),i=1,n)
11 FORMAT (2x,I3,2x,3(F10.6,1x))
IF (norm<tol) THEN
WRITE (2,22)(x(i),i=1,n)
22 FORMAT ("The solution is:",/,(F10.6,1x))
GO TO 33
END IF
END DO
WRITE (2,*)"Maximum iteration was exceeded.More iteration needed."
33 END SUBROUTINE
Ass-5
PROGRAM Power_method
IMPLICIT NONE
INTEGER,PARAMETER::n=3
REAL::a(10,10),x(10),tol
INTEGER::i,j,it
OPEN (1,"P1.DAT")
OPEN (2,"P2.DAT")
READ (1,*)((a(i,j),j=1,n),i=1,n)
READ (1,*)(x(i),i=1,n)
READ (1,*)it,tol
CALL Power(a,x,n,it,tol)
STOP
END PROGRAM
!_____________________________________
SUBROUTINE Power(a,x,n,it,tol)
REAL::a(20,20),x(20),y(20),tol,maxm,value

INTEGER::i,j,k,it
WRITE (2,10)
10 FORMAT ("Iteration",10x,"Eigenvector",20x,"Eigenvalue")
DO k=1,it
DO i=1,n
y(i)=0.0
DO j=1,n
y(i)=y(i)+a(i,j)*x(j)
END DO
END DO
maxm=ABS(y(i))
DO i=2,n
IF (maxm<ABS(y(i))) THEN
maxm=ABS(y(i))
END IF
END DO
IF (maxm==0.0) THEN
WRITE (2,*)"Eigen Vector:"
WRITE (2,*)(x(i),i=1,n)
WRITE (2,*)"Then eigenvalue is a new matrix"
END IF
value=ABS(x(1)-y(1)/maxm)
DO i=2,n
IF (value<ABS(x(i)-y(i)/maxm)) THEN
value=ABS(x(i)-y(i)/maxm)
END IF
END DO
DO i=1,n
x(i)=y(i)/maxm
END DO
WRITE (2,11)k,(x(i),i=1,n),maxm
11 FORMAT (3x,I2,6x,3(F9.6,1x),8x,F9.6)
IF (value<tol) THEN
WRITE (2,*)""
WRITE (2,*)""
WRITE (2,*)""
WRITE (2,*)""
WRITE (2,22)(x(i),i=1,n),maxm
22 FORMAT ("Dominent eigenvector:",5x,3(F9.6,2x),4x,//,"Dominent
eigenvalue:",5x,F9.6)
GO TO 30
END IF
END DO
30 END SUBROUTINE

Ass-9
PROGRAM Euler_Modified_Euler
IMPLICIT NONE
INTEGER::i,n
REAL::a,b,x,y,y1,er1,er2,p,g,h
OPEN (1,"EME1.DAT")
OPEN (2,"EME2.DAT")
READ (1,*)a,b,n,p
h=(b-a)/n
x=a
y=p
y1=p
WRITE (2,11)"Meshpoints","Exact","Euler","Error","ModifiedEuler","Error"
11 FORMAT (6(3x,A10))
DO i=1,n+1
er1=ABS(g(x)-y)
er2=ABS(g(x)-y1)
WRITE (2,22)x,g(x),y,er1,y1,er2
22 FORMAT (10(3x,F10.6))
CALL Euler_method(h,x,y)
CALL Modified_Euler(h,x,y1)
x=a+i*h
END DO
STOP
END PROGRAM
!_________________________________
SUBROUTINE Euler_method(h,x,y)
REAL::h,x,y
y=y+h*f(x,y)
RETURN
END SUBROUTINE
!__________________________________
SUBROUTINE Modified_Euler(h,x,y1)
REAL::h,x,y1
y1=y1+(h/2)*(f(x,y1)+f(x+h,y1+h*f(x,y1)))
RETURN
END SUBROUTINE
!____________________________________

FUNCTION f(x,y)
f=y-x**2+1
RETURN
END
!_________________________________
FUNCTION g(x)
g=(x+1)**2-0.5*EXP(x)
RETURN
END

Você também pode gostar