Sunteți pe pagina 1din 21

CURSUL 2

ERORI DE CALCUL NUMERIC


APROXIMAREA FUNCIILOR PRIN INTERPOLARE
1. Erori de calcul numeric

O formula de calcul numeric se aplica, de obicei, in mod repetat. In


consecina, prezint importanta nu numai eroarea introdusa intr-o etapa, ci si
tendina de a amplifica sau, dimpotriv, de a atenua erorile introduse de anterior,
adic stabilitatea metodei numerice. Studiul erorilor numerice rmne deci o
problema deschisa, care trebuie luata in considerare pentru fiecare metoda de
calcul in parte.
1.1. Surse de erori

Erorile inerente: sunt erorile legate de cunoaterea aproximativa a unor


valori provenite din msurtori sau din faptul c avem de-a face cu numere
iraionale (algebrice sau transcendente: numerele , e,

3 , etc.). Evident, rezultatul

oricror calcule depinde i de precizia datelor introduse iniial. Ca erori inerente


pot fi considerate i erorile de conversie fcute la trecerea in baza 2 a unor numere
care se introduc in memoria calculatoarelor numerice actuale. Spre exemplu,
numrul 0.1 reprezentat printr-un numr finit de zecimale in baza 10, devine o frac
zecimala periodica in baza 2 (0.110 0.0(0011)2).
Erorile de metod sau erorile de trunchiere sunt provenite din aproximaiile
fcute la deducerea formulelor de calcul. Exemple: restul RN(x) la interpolarea
polinomial, distana

x n +1

la rdcin, din metodele iterative de calcul, erorile

introduse prin trunchierea seriilor la un anumit rang, etc. Spre deosebire de erorile
inerente, erorile de metod pot fi reduse, in principiu, orict de mult.
Erorile de rotunjire sunt legate de posibilitile limitate de reprezentare a
numerelor in calculatoarele numerice. In general, orice calculator poate reprezenta

numerele cu un numr redus de cifre semnificative, depinznd de lungimea


