Матрицы и простейшие операции с ними
В Maxime определены прямоугольные матрицы. Основной способ создания матриц – использования функции matrix. Синтаксис вызова: matrix(row1,...,rown). Каждая строка – список выражений, все строки одинаковой длины. На множестве матриц определены операции сложения, вычитания, умножения и деления. Эти операции выполняются поэлментно, если операнды - две матрицы, скаляр и матрица или матрица и скаляр. Возведение в степень возможно, если один из операндов - скаляр. Перемножение матриц (в общем случае некоммутативная операция) обозначается символом “.”. Операция умножения матрицы самой на себя может рассматриваться как возведение в степень. Возведение в степень “-1”- как обращение (если это возможно). Пример создания двух матриц:
Выполнение арифметических операций с матрицами:
Обратите внимание - операции выполняются поэлементно. При попытке выполнять арифметические операции, как представлено выше, над матрицами различных размеров, выдаётся ошибка. Пример операций с матрицами и скалярами:
Умножение матрицы на матрицу:
Для успешного перемножения матрицы должны быть согласованы по размерам. Возведение в степень −1 даёт обратную матрицу:
Стоит обратить внимание, что операции x^^-1 и x^-1дают разный результат! Пример:
Функция genmatrix возвращает матрицу заданной размерности, составленную из элементов двухиндексного массива. Синтаксис вызова:
genmatrix (a, i_2, j_2, i_1, j_1)
genmatrix (a, i_2, j_2, i_1)
genmatrix (a, i_2, j_2)
Индексы i1,j1 и i2,j2 указывают левый и правый нижний элементы матрицы в исходном массиве. Пример:
Функция zeromatrix возвращает матрицу заданной размерности, составленную из нулей (синтаксис вызова zeromatrix (m, n)).
Функция ident возвращает единичную матрицу заданной размерности (синтаксис ident(n))
Функция copymatrix (M) создаёт копию матрицы M. Обратите внимание, что присваивание не создаёт копии матрицы (как и присваивание не создаёт копии списка). Пример:
присваивание нового значения элементу матрицы b изменяет и значение соответствующего элемента матрицы a. Использование copymatrix позволяет избежать этого эффекта.
Функции row и col позволят извлечь соответственно строку и столбец заданной матрицы, получая список. Синтаксис вызова:
row (M, i) - возвращает i-ю строку;
col (M, i) - возвращает i-й столбец. Функции addrow и addcol добавляют к матрице строку или столбец соответственно. Синтаксис вызова:
addcol (M, list_1, ..., list_n)
addrow (M, list_1, ..., list_n)
Здесь list1,...,listn - добавляемые строки или столбцы. Пример:
Функция submatrix возвращает новую матрицу, состоящую из подматрицы заданной. Синтаксис вызова:
submatrix (i_1, ..., i_m, M, j_1, ..., j_n)
submatrix (i_1, ..., i_m, M)
submatrix (M, j_1, ..., j_n)
Подматрица строится следующим образом: из матрицы M удаляются строки i1,...,im и j1,...,jn. Пример (используем последний результат из предыдущего примера, удаляем третью строку и третий столбец):
Для заполнения матрицы значениями некоторой функции используется функция matrixmap (аналог map, apply, fullmap). Синтаксис вызова: matrixmap (f, M). Функция matrixmap возвращает матрицу с элементами i,j , равными f(M[i,j]). Пример: