我如何让Python返回函数的抽象表达式并在其中获取参数?

时间:2019-03-18 23:33:46

标签: python function

假设我定义了一个函数

def pdf(x_1, x_2):
    return ((x_1 ** 2.0) * ((1.0 - x_2) ** 3.0)) + (((1.0 - x_1) ** 3.0) * (x_1 ** 2.0) * (1.0 + x_2) ** 3.0)

我是否有办法返回功能pdf的完全扩展的抽象表达式,如下所示?

2.0 * x_1 ** 2.0 - 3.0 * x_1 ** 3.0 + 3.0 * x_1 ** 4.0 - x_1 ** 5.0 - 9.0 * x_1 ** 3.0 * x_2 + 9.0 * x_1 ** 4 * x_2 - 3 * x_1 ** 5.0 * x_2 + 6.0 * x_1 ** 2.0 * x_2 ** 2.0 - 9.0 * x_1 ** 3.0 * x_2 ** 2.0 + 9.0 * x_1 ** 4.0 * x_2 ** 2.0 - 3.0 * x_1 ** 5.0 * x_2 ** 2.0 - 3.0 * x_1 ** 3.0 * x_2 ** 3.0 + 3.0 * x_1 ** 4.0 * x_2 ** 3.0 - x_1 ** 5.0 * x_2 ** 3.0

此外,是否还可以返回每一项的系数和幂?上面描述的所有内容在Python中是否还可行?还是我应该尝试使用Mathematica?

任何建议都将受到欢迎!预先感谢!

1 个答案:

答案 0 :(得分:3)

这不能用任何任意函数来完成,但是SymPy库应该让您以相当简单的方式进行代数表达式。要使用上面的示例:

import sympy
x_1, x_2 = sympy.symbols("x_1 x_2")
pdf = ((x_1 ** 2.0) * ((1.0 - x_2) ** 3.0)) + (((1.0 - x_1) ** 3.0) * (x_1 ** 2.0) * (1.0 + x_2) ** 3.0)
expanded = sympy.expand(pdf)
print(expanded) # x_1**2.0*(-x_1 + 1.0)**3.0*(x_2 + 1.0)**3.0 + x_1**2.0*(-x_2 + 1.0)**3.0
example_solution = pdf.subs(x_1, 3).subs(x_2, 5) # -16128.0000000000