このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
orth
行列の範囲の正規直交基底
説明
例
フル ランク行列の基底
フル ランク行列の範囲の正規直交基底ベクトルを計算して検証します。
行列を定義し、ランクを求めます。
A = [1 0 1;-1 -2 0; 0 1 -1]; r = rank(A)
r = 3
A
はフル ランクの正方行列であるため、orth(A)
によって計算される正規直交基底は特異値分解 [U,S] = svd(A,"econ")
で計算される行列 U
と一致します。その理由は、A
の特異値がすべて非ゼロであるためです。
orth
を使用して A
の範囲の正規直交基底を計算します。
Q = orth(A)
Q = 3×3
-0.1200 -0.8097 0.5744
0.9018 0.1531 0.4042
-0.4153 0.5665 0.7118
Q
の列数は rank(A)
と等しくなります。A
はフル ランクであるため、Q
と A
のサイズは同じです。
基底 Q
が直交し、妥当な誤差範囲内に正規化されていることを検証します。
E = norm(eye(r)-Q'*Q,"fro")
E = 9.2306e-16
誤差は eps
と同程度です。
ランク落ち行列の基底
ランク落ち行列の範囲の正規直交基底ベクトルを計算して検証します。
特異行列を定義し、ランクを求めます。
A = [1 0 1; 0 1 0; 1 0 1]; r = rank(A)
r = 2
A
はランク落ちであるため、orth(A)
によって計算される正規直交基底は特異値分解 [U,S] = svd(A,"econ")
で計算される行列 U
の最初の r = 2
列のみと一致します。その理由は、A
の特異値がすべて非ゼロ "でない" ためです。
orth
を使用して A
の範囲の正規直交基底を計算します。
Q = orth(A)
Q = 3×2
-0.7071 -0.0000
0 1.0000
-0.7071 0.0000
A
はランク落ちであるため、Q
に含まれる列は A
より 1 つ少なくなります。
基底ベクトルの許容誤差の指定
行列に小さい特異値がある場合、許容誤差を指定して、ゼロとして扱われる特異値を変更します。
7 行 7 列のヒルベルト行列を作成します。この行列はフル ランクですが、いくつかの小さい特異値があります。
H = hilb(7)
H = 7×7
1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429
0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250
0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111
0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000
0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909
0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833
0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769
H
の範囲の正規直交基底を計算します。H
はフル ランクであるため、Q
と H
のサイズは同じです。
Q = orth(H)
Q = 7×7
-0.7332 0.6232 0.2608 -0.0752 0.0160 -0.0025 0.0002
-0.4364 -0.1631 -0.6706 0.5268 -0.2279 0.0618 -0.0098
-0.3198 -0.3215 -0.2953 -0.4257 0.6288 -0.3487 0.0952
-0.2549 -0.3574 0.0230 -0.4617 -0.2004 0.6447 -0.3713
-0.2128 -0.3571 0.2337 -0.1712 -0.4970 -0.1744 0.6825
-0.1831 -0.3446 0.3679 0.1827 -0.1849 -0.5436 -0.5910
-0.1609 -0.3281 0.4523 0.5098 0.4808 0.3647 0.1944
次に、正規直交基底ベクトルを再度計算します。ただし、許容誤差を 1e-4
に指定します。この許容誤差により、orth
は特異値のうち 3 つをゼロとして扱うようになるため、正規直交基底は 4 列のみになります。
Qtol = orth(H,1e-4)
Qtol = 7×4
-0.7332 0.6232 0.2608 -0.0752
-0.4364 -0.1631 -0.6706 0.5268
-0.3198 -0.3215 -0.2953 -0.4257
-0.2549 -0.3574 0.0230 -0.4617
-0.2128 -0.3571 0.2337 -0.1712
-0.1831 -0.3446 0.3679 0.1827
-0.1609 -0.3281 0.4523 0.5098
入力引数
A
— 入力行列
行列
入力行列。
データ型: single
| double
複素数のサポート: あり
tol
— 特異値の許容誤差
スカラー
特異値の許容誤差。実数値スカラーとして指定します。許容誤差未満の A
の特異値はゼロとして扱われ、これは orth
によって返される列空間ベクトルの数に影響を与えます。既定の許容誤差は max(size(A)) * eps(norm(A))
です。
詳細
範囲
行列 A
の列空間または "範囲" は、A
の列のすべての線形結合の集合です。線形方程式 A*x = b
の解となる任意のベクトル b
は、A
の列の線形結合として記述することもできるため、A
の範囲に含まれます。
ランク
行列の rank
は範囲の次元と等しく、また非ゼロの特異値の数と等しくなります。
アルゴリズム
A
の範囲の正規直交基底は、特異値分解 [U,S] = svd(A,"econ")
の U
から求められます。r = rank(A,tol)
の場合、U
の最初の r
列は A
の範囲の正規直交基底を構成します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
生成されたコードは MATLAB® と異なる基底を返す場合があります。
コード生成では、この関数のスパース行列入力はサポートされません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入R2022a: 許容誤差の指定
tol
引数を使用して、A
の範囲に対する正規直交基底の形成に使用される特異値について、許容誤差しきい値を指定します。許容誤差より小さい入力行列の特異値は、ゼロとして扱われます。
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)