cuvntului (numrul de bii utilizat la stocarea unui numr In mod curent se
lucreaz cu un echivalent de circa 7 cifre semnificative n simpl precizie i de
circa 15 cifre semnificative in dubla precizie.
Dup cum se tie, n memoria intern a calculatoarelor actuale se folosete
reprezentarea n virgul mobil, in forrna normalizat. Astfel, orice numr real x se
scrie x = f b n , f < 1 unde f este un numr real denumit mantis, b > 0(b 1)

este baza sistemului de numeraie utilizat, iar n (ntreg) este exponentul. n forma
normalizat mantisa este cuprins in intervalul [b-1, 1)
b 1 f < 1
Singura excepie de la acest regul de reprezentare este numrul zero.
In consecin un numr real cu mai multe cifre semnificative este rotunjit la
numrul de cifre maxim. Acest lucru se realizeaz prin rotunjirea mantisei, Alte
rotunjiri se efectueaz n decursul operaiilor.
In general, notand cu x valoarea exact a numdrului i cu x valoarea calculat
(aproximativ), eroarea absolut ex se definete ca diferena dintre valoarea exact
i cea aproxirnativ
ex = x x

Raportul

ex
se numete eroare relativ, notat deseori cu x
x
x =

ex
x

Fie t numrul de cifre semnificative. Pentru comoditate, s presupunem c lucrm


in baza 10 (b = 10). Atunci, un numr x a crui valoare o presupunem iniial
cunoscut cu exactitate. se va scrie
x = f 10 n + g 10 nt , f , g [0.1 , 1)

unde g conine cifrele care nu pot fi incluse in mantisa f. Rotunjirea se face de


obicei simetric, adic se nlocuiete
g = 1 daca g 0.5, g = 0 daca g < 0.5
n acest fel, marginea erorii relative este
g 10 n t
ex =
5 10 t
n
f 10
Erorile cu marginea data de formula de mai sus se fac la introducerea numerelor
reale in memoria calculatorului numeric. Ele afecteaz rezultatele in funcie de
operaiile la care sunt supuse valorile introduse.
PROPAGAREA ERORILOR IN CALCULE
Propagarea erorilor la nmultire: Vom considera dou nurnere, x i y, introduse

cu erorile ex respectiv ey
x = x + ex , y = y + e y
Presupunem c se efectueaz produsul numerelor
xy = ( x + ex )( y + e y ) = x y + ye x + x e y
unde s-a neglijat produsul exey considerat ca avnd un ordin do mrime suficient de
mic. Rezult eroarea la nmulire

exy
xy

ex e y
+ = x + y
x
y

Rezult c la nmu1ire erorile relative introduse iniial se adun. n afar de aceste


erori, pot aprea ns noi erori, deoarece produsul poate avea, la rndul su un
numr de cifre semnificative mai mare dect cel admis (notat cu t) necesitnd o
nou rotunjire (simetrica). Notnd cu p aceast nou eroare, vom obine eroarea
relativ total tp la nmulirea a dou numere
etp = ex + e y + e p

iar ca margine a erorii


etp e x + e y + e p < 15 10 t

Desigur, aceast evaluare este acoperitoare deoarece erorile nu se adun, ci se


compun dup legi mai complicate (probabilistice).
Propagarea erorilor la mprire
x (x + ex ) x ex e y x
=
= 1 + + = (1 + x + y )
y ( y + e y ) y
x
y y

unde am neglijat termenii de grad superior lui 2 in ex i ey. S-a folosit dezvoltarea
n serie Taylor pentru

1
1 y + ... . Rezult c eroarea relativ la mprire,
1+ y

datorat erorilor de reprezentare in calculator (ex i ey), este

ex
y

x
y

= x y

adic este egal cu diferena erorilor relative introduse iniial in valorile


numrtorului i numitorului. La acestea se adaug eroarea de rotunjire la
reprezentarea raportului

x
, pe care o vom nota cu d , astfel nct eroarea relativ
y

total la mprirea dou numere x, y este


etd = e x e y + ed
Propagarea erorilor la adunare: In acest caz, suma a dou numere este

x + y = x + y + ex + e y
astfel nct eroarea relativa la sumare este
ex+ y
x+y

(e

+ ey )

(x + y )

x
y
+
(x + y ) x (x + y ) y

adic o sum ponderat a erorilor introduse la reprezentarea in calculator a


cantitii sumate. i n acest caz se introduce a eroare suplimentar la reprezentarea
sumei x + y , a crei valoare relativ o vom nota cu s . Ca urmare, eroarea relativ
la sumare ts va fi

ets =

x
y
x +
y + es
x+y
x+y

Aplicaie: s scriem eroarea total la calculul expresiei

E = ( x + y )z ( x + y )z
Solutie:

etE =

x
y
x +
y + e z + es + e p
x+y
x+y

cu marginea
x + y

etE 15 10 t
+ 3
x+y

Ca recornandare general, n calculul numeric trebuie studiat i propagarea


erorilor. n anumite cazuri, acurnularea erorilor poate conduce la rezultate complet
eronate. Pentru a ilustra aceast posibilitate, s considerrn calculul integralei
1

I n = x n e x 1dx
0

O modalitate de calcul o reprezint utilizarea unei relaii de recuren


I n = 1 nI n 1 , n = 1,2 ,...

plecnd de la valoarea I 0 = 1 e 1 . Rezultatele calculelor pentru diferitele valori ale


lui n sunt date in tabelul de mai jos. Se observ c pentru n = 13, se obine.o
valoare negativ a integralei, ceea ce nu este posibil, funcia integrat fiind pozitiv
pe [0, 1]. Rezult c valorile obinute sunt eronate, incepnd cu o anurnit valoar a
lui n. Explicaia o constituie faptul c valoarea integralei I0 se calculeaz cu o

eroare e0 care este amplificat prin aplicarea formulei de recuren, astfel c, la


calculul lui I13 eroarea este

e13 13! e0 = 6227 109 e0


Pentru a obine o valoare corect n cazul indicilor n mari se aplic formula de
recuren sub forma
I n 1 =

1 In
, n = N , N 1,...
n

in care erorile sunt reduse in fiecare etap. Prin urmare, plecnd de la un N


suficient de mare eroarea introdus din necunoa valorii In va fi redus, astfel nct
s obinem rezultate corecte. Observnd c valoarea integralei scade cu n, vom
alege N = 20 i vom aproxima I20 0, calculnd integralele de indice mai mic din
ce n ce rnai precis. Valonile obinute sunt date in acelade mai sus. Se observ c
rezultatele sunt rnai bune la indici mari i identice la indici mici (n < 7).
Tabel. Exemplu de amplificare a erorilor
n

I n = 1 nI n 1 , n = 1,2 ,...

0
1
3
7
9
13
17
20

0.632121
0.367879
0.207277
0.112383
0.091586
-0.377925
-

I n 1 =

1 In
, n = N , N 1,...
n
0.632121
0.367879
0.207277
0.112383
0.091612
0.066948
0.052778
0.000000

1. Polinomul de interpolare Lagrange

Una dintre cele mai vechi i mai generale formule de interpolare este cea
datorat lui Lagrange.
S presupunem ca n intervalul [a, b] sunt specificate n+1 valori ale argumentului,
x0, x2, , xn, i valorile corespunztoare ale unei funcii f(x)

f(xi) = yi ,

i = 0, 1, 2, ,n

Se cere construirea unui polinom P de gradul n care ia n punctele specificate, xi,


aceleai valori ca i funcia f(x)
Pn(xi) = yi , i = 0, 1, 2, ,n

n anumite situaii valorile yi se determin experimental i se caut o formul


pentru f care n punctele xi s coincid cu valorile date, iar n rest s aproximeze
valorile experimentale. O variant de formul este aceea a unui polinom de gradul
n dat de urmtoarea teorem:
Teorema: Polinomul de interpolare, Pn , asociat unei tabele de valori este unic
Pn ( x ) =

x xk
xk
k =0 i

f ( xi ) x

i =0

(1)

k i

Presupunem ca f este o funcie de n+1 ori derivabil.. Dac notm cu


M = sup f ( n+1) ( x ) ,

atunci are loc inegalitatea:


f ( x ) Pn ( x )

M ( x x0 ) ... ( x xn )
( n + 1)!

Sub aceast form polinomul de interpolare se numete polinomul Lagrange.


Pe baza formulei de interpolare a lui Lagrange se poate rezolva i problema
interpolarii inverse, adica gsirea argumentului pentru care polinomul Lagrange

are o anumita valoare. Pentru aceasta este suficient s se considere y ca variabil


indepenenta i s se scrie o formul exprimnd x ca funcie de y
x=

y yk
y yk
k =0 i

xi

i =0

(2)

k i

Cu ajutorul acestei formule se poate gsi o rdcin a ecuaiei f(x) = 0. n acest


scop se calculeaz un tablou de valori yi , i = 0, 1, 2, ,n pentru argumentele xi
apropiate de rdcina. Considernd apoi y = 0 n formula (2), se gseste rdcina
respectiv. Daca f ( x ) Pn ( x ) este un polinom de gradul n, rdcina determinat
prin aceast metod este exact.

Exemplu: S se realizeze un program care determin

130 folosind polinomul de

interpolareare Lagrange; s se evalueze i eroarea de interpolare.


Rezolvare:

S consideram funcia

x.

f ( x) =

Vom lua ca puncte de diviziune:

x0 = 121, x1 = 144, x2 = 169 .

121

144

169

f(x)

11

12

13

Polinomul de interpolare este:


P2 ( x) = 11

Pentru

( x 144)( x 169) 12 ( x 121)( x 169) + 13 ( x 144)( x 121)

valoare

1104

565

intervalul

[121,169],

1200

de

exemplu

x=130

gsim: P2 (130) = 11.400379 , iar

3
130 11.401754 . Deoarece f ' ' ' ( x ) = x 2 =>
8

f ' ' ' este monoton descrescatoare pe I = [121 ,169 ], deci maximul pentru f ' ' ' va fi

3
8

atins n punctul x = 121 . Deci M = 11 5 . Conform formulei (1)


0.001375 = E n (130) =

130 P2 (130) <

3 5 (130 169 )(130 144 )(130 121)


11
= 0.00172
8
3!

Rezolvarea n Scilab:

Se definete un fiier de tip funcie:


function s=lagrange(vx,vy,x);
s=0;
n=length(vx);
for i=1:n
p=1;
for k=1:n
if k~=i
p=p*(x-vx(k))/(vx(i)-vx(k));
end
end
s=s+p*vy(i);

end
endfunction
n fereastra de comand se definesc mai nti vectorii ce conin valorile

corespunztoare pentru x i y, apoi se apeleaz funcia definit mai sus:


x=[121 144 169];
y=[11 12 13];
lagrange(x,y,130)
ans = 11.40043478260870

Observaie: Dac se consider mai multe puncte de interpolare, de exemplu:


-->x=[81 100 121 144 169];
-->y=[9 10 11 12 13];
se va obine:
-->lagrange(x,y,130)
ans = 11.401672
un rezultat mai apropiat de
-->sqrt(130)
ans = 11.401754
Exerciii:

1. S se determine valoarea polinomul de interpolare Lagrange pentru funcia


f ( x ) = sin( x ) + cos( x ) , nodurile x 0 = 0; x 1 =

1
1
1
1
; x 2 = ; x 3 = i x = .
6
4
2
5

2. S se determine 115 considernd o reea de trei puncte care conine valoarea


115.
3. S se determine funcia de interpolare pentru f ( x ) = sin( x ) , nodurile
x 0 = 0; x 1 =

1
1
1
; x 2 = ; x 3 = . S se reprezinte grafic i s se compare graficele cu
6
4
2

cele obinute prin formula lui Lagrange.


4. Estimai valorile temperaturii la momentele de timp 2.5 sec i 4.9 sec, cu datele
din tabelul de mai jos.
Temperatura [0C]
Timp [s]

0.0
1.0
2.0
3.0
4.0
5.0

0.0
20.0
60.0
68.0
77.0
110.0

2. Polinomul de interpolare Newton

Definiie: Fie f : [a , b] R i x0, x1,, xn n+1 puncte distincte din [a, b]. Se
numesc diferene divizate de ordinul nti ale lui f urmtoarele expresii:
f [ x0 , x1 ] =

f ( x1 ) f ( x0 )
f ( x2 ) f ( x1 )
f ( xn ) f ( xn 1 )
, f [ x1 , x2 ] =
, ..., f [ xn 1 , xn ] =
x1 x0
x2 x1
xn xn 1

Diferenele divizate de ordinul k+1 se definesc cu ajutorul diferenelor divizate de


ordinul k:
f [ xi , xi +1 ,..., xi + k +1 ] =

f [ xi +1 , xi + 2 ,..., xi + k +1 ] f [ xi , xi +1 ,..., xi + k ]
x i + k +1 xi

Polinomul Pn(x)=f(x0)+f[x0,x1](x-x0)++f[x0,x1,,xn](x-x0)(x- xn-1) se numete


polinomul lui Newton cu diferene divizate.

Definiie: Fie f : [a , b] R i h>0 o constant. Se numesc diferene finite (la


dreapta) de ordinul nti, respectiv diferene finite (la stnga) de ordinul doi
urmtoarele expresii:
f ( x ) = f ( x + h) f ( x )
f ( x ) = f ( x ) f ( x + h)

Teorem: Se consider o reea de punce echidistante x 0 , x 1 ,..., x n , de pas h,


xi=x0+ih, i = 1, n i valorile corespunztoare f(xi)=yi , i = 1, n . Atunci polinoamele
Pn1 ( x ) = y0 + y0

x x0
( x x0 )( x x1 )
( x x0 )...( x xn 1 )
... + n y0
+ 2 y0
2
1! h
2! h
n! hn

i
Pn 2 ( x ) = yn + yn

x xn
( x xn )( x xn 1 )
( x xn )( x xn 1 )...( x x1 )
... + n yn
+ 2 yn
1! h
2! h2
n! hn

sunt polinoame Lagrange i se numesc polinoame Newton cu diferene finite de


prima i a doua spe.

Observaia 1: Polinomul lui Newton de spea nti se utilizeaz cnd x, punctul n


care se aproximeaz f(x), este mai aproape de x0, iar Polinomul lui Newton de
spea a doua se utilizeaz cnd x este mai aproape de xn.

Observaia 2: Dac notm t =

x x0
atunci polinomul de interpolare Newton cu
h

diferene finite (la dreapta) de prim spe are urmtoarea form:


Pn1 ( t ) = y0 + y0

t
t ( t 1)
t ( t 1)...(t n + 1)
... + n y0
+ 2 y0
.
1!
2!
n!

Observaia 3: Daca notm t =

xn x
atunci polinomul de interpolare Newton cu
h

diferene finite (la stnga) de spea a doua are urmtoarea form:


Pn 2 ( t ) = yn + yn

t
t ( t + 1)
t ( t + 1)...(t + n 1)
... + n yn
+ 2 yn
.
1!
2!
n!

Exemplu:

Se consider urmtoarele date experimentale:


xi

0.5

1.5

yi

1.1276

1.5431

2.3534

Se cere s se calculeze valoarea lui y pentru x=0.25 folosind polinomul de


interpolare Newton cu diferene finite la dreapta i valoarea lui y pentru x=1.25
folosind polinomul de interpolare Newton cu diferene finite la stnga.
Rezolvare

yi

2yi

1.1276

y0 = 0.1276

2y0 = 0.2879

1.5431

y1 = 0.4755

1.5

2.3534

y2 = 0.8103

2y1 = 0.3948

y3

2 y3

xi

f(xi)=yi

0.5

3yi

2y1 = 0.1069

3 y3

Calculul lui y pentru x=0.25:


0.1276
0.2879
(0.25 0) +
(0.25 0)(0.25 0.5) +
1!0.5
2!0.52
0.1069
+
(0.25 0)(0.25 0.5)(0.25 1) = 1.03449
3!0.53

P31 (0.25) = 1 +

Calculul lui y pentru x=1.25:

P3 2 (1.25) = 2.3534 +
+

0.1069
3!0.53

0.8103
0.3948
(1.25 1.5) +
(1.25 1.5)(1.25 1) +
1!0.5
2!0.52
(1.25 1.5)(1.25 1)(1.25 0.5) = 1.89222

Rezolvarea n Scilab/ (pentru diferene divizate):

Se definete un functia:
function pol=newtonDivizate(x,y,v)
n=length(x);
for i=1:n-1
for k=n:-1:i+1
y(k)=(y(k)-y(k-1))/(x(k)-x(k-i))
end
end
pol=y(n);
for i=n:-1:2
pol=pol*(v-x(i-1))+y(i-1);
end
endfunction

n fereastra de comand se definesc mai nti vectorii ce conin valorile


corespunztoare pentru x i y, apoi se apeleaz funcia definit mai sus:
x=[121 144 169];
y=[11 12 13];
newtonDivizate(x,y,130)
ans = 11.40043478260870

Observaie: Rezultatul trebuie s fie acelai cu cel obinut prin interpolarea


Lagrange.
lagrange(x,y,130)
ans = 11.40043478260870
Exercitiu: S se calculeze valoarea polinomului de interpolare Newton cu

diferene divizate pentru xi =

i
12
, n = 0,5 i f(x)=sin(x) n x =
.
5
25

Rezolvare: (n Scilab cu diferene divizate)


function pol=newtonDivizate(x,y,v)
n=length(x);
for i=1:n-1
for k=n:-1:i+1
y(k)=(y(k)-y(k-1))/(x(k)-x(k-i))
end
end
pol=y(n);
for i=n:-1:2

pol=pol*(v-x(i-1))+y(i-1);
end
endfunction
x=[0 %pi/5 %pi*2/5 %pi*3/5 %pi*4/5 %pi];
y=sin(x);
newtonDivizate(x,y,%pi*12/25)
sin(%pi*12/25)
ans = 0.9977572
ans = 0.9980267
Rezolvare: (cu diferene finite la dreapta)
function pol=newtonDifFinDr(a,h,n,y,v)
for i=1:n
x(i)=a+(i-1)*h;
end
for i=1:n-1
for k=n:-1:i+1
y(k)=y(k)-y(k-1)
end
end
pol=y(1);p=1;
for i=2:n
p=p*(v-x(i-1))/((i-1)*h)
pol=pol+y(i)*p;
end
endfunction
x=[0 %pi/5 %pi*2/5 %pi*3/5 %pi*4/5 %pi];
y=sin(x);
newtonDifFinDr(0,%pi/5,6,y,%pi*12/25)
sin(%pi*12/25)
ans = 0.9977572
ans = 0.9980267
Exercitii
1. S se calculeze valoarea aproximativ a funciei f(x)=sin(x)+cos(x) n
punctul 1/6, folosind polinomul Newton cu diferene divizate pe reeaua
xj=j*0.25, j= 0,3 .
2. S se scrie polinomul lui Newton cu diferene finite la stnga pentru funcia
f(x)=sin(x) pe reeaua xj=j*0.25, j= 0,3 n punctul 0.65.
3. S se calculeze valoarea aproximativ a funciei f(x)=cos(x)+1 n punctul
1/5, folosind polinomul lui Newton cu diferene divizate pe reeaua
xI=i*0.25, i= 0,3 .

4. S se scrie polinomul lui Newton cu diferene finite la dreapta pentru funcia


f(x)=sin2x pe reeaua xi=i*0.5, i= 0,3 n punctul 1.25.
5. S se calculeze valoarea aproximativ a funciei f(x)=cos(x) n punctul 1/6,
folosind polinomul Newton cu diferene divizate pe reeaua xj=j*0.25, j= 0,3 .
6. S se scrie polinomul lui Newton cu diferene finite la stnga pentru funcia
f(x)=sin(x/2) pe reeaua xj=j/2, j= 0,3 n punctul 0.333.

3. Calculul derivatei unei funcii definit prin date de interpolare

Derivata unei funcii definit prin datele de interpolare ( x i , y i ) cu


x i = a + ih, i = 0, 1, ..., n se aproximeaz prin derivata polinomului de interpolare al

lui Lagrange astfel:


f ( x )

( 1)n i n n (q j )
1 n
d
L(a , a + h,..., a + nh; f )( x ) = yi

h i 0 i!( n i )! k = 0 j = 0
dx
k i j i ,k

unde x = a + qh, h =

ba
n * .
n

Aproximarea derivatei prin polinomul de interpolare al lui Newton cu diferene

1 n i y 0 '
Pi ' ( t ) unde
finite la dreapta are formula: P ( t ) =
h i =1 i!
'

Pi' ( t ) =

1
x x0
pentru t {1,2,.., i 1} i t =
.
t

k
+
1
h
k =1

Pi ( t )

Observaie: Formula lui Pi' ( t ) se obine dup logaritmarea lui Pi ( t ) = ( t k + 1) .


k =1

Exemplu (aproximare prin derivata polinomului de interpolare Lagrange):


x i = 0.1 i , i = 0,1,...,10, y i = x i3 si x = 0.55 .

Rezolvarea n Scilab:

Se definesc2 funcii: factorial i DerivLagrange.


function f=factorial(n)

f=1;
for i=1:n
f=f*i;
end
endfunction

function DerivLagrange(a,n,h,v)
for i=1:n+1
x(i)=a+(i-1)*h;
y(i)=x(i)^3;
end
q=(v-a)/h;
s1=0;
for i=1:n+1
s2=0;
for k=1:n+1
if k~=i
p=1;
for j=1:n+1
if (j-i)*(j-k)~=0
p=p*(q+1-j);
end
end
s2=s2+p;
end
end
s1=s1+s2*y(i)*(-1)^(n+1-i)/(factorial(i-1)*factorial(n+1-i));
end
d=s1/h
endfunction
Se definesc n fereastra de comand a, n, h i v i apoi se apelaz DerivLagrange:
a=0;
n=10;
h=0.1;
v=0.55;
DerivLagrange(a,n,h,v)
d = 0.90750000000000

Exercitii

1. S se calculeze derivata unei funcii definit prin datele de interpolare:


50
55
60
65
xi
yi

1.699

1.740

1.778

1.813

pentru x=57.

2. S se calculeze derivata funciei f(x)=xex+x2 pentru x=2 i s se compare


rezultatul obinut cu derivata funciei obinut prin metoda de mai sus dac se
consider reeaua de puncte 0; 0.75; 1.5; 2.25.
3. S se calculeze derivata funciei f(x)=sin(x) pentru x=1/8 i s se compare
rezultatul obinut cu derivata funciei obinut prin metoda de mai sus dac se
consider reeaua de puncte dat de relaia: x j =

( j 1)
, j = 1,4 .
4

4. S se calculeze derivata funciei f(x)=sin(x)+cos(x) pentru x=1/6 i s se


compare rezultatul obinut cu derivata funciei obinut prin metoda de mai sus
dac se consider reeaua de puncte dat de relaia: xj=j*0.25, j= 0,3 .
4. Funcii de interpolare spline

Definiie: Fie f : [a , b] R, a = x1 < x2 < ... < xn = b i yi = f ( xi ), i = 1, n . Numim


funcie spline cubic de interpolare funcia
proprietatea

s( xi ) = yi , i = 1, n ;

pe

s : [a , b] R, s C 2 ([a , b])

fiecare

subinterval

cu

[ xi , xi +1 ] ,

s( x ) = pi ( x ), i = 1, n unde pi(x) este un polinom de gradul trei.

Dac notm cu:


mi = s( xi ), i = 1, n ; hi = xi +1 xi ;
i =

2 ( yi +1 yi ) m i + 1 + m i
3 ( yi +1 yi ) m i +1 + 2m i
+

; i =
;
2
hi
hi 3
hi 2
hi

atunci forma polinomului va fi: pi ( x ) = yi + mi ( x xi ) + i ( x xi )2 + i ( x xi )3 .


Coeficienii m0, m1, , mn sunt soluiile sistemului:
m0 = 0 sau 2m0 + 1m1 = d1

i +1mi + 2 + 2mi +1 + i +1mi = d i +1 , i = 1, n 2


m = 0 sau m
n n 1 + 2 m n = d n
n

unde:
i +1 =

y
3
y yi
yi + 1
hi +1
hi
.
, i +1 =
hi i + 2
+ hi +1 i +1
i d i +1 =
hi + hi +1
hi + hi +1
hi + hi +1
hi +1
hi

Exemplu: S se determine funcia spline cubic de interpolare pentru


f ( x) =

x
1 + 10 x

2
3

pe intervalul [-1, 1] considernd xi = 1 + ih, h = , i = 0,3 .

Rezolvarea n Scilab:
function [m,alfa,beta]=fspline(x,y)
n=length(x);
for i=1:n-1
h(i)=x(i+1)-x(i);
end
for i=1:n-2
la(i+1)=h(i+1)/(h(i)+h(i+1));
ro(i+1)=h(i)/(h(i)+h(i+1));
d(i+1)=3*(h(i)/h(i+1)*(y(i+2)-y(i+1))+h(i+1)/h(i)*(y(i+1)y(i)))/(h(i)+h(i+1));
end
a=zeros(n,n);
la(1)=1;ro(n)=1;a(n,n-1)=1;a(1,2)=1;
d(1)=3*(y(2)-y(1))/h(1)-h(1)/2;
d(n)=3*(y(n)-y(n-1))/h(n-1)-h(n-1)/2;
for i=1:n
a(i,i)=2;
end
for i=2:n-1
a(i,i+1)=la(i);
a(i,i-1)=ro(i);
end
m=a^(-1)*d';
for i=1:n-1
alfa(i)=3*(y(i+1)-y(i))/(h(i)^2)-(m(i+1)+2*m(i))/h(i);
beta(i)=-2*(y(i+1)-y(i))/(h(i)^3)+(m(i+1)+m(i))/(h(i)^2);
end
endfunction

Rezultatele se obin n fereastra de comand


x=[-1 -0.333 0.333 1];
y=x./(1+10.*x)
y = 0.11111111111111 0.14291845493562 0.07690531177829
0.09090909090909
[m,alfa,beta]=fspline(x,y);
p=y(3)+m(3)*(0.5-x(3))+alfa(3)*(0.5-x(3))^2+beta(3)*(0.5-x(3))^3
p = 0.08053333070872

Observaie: Interpolare cu functia splin a Scilab-ului


d=splin(x,y); interp(0.5,x,y,d)
ans = 0.0833333

Exerciiu:

Se consider urmtoarele date experimentale:


xi

0.5

1.5

yi

1.1276

1.5431

2.3534

Se cere s se calculeze valoarea lui y pentru x=0.25 folosind funciile spline


cubice. S se compare rezultatul cu cel obinut prin functia splin a Scilab-ului.

4.1 Funcii Scilab pentru interpolare i derivare

Denumire funcie
interpln
linear_interpn
splin
interp
derivative

Semnificaie
Interpolare liniar
Interpolare liniar n dimensional
Interpolare cu funcii spline cubice
Funcii spline cubice de evaluare a unei funcii
Aproximarea derivatelor unei funcii

Interpolare liniar: interpln


x=[1 10 20 30 40];
y=[1 30 -10 20 40];
plot2d(x',y',[-3],"011"," ",[-10,-40,50,50]);
yi=interpln([x;y],-4:45);
plot2d((-4:45)',yi',[3],"000");
50

40

30

20

10

-10

-20

-30

-40
-10

10

20

Interpolare biliniar: linear_interpn


n = 8;
x = linspace(0,2*%pi,n); y = x;

30

40

50

z = 2*sin(x')*sin(y);
xx = linspace(0,2*%pi, 40);
[xp,yp] = ndgrid(xx,xx);
zp = linear_interpn(xp,yp, x, y, z);
xbasc()
plot3d(xx, xx, zp, flag=[2 6 4])
[xg,yg] = ndgrid(x,x);
param3d1(xg,yg, list(z,-9*ones(1,n)), flag=[0 0])
xtitle("Interpolare biliniar pentru 2sin(x)sin(y)")
legends("Puncte de interpolare",-9,1)
xselect()
Bilinear interpolation of 2sin(x)sin(y)

-0.5

-1.9

4
Y

0.9

interpolation points

4
5

5
6

6
7

Interpolare cu funcii spline: splin


deff("y=runge(x)","y=1 ./(1 + x.^2)")
a = -5; b = 5; n = 11; m = 400;
x = linspace(a, b, n)';
y = runge(x);
d = splin(x, y);
xx = linspace(a, b, m)';
yyi = interp(xx, x, y, d);
yye = runge(xx);
xbasc()
plot2d(xx, [yyi yye], style=[2 5], leg=Interpolare spline@Funcie
exact")
plot2d(x, y, -9)
xtitle("Interpolare a funciei Runge")

interpolation of the Runge function

1.0
0.9

0.8
0.7

0.6

0.5

0.4

0.3

0.2

0.1

0.0
-5

-4

-3

-2

-1

interpolation spline
exact function

Calculul aproximativ al derivatei unei funcii de trei variabile


function y=F(x)
y=[sin(x(1)*x(2))+exp(x(2)*x(3)+x(1)) ; sum(x.^3)];
endfunction
function y=G(x,p)
y=[sin(x(1)*x(2)*p)+exp(x(2)*x(3)+x(1)) ; sum(x.^3)];
endfunction
x=[1;2;3];[J,H]=derivative(F,x,H_form='blockmat');
disp(J)
disp(H)
-->
! 1095.8009 3289.4833 2193.2663 !
! 3.
12.
27.
!
!
!
!
!
!
!

1092.996 3287.6648 2193.2663 !


3287.6648 9868.7896 7676.4324 !
2193.2663 7676.4324 4386.5327 !
6.
0.
0.
!
0.
12.
0.
!
0.
0.
18.
!

S-ar putea să vă placă și