当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.ordqz用法及代码示例


本文简要介绍 python 语言中 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 {可调用,‘lhp’, ‘rhp’, ‘iuc’, ‘ouc’},可选

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

  • ‘lhp’ Left-hand plane (x.real < 0.0)

  • ‘rhp’ Right-hand plane (x.real > 0.0)

  • ‘iuc’ Inside the unit circle (x*x.conjugate() < 1.0)

  • ‘ouc’ Outside the unit circle (x*x.conjugate() > 1.0)

使用预定义的排序函数,可以得到无限的特征值(即alpha != 0beta = 0) 被认为既不在左手平面也不在右手平面内,但被认为位于单位圆之外。对于特征值(alpha, beta) = (0, 0),预定义的排序函数全部返回False.

output str {‘real’,'复杂'},可选

为实矩阵构造实数或复数 QZ 分解。默认为‘real’。

overwrite_a 布尔型,可选

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

overwrite_b 布尔型,可选

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

check_finite 布尔型,可选

如果为真,则检查 A 和 B 的元素是有限数。如果 false 不检查并将矩阵传递给底层算法。

返回

AA (N, N) 数组

A 的广义 Schur 形式。

BB (N, N) 数组

B 的广义 Schur 形式。

alpha (N,) 数组

alpha = alphar + alphai * 1j。见注释。

beta (N,) 数组

见注释。

Q (N, N) 数组

左 Schur 向量。

Z (N, N) 数组

右 Schur 向量。

注意

退出时, (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) 为负。

例子

>>> import numpy as np
>>> 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)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.ordqz。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。