如果我在最大值中有多项式x^2+y^2
,那么最大值将显示为y^2+x^2
。有没有办法指定变量x
将在变量y
之前显示?
答案 0 :(得分:5)
Maxima有一个关于排序变量的内置想法,这些变量非常强大,强加于所有表达式,以便将它们规范化以简化。在某些方面,这种排序与通常用于手动计算的传统排序不同,但人们可以习惯它。我的建议只是接受它 - 让Maxima改变主意是很难的。
也就是说,全局变量powerdisp
控制" +"的显示。表达式。默认情况下,powerdisp
为false
。当powerdisp
为true
时," +"的顺序为表达式是相反的。
(%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
是一种生硬的工具 - 它重新排序所有" +"表达式。您可以决定是否可以接受。
我建议您不要使用mainvar
或ordergreat
。这解决了仅针对特定变量的问题。
答案 1 :(得分:2)
我已经找到了一种方法来扭转符号排序" +"表达式,以便a
在z
之前。但是对于任何给定的符号,指数的排序与它们现在相同,即按降序排列。我已经将此代码发布为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