- #1
ngendler
- 20
- 0
I am trying to write a program that in Fortran 95 will integrate x^2 from 0 to 1. Easy right?? I'm getting errors, though, that I really don't understand. Here is my code:
program montecarlo2
implicit none
real :: fmax,iseed,srand,xmax,x2,x,y
!why do we need pi??
integer :: icount,nmax,ans0
iseed = 329048234
call srand(iseed)
nmax = 10000
!integrate x^2 from zero to one
icount = 0
xmax = 1
fmax = x2(xmax)
ans0 = 0.
do i=1,nmax
x = rand()
y = rand()
f = x2(x)
if(y.le.f/fmax) then
icount = icount+1
end if
ans0 = ans0 + x2(y)
end do
print *,dfloat(icount)/dfloat(nmax),ans0/dfloat(nmax)
function x2(x)
implicit none
x2 = x**2
end function x2
and here is the output:
montecarlo2.f95:26:
function x2(x)
1
Error: Unclassifiable statement at (1)
montecarlo2.f95:27.13:
implicit none
1
Error: Unexpected IMPLICIT NONE statement at (1)
montecarlo2.f95:28.2:
x2 = x**2
1
Error: 'x2' at (1) is not a variable
montecarlo2.f95:29.3:
end function x2
1
Error: Expecting END DO statement at (1)
Error: Unexpected end of file in 'montecarlo2.f95'
please help!
program montecarlo2
implicit none
real :: fmax,iseed,srand,xmax,x2,x,y
!why do we need pi??
integer :: icount,nmax,ans0
iseed = 329048234
call srand(iseed)
nmax = 10000
!integrate x^2 from zero to one
icount = 0
xmax = 1
fmax = x2(xmax)
ans0 = 0.
do i=1,nmax
x = rand()
y = rand()
f = x2(x)
if(y.le.f/fmax) then
icount = icount+1
end if
ans0 = ans0 + x2(y)
end do
print *,dfloat(icount)/dfloat(nmax),ans0/dfloat(nmax)
function x2(x)
implicit none
x2 = x**2
end function x2
and here is the output:
montecarlo2.f95:26:
function x2(x)
1
Error: Unclassifiable statement at (1)
montecarlo2.f95:27.13:
implicit none
1
Error: Unexpected IMPLICIT NONE statement at (1)
montecarlo2.f95:28.2:
x2 = x**2
1
Error: 'x2' at (1) is not a variable
montecarlo2.f95:29.3:
end function x2
1
Error: Expecting END DO statement at (1)
Error: Unexpected end of file in 'montecarlo2.f95'
please help!