100% found this document useful (1 vote)
2K views20 pages

Fortran Programs

This document contains summaries of several numerical analysis programs written in FORTRAN, including programs to find roots of equations using bisection, regula falsi, and Newton-Raphson methods; solve systems of linear equations using Gauss elimination; compute numerical derivatives; find Fibonacci sequences, greatest common divisors, and least common multiples of numbers; and interpolate functions using Lagrange and Newton polynomial methods. The document provides the purpose, inputs, outputs, and algorithms for each program in 3 sentences or less.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
2K views20 pages

Fortran Programs

This document contains summaries of several numerical analysis programs written in FORTRAN, including programs to find roots of equations using bisection, regula falsi, and Newton-Raphson methods; solve systems of linear equations using Gauss elimination; compute numerical derivatives; find Fibonacci sequences, greatest common divisors, and least common multiples of numbers; and interpolate functions using Lagrange and Newton polynomial methods. The document provides the purpose, inputs, outputs, and algorithms for each program in 3 sentences or less.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

FORTRAN PROGRAMS FOR SOLVIMG NUMERICAL PROBLEMS

Designed by

T K Rajan
Seln. Grade Lecturer in Mathematics
Govt Victoria College, Palakkad

BISECTION METHOD

PROGRAM bs
c To find zero of an equation by bisection method
write(*,40)
40 format(1x,'To find a real root of an equation using Bisection',\)
write(*,50)
50 format(' method.')
write(*,*)
write(*,*)'Enter numbers between which the root is to be found:'
read(*,*)a,b

IF((f(a).GT.0).AND.(f(b).LT.0))THEN
w=a
a=b
b=w
ENDIF

write(*,*)'Input error value:'


read(*,*)e
20 c=(a+b)/2
IF(abs(f(c)).LT.e) GOTO 30
IF(f(c).LT.0)THEN
a=c
ELSE
b=c
ENDIF
GOTO 20
30 write(*,10)c
10 format(1x,'The approximate root of the function is:',F8.3)
STOP
END

function f(c)
f=c*c-5*c+6
return
END
GAUSS ELIMINATION

PROGRAM gelmn
c Gauss elimination method to solve a linear system of eqns
dimension a(30,30),x(30)
write(*,10)
10 format(1x,'To solve a linear system of equations using Gauss ',\)
write(*,20)
20 format('Elimination method with pivoting(using subroutine).')
write(*,*)'Enter the number of variables:'
read(*,*)n
write(*,*)'Enter the coefficients in the equations:'
read(*,*)((a(i,j),j=1,n+1),i=1,n)

DO 30 k=1,n-1

call pivot(a,k,n)
DO 90 i=k+1,n
u=a(i,k)/a(k,k)
DO 100 j=k,n+1
a(i,j)=a(i,j)-u*a(k,j)
100 continue
90 continue

30 continue

IF(abs(a(n,n)).LE.(.00001))THEN
write(*,*)'Ill conditioned equations.'
STOP
ENDIF

x(n)=a(n,n+1)/a(n,n)
DO 60 i=n-1,1,-1
sum=0
DO 70 j=i+1,n
sum=sum+a(i,j)*x(j)
70 continue
x(i)=(a(i,n+1)-sum)/a(i,i)
60 continue

write(*,*)'Values of the variables are as follows:'


DO 80 i=1,n
write(*,110)x(i)
110 format(1x,F10.3)
80 continue
STOP
END

subroutine pivot(a,k,n)
dimension a(30,30)
real mx
integer p,q

mx=abs(a(k,k))
p=k
DO 40 m=k+1,n
IF(abs(a(m,k)).GT.mx)THEN
mx=abs(a(m,k))
p=m
ENDIF
40 continue
IF(mx.LE.(.00001))THEN
write(*,*)'Ill-conditioned equations.'
STOP
ENDIF
DO 50 q=k,n+1
temp=a(k,q)
a(k,q)=a(p,q)
a(p,q)=temp
50 continue
return
END

EULER’ METHOD

PROGRAM eu
c Euler's method to solve a first order de
dimension x(50),y(50)
write(*,*)'To solve a differential equation using Euler method.'
write(*,*)'Enter initial values:'
read(*,*)a,c
write(*,*)'Enter value at which result is to be found:'
read(*,*)b
write(*,*)'Enter the number of subintervals required:'
read(*,*)n
x(1)=a
y(1)=c
h=(b-a)/n
write(*,*)'The function values at each step is given below.'
write(*,*)
write(*,*)' x Function value'
write(*,10)x(1),y(1)
10 format(1x,F10.4,5x,F10.4)
DO 20 i=1,n
x(i+1)=x(i)+h
y(i+1)=y(i)+h*f(x(i),y(i))
write(*,10)x(i+1),y(i+1)
20 continue
STOP
END
function f(x,y)
f=(y-x)/(y+x)
return
END

