scipy.linalg.ordqz

scipy.linalg.ordqz(A, B, sort='lhp', output='real', overwrite_a=False, overwrite_b=False, check_finite=True)[源代码]

具有重排序的矩阵对的QZ分解。

参数
A(n,N)类数组

要分解的二维数组

B(n,N)类数组

要分解的二维数组

sort{Callable,‘LHP’,‘RHP’,‘IUC’,‘OUC’},可选

指定是否应对上特征值进行排序。在给定有序对的情况下,可以传递一个可调用对象 (alpha, beta) 表示特征值 x = (alpha/beta) 返回一个布尔值,该布尔值指示特征值是否应排序到左上角(True)。对于实矩阵偶 beta 是真实的,而 alpha 可以是复数的,并且对于复数矩阵对而言 alphabeta 可能会很复杂。可调用对象必须能够接受NumPy数组。或者,可以使用字符串参数:

  • “lhp”左侧平面(x.real<0.0)

  • “rhp”右侧平面(x.real>0.0)

  • 单位圆内的‘iuc’(x*x.congiate()<1.0)

  • 单位圆外的‘ouc’(x*x.congiate()>1.0)

利用预定义的分类函数,无限的特征值(即, alpha != 0beta = 0 )被认为既不位于左手平面,也不位于右手平面,但被认为位于单位圆之外。对于本征值 (alpha, beta) = (0, 0) ,则预定义的排序函数全部返回 False

outputstr{‘real’,‘Complex’},可选

构造实矩阵的实或复QZ分解。默认值为“REAL”。

overwrite_a布尔值,可选

如果为True,则覆盖A的内容。

overwrite_b布尔值,可选

如果为True,则覆盖B的内容。

check_finite布尔值,可选

如果为true,则检查 AB 都是有限的数字。如果为False,则不进行检查,并将矩阵传递给基础算法。

退货
AA(N,N)ndarray

A的广义Schur形式。

BB(N,N)ndarray

B的广义Schur形式。

alpha(n,)ndarray

Alpha=Alphar+Alphai*1J。请参见备注。

beta(n,)ndarray

请参见备注。

Q(N,N)ndarray

左舒尔矢量。

Z(N,N)ndarray

右边的舒尔矢量。

参见

qz

注意事项

在出口, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N ,将是广义特征值。 ALPHAR(j) + ALPHAI(j)*iBETA(j),j=1,...,N 是复Schur形式(S,T)的对角线,如果使用复么正变换将(A,B)的实广义Schur形式的2乘2对角线块进一步约化为三角形,则得到的对角线是复Schur形式(S,T)的对角线。如果alphai(J)为零,则第j个特征值为实;如果为正,则 j TH和 (j+1) ST特征值是复数共轭对,其中 ALPHAI(j+1) 没有。

0.17.0 新版功能.

示例

>>> from scipy.linalg import ordqz
>>> A = np.array([[2, 5, 8, 7], [5, 2, 2, 8], [7, 5, 6, 6], [5, 4, 4, 8]])
>>> B = np.array([[0, 6, 0, 0], [5, 0, 2, 1], [5, 2, 6, 6], [4, 7, 7, 7]])
>>> AA, BB, alpha, beta, Q, Z = ordqz(A, B, sort='lhp')

因为我们已经对左半平面特征值进行了排序,所以负值排在第一位

>>> (alpha/beta).real < 0
array([ True,  True, False, False], dtype=bool)