Kiejtés

  • IPA: [ ˈnɛvilːɛɒlɡoritmuʃ]

Főnév

Neville-algoritmus

  1. (matematika)

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:   ahol  . A cél egy interpoláló polinom   meghatározása, amelyre:  

Neville-algoritmus alapja

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

  1. Indulás: Az egyes adatpontokra a polinom:
   
  1. Rekurzió: Ha   az   pontokon áthaladó polinom, akkor:
   
  Ahol   és   kisebb fokszámú interpoláló polinomok.
  1. Végső polinom: Az interpolált érték a   polinom  -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:  

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

Fokozatosan építjük fel a polinomokat, amelyek egyre több adatpontra illeszkednek. Az  -edik elem az   pontokon áthaladó polinom értéke.

3. Végső érték

A mátrix   eleme lesz a keresett   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:  

Interpolálandó hely:  

Kimenet

A Neville-algoritmus a   polinom értékét  -nél:  

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   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.

Fordítások