jax.scipy.linalg.hessenberg#
- jax.scipy.linalg.hessenberg(a: ArrayLike, *, calc_q: Literal[False], overwrite_a: bool = False, check_finite: bool = True) Array [源代码][源代码]#
- jax.scipy.linalg.hessenberg(a: ArrayLike, *, calc_q: Literal[True], overwrite_a: bool = False, check_finite: bool = True) tuple[Array, Array]
计算矩阵的海森伯格形式
JAX 实现的
scipy.linalg.hessenberg()
。矩阵 A 的海森伯格形式 H 满足:
\[A = Q H Q^H\]其中 Q 是幺正的,而 H 在第一条次对角线下方为零。
- 参数:
a – 形状为
(..., N, N)
的数组calc_q – 如果为真,计算
Q
矩阵(默认:False)overwrite_a – JAX 未使用
check_finite – JAX 未使用
- 返回:
如果
calc_q
为 True,则为数组的元组(H, Q)
,否则为数组H
-H
的形状为(..., N, N)
,是a
的海森伯格形式 -Q
的形状为(..., N, N)
,是相关的酉矩阵
示例
计算一个4x4矩阵的海森伯格形式
>>> a = jnp.array([[1., 2., 3., 4.], ... [1., 4., 2., 3.], ... [3., 2., 1., 4.], ... [2., 3., 2., 2.]]) >>> H, Q = jax.scipy.linalg.hessenberg(a, calc_q=True) >>> with jnp.printoptions(suppress=True, precision=3): ... print(H) [[ 1. -5.078 1.167 1.361] [-3.742 5.786 -3.613 -1.825] [ 0. -2.992 2.493 -0.577] [ 0. 0. -0.043 -1.279]]
注意次对角线位置的零。原始矩阵可以使用
Q
向量重建:>>> a_reconstructed = Q @ H @ Q.conj().T >>> jnp.allclose(a_reconstructed, a) Array(True, dtype=bool)