numpy 可以用实数运算对斜对称矩阵进行对角化吗?

RGW*_*ton 6 python numpy matrix linear-algebra lapack

任何斜对称矩阵 ( A^T = -A ) 都可以转换为埃尔米特矩阵 ( iA ) 并用复数对角化。但也可以通过特殊的正交变换将其转化为块对角形式,并仅使用实数算术找到其特征值。这是在 numpy 中的任何地方实现的吗?

fra*_*cis 3

我们来看看dgeev()LAPACK库的功能。该例程计算任何实数双精度方阵的特征值。而且,这个例程就在numpy.linalg.eigvals()numpy 库的 python 函数后面。

\n\n

LAPACK 的文档dgeev()中描述了所使用的方法。它需要将矩阵简化为其实 Schur 形式A S

\n\n

任何实数方阵都A可以表示为:

\n\n

A=QSQ^t

\n\n

在哪里:

\n\n
    \n
  • Q是实正交矩阵:QQ^t=I
  • \n
  • S是实块上三角矩阵。S 对角线上的块的大小为 1\xc3\x971 或 2\xc3\x972。
  • \n
\n\n

事实上,如果A是斜对称的,则这种分解似乎非常接近 通过 的特殊正交变换获得的块对角形式A。而且,确实看到S斜对称矩阵的Schur 形式A是……斜对称的!

\n\n

事实上,让我们计算 的转置S

\n\n
S^t=(Q^tAQ)^t\nS^t=Q^t(Q^tA)^t\nS^t=Q^tA^tQ\nS^t=Q^t(-A)Q\nS^t=-Q^tAQ\nS^t=-S\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,如果Q是特殊正交 ( det(Q)=1),S是通过特殊正交变换获得的块对角形式。P另外,可以通过排列 的前两列来计算特殊的正交矩阵,并且通过改变和 的符号获得该矩阵的Q另一个 Schur 形式。的确,。那么,是通过特殊的正交变换得到的块对角形式。SdAS_{12}S_{21}A=PSdP^tSdA

\n\n

最后,即使numpy.linalg.eigvals()应用于实矩阵返回复数,该过程中也几乎不涉及复杂的计算!

\n\n

如果您只想计算真实的 Schur 形式,请使用scipy.linalg.schur()带参数的函数output=\'real\'

\n\n

只需一段代码即可检查:

\n\n
S^t=(Q^tAQ)^t\nS^t=Q^t(Q^tA)^t\nS^t=Q^tA^tQ\nS^t=Q^t(-A)Q\nS^t=-Q^tAQ\nS^t=-S\n
Run Code Online (Sandbox Code Playgroud)\n