Hermite-féle interpoláció

A Wikipédiából, a szabad enciklopédiából

Az Hermite-féle interpoláció egy olyan módszer, amely szorosan kapcsolódik a Newtoni osztott differenciák interpolációs módszeréhez a numerikus analízisben. Lehetővé teszi adott deriváltak alappontokon történő vizsgálatát, illetve az alappontok vizsgálatát is. Az interpoláció eredménye egy polinom, melynek fokszáma kisebb vagy egyenlő az alappontok és deriváltjaik eggyel csökkentett számával.

Alkalmazás[szerkesztés | forrásszöveg szerkesztése]

A deriváltakat extra pontokként kezeljük és azokat osztott differencia táblán megismételjük. Hogy elkerüljük nullával való osztást, azokat értékeket, amelyeknél ez megtörténne lecseréljük a deriváltjaikra és megszorozzuk egy konstanssal a helyétől függően. Például (a newtoni polinomokról szóló cikk alapján), ha az x_i pontot n-szer ismételjük, [x_i, x_i, ..., x_i]=f^{(n-1)}(x_i)/(n-1)!, pl:

[x_i, x_i, x_i, x_i]=f^{(3)}(x_i)/3!
[x_i, x_i, x_i]=f^{(2)}(x_i)/2!

m+1 ismétlőpontokig

[x_i, x_i, .. ,x_i] = \frac{1}{m!} f^{(m)}(x_i)

stb.

A tábla kiszámítása ugyanúgy történik mint az előbb.

Példa[szerkesztés | forrásszöveg szerkesztése]

Az itt használt példa a x^8 + 1 polinom lesz. Értékekként a x=-1, x=0 és x=1 pontok első és második deriváltak szolgálnak. Összesen tehát 9 adatot használunk, így a felfedezett polinom fokszáma 8 lesz.

-1 2
-1 2 -8
-1 2 -8 28
0 1 -1 7 -21
0 1 0 1 -6 15
0 1 0 0 -1 5 -10
1 2 1 1 1 1 -2 4
1 2 8 7 6 5 2 2 -1
1 2 8 28 21 15 10 4 1 1

Ebben a példában f(-1)' = -8. Megfigyelhető, hogy f[-1, -1, -1] eredménye 1/2 f''(-1), ami 1/2 * 56 = 28, amint azt az olvasó is láthatja.


\begin{align}
P(x) &= 2 - 8(x+1) + 28(x+1) ^2 - 21 (x+1)^3 + 15x(x+1)^3 - 10x^2(x+1)^3 \\
&\quad + 4x^3(x+1)^3 -1x^3(x+1)^3(x-1)+x^3(x+1)^3(x-1)^2 \\
&=2 - 8 + 28 - 21 - 8x + 56x - 63x + 15x + 28x^2 - 63x^2 + 45x^2 - 10x^2 - 21x^3 \\
&\quad + 45x^3 - 30x^3 + 4x^3 + x^3 + x^3 + 15x^4 - 30x^4 + 12x^4 + 2x^4 + x^4 \\
&\quad - 10x^5 + 12x^5 - 2x^5 + 4x^5 - 2x^5 - 2x^5 - x^6 + x^6 - x^7 + x^7 + x^8 \\
&= x^8 + 1.
\end{align}

Algoritmus[szerkesztés | forrásszöveg szerkesztése]

A következő Ruby kódot a H(x) Hermite-féle interpolációs polinom együtthatóinak meghatározására használjuk. Az abszcisszákat x-ben, az ordinátákat y-ban tároljuk. Ha x[i] a j-edik ismételt előfordulása ugyanannak az értéknek, akkor y[i] a következő: f^{(j-1)}(x_i)/(j-1)!.

def hermite(x, y)
  q = y.clone
  1.upto(q.length-1) do |i|
    first_used_deriv = i-1
    q0 = q[i-1]
    i.upto(q.length-1) do |j|
      first_used_deriv = j+i-1 if (x[j-i] != x[j])
      q1 = j > first_used_deriv ? y[first_used_deriv] : q[j]
      q[j] = (q1-q0) / (x[j]-x[j-i]) if x[j-i] != x[j]
      q0 = q1
    end
  end
  [x,q]
end

A kovetkező függvény felhasználható az x pont polinomjának kiszámítására. A hermite visszatérési értéket továbbvisszük a második problémára.

def poly(x, hermite)
  xi, q = hermite
  y = q[0]
  c = 1
  1.upto(q.length-1) do |i|
    c *= x - xi[i-1]
    y += q[i]*c
  end
  y
end

Hiba[szerkesztés | forrásszöveg szerkesztése]

A függvény hibája, amikor egy pontnál meghatározzuk a közelítő értéket, mindig valamely c pont felé fog tartani a felhasznált legtávolabbi x-érték és a becsült x-érték között. : \frac{f^{(a)}(c)}{a!}\prod_{i=0}^n (x-x_i)^{N_i} ahol a az adatok számát jelöli, n az x értékek számának eggyel csökkentettje és N_i az x_i-nél felhasznált adatok száma. Ez azért van mert a függvény nem tud gyorsabban változni a becsült Hermite-féle interpolációs polinomtól, mint az a--ik deriváltja és a! hányadosa szorozva a számítási pont távolsága az ismert pontoktól.

Forrás[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Hermite interpolation című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.