Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MAPLE.doc
Скачиваний:
221
Добавлен:
24.03.2015
Размер:
1.52 Mб
Скачать

8. Внутренняя структура объектов Maple. Подстановка и преобразование типов. Преобразования чисел с разным основанием

В Maple возможна работа с числами, имеющими различное основание (base), в частности, с двоичными числами (основание 2 — binary), восьмеричными (основание 8 — octal) и шестнадцатиричными (основание 16 — hex). Функция convert позволяет легко преобразовывать форматы чисел:

> convert(12345,binary);

11000000111001

> convert(%,decimal,binary);

12345

> convert(12345,octal);

30071

> convert(123456,hex);

1E240

> convert(%,decimal,hex);

123456

Помимо приведенных вариантов функция convert имеет еще ряд других форм. С ними можно познакомиться с помощью справки по этой мощной функции. В дальнейшем будет приведен ряд других применений этой функции.

Контроль за типами объектов

Выражения и их части в Maple рассматриваются как объекты. В ходе манипуляций с ними важное значение имеет контроль за типом объектов. Одной из основных функций, обеспечивающих такой контроль, является функция whattype(object), возвращающая тип объекта, например string, integer, float, fraction, function и т.д. Могут также возвращаться данные об операторах. Примеры применения этой функции даны ниже (файл control):

> whattype(2+3);

integer

> whattype(Pi);

symbol

> whattype(123./5);

float

> whattype(1/3);

fraction

> whattype(sin(x));

function

> whattype([1, 2, 3, a, b, c]);

list

> whattype(a+b+c);

+

> whattype(a*b/c);

*

> whattype(a^b);

^

> whattype(1+2+3=4);

=

С помощью функции type(object,t) можно выяснить, относится ли указанный объект к соответствующему типу t, например:

> type(2+3,integer);

true

> type(sin(х),function);

true

> type(hello,string);

false

> type("hello",string);

true

> type(1/3,fraction);

true

При успешном соответствии типа объекта указанному (второй параметр), функция type возвращает логическое значение true, в противном случае — false.

Для более детального анализа объектов может использоваться функция hastype(expr, t), где expr — любое выражение и t — наименование типа подобъекта.

Эта функция возвращает логическое значение true, если подобъект указанного типа содержится в выражении expr. Примеры применения этой функции даны ниже (файл control):

> hastype(2+3,integer);

true

> hastype(2+3/4,integer);

false

> hastype(2*sin(x),function);

true

> hastype(a+b-c/d,`+`);

true

Еще одна функция — has(f,x) — возвращает логическое значение true, если подобъект х содержится в объекте f, и false в ином случае:

> has(2*sin(х),2);

true

> has(2*sin(x), `/`);

false

> has(2*sin(x),3-1);

true

Следует отметить, что соответствие подобъекта выражения указанному подобъекту понимается в математическом смысле. Так, в последнем примере подобъект «3-1», если понимать его буквально, в выражении 2*sin(x) не содержится, но Maple-язык учитывает соответствие 3-1=2, и потому функция has в последнем примере возвращает true.

Функция has может использоваться для выявления той или иной математической операции, оператора или функции. Однако надо соблюдать определенные правила, поскольку выражение, анализируемое функцией has оценивается и исполняется. Внимательно проанализируете приведенные ниже примеры:

> has(2*sin(2),sin);

true

> has(2*sin(2),'sin');

true

> has(2*sin(2.), 'sin');

false

Здесь надо учесть, что выражение 2*sin(2) после оценки и исполнения не меняется, поскольку Maple, при целочисленном аргументе функции синуса, не вычисляет ее и вычисленное выражение совпадает с исходным и содержит функцию синуса. Однако sin(2.) уже вычисляется и становится числом. Именно поэтому в последнем примере функция sin уже не обнаруживается. Подобное имеет место и в ряде других примеров с функцией интегрирования:

> has('int(х^2,х)',int);

true

> has(int(х^2,х),int);

false

> int(х^2,х);

> has(int(х^2,х), х^3/3);

rue

Столь же поучителен пример с идентификацией функции интегрирования. Так, has(int(х^2, х), int); дает false, поскольку интеграл оценивается и вычисляется, что ведет к подмене выражения на х^3/3 уже не содержащего признаков интегрирования. Это и поясняют два последних примера, в которых вычислено значение интеграла и функция has дает значение true для значения интеграла. В тоже время заключение int(x^2,x) в апострофы позволяет найти имя функции интегрирования int, поскольку исходное выражение в этом случае представлено в неисполняемой форме и содержит обращение к этой функции.

Еще одна иногда полезная функция контроля выражений depends(f,x) возвращает true, если х входит в f и false в противном случае. При этом надо также помнить, что функция (выражение) оценивается и исполняется. Следующие примеры хорошо иллюстрируют сказанное:

> depends(2+2*sin(x),х);

true

> depends(int(х^2,х),х);

true

> depends(int(х^2,х=0..1), х)

false

В последнем примере вычисленное выражение это уже просто число, в нем х не содержится, а потому и получено значение false.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]