使用Sympy 0.7.2从Continuum Anaconda发行版(太懒得建立我自己的堆栈,不讨厌),我在做复杂矩阵代数时遇到这个问题,其中一些本地函数用'I'代替了典型的'1j',这很烦人,因为它不能很好地与其他的算术运算一起使用,并且基本上保持了它的形式并且增加了因子而不是计算简明的结果。例如:Sympy复杂矩阵求逆/操作
>>> T
[ 1, 1.0 - 1.0*I]
[1.0 + 1.0*I, 0]
>>> T.inv()
[-(0.5 + 0.5*I)*(1.0 - 1.0*I) + 1, 0.5 - 0.5*I]
[ 0.5 + 0.5*I, -0.5]
>>> T.inv()*T
[-(0.5 + 0.5*I)*(1.0 - 1.0*I) + 1 + (0.5 - 0.5*I)*(1.0 + 1.0*I), (1.0 - 1.0*I)*(
-(0.5 + 0.5*I)*(1.0 - 1.0*I) + 1)]
[ 0,
(0.5 + 0.5*I)*(1.0 - 1.0*I)]
其是东阳T.INV()* T是绝对,(单位矩阵,数量不限),而不是那些乱七八糟那里,清楚地延迟(也格式是disgusti因为任何原因)。如果我手动将“I”替换为“1j”,我会像您一样获得。上面的结果并没有错,(它可以用于),但是你可以想象,对于更复杂的问题,如果不是“让我们找到单位矩阵”,那么这个问题可能非常快速地变得非常严重。
我不知道有一个比我现在有,这是对矩阵转换为字符串,并取代“我”与“1J”手动....
#If A is a complex matrix, Let AI be its inverse.
A_STR = string(A).replace("I", "1j").replace("\n", "")
exec("AI=Matrix("+str(A.shape()).replace("(", "").replace(")", "")+"," + A_STR + ")")
一个更好的解决方案
谢谢
太棒了,谢谢。 –