(やりたいこと)
・逆行列の計算
・もしも逆行列が計算できない場合、そこで処理を中断せず、もとの行列を微修正して
逆行列を求めに行く。
(コードは以下の通りです。pythonのバージョンは3.9)
import numpy as np
from numpy import linalg as LA
(定義した関数)
def inverse(matrix):
size = matrix.shape[0]
print(size)
try:
inv_matrix = LA.inv(matrix)
except LinAlgError:
matrix = matrix + 1.0e-06 * np.eye(size)
inv_matrix = LA.inv(matrix)
return inv_matrix
(行った処理)
matrix = np.array([1,1,1,1]).reshape(2,2)
inverse(matrix)
(エラーメッセージ)
LinAlgError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_9616/2531054357.py in inverse(matrix)
4 try:
----> 5 inv_matrix = LA.inv(matrix)
6 except LinAlgError:
<array_function internals> in inv(*args, **kwargs)
~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in inv(a)
544 extobj = get_linalg_error_extobj(_raise_linalgerror_singular)
--> 545 ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
546 return wrap(ainv.astype(result_t, copy=False))
~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in _raise_linalgerror_singular(err, flag)
87 def _raise_linalgerror_singular(err, flag):
---> 88 raise LinAlgError("Singular matrix")
89
LinAlgError: Singular matrix
During handling of the above exception, another exception occurred:
NameError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_9616/3939661030.py in <module>
1 matrix = np.array([1,1,1,1]).reshape(2,2)
----> 2 inverse(matrix)
~\AppData\Local\Temp/ipykernel_9616/2531054357.py in inverse(matrix)
4 try:
5 inv_matrix = LA.inv(matrix)
----> 6 except LinAlgError:
7 matrix = matrix + 1.0e-06 * np.eye(size)
8 nv_matrix = LA.inv(matrix)
NameError: name 'LinAlgError' is not defined

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/12 05:23