Continuum Anaconda ディストリビューションの Sympy 0.7.2 を使用して (自分のスタックを構築するにはあまりにも怠惰でした。嫌いではありません)、いくつかのネイティブ関数が典型的な '1j' を置き換える複雑な行列代数を実行すると、この問題に遭遇し続けます。 、「I」を使用します。他の算術演算とはうまく機能せず、基本的にその形式を維持し、要約された結果を計算する代わりに要素を追加するため、これは面倒です。例を挙げます。
>>> 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 は間違いなく1(数値ではなく単位行列)であり、それほど混乱していないため、これは明らかに遅れています(また、何らかの理由でフォーマットが嫌です)。「I」を手動で「1j」に置き換えると、あなたと同じように1になります。上記の結果は間違っていません (結果は1になります) が、「単位行列を見つけよう」ではないより複雑な問題の場合、これは非常に迅速に非常に大雑把になる可能性があることを想像できます。
行列を文字列に変換し、「I」を手動で「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 + ")")
ありがとう