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 变换矩阵。- 返回类型:
参见
jax.scipy.linalg.rsf2csf()
: 将实数Schur形式转换为复数Schur形式。jax.lax.linalg.schur()
: 用于Schur分解的XLA风格API。
示例
一个 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)