Next: Операторы отношения, Previous: Префиксные операторы (prefix), Up: Операторы [Contents][Index]
Символы +, *, / и ^ обозначают
суммирование, умножение, деление и возведение в степень, соответственно.
Имена этих операторов "+", "*", "/" и "^"
могут появляться там, где требуется имя функции или оператора.
Символы + и - представляют унарное суммирование и вычитание, соответственно,
и имена этих операторов: "+" и "-", соответственно.
Вычитание a - b представляется в Maxima как суммирование a + (- b).
Выражения, такие как a + (- b), отображаются как вычитание.
Maxima распознает "-" только как имя унарного оператора вычитания,
а не как имя бинарного оператора вычитания.
Деление a / b представляется в Maxima как умножение, a * b^(- 1).
Выражения, такие как a * b^(- 1), отображаются как деление.
Maxima распознает "/" как имя оператора деления.
Суммирование и умножение - n-арные (n-ary), коммутативные операторы. Деление и возведение в степень - бинарные, некоммутативные операторы.
Maxima сортирует операнды коммутативных операторов для конструирования канонического представления.
Во внутреннем хранилище упорядочивание управляется с помощью orderlessp.
Для отображения, упорядочивание при суммировании управляется с помощью ordergreatp,
а для умножения, флаг тот же, что и для внутреннего упорядочивания.
Арифметические вычисления выполняются для буквальных чисел
(целых, рациональных, обыкновенных чисел с плавающей точкой и чисел с плавающей точкой повышенной точности (bigfloat)).
За исключением возведения в степень, все арифметические операции для чисел упрощаются до чисел.
Возведение в степень упрощается до числа, в случае если, либо операнд является обыкновенным числом с плавающей точкой
или числом с плавающей точкой повышенной точности (bigfloat),
или если результат есть точное целое или рациональное число;
иначе возведение в степень может быть упрощено до sqrt или другого возведения в степень,
или оставлено неизменным.
В арифметических вычислениях имеет место приведение типов значений результата: если любой операнд есть bigfloat, то результат будет bigfloat; или же, если любой операнд есть обыкновенное число с плавающей точкой, результат будет обыкновенным числом с плавающей точкой; или же, если операнды являются рациональными или целыми значениями, то результат будет рациональным или целым.
Арифметические вычисления являются упрощением, а не в вычислением. Таким образом, арифметические операции выполняется в экранированных (но упрощенных) выражениях.
Арифметические операции применяются элемент-за-элементом
к спискам, когда глобальный флаг listarith есть true,
и всегда применяется элемент-за-элементом к матрицам.
Когда один операнд есть список или матрица и другой есть операнд некоторого другого типа,
то другой операнд объединяется с каждым из элементом списка или матрицы.
Примеры:
Суммирование и умножение являются n-арными (n-ary) коммутативными операторами.
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 распознает ** как тот же оператор, что и ^ при вводе,
и он отображается как ^ в 1D (одномерном) выводе,
или в виде показателя степени как верхний индекс в 2D (двумерном) выводе.
Функция 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
Next: Операторы отношения, Previous: Префиксные операторы (prefix), Up: Операторы [Contents][Index]