Это непросто, потому что порядок сортировки определяется в Pynac, вилке Ginac, которую Sage использует для своих основных символических манипуляций. Однако, в зависимости от того, что вам нужно, можно программно:
sage: F = 1 + x + x^2
sage: "+".join(map(str,sorted([f for f in F.operands()],key=lambda exp:exp.degree(x))))
'1+x+x^2'
Я не знаю, является ли такая вещь достаточно мощный для ваших потребностей, хотя. Возможно, вам придется пройти «дерево выражений» совсем немного, но, по крайней мере, ваш пример, похоже, работает.
sage: F = a + a^2*x + x^2 - a*x^2
sage: "+".join(map(str,sorted([f for f in F.operands()],key=lambda exp:exp.degree(x))))
'a+a^2*x+-a*x^2+x^2'
Делая это в коротком заявлении требует ряда трюков Python, как это, которые очень стоят обучения, если вы собираетесь использовать шалфей (или Numpy или панда, или ...) а изрядное количество.
Действительно хорошая информация. Это работает очень хорошо, как вы говорите, но оказывается, что экспорт его в «LaTeX» работает не так хорошо, будучи строками. – iipr
Извините, я не думал о LaTeX, хороший момент! Хотя можно довольно легко сделать это, используя 'map (latex' вместо' map (str', возможно. – kcrisman
Да, спасибо, что работает лучше для экспорта, но все же он вставляет некоторые символы новой строки в виде '\\'. Оба решения действительно удобны и полезны для того, что мне нужно. – iipr