このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
pinv
Moore-Penrose 疑似逆行列
説明
B = pinv(
は行列 A
)A
のMoore-Penrose 疑似逆行列を返します。
例
疑似逆行列を使用した線形方程式系の求解
バックスラッシュ (\
) と pinv
によって得られた線形方程式系の解を比較します。
方形係数行列 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
入力引数
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)
の特性をもちます。
疑似逆行列の計算は svd(A)
に基づいて行われます。この計算では、tol
より小さい特異値はゼロとして扱われます。
ヒント
ベクトル
b
に適用されているpinv
(pinv(A)*b
など) の大部分は、lsqminnorm(A,b)
に置き換えることができ、これにより線形方程式系の最小ノルムの最小二乗解を取得できます。一般的に、lsqminnorm
はpinv
より効率的で、スパース行列もサポートします。
アルゴリズム
pinv
は特異値分解を使用して A
の疑似逆行列を形成します。S
の対角上にある特異値のうち tol
より小さいものはゼロとして扱われ、A
は次のように表されます。
A
の疑似逆行列は以下と等しくなります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コード生成では、この関数のスパース行列入力はサポートされません。
スレッドベースの環境
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)