找到一对函数的公共部分应用

问题描述 投票:0回答:1

假设我们有两个函数

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 中是否有一种简单的方法可以做到这一点。我也不知道要在研究文献中查找的这个确切数学问题的名称。

python sympy symbolic-math
1个回答
0
投票

原来有一个 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)])
© www.soinside.com 2019 - 2024. All rights reserved.