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) 類陣列

要分解的 2 維陣列

B(N, N) 類陣列

要分解的 2 維陣列

sort{可呼叫物件, ‘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.conjugate() < 1.0)

  • ‘ouc’ 單位圓外 (x*x.conjugate() > 1.0)

使用預定義的排序函數,無限特徵值(即,alpha != 0beta = 0)被認為既不位於左半平面也不位於右半平面,但被認為位於單位圓外。對於特徵值 (alpha, beta) = (0, 0),預定義的排序函數都返回 False

outputstr {‘real’,’complex’}, 選項性

為實數矩陣建構實數或複數 QZ 分解。預設為 ‘real’。

overwrite_abool, 選項性

如果為 True,則 A 的內容會被覆寫。

overwrite_bbool, 選項性

如果為 True,則 B 的內容會被覆寫。

check_finitebool, 選項性

如果為 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

左 Schur 向量。

Z(N, N) ndarray

右 Schur 向量。

另請參閱

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 形式的 2x2 對角線塊使用複數酉變換進一步簡化為三角形形式,則會產生複數 Schur 形式 (S,T)。如果 ALPHAI(j) 為零,則第 j 個特徵值為實數;如果為正數,則第 j 個和第 (j+1) 個特徵值是複共軛對,其中 ALPHAI(j+1) 為負數。

在版本 0.17.0 中新增。

範例

>>> 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)