# ordschur
在 Schur 分解/广义 Schur(QZ) 分解中将特征值重新排序
函数库: TyMath
# 语法
TS,US,Z = ordschur(S, select)
AAS,BBS,QS,ZS,Z,W = ordschur(Q, select)
# 说明
TS,US,Z = ordschur(S, select) 对 S = schur(X) 生成的 Schur 分解
AAS,BBS,QS,ZS,Z,W = ordschur(Q, select) 对由 Q = schur(A,B) 生成的广义 Schur(QZ) 分解
# 示例
重新排序 Schur 分解
计算一个矩阵的 Schur 分解因子,然后根据指定的特征值顺序对因子进行重新排序。
计算矩阵 X 的 Schur 分解。Schur 分解生成上拟三角矩阵 T 和酉矩阵 U,从而使得 X = UTU'。
using TyMath
X = magic(6);
F1 = schur(X)
Schur{Float64, Matrix{Float64}, Vector{Float64}}
T factor:
6×6 Matrix{Float64}:
111.0 1.87624e-14 -1.14896e-14 1.1461e-14 9.70822e-15 4.20658e-15
0.0 27.0 -4.88498e-15 -28.3164 -15.5885 -13.0454
0.0 0.0 -27.0 18.0 22.0454 -12.7279
0.0 0.0 0.0 9.79796 -1.86243e-14 6.9282
0.0 0.0 0.0 0.0 -6.3302e-15 1.33907e-14
0.0 0.0 0.0 0.0 0.0 -9.79796
Z factor:
6×6 Matrix{Float64}:
0.408248 -0.288675 0.408248 0.574915 0.5 -0.0529729
0.408248 0.57735 0.408248 -0.333333 3.04991e-16 -0.471405
0.408248 -0.288675 0.408248 -0.241582 -0.5 0.524377
0.408248 0.288675 -0.408248 0.574915 -0.5 -0.0529729
0.408248 -0.57735 -0.408248 -0.333333 3.38555e-16 -0.471405
0.408248 0.288675 -0.408248 -0.241582 0.5 0.524377
eigenvalues:
6-element Vector{Float64}:
111.00000000000001
27.000000000000032
-26.99999999999997
9.79795897113268
-6.3301965765857146e-15
-9.797958971132712
由于 T 是三角矩阵,因此 T 的对角线包含原始矩阵 X 的特征值。
对 Schur 分解进行重新排序,使特征值位于两个组中,负特征值组在 TS 的对角线上先出现。
select = F1.values .< 0
TS,US,Z = ordschur(F1,select)
TS = 6×6 Matrix{Float64}:
-27.0 19.0919 -18.6997 -1.39024e-14 9.78876 12.7279
0.0 -6.3302e-15 -0.379968 1.62068e-14 -15.6493 -15.5227
0.0 0.0 -9.79796 2.41216e-15 -2.4773 -8.71848
0.0 0.0 0.0 111.0 1.45074e-14 -8.70856e-15
0.0 0.0 0.0 0.0 27.0 26.36
0.0 0.0 0.0 0.0 0.0 9.79796
US = 6×6 Matrix{Float64}:
0.408248 0.288675 -0.274621 -0.408248 0.482644 0.524377
0.408248 0.288675 -0.298996 -0.408248 -0.521261 -0.471405
0.408248 -0.57735 0.573617 -0.408248 0.0386168 -0.0529729
-0.408248 -0.288675 -0.207451 -0.408248 -0.515098 0.524377
-0.408248 -0.288675 -0.366165 -0.408248 0.476481 -0.471405
-0.408248 0.57735 0.573617 -0.408248 0.0386168 -0.0529729
Z = 6-element Vector{Float64}:
-26.99999999999997
-6.3301965765857146e-15
-9.797958971132712
111.00000000000001
27.000000000000032
9.79795897113268
在 CentOS 结果会不一致。
重新排序 QZ (广义 Schur)分解
计算一对矩阵的 QZ 分解,然后根据指定的特征值顺序对因子重新排序。
计算一对矩阵 A 和 B 的 QZ 分解或广义舒尔分解。此分解生成因子
A = magic(5);
B = hilb(5);
F = schur(A,B)
AA,BB,Q,Z =F
AA = 5×5 Matrix{Float64}:
14.5272 -2.35171 8.57566 -0.234984 -1.44317
0.0 -19.7471 2.18242 4.54173 7.20586
0.0 0.0 -17.9538 8.9292 -9.69607
0.0 0.0 0.0 30.3449 -47.9191
0.0 0.0 0.0 0.0 32.4399
BB = 5×5 Matrix{Float64}:
5.03171e-6 0.000524482 0.00184177 0.0464795 0.230412
0.0 0.000767259 0.0198901 0.166215 0.732011
0.0 0.0 0.0209794 0.100644 -0.134072
0.0 0.0 0.0 0.0622709 -1.13803
0.0 0.0 0.0 0.0 0.743385
Q = 5×5 Matrix{Float64}:
-0.174273 -0.756678 -0.40098 0.417799 -0.248449
-0.109878 -0.115123 0.678227 -0.0296611 -0.7168
-0.0788907 -0.0845914 0.547836 0.647261 0.517251
-0.46903 0.617159 -0.266407 0.488316 -0.2995
0.855186 0.16169 -0.0901451 0.408858 -0.259273
Z = 5×5 Matrix{Float64}:
0.00574209 -0.0424093 -0.291396 -0.586024 -0.754872
-0.112544 0.410928 0.763515 0.17338 -0.453274
0.49954 -0.674583 0.148597 0.405259 -0.330275
-0.769396 -0.213976 -0.261376 0.474868 -0.261585
0.381825 0.573142 -0.491665 0.486601 -0.217261
由于 AA 和 BB 都是三角矩阵,因此使用 ordeig 从 AA 和 BB 的对角块中提取特征值。
e = ordeig(AA,BB)
5-element Vector{Float64}:
2.8871370730664823e6
-25737.233381612637
-855.7816814087191
487.3038494509818
43.638140796939986
将特征值分成组,由正实数特征值 (e > 0) 构成起始组。根据此特征值顺序,对矩阵 AA、BB、Q 和 Z 重新排序。
select = real(F.values) .> 0
F1 = ordschur(F,select)
AAS,BBS,QS,ZS = F1
AAS = 5×5 Matrix{Float64}:
14.5272 -1.28491 1.03911 -7.68213 4.41186
0.0 21.7128 -19.1784 -1.83801 9.11867
-0.0 -0.0 60.3083 8.44521 -6.43043
0.0 0.0 0.0 -18.2081 3.37833
-0.0 -0.0 -0.0 -0.0 -14.6375
BBS = 5×5 Matrix{Float64}:
5.03171e-6 0.0113821 0.190768 0.111939 0.0787507
0.0 0.0445571 0.0377085 0.110747 0.197822
-0.0 -0.0 1.38201 0.632462 0.280656
0.0 0.0 0.0 0.00070746 -0.0137179
-0.0 -0.0 -0.0 -0.0 0.0171043
QS = 5×5 Matrix{Float64}:
-0.174273 -0.6353 -0.703397 0.141524 -0.226333
-0.109878 0.185289 -0.451831 -0.20355 0.841434
-0.0788907 0.409913 -0.345626 -0.705419 -0.456808
-0.46903 0.576505 -0.22946 0.60653 -0.164689
0.855186 0.248344 -0.359126 0.270266 -0.070476
ZS = 5×5 Matrix{Float64}:
0.00574209 -0.00879458 -0.528775 -0.359108 -0.768979
-0.112544 -0.609486 -0.385752 -0.473706 0.492603
0.49954 0.647792 -0.271117 -0.364381 0.352914
-0.769396 0.417635 -0.408983 0.175014 0.188978
0.381825 -0.185462 -0.575171 0.695155 0.0758454
检查新的特征值顺序。
E2 = ordeig(AAS,BBS)
5-element Vector{Float64}:
2.8871370730664823e6
487.3038494509819
43.638140796939986
-25737.233381613132
-855.78168140872
# 输入参数
select — 选择器Union{Vector{Bool},BitVector}
组选择器,指定为逻辑向量,其长度等于特征值的数量。特征值沿 U,T,S = schur(X) 生成的矩阵 T 的对角线排列。
Q — 广义 Schur(QZ) 分解对象方阵
# 输出参数
US,TS,AAS,BBS,QS,ZS — 重新排序后的矩阵矩阵
重新排序后的矩阵。
- 对于 Schur 分解,返回满足
的矩阵。US 是酉矩阵,TS 是拟三角矩阵; - 对于广义 Schur(QZ) 分解,返回满足 QSAZS = AAS 和 QSBZS = BBS 的矩阵。QS 和 ZS 是酉矩阵,而 AAS 是拟三角矩阵,BBS 是三角矩阵。
Z,W — 重新排序后的特征值矩阵
重新排序后的特征值。
# 详细信息
拟三角矩阵
上部拟三角矩阵可由实矩阵的舒尔分解或广义舒尔 (QZ) 分解产生。上拟三角矩阵是分块上三角矩阵,沿对角线是由非零值组成的 1×1 和 2×2 分块。
这些对角块的特征值也是矩阵的特征值。1×1 块对应于实数特征值,2×2 块对应于复共轭特征值对。
酉矩阵
如果可逆复数方阵 U 的共轭转置也是其逆矩阵,即