scipy.linalg.schur¶
- scipy.linalg.schur(a, output='real', lwork=None, overwrite_a=False, sort=None, check_finite=True)[源代码]¶
计算矩阵的Schur分解。
舒尔分解为:
A = Z T Z^H
其中Z是酉的,T是上三角形的,或者对于实数Schur分解(output=‘real’),是准上三角形。在准三角形形式中,描述复值特征值对的2x2块可以从对角线挤出。
- 参数
- a(M,M)类数组
要分解的矩阵
- output{‘real’,‘Complex’},可选
构造实数或复数Schur分解(对于实数矩阵)。
- lwork整型,可选
工作数组大小。如果无或-1,则自动计算。
- overwrite_a布尔值,可选
是否覆盖中的数据(可能会提高性能)。
- sort{无,可调用,‘LHP’,‘RHP’,‘IUC’,‘OUC’},可选
指定是否应对上特征值进行排序。可以传递一个可调用函数,该函数在给定特征值的情况下返回一个布尔值,该布尔值表示是否应该将该特征值排序到左上角(True)。或者,可以使用字符串参数::
'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)
默认为无(不排序)。
- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- 退货
- T(M,M)ndarray
A的Schur形式,它对于实数Schur分解是实值的。
- Z(M,M)ndarray
A的酉Schur变换矩阵,它对实数Schur分解是实值的。
- sdim集成
当且仅当请求排序时,第三个返回值将包含满足排序条件的特征值的数量。
- 加薪
- LinAlgError
在三种情况下引发错误:
由于QR算法无法计算所有特征值,该算法失败。
如果请求特征值排序,则由于分离特征值失败(通常是因为条件性差),特征值不能被重新排序。
如果请求特征值排序,舍入误差会导致前导特征值不再满足排序条件。
参见
rsf2csf
实舒尔形式到复舒尔形式的转换
示例
>>> from scipy.linalg import schur, eigvals >>> A = np.array([[0, 2, 2], [0, 1, 2], [1, 0, 1]]) >>> T, Z = schur(A) >>> T array([[ 2.65896708, 1.42440458, -1.92933439], [ 0. , -0.32948354, -0.49063704], [ 0. , 1.31178921, -0.32948354]]) >>> Z array([[0.72711591, -0.60156188, 0.33079564], [0.52839428, 0.79801892, 0.28976765], [0.43829436, 0.03590414, -0.89811411]])
>>> T2, Z2 = schur(A, output='complex') >>> T2 array([[ 2.65896708, -1.22839825+1.32378589j, 0.42590089+1.51937378j], [ 0. , -0.32948354+0.80225456j, -0.59877807+0.56192146j], [ 0. , 0. , -0.32948354-0.80225456j]]) >>> eigvals(T2) array([2.65896708, -0.32948354+0.80225456j, -0.32948354-0.80225456j])
具有正虚部的任意自定义EIG排序条件,仅由一个特征值满足
>>> T3, Z3, sdim = schur(A, output='complex', sort=lambda x: x.imag > 0) >>> sdim 1