この質問はかなり古いですが、一部の Google 検索でほぼトップに表示されるため、とにかく答えます。
この例では、N 行 N 列の魔方陣を返す magic(N) 関数を使用します。
3x3 の魔方陣 M3 を作成し、疑似逆数 PI_M3 を取り、それらを乗算します。
prompt_$ M3 = マジック(3) 、PI_M3 = pinv(M3) 、M3 * PI_M3
M3 =
8 1 6
3 5 7
4 9 2
PI_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
ans =
1.0000e+00 -1.2212e-14 6.3283e-15
5.5511e-17 1.0000e+00 -2.2204e-16
-5.9952e-15 1.2268e-14 1.0000e+00
ご覧のとおり、答えは、いくつかの丸め誤差を保存した恒等行列です。4x4 の魔方陣で操作を繰り返します。
prompt_$ M4 = マジック(4) 、PI_M4 = pinv(M4) 、M4 * PI_M4
M4 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
PI_M4 =
0.1011029 -0.0738971 -0.0613971 0.0636029
-0.0363971 0.0386029 0.0261029 0.0011029
0.0136029 -0.0113971 -0.0238971 0.0511029
-0.0488971 0.0761029 0.0886029 -0.0863971
ans =
0.950000 -0.150000 0.150000 0.050000
-0.150000 0.550000 0.450000 0.150000
0.150000 0.450000 0.550000 -0.150000
0.050000 0.150000 -0.150000 0.950000
結果は恒等行列ではありません。つまり、4x4 の魔方陣には逆行列がありません。これは、Moore-Penrose 疑似逆行列のルールの 1 つを試すことで確認できます。
prompt_$ M4 * PI_M4 * M4
ans =
16.00000 2.00000 3.00000 13.00000
5.00000 11.00000 10.00000 8.00000
9.00000 7.00000 6.00000 12.00000
4.00000 14.00000 15.00000 1.00000
ルール A*B*A = A が満たされます。これは、pinv が逆行列が利用できる場合は逆行列を返し、逆行列が利用できない場合は疑似逆行列を返すことを示しています。これが、いくつかの状況ではわずかな丸め誤差だけが得られる理由であり、別の状況では大きな差が得られる理由です。それを示すために、両方の魔法の象限の逆を取得し、疑似逆からそれらを減算します。
prompt_$ I_M3 = inv(M3) 、I_M4 = inv(M4) 、DIFF_M3 = PI_M3 - I_M3、DIFF_M4 = PI_M4 - I_M4
I_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
警告: 逆: 機械精度に特異な行列、rcond = 1.30614e-17
I_M4 =
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
DIFF_M3 =
4.7184e-16 -1.0270e-15 5.5511e-16
-9.9226e-16 2.0470e-15 -1.0825e-15
5.2042e-16 -1.0270e-15 4.9960e-16
DIFF_M4 =
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13