У меня есть матрица, содержащая операторы. Я хочу взять его эрмитово сопряженное.
from sympy import Matrix, symbols
from sympy.physics.quantum import Operator
from sympy.physics.secondquant import Dagger
A, B = symbols('A, B', cls=Operator)
mat = Matrix([[0, A*B], [0, 0]])
print(mat.H)
print(Dagger(mat))
Я ожидаю получить
Matrix([[0, 0], [Dagger(B)*Dagger(A), 0]])
Однако из мат.ч я получаю
Matrix([[0, 0], [conjugate(A)*conjugate(B), 0]])
и от кинжала(мат)
Dagger(Matrix([
[0, A*B],
[0, 0]]))
Есть ли способ сделать это в sympy?
Вы можете вручную транспонировать и применять крестик к каждому элементу:
In [38]: mat.transpose().applyfunc(Dagger)
Out[38]:
⎡ 0 0⎤
⎢ ⎥
⎣Dagger(B)⋅Dagger(A) 0⎦
Я открыл github.com/sympy/sympy/issues/16959