Действительная / мнимая часть симплексной комплексной матрицы

Вот моя проблема.

Я использую sympy и комплексную матрицу P (все элементы P комплексные). Я хочу извлечь реальную / мнимую часть первой строки.

Итак, я использую следующую последовательность:

import sympy as sp

P = sp.Matrix([ [a+sp.I*b,c-sp.I*d], [c-sp.I*d,a+sp.I*b] ])
Row = P.row(0)
Row.as_mutable()
Re_row = sp.re(Row)
Im_row = sp.im(Row)

Но код возвращает мне следующую ошибку:

«AttributeError: ImmutableMatrix не имеет атрибута as_coefficient».

Ошибка возникает во время операции sp.re (Row) и sp.im (Row) ... Sympy сообщает мне, что Row является неизменяемой матрицей, но я указываю, что мне нужна изменяемая матрица ...

Так что я в тупике, и у меня нет решения ...

Может кто-нибудь мне помочь? большое спасибо !


person user3270391    schedule 04.02.2014    source источник


Ответы (1)


Большинство функций SymPy не будут работать, если вы просто передадите им матрицу напрямую. Вам нужно использовать методы Матрицы, или, если такого метода нет (как здесь), используйте applyfunc

In [34]: Row.applyfunc(re)
Out[34]: [re(a) - im(b)  re(c) + im(d)]

In [35]: Row.applyfunc(im)
Out[35]: [re(b) + im(a)  -re(d) + im(c)]

(Я определил здесь a, b, c и d как обычные символы, если вы установите их как настоящие, ответ будет намного проще).

person asmeurer    schedule 06.02.2014