REGULA FALSI METHOD

PROGRAM regfal
c Regula falsi Method to a find a root of an eqn
write(*,40)
40 format(1x,'To find the approximate root of a function using ')
write(*,50)
50 format(\,'Method of False Position.')
write(*,*)'Enter the numbers between which root is to be found:'
read(*,*)a,b

IF((f(a).GT.0).AND.(f(b).LT.0))THEN
w=a
a=b
b=w
ENDIF

write(*,*)'Input error value:'


read(*,*)e
20 c=(a*f(b)-b*f(a))/(f(b)-f(a))
IF(abs(f(c)).LT.e) GOTO 10
IF(f(c).LT.0)THEN
a=c
ELSE
b=c
ENDIF
GOTO 20
10 write(*,30)c
30 format(1x,'The approximate root of the function is:',F8.3)
STOP
END

function f(c)
f=c**3-9*c+1
return
END
GCD OF A SEQUENCE OF NUMBERS

PROGRAM ss
integer x(30)
write(*,*)'To find the gcd of a set of numbers.'
write(*,*)'Enter number of numbers:'
read(*,*)n
write(*,*)'Enter the numbers:'
read(*,*)(x(i),i=1,n)
j=x(1)
DO 10 i=2,n
k=gg(j,x(i))
j=k
10 continue
write(*,20)j
20 format(1x,' GCD= ',I4)
STOP
END

function gg(a,b)
integer a,b
IF(a.GT.b)THEN
j=a
a=b
b=j
ENDIF
30 i=mod(b,a)
IF(i.EQ.0)THEN
gg=a
return
ELSE
b=a
a=i
GOTO 30
ENDIF
END
FIBONACCI SEQUENCE

PROGRAM fbnc
c Fobonacci sequence
integer f1,f2,f3
f1=1
f2=1
write(*,*)'To display fibonacci numbers.'
write(*,*)'Enter the number of terms to be displayed:'
read(*,*)n
write(*,*)'The fibonacci sequence is : '
IF(n.EQ.1)THEN
write(*,10)f1
10 format(1x,I6)
ELSE
write(*,10)f1
write(*,10)f2
DO 20 i=3,n
f3=f1+f2
write(*,10)f3
f1=f2
f2=f3
20 continue
ENDIF
STOP
END
GCD & LCM OF TWO NUMBERS

PROGRAM gcdlcm
integer a,b,l
write(*,*)'To find the gcd and lcm of two numbers.'
write(*,*)'Enter 2 numbers:'
read(*,*)a,b
m=a
n=b
IF(a.GT.b)THEN
j=a
a=b
b=j
ENDIF
10 i=mod(b,a)
IF(i.EQ.0)THEN
write(*,20)a
20 format(1x,'GCD= ',I4)
ELSE
b=a
a=i
GOTO 10
ENDIF
l=m*n/a
write(*,30)l
30 format(1x,'LCM= ',I4)
STOP
END
LAGRANGE’S METHOD OF INTERPOLATION

PROGRAM ll
c Lagrange's Method of interpolation
dimension x(20),y(20)
write(*,50)
50 format(1x,'To find the function value for a particular value ',\)
write(*,60)
60 format('of x using Lagrange interpolation formula.')
write(*,*)
write(*,*)'Enter the number of known function values:'
read(*,*)n
write(*,*)'Enter value of x and corresponding function values:'
DO 10 i=1,n
read(*,*)x(i),y(i)
10 continue
write(*,*)'Enter x for which function value is to be found:'
read(*,*)a
s=0
DO 20 i=1,n
p=1
DO 30 j=1,n
IF(i.NE.j) p=p*(a-x(j))/(x(i)-x(j))
30 continue
s=s+p*y(i)
20 continue
write(*,*)
write(*,40)a,s
40 format(1x,'The function value at x =',F7.2,' is:',F9.3)
STOP
END
NEWTON’S METHOD OF INTERPOLATION

