jax.scipy.linalg.rsf2csf

目录

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