代码之家  ›  专栏  ›  技术社区  ›  zyy

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

  •  0
  • zyy  · 技术社区  · 7 年前

    假设我定义了一个函数

    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 回复  |  直到 7 年前
        1
  •  3
  •   Ethan McCue    7 年前

    这不能用任意函数来实现,但是 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