Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
чм и maple эф.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.02 Mб
Скачать

Сложные типы данных

В отличие от чисел – простых объектов – объекты других типов, с которыми может работать 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() для формирования последовательности всех коэффициентов полинома (в том порядке, как он задавался).