Numerično reševanje diferencialnih enačb

 

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 numerične metode za kemike.

 

Fakulteta za kemijo in kemijsko tehnologijo

Katedra za fizikalno kemijo

Univerza v Ljubljani

Večna pot 113, K3.009

1000 Ljubljana

Slovenija

tel: +386 1 479 8540

e-pošta: tomaz pika urbic at fkkt.uni-lj.si

Govorilne ure so po dogovoru.

Prešernove nagrade