jax.scipy.linalg.schur#

jax.scipy.linalg.schur(a, output='real')[来源]#

计算 Schur 分解

仅在 CPU 上实现。

scipy.linalg.schur() 的 JAX 实现。

矩阵 A 的 Schur 形式 T 满足

\[A = Z T Z^H\]

其中 Z 是酉矩阵,T 对于复数值 Schur 分解(即 output="complex")是上三角矩阵,对于实数值 Schur 分解(即 output="real")是准上三角矩阵。在准三角矩阵的情况下,对角线可能包含与 A 的复数值特征值对相关的 2x2 块。

参数:
  • a (ArrayLike) – 形状为 (..., N, N) 的输入数组

  • output (str) – 指定是计算 "real" (默认) 还是 "complex" Schur 分解。

返回:

数组元组 (T, Z)

  • T 是包含输入的上三角 Schur 形式的形状为 (..., N, N) 的数组。

  • Z 是包含酉 Schur 变换矩阵的形状为 (..., N, N) 的数组。

返回类型:

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 是酉矩阵

>>> 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)