Professional Documents
Culture Documents
f 1 x 0
!
f ( x ) n punctul x0 ,dac f(x 0 (x) f(x0 ) lim (x
exist , este :
poate aproxima destul de bine derivata func iei n punctul x0 , f ( x0 ) . Valoarea lui negativ , derivata func iei f '( x0 ) putnd fi aproximat i cu expresia:
'
(x
poate fi i
f x (x f x0 D- = 0 (x
n figura 4.1 se observ c la limit pentru (x p 0 ambele corzi ale curbei, PQ i QR, devin tangente la curb n x0 , QT. Dac se consider coarda PR la curb , se observ c ea aproximeaz mult mai bine derivata func iei n punctul x0 .
f ' ( x0 ) } f x0 (x
f x0 (x
2 (x ! D+ D 2 x0 :
h h f x0 f x0 2 2 f ' x0
} h
Dac not m
2(x ! h ,
Deoarece n formula de calcul a derivatei numerice intervin numai dou puncte x0 h / 2 i x0 h / 2 , numim aceast formul derivata prin dou puncte a func iei f ( x ) . Pentru calculul derivatelor de ordin superior se aplic formula (4.5) pentru func ia f ' (x ). Pentru o mai bun n elegere se face un calcul complet al derivatei de ordinul doi i trei a metodei de calcul a derivatelor de ordin superior.
y P Q
!
y ! f ( x) x
h 3 f x 0 h 2 f x0 2 2 ! h3
h f x0 2
h h f x0 2 f x0 2 2
3 3 h h f x 0 h 3 f x 0 3 f x 0 f x 0 h 2 2 2 2 ! h3
Algoritmul :
DERIVATA NUMERIC PRIN TREI PUNCTE Deoarece n calculul acestei derivate numerice intervin trei puncte o denumim derivata numeric prin trei puncte . Se pune problema determin rii derivatei numerice a func iei f ( x ) n punctul x0 , sub forma: f ' x 0
! af x0 h1
bf x0
cf x0 h2
unde x0 , h1 , h2 sunt date cunoscute, iar a, b, c necunoscute. Pentru determinarea acestor necunoscute vom considera func ia f ( x ) , o constant , liniar i p tratic . Pentru f (x ) ! c f ' ( x ) ! 0, f ' (x0 ) ! 0, iar ecua ia (4.13) devine: 0 ! a bc , ' pentru f ( x ) ! ( x x0 ) f (x ) ! 1, f ' ( x0 ) ! 1 i 1 ! h1a 0b h2 c , 2 ' pentru f (x ) ! ( x x0 ) f ( x ) ! 2( x x0 ), f ' ( x0 ) ! 0 i
2 2 0 ! h1 a 0b h 2 c
Deoarece h1, h2 > 0 i determinantul sistemului ( ! h1 h2 (h1 +h2 ) { 0, sistemul este unic determinat. Rezolvnd sistemul, se ob in valorile necunoscutelor :
a!
2 2 h1 h2 , b ! h2 h1 , c ! h1h2 ( h1 h2 ) h2 h1 h2
h1 h1 h2
f ( x ) prin
2 2 2 h12 f x0 h2 h2 h1 f x0 h2 f x0 h1
h1h2 h1 h2
care d o eroare de trunchiere nul pentru func iile constante, liniare h1 ! h2 ! h / 2 se ob ine formula derivatei numerice prin dou puncte.
i p tratice. Pentru
Algoritm: double Derivata3P( double (*f) (double), double x0, double h1,double h2) { return(h1*h1*f(x0+h2)+(h2*h2-h1*h1)*f(x0)-h2*h2*f(x0-h1))/(h1*h2*(h1+h2)); }
DERIVATA NUMERIC PRIN CINCI PUNCTE Pentru formula acestei derivate se utilizeaz cinci puncte, dou cte dou egal distan ate de punctul central, n care se calculeaz derivata :
x0 2h, x0 h, x0 , x0 h, x0 2h
Formula derivatei numerice prin cinci puncte se caut sub forma : f ' x0
! af x0 2h
bf x0 h
cf x0
df x0+h
x0 2h
(4.26) +ef Pentru determinarea necunoscutelor a , b, c, d, e, particulariz m func ia f ( x ) cu func ie: constant , liniar , p tratic , de gradul trei i de gradul patru . Pentru f ( x) ! c f ' ( x) ! 0, f ' ( x0 ) ! 0 i ecua ia (4.26) devine: 0 ! a b c d e Pentru f ( x ) ! x x0 f ' (x ) ! 1, f ' ( x0 ) ! 1 i 1 ! 2ha hb 0c hd 2he Pentru f (x ) ! ( x x0 )2 f ' ( x ) ! 2( x x0 ), f ' ( x0 ) ! 0 i 0 ! 4h2a h 2b 0c h 2d 4h 2e Pentru f (x ) ! ( x x0 )3 f ' ( x ) ! 3(x x0 )2 , f ' ( x0 ) ! 0 i 0 ! 8h3a h3b 0c h3d 8h3e Pentru f (x ) ! ( x x0 )4 f ' ( x ) ! 4( x x0 ), f ' ( x0 ) ! 0 i 0 ! 16h 4a h 4b 0c h 4d 16h4e Determinantul sistemului format de ecua iile de mai sus este ( = 144h10 { 0 pentru c h >0. Ca urmare sistemul dat este unic determinat i are solu iile : 9 9 9 9 a = 12h , b = -96h , c = 0 , d = 96h , e = -12h Formula derivatei numerice prin cinci puncte a func iei f ( x ) este :
f ' ( x0 ) ! 1 ?f x0 2h
8 f x 0 h
8 f x0 h
f x 0 2h
A 12h
Aceast formul de derivare numeric are eroarea de trunchiere zero pn la func ii de gradul patru. Pentru func ii de grad mai mare ca patru, eroarea de trunchiere se determin analog ca la derivatele precedente, ob inndu-se valoarea :
eT ! 24 4 h f 5
IV
unde
x ?x0 2h , x0 2hA
Dac num rul de puncte cre te pentru calculul unei derivate, atunci eroarea de trunchiere se mic oreaz . Algoritmul : double Derivata5P( double (*f) (double), double x0,double h) { return(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h); }