Naloga:
Napišite program, ki reši diferencialno enačbo z različnimi metodami.
program dif implicit none real(8) :: x,y,h,f,k1,k2,k3,k4 integer :: i write(*,*) 'vnesi korak, h=?' read(*,*)h !Eulerjeva metoda x=0 y=2 open(15,file='euler.txt') do while (x.lt.10) write(15,*)x,y y=y+h*f(x,y) x=x+h enddo close(15) !izboljsana Eulerjeva metoda x=0 y=2 open(15,file='ieuler.txt') do while (x.lt.10) write(15,*)x,y k1=h*f(x,y) k2=h*f(x+h/2.,y+k1/2.) y=y+k2 x=x+h enddo close(15) !RK4 x=0 y=2 open(15,file='rk4.txt') do while (x.lt.10) write(15,*)x,y k1=h*f(x,y) k2=h*f(x+h/2.,y+k1/2.) k3=h*f(x+h/2.,y+k2/2.) k4=h*f(x+h,y+k3) y=y+(k1+2*k2+2*k3+k4)/6. x=x+h enddo close(15) end program dif function f(x,y) implicit none real(8)::x,f,y ! tu napisemo odvod kot funkcijo x in y f=(y+x**2-2)/(1+x) end function f
Tekst sedaj shranimo kot datoteko dif.f90 in prevedemo.
Tu je sedaj še print screen postopka prevajanja in risanja z gnuplotom. V kolikor vam kakšna podrobnost ni jasna, mi sporočite.
Nazaj na osnovno stran za predmet Uporaba numeričnih metod v kemiji.