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,)
的特徵值陣列。- 傳回型別:
參見
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)