jax.scipy.linalg.schur#
- jax.scipy.linalg.schur(a, output='real')[原始碼]#
計算 Schur 分解
JAX 實現的
scipy.linalg.schur()
。矩陣 A 的 Schur 形式 T 滿足
\[A = Z T Z^H\]其中 Z 是 unitary 矩陣,而 T 對於複數值 Schur 分解(即
output="complex"
)是上三角矩陣,對於實數值 Schur 分解(即output="real"
)是擬上三角矩陣。在擬三角矩陣的情況下,對角線可能包含與 A 的複數值特徵值對相關聯的 2x2 區塊。- 參數:
a (ArrayLike) – 形狀為
(..., N, N)
的輸入陣列output (str) – 指定是否計算
"real"
(預設) 或"complex"
Schur 分解。
- 返回:
陣列的元組
(T, Z)
T
是一個形狀為(..., N, N)
的陣列,包含輸入的上三角 Schur 形式。Z
是一個形狀為(..., N, N)
的陣列,包含 unitary Schur 轉換矩陣。
- 返回類型:
參見
jax.scipy.linalg.rsf2csf()
:將實數 Schur 形式轉換為複數 Schur 形式。jax.lax.linalg.schur()
:用於 Schur 分解的 XLA 風格 API。
範例
3x3 矩陣的 Schur 分解
>>> a = jnp.array([[1., 2., 3.], ... [1., 4., 2.], ... [3., 2., 1.]]) >>> T, Z = jax.scipy.linalg.schur(a)
Schur 形式
T
通常是擬上三角矩陣,但在這種情況下是真正的上三角矩陣,因為輸入矩陣是對稱的>>> T Array([[-2.0000005 , 0.5066295 , -0.43360388], [ 0. , 1.5505103 , 0.74519426], [ 0. , 0. , 6.449491 ]], dtype=float32)
轉換矩陣
Z
是 unitary 矩陣>>> jnp.allclose(Z.T @ Z, jnp.eye(3), atol=1E-5) Array(True, dtype=bool)
輸入可以從輸出重建
>>> jnp.allclose(Z @ T @ Z.T, a) Array(True, dtype=bool)