jax.scipy.linalg.hessenberg

内容

jax.scipy.linalg.hessenberg#

jax.scipy.linalg.hessenberg(a: ArrayLike, *, calc_q: Literal[False], overwrite_a: bool = False, check_finite: bool = True) Array[source]#
jax.scipy.linalg.hessenberg(a: ArrayLike, *, calc_q: Literal[True], overwrite_a: bool = False, check_finite: bool = True) tuple[Array, Array]

计算矩阵的 Hessenberg 形式

JAX 实现的 scipy.linalg.hessenberg()

矩阵 A 的 Hessenberg 形式 H 满足

\[A = Q H Q^H\]

其中 Q 为酉矩阵,H 在第一条次对角线以下为零。

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

  • calc_q – 如果为 True,则计算 Q 矩阵(默认值:False)

  • overwrite_a – JAX 未使用

  • check_finite – JAX 未使用

返回值:

如果 calc_q 为 True,则返回一个数组元组 (H, Q),否则返回一个数组 H

  • H 的形状为 (..., N, N),是 a 的 Hessenberg 形式

  • Q 的形状为 (..., N, N),是相关的酉矩阵

示例

计算一个 4x4 矩阵的 Hessenberg 形式

>>> 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)