| MATLAB Function Reference | ![]() |
表示
B = pinv(A) B = pinv(A,tol)
定義
Moore-Penrose 擬似逆行列は、つぎの 4 つの条件を満たす A'と同じ次元の行列 B です。
A*B*A = A B*A*B = B A*B は、Hermitian です。 B*A は、Hermitian です。
計算は、svd(A) を基にして、tol
以下の特異値はゼロとみなします。
詳細
B = pinv(A)
は、A の Moore-Penrose 擬似逆行列を出力します。
B = pinv(A,tol)
は、Moore-Penrose 擬似逆行列を出力し、デフォルトの許容誤差 max(size(A))*norm(A)*eps を変更します。
例題
A が正則である場合、pinv(A) は inv(A) と同じ結果を出力しますが、時間がかかります。A が正方でないか、正則でない場合、inv(A) は存在しません。このような場合、pinv(A) は完全ではありませんが、inv(A) の特性をもちます。
A が列よりも大きな行をもち、フルランクでなければ、つぎの過多最小二乗問題
minimize norm(A*x-b)
は、一意的な解をもちません。無限に存在する解の中の 2 つは、
x = pinv(A)*b
y = A\b
です。これら 2 つは、norm(x) が他のどの解のノルムよりも小さく、そして、y はゼロでない要素をほとんどもたないということによって区別されます。
A = magic(8); A = A(:,1:6)
によって作成される行列は、rank(A) = 3 となる 8行6列の行列です。
A =
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 =
260
260
260
260
260
260
260
260
スケールファクタ 260 は、8行8列の魔方陣の和です。8
列すべてを使って、A*x =
b に対する1 つの解は、すべて 1 のベクトルになります。6
列までを使っての方程式でも矛盾がなく、そのため解が存在しますが、すべてが
1 ではありません。行列がフルランクでなければ、解は無限に存在します。その中の
2 つは、
x = pinv(A)*b
x =
1.1538
1.4615
1.3846
1.3846
1.4615
1.1538
y = A\b
y =
3.0000
4.0000
0
0
1.0000
0
です。norm(A*x-b)と norm(A*y-b) は、丸め誤差の範囲内であるという意味で、これら2つは、正確な解です。解x は特殊です。なぜなら、
norm(x) = 3.2817
norm(y) = 5.0990
を含む他の解のノルムよりも小さいからです。一方、非ゼロ成分を3つだけもつということで、解 y は特殊です。
inv, qr, rank, svd
| pie3 | plot | ![]() |