Main Content

pinv

Moore-Penrose 疑似逆行列

説明

B = pinv(A) は行列 AMoore-Penrose 疑似逆行列を返します。

B = pinv(A,tol) は許容誤差の値を指定します。pinv は、A の特異値のうち、許容誤差より小さいものをゼロとして扱います。

すべて折りたたむ

バックスラッシュ (\) と pinv によって得られた線形方程式系の解を比較します。

方形係数行列 A が低ランクの場合、norm(A*x-b) を最小化する最小二乗問題の解は無限に存在することになります。x1 = A\bx2 = pinv(A)*b により、2 つの解が返されます。これらの解を区別する特徴は、x1 にはゼロ以外の要素が rank(A) 個しかなく、norm(x2) は他のどの解よりも小さいという点です。

rank(A) = 3 である 8 行 6 列の行列を作成します。

A = magic(8); 
A = A(:,1:6) 
A = 8×6

    64     2     3    61    60     6
     9    55    54    12    13    51
    17    47    46    20    21    43
    40    26    27    37    36    30
    32    34    35    29    28    38
    41    23    22    44    45    19
    49    15    14    52    53    11
     8    58    59     5     4    62

方程式系の右辺のベクトルを作成します。

b = 260*ones(8,1)
b = 8×1

   260
   260
   260
   260
   260
   260
   260
   260

右辺に対して選択された数字 (260) は、A の 8 行 8 列の魔方陣の和の値です。A が引き続き 8 行 8 列の行列であれば、x の解の 1 つに 1 から成るベクトルがあります。6 列しかない場合でも方程式に矛盾がないため解が存在しますが、解のすべてが 1 であるわけではありません。行列が低ランクであるため、解は無限に存在します。

バックスラッシュと pinv を使用して解のうち 2 つを求めます。

x1 = A\b
Warning: Rank deficient, rank = 3, tol =  1.882938e-13.
x1 = 6×1

    3.0000
    4.0000
         0
         0
    1.0000
         0

x2 = pinv(A)*b
x2 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(A*x1-b)norm(A*x2-b) は丸め誤差の範囲内であるという意味で、これら 2 つは厳密解です。解 x1 は非ゼロ成分が 3 つしかないため、この解は特殊です。解 x2 については、norm(x2)norm(x1) など他のどの解の場合と比べても小さいため、この解は特殊です。

norm(x1)
ans = 5.0990
norm(x2)
ans = 3.2817

入力引数

すべて折りたたむ

入力行列。

データ型: single | double
複素数のサポート: あり

特異値の許容誤差。スカラーとして指定します。pinv は、疑似逆行列の計算時に、tol より小さい特異値をゼロとして扱います。

既定の許容誤差は max(size(A))*eps(norm(A)) です。

例: pinv(A,1e-4)

詳細

すべて折りたたむ

Moore-Penrose 疑似逆行列

Moore-Penrose 疑似逆行列は、逆行列が存在しない場合に、逆行列の部分的な置換として機能できる行列です。この行列は、線形方程式系に一意の解がない場合、または多数の解が存在する場合に、この方程式系の求解によく使用されます。

任意の行列 A に対して一意の擬似逆行列 B が存在します。この疑似逆行列の次元は A' と同じです。A が正方であり、かつ特異でない場合、pinv(A) は時間がかかりますが inv(A) と同じ結果を出力します。しかし、A が正方でないか、または正方かつ特異である場合、inv(A) は存在しません。このような場合、pinv(A) は完全ではありませんが、inv(A) の特性をもちます。

1.ABA=A2.BAB=B3.(AB)*=AB(ABHermitian)4.(BA)*=BA(BAHermitian)

疑似逆行列の計算は svd(A) に基づいて行われます。この計算では、tol より小さい特異値はゼロとして扱われます。

ヒント

  • ベクトル b に適用されている pinv (pinv(A)*b など) の大部分は、lsqminnorm(A,b) に置き換えることができ、これにより線形方程式系の最小ノルムの最小二乗解を取得できます。一般的に、lsqminnormpinv より効率的で、スパース行列もサポートします。

アルゴリズム

pinv は特異値分解を使用して A の疑似逆行列を形成します。S の対角上にある特異値のうち tol より小さいものはゼロとして扱われ、A は次のように表されます。

A=USV*=[U1U2][S1000][V1V2]*A=U1S1V1*.

A の疑似逆行列は以下と等しくなります。

B=V1S11U1*.

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する