jax.scipy.linalg.rsf2csf#

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

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

scipy.linalg.rsf2csf() 的 JAX 实现。

参数:
  • 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]]