Когда я делаю символическую интеграцию с помощью Sympy, я хотел бы расширить выражение вдоль определенного символа, чтобы позже я мог собирать и интегрировать w.r.t. этот символ. Есть ли способ сделать такое «расширение» без изменения форм других (нерелевантных) символов?Развернуть по определенному символу в sympy
Например, рассмотрим этот Python код и запустить результаты:
>>> from sympy import *
>>> var('x,a,b,c')
(x, a, b, c)
>>> f = (a + 1) * a + x * (b + exp(-c*x))
>>> collect(f, (exp(-c*x), x))
a*(a + 1) + x*(b + exp(-c*x))
>>> collect(expand(f), (exp(-c*x), x))
a**2 + a + b*x + x*exp(-c*x)
Выходы все ожидали. Без «расширения» сначала «собрать» просто возвращает мне оригинальную форму. Если мы сначала используем «развернуть», я получаю то, что хочу. Представьте себе, если у нас есть сумма многих выше «f», а символы b и c - сложные выражения, интеграция займет много времени, если мы воспользуемся исходной формой f. Действительно, у меня есть интеграция, требующая секунд, чтобы завершить, если сначала применяется «expand», но не может быть закончена после почти одного часа прогона.
Проблема «расширения» в том, что это может быть дорого «полностью расширить» выражение. В приведенном выше примере мы видим, что * (a + 1) также был расширен (и занял вычислительное время).
У меня есть выражения (которые будут интегрированы позже), каждая из которых расширена примерно до 40 тысяч терминов. Результат расширения, как функция x, аналогичен форме в приведенном выше примере - я знал, что он должен быть такой формы. Самое время (если оно когда-либо закончилось) было потрачено на расширение этих условий, не имеющих ничего общего с «х». Могу ли я избежать этих ненужных расширений?
спасибо. Я попробовал несколько простых примеров, и ваш код работает. Я положу его в свою программу, чтобы посмотреть, как это происходит в эти выходные. Я сообщу вам. – sunheng