jax.scipy.linalg.rsf2csf

内容

jax.scipy.linalg.rsf2csf#

jax.scipy.linalg.rsf2csf(T, Z, check_finite=True)[source]#

将实舒尔形式转换为复舒尔形式。

JAX 实现 scipy.linalg.rsf2csf().

参数:
  • T (ArrayLike) – 形状为 (..., N, N) 的数组,包含输入的实舒尔形式。

  • Z (ArrayLike) – 形状为 (..., N, N) 的数组,包含相应的舒尔变换矩阵。

  • check_finite (bool) – JAX 未使用

返回值:

包含与输入相同形状的数组 (T, Z) 的元组,包含复舒尔形式和关联的舒尔变换矩阵。

返回类型:

tuple[Array, Array]

另请参阅

jax.scipy.linalg.schur(): 舒尔分解

示例

>>> A = jnp.array([[0., 3., 3.],
...                [0., 1., 2.],
...                [2., 0., 1.]])
>>> Tr, Zr = jax.scipy.linalg.schur(A)
>>> Tc, Zc = jax.scipy.linalg.rsf2csf(Tr, Zr)

实数形式和复数形式均可用于将输入矩阵重建为 float32 精度

>>> jnp.allclose(Zr @ Tr @ Zr.T, A, atol=1E-5)
Array(True, dtype=bool)
>>> jnp.allclose(Zc @ Tc @ Zc.conj().T, A, atol=1E-5)
Array(True, dtype=bool)

实数舒尔形式只是准上三角形的,正如我们在这个例子中看到的

>>> with jax.numpy.printoptions(precision=2, suppress=True):
...   print(Tr)
[[ 3.76 -2.17  1.38]
 [ 0.   -0.88 -0.35]
 [ 0.    2.37 -0.88]]

相比之下,复数形式则是真正意义上的上三角形。

>>> with jnp.printoptions(precision=2, suppress=True):
...   print(Tc)
[[ 3.76+0.j    1.29-0.78j  2.02-0.5j ]
 [ 0.  +0.j   -0.88+0.91j -2.02+0.j  ]
 [ 0.  +0.j    0.  +0.j   -0.88-0.91j]]