Упрощение выражений Sympy как неявных функций переменных

Мне интересно, есть ли способ упростить выражения Sympy, переписав выражение в терминах уже определенной переменной, заставив Python собирать термины, соответствующие определению этой переменной.

Заранее спасибо.


person Layman Tucker    schedule 18.05.2018    source источник
comment
Вы пробовали собирать?   -  person Rodrigo de Azevedo    schedule 19.05.2018
comment
Да, я, к сожалению, пробовал собирать, но безуспешно. Дело в том, что у меня есть огромное математическое выражение, и я ищу способ для Python представить его части как функцию переменных выражений (скажем, x), сканируя все возможные комбинации указанных переменных и вкладывая их в эти функции (скажем, p (x)).   -  person Layman Tucker    schedule 19.05.2018


Ответы (1)


Ничего подобного не существует, как вы это описываете, но делать то, что вы хотите, несложно.

Во-первых, есть функция cse() , который автоматически извлекает общие подвыражения как переменные. Однако он не будет использовать предварительно определенные переменные, если вы этого хотите. Но если ваша цель - просто упростить вычисление выражения, и вам все равно, что такое промежуточные выражения, cse - ваш лучший выбор.

Один из приемов, который вы можете использовать, - выделить одну часть ваших подвыражений и заменить их. Например, предположим, что у вас есть выражение expr, содержащее x + y, и вы хотите заменить x + y на z. Простое выполнение expr.subs(x + y, z) часто работает. Но в некоторых случаях это не так, потому что subs заменяет x + y только в том случае, если он находит его точно в выражении.

Вместо этого вы можете использовать трюк: «решить» (вы можете сделать это автоматически с помощью solve, если хотите) замены z = x + y для одной переменной, например x = y - z, и заменить это (expr.subs(x, y - z)). Поскольку нет двусмысленности в том, где появляется x, как было для x + y, это заменит его везде. Затем вам часто нужно expand выражение, чтобы добиться сокращения.

person asmeurer    schedule 22.05.2018
comment
Большое спасибо, попробую! - person Layman Tucker; 31.05.2018