Numerično odvajanje

 

Naloga:
Napišite program, ki tabelira funkcijo sin(x) z željenem korakom, zapiše rezultate na dve decimalki in potem numerično izračuna prvi in drugi odvod.

program odvodi
implicit none
real :: x,h,y,x1,y1,dy,f
integer::OK
write(*,*) 'vnesi korak tebeliranja funkcije, h=?'
read(*,*)h
!tabeliranje funkcije na dve decimalki
x=-10.
open(111,file='tabela.txt')
do while (x.lt.10)
 write(111,'(2f10.2)')x,f(x)
 x=x+h
enddo
close(111)
!racunanje prvega odvoda
!branje datoteke je narejeno tako, da bere dokler ne pride do konca datoteke
!odvod je smerni koeficient skozi sosednji tocku
!x je na sredini med x-oma 
open(15,file='tabela.txt')
open(16,file='odvod.txt')
read(15,*)x,y
OK=0
do while (OK==0)
 read(15,*,iostat=OK)x1,y1
 if (OK==0) then
  dy=(y1-y)/(x1-x)
  write(16,*)(x+x1)/2.,dy
 endif
 x=x1
 y=y1
enddo
close(15)
close(16) 
!racunanje drugega odvoda
! vse isto kot pri prvem odvodu, le da tu odvajamo prvi odvod in ne funkcije
open(15,file='odvod.txt')
open(16,file='odvod2.txt')
read(15,*)x,y
OK=0
do while (OK==0)
 read(15,*,iostat=OK)x1,y1
 if (OK==0) then
  dy=(y1-y)/(x1-x)
  write(16,*)(x+x1)/2.,dy
 endif
 x=x1
 y=y1
enddo
close(15)
close(16)
end program odvodi

function f(x)
implicit none
real::x,f
! tu napisemo funkcijo, katero bomo tabelirali
f=sin(x)
end function f

Tekst sedaj shranimo kot datoteko odvodi.f90 in prevedemo.

Tu je sedaj še print screen postopka prevajanja in rusanja v gnuplotu ter slike za različne korake. V kolikor vam kakšna podrobnost ni jasna, mi sporočite.





PDF dokument slik.

Tu so se txt datoteke za korak 0.025.
tabela.txt odvod.txt odvod2.txt

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