- #1

fluidistic

Gold Member

- 3,654

- 100

## Main Question or Discussion Point

I'm trying to make a program that can approximate a differential equation via the Euler's method.

Here is my program :

Program diff

implicit none

Real :: t_0, x_0, t_f, k_j, h

Real :: t,x

Integer :: n,j

Write(*,*)'Chose t_0 and x_0'

Read(*,*)t_0, x_0

Write(*,*)'Chose t_f'

Read(*,*)t_f

Write(*,*)'Chose n'

Read(*,*)n

h=(t_f-t_0)/n

Do j=1,n

k_j=f(t,x)

x=x+h*k_j

t=t+h

Write(*,*)t,x

end do

Contains

Real Function f(t,x)

real, intent(in) :: x,t

f=2*x

end function

end program

Here I am trying to approximate the solutions of the following differential equation : [tex]x'=2x[/tex] and [tex]x(0)=1[/tex] in the interval [0,1], using a step h of 0.1. So in my program, I input t_0=0, X_0=1, t_f=1 and n=10.

I know where is the problem of my program. It's in the "do" part. And more exactly here I think "k_j=f(t,x)". For example, the first term should be k_1=f(0,1) so it must be equal to 2. But the program doesn't do it. It doesn't understand that f(t,x) should be evaluated in t=0, x=1 for the first term. How can I fix this? I'm thinking about another "do" part, inside of the one I already have... But can't figure it out. Thanks for your help.

Here is my program :

Program diff

implicit none

Real :: t_0, x_0, t_f, k_j, h

Real :: t,x

Integer :: n,j

Write(*,*)'Chose t_0 and x_0'

Read(*,*)t_0, x_0

Write(*,*)'Chose t_f'

Read(*,*)t_f

Write(*,*)'Chose n'

Read(*,*)n

h=(t_f-t_0)/n

Do j=1,n

k_j=f(t,x)

x=x+h*k_j

t=t+h

Write(*,*)t,x

end do

Contains

Real Function f(t,x)

real, intent(in) :: x,t

f=2*x

end function

end program

Here I am trying to approximate the solutions of the following differential equation : [tex]x'=2x[/tex] and [tex]x(0)=1[/tex] in the interval [0,1], using a step h of 0.1. So in my program, I input t_0=0, X_0=1, t_f=1 and n=10.

I know where is the problem of my program. It's in the "do" part. And more exactly here I think "k_j=f(t,x)". For example, the first term should be k_1=f(0,1) so it must be equal to 2. But the program doesn't do it. It doesn't understand that f(t,x) should be evaluated in t=0, x=1 for the first term. How can I fix this? I'm thinking about another "do" part, inside of the one I already have... But can't figure it out. Thanks for your help.