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 (类数组) – 形状为
(..., N, N)
的输入数组output (str) – 指定是计算
"real"
(默认) 还是"complex"
Schur 分解。
- 返回值:
一个数组元组
(T, Z)
T
是一个形状为(..., N, N)
的数组,包含输入的上三角舒尔形式。Z
是一个形状为(..., N, N)
的数组,包含酉舒尔变换矩阵。
- 返回类型:
另请参阅
jax.scipy.linalg.rsf2csf()
: 将实舒尔形式转换为复舒尔形式。jax.lax.linalg.schur()
: 用于舒尔分解的 XLA 风格 API。
示例
一个 3x3 矩阵的舒尔分解
>>> a = jnp.array([[1., 2., 3.], ... [1., 4., 2.], ... [3., 2., 1.]]) >>> T, Z = jax.scipy.linalg.schur(a)
舒尔形式
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)