Algorytm Neville’a

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Algorytm Neville’a – algorytm zaproponowany przez angielskiego matematyka Erica Harolda Neville’a. Jest używany do wyznaczania wartości wielomianu interpolacyjnego (Lagrange’a i Newtona) w danym punkcie x. Ideą jest wyznaczenie rozwiązania w krokach od pojedynczych węzłów do całego ich zbioru.

Biorąc pod uwagę zbiór danych punktów węzłowych (xi,yi),i=1,2,,n, wielomian P jest stopnia nie wyższego niż n, a jego wartości w punktach węzłowych są takie same jak wartości interpolowanej funkcji:

P(xi)=f(xi)=yi,     dla i=1,,n+1.

Definiujemy wielomiany interpolacyjne i ich wartości w ustalonym punkcie x.

  • pi – wartość, w punkcie x, wielomianu stopnia zerowego przechodzącego przez punkt (xi,yi):
pi=yi=Pi(x)     dla i=0,,n.
  • pi(i+1) – wartość, w punkcie x, wielomianu stopnia pierwszego przechodzącego przez punkty (xi,yi) oraz (xi+1,yi+1):
pi(i+1)=Pi(i+1)(x)     dla i=0,,n1.
  • p0n – wartość, w punkcie x, wielomianu stopnia n-tego przechodzącego przez (n+1) punktów (xi,yi):
p0n=P0n(x)     dla i=0,,n.

Wielomiany powyższego typu spełniają następującą własność rekurencyjną:

pi(i+1)(i+k)=(xxi+k)pi(i+1)(i+k1)+(xix)p(i+1)(i+2)(i+k)xixi+k,

gdzie: k odpowiada stopniowi wielomianu, k=1,,n oraz i=0,,n.

Algorytm Neville’a polega na tym, że za pomocą powyższych wzorów konstruujemy tablicę symetryczną, która zawiera wartości wielomianu interpolacyjnego w ustalonym punkcie x, dla n=3:

x0,y0=p0
p01
x1,y1=p1 p012
p12 p0123
x2,y2=p2 p123
p23
x3,y3=p3

Kolejne elementy są obliczane rekurencyjnie na podstawie elementów poprzednich.

W praktyce algorytm Neville’a przedstawiamy w nieco innej wersji. Stosując oznaczenia:

t(i+k),k=pi(i+1),,(i+k)

Tablica przyjmuje postać:

x0,y0=t00
t11
x1,y1=t10 t22
t21 t33
x2,y2=t20 t32
t31
x3,y3=t30

Ułatwia to komputerowe zaprogramowanie powyższej tablicy (jako tablicy dwuwymiarowej).

Otrzymujemy również wzór rekurencyjny w prostszej postaci:

tik=(xxik)ti,k1(xxi)ti1,k1xixik

gdzie: 1ki,     dla i=0,1,,n.

Pseudokod:

       for i := 0 to n do
           t[i] = f[i]
       for i := i - 1 downto 0 do
           t[j]= t[j + 1] + (t[j + 1] - t[j]) * (x - x[i]) / (x[i] - x[j])

Szukaną wartość wielomianu interpolacyjnego otrzymujemy jako t[0].

Przykład

Dane mamy:

i=0,1,2,3

x0=0,  x1=1,  x2=3,  x3=4

f(x0)=1,  f(x1)=3,  f(x2)=2,  f(x3)=1

Wyliczymy wartość wielomianu interpolacyjnego w punkcie x=2. Korzystamy ze wzorów i konstruujemy tablicę:

0,t00=1
t11=5
1,t10=3 t22=10/3
t21=5/2 t33=3
3,t20=2 t32=8/3
t31=3
4,t30=1

Zatem dla x=2 wartość wielomianu wynosi 3.

Uogólnienie algorytmu Neville’a

Mając zadane węzły (xi,fi) do interpolacji można również użyć funkcji wymiernych:

Zu,v=Pu,vQu,v=a0+a1x++auxub0+b1x++bvxv,

spełniających warunki: Zu,v(xi)=fi,     dla i=0,1,,u+v.

W przypadku interpolacji funkcjami wymiernymi można wyprowadzić uogólniony wzór Neville’a. Algorytm wygląda wówczas następująco:

Ti0=fi,Ti,k1=0,Tik=Ti,k1+(Ti,k1Ti1,k1)(xxikxxi[1Ti,k1Ti1,k1(Ti,k1Ti1,k2]1).

Bibliografia