ИНФОРМАТИКА-Лабораторные_работы_1_курс / Лаб.4 / Лаб
.4.pdfЛАБОРАТОРНАЯ РАБОТА №4
ПРИБЛИЖЕНИЕ ПЕРИОДИЧЕСКИХ СИГНАЛОВ ТРИГОНОМЕТРИЧЕСКИМ РЯДОМ В ПРОГРАММЕ MAXIMA
Краткое описание программы MAXIMA
Среди свободного программного обеспечения широкую известность и заслуженную популярность приобрела система аналитических вычислений Maxima.
Интерфейс Maxima.
В настоящее время Maxima обладает четырьмя интерфейсами:
– в виде командной строки;
– на основе редактора emacs;
– графический интерфейс xMaxima;
– графический интерфейс wxMaxima.
Последний из них является наиболее удобным для пользователя, поэтому именно его будем использовать в данной работе.
Принципы работы с wxMaxima.
Главное окно wxMaxima показано на рис.1. Строка ввода обозначена словом «ВВОД» и представляет собой командную строку для ввода команд и выражений. Большую часть экрана занимает область вывода. Введенные команды и выражения дублируются в области вывода.
Рис. 1. Интерфейс wxMaxima
Каждый ввод помечается метками %i1, %i2, %i3 и т.д. Каждый вывод программы помечается метками %о1, %о2, %о3 и т.д. Имена переменных могут содержать до 26 знаков и состоять из латинских букв (большие и маленькие различаются), цифр, символов подчеркивания и процента. Как правило с процента начинаются специальные имена, например, %pi, %e, %i – число пи, число е, мнимая единица. Введённые выражения могут заканчиваться либо точкой с запятой, либо знаком $. В первом случае результат печатается, во втором — нет.
2
получаем список квадратов целых чисел от 1 до 10. Аналогом команды makelist является пункт меню «Алгебра -> Создать список».
Массивы.
Массив в Maxima — это совокупность объектов с индексами (похож на индексированный список). Существуют три вида массивов [1].
1) Массив произвольного размера. Значения элементов такого массива задаются или «индивидуально»
mas[1]:20$ mas[5]:45$
или как функция индексов mas[i,j]:=i^2+j^2
2) Массив определенного размера. Он задается командой
array(ИмяМассива,Тип,Размер1,Размер2,...). Здесь Тип — тип элементов массива (float — вещественный, int — целый). Индексы массива принимают значения от 0 до указанного размера. Например, команда
array(mas,float,5,5)
определяет двумерный массив 6 на 6 с именем mas, состоящий из вещественных элементов. Если тип элементов массива неизвестен его можно не указывать.
3) Самопечатающиеся массивы. В данной работе они не используются. Информацию о них можно найти в [1].
4
Векторы и матрицы.
В Maxima можно использовать прямоугольные матрицы. Для удобства команды работы с матрицами представлены также в меню «Алгебра».
Для создания матрицы служит функция
matrix: matr1:matrix([1,2,3],[4,6,8],[-1,2,4]) или пункт меню «Ввести матрицу».
Доступ к элементам матрицы осуществляется по двум индексам mart[2,1]. Первый индекс означает номер строки, второй — номер столбца. Нумерация начинается с 1.
Функция
genmatrix(ИмяМассива, Разм1, Разм2) генерирует матрицу на основе двумерного массива. Ей соответствует пункт меню «Создать матри- цу».Функция
zeromatrix(N,M)
возвращает матрицу размерности MxN, состоящую из нулей.
Функция
zeromatrix(N)
возвращает единичную матрицу размерности NxN.Функция
Матрица1:copymatrix(Матрица2) создаёт копию матрицы.
Maxima позволяет выполнить все допустимые операции с матрицами. Возвести каждый элемент матрицы в степень можно с помощью операции ^. Для возведения матрицы в степень
5
по правилам линейной алгебры используется двойная крышка ^^.
Например, обратную матрицу получаем, указав (–1) степень (или в меню «Обратить матрицу»), а для операции транспонирования используем функцию transpose (или меню «Транспонировать матрицу»). Функция determinant и пункт меню «Определитель» вычисляют определитель. Более подробное описания функций работы с матрицами можно найти в [1].
В следующем примере получаем решения квадратного уравнения для нескольких исходных данных:
(%i2) a:matrix([5,3,8]);
(%o2) [5 3 8]
(%i3) b:matrix([3,2,1]);
(%o3) [3 2 1]
(%i4) c:matrix([6,4,0]);
(%o4) [6 4 0]
(%i5) (-b+sqrt(b^2-4*a*c))/(2*a);
(%o6) [ |
111i−3 2 |
|
11i−2 |
0] |
10 |
6 |
(%i6) (-b+sqrt(b^2+4*a*c))/(2*a);
(%o6) [ |
|
−3 2 |
|
13 i−2 |
0] |
129 |
|
||||
10 |
6 |
Построение графиков функций.
Функции в Maxima употребляются в двух смыслах: в математическом и программистском. Для определения функции в математическом смысле достаточно написать, например, y:x^2+2. Maxima понимает, что переменная y есть функция переменной x. Для построения ее графика можно использовать функцию plot2d:
6
plot2d(y,[x,-5,5]).
Здесь первый аргумент y — функция, график которой строим, второй аргумент — список из трёх элементов: х — переменная, -5 и 5 — границы отрезка построения по оси абсцисс. При необходимости построить несколько графиков вместо первого аргумента функции plot2d нужно указать список функций, например
plot2d([y,z],[x,-5,5]).
Если функция имеет параметр, например, y=ax2 , где a — параметр, то ее нужно определять как функцию в программистском смысле, зависящую от основного аргумента х и от пара-
метра а:
y(a,x):=a*x^2.
При построении нужно указывать конкретные значения параметра, например
plot2d([y(2,x),y(4,x)],[x,-5,5]).
График функции можно строить также по точкам, то есть по заранее вычисленным значениям переменных х и у. Для этого необходимо задать интервал изменения аргумента в виде списка:
x:makelist(k*0.2, k, 0, 100);
Затем нужно определить функцию в програм- мистском смысле f(x):=x*sin(x);
вычислить значения функции для каждого элемента списка, например, так
y:map(f,x),numer; и построить график по точкам
plot2d([discrete,x,y]);
7
В результате получим график, изображенный на рис. 2
Рис. 2 Пример графика функции
Построение графиков двух переменных рассмотрим на простом примере.
Определим фунуцию двух переменных ff(x,y):=exp((-x^2-y^2)/20);
строим 3d график plot3d(ff(x,y),[x,-5,5],[y,-5,5]);
получаем график, изображенный на рис. 3
8
Рис. 3 Трехмерный график
Решение уравнений. Процесс решения уравнений в любой математической программе зависит от сложности и типа уравнения. Некоторые из них можно решить аналитически, другие решаются только численно. Maxima обладает возможностью как аналитического, так и численного решения уравнений. Сначала необходимо ввести уравнение в строке ввода Maxima, например:
(%i1) 3*x^3-2*x^2+5*x-8=0; (%o1) 3 x3−2 x2 5 x−8=0
или
(%i1) eq1:3*x^3-2*x^2+5*x-8=0; (%o1) 3 x3−2 x2 5 x−8=0 .
Для решения уравнений предусмотрено довольно много функций. Перечислим некоторые из них.
9
1) realroots(Уравнение) — ищет действительные корни полиномиального уравнения с действительными коэффициентами (Меню «Уравнения -> Корни полинома (вещественные)»):
(%i4) realroots(eq1);
(%o4) [ x= 3947794533554432 ] .
2)nroots(Уравнение,min,max) — находит количество корней полиномиального уравнения с действительными коэффициентами на отрезке [min,max]:
(%i5) nroots(eq1,0,inf);
(%o5) 1.
3)allroots(Уравнение) — ищет все корни полиномиального уравнения (Меню «Уравнения -> Корни полинома»):
(%i6) allroots(eq1);
(%o6) [x=1.176534437353076, x=1.483762909456726*%i-0.2549338853432, x=-1.483762909456726*%i-0.2549338853432]
4)solve([Список уравнений], [Список переменных]) (Меню «Уравнения -> Решить...»):
(%i10) solve([eq1],[x]);
5)find_root(Уравнение, Переменная, Левая граница,Правая граница) — выполняет поиск корня на указанном отрезке методом деления отрезка пополам (Меню «Уравнения -> Решить численно...»):
(%i26) find_root(x^2-1=sin(x),x,0,2);
(%o26) 1.409624004002596
10