- #1
fluidistic
Gold Member
- 3,949
- 264
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.