當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。