PROGRAM newt
c Newton's Mthod of interpolation
dimension x(20),y(20,20)
write(*,100)
100 format(1x,'To find the value of a function corresponding to a',\)
write(*,110)
110 format(' value of x using Newtons divided difference method.')
write(*,*)
write(*,*)'Enter the number of known function values:'
read(*,*)n
write(*,*)'Enter the values of x and the corresponding function
*values:'
DO 10 i=1,n
read(*,*)x(i),y(i,1)
10 continue
write(*,*)'Enter the value of x for which function value is to be
*found:'
read(*,*)a
k=0
DO 20 j=2,n
k=k+1
DO 30 i=1,n-k
y(i,j)=(y(i+1,j-1)-y(i,j-1))/(x(i+k)-x(i))
30 continue
20 continue

write(*,*)'The divided difference table is : '


write(*,*)
DO 70 i=1,n
write(*,90)x(i)
DO 80 j=1,n-i+1
write(*,90)y(i,j)
90 format(1x,F10.3\)
80 continue
write(*,*)
write(*,*)
70 continue

s=y(1,1)
DO 40 j=2,n
p=1
DO 50 i=1,j-1
p=p*(a-x(i))
50 continue
s=s+p*y(1,j)
40 continue
write(*,60)s
60 format(1x,'The corresponding function value is:',F10.3)
STOP
END
NEWTON RAPHSON METHOD

PROGRAM nr
c Newton Raphson Method to fin a root of an eqn
integer count
count=0
write(*,40)
40 format(1x,'To find a root of an equation using Newton Raphson',\)
write(*,50)
50 format(' Method.')
write(*,*)'Enter initial root and error value:'
read(*,*)x,e
10 IF(g(x).EQ.0)THEN
write(*,*)'Incorrect initial root.'
STOP
ENDIF
y=x-(f(x)/g(x))
IF(abs(f(y)).LT.e) GOTO 20
count=count+1
IF(count.GT.500)THEN
write(*,*)'An error has occured.'
STOP
ENDIF
x=y
GOTO 10
20 write(*,30)x
30 format(1x,'Approximate root= ',F10.3)
STOP
END

function f(x)
f=x*x-5*x+6
return
END

function g(x)
g=2*x-5
return
END
NUMERICAL DIFFERENTAION

PROGRAM ndff
c Numerical Differentiation
dimension x(20),y(20,20)
write(*,70)
70 format(1x,'To find the value of derivative of a function at a',\)
write(*,80)
80 format(' given value using Numerical Differentiation.')
write(*,*)
write(*,*)'Enter the number of known function values:'
read(*,*)n
write(*,*)'Enter values of x and corresponding function values:'
read(*,*)(x(i),y(i,1),i=1,n)
write(*,*)'Enter the value at which derivative is to be found:'
read(*,*)a
DO 10 j=2,n
DO 10 i=1,n-j+1
y(i,j)=(y(i+1,j-1)-y(i,j-1))/(x(i+j-1)-x(i))
10 continue
v=y(1,2)
DO 20 i=3,n
s=0
DO 30 j=1,i-1
p=1
DO 40 k=1,i-1
IF(k.NE.j) p=p*(a-x(k))
40 continue
s=s+p
30 continue
v=v+s*y(1,i)
20 continue
write(*,50)a,v
50 format(1x,'The value of the derivative at x= ',F9.4,' is: ',F9.4)
STOP
END
PRODUCT OF TWO MATRICES

PROGRAM matsub
c Product of two matrices
dimension a(10,10),b(10,10),c(10,10)
integer p,q
write(*,*)'To find the product of two matrices.'
write(*,*)'Enter the order of the first matrix:'
read(*,*)m,n
write(*,*)'Enter the order of the second matrix:'
read(*,*)p,q
IF(n.NE.p)THEN
write(*,*)'The matrices are not conformable for multiplication.'
STOP
ENDIF
call inpt(a,m,n)
call inpt(b,p,q)
call pro(a,b,c,m,n,q)
call outpt(c,m,q)
STOP
END
subroutine inpt(a,m,n)
dimension a(10,10)
write(*,10)m,n
10 format(1x,'Enter the matrix of order',I2,' *'I2,' :')
read(*,*)((a(i,j),j=1,n),i=1,m)
END
subroutine pro(a,b,c,m,n,q)
dimension a(10,10),b(10,10),c(10,10)
integer q
DO 20 i=1,m
DO 30 j=1,q
c(i,j)=0
DO 40 k=1,n
c(i,j)=c(i,j)+a(i,k)*b(k,j)
40 continue
30 continue
20 continue
END
subroutine outpt(c,m,q)
dimension c(10,10)
integer q
write(*,*)'The product matrix is: '
DO 50 i=1,m
DO 60 j=1,q
write(*,70)c(i,j)
70 format(3x,F6.2,4x\)
60 continue
write(*,*)
50 continue
END
RUNGE-KUTTA METHOD

