Hello, On Thursday, August 22, 2013 6:23:36 PM UTC+2, Matthew wrote: > > Fortunately this issue does not descend from the larger issue and can be > solved independently. See https://github.com/sympy/sympy/pull/2402 > >> I think setting MatrixElement._diff_wrt = True was a bad decision.
https://github.com/sympy/sympy/issues/7421 When running "expr.diff(wrt)", then the code in Derivative.__new__ that handles _diff_wrt works under the assumption that the terms in expr are either independent from wrt or contain an identical replica. Consider code like the following: i,n = symbols('i,n') w = MatrixSymbol('w', n, 1) result = Sum(123*w[i, 0], (i, 0, n - 1)).diff(w[0,0]) Derivative.__new__ will replace w[0,0] with a dummy symbol and attempt to also replace it in the expression. But in the expression we only have w[i,0] and Expr.subs does not understand how w[i,0] relates to w[0,0], yielding something like: result = Sum(123*w[i, 0], (i, 0, n - 1)).diff(_x1) Therefore result is set to 0 instead of 123. I can understand the need for supporting differentiation with respect to MatrixElements, but I think it can't be done with a simple Expr._diff_wrt property. Instead we would need something like MatrixElement._diff_subs_wrt(self, expr) that returns a tuple of the new expression and the dummy variable, or None if differentiation is not possible. Such a method could then check for terms in expr that might or might not overlap with wrt in a way that can not be handled correctly at the moment, or even rewrite the expression (for example unroll the case i==0 out of the sum) to make differentiation possible. regards, - clifford PS: I'm new to sympy (this is the first time I looked into the sympy source code), so I don't really have a much insight yet. If what I say makes no sense, it might be because I have no idea what I am talking about.. ;) -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/b18af010-e570-4182-a5a4-389b159d5213%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
