jax.scipy.linalg.schur

内容

jax.scipy.linalg.schur#

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

计算 Schur 分解

JAX 实现 scipy.linalg.schur().

矩阵 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 变换矩阵。

返回类型:

元组[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)