2016-01-20 80 views
2

在下面的示例中,我將函數替換爲矩陣表達式。我期望在.doit()調用之後進行一些簡化操作:Sympy:Matrix.doit()不適用於矩陣元素

x = symbols('x', real=True) 
f = symbols('f', real=True)(x) 
v = Matrix([f * sin(x), f * cos(x)]) 
v1 = v.diff(x) 

print v1.subs(f, x) 
# prints: Matrix([[x*cos(x) + sin(x)*Derivative(x, x)], [-x*sin(x) + cos(x)*Derivative(x, x)]]) 
print v1.subs(f, x).doit() 
# prints: Matrix([[x*cos(x) + sin(x)*Derivative(x, x)], [-x*sin(x) + cos(x)*Derivative(x, x)]]) 
print Matrix([e.doit() for e in v1.subs(f, x)]) 
# prints: Matrix([[x*cos(x) + sin(x)], [-x*sin(x) + cos(x)]]) 

但它不會發生。如果我爲矩陣的每個元素調用.doit(),則一切正常。

問題:什麼是不正確的,我的代碼或.doit()函數的行爲?如何解決它?

回答

1

看來這已在SymPy的開發版本中得到修復。新版本(1.0)應該很快發佈。

+0

很酷。此版本解決方法Matrix.applyfunc(..)正常工作。 –