Main Content

orth

行列の範囲の正規直交基底

説明

Q = orth(A) は、A範囲の正規直交基底を返します。行列 Q の列は、A の範囲を張るベクトルです。Q の列数は Aランクと等しくなります。

Q = orth(A,tol) は、許容誤差も指定します。tol より小さい A の特異値はゼロとして扱われ、これは Q 内の列数に影響する場合があります。

すべて折りたたむ

フル ランク行列の範囲の正規直交基底ベクトルを計算して検証します。

行列を定義し、ランクを求めます。

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 はフル ランクであるため、QA のサイズは同じです。

基底 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 はフル ランクであるため、QH のサイズは同じです。

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 の範囲の正規直交基底を構成します。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

参考

| |