import numpy as np
from numpy.linalg import norm
матрица = np.matrix([[1, 2, 1], [0, 1, 0], [0, 2, 2]])
def найти_обратную(A0, error, X0=None, метод=0):
методы = [lambda X: X/np.power(norm(X, ord=1), 2),
lambda X: X/np.power(norm(X, ord=np.inf), 2),
lambda X: X/np.power(norm(X, ord='fro'), 2),
lambda X: X.T/(norm(X, ord=1)*norm(X, ord=np.inf)*A0.shape[0])]
if X0 is None:
X0 = методы[метод](A0)
R0 = np.eye(A0.shape[0]) - A0 * X0
if norm(R0.flatten(), ord=1) >= 1.0:
return 'Метод не позволяет сформировать начальную матрицу, удовлетворяющую условию'
else:
return найти_обратную(A0, error=error, X0=X0, метод=метод)
else:
R0 = np.eye(A0.shape[0]) - A0 * X0
if norm(R0, ord='fro') < error:
return X0
else:
X0 = X0 * (np.eye(A0.shape[0]) + R0)
return найти_обратную(A0, error=error, X0=X0, метод=метод)
обратная = найти_обратную(матрица, error=0.001 , метод=3)
print("Обратная матрица:\n\n", обратная, "\n")
print("Произведение с обратной матрицей:\n\n", обратная * матрица, "\n")