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
可以是复数的,并且对于复数矩阵对而言alpha
和beta
可能会很复杂。可调用对象必须能够接受NumPy数组。或者,可以使用字符串参数:“lhp”左侧平面(x.real<0.0)
“rhp”右侧平面(x.real>0.0)
单位圆内的‘iuc’(x*x.congiate()<1.0)
单位圆外的‘ouc’(x*x.congiate()>1.0)
利用预定义的分类函数,无限的特征值(即,
alpha != 0
和beta = 0
)被认为既不位于左手平面,也不位于右手平面,但被认为位于单位圆之外。对于本征值(alpha, beta) = (0, 0)
,则预定义的排序函数全部返回 False 。- outputstr{‘real’,‘Complex’},可选
构造实矩阵的实或复QZ分解。默认值为“REAL”。
- overwrite_a布尔值,可选
如果为True,则覆盖A的内容。
- overwrite_b布尔值,可选
如果为True,则覆盖B的内容。
- check_finite布尔值,可选
如果为true,则检查 A 和 B 都是有限的数字。如果为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
右边的舒尔矢量。
参见
注意事项
在出口,
(ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N
,将是广义特征值。ALPHAR(j) + ALPHAI(j)*i
和BETA(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)