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[源代码][源代码]#
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)