jax.scipy.linalg.eigh_tridiagonal#

jax.scipy.linalg.eigh_tridiagonal(d, e, *, eigvals_only=False, select='a', select_range=None, tol=None)[原始碼]#

求解對稱實三對角矩陣的特徵值問題

JAX 實作的 scipy.linalg.eigh_tridiagonal()

參數:
  • d (ArrayLike) – 形狀為 (N,) 的實值陣列,指定對角元素。

  • e (ArrayLike) – 形狀為 (N - 1,) 的實值陣列,指定非對角元素。

  • eigvals_only (bool) – 若為 True,則僅傳回特徵值(預設值:False)。特徵向量的計算尚未實作,因此 eigvals_only 必須設定為 True。

  • select (str) –

    指定要計算的特徵值。支援的值為

    • 'a':所有特徵值

    • 'i':索引為 select_range[0] <= i <= select_range[1] 的特徵值

    JAX 目前未實作 select = 'v'

  • select_range (tuple[float, float] | None) – 當 select='i' 時使用的值範圍。

  • tol (float | None) – 求解特徵值時使用的絕對容差。

傳回值:

形狀為 (N,) 的特徵值陣列。

傳回型別:

Array

參見

jax.scipy.linalg.eigh():通用 Hermitian 特徵值求解器

範例

>>> d = jnp.array([1., 2., 3., 4.])
>>> e = jnp.array([1., 1., 1.])
>>> eigvals = jax.scipy.linalg.eigh_tridiagonal(d, e, eigvals_only=True)
>>> eigvals
Array([0.2547188, 1.8227171, 3.1772828, 4.745281 ], dtype=float32)

為了比較,我們可以建構完整矩陣,並使用 eigh() 計算相同的結果

>>> A = jnp.diag(d) + jnp.diag(e, 1) + jnp.diag(e, -1)
>>> A
Array([[1., 1., 0., 0.],
       [1., 2., 1., 0.],
       [0., 1., 3., 1.],
       [0., 0., 1., 4.]], dtype=float32)
>>> eigvals_full = jax.scipy.linalg.eigh(A, eigvals_only=True)
>>> jnp.allclose(eigvals, eigvals_full)
Array(True, dtype=bool)