I haven't thought about this issue much.  Generally speaking though
MatrixElement and derivatives and Matrix Expressions are absolutely in a
not so perfect state.  Help here is welcome.


On Thu, Apr 24, 2014 at 4:16 PM, Aaron Meurer <[email protected]> wrote:

> If we override _eval_derivative on MatrixElement can we make it do the
> right thing?
>
> Aaron Meurer
>
> On Mon, Apr 21, 2014 at 6:50 AM, Clifford Wolf <[email protected]>
> wrote:
> > 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.
>
> --
> 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/CAKgW%3D6L_5tJLBDOcoLS_PrDD0XsA%3DtPoiWo1fZSoau7QcAqUkA%40mail.gmail.com
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CAJ8oX-FZYtJRUjEC7cRtwek_Mk3--anQ56AFJq8mgx3yFPBx%2Bw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to