Next: , Previous: Introduction to operators, Up: Operators   [Contents][Index]

7.2 Arithmetic operators

演算子: +
演算子: -
演算子: *
演算子: /
演算子: ^

シンボル + * / ^はそれぞれ、 足し算、かけ算、割り算、べき乗を表します。 これらの演算子の名前は "+" "*" "/" "^"です。 これらは関数や演算子の名前が求められるところで使います。

シンボル +-はそれぞれ、プラスとマイナスの単項演算子を示し、 それらの名前はそれぞれ "+""-"です。

引き算 a - bはMaximaの中では足し算 a + (- b)として表されます。 a + (- b)のような式は引き算として表示されます。 Maximaは "-"を足し算の単項逆元演算子の名前としてのみ認識して、 二項引き算演算子としては認識しません。

Maximaの中では割り算a / bをかけ算a * b^(- 1)として表現します。 a * b^(- 1)のような式は割り算として表示されます。 Maximaは"/"を割り算演算子の名前として認識します。

足し算とかけ算はn項可換演算子です。 割り算とべき乗は二項の非可換演算子です。

Maximaは正準表現を構成するために可換演算子のオペランド(訳注:引数)を並べ替えます。 順序は内部的には orderlesspで決定します。 表示のためには、足し算の順序は ordergreatpで決定し、 かけ算は内部的な順序と同じです。

算術計算は、数リテラル(整数、有理数、通常の浮動小数点、多倍長浮動小数点)上で実行されます。 べき乗を除いて、数に対するすべての算術演算子は数に整理されます。 べき乗は、オペランドが通常の浮動小数点か多倍長浮動小数点の時、もしくは結果が厳密に整数もしくは有理数の時、数に整理されます; そうでなければ、べき乗は sqrtか他のべき乗に整理されるか、そのまま残されます。

浮動小数点の伝搬が算術計算に適用されます: もしどれか1つでもオペランドが多倍長浮動小数点なら、結果は多倍長浮動小数点です; そうでなければ、もしどれか1つでもオペランドが通常の浮動小数点なら、結果は通常の浮動小数点です; そうでなければオペランドは有理数か整数であり、結果は有理数か整数です。

算術計算は式整理であって、評価ではありません。 従って、クォートされた(しかし整理される)式の中で算術計算は実行されます。

算術演算は、 グローバルフラグ listarithtrueの時 リストに対して要素毎に適用され、 行列に対しては常に要素毎に適用されます。 オペランドの1つがリストか行列であり、もう1つのオペランドが別のタイプの時、 他のオペランドはリストか行列の要素のそれぞれに組み合わされます。

例:

足し算とかけ算は、n項可換演算子です。 Maximaは、正準表現を構成するために、可換演算子のオペランドを並べ替えます。 それらの名前はそれぞれ "+""*"です。

(%i1) c + g + d + a + b + e + f;
(%o1)               g + f + e + d + c + b + a
(%i2) [op (%), args (%)];
(%o2)              [+, [g, f, e, d, c, b, a]]
(%i3) c * g * d * a * b * e * f;
(%o3)                     a b c d e f g
(%i4) [op (%), args (%)];
(%o4)              [*, [a, b, c, d, e, f, g]]
(%i5) apply ("+", [a, 8, x, 2, 9, x, x, a]);
(%o5)                    3 x + 2 a + 19
(%i6) apply ("*", [a, 8, x, 2, 9, x, x, a]);
                                 2  3
(%o6)                       144 a  x

割り算とべき乗は、二項の非可換演算子です。 それらの名前はそれぞれ "/""^"です。

(%i1) [a / b, a ^ b];
                              a   b
(%o1)                        [-, a ]
                              b
(%i2) [map (op, %), map (args, %)];
(%o2)              [[/, ^], [[a, b], [a, b]]]
(%i3) [apply ("/", [a, b]), apply ("^", [a, b])];
                              a   b
(%o3)                        [-, a ]
                              b

引き算と割り算は内部的にはそれぞれ、足し算とかけ算を使って表現されます。

(%i1) [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
(%o1)                      [+, a, - b]
(%i2) [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
                                   1
(%o2)                       [*, a, -]
                                   b

計算は数リテラルに対して実行されます。 浮動小数点伝搬が適用されます。

(%i1) 17 + b - (1/2)*29 + 11^(2/4);
                                       5
(%o1)                   b + sqrt(11) + -
                                       2
(%i2) [17 + 29, 17 + 29.0, 17 + 29b0];
(%o2)                   [46, 46.0, 4.6b1]

算術計算は式整理であって、評価ではありません。

(%i1) simp : false;
(%o1)                         false
(%i2) '(17 + 29*11/7 - 5^3);
                              29 11    3
(%o2)                    17 + ----- - 5
                                7
(%i3) simp : true;
(%o3)                         true
(%i4) '(17 + 29*11/7 - 5^3);
                                437
(%o4)                         - ---
                                 7

算術計算は(listarithに依存して)リストや行列に対して要素毎に実行されます。

(%i1) matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
                        [ a - 1  x - 2 ]
(%o1)                   [              ]
                        [ h - 3  u - 4 ]
(%i2) 5 * matrix ([a, x], [h, u]);

                          [ 5 a  5 x ]
(%o2)                     [          ]
                          [ 5 h  5 u ]
(%i3) listarith : false;
(%o3)                         false
(%i4) [a, c, m, t] / [1, 7, 2, 9];
                          [a, c, m, t]
(%o4)                     ------------
                          [1, 7, 2, 9]
(%i5) [a, c, m, t] ^ x;
                                      x
(%o5)                     [a, c, m, t]
(%i6) listarith : true;
(%o6)                         true
(%i7) [a, c, m, t] / [1, 7, 2, 9];
                              c  m  t
(%o7)                     [a, -, -, -]
                              7  2  9
(%i8) [a, c, m, t] ^ x;
                          x   x   x   x
(%o8)                   [a , c , m , t ]
演算子: **

べき乗演算子。 Maximaは入力の中で **^と同じ演算子と認識し、 1次元出力の中では ^として表示し、 また、2次元出力の中では指数を上付き添字として配置します。

fortran関数は、入力が **でも ^でも、 べき乗演算子を **として表示します。

例:

(%i1) is (a**b = a^b);
(%o1)                         true
(%i2) x**y + x^z;
                              z    y
(%o2)                        x  + x
(%i3) string (x**y + x^z);
(%o3)                        x^z+x^y
(%i4) fortran (x**y + x^z);
      x**z+x**y
(%o4)                         done
演算子: ^^

非可換べき乗演算子。 ちょうど可換なかけ算 *に通常のべき乗演算子 ^が対応するように、 ^^は非可換かけ算 .に対応するべき乗演算子です。

非可換べき乗演算子は、1次元出力では ^^で表示され、 2次元出力では、指数をかっこ < >で囲まれた上付き添字として置きます。

例:

(%i1) a . a . b . b . b + a * a * a * b * b;
                        3  2    <2>    <3>
(%o1)                  a  b  + a    . b
(%i2) string (a . a . b . b . b + a * a * a * b * b);
(%o2)                  a^3*b^2+a^^2 . b^^3
演算子: .

行列(非可換)かけ算のためのドット演算子。 "."をこの意味で用いる時、 例えば A . Bのように両側にスペースを置かなければいけません。 これで浮動小数点の小数点と区別します。

dotdot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules, dotdistrib, dotexptsimp, dotident, dotscrules. も参照してください。


Next: , Previous: Introduction to operators, Up: Operators   [Contents][Index]