Извлечь константную часть выражения SymPy - PullRequest
0 голосов
/ 14 мая 2018

Предположим, у меня есть выражение SymPy, например

expr = sqrt(2)*x*y/sin(2)/L

Как мне извлечь

sqrt(2)/sin(2)

, если я заранее не знаю, какие свободные символы присутствуют в выражении?Другими словами, я бы хотел, чтобы SymPy возвращал часть монома, который не содержит свободных символов.

1 Ответ

0 голосов
/ 14 мая 2018
expr = sqrt(2)*x*y/sin(2)/L
const = expr.func(*[term for term in expr.args if not term.free_symbols])

делает const равным sqrt(2)/sin(2).Хотя вы спрашивали о продукте, этот подход также работает для сумм (expr.func будет Mul для продуктов и Add для сумм).

В комментарии barrymoo указал метод is_constant.Существует разница между not term.free_symbols и term.is_constant().Первый проверяет только наличие свободных символов, что быстро;последний идет намного дальше, пытаясь вычислить, упростить и символьно дифференцировать, пытаясь доказать или опровергнуть, что выражение является постоянным ( ссылка ).Например, sin(x)**2 + cos(x)**2 будет признан константой, хотя у него есть свободный символ.

...