tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,4 @@
|
|||
elemental function elemf(x)
|
||||
real :: elemf, x
|
||||
elemf = f(x)
|
||||
end function elemf
|
||||
75
Task/Numerical-integration/Fortran/numerical-integration-2.f
Normal file
75
Task/Numerical-integration/Fortran/numerical-integration-2.f
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
module Integration
|
||||
implicit none
|
||||
|
||||
contains
|
||||
|
||||
! function, lower limit, upper limit, steps, method
|
||||
function integrate(f, a, b, in, method)
|
||||
real :: integrate
|
||||
real, intent(in) :: a, b
|
||||
integer, optional, intent(in) :: in
|
||||
character(len=*), intent(in), optional :: method
|
||||
interface
|
||||
elemental function f(ra)
|
||||
real :: f
|
||||
real, intent(in) :: ra
|
||||
end function f
|
||||
end interface
|
||||
|
||||
integer :: n, i, m
|
||||
real :: h
|
||||
real, dimension(:), allocatable :: xpoints
|
||||
real, dimension(:), target, allocatable :: fpoints
|
||||
real, dimension(:), pointer :: fleft, fmid, fright
|
||||
|
||||
if ( present(in) ) then
|
||||
n = in
|
||||
else
|
||||
n = 20
|
||||
end if
|
||||
|
||||
if ( present(method) ) then
|
||||
select case (method)
|
||||
case ('leftrect')
|
||||
m = 1
|
||||
case ('midrect')
|
||||
m = 2
|
||||
case ('rightrect')
|
||||
m = 3
|
||||
case ( 'trapezoid' )
|
||||
m = 4
|
||||
case default
|
||||
m = 0
|
||||
end select
|
||||
else
|
||||
m = 0
|
||||
end if
|
||||
|
||||
h = (b - a) / n
|
||||
|
||||
allocate(xpoints(0:2*n), fpoints(0:2*n))
|
||||
|
||||
xpoints = (/ (a + h*i/2, i = 0,2*n) /)
|
||||
|
||||
fpoints = f(xpoints)
|
||||
fleft => fpoints(0 : 2*n-2 : 2)
|
||||
fmid => fpoints(1 : 2*n-1 : 2)
|
||||
fright => fpoints(2 : 2*n : 2)
|
||||
|
||||
select case (m)
|
||||
case (0) ! simpson
|
||||
integrate = h / 6.0 * sum(fleft + fright + 4.0*fmid)
|
||||
case (1) ! leftrect
|
||||
integrate = h * sum(fleft)
|
||||
case (2) ! midrect
|
||||
integrate = h * sum(fmid)
|
||||
case (3) ! rightrect
|
||||
integrate = h * sum(fright)
|
||||
case (4) ! trapezoid
|
||||
integrate = h * sum(fleft + fright) / 2
|
||||
end select
|
||||
|
||||
deallocate(xpoints, fpoints)
|
||||
end function integrate
|
||||
|
||||
end module Integration
|
||||
12
Task/Numerical-integration/Fortran/numerical-integration-3.f
Normal file
12
Task/Numerical-integration/Fortran/numerical-integration-3.f
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
program IntegrationTest
|
||||
use Integration
|
||||
use FunctionHolder
|
||||
implicit none
|
||||
|
||||
print *, integrate(afun, 0., 3**(1/3.), method='simpson')
|
||||
print *, integrate(afun, 0., 3**(1/3.), method='leftrect')
|
||||
print *, integrate(afun, 0., 3**(1/3.), method='midrect')
|
||||
print *, integrate(afun, 0., 3**(1/3.), method='rightrect')
|
||||
print *, integrate(afun, 0., 3**(1/3.), method='trapezoid')
|
||||
|
||||
end program IntegrationTest
|
||||
13
Task/Numerical-integration/Fortran/numerical-integration-4.f
Normal file
13
Task/Numerical-integration/Fortran/numerical-integration-4.f
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
module FunctionHolder
|
||||
implicit none
|
||||
|
||||
contains
|
||||
|
||||
pure function afun(x)
|
||||
real :: afun
|
||||
real, intent(in) :: x
|
||||
|
||||
afun = x**2
|
||||
end function afun
|
||||
|
||||
end module FunctionHolder
|
||||
Loading…
Add table
Add a link
Reference in a new issue