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 轉換矩陣。

返回類型:

tuple[Array, Array]

參見

範例

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)