Vous êtes sur la page 1sur 4

program derivare

implicit none
real*8,parameter::x0=1.d0,h=1.d-2
integer,parameter::nmax=5
real*8::dd1,ds1,dc2,dd2,dc4,d2dc2,d2dc4,f,fd,fs,x(-nmax:nmax),y(nmax:nmax),edd1,eds1,edc2,edd2,edc4,ed2dc2,ed2dc4,fdex,fsex
integer::n,i
open(1,file="derivare.txt")
n=2
!
=================================================
=================================================
======
!facem discretizarea(construim x-1,x-2,x0,x1,x2)
!
=================================================
=================================================
======
do i=-n,n
x(i)=x0+i*h
y(i)=f(x(i))
enddo
!
=================================================
=================================================
======
!calculez derivatele de ordin I si II
!
=================================================
=================================================
======
dd1=(y(1)-y(0))/h
ds1=(y(0)-y(-1))/h
dc2=(y(1)-y(-1))/2/h

dd2=(-y(2)+4.d0*y(1)-3.d0*y(0))/2.d0/h
dc4=(y(-2)-8.d0*y(-1)+8.d0*y(1)-y(2))/12.d0/h
d2dc2=(y(1)-2.d0*y(0)+y(-1))/h**2
d2dc4=(-y(-2)+16.d0*y(-1)-30.d0*y(0)+16.d0*y(1)-y(2))/12.d0/h**2
!
=================================================
=================================================
======
!calculez valorile exacte ale derivatelor de ordinul I si II
!
=================================================
=================================================
======
fdex=fd(x0)
fsex=fs(x0)
!
=================================================
=================================================
======
!calculez eroriile relative procentuale
!
=================================================
=================================================
======
edd1=dabs((fdex-dd1)/fdex)*100
eds1=dabs((fdex-ds1)/fdex)*100
edc2=dabs((fdex-dc2)/fdex)*100
edd2=dabs((fdex-dd2)/fdex)*100
edc4=dabs((fdex-dc4)/fdex)*100
ed2dc2=dabs((fdex-d2dc2)/fdex)*100
ed2dc4=dabs((fdex-d2dc4)/fdex)*100
!
=================================================

=================================================
======
!afisez
!
=================================================
=================================================
======
100 format(2(A,2x,F15.7,2x))
write(1,100) "dd1=",dd1,"edd1=",edd1
write(1,100) "ds1=",ds1,"eds1=",eds1
write(1,100) "dc2=",dc2,"edc2=",edc2
write(1,100) "dd2=",dd2,"edd2=",edd2
write(1,100) "dc4=",dc4,"edc4=",edc4
write(1,100) "d2dc2=",d2dc2,"ed2dc2=",ed2dc2
write(1,100) "d2dc4=",d2dc4,"ed2dc4=",ed2dc4
write(*,*) "OK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
read(*,*)
endprogram

!
=================================================
=================================================
======
! functia care calculeaza valoarea functiei f in punctul x
!
=================================================
=================================================
======
function f(x)
implicit none
real*8::x,f
f=dlog(x)-dexp(x)

endfunction

!
=================================================
=================================================
======
!functia care calculeaza valoarea derivatei I a functiei f in punctul x
!
=================================================
=================================================
======

function fd(x)
implicit none
real*8::x,fd
fd=1.d0/x-dexp(x)
endfunction
!
=================================================
=================================================
======
!functia care calculeaza valoarea derivatei a II-a a functiei f in punctul x
!
=================================================
=================================================
======

function fs(x)
implicit none
real*8::x,fs
fs=-1.d0/x**2-dexp(x)
endfunction

Vous aimerez peut-être aussi