PROGRAM rr
c Rung- Kutta Method to solve a d.e.
integer count
real k1,k2
count=0
write(*,10)
10 format(1x,'To solve a differential equation using second ',\)
write(*,20)
20 format('order Runge Kutta method.')
write(*,*)'Enter the initial values:'
read(*,*)x1,y1
write(*,*)'Enter value at which function value is to be found:'
read(*,*)a
write(*,*)'Enter the number of subintervals:'
read(*,*)n
h=(a-x1)/n
write(*,*)'Values of x and corresponding function values are: '
write(*,*)
write(*,30)
30 format(8x,' x ',5x,' f(x) ')
write(*,40)x1,y1
40 format(1x,F10.4,F10.4)
50 k1=h*f(x1,y1)
k2=h*f(x1+h,y1+k1)
y2=y1+(k1+k2)/2
x2=x1+h
write(*,40)x2,y2
count=count+1
IF(count.LT.n) THEN
x1=x2
y1=y2
GOTO 50
ENDIF
write(*,*)
write(*,60)x2,y2
60 format(1x,'The value of the function at x=',F10.4,' is:',F10.4)
STOP
END

function f(x,y)
f=x+y
return
END
RUNGE-KUTTA METHOD OF ORDER 4

PROGRAM rrkk
c Runge-Kutta method of order 4
integer count
count=0
write(*,10)
10 format(1x,'To solve a differential equation using fourth ',\)
write(*,20)
20 format('order Runge Kutta method.')
write(*,*)
write(*,*)'Enter the initial values:'
read(*,*)x1,y1
write(*,*)'Enter value at which function value is to be found:'
read(*,*)a
write(*,*)'Enter the number of subintervals:'
read(*,*)n
h=(a-x1)/n
write(*,*)'The function values are as follows: '
write(*,*)
write(*,30)
30 format(8x,' x ',5x,' f(x) ')
write(*,40)x1,y1
40 format(1x,F10.4,F10.4)
50 s1=f(x1,y1)
s2=f(x1+h/2,y1+s1*h/2)
s3=f(x1+h/2,y1+s2*h/2)
s4=f(x1+h,y1+s3*h)
y2=y1+(s1+2*s2+2*s3+s4)*h/6
x2=x1+h
write(*,40)x2,y2
count=count+1
IF(count.LT.n)THEN
x1=x2
y1=y2
GOTO 50
ENDIF
write(*,*)
write(*,60)x2,y2
60 format(1x,'The value at ',F10.4,' is :',F10.4)
STOP
END

function f(x,y)
f=x+y
return
END
SIMPSON’S RULE OF INTEGRATION

PROGRAM zz
c Simpson's rule of integration
integer count
count=1
write(*,30)
30 format(1x,'To find the value of integral of a function using',\)
write(*,40)
40 format(' Simpsons rule. ')
write(*,*)
write(*,*)'Enter the limits of integration:'
read(*,*)a,b
write(*,*)'Enter the number of subintervals(an even no.) :'
read(*,*)n
h=(b-a)/n
x=a
y=f(x)
sum=y
10 IF(count.LT.n)THEN
x=x+h
y=f(x)
count=count+1
IF(mod(count,2).EQ.0)THEN
sum=sum+4*y
ELSE
sum=sum+2*y
ENDIF
GOTO 10
ENDIF
x=x+h
y=f(x)
sum=sum+y
sum=h*sum/3
write(*,20)sum
20 format(1x,'The value of the integral is: ',F10.4)
STOP
END

function f(x)
f=1/(1+x*x)
return
END
SIMPSON’S METHOD OD INTEGRATION (ARRAY GIVEN)

PROGRAM zz
c Simpson's method of integration
dimension x(20),y(20)
write(*,*)'To find the value of integral of a function using
*Simpsons rule. '
write(*,*)
write(*,*)'Enter the limits of integration:'
read(*,*)a,b
write(*,*)'Enter the number of subintervals(an even no.) :'
read(*,*)n
h=(b-a)/n
x(1)=a
y(1)=f(x(1))
DO 10 i=2,n+1
x(i)=x(i-1)+h
y(i)=f(x(i))
10 continue
s=y(1)+y(n+1)
DO 20 i=2,n,2
s=s+4*y(i)
20 continue
DO 30 i=3,n-1,2
s=s+2*y(i)
30 continue
s=h*s/3
write(*,40)s
40 format(1x,'The value of the integral is: ',F10.4)
STOP
END

function f(x)
f=sin(x)
return
END
TRAPEZOIDAL RULE OF INTEGRATION

PROGRAM trp
c Trapezoidal rule of integration
integer count
count=1
write(*,30)
30 format(1x,'To find the value of the integral of a function ',\)
write(*,40)
40 format('using trapezoidal rule.')
write(*,*)
write(*,*)'Enter the limits of integration: '
read(*,*)a,b
IF(b.LT.a)THEN
c=a
a=b
b=c
ENDIF
write(*,*)'Enter the number of subintervals(an even no.) :'
read(*,*)n
h=(b-a)/n
x=a
y=f(x)
sum=y
10 IF(count.LT.n)THEN
x=x+h
y=f(x)
sum=sum+2*y
count=count+1
GOTO 10
ENDIF
x=x+h
y=f(x)
sum=sum+y
sum=h*sum/2
write(*,*)
write(*,20)sum
20 format(1x,'The value of the integral is :',F10.4)
STOP
END

function f(x)
f=1/(1+x*x)
return
END
TRAPEZOIDAL RULE OF INTEGRATION (ARRAY )

PROGRAM ttrr
c Trapezoidal rule of integration
dimension x(20),y(20)
write(*,40)
40 format(1x,'To find the integral of a given function using ',\)
write(*,50)
50 format('trapezoidal rule.')
write(*,*)'Enter the limits of integration:'
read(*,*)a,b
write(*,*)'Enter the number of subintervals:'
read(*,*)n
IF(a.GT.b)THEN
c=a
a=b
b=c
ENDIF
h=(b-a)/n
x(1)=a
y(1)=f(x(1))
write(*,*)x(1),y(1)
DO 10 i=2,n+1
x(i)=x(i-1)+h
y(i)=f(x(i))
write(*,*)x(i),y(i)
10 continue
s=y(1)+y(n+1)
DO 20 i=2,n
s=s+2*y(i)
20 continue
v=h*s/2
write(*,30)v
30 format(1x,'The value of the integral is: ',F10.4)
STOP
END

function f(x)
f=sin(x)
return
END
TRIANGULAR FACTORISATION TO SOLVE A LINEAR SYSTEM

PROGRAM tri
c Triangular factorisation to solve a linear system of eqns
real l(20,20)
dimension a(20,20),b(20),u(20,20),x(20),y(20)
write(*,130)
130 format(1x,'To solve a system of equations using Method of ')
write(*,140)
140 format(\,'Triangularisation.')
write(*,*)'Enter the number of equations:'
read(*,*)n
write(*,*)'Enter the coefficients of each of the equations:'
read(*,*)((a(i,j),j=1,n),b(i),i=1,n)
DO 10 i=1,n
DO 20 j=i+1,n
l(i,j)=0
20 continue
DO 30 j=1,i-1
u(i,j)=0
30 continue
u(1,i)=a(1,i)
l(i,i)=1
IF(i.GT.1) l(i,1)=a(i,1)/u(1,1)
10 continue
DO 40 i=2,n
DO 50 j=2,i-1
s=0
DO 60 k=1,j-1
s=s+l(i,k)*u(k,j)
60 continue
l(i,j)=(a(i,j)-s)/u(j,j)
50 continue
DO 70 j=i,n
s=0
DO 80 k=1,i-1
s=s+l(i,k)*u(k,j)
80 continue
u(i,j)=a(i,j)-s
70 continue
40 continue
write(*,*)((l(i,j),i=1,n),j=1,n)
write(*,*)((u(i,j),i=1,n),j=1,n)

y(1)=b(1)
DO 90 i=2,n
sum=0
DO 100 j=1,n-1
sum=sum+l(i,j)*y(j)
100 continue
y(i)=b(i)-sum
90 continue
write(*,*)(y(i),i=1,n)
x(n)=y(n)/u(n,n)
DO 110 i=n-1,1,-1
sum=0
DO 120 j=i+1,n
sum=sum+u(i,j)*x(j)
120 continue
x(i)=(y(i)-sum)/u(i,i)
110 continue

write(*,*)'The solution system is: '


DO 150 i=1,n
write(*,160)x(i)
160 format(1x,F6.3)
150 continue
STOP
END

You might also like