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]