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
可以是複數,對於複數矩陣對,alpha
和beta
都可以是複數。可呼叫物件必須能夠接受 NumPy 陣列。或者,可以使用字串參數‘lhp’ 左半平面 (x.real < 0.0)
‘rhp’ 右半平面 (x.real > 0.0)
‘iuc’ 單位圓內 (x*x.conjugate() < 1.0)
‘ouc’ 單位圓外 (x*x.conjugate() > 1.0)
使用預定義的排序函數,無限特徵值(即,
alpha != 0
和beta = 0
)被認為既不位於左半平面也不位於右半平面,但被認為位於單位圓外。對於特徵值(alpha, beta) = (0, 0)
,預定義的排序函數都返回 False。- outputstr {‘real’,’complex’}, 選項性
為實數矩陣建構實數或複數 QZ 分解。預設為 ‘real’。
- overwrite_abool, 選項性
如果為 True,則 A 的內容會被覆寫。
- overwrite_bbool, 選項性
如果為 True,則 B 的內容會被覆寫。
- check_finitebool, 選項性
如果為 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
左 Schur 向量。
- Z(N, N) ndarray
右 Schur 向量。
另請參閱
註釋
在退出時,
(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 形式的 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)