Я занимаюсь разработкой простых функций, которые генерируют константы для различных фильтров разного порядка, таких как Баттерворт. Например, результатом Баттерворта (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. Но я недостаточно хорошо разбираюсь в этих инструментах, чтобы знать лучше. Если ответ требует некоторого объяснения концептуальных различий, не стесняйтесь сообщить мне об этом. Просто к вашему сведению.]
Заранее спасибо.
factor
,cancel
,expand
и другие. - person Chris du Plessis   schedule 23.11.2020