メインコンテンツ

pinv

Moore-Penrose 疑似逆行列

説明

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

B = pinv(A,tol) は、許容誤差の値を指定します。pinv は許容誤差以下の A の特異値をゼロとして扱います。

すべて折りたたむ

バックスラッシュ (\)、pinv、および lsqminnorm によって得られる連立線形方程式の解を比較します。

方形係数行列 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

この問題の最小二乗解を lsqminnorm を使用して計算すると、pinv を使用した場合と同じ解が得られます。lsqminnorm(A,b) は一般に pinv(A)*b よりも効率的です。

x3 = lsqminnorm(A,b)
x3 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(x3)
ans = 
3.2817

入力引数

すべて折りたたむ

入力行列。

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

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

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

例: pinv(A,1e-4)

詳細

すべて折りたたむ

ヒント

  • ベクトル b に適用されている pinv (pinv(A)*b など) の大部分は、lsqminnorm(A,b) に置き換えることができ、これにより連立線形方程式の最小ノルムの最小二乗解を取得できます。たとえば、疑似逆行列を使用した連立線形方程式の求解では、lsqminnorm によって pinv と同じ解が得られます。lsqminnorm は完全直交分解を使用して A の低ランク近似を求め、その因子を b に適用するため、一般に lsqminnorm の方が pinv よりも効率的です。一方、pinv では特異値分解を使用して A の疑似逆行列が明示的に形成され、これにユーザーが b を乗算しなければなりません。lsqminnorm はスパース行列もサポートします。

アルゴリズム

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

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

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

B=V1S11U1*.

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する