同情复杂矩阵的实/虚部分

时间:2014-02-04 10:48:18

标签: matrix complex-numbers sympy

这是我的问题。

我正在使用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是一个不可变矩阵,但我指定我想要一个可变的矩阵......

所以我走到了尽头,我没有解决方案......

有人可以帮助我吗? 非常感谢你!

1 个答案:

答案 0 :(得分:2)

如果您直接将矩阵传递给他们,大多数SymPy功能将无效。您需要使用Matrix的方法,或者如果没有这样的方法(如此处所示),请使用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)]

(我已将abcd定义为此处的普通符号,如果您将它们设置为真实,则答案会更多更简单)。