I already posted this idea, but now I'm stuck because I don't know exactly how to code the algorithm.
The idea is to implement the exponential map of DifferentialOperator, which is widely used in physics. e.g.:
On function of one variable, examples:
exp( epsilon * DiffenetialOperator( diff( g(x), x ), g(x) ) ) * f( x ) ===> f( x + epsilon )
exp( epsilon * DiffenetialOperator( x*diff( g(x), x ), g(x) ) ) * f( x ) ===> f( x*exp(epsilon) )
exp( epsilon * DiffenetialOperator( x**2 * diff( g(x), x ), g(x) ) ) * f( x ) ===> f( x / (1-epsilon**x) )
On functions of more variables, examples:
exp( epsilon * DifferentialOperator( x*diff(g(x,y), y) + y*diff(g(x,y), x), g(x,y) ) ) * f(x, y) ===> f(cosh(epsilon)*x + sinh(epsilon)*y, sinh(epsilon)*x + cosh(epsilon)*y)
---> similar example for rotations (SO(2) group).
Well, I have identified a few cases where an algorithm would be straightforward, such as the first three examples, and multivariable cases such as exp( epsilon* ( sum a_i x_i D_{x_j} ) ), which corresponds to a square matrix exponentiation (x_i and D_{x_j} identify matrix element, whose value is a_i), and which would be easy to code.
But, what about exp( epsilon * x**3 * diff_operator(_x) ) f( x ) ? Or more generally, exp(epsilon * x**n * diff_operator(_x) )?
What about mixed exp( epsilon * (x**2 diff(_y) + x*y**3 diff(_x) ) ) ?
What about higher degree diffs, such as exp( epsilon * diff(_x, 2) ) ?
Do you have any ideas how to solve this problem?
--
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+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to sympy-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
Visit this group at
http://groups.google.com/group/sympy?hl=en-US.
For more options, visit
https://groups.google.com/groups/opt_out.