Lánczos-algoritmus

(Lanczos-algoritmus szócikkből átirányítva)

Kiejtés

  • IPA: [ ˈlaːnd͡zzoʃɒlɡoritmuʃ]

Főnév

Lánczos-algoritmus

  1. (matematika)

Lánczos-algoritmus

A Lánczos-algoritmus egy hatékony numerikus módszer, amely a nagy méretű szimmetrikus mátrixok sajátértékeinek és sajátvektorainak meghatározására szolgál. Ez az algoritmus különösen hasznos a numerikus lineáris algebra területén, például a kvantummechanikában, a statisztikai fizikában és a gépi tanulásban.

Az algoritmus lényege

A Lánczos-algoritmus a teljes mátrix helyett egy kisebb dimenziójú, tridiagonális mátrixot állít elő, amely numerikusan közelíti az eredeti mátrix sajátértékeit és sajátvektorait. Ez a módszer az úgynevezett Krylov-tér fogalmára épül.

Krylov-tér

A Krylov-tér egy   mátrix és egy   kezdővektor alapján a következő vektorok által generált altér:   A Lánczos-algoritmus ezen altérben dolgozik, hogy közelítse az   sajátértékeit.

Tridiagonális mátrix

Az algoritmus a Krylov-térben egy ortogonális bázist konstruál, és az   mátrixot ebben a bázisban egy tridiagonális mátrixszá alakítja:   Az   tridiagonális mátrix sajátértékei az   mátrix sajátértékeinek jó közelítését adják.

Az algoritmus lépései

1. Kezdővektor kiválasztása: Válassz egy véletlen vagy specifikus   kezdővektort, amelyet normálni kell ( ).

2. Iteráció:

  • Számítsd ki a következő iterált vektort:

  ahol

 

  - Ortogonalizálj a korábbi vektorokra.

3. Megállási feltétel: Az iterációt  -edik lépésben állítsd le, ha   kisebb, mint az   mérete, vagy ha   kicsi.

4. Tridiagonális mátrix: Az   mátrix sajátértékeit és sajátvektorait kiszámítva megkapod az eredeti mátrix közelítését.

Példa: Python implementáció

Az alábbi kód egy egyszerű Python implementációt mutat be a Lánczos-algoritmusra:

import numpy as np

def lanczos_algorithm(A, v, m):
    """
    Lánczos-algoritmus szimmetrikus mátrix tridiagonális közelítéséhez.

    Args:
        A (numpy.ndarray): Szimmetrikus mátrix.
        v (numpy.ndarray): Kezdővektor (normált).
        m (int): Iterációk száma.

    Returns:
        T (numpy.ndarray): Tridiagonális mátrix.
        V (numpy.ndarray): Ortogonális bázisvektorok.
    """
    n = A.shape[0]
    V = np.zeros((n, m))
    T = np.zeros((m, m))
    
    v = v / np.linalg.norm(v)
    V[:, 0] = v
    
    beta = 0
    w = np.zeros_like(v)
    
    for j in range(m):
        w = A @ V[:, j] - beta * (V[:, j-1] if j > 0 else 0)
        alpha = V[:, j].T @ w
        w = w - alpha * V[:, j]
        
        if j < m - 1:
            beta = np.linalg.norm(w)
            if beta < 1e-10:  # Konvergencia
                break
            V[:, j + 1] = w / beta
        
        T[j, j] = alpha
        if j < m - 1:
            T[j, j + 1] = beta
            T[j + 1, j] = beta
    
    return T, V

# Példa: Egy 5x5-ös szimmetrikus mátrix sajátértékeinek közelítése
A = np.array([[4, 1, 0, 0, 0],
              [1, 3, 1, 0, 0],
              [0, 1, 2, 1, 0],
              [0, 0, 1, 1, 1],
              [0, 0, 0, 1, 0]], dtype=float)

v = np.random.rand(A.shape[0])  # Véletlen kezdővektor
v = v / np.linalg.norm(v)  # Normálás
m = 3  # Iterációk száma

T, V = lanczos_algorithm(A, v, m)

print("Tridiagonális mátrix T:")
print(T)

# Sajátértékek összehasonlítása
eigvals, _ = np.linalg.eig(A)
lanczos_eigvals = np.linalg.eigvals(T)

print("\nEredeti mátrix sajátértékei:")
print(np.sort(eigvals))

print("\nTridiagonális közelítés sajátértékei:")
print(np.sort(lanczos_eigvals))

Alkalmazások

1. Kvantummechanika: Nagyméretű Hamilton-mátrixok sajátértékeinek meghatározása. 2. Statisztikai fizika: Adatcsökkentés (dimenziócsökkentés) a nagy adathalmazokból. 3. Gépi tanulás: Spektrális elemzés a PCA (főkomponens-analízis) során.

A Lánczos-algoritmus a gyakorlatban gyors és hatékony, különösen akkor, ha csak néhány sajátértékre van szükség, mert nem szükséges az egész mátrixot kezelni.

Fordítások