Если вы ищете символическое обратное, вам нужно использовать SymPy. NumPy вычисляет только обратные числа, и используемые им алгоритмы не будут работать с символьными матрицами.
Похоже, что алгоритм по умолчанию, используемый SymPy, работает медленно с этой матрицей, но вы можете попробовать альтернативные алгоритмы, передав ключевое слово method
методу inv
Matrix
. Доступны следующие варианты: 'GE'
(по умолчанию), 'LU'
и 'ADJ'
.
Это также может помочь сделать M.subs(exp(-a**2/25), b)
для расчета. Таким образом, полученная матрица будет иметь степень b
(вам нужно будет использовать рациональные числа вместо числа с плавающей запятой, чтобы это работало). Мне удалось получить обратное значение с помощью
a, b = symbols('a b')
M = Matrix([[1, exp(-a**2/25), exp(-4*a**2/25), exp(-9*a**2/25), exp(-16*a**2/25), exp(-a**2)], [exp(-a**2/25), 1, exp(-a**2/25), exp(-4*a**2/25), exp(-9*a**2/25), exp(-16*a**2/25)], [exp(-4*a**2/25), exp(-a**2/25), 1, exp(-a**2/25), exp(-4*a**2/25), exp(-9*a**2/25)], [exp(-9*a**2/25), exp(-4*a**2/25), exp(-a**2/25), 1, exp(-a**2/25), exp(-4*a**2/25)], [exp(-16*a**2/25), exp(-9*a**2/25), exp(-4*a**2/25), exp(-a**2/25), 1, exp(-a**2/25)], [exp(-a**2), exp(-16*a**2/25), exp(-9*a**2/25), exp(-4*a**2/25), exp(-a**2/25), 1]])
M2 = M.subs(exp(-a**2/25), b)
M2inv = simplify(M2.inv('ADJ')) # takes a little time to compute, about 1:30 on my machine
Minv = M2inv.subs(b, exp(-a**2/25))
. В конце дня вы можете подумать, нужна ли вам символическая инверсия матрицы. Достаточно ли заменить числовое значение на a
, а затем вычислить обратное числовое значение с помощью NumPy? Вам действительно нужно обратное вообще? Обычно вычисление явной обратной матрицы не является хорошей идеей для численных расчетов. Обычно лучше использовать что-то вроде numpy.linalg.solve
.
Символьные инверсии, как правило, являются очень сложными выражениями и по своей природе трудно поддаются вычислению. Числовые инверсии чрезвычайно численно нестабильны и почти никогда не являются хорошей идеей для вычисления любой проблемы, которую вы пытаетесь решить.