2016-04-13 12 views
3

Так что я хотел бы напечатать полиномы от одной переменной (s) с одним параметром (a), скажемПоказать полиномы в обратном порядке в SageMath

a·s^3 − s^2 - a^2·s − a + 1.

Мудрец всегда отображает его с уменьшением степени, и я хотел бы получить что-то вроде

1 - a - a^2·s - s^2 + a·s^3

экспортировать его в LaTeX. Я не могу понять, как это сделать ... Спасибо заранее.

ответ

4

Это непросто, потому что порядок сортировки определяется в 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 или панда, или ...) а изрядное количество.

+0

Действительно хорошая информация. Это работает очень хорошо, как вы говорите, но оказывается, что экспорт его в «LaTeX» работает не так хорошо, будучи строками. – iipr

+0

Извините, я не думал о LaTeX, хороший момент! Хотя можно довольно легко сделать это, используя 'map (latex' вместо' map (str', возможно. – kcrisman

+1

Да, спасибо, что работает лучше для экспорта, но все же он вставляет некоторые символы новой строки в виде '\\'. Оба решения действительно удобны и полезны для того, что мне нужно. – iipr

3

В качестве альтернативы манипуляциям с строками можно использовать расширение серии.

F = a*s^3 - s^2 - a^2*s - a + 1 
F.series(s, F.degree(s)+1) 

возвращает

(-a + 1) + (-a^2)*s + (-1)*s^2 + (a)*s^3 

который, кажется, что вы хотели, за исключением некоторых избыточных скобок.

Это работает, потому что (a) ряд степеней упорядочен от наименьших до самых высоких коэффициентов; (б) сделать порядок остатка большим, чем степень полинома, гарантирует, что ряд является всего лишь самим полиномом.

+0

Это, похоже, работает очень хорошо, чтобы экспортировать его в «LaTeX», добавляя небольшие скобки для круглых скобок. – iipr