特異行列なのに逆行列が求まる???

numpy.linalg.inv returns inverse for a singular matrix – StackOverflow

import numpy as np

a = np.array(
    [
        [2,7,7],
        [7,7,7],
        [8,7,7]
    ]
)

np.linalg.inv(a)

LinAlgError: Singular matrix

np.__version__

‘1.13.1’

再現できない.

np.linalg.det(a)

0.0

余因子は0で逆行列が存在しない事は明らか.

np.linalg.solve(a, b)

LinAlgError: Singular matrix

np.linalg.pinv(a)

array([[-0.17741935, 0.06451613, 0.11290323],
[ 0.09562212, -0.00230415, -0.0218894 ],
[ 0.09562212, -0.00230415, -0.0218894 ]])
 
 
 

np.dot(np.linalg.pinv(a), a)

array([[ 1.00000000e+00, -1.11022302e-16, -1.11022302e-16],
[ -1.38777878e-16, 5.00000000e-01, 5.00000000e-01],
[ -2.22044605e-16, 5.00000000e-01, 5.00000000e-01]])

b = np.array(
    [
        [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
        [  3.43131400e+15,  -2.05878840e+16,   1.71565700e+16],
        [ -3.43131400e+15,   2.05878840e+16,  -1.71565700e+16]
    ]
)

np.linalg.inv(b)

LinAlgError: Singular matrix

逆行列が求まっている訳ではない.

浮動小数点精度の問題だとすると,32ビット環境で起こり得る問題なんだろうか.
 
 
 
Sympyの場合

A = Matrix(
    [
        [2,7,7],
        [7,7,7],
        [8,7,7]
    ]
)

A.inv()

ValueError: Matrix det == 0; not invertible.

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中