On Jan 27, 2013, at 11:21 PM, "Alexey U. Gudchenko" <pr...@goodok.ru> wrote:

>
> On 28.01.2013 01:08, Aaron Meurer wrote:
>> On Jan 27, 2013, at 6:34 AM, "Alexey U. Gudchenko" <pr...@goodok.ru> wrote:
>>
>>>
>>> Additionally to Stefan's answer about sympy core , I introduce the
>>> example how it may be implemented concretely.
>>>
>>> There is the tested code in the atachment of it.
>>> (I can create PR, but I don't know where will it be better to put in the
>>> sympy modules)
>>>
>>> And there is the '__call__' magic-method used instead of the implicit
>>> multiplication as aplly-like method.
>>>
>>>>>> Dx = DiffOperator(x)
>>>>>> myD = (a*Dx + Dx**3)    # construct diff operator
>>>>>> myD(x**4)            # apply this operator.
>>> 4*a*x**3 + 24*x
>>>
>>>
>>> For matrices it is some more complicated
>>>
>>>>>> I = Matrix([[0, -1], [1, 0]])
>>>>>> myD = I*Dx      # construct diff
>>>>>> myD(x**2)    # apply
>>>
>>> Derivative([x**2,    0]
>>>          [   0, x**2], x)
>>>
>>>
>>> Here  I don't know how Derivative can be automatically applied for the
>>> Matrix expression.
>>
>> Well just as application of Dx isn't really multiplication, neither is
>> application of the matrix operator. So a subclass of Matrix will be
>> needed here.
>>
>> Aaron Meurer
>>
>
> Yes, for the matrix differential operators with matrices which are
> depended of the  variables of differentiation we must think.
>
> But for the "constant" matrix (which is independent of the variable x) I
> don't quite understand what kind of subclass of Matrix is needed: which
> is related to differential operator or differential method of matrix itself.
>
> In order to avoid duplicating code, I think, we must use that for the
> matrix M which is independent of the variable x the following is:
>
> M Dx = Dx M
>
> and at the same time for the applying this operator we only care that
> differential operator would always be to the left of the expression A
> (x) to which it is applied.
>
> So for the (constant) matrix differential  operator myD = (M Dx)
>
> (M Dx) A(x) = (Dx M) A(x) = Dx (M A(x))
>
> Is it right?

But applying D first is probably more efficient.

Aaron Meurer

>
> This is done automatically in presented diff_operator.py (only for the
> matrices M which are  independent of the variable x)
>
> Therefore for the (M Dx) A(x) we can compute M A(x) firstly and then
> only a problem in this case, that I can't compute derivative of the
> matrix expression
>
> diff( M*A(x), x)
>
> This was the question.
>
> In the case when M(x) is depended of x, we must of course keep it always
> on the left in th expression
>
> M(x) Dx != Dx M(x)
>
> (this is not realized in attached code above)
>
> So a subclass of Matrix will be needed only in this case.
> Or rather, internal support in DiffOperator expression must be
> implemented for this case.
>
>
> Alexey Gudchenko
>
>>>
>>> --
>>> Alexey Gudchenko
>>>
>>> On 26.01.2013 02:49, ruoyu zhang wrote:
>>>>>>> p = DifferentialOperator(t)
>>>>>>> a * p * f(t)
>>>> Derivative(f(t), t)*a
>>>>
>>>> p is a DifferentialOperator, when it multiply with some expression  at
>>>> right side, it calculates the derivative of the expression.
>>>
>>> --
>>> 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 sympy+unsubscr...@googlegroups.com.
>>> To post to this group, send email to sympy@googlegroups.com.
>>> Visit this group at http://groups.google.com/group/sympy?hl=en.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>> <diff_operator.py>
>
> --
> 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 sympy+unsubscr...@googlegroups.com.
> To post to this group, send email to sympy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
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.
Visit this group at http://groups.google.com/group/sympy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to