2017-10-16 13 views
3

maximaで多項式x^2+y^2を指定すると、最大値はy^2+x^2のように表示されます。変数xが変数yの前に表示されるように指定する方法はありますか?maxima x^2 + y^2の変数の順序はy^2 + x^2になります。

+0

'ordergreat'と' mainvar'仕事をする:ここでは比較のために

は、前の発現のためのデフォルトの順序です。私は同じと信じているこの質問https://stackoverflow.com/q/36456544/349708を参照してください。 – Eelvex

+0

@エーベックスそれを試していただきありがとうございますが、今度は 'x^2 + x * y + y^2'を試してみると' x^2 + y * x + y^2'となります。 – Kasper

答えて

5

Maximaには、すべての式にかなり強力で順序付けられた変数の順序付けについての組み込みのアイデアがあります。いくつかの点で、この順序付けは、手作業による計算に通常使用される従来の順序付けと同じではありませんが、それに慣れることができます。私はマキシマに心を変えさせるのはかなり難しいです。

つまり、グローバル変数powerdispは "+"式の表示を管理します。 powerdispはデフォルトでfalseです。 powerdisptrueの場合、「+」式の順序が逆になります。それは、すべての "+" の表現を並べ替え - powerdispは鈍器であることを

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

注意。それが受け入れられるかどうかを決めることができます。

mainvarまたはordergreatを使用することはお勧めできません。これにより、特定の変数に対してのみ問題が解決されます。

+0

texの出力で変数の順序を異なるように(アルファベット順に)することだけに興味があれば、より良い解決策ですか?マキシマを使って仕事をしているときには、私はそれほど気にしませんが、私は学生にそれを表示すると、混乱しています。私はmaximaを使ってエクササイズのラテックスソリューションを自動生成します。 – Kasper

+0

はい、TeX出力のみを変更することは可能です。最も明確な方法は、Lispプログラミングを少し必要とします。 'powerdisp:true'は望みの効果を持っていますか?または、依然としていくつかの注文が必要ですか? –

+0

Powerdispはかなり良いと思われます。私がこれまでに指摘してきた唯一の問題は指数です。 'powerdisp:true'を設定すると' x^3 + x^2 + 2 * x * y + y^2'は 'x^2 + x^3 + 2 * x * y + y^2'になります。 – Kasper

2

"+"式の記号の順序を逆にする方法を考え出したので、azより前になります。しかし、任意の所与の記号に対して、指数は、今の順序で、すなわち、降順で順序付けられる。私はこのためのコードをGithubプロジェクトとして投稿しました:https://github.com/robert-dodier/maxima-mplus-symbols-reversed

Lispコードのファイルが1つあります。 Gitリポジトリをクローンするか、または上記のプロジェクトページから1つのファイルをダウンロードするだけです。試してみて、あなたの考えを教えてください。このコードは、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用語間で混合用語を置くのが通例です。しかし、y^2に対する2*x*yの配置は、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 
+0

ありがとう!これは確かにすでにpowerdispの大きな改善と思われます。私はコードで試してみて、学生が何を考えるかを見ていきます。実際には、2 * x * yを間に置くことが理想的です。 – Kasper

関連する問題