- •12 Информатика и системология. 1 сем. Модуль 2: ска Maple. Тема 2 Типы данных, переменные, макроопределения Тема 2Типы данных, переменные, макроопределения
- •2.1Алфавит, лексемы
- •2.1.1Зарезервированные ключевые слова
- •2.1.2Строки и символьные имена
- •2.1.3Натуральные и целые числа
- •2.1.4Разделители (знаки пунктуации)
- •2.2Выражения и предложения языка
- •2.2.1Предложение присвоения
- •2.2.2Комментарии
- •2.2.3Функции op и nops.
- •2.3Типы выражений
- •2.3.1Простые типы
- •2.3.2Базовые структурированные типы
- •2.4Решение уравнений и неравенств
- •2.4.1Функция solve
- •2.4.2Функция fsolve
2.3.1Простые типы
К простым типам относят: символьное имя (symbols), индексированное имя (indexed), строка (string), логический (Boolean), целый (integer), дробный (fraction), с плавающей запятой (float), комплексный (complex), алгебраический (algebraic). Типы целый и дробный объединены в тип рациональный (rational). Типы рациональный и с плавающей запятой объединены в тип числовой (numeric). Тип extended_numeric объединяет numeric, infinity, –infinity и undefined (неопределённость).
Символьные имена, индексированные имена, строки и целые кратко были описаны выше.
2.3.1.1fraction.
Дробные числа задаются в виде
[знак]натуральное/натуральное
Здесь в квадратных скобках взят необязательный знак числа. Отметим, что рациональное число (rational) может быть задано отношением переменных содержащих рациональные числа, в частности это отношение может быть дробным числом (fraction).
Примеры дробных и рациональных чисел
> type(1/2, fraction);
true
> type(-1/2, fraction);
true
> type(1, fraction);
false
> type(1, rational);
true
> x:= 1/3: y:=1/2: type(-x/y, fraction);
true
> x:= 1/2: y:= 1/2: type(-x/y, fraction); type(-x/y, rational);
false
true
2.3.1.2float.
(Действительные) числа с плавающей запятой могут задаваться двумя способами
[знак]{неотриц_целое.неотриц_целое | .неотриц_целое | неотриц_целое.}
[знак]мантисса{E | e}[знак]экспонента
Примеры задания десятичных чисел с плавающей запятой.
> x := -1.1; type(x, float);
x := -1.1
true
> x:= .1;
x := 0.1
> x:= 1.;
x := 1.
> -1E-10;
-.1 10-9
Число цифр мантиссы участвующих в вычислениях определяется пакетной переменной Digits. Её исходное значение равно 10. Для увеличения числа цифр участвующих в вычислениях следует присвоить переменной Digits большее значение. Для получения значения с плавающей запятой используется функция evalf[n](x). Необязательный параметр n — точность вычисления значения: число десятичных знаков. Переменная Digits имеет «глобальное значение»: изменяет точность вычислений не только функции evalf, но и других функций имеющих дело с float.
Пример использования переменной Digits
> evalf(1/3);
0.3333333333
> evalf[12](1/3);
0.333333333333
> Digits := 16: evalf(1/3);
0.3333333333333333
2.3.1.3complex.
Комплексные числа имеют вид
a + b*I
Здесь a, b числа типа integer, fraction или float; I — мнимая единица. В зависимости от того, какого типа a и b комплексные числа делятся на подтипы.
Примеры определения различных комплексных чисел
> type(1 + 2*I, complex(integer));
true
> type(1/2 + 2*I, complex(fraction)), type(1/2 + 2*I, complex(rational));
false, true
> type(1/2 + 3/2*I, complex(fraction));
true
> type(1.0 + 2.0*I, complex(float)), type(1.0 + 2/3*I, complex(float));
true, true
> type(1/2 + 3/2*I, complex(float)), type(1/3 + 3/2*I, complex(numeric));
false, true
Для получения реальной и мнимой части могут быть использованы функции Re(x) и Im(x).
2.3.1.4Boolean.
Имеется три значения типа boolean: true, false, FAIL (неопределённая истинность). Maple использует трёхзначную логику. Выражения, имеющие тип boolean, строятся при помощи логических операторов (not, and, xor, or, implies) и операторов отношения (<, <=, >, >=, <>). Логические операторы применяются к логическим подвыражениям; все операторы отношения к числовым (numeric). Операторы отношений = и <> применимы к комплексным числам. Для получения значения логического выражения необходимо воспользоваться функцией evalb.
Примеры логических выражений
1. Примеры выражений с типом numeric
> x:=1: y:= 2: z:= 0:
> A:= evalb(x=z); B :=evalb(x < y);
A := false
B := true
> evalb(x=z) xor evalb(x < y);
true
2. Пример выражений с комплексными числами
> с1:= 2 + 3*I: c2:= 3 + 2*I:
> evalb(c1=c2), evalb(c1<>c2);
false, true
2.3.1.5algebraic.
Алгебраический (algebraic) тип включает типы: «+», «-», «^», complex, extended_numeric, functions, name, indexed, uneval, zppoly, series,… Типы complex, extended_numeric, name (символьное имя) и indexed (индексированное имя) описаны выше.
Тип «+» — это выражения содержащие сумму/разность произведений переменных, функций, радов и других алгебраических подтипов.
Примеры типа «+»; тип третьего выражения не «+»
> type(2*x+z*y-sin(z), `+`), type(z*x+y, `+`), type(x+x, `+`);
true, true, false
Отметим, что nops(2*x+z*y-sin(z)) вернёт 3, а op(2*x+z*y-sin(z)) — 2*x, z*y, -sin(z).
Тип «*» — это выражения содержащие произведение/частное степеней переменных, функций,...
Примеры типа «*»; тип третьего выражения не «*»
> type(x*sin(y), `*`), type(x/sin(y), `*`), type(x^y, `*`);
true, true, false
Отметим, что nops(x*sin(y)) вернёт 2, а op(x*sin(y)) — x, sin(y).
Тип «^» — это выражение содержащее степени.
Примеры типа «^»; тип третьего и четвертого выражений не «^»
> type((x+y)^z, `^`), type((x*y)^z, `^`), type(x*y^z, `^`), type(x^z+x, `^`);
true, true, false, false
Отметим, что nops((x+y)^z) вернёт 2, а op((x+y)^z) — x+y, z.
Тип «function» — это выражения вида name([arg1[, arg2,…]).
[Здесь в скобках указаны необязательные элементы — аргументы]
Примеры типа «function»; тип третьего выражения не является типом «function»
> type(f(), function), type(f(x), function), type(x*f(x), function);
true, true, false
