Как найти обратную матрицу с одной постоянной переменной (используя массивы)?

#python #arrays #numpy #scipy #sympy

#python #массивы #numpy #scipy #симпатия

Вопрос:

Я пытаюсь найти обратную этому, но numpy, похоже, находит только обратные значения для чисел. Я alpha не равен нулю.

Как мне это сделать?

 from sympy import *
import numpy as np 
import scipy.linalg 

A = np.array([[1,2,3],[2,2,3],[3,4,5]])
B = np.array([[1,0,3],[8,2,3],[3,9,5]])

alpha = symbols('a')
K = A - alpha*B
print(np.linalg.inv(K))
  

Ответ №1:

Вы правы, функция NumPy inv ожидает числовой ввод. Документация SymPy об основных методах для объекта SymPy Matrix гласит: «Чтобы найти обратную матрицу, просто возведите ее в степень -1».

Итак…

 from sympy import *
import numpy as np 
import scipy.linalg 

A = np.array([[1,2,3],[2,2,3],[3,4,5]])
B = np.array([[1,0,3],[8,2,3],[3,9,5]])

alpha = symbols('a')
K = A - alpha*B

M = Matrix(K)
print("M:")
print(repr(M))
print()
print("inv(M):")
print(repr(M**-1))
  

Вывод:

 M:
Matrix([
[  1 - a,       2, 3 - 3*a],
[2 - 8*a, 2 - 2*a, 3 - 3*a],
[3 - 3*a, 4 - 9*a, 5 - 5*a]])

inv(M):
Matrix([
[                      (17*a - 2)/(181*a**2 - 33*a   2), -(27*a - 2)/(181*a**2 - 33*a   2),                             6*a/(181*a**2 - 33*a   2)],
[                      (31*a - 1)/(181*a**2 - 33*a   2),   (4*a - 4)/(181*a**2 - 33*a   2),                     -(21*a - 3)/(181*a**2 - 33*a   2)],
[-(66*a**2 - 38*a   2)/(181*a**3 - 214*a**2   35*a - 2),   (9*a   2)/(181*a**2 - 33*a   2), -(2*a**2   12*a - 2)/(181*a**3 - 214*a**2   35*a - 2)]])
  

Как отметил @OscarBenjamin в комментарии, вы также можете использовать этот inv метод, т.е. M.inv() .

Комментарии:

1. Симпатическая матрица также имеет inv метод, т.Е. M.inv() для обратного.