- •1. Общие сведения. Ядро и интерфейс пакета Математика
- •2. Точные и приближенные вычисления. Численные и аналитические операции
- •3. Рабочий документ и ячейки. Основные команды
- •4. Сеанс работы в системе Математика. Глобальный характер данных
- •5. Правила написания. Основные встроенные функции
- •Примеры выражений
- •Формы обращений к функциям
- •Нескольких аргументов
- •6. Функции комплексного аргумента
- •Логические операторы
- •7. Циклические операции
- •7.1. Цикл For
- •7.2. Цикл While
- •7.3. Цикл Do
- •7.4. Функция If
- •7.5. Логические выражения
- •8. Функции пользователя. Составление программ
- •8.1. Функции пользователя. Описания типов аргументов
- •8.2. Немедленное и задержанное присваивание
- •8.3. Альтернативные определения функций
- •8.4. Составление программ. Глобальные и локальные переменные
- •8.5. Прерывание вычислений
- •9. Списки
- •9.1. Создание списков. Обращение к элементам списков
- •9.2. Преобразование списков
- •9.3. Матричные функции
- •10. Массивы
- •1 1. Основные типы графиков
- •11.1. Двумерные графики
- •11.2. Функции Show, GraphicsRow, GraphicsGrid. Графические примитивы.
- •11.3. Изображения трехмерных объектов
- •11.4. Анимация
- •12. Функция Manipulate
- •13. Аналитические операции. Интерполяция. Решение уравнений
- •13.1. Аналитические операции
- •13.2. Интерполяция
- •13.3. Решение алгебраических уравнений
- •13.4. Решение дифференциальных уравнений
- •14. Преобразование выражений
- •14.1. Стандартная форма выражений
- •Примеры выражений
- •14.2. Обращение к элементам выражений
- •14.3. Представление выражения в виде дерева
- •14.4. Операции преобразования выражений
- •14.5. Повторное выполнение операций
- •14.6. Анонимные функции
- •14.7. Функциональные операторы Outer и Inner
- •Вопросы для повторения
- •Массивы.
- •Функция Manipulate.
- •Упражнения
9.2. Преобразование списков
Пакет Математика содержит большой набор функций для преобразования списков:
Drop[List, n] – вычеркивание первых n элементов из списка List;
Drop[List, -n] – вычеркивание последних n элементов из списка List;
Prepend[List, el] – добавление элемента el в начале списка List;
Append[List, el] – добавление элемента el в конце списка List;
Insert[List, el, n] – вставка элемента el на n-е место в списке List;
Join[List1, List2,…] или List1 ~Join~ List2~… – объединение списков;
ReplacePart[List, el, n] или List[[n]] = el – замена n-го элемента списка List на элемент el;
Sort[List] – упорядочивание элементов списка List;
RotateLeft[List, n], RotateRight[List, n} – циклическая перестановка списка List на n элементов влево и вправо.
Пример 9.5. Преобразуем введенный ранее список L1={"список", 0.5, a+b, {x,y}}:
In[ ] :=Drop[L1, 2] Out[ ] = {a+b, {x, y}}
In[ ] :=RotateLeft[L1, 1] Out[ ] = {0.5, a+b, {x, y}, список}
In[ ] :=L2=Join[ L1, Table[a^n, {n, -1, 2}]] Out[ ] = {список, 0.5, a+b, {x+y}, 1/a, 1, a, a2}
In[ ] :=Sort[L2] Out[ ] = {0.5, 1, список, 1/a, a, a2, a+b, {x+y}}
Функция Total.
Для одномерного массива list функция Total[list] вычисляет сумму элементов массива.
Для двумерного массива функция Total[{{x1, y1, …}, {x2, y2, …}, …} порождает список сумм:
{Total[{x1, x2, …}], Total[{y1, y2, …}], …}.
Для произвольного списка функция Total[list, n] дает сумму всех элементов вплоть до уровня n.
Отметим, что команды Total[list] и Total[list,1] являются одной и той же командой.
Пример 9.6. Создадим список, второй элемент которого сам является списком:
In[ ] :=L3={a,{x,y,z}};
Применим двумя способами функцию Total:
In[ ] :=Total[L3] Out[ ] = {a+x, a+y, a+z}
In[ ] :=Total[L3, 2] Out[ ] = a+x+y+z
Функция Total вычисляет сумму во много раз быстрее, чем функция Plus.
Пример 9.7. Создадим массив из 106 случайных чисел: In[ ] :=t=Table[Random[], {1000000}];
Сравним время вычисления суммы чисел массива t с помощью функций Total и Plus:
In[ ] :=Total[t]//Timing Out[ ] = {0.047, 499855.}
In[ ] :=Apply[Plus, t]//Timing Out[ ] = {4.5, 499855.}
Видим, что суммирование с помощью функции Plus требует почти в 100 раз больше времени.
Не будем хранить в памяти такую большую таблицу: In[ ] :=Clear[t].
9.3. Матричные функции
Создать матрицу – это значит каким-либо способом создать двумерный массив. Подобным образом получена матрица m1 в примере 9.3. Функции для создания специальных матриц:
IdentityMatrix[n] – порождает единичную матрицу ;
DiagonalMatrix[list] – дает диагональную матрицу с элементами списка list на главной диагонали.
Функции для работы с матрицами.
MatrixForm[m] – выводит на печать двумерный массив m в виде матрицы.
MatrixForm[v] – выводит на печать одномерный массив v в виде вектора-столбца.
Dot[m1,m2] или m1.m2 – вычисляет произведение матриц.
m1*m2 – производит поэлементное перемножение матриц.
Inverse[m] – вычисляет обратную матрицу.
Transpose[m] – производит транспонирование.
MatrixPower[m, n] – возводит матрицу m в степень n.
Det[m] – вычисляет определитель матрицы.
Length[m] – определяет число строк матрицы.
Dimensions[m] – определяет размеры матрицы m.
Eigenvalues[m] – вычисляет собственные значения матрицы.
Eigenvectors[m] – находит собственные векторы матрицы m.
MatrixRank[m] – подсчитывает ранг матрицы.
Tr[m] – вычисляет след матрицы – сумму диагональных элементов.
Norm[v] – подсчитывает длину вектора v: , где v k – компоненты вектора.
Norm[v, ] – вычисляет норму вектора по формуле .
Norm[m, ] – вычисляет норму матрицы m по формуле .
Norm[m, 1– вычисляет норму матрицы по формуле .
Отметим, что матричные функции включают также аналитические преобразования.
Пример 9.8. Действия с матрицами.
Введем матрицу m2 и вектор v3: In[ ] := m2={{-1, 4}, { 2, -3}}; v3={- 4, 3};
Длина вектора: In[ ] := Norm[v3] Out[ ] = 5
Норма вектора: In[ ] := Norm[v3, ] Out[ ] = 4
Определительматрицы: In[ ] := Det[m2] Out[ ] = -5
Норма матрицы: In[ ] := Norm[m2, ] Out[ ] = 5
Собственные значения и собственные векторы матрицы m1:
In[ ] := Eigenvalues[m2] Out[ ] = {-5, 1}
In[ ] := Eigenvectors[m2] Out[ ] = {{-1, 1}, {2, 1}}
Произведение матрицы на вектор: In[ ] := m2.v3 Out[ ] = {16, -17}
Обратная матрица: In[ ] := m3=Inverse[m2] Out[ ] =
Произведение исходной матрицы на обратную: In[ ] :=m2.m3 Out[ ] = {{1, 0}, {0, 1}}
Объединим матрицы m2 и m3 в единую матрицу :
In[ ] :=m4=Join[m2, m3] Out[ ] =
Транспонируем матрицу m4:
In[ ] :=m5=Transpose[m4] Out[ ] =
Просуммируем элементы столбцов матрицы m5: In[ ] := Total[m5] Out[ ] =
Просуммируем все элементы матрицы m5: In[ ] :=Total[m5, 2] Out[ ] = 4
Создадим диагональную матрицу: In[ ] :=DiagonalMatrix[v3] Out[ ] = {{-4, 0}, {0, 3}}
Ряд функций для преобразования списков приведен также в разделах 11 и 12.
В заключение раздела приведем пример определения векторной функции. Данная функция реализует операцию “бабочка” – базовую операцию алгоритма быстрого преобразования Фурье. Операция вычисляет дискретное преобразование Фурье для массива из двух элементов {a, b}; в результате операции исходный массив преобразуется в массив {a+b, a-b}:
In[ ] := w[{a, b}] := {a+b, a-b}; w[{1, 2}] Out[ ] = {3, -1}
Математика сначала вычисляет целиком вектор, описанный в правой части операции присваивания, и затем заменяет старый вектор на новый.