最大值x ^ 2 + y ^ 2中的变量顺序变为y ^ 2 + x ^ 2

时间:2017-10-16 10:19:28

标签: maxima

如果我在最大值中有多项式x^2+y^2,那么最大值将显示为y^2+x^2。有没有办法指定变量x将在变量y之前显示?

2 个答案:

答案 0 :(得分:5)

Maxima有一个关于排序变量的内置想法,这些变量非常强大,强加于所有表达式,以便将它们规范化以简化。在某些方面,这种排序与通常用于手动计算的传统排序不同,但人们可以习惯它。我的建议只是接受它 - 让Maxima改变主意是很难的。

也就是说,全局变量powerdisp控制" +"的显示。表达式。默认情况下,powerdispfalse。当powerdisptrue时," +"的顺序为表达式是相反的。

(%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

请注意powerdisp是一种生硬的工具 - 它重新排序所有" +"表达式。您可以决定是否可以接受。

我建议您不要使用mainvarordergreat。这解决了仅针对特定变量的问题。

答案 1 :(得分:2)

我已经找到了一种方法来扭转符号排序" +"表达式,以便az之前。但是对于任何给定的符号,指数的排序与它们现在相同,即按降序排列。我已经将此代码发布为Github项目:https://github.com/robert-dodier/maxima-mplus-symbols-reversed

有一个Lisp代码文件。您可以克隆Git仓库或只从上面提到的项目页面下载一个文件。请试试看,让我知道你的想法。此代码更改了2-d和1-d控制台显示以及TeX输出。我只会显示下面的2-d输出;其他输出具有相同的术语排序。

示例:

(%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

这有点令人失望 - 习惯上在x条款和y条款之间加入混合条款。但是,如果没有更复杂的排序启发式,似乎无法实现这一点,因为2*x*y相对于y^2的位置似乎取决于x^2的存在与否 - - 我们不能通过一次比较两个来对这些术语进行排序(如本实施中所述)。

为了比较,这里是前面的表达式的默认顺序:

(%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