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 = 1.0857e-15
誤差は 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
0 1.0000
-0.7071 0
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
入力引数
入力行列。
データ型: single | double
複素数のサポート: あり
特異値の許容誤差。実数値スカラーとして指定します。許容誤差以下の 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 の範囲の正規直交基底を構成します。
拡張機能
使用上の注意および制限:
生成されたコードは MATLAB® と異なる基底を返す場合があります。
コード生成では、この関数のスパース行列入力はサポートされません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
orth 関数は、GPU 配列を完全にサポートします。GPU 上で関数を実行するには、入力データを gpuArray (Parallel Computing Toolbox) として指定します。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
この関数は分散配列を完全にサポートしています。詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入tol 引数を使用して、A の範囲に対する正規直交基底の形成に使用される特異値について、許容誤差しきい値を指定します。許容誤差以下の入力行列の特異値はゼロとして扱われます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)