Вычисление выражений с матрицами и векторами

Над матрицами и векторами можно поэлементно производить математические операции (применять операторы) — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и иметь одинаковые размеры. Каждый член матрицы/вектора взаимодействует с соответствующим элементом второй матрицы/вектора.

В качестве второго слагаемого (множителя, вычитаемого, делителя) можно также использовать скаляр соответствующего типа (double, float или complex). В этом случае каждый элемент матрицы или вектора будет обработан с учетом этого скаляра.

matrix matrix_a = {{0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}};
matrix matrix_b = {{1, 2, 3}, {4, 5, 6}};
matrix matrix_c1 = matrix_a + matrix_b;
matrix matrix_c2 = matrix_b - matrix_a;
matrix matrix_c3 = matrix_a * matrix_b;   // произведение Адамара (поэлементное)
matrix matrix_c4 = matrix_b / matrix_a;
matrix_c1 = matrix_a + 1;
matrix_c2 = matrix_b - double_value;
matrix_c3 = matrix_a * M_PI;
matrix_c4 = matrix_b / 0.1;
matrix_a += matrix_b;                     // возможны операции "по месту"
matrix_a /= 2;

Операции "по месту" модифицируют исходную матрицу (или вектор), помещая в неё результат, в отличие от обычных бинарных операций, в которых операнды остаются без изменений, а для результата создается новый объект.

Кроме того, матрицы и векторы можно передавать в качестве параметра в большинство математических функций. В этом случае матрица или вектор обрабатываются по элементам. Например:

matrix a = {{1, 4}, {9, 16}};
Print("matrix a=\n", a);
a = MathSqrt(a);
Print("MatrSqrt(a)=\n", a);
/*
   matrix a=
   [[1,4]
    [9,16]]
   MatrSqrt(a)=
   [[1,2]
    [3,4]]
*/

В случае MathMod и MathPow в качестве второго параметра может быть использован как скаляр, так и матрица или вектор соответствующего размера.