Le jeudi 30 juin 2011 à 13:25 -0500, Matthew Rocklin a écrit : > Where is the best place to read about the new assumptions system?
I'm afraid that the best place is the source code in sympy/assumptions/. I'm not aware of any comprehensive and current write-up on the new assumptions. > > On Thu, Jun 30, 2011 at 1:18 PM, Aaron Meurer <asmeu...@gmail.com> > wrote: > > On Thu, Jun 30, 2011 at 7:17 AM, Matthew Rocklin > <mrock...@gmail.com> wrote: > > I agree that support for derivatives on matrices is > important; I would like > > this myself. I haven't thought much about it in the context > of SymPy before > > though so thank you for bringing it up. > > I haven't solidified my understanding of this problem but it > seems like > > there are a few concepts of a derivative here. > > > > Given a matrix expression we can differentiate with respect > to the various > > matrices themselves. This is likely very similar to Aaron's > example using > > stock SymPy with non-commutative symbols. This should (I > think) work out of > > the box > > Given a function on vector valued inputs with possible > vector valued outputs > > we can define directional derivatives. I think this is what > Alan is talking > > about. In this situation the objects can easily become high > rank (Hessians > > of vector-valued functions are not matrices). This leads me > to the idea that > > we should consider mathematical Tensors rather than > matrices. > > > > The tensor vs matrix issue makes me nervous. There is a lot > of special stuff > > happening on rank two tensors (matrices) that we rarely care > about at higher > > ranks. Maybe this work should be done on a Tensor class and > Matrices should > > subclass Tensors? This is getting beyond the scope of what I > was looking for > > with a Matrix Symbol. I probably won't pursue this > enhancement in the near > > future but would be happy to support someone else's effort. > > For the moment I'm not working on Matrix Expressions > actually. I'm a bit > > stuck on how to proceed and would welcome any > suggestions. The best idea I > > have now is to insert symbols into standard sympy Exprs and > have aspects > > like shape and is_invertible be functions which are called > on the Expr tree > > rather than fields or methods of the object. This will fail > to raise > > exceptions when illegal operations are performed but should > get the job > > done. The Indexed class is somewhat similar in flavor. > > > This is something that you would (hopefully) be able to do > with the > new assumptions system. In other words, without having to > modify the > core, you should be able to say ask(Q.invertable(A*B)) and it > would > determine it based on whether you set A and B to be > invertible. Shape > should work too, though I'm not sure if the system can > currently > handle non-boolean assumptions (someone else will have to fill > in > here). > > By the way, is_invertible is perhaps something that could be > implemented in the core directly, so you could have support > for > non-invertible symbols in any case. It should just be a > matter of > making ._eval_power do the right thing in any case. > > > Aaron Meurer > > > > > > > > On Thu, Jun 30, 2011 at 7:05 AM, Alan Bromborsky > <abro...@verizon.net> > > wrote: > >> > >> Differentiation would only work with a scalar > (communicative) > >> differentiation operator. If the matrix function is a > function of a vector > >> or matrix one would have to define the directional > derivative for each case > >> (which would be a scalar differential operator) and use the > results of that > >> operation to determine the properties of a vector or matrix > derivative. > >> Note that determining the operator properties would also > require a > >> definition for the scalar product of vectors and matrices. > >> > >> Consider the vector directional derivative of a matrix M > that is the > >> function of a vector v, M(v), then if a is an arbitrary > vector (LaTeX > >> expression) the definition of the directional derivative > would be > >> > >> a\cdot\nabla M(v) \equiv \lim_{h \rightarrow 0}\frac{M(v > +ha)-M(v)}{h} > >> > >> > >> from this the properties of \nabla M(v) could be determined > and if v is > >> expanded in a arbitrary basis the \nabla operator could > also be expanded. A > >> similar treatment is possible for a matrix that is a > function of a matrix if > >> the scalar product of two matrices is defined. > >> > >> > >> > >> On 06/30/2011 04:20 AM, Aaron Meurer wrote: > >>> > >>> As I pointed out in the other thread, non-commutative > differentiation > >>> already works in SymPy, so doing this should not be > difficult. > >>> > >>> Aaron Meurer > >>> > >>> On Thu, Jun 30, 2011 at 1:58 AM, Amit<amiti...@gmail.com> > wrote: > >>>> > >>>> Hi, > >>>> > >>>> I am not familiar with the internals of sympy. But I > suggest that if > >>>> you start working on the implementation of symbolic > matrices, you > >>>> should take into consideration more complicated operators > like > >>>> differentiation. > >>>> 'The Matrix Cookbook' has many matrix equalities that > maybe can be > >>>> implemented using some kind of pattern recognition. > >>>> > >>>> Amit > >>>> > >>>> On Jun 28, 8:16 pm, Matthew Rocklin<mrock...@gmail.com> > wrote: > >>>>> > >>>>> @Brian - Thanks for the heads up Brian. I'll see what I > can do with > >>>>> option > >>>>> (1). My short term solution was to start a "matrixify" > function a la > >>>>> sympify. It would probably be too annoying to use > everywhere though. > >>>>> > >>>>> @Vinzent - Where is a good place to start learning about > the new > >>>>> assumption > >>>>> system (or the old one... I'm not up to speed on these) > >>>>> > >>>>> On Tue, Jun 28, 2011 at 11:36 AM, Vinzent Steinberg< > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> vinzent.steinb...@googlemail.com> wrote: > >>>>>> > >>>>>> On Jun 28, 4:32 am, Matthew > Rocklin<mrock...@gmail.com> wrote: > >>>>>>> > >>>>>>> Yeah, definitely. I must confess that a hidden passion > of mine is > >>>>>> > >>>>>> optimizing > >>>>>>> > >>>>>>> linear algebra (we all have our quirks). I was just > looking at Theano > >>>>>>> a > >>>>>>> minute ago actually - I think it would be cool to > easily dump Matrix > >>>>>>> expressions onto them. > >>>>>>> How should matrix expressions be represented in SymPy > though? The way > >>>>>>> I > >>>>>> > >>>>>> see > >>>>>>> > >>>>>>> it there are three options > >>>>>>> 1. Leave it as a SymPy Expr, forget shape, > transpose, rank, etc... > >>>>>>> for > >>>>>>> now. Maybe future SymPy elegance will make clever > things possible > >>>>>> > >>>>>> (such as > >>>>>>> > >>>>>>> issue 1941) > >>>>>>> 2. Enhance SymPy Expr's to play nice with Matrices > >>>>>>> 3. Subclass a family of MatrixExpr classes that > live outside the > >>>>>>> core > >>>>>>> Probably there are things I'm missing but this is how > I separate > >>>>>>> things. > >>>>>>> Because I'd like this done sooner rather than later > I'm obviously in > >>>>>> > >>>>>> favor > >>>>>>> > >>>>>>> of 2 or 3 with a preference for 3. I don't know enough > about SymPy > >>>>>> > >>>>>> however > >>>>>>> > >>>>>>> to tell whether this is the "right way" and I'd rather > not work on > >>>>>> > >>>>>> something > >>>>>>> > >>>>>>> unless it has a chance at getting in. > >>>>>>> I'll push again for three by saying that there is a > lot going on in > >>>>>> > >>>>>> Matrix > >>>>>>> > >>>>>>> Expressions other than just non-commutativity and > shape. Inverses, > >>>>>>> transposes, rank, symmetry, positive_definiteness, > conditioning, > >>>>>>> etc... > >>>>>> > >>>>>> all > >>>>>>> > >>>>>>> play a big role in computational decisions made on > matrices. > >>>>>>> Additionally > >>>>>>> matrix expressions are ubiquitous and important in the > scientific > >>>>>> > >>>>>> computing > >>>>>>> > >>>>>>> world. From my (strongly biased) perspective they > deserve special > >>>>>>> treatment. > >>>>>> > >>>>>> I think all this '.is_*' stuff should rather be > implemented using the > >>>>>> new assumption system (not sure about shape, maybe this > should really > >>>>>> go into the core). If we use noncommutative symbols, I > think we can > >>>>>> avoid messing around with Mul and friends. > >>>>>> A.T could be implemented as a unary function. > >>>>>> Vinzent > >>>>>> -- > >>>>>> You received this message because you are subscribed to > the Google > >>>>>> Groups > >>>>>> "sympy" group. > >>>>>> To post to this group, send email to > sympy@googlegroups.com. > >>>>>> To unsubscribe from this group, send email to > >>>>>> sympy+unsubscr...@googlegroups.com. > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/sympy?hl=en. > >>>> > >>>> -- > >>>> You received this message because you are subscribed to > the Google > >>>> Groups "sympy" group. > >>>> To post to this group, send email to > sympy@googlegroups.com. > >>>> To unsubscribe from this group, send email to > >>>> sympy+unsubscr...@googlegroups.com. > >>>> For more options, visit this group at > >>>> http://groups.google.com/group/sympy?hl=en. > >>>> > >>>> > >> > >> -- > >> You received this message because you are subscribed to the > Google Groups > >> "sympy" group. > >> To post to this group, send email to > sympy@googlegroups.com. > >> To unsubscribe from this group, send email to > >> sympy+unsubscr...@googlegroups.com. > >> For more options, visit this group at > >> http://groups.google.com/group/sympy?hl=en. > >> > > > > -- > > You received this message because you are subscribed to the > Google Groups > > "sympy" group. > > To post to this group, send email to sympy@googlegroups.com. > > To unsubscribe from this group, send email to > > sympy+unsubscr...@googlegroups.com. > > For more options, visit this group at > > http://groups.google.com/group/sympy?hl=en. > > > > -- > You received this message because you are subscribed to the > Google Groups "sympy" group. > To post to this group, send email to sympy@googlegroups.com. > To unsubscribe from this group, send email to sympy > +unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > > > > > -- > You received this message because you are subscribed to the Google > Groups "sympy" group. > To post to this group, send email to sympy@googlegroups.com. > To unsubscribe from this group, send email to sympy > +unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.