Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
56
Добавлен:
26.03.2016
Размер:
311.67 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №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

Основные математические операции обозначаются традиционным образом (+-*/^). Для операции присваивания используется двоеточие.
Обычно Maxima старается выполнять математические действия аналитически и представляет результаты вычислений в виде формул, обыкновенных дробей и т.д. Однако имеется возможность выполнять и численные вычисления. Например, ввод 1/3+4/5 приведет в появлению результата в виде 17/15. Чтобы представить результат в виде вещественного числе необходимо указать при вводе параметр numer:
1/3+4/5,numer результат: 1.1333333333333.
Пункт меню «Численные вычисления -> Переключить флаг numer» изменяет значение встроенной переменной numer, что влияет на поведение Maxima при вычислениях.
Списки.
В программе Maxima существует понятие списка. Это упорядоченная совокупность объектов (могут быть разных типов: выражения, формулы, числа, списки...). Для задания списка объекты перечисляются через запятую в квадратных скобках, например: sp1:[a,b,c,45,k+m]. Пустые квадратные скобки означают пустой список. Работа со списками подробно описана в [1]. Создать список позволяет функция makelist: makelist(Выражение, переменная, начальное значения, конечное значение), например,
lst:makelist(i^2,i,1,10)
[1,4,9,16,25,36,49,64,81,100]
3

получаем список квадратов целых чисел от 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