- •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.
- •Упражнения
13.2. Интерполяция
InterpolatingPolynomial[data, var] – строит интерполяционный многочлен Ньютона с аргументом var. Исходные данные data для интерполируемой функции f(x) могут быть заданы либо в виде {{x1, f1}, {x2, f2}, …}, либо в виде { f1, f2, …} в том случае, когда xi принимает натуральные значения 1, 2, … .
Пример 13.7. In[ ] := L[x_]=InterpolatingPolynomial[{1, 0, 1, 2}, x]
Out[ ] =
Заметим, что интерполяционный многочлен записан по схеме Горнера – схеме с минимальным количеством умножений (количество умножений равно степени многочлена).
13.3. Решение алгебраических уравнений
Функция Solve[eqns, vars] ищет решение системы уравнений eqns относительно переменных vars. В частном случае система может состоять из одного уравнения. Solve[eqns] ищет решение для всех переменных в системе eqns. Уравнения задаются в виде: lhs==rhs – левая и правая части уравнения связаны логическим знаком равенства. Система может быть представлена в виде списка уравнений, либо уравнения могут быть объединены знаком конъюнкции (&&). Решение записывается в форме правил замены: x–>so Решение может быть найдено как в численном, так и в аналитическом виде.
Пример 13.8: Решение системы линейных уравнений:
In[ ] := Solve[ x + 2y == 0 && 2x – y == 5a, {x, y}]
Out[ ] = {{x –> 2 a, y –> -a}}
При наличии нескольких решений функция Solve дает их список.
Пример 13.9: In[ ] := Solve[x (y + b) == a^2&&x – y == b, {x, y}]
Out[ ] = {y –> -a - b, x –> -a}, {y –> a - b, x –> a}}
Если имеется корень кратности m, Solve выписывает решение m раз, например:
Пример 13.10: In[ ] := Solve[ (x – 1)^2 == 0]
Out[ ] = {{ x –> 1}, { x –> 1}}
Функция Solve применима, когда точное решение может быть записано в явном виде.
Функция LinearSolve[m, b] предназначена для решения систем линейных алгебраических уравнений. Эта функция находит решение системы: , где m – матрица, b и x – известный и неизвестный векторы. Функция LinearSolve позволяет также находить решение сразу нескольких систем уравнений с одинаковой матрицей в левой части, но с разными столбцами свободных коэффициентов. В этом случае b и x являются матрицами. Функция LinearSolve дает решение как в численном, так и в аналитическом виде.
Пример 13.11. Найдем матрицу, обратную к матрице m:
In[ ] := (m = {{1, 2}, { 2, -1}}; b={{1, 0}, { 0, 1}}; m1 = LinearSolve[m, b]//N)
Out[ ] = {{ 0.2, 0.4}, { 0.4, -0.2}}
Для проверки полученного результата вычислим произведение матриц m и m1:
In[ ] := m1. m Out[ ] = {{1, 0}, { 0, 1}}
Функция RowReduce[m] – преобразует матрицу m к жордановой форме. Невырожденная матрица преобразуется в единичную матрицу; вырожденная матрица принимает ступенчатый вид.
Пример 13.12. Применим функцию RowReduce к вырожденной матрице:
In[ ] := m5={{2, 3,1}, {0,2,1}, {2, 5, 2}}; RowReduce[m5]
Out[ ] =
Функция RowReduce позволяет найти решение системы линейных алгебраических уравнений . Для решения опишем систему уравнений с помощью расширенной матрицы mb – матрицы m с присоединенным столбцом b (или с присоединенной матрицей b в случае одновременного решения нескольких систем уравнений). Применение к расширенной матрице функции RowReduce реализует процесс решения системы уравнений по схеме Жордана: левая часть матрицы – m – преобразуется в единичную матрицу, в то время как в правой части – b – получаем решение системы.
Пример 13.13. Найдем матрицу, обратную к матрице m = {{1, 2}, {2, -1}}. Для этого присоединим к матрице m единичную матрицу и применим функцию RowReduc:
In[ ] := RowReduce[{{1, 2, 1, 0}, {2, -1, 0, 1}}]//MatrixForm
Out[ ]/MatrixForm =
Последние два столбца полученной матрицы представляют матрицу, обратную к матрице m.
Функция Roots[eqn, var] – ищет корни полиномиального уравнения eqn для переменной var. Решение записывается в виде логических равенств, объединенных знаком дизъюнкции – логического “или”.
Пример 13.14.
Найдем корни многочлена Чебышева третьей степени (ChebyshevT[3, x] = -3x + 4x3):
In[ ] := Roots[ChebyshevT[3, x] == 0, x]
Out[ ] =
Функция FindRoot[eqn, {x, x0}] – ищет численное решение уравнения eqn, используя начальное приближение x=x0.
FindRoot[ {eqn1, eqn2, …}, {x, x0}, {y, y0}, …] – ищет решение системы уравнений. Если все начальные приближения – действительные числа, FindRoot ищет только действительные решения; для поиска комплексных решений необходимо, чтобы хотя бы одно из начальных приближений было комплексным.
Пример 13.15.
In[ ] := z=FindRoot[Tan[x]==x+1/4,{x,1}] Out[ ] ={x –>0.818503}
Проверка: In[ ] :=Tan[z[[1,2]]] - 1/4 Out[ ] = 0.818503
Отметим, что функция Solve не позволяет найти решение данного уравнения.