- •Лекция 9 основы работы с системой компьютерной алгебры maxima
- •1. Структура Maxima
- •2. Установка и запуск программы
- •3. Интерфейс wxMaxima
- •4. Ввод простейших команд
- •5. Списки
- •5.1. Функции для элементарных операций со списками
- •5.2. Функции, оперирующие с элементами списков
- •7. Матрицы и простейшие операции с ними
- •6. Массивы
- •8. Математические функции
- •9. Вычисление и преобразование аналитических выражений
- •10. Преобразование рациональных выражений
- •11. Преобразование тригонометрических выражений
- •12. Преобразование степенных и логарифмических выражений
- •12. Пользовательские функции
- •12. Решение задач элементарной математики
- •12.1 Нахождение корней уравнений и систем алгебраических уравнений
- •13. Построение графиков и поверхностей
- •13.2 Построение графиков функций, заданных параметрически
- •12.3 Построение кривых в полярной системе координат
- •13.4 Построение трёхмерных графиков
6. Массивы
Массивы в Maxima - совокупности однотипных объектов с индексами. Число индексов не должно превышать пяти. В Maxima существуют и функции с индексами (функции массива). Возможно создание и использование переменных с индексами до объявления соответствующего массива. Такие переменные рассматриваются как элементы массивов с неопределёнными размерностями (так называемые хэш-массивы). Размеры неопределённых массивов растут динамически по мере присваивания значений элементам. Интересно, что индексы массивов с неопределёнными границами не обязательно должны быть числами. Для повышения эффективности вычислений рекомендуется преобразовывать массивы с неопределёнными границами в обычные массивы (для этого используется функция array). Создание массива производится функцией array. Синтаксис обращения к функции:
array (name, dim_1, ..., dim_n)
array (name, type, dim_1, ..., dim_n)
array ([name_1, ..., name_m], dim_1, ..., dim_n)
Индексы обычного массива - целые числа, изменяющиеся от 0 до dimi. Пример:
Функция listarray, использованная в примере, преобразовывает массив в список. Синтаксис вы зова: listarray (A) Аргумент А может быть определённым или неопределённым массивом, функцией массива или функцией с индексами. Порядок включения элементов массива в список - по строкам. Функция arrayinfo выводит информацию о массиве А. Синтаксис вызова: arrayinfo(A) Аргумент А, как и в случае listarray, может быть определённым или неопредедённым массивом, функцией массива или функцией с индексами. Пример использования:
Функции listarray и arrayinfo применимы и к функциям массива:
Ещё один пример - создание и вывод информации о функциях с индексами:
Функция makearray(type,dim1,...,dimn) создаёт и возвращает массив Lisp. Тип массива может быть any, flonum, fixnum, hashed, functional. Индекс i можкт изменяться в пределах от 0 dimi− 1. Достоинство make_array по сравнению с array - возможность динамически управлять распреде- лением памяти для массивов. Присваивание y : make_array(...) создаёт ссылку на массив. Когда массив больше не нужен, ссылка уничтожается присваиванием y : false, память освобождается затем сборщиком мусора. Примеры:
Переменная arrays содержит список имен массивов первого и второго видов, определенных на данный момент. Пример:
Функция fillarray позволяет заполнять массивы значениями из другого массива или списка. Заполнения производится по строкам. Примеры:
Как видно из рассмотренных примеров, длина списка может и не совпадать с размерностью массива. Если указан тип массива, он должен заполняться элементами того же типа. Удаление массивов из памяти осуществляется функцией remarray. Кроме того, для изменения размерности массива имеется функция rarray(A,dim1,...,dimn). Новый массив заполняется элементами старого по строкам. Если размер старого масива меньше, чем нового, остатокнового заполняется нулями или false (в зависимости от типа массива).
7. Матрицы и простейшие операции с ними
В 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]). Пример:
