2017-10-16 4 views
3

Si j'ai le polynôme x^2+y^2 en maxima, alors maxima l'affichera comme y^2+x^2. Y at-il un moyen de spécifier que la variable x sera affichée avant la variable y à la place?L'ordre des variables en maximum x^2 + y^2 devient y^2 + x^2

+0

'' ordergreat' et mainvar' faire le travail. Voir cette question https://stackoverflow.com/q/36456544/349708, que je crois est la même chose. – Eelvex

+0

@Eelvex Merci, en essayant cela, mais maintenant si j'essaie 'x^2 + x * y + y^2', j'obtiens' x^2 + y * x + y^2' – Kasper

Répondre

5

Maxima a une idée intégrée de la commande des variables qui est assez forte et imposée à toutes les expressions dans le but de les régulariser pour simplifier. À certains égards, cette commande n'est pas la même que la commande conventionnelle généralement utilisée pour les calculs manuels, mais on peut s'y habituer. Mon conseil pour l'accepter comme il est - il est assez difficile d'amener Maxima à changer d'avis à ce sujet. Cela dit, la variable globale powerdisp régit l'affichage des expressions "+". powerdisp est false par défaut. Lorsque powerdisp est true, l'ordre des expressions "+" est inversé.

(%i1) x^2 + y^2; 
            2 2 
(%o1)        y + x 
(%i2) x^2 + y^2 + 2*x*y; 
           2   2 
(%o2)       y + 2 x y + x 
(%i3) powerdisp; 
(%o3)        false 
(%i4) powerdisp:true; 
(%o4)        true 
(%i5) %o2;   
           2   2 
(%o5)       x + 2 x y + y 
(%i6) %o1; 
            2 2 
(%o6)        x + y 

Notez que powerdisp est un instrument contondant - il réorganise toutes les expressions "+". Vous pouvez décider si c'est acceptable. Je ne recommande pas d'utiliser mainvar ou ordergreat. Cela résout le problème uniquement pour des variables spécifiques.

+0

Serait-il possible d'avoir un meilleure solution si vous voulez seulement que les variables soient classées différemment (par ordre alphabétique) dans la sortie tex? Je ne me soucie pas tellement de la commande lorsque je travaille avec Maxima, mais quand je l'affiche à mes étudiants, ils trouvent cela déroutant. J'utilise maxima pour autogénérer les solutions de latex élaborées pour les exercices. – Kasper

+0

Oui, il est possible de changer uniquement la sortie TeX. La manière la plus claire de le faire nécessite un peu de programmation Lisp. Est-ce que 'powerdisp: true' a l'effet désiré?Ou y a-t-il encore d'autres commandes désirées? –

+0

Powerdisp semble être assez bon, les seuls problèmes que j'ai jusqu'à maintenant est avec les exposants. Si je mets 'powerdisp: true' alors,' x^3 + x^2 + 2 * x * y + y^2' devient 'x^2 + x^3 + 2 * x * y + y^2' – Kasper

2

J'ai trouvé un moyen d'inverser l'ordre des symboles dans les expressions "+", de telle sorte que a passe avant . Mais pour un symbole donné, les exposants sont classés de la même façon qu'ils le sont maintenant, c'est-à-dire dans l'ordre décroissant. J'ai posté du code pour ceci comme un projet Github: https://github.com/robert-dodier/maxima-mplus-symbols-reversed

Il y a un fichier de code Lisp. Vous pouvez cloner le repo Git ou simplement télécharger le fichier à partir de la page du projet mentionnée ci-dessus. S'il vous plaît essayer et laissez-moi savoir ce que vous pensez. Ce code modifie les affichages de la console 2-D et 1-D, ainsi que la sortie TeX. Je vais montrer seulement la sortie 2-d ci-dessous; les autres sorties ont le même ordre de termes.

Exemples:

(%i1) load("form-mplus-symbols-reversed.lisp") $ 
(%i2) reverse_symbols_order:true $ 
(%i3) x^2+y^2; 
            2 2 
(%o3)        x + y 
(%i4) x^3+x^2+2*x*y+y^2; 
           3 2 2 
(%o4)      x + x + y + 2 x y 

C'est un peu décevant - il est d'usage de mettre les termes mixtes entre x termes et y termes. Mais il ne semble pas possible de réaliser cela sans une heuristique de tri plus compliquée, car le placement de 2*x*y par rapport à y^2 semble dépendre de la présence ou de l'absence de x^2 - nous ne pouvons pas ordonner les termes en les comparant deux à un temps (comme dans la présente mise en œuvre).

A titre de comparaison est ici la commande par défaut pour la précédente expression:

(%i5) reset (reverse_symbols_order) $ 
(%i2) x^3+x^2+2*x*y+y^2; 
           2   3 2 
(%o2)      y + 2 x y + x + x 
+0

Merci! Cela semble en effet déjà une grande amélioration sur powerdisp. Je vais essayer dans notre code, et voir ce que les étudiants pensent. Ce serait en effet idéal si 2 * x * y pouvait être placé entre les deux. – Kasper