schur
Schur 分解
説明
例
行列の Schur 型
3 行 3 列の行列を作成し、その Schur 型を計算します。結果は、対角上に A
の固有値 (1
、2
、および 3
) をもつ行列になります。
A = [-149 -50 -154; 537 180 546; -27 -9 -25]; T = schur(A)
T = 3×3
1.0000 -7.1119 815.8706
0 2.0000 55.0236
0 0 3.0000
非対角要素が大きく、この行列の固有値が悪条件であることを示しています。これは、関数 condeig
を使用して条件数を調べると確認できます。
condeig(A)
ans = 3×1
603.6390
395.2366
219.2920
複素固有値をもつ行列の Schur 型
3 行 3 列の複素固有値をもつ行列を作成します。
A = [3 1 1; 0 2 0; -2 1 1]
A = 3×3
3 1 1
0 2 0
-2 1 1
A
の実 Schur 型を計算します。対角上にある 2 行 2 列のブロック行列が共役複素固有値のペアを表します。
T1 = schur(A)
T1 = 3×3
2.0000 0.3820 1.3764
-2.6180 2.0000 0.3249
0 0 2.0000
関数 ordeig
を使用して、実 Schur 型の固有値を求めます。
ordeig(T1)
ans = 3×1 complex
2.0000 + 1.0000i
2.0000 - 1.0000i
2.0000 + 0.0000i
mode
を "complex"
と指定して、A
の複素 Schur 型を計算します。T2
の対角値が A
の Schur 型の固有値です。これは、ordeig
の出力と同じになります。
T2 = schur(A,"complex")
T2 = 3×3 complex
2.0000 + 1.0000i 2.2361 + 0.0000i -0.3035 - 0.4911i
0.0000 + 0.0000i 2.0000 - 1.0000i 1.2858 + 0.1159i
0.0000 + 0.0000i 0.0000 + 0.0000i 2.0000 + 0.0000i
行列の Schur 分解
3 行 3 列の魔方陣行列を作成し、その Schur 分解因子を計算します。
A = magic(3); [U,T] = schur(A)
U = 3×3
-0.5774 -0.8131 -0.0749
-0.5774 0.4714 -0.6667
-0.5774 0.3416 0.7416
T = 3×3
15.0000 0.0000 -0.0000
0 4.8990 -3.4641
0 0 -4.8990
A-U*T*U'
および U'*U - eye(size(U))
のノルムがマシンの精度内で 0 であることを検証します。
norm(A-U*T*U')
ans = 6.7711e-15
norm(U'*U - eye(size(U)))
ans = 5.0471e-16
入力引数
A
— 入力行列
正方行列
入力行列。実正方行列または複素正方行列として指定します。A
は密でなければなりません。
データ型: single
| double
複素数のサポート: あり
出力引数
詳細
疑似三角行列
疑似上三角行列は、実数行列の Schur 分解または一般化 Schur (QZ) 分解の結果として得られます。疑似上三角行列はブロックの上三角行列で、対角上に 1 行 1 列および 2 行 2 列の非ゼロ値のブロックがあります。
これらの対角ブロックの固有値は、この行列の固有値でもあります。1 行 1 列のブロックは実数固有値に対応し、2 行 2 列のブロックは複素共役固有値の組に対応します。
ユニタリ行列
可逆の複素正方行列 U
は、その共役転置もその逆である場合、つまり であればユニタリです。
ヒント
関数
rsf2csf
を使用すると、行列の実 Schur 型を複素 Schur 型に変換できます。[U,T] = rsf2csf(A)
は[U,T] = schur(A,"complex")
と同じ出力を返します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
生成されたコードは、MATLAB® とは異なる Schur 分解を返す場合があります。
入力行列に非有限値が含まれる場合、生成されたコードはエラーを発行しません。代わりに、出力には
NaN
値が含まれます。コード生成では、この関数のスパース行列入力はサポートされません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)