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 变换矩阵。
- 返回类型:
另请参阅
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)