jax.scipy.linalg.schur#

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

计算 Schur 分解

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 是一个形状为 (..., N, N) 的数组,包含输入的上三角 Schur 形式。

  • Z 是一个形状为 (..., N, N) 的数组,包含酉 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 是酉矩阵

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