pinv
Moore-Penrose 疑似逆行列
説明
B = pinv(
は、行列 A
)A
の Moore-Penrose 疑似逆行列を返します。
例
疑似逆行列を使用した線形方程式系の求解
バックスラッシュ (\
)、pinv
、および lsqminnorm
によって得られる線形方程式系の解を比較します。
方形係数行列 A
が低ランクの場合、norm(A*x-b)
を最小化する最小二乗問題の解は無限に存在することになります。x1 = A\b
と x2 = 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
入力引数
A
— 入力行列
行列
入力行列。
データ型: single
| double
複素数のサポート: あり
tol
— 特異値の許容誤差
スカラー
特異値の許容誤差。スカラーとして指定します。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)
の特性をもちます。
ここで、AB と BA はエルミートです。疑似逆行列の計算は svd(A)
に基づいて行われます。この計算では、tol
以下の特異値はゼロとして扱われます。
ヒント
ベクトル
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
の疑似逆行列は以下と等しくなります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コード生成では、この関数のスパース行列入力はサポートされません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
「C/C++ コード生成」セクションの使用上の注意事項および制限事項を参照してください。同じ制限が GPU コード生成に適用されます。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入R2021b: pinv
は非有限の入力に対して NaN
を返す
pinv
は、入力に非有限の値 (Inf
または NaN
) が含まれていると NaN
値を返します。以前は、入力に非有限の値が含まれていると pinv
からエラーがスローされていました。
参考
inv
| qr
| rank
| svd
| lsqminnorm
| decomposition
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)