假设我们有两个函数
f(a,b,c)
和 g(a,b,d)
,我们可以在 Sympy 中将其表达为表达式。
我们如何通过 SymPy 找到函数 h(a,b), f'(x,c), g'(x,d)
使得 f'(h(a,b),c) = f(a,b,c)
和 g'(h(a,b),d)=g(a,b,d)
?
例如,我想使用 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
我不确定 SymPy 中是否有一种简单的方法可以做到这一点。我也不知道要在研究文献中查找的这个确切数学问题的名称。
原来有一个 SymPy 函数可以做到这一点,“公共子表达式”: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')
([(x0, a - b)], [c + x0, d*sin(2*x0)])