Suppose we have two functions f(a,b,c)
and g(a,b,d)
that we can express as expressions in Sympy.
How can we find the functions h(a,b), f'(x,c), g'(x,d)
such that f'(h(a,b),c) = f(a,b,c)
and g'(h(a,b),d)=g(a,b,d)
via SymPy?
For example, I'd like to do the following using Sympy:
from sympy import symbols, Eq
a,b,c,d = symbols('a b c d')
eq1 = a-b+c
eq2 = sin(2a-2b)*d
# Function I'd like to implement
common_partial(eq1, eq2) # Returns h(a, b) = (a-b), f'(x, c) = x+c, g'(x, d) = sin(2x)*d
I'm not sure if there is a straightforward way to do it in SymPy. I'm also not aware of the name of this exact mathematical problem to look up for in research literature.
Turns out there is a SymPy function that does this, "Common Sub-expressions": https://docs.sympy.org/latest/modules/simplify/simplify.html#sympy.simplify.cse_main.cse
from sympy import symbols, sin, cse
a,b,c,d = symbols('a b c d')
eq1 = a-b+c
eq2 = sin(2*a-2*b)*d
cse([eq1, eq2], optimizations='basic', ignore=[c, d])
([(x0, a - b)], [c + x0, d*sin(2*x0)])