- •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.
- •Упражнения
14.2. Обращение к элементам выражений
К элементам любого выражения можно обращаться точно так же, как к элементам списков, используя команды:
Part[expr, n] или (expr)[[n]] – выделение элемента выражения expr с номером n;
Part[expr, {n1, n2,...}] или (expr)[[{n1, n2,...}]] – выделение списка из нескольких частей выражения. При этом заголовок выражения имеет номер “0”.
К заголовку выражения можно обращаться также с помощью команды Head[expr].
Пример 14.1 Рассмотрим заголовки выражений:
In[ ] := Head[2] Out[ ] = Integer In[ ] := “a”[[0]] Out[ ] = String
In[ ] := Head[2.] Out[ ] = Real In[ ] := f[x, y][[0]] Out[ ] = f
In[ ] := Head[2/3] Out[ ] = Rational
14.3. Представление выражения в виде дерева
Любое выражение может быть представлено в виде дерева. Пример приведен на рис. 14.1.
Соответственно, можно говорить о глубине и об уровнях выражения. Команда Depth[expr] – подсчитывает количество уровней в выражении expr, а команда Level[epxr, lev] – выводит список частей выражения, стоящих на уровнях, указанных в спецификации lev.
Варианты спецификации уровней:
{
In[
] :=
TreeForm[
h = 1 + (3 + x)2
+ y ]
Out[
] // TreeForm =
Plus[
1, | , y ]
Power[
| , 2 ]
Plus[
3, x ]
Рис.
14.1
n – все уровни от 1 до n;
Infinity - все уровни;
{-1} – “листья” дерева - концевые узлы.
Например, Depth[h] равно четырем; команда Level[h, {0}] выводит список нулевого уровня, включающий все выражение: {1 + (3 + x)2 + y}; команда Level[h, {1}] выводит список всех трех элементов выражения h: {1, (3 + x)2, y}; команда Level[h, {3}] выводит список элементов самого нижнего уровня: {3, x}; команда Level[h, {-1}] выводит список концевых узлов: {1, 2, 3, x, y}.
14.4. Операции преобразования выражений
Применение операций преобразования списков.
Приведенные в разделе 9 команды преобразования списков применимы также к любым выражениям. Рассмотрим примеры.
Пример 14.2
Введем выражение: In[ ] := g = 1 + y + z^2;
Выделим первый подэлемент третьего элемента: In[ ] := g [[3,1]] Out[ ] = z
Заменим первый подэлемент третьего элемента:
In[ ] := g [[3,1]]=x+3; g Out[ ] =1 + (3 + x)2 + y
Пример 14.3
Введем выражение: In[ ] := a=E^x Out[ ] =ex
Добавим к выражению еще один элемент: In[ ] := b=Append[a, y] Out[ ] =
Применим циклическую перестановку: In[ ] := RotateLeft[b, 1] Out[ ] =
Операции с заголовками выражений.
В выражении типа f[x] имя функции f само является выражением, и с ним можно производить те же действия, что и с другими выражениями.
Можно изменять имя по правилу замены.
Пример 14.4 In[ ] := {x, a, 5} /. List -> Plus Out[ ] = 5 + a + x
Можно присваивать имени новое значение.
Пример 14.5 In[ ] := f = Sin; {f[x], f[Pi/2]} Out[ ] = {Sin[x], 1}
Можно использовать имя как аргумент.
Пример 14.6 In[ ] := g[f_, x_] := f[x^2]; g[Sin, y] Out[ ] = Sin[y2]
Оператор Apply.
Оператор Apply[f, expr] или f@@expr заменяет заголовок выражения на f. Apply[f, expr, lev] – применяет функцию f на уровне или уровнях, указанных в спецификации lev.
Пример 14.7 Вычисление среднего арифметического.
In[ ] :=mean[list_] := Apply[Plus, list] / Length[list];
L1 = Table[Random[Integer, {0, 10}], {100}]; mean[L1]//N Out[ ] = 4.79
Применение операторов к частям выражений.
Функциональный оператор Map[f, expr] – применяет функцию f к каждому элементу выражения expr.
Пример 14.8 In[ ] := Map[Cos, {a, b, Pi}] Out[ ] = {Cos[a], Cos[b], -1}
Оператор Map[f, expr, lev] – применяет функцию f к каждому элементу выражения expr на уровне, определяемом спецификацией lev.
Пример 14.9 Создадим простое выражение e1=a/b. С помощью команды Level выделим в этом выражении элементы, стоящие на первом уровне, а затем применим к ним функцию Sin. Аналогично выделим элементы второго уровня и применим к ним ту же функцию Sin. Наконец, применим функцию Sin ко всем уровням выражения e1 от первого до второго.
In[ ] := {e1=a/b; Level[e1, {1}], Map[Sin, e1], Level[e1, {2}], Map[Sin, e1, {2}], Map[Sin, e1, 2]}
Out[ ] = {{a, 1/b}, Sin[a] Sin[1/b], {b, -1}, a Sin[b]-Sin[1], Sin[a] Sin[Sin[b]-Sin[1]]}