EULER

 !Program name: EULER

!Euler’s method for differential equation dy/dx=-xy

!The exact solution: y=exp(-x^2/2)

!Interval X=0 to X=3 where y(0)=1

!y(n+1)=y(n)+h*(-xy)

!Y(n+1) <=> X+h

 

program euler

real :: x, y, h, exact, error

integer :: i

func(x,y)=-x*y

 

h=0.1

nstep=3./h ! 30 steps

y=1.   !y(0)=1

do i=0,nstep

   x=i*h   !It guarantees interval from 0 to 3

   y=y+h*func(x,y)

!Y(n+1)=Y(n)+ h* f(x,y)

   exact=exp((-(x+h)**2)/2)

   error=exact-y

   print *, i, x+h, y, exact, error

!x+h is associated with Yn+1. Then x+h = Xn+1

!for h=0.1   y(1)=0.6281     error=0.0216

!for h=0.1   y(3)= 0.00803   error=0.00308

!the error decreases as x increases

end do

 

Print *,

!smaller h and higher number of steps gives small error

h=0.05

!number of steps increases as h decreases

nstep=3./h  !60 steps

y=1.   !y(0)=1

do i=0,nstep

   x=i*h    !It guarantees interval from 0 to 3

   y=y+h*func(x,y)

!Y(n+1)=sum Y(n)+ h*sum f(x,y)

   exact=exp((-(x+h)**2)/2)

   error=exact-y

   print *, i, x+h, y,exact, error

!for h=0.05  y(1)=0.6169     error=0.0104

!for h=0.05  y(3)=0.0094    error=0.0016

!the error decreases as x increases

!the error decreases as h decreases

end do

print *,

 

y=1.

h=0.1

do i=0,10  !10 steps

   x=i

   y=y+h*func(x,y)

!Y(n+1)=Y(n)+ h*f(x,y)

   exact=exp((-(x+h)**2)/2)

   error=exact-y

   print *, i, x+h, y, exact, error

!for h=0.1  Y(1)=0.8999 error=-0.3529 (bad!)

!for h=0.1  Y(3)=0.5039 error=-0.4958 (bad!)

!the error decreases as x increases

end do

 

print *,

y=1.

h=0.05

do i=0,10  !10 steps

   x=i

   y=y+h*func(x,y)

!Y(n+1)=Y(n)+ h*f(x,y)

   exact=exp((-(x+h)**2)/2)

   error=exact-y

   print *, i, x+h, y, exact, error

!for h=0.05  Y(1)=0.9499   error=-0.3737 (bad!)

!for h=0.05  Y(3)=0.7267   error=-0.7172(bad!)

!Smaller number of steps gives higher error!

!the error decreases as x increases

end do

end program euler

Comentários

Postagens mais visitadas deste blog

RECURSIVE

HYDROGEN-RADIAL

RUNGE-KUTTA