jax.scipy.linalg.schur

目录

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 是酉矩阵,而 T 在复值Schur分解(即 output="complex")中是上三角矩阵,在实值Schur分解(即 output="real")中是拟上三角矩阵。在拟上三角情况下,对角线上可能包含与 A 的复值特征值对相关的2x2块。

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

  • output (str) – 指定是否计算 "real"``(默认)或 ``"complex" 舒尔分解。

返回:

一个数组的元组 (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)