Как заставить Python возвращать абстрактное выражение функции и получать параметры в ней? - PullRequest
0 голосов
/ 19 марта 2019

Предположим, я определил функцию

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 Ответ

3 голосов
/ 19 марта 2019

Этого нельзя сделать ни с какой произвольной функцией, но библиотека 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...