Упрощение экземпляров Add-only с константами, но включая радикалы, с использованием Sage и sympy

Я занимаюсь разработкой простых функций, которые генерируют константы для различных фильтров разного порядка, таких как Баттерворт. Например, результатом Баттерворта (2) будет:

s^2 + sqrt(2)*s + 1

(Будь прокляты администраторы за то, что они не решили поддерживать MathJax!)

Я пытаюсь упростить сгенерированные коэффициенты. Пример, с которым у меня возникли проблемы, немного сложнее, чем пример, который я представлю здесь. Но пример здесь поможет понять суть.

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

sqrt(2) * sqrt( sqrt(2) + 2 ) + 2 * sqrt( sqrt(2) + 2) )

Затем с помощью:

simplify( sqrt(2) * sqrt( sqrt(2) + 2 ) + 2 * sqrt( sqrt(2) + 2) ) )

Производит:

(sqrt(2) + 2)**(3/2)

Что идеально подходит для меня.

Но когда я пытаюсь что-то вроде:

simplify( 1 + sqrt(2) * sqrt( sqrt(2) + 2 ) + 2 * sqrt( sqrt(2) + 2) ) )

Затем я получаю:

1 + sqrt(2) * sqrt( sqrt(2) + 2 ) + 2 * sqrt( sqrt(2) + 2) )

Когда я предпочел бы получить:

1 + (sqrt(2) + 2)**(3/2)

Помимо путаницы, используя упрощение () для всех различных комбинаций 2 или более терминов в экземпляре надстройки, чтобы увидеть, что я получаю, а затем расставить приоритеты по лучшему из них, используя некоторый алгоритм (пока еще не очень хорошо продуманный), я развиваться со временем, мой вопрос заключается в следующем:

Существует ли существующий вызов функции, который распознает, что:

1+sqrt(2)*sqrt(sqrt(2)+2)+2*sqrt(sqrt(2)+2)) = 1+(sqrt(2)+2)**(3/2)

У меня есть другие интересы с упрощением констант, которые включают радикалы, а также рациональные значения. Но зайти так далеко было бы большим подспорьем.

[Поскольку здесь я работаю только с константами (я использую Poly() для доступа к коэффициентам), это может быть скорее проблема Sage, чем sympy. Но я недостаточно хорошо разбираюсь в этих инструментах, чтобы знать лучше. Если ответ требует некоторого объяснения концептуальных различий, не стесняйтесь сообщить мне об этом. Просто к вашему сведению.]

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


person jonk    schedule 23.11.2020    source источник
comment
Я не думаю, что этот комментарий достоин ответа, но вот несколько моих мыслей. Этот вопрос очень похож, и его автор имеет очень случайное имя пользователя. Вы можете копировать и вставлять изображения LaTeX в вопросы и ответы SO. Если вы новичок, обратите внимание на некоторые другие полезные функции: factor, cancel, expand и другие.   -  person Chris du Plessis    schedule 23.11.2020
comment
@Maelstrom Я уже знаком с расширением и фактором. Они бесполезны. Я еще не смотрел на отмену или другие. Так что пойду попробую, быстро. (Сейчас я на совещании, но еще несколько часов.) Я отвечу, когда узнаю о них больше. Но если вы протестируете эти оставшиеся и обнаружите, что они решают указанную выше проблему, то, пожалуйста, запишите это как ответ и покажите мне результаты. Если он ответит на мой вопрос, он будет выбран. Спасибо.   -  person jonk    schedule 23.11.2020
comment
@Maelstrom Забавная вещь. Я действительно думал, что может быть определение other(). :) Ага. Я был таким тупым. Но нет, насколько я могу судить. И отмена() также бесполезна. Так что я могу определенно сказать, что я все еще в неведении. Однако теперь я знаю об отмене(). Так что это плюс. Спасибо за попытку.   -  person jonk    schedule 24.11.2020
comment
Как я уже сказал, stackoverflow.com/questions/ 52046815/ может быть лучшим вариантом, который у вас есть.   -  person Chris du Plessis    schedule 24.11.2020
comment
@Maelstrom Я тщательно прочитаю это и посмотрю, смогу ли я заставить его работать на меня. Я боюсь, что это не удастся, потому что я только что быстро прочитал его, но мне нужно потратить на это серьезное время. Так что я буду. Я очень ценю любые подобные предложения, так что большое спасибо, даже если это не сработает. Я подозреваю, что мне придется сесть и разработать свой собственный алгоритм, который в конце концов достигнет моих конкретных целей. Я глубоко признателен вам за время, которое вы мне уже предложили.   -  person jonk    schedule 24.11.2020