Neville-algoritmus

Innen: testwiki
Ugrás a navigációhoz Ugrás a kereséshez

Sablon:Hunfn

  1. Sablon:Label

Neville-algoritmus

A **Neville-algoritmus** egy numerikus interpolációs módszer, amely segítségével adott adatpontok alapján egy közelítő polinomot határozunk meg. A módszer rekurzívan számítja ki az interpoláló polinomot, amely áthalad az adatpontokon, és hatékony megoldást nyújt interpolációs problémákra.

Probléma

Adottak az \( n+1 \) pontok: (x0,y0),(x1,y1),,(xn,yn), ahol yi=f(xi). A cél egy interpoláló polinom P(x) meghatározása, amelyre: P(xi)=yiminden i{0,1,,n}.

Neville-algoritmus alapja

Az interpoláló polinomot rekurzívan számítjuk:

  1. Indulás: Az egyes adatpontokra a polinom:
  Pi(x)=yi.
  1. Rekurzió: Ha Pi,j(x) az xi,xi+1,,xj pontokon áthaladó polinom, akkor:
  Pi,j(x)=(xxj)Pi,j1(x)(xxi)Pi+1,j(x)xixj.
  Ahol Pi,j1(x) és Pi+1,j(x) kisebb fokszámú interpoláló polinomok.
  1. Végső polinom: Az interpolált érték a P0,n(x) polinom x-re való értéke lesz.

Pszeudokód

NEVILLE(x, xi, yi):
  Input: 
    x   - az interpolálandó érték,
    xi  - az \( x_i \) adatpontok listája,
    yi  - az \( y_i \) adatpontok listája.
  Output: 
    y   - az interpolált érték.

  n = hossz(xi)
  P = n x n-es mátrix, kezdetben üres

  for i = 0 to n-1:
    P[i][i] = yi[i]  # Diagonális inicializálás

  for j = 1 to n-1:
    for i = 0 to n-j-1:
      P[i][i+j] = ((x - xi[i+j]) * P[i][i+j-1] - (x - xi[i]) * P[i+1][i+j]) / (xi[i] - xi[i+j])

  return P[0][n-1]

Neville-algoritmus működése

1. Adatpontok inicializálása

Minden adatpontot egy-egy egyszerű polinom reprezentál: Pi,i(x)=yi.

2. Rekurzív számítás

Fokozatosan építjük fel a polinomokat, amelyek egyre több adatpontra illeszkednek. Az (i,j)-edik elem az xi,xi+1,,xj pontokon áthaladó polinom értéke.

3. Végső érték

A mátrix P[0][n1] eleme lesz a keresett P(x) polinom értéke.

Python implementáció

def neville(x, xi, yi):
    """
    Neville-algoritmus az interpolációhoz.
    :param x: Az interpoláció helye.
    :param xi: Az adatpontok x koordinátái.
    :param yi: Az adatpontok y koordinátái.
    :return: Az interpolált érték.
    """
    n = len(xi)
    P = [[0] * n for _ in range(n)]

    # Inicializálás
    for i in range(n):
        P[i][i] = yi[i]

    # Rekurzív számítás
    for j in range(1, n):
        for i in range(n - j):
            P[i][i + j] = ((x - xi[i + j]) * P[i][i + j - 1] - (x - xi[i]) * P[i + 1][i + j]) / (xi[i] - xi[i + j])

    return P[0][n - 1]

# Példa használat
xi = [1, 2, 3]
yi = [1, 4, 9]  # y = x^2
x = 1.5

result = neville(x, xi, yi)
print(f"Interpolált érték a {x} helyen: {result}")

Példa

Bemenet

Adott adatpontok: (x0,y0)=(1,1),(x1,y1)=(2,4),(x2,y2)=(3,9).

Interpolálandó hely: x=1.5.

Kimenet

A Neville-algoritmus a P(x) polinom értékét x=1.5-nél: P(1.5)=2.25.

Előnyök

  1. **Pontosság**: Garantáltan áthalad az összes adatponton.
  2. **Rugalmas**: Könnyen alkalmazható egyenlőtlenül elosztott adatpontokra.
  3. **Numerikus stabilitás**: Az interpoláló polinom fokozatos építése csökkenti a numerikus hibák valószínűségét.

Hátrányok

  1. **Időigény**: Az algoritmus O(n2) bonyolultságú, ami nagy adatpontok esetén lassabb.
  2. **Nem adaptív**: Ha új adatpontokat adunk hozzá, az algoritmust újra kell futtatni.
  3. **Rossz extrapoláció**: Csak interpolációra alkalmas, extrapoláció esetén pontatlanság léphet fel.

Alkalmazások

  • **Numerikus analízis**: Függvények értékeinek közelítése ismert adatpontok alapján.
  • **Fizikai szimulációk**: Ismeretlen függvények numerikus megközelítése.
  • **Adatmodellezés**: Kísérleti adatokhoz illeszkedő polinom meghatározása.

A **Neville-algoritmus** hatékony interpolációs módszer, amelyet akkor érdemes használni, ha az adatpontok száma kicsi és pontos interpolációra van szükség.

Sablon:-ford- Sablon:Trans-top

Sablon:Trans-bottom Sablon:Hunl