2016-04-13 23 views
3

So würde ich Polynome wie in einer Variablen drucken (s) mit einem Parameter (a), sagenAnzeige Polynome in umgekehrter Reihenfolge in SageMath

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

Sage zeigt es immer mit dem Grad abnimmt, und ich möchte so etwas wie

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

zu exportieren, um LaTeX bekommen. Ich kann mir nicht vorstellen, wie ich das machen soll ... Danke im Voraus.

Antwort

4

Dies ist nicht einfach, da die Sortierreihenfolge in Pynac definiert ist, einer Verzweigung von Ginac, die Sage für seine grundlegende symbolische Manipulation verwendet. Allerdings, je nachdem, was Sie benötigen, ist es möglich, programmatisch:

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' 

Ich weiß nicht, ob diese Art der Sache ist mächtig genug, um für Ihre Bedürfnisse, though. Möglicherweise müssen Sie den "Ausdrucksbaum" ein wenig durchqueren, aber zumindest scheint Ihre Art von Beispiel zu funktionieren.

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' 

tun dies in einer kurzen Erklärung erfordert eine Reihe von Python Tricks wie diese, die das Lernen sehr wert sind, wenn Sie verwenden Sage gehen (oder Numpy oder Pandas, oder ...) ein angemessene Menge.

+0

Wirklich gute Info. Das funktioniert sehr gut, wie du sagst, aber es stellt sich heraus, dass es nicht so gut ist, es nach 'LaTeX' zu exportieren, da es Strings sind. – iipr

+0

Entschuldigung, ich habe nicht über den LaTeX nachgedacht, guter Punkt! Obwohl man das ziemlich leicht tun könnte, indem man map (latex) anstelle von map (str, wahrscheinlich.) Verwendet. – kcrisman

+1

Ja danke, das funktioniert besser für den Export, aber es fügt immer noch einige Zeilenumbrüche in der Form '\\' ein. Beide Lösungen sind sehr praktisch und hilfreich für das, was ich brauchte. " – iipr

3

Als Alternative zur Stringmanipulation kann die Serienexpansion verwendet werden.

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

kehrt

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

das, was Sie wollten für einige redundante Klammern angezeigt werden, speichern.

Dies funktioniert, weil (a) eine Potenzreihe vom niedrigsten zum höchsten Koeffizienten geordnet ist; (b) wenn die Ordnung des Restes größer als der Grad des Polynoms gemacht wird, wird sichergestellt, dass die Reihe nur das Polynom selbst ist.

+0

Dies scheint sehr gut zu funktionieren, um es in' LaTeX' zu exportieren, wobei kleinere Tweeks für die Klammern hinzugefügt werden. – iipr