jax.scipy.linalg.rsf2csf#

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

将实 Schur 范式转换为复 Schur 范式。

JAX 实现的 scipy.linalg.rsf2csf()

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

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

  • check_finite (bool) – JAX 未使用

返回值:

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

返回类型:

tuple[Array, Array]

参见

jax.scipy.linalg.schur():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)

实值 Schur 范式只是准上三角矩阵,我们可以在本例中看到

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