
- •Численные методы и универсальные математические пакеты (Номер занятия в оглавлении равен номеру лабораторной работы. Лабораторные работы состоят из практических заданий из соответствующих занятий)
- •Введение
- •Занятие 1. Теория погрешностей Источники и классификация погрешностей.
- •Приближенные числа.
- •2. Погрешность произведения.
- •3. Погрешность частного.
- •Введение в Maple
- •Константы
- •Переменные, неизвестные и выражения
- •Команды преобразования выражений
- •Упрощение выражения: simplify()
- •Раскрытие скобок в выражении: expand()
- •Разложение полинома на множители: factor()
- •Ограничения на неизвестные: assume()
- •Сложные типы данных
- •Последовательность выражений
- •Списки и множества
- •Внутренняя структура выражений
- •Подстановка и преобразование выражений
- •Практическое задание
- •Занятие 2. Приближение функций
- •Приближение полиномом Тейлора
- •Приближение функий заданных таблицей своих значений
- •Алгебраическое интерполирование
- •Интерполяционный многочлен Лагранжа
- •Многочлены Чебышева
- •Разделенные разности и многочлен Ньютона
- •Решение уравнений, неравенств и их систем
- •Команда solve()
- •Команда fsolve()
- •Решение неравенств
- •Дифференцирование и интегрирование
- •Int(выражение, переменная);
- •Практическое задание 1
- •Практическое задание 2
- •Занятие 3. Построение кривой по точкам
- •Линия, построенная методом наименьших квадратов
- •Метод линеаризации данных для экспоненциальной кривой
- •Нелинейный метод наименьших квадратов
- •Линейный метод наименьших квадратов
- •Интерполирование сплайнами
- •Графика в Maple
- •Команда двумерной графики plot()
- •Двумерные команды пакета plots
- •Несколько советов
- •Пространственная графика, команда plot3d()
- •Трехмерные команды пакета plots
- •Практическое задание 1.
- •Практическое задание 2.
- •Практическое задание 3.
- •Практическое задание 4.
- •Занятие 4. Численное дифференцирование Приближение производной
- •Анимация
- •Двумерная анимация
- •Трехмерная анимация
- •Практическое задание 1
- •Практическое задание 2
- •Занятие 5. Численное интегрирование
- •Квадратурные формулы
- •Основы программирования в Maple
- •If булево_выражение then последовательность_операторов
- •Практическое задание 1.
- •Практическое задание 2.
- •Практическое задание 3.
- •Занятие 6. Решение нелинейных уравнений
- •Метод простой итерации
- •Метод бисекции (деления пополам)
- •Метод Ньютона
- •Процедуры в Maple
- •Практическое задание 1.
- •Практическое задание 2.
- •Практическое задание 3.
- •Практическое задание 4.
- •Занятие 7. Решение систем Линейные системы. Метод Гаусса
- •Пакет LinearAlgebra
- •Основные типы данных
- •Элементарные операции с матрицами и векторами
- •Решение систем линейных уравнений
- •Практическое задание 1.
- •Практическое задание 2
- •Практическое задание 3
- •Занятие 8. Решение дифференциальных уравнений
- •Задача Коши
- •Метод Эйлера
- •Методы Рунге-Кутта
- •Системы дифференциальных уравнений
- •Решение обыкновенных дифференцильных уравнений в Maple
- •Практическое задание 1
- •Практическое задание 2.
- •Практическое задание 3.
Сложные типы данных
В отличие от чисел – простых объектов – объекты других типов, с которыми может работать Maple, представляют собой сложные типы данных.
Последовательность выражений
Последовательность выражений, или просто последовательность, – это группа выражений Maple, разделенных запятыми.
Пример. Последовательности выражений
> s:=1,2,sqrt(3) ,x,sin(y);
> whattype(s);
Последовательность является базовым объектом Maple, на основе которого строятся другие сложные объекты. Последовательность сохраняет порядок следования выражений. Для последовательности ее тип имеет имя exprseq (сокращение от expression sequence).
Можно получить значение любого элемента последовательности, используя индексную форму записи ‑ после имени переменной в квадратных скобках задать номер элемента (нумерация начинается с 1):
> s:=x,x^2,x^3;
> s[2];
Однако присвоить новое значение элементу последовательности с использованием индексной формы обращения нельзя:
> s[2]:=1;
Error, invalid assignment (x, x^2, x^3)[2] := 1; cannot assign to an expression sequence
Для создания длинных последовательностей, элементы которых подчиняются некоей закономерности, можно использовать команду seq() и операцию повторения $.
seq(f,i=m..n);
Где f ‑ выражение, зависящее от переменной, имя которой определяется параметром i, а m и n ‑ числа, определяющие диапазон изменения переменной i с шагом 1.
Пример. Формирование последовательностей командой seq()
> seq(sin(Pi*i/6),i=-3..3);
> seq(x[k],k=3..5);
Пример. Формирование последовательностей операцией $
> $2..5;
> 2^i$i=-6..6;
> a[i]$i=1..3;
Списки и множества
Список ‑ упорядоченная последовательность выражений, заключенная в квадратные скобки, а множество – неупорядоченная последовательность выражений, заключенная в фигурные скобки. Относительно множества следует отметить, что этот объект понимается в Maple точно так же, как и в математике. Если в последовательности присутствуют повторяющиеся элементы, то во множестве им будет соответствовать один элемент, тогда как в списке все повторяющиеся элементы существенны, т. е. список может содержать повторяющиеся элементы, стоящие на разных местах. При задании множества порядок элементов не существен.
Пример. Задание списков и множеств
> [a,b,c],[a,c,b],[a,a,c,c,b,a]; # Задание разных списков
> {a,b,c},{a,c,b},{a,a,c,c,b,a}; # Задание одинаковых множеств
Списки, как и последовательности, сохраняют порядок своих элементов. С помощью индекса можно получить значение любого элемента списка или множества.
Пример. Получение и изменение значений элементов списка и множества
> l:=[a,b,c];
> l[2];
> l[3]:=3;
l;
> s:={a,a,c,c,b,a};
> s[2];
> s[2]:=3;s;
Error, cannot reassign the entries in a set
Внутренняя структура выражений
Часто возникает необходимость выполнить какую-либо команду или вычислить функцию применительно к каждому элементу списка или множества.
Команда map() позволяет применить функцию или команду, заданную первым параметром, ко всем элементам списка или множества, возвращая, соответственно, список или множество.
map(функция, список_или_множество [, пар2, парЗ, ..., пapN]);
Если для выполнения команды или функции, заданной первым параметром команды map(), необходимы дополнительные параметры, то их следует задавать после списка или множества.
Пример. Выполнение команд над элементами списка или множества
> map(int,[x,x^2,x^3],x);
> f:=(x)->x^a:
> map(f,[x,y,z]);
В последнем примере используется оператор ->, который задает функцию одной или нескольких переменных. Т.е. для определения значения функции в какой-либо точке теперь не нужно использовать подстанову:
> f(2);
> g:=(x,y)->sin(x)*cos(y)+x*y;
> g(Pi/2,Pi);
Теперь
к переменной
необходимо обращаться как к функции,
т.е. f(x),
аналогично и для функции
g(x,y).
Каждый объект Maple, в том числе и выражение, делится на подобъекты первого уровня, которые, в свою очередь, также делятся на подобъекты и т. д. Этот процесс продолжается до тех пор, пока не будут получены базисные простые элементы Maple (объекты основных типов: целые, вещественные, дроби, неизвестные величины и т. д.).
Уравнение представляется в виде двух выражений, соединенных знаком равенства. Его не следует путать с операцией присваивания (:=), которая переменной в левой части присваивает значение выражения в правой части.
Для выделения левой части уравнения предназначена команда lhs(). Выделить его правую часть можно командой rhs().
Пример. Задание уравнения и выделение его частей
> g:=x^2+sin(x)=cos(x)-1;
> rhs(%);
> lhs(g);
Рассмотрим выражение:
> expr:=x^7/sin(x)+8*x^5+3*sqrt(x)*sin(x);
Воспользуемся командой whattype(), чтобы определить его тип:
> whattype(expr);
Как видим, наше выражение представляет собой сумму. Команда nops(выражение) определяет количество операндов выражения, а команда ор(выражение) выдает их в виде последовательности выражений.
> nops(expr);
> op(expr);
Операндами списка или множества являются его элементы:
> op([1,4,6,8]);
При работе с полиномами очень часто необходимо выделить коэффициент при соответствующей степени переменной. Команда coeff() позволяет выполнить эту работу:
> p:=z^2*5+b*a+z^2*(a^2+b)+x*6/7;
выделяет
коэффициент при
> coeff(p,z,2);
выделяет свободный член
> coeff(p,z,0);
Для выделения некоторых элементов полинома можно использовать также команды: lcoeff() для получения старшего коэффициента (при максимальной степени переменной), tcoeff() для выделения младшего коэффициента (при минимальной степени переменной), coeffs() для формирования последовательности всех коэффициентов полинома (в том порядке, как он задавался).