Пакет Python Sympy: Как обеспечить, чтобы сопряженная идентификационная матрица была равна идентификационной матрице

#python #sympy

#python #sympy

Вопрос:

Когда я запускаю этот код

 import sympy as sp
sp.init_printing(pretty_print=False)
I = sp.Identity(3)
A = sp.MatrixSymbol('A',3,3)
A*I
I*A
sp.adjoint(A)*I
I*sp.adjoint(A)
  

Я получаю ожидаемые результаты,

 A
A
Adjoint(A)
Adjoint(A)
  

Однако, если я запущу

 sp.adjoint(I)*A
  

Я получаю

 Adjoint(I)*A
  

Почему Sympy не заменяет сопряженную (I) на I ?

Ответ №1:

Adjoint(MatrixExpr) не вычисляется, это просто символический объект: https://github.com/sympy/sympy/blob/master/sympy/matrices/expressions/adjoint.py.

Поэтому я предполагаю, что sp.adjoint(I) использует отложенную загрузку для любой матрицы, чтобы сэкономить на вычислениях, пока это действительно не понадобится. Как только функция вычисляется, сопряженная вычисляется и устанавливается в I.

Возможно, I.adjoint() делает то, что вы ожидаете.