本文简要介绍 python 语言中 scipy.linalg.schur
的用法。
用法:
scipy.linalg.schur(a, output='real', lwork=None, overwrite_a=False, sort=None, check_finite=True)#
计算矩阵的 Schur 分解。
Schur 分解为:
A = Z T Z^H
其中 Z 是酉,T 是上三角,或者对于实数 Schur 分解(输出=‘real’),quasi-upper 三角。在quasi-triangular形式中,说明complex-valued特征值对的2x2块可以从对角线挤出。
- a: (M, M) 数组
矩阵分解
- output: {‘real’, ‘complex’},可选
构造实数或复数 Schur 分解(对于实矩阵)。
- lwork: 整数,可选
工作数组大小。如果 None 或 -1,它会自动计算。
- overwrite_a: 布尔型,可选
是否覆盖 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: int
当且仅当请求排序时,第三个返回值将包含满足排序条件的特征值的数量。
- LinAlgError
在三种情况下引发错误:
由于 QR 算法未能计算所有特征值,该算法失败。
如果请求了特征值排序,则特征值无法重新排序,因为无法分离特征值,通常是因为条件不佳。
如果请求了特征值排序,则舍入错误导致前导特征值不再满足排序条件。
参数 ::
返回 ::
抛出 ::
例子:
>>> import numpy as np >>> 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-sorting 条件,具有正虚部,仅由一个特征值满足
>>> T3, Z3, sdim = schur(A, output='complex', sort=lambda x: x.imag > 0) >>> sdim 1
相关用法
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.svd用法及代码示例
- Python SciPy linalg.spsolve用法及代码示例
- Python SciPy linalg.spsolve_triangular用法及代码示例
- Python SciPy linalg.solve_banded用法及代码示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代码示例
- Python SciPy linalg.splu用法及代码示例
- Python SciPy linalg.spilu用法及代码示例
- Python SciPy linalg.solve用法及代码示例
- Python SciPy linalg.svdvals用法及代码示例
- Python SciPy linalg.solveh_banded用法及代码示例
- Python SciPy linalg.solve_sylvester用法及代码示例
- Python SciPy linalg.solve_toeplitz用法及代码示例
- Python SciPy linalg.sqrtm用法及代码示例
- Python SciPy linalg.svds用法及代码示例
- Python SciPy linalg.sinm用法及代码示例
- Python SciPy linalg.solve_continuous_lyapunov用法及代码示例
- Python SciPy linalg.solve_continuous_are用法及代码示例
- Python SciPy linalg.solve_discrete_are用法及代码示例
- Python SciPy linalg.solve_triangular用法及代码示例
- Python SciPy linalg.sinhm用法及代码示例
- Python SciPy linalg.signm用法及代码示例
- Python SciPy linalg.subspace_angles用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.schur。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。