Fortran Programs: Implementing Numerical Methods for Calculus Problems

Verified

Added on  2022/12/23

|6
|1119
|84
Homework Assignment
AI Summary
This assignment presents two Fortran programs. The first program calculates the derivative of sin(x) at x=1 using a finite-difference method, varying the number of grid points to demonstrate the impact on accuracy. The second program implements Simpson's 1/3 and 3/8 rules to numerically evaluate the integral of x^n * e^(x-1) from 0 to 1, where 'n' is an integer input by the user. The code includes a recursive function for calculating a factorial and demonstrates the application of numerical integration techniques. The program calculates and compares the results from the analytical solution (factorial) and Simpson's rule, along with the relative error, providing a practical demonstration of numerical methods in Fortran.
Document Page
Running head: FOTRAN CODE 1
Fotran Programs Code
Name
Institution
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
FOTRAN CODE 2
Fotran Programs Code
Write a program to find the derivatives of sin (x) at point x=1 (given in radians)
Program Part 1
Program Deriv
implicit none
integer ::n,i
real, allocatable :: y(:) dydx(:)
real ::x dx
write(*, ‘(a,$)’) ‘input number of grid points:’ ; read*, n
allocate (y(n), dydx(n)) ! allocate grid arrays
dx = 10.0/(n-1) !grid spacing, assuming x from 0 -10
do i= 1,n
x= (i-1)
y(i) =sin (x) !fill with sine
end do
cal derivative (y, n, dx, dydx) ! calculate dydx
do i= 1, n ! write result, cos(x) and error
x= (i-1) *dx
print*, dydx(i), cos(x), cosx-dydx(i)
end do
deallocate (y, dydx) !finish
contains
sunroutine derivative (a, np, h, aprime) ! argument names different
integer, intent (in) :: np !declare argument
real, intent(in) :: a(np), h
real, intent(out):: aprime (np)
integer :: i local variable
do i=1, np=1
aprime(i)= (a(i+1)- a (i))/h !finite-defference formula
end do
Document Page
FOTRAN CODE 3
aprime(np) = 0
end subroutine derivative
end program Deriv
Write a FORTRAN program to use Simpson's rule to evaluate the integral given by
where,, and Indicate in the comment block (at the beginning of your code) what value you
obtained for the integral as a function of the number of subintervals used. Make sure to
clearly indicate what you think is the most accurate value for the integral.
Submit the source code file, i.e. the .f08 file containing the Fortran code, by uploading it
into blackboard using the “attachments” button under the assignment. If you have any
problems see the TA or the instructor. Submissions via email will not be accepted.
Note:
All programs must contain the implicit none statement. Programs that do not contain
this statement will receive an automatic zero.
All programs should have a block of comment statements at the beginning of the code
containing your name and a description of what the code does.
All programs must compile using the gfortran compiler on the Math lab machines.
Programs that do not compile will receive an automatic zero.
Programs must be uploaded into the blackboard assignment page. Programs may not
be submitted via email or hardcopy. Programs that are not uploaded into the blackboard
assignment page will not be graded.
Program part 2
Simpsons solition
program integration
! declaring the variable values
real results,simp13_res,simp38_res,a,b,error
real f
integer n
Document Page
FOTRAN CODE 4
external f
results=0.0
n=0
a=0.0
b=1.0
error=0.0
write(*,*)achar(10),achar(10)
write(*,*)"Intergration of (x^n*e^(x-1)) by dx range of 0 to 1"
10 write(*,*)achar(10)
write(*,*)"Enter 0 to exit from the program"
write(*,*)"Enter n : "
read(*,'(i10)')n
!to exit
if(n==0)then
goto 20
end if
!factorial function calling
results=factorial(n) !calling the function factorial
write(*,*)achar(10),"Recursion Solution = ",results ! print the value of the
function
!get simpson 1/3 solution
call simpson13(f,a,b,simp13_res,real(n))
write(*,*)achar(10),"Simpson 1/3 Solution= ",simp13_res
error=(results-simp13_res)*100/results
write(*,*)"Relative True Error in Simpson 1/3 (%) = ",abs(error)
tabler-icon-diamond-filled.svg

Paraphrase This Document

Need a fresh take? Get an instant paraphrase of this document with our AI Paraphraser
Document Page
FOTRAN CODE 5
error=0.0
!get simpson 3/8 solution
call simpson38(f,a,b,simp38_res,real(n))
write(*,*)achar(10),"Simpson 3/8 Solution = ",simp38_res
error=(results-simp38_res)*100/results
write(*,*)"Relative True Error in Simpson 3/8 (%) = ",abs(error)
!continue
goto 10
20 continue
end program integration
! end of the main program, functions are below which is used in this program
!recursive algorithm
recursive function factorial(n) result(results)
real results,first,x
integer n
x=1
first=1/exp(x)
if(n<=0) then
results = 0
return
else if(n==1) then
results=1/exp(x)
return
else
results=1-n*factorial(n-1)
Document Page
FOTRAN CODE 6
return
end if
end function factorial
!simpson 1/3 algorithm
Subroutine simpson13(f,a,b,simp38_res,n)
real a,b,x,n,h,f,simp38_res
h=(b-a)/2.0
simp38_res=h*(f(a,n)+f(a+h,n)+f(b,n))/3.0
return
end Subroutine simpson13
!simpson 3/8 algorithm
Subroutine simpson38(f,a,b,simp13_res,n)
real a,b,x,n,h,f,simp13_res
h=(b-a)/3.0
simp13_res=h*3.0*(f(a,n)+3.0*f(a+h,n)+3.0*f(a+2*h,n)+f(b,n))/8.0
return
end Subroutine simpson38
!function to integrate
function f(x,n) result(res)
real x,n,res
res=(x**n)*exp(x-1)
return
end function f
chevron_up_icon
1 out of 6
circle_padding
hide_on_mobile
zoom_out_icon
[object Object]