Как создать свой тип данных в maple

REDMOND

Лекция № 4 Тема: «Типы данных системы Maple»

Maple- один из самых мощных языков программирования математических задач, превосходящий по своим возможностям Fortran, Algol, PL, Basic, Pascal и др.

Алфавит языка

26 латинских букв (a – z), 26 прописных (A – Z);

Арабские цифры: 0 – 9;

Альтернативные символы:

Специальные символы:

% — системная переменная, хранящая результат предшествующих операций;

: — конец оператора без вывода результатов в ячейку вывода;

; — фиксатор выражения с выводом результата вычисления в ячейку вывода;

# — указатель программного комментария;

" — ограничитель строки (например, ‘string’);

:= — оператор присваивания (например, х:=5);

: : — указатель типа переменной например, n::integer или z: -.complex).

Зарезервированные слова: and, beak, by, catch, description, do, done, else, end, error, export, finally, for, from, global, if, in, intersect, local, minus, mod, module, next, not, od, option, options, or, proc, quit, read, return, save, stop, then, to, try, while.

Типы данных

Простые типы данных

Числа и числовые константы

Вещественные с точкой;

Вещественные с мантиссой порядком (мантисса отделяется от порядка пробелом);

Комплексные числа (I = (-1) 2 )

Преобразование чисел с разным основанием

>convert (12345, binary);

> convert (%, decimal, binary);

> convert (12345, octal);

>convert (12345, hex);

> convert (%, decimal, hex);

Данные множественного типа

Любые выражения могут включаться также в наборы. Такие наборы в виде множеств создаются с помощью фигурных скобок < >:

Для создания упорядоченных наборов — списков — служат квадратные скобки [ ]:

Массивы, векторы, матрицы

Как отмечалось, важным типом данных являются списки (lists). Они создаются с помощью квадратных скобок, например:

[1,2,3,4] — список из четырех целых чисел;

[1. ,2.34,5] — список из двух вещественных и одного целого числа;

[а,b.’Привет’] — список из двух символов (переменных) и строковой константы;

[sin(x), 2*cos(x) ,a ^ 2-b] — список из трех математических выражений.

Для создания векторов (одномерных массивов) и матриц (двумерных массивов) служит функция array. Обычно она используется в следующих формах:

аrrау[а. .b,s1] — возвращает вектор с индексами от а до b и значениями в одномерном списке s1;

аrrау[а. .b,c. .d,s2] — возвращает матрицу с номерами строк от а до b, номерами столбцов от с до d и значениями в двумерном списке s2.

Векторы и матрицы создаются с помощью функции array и являются отдельным типом данных. Элементами векторов и массивов могут быть константы, переменные, выражения, списки и иные объекты. Эти элементы являются индексированными переменными и их положение указывается индексами. В принципе, размерность массивов, создаваемых списками, не ограничена и массивы могут быть многомерными.

Они задают данные с произвольной индексацией. Для создания таблиц служит функция table, которая при вызове в простейшем виде table[] создает шаблон пустой таблицы:

Пустая таблица резервирует память под данные. Когда параметром функции table является список выражений, он выводится в естественном порядке расположения элементов таблицы, но с произвольным порядком индексации:

В конце приведенных примеров показано, как можно выделить отдельные компоненты таблицы и вывести значения и индексы таблицы с помощью функций entries и indices.

REDMOND

Следующие примеры показывают, что таблицу можно использовать для выполнения математических преобразований:

Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на отрицательный синус и синуса на косинус

Строки и комментарии

Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев. Символов рассматривается как строка, если она заключена в обратные апострофы, то есть в знаки ‘. Два апострофа подряд формируют апостроф как знак символьной строки, например `abc«def ` дает строку abc`def. Любое математическое выражение может входить в строку, разумеется, оно при этом не выполняется:

> ‘2+2 не всегда "четыре"’;

2+2 не всегда ‘четыре’

Неисполняемые программные комментарии

Любой текст после знака # рассматривается как невыводимый (неисполняемый) программный комментарий — даже если это математическое выражение.

> 2+3;#Это пример. А это выражение не вычисляется: 4+5

Константы — это простейшие именованные объекты, несущие заранее предопределенные значения. Их имена (идентификаторы) также заранее определены и не могут меняться. Подробную информацию о константах можно найти, исполнив команду ?constant.

Обычные числовые константы не имеют имени и представлены просто числами, типы которых были указаны выше. Можно считать, что именем такой константы является само ее значение. Например, в выражении 2*sin(1.25) числа 2 и 1.25 являются числовыми константами. При этом указание десятичной точки делает константу действительным числом — например, 2 — это целочисленная константа, а 2., 2.0 или 1.25 — это уже действительные константы

Строковыми константами являются произвольные цепочки символов, заключенные в обратные апострофы, например ‘Hello’, ‘Привет’, ‘My number’ и т. д. Числа, заключенные в апострофы, например ‘123456’, также становятся строковыми константами, которые нельзя использовать в арифметических выражениях. Строковые константы представляют значения строковых переменных. В них можно использовать символы кириллицы при условии, что соответствующий шрифт имеется.

Встроенные в ядро константы

Есть также ряд констант, которые правильнее считать заведомо определенными глобальными переменными:

false — логическое значение «ложно»;

gamma — константа Эйлера, равная 0.5772156649. ;

infinity — положительная бесконечность (отрицательная задается как infinity);

true — логическое значение «истинно»;

Catalan — константа Каталана, равная 0.915965594. ;

FAIL — специальная константа (см. справку, выдаваемую по команде ?FAIL);

I — мнимая единица (квадратный корень из -1);

Pi — представляет константу = 3.141.

Любопытно, что в этот список не входит основание натурального логарифма — число е. В качестве этой константы рекомендуется использовать ехр(1). Она отображается как жирная прямая буква Е. A exp(l.0) выводит 2.71828. (что и следовало ожидать).

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Лекция 3 Тема: Основные объекты (определение, ввод, действия с ними). Maple V работает с числами следующего типа:

1 Лекция 3 Тема: Основные объекты (определение, ввод, действия с ними). 1. Числа 2. Константы 3. Строки. 4. Переменные, неизвестные и выражения 5. Последовательности, списки, множества Числа. Maple V работает с числами следующего типа: целыми десятичными (О, 1, 123, -456 и т.д.), рациональными в виде отношения целых чисел (7/9, 123/127 и т.д.), радикалами, вещественными с мантиссой и порядком (1.23E5, E-10) комплексными (2+3*I) Целые числа задаются в виде последовательности цифр от 0 до 9. Maple может работать с целыми числами произвольной величины, количество цифр практически ограничено числом Большие числа, которые не помещаются на одной строке области вывода, Maple переносит на следующую строку, используя символ обратного слэша (\). Кроме стандартных арифметических операций, к кторым относятся сложение, вычитание, умножение, деление и вычисление факториала (!), Maple предлагает достаточно большой набор команд, позволяющий выполнить действия, специфичные при обработке целых чисел. Получить список всех команд для работы с целыми числами можно, набрав команду:?integer. Приведем некоторые из этих команд: ifactor разложение на простые множители iquo вычисление частного при операции целого деления irem вычисление остатка при операции целого деления igcd нахождение наибольшего общего делителя двух целых чисел isprime проверка, является ли целое число простым

2 Обыкновенные дроби задаются с помощью операции деления лвух целых чисел. Заметим, что Maple автоматически произвадит сокращение дробей. Над обыкновенными дробями можно выполнять все основные арифметические операции. Если при задании дроби ее знаменатель сокращается, то такая "дробь" трактуется программой Maple как целое число. Для преобразования обыкновенной дроби в десятичную служит команда evalf( ). Второй параметр этой команды задает число значащих цифр. Заметим, что десятичное представление всего лишь аппроксимация точной величины, представленной обыкновенной дробью, т.е. дробь и ее десятичное представление не являются идентичными объектами Maple. Радикалы задаются как результат возведения в дробную степень целых или дробных чисел, или вычисления из них же квадратного корня функцией sqrt( ), или корня n-ой степени функцией surd(число, n). В Maple возведение в степень задается символом (^) или последовательностью двух звездочек (**). При задании радикалов также производятся всевозможные упрощения, связанные с вынесением из-под знака радикала максимально возможной величины. Вычисления с целыми, дробями и радикалами являются абсолютно точными, так как при работе с этими объектами Maple не производит никаких округлений в отличие от чисел с плавающей точкой. Числа с плавающей точкой задаются в виде целой и дробной частей, разделенных десятичной точкой. Их можно представтить также, используя так называемую экспоненциальную форму записи ( для указания порядка применяется символ e или E). Если в выражении присутствует число с плавающей точкой, то результатом вычисления такого "смешанного" выражения будет число с плавающей точкой. Если в выражении присутствует радикал, то он вычисляется точно, а коэффициент при нем вычисляется либо точно, либо в виде числа с плавающей точкой в зависимости от вида сомножителей.

3 Комплексные числа. Для мнимой единицы в Maple используется констаната I. Задание комплексного числа ничем не отличается от его обычного задания в математике ( например 2+3*I или d+k*i). Если хотя бы одна из частей комплексного часла (действительная или мнимая) вычисляются в виде числа с плавающей точкой, то и результат будет таким же. Некоторые команды для работы с комплексными числами: Re( ) Im( ) выделение действительной части комплексного числа выделение мнимой части комплексного числа argument( ) вычисление аргумента комплексного числа conjugate( ) построение комплексно-сопряженного числа Константы. Maple содержит целый ряд предопределенных именованных констант — таких, к значениям котрых можно обращаться по имени. Часть этих констант не может быть изменена. К ним относятся: false -логическое значение "не истинно"; gamma -константа Эйлера ( ); infinity -положительная бесконечность; true -логическое значение "истинно"; Catalan -константа Каталана ( ); FAIL I Pi -специальная константа, используется в качестве третьего значения при вычислении функций трехзначной логики; -мнимая единица; -константа р= Число е задается как exp(1). Константы, значения которых могут быть переопределены: Digits -задает число значащих цифр для чисел с плавающей точкой (по умолчанию 10);

4 -определяе количество членов в Order разложении функции в ряд Тейлора (по умолчанию 6); Посмотреть все константы, определенные в Maple, можно, исполнив команду:?ininame Кроме перечисленных на странице Cправки констант все прерменные, имена которых начинаются с _Env, по умолчанию являются системными константами Maple. Строки. Строки — любой набор символов, заключенный в ДВОЙНЫЕ кавычки. Длина строки в Maple практически не ограничена и может достигать на 32-битных компьютерах длины символов. Если идут подряд две строки, разделенные символамиразделителями (пробел, табуляция или переход на новую строку), то в обрасти вывода эти две строки соединяются в одну, причем, без пробела между ними. Соединение строк можно осуществить и с помощью операции конкатенации, или обращением к функции cat(строка 1, строка 2). Строка представляется как одномерный массив, поэтому можно использовать индекс (или диапазон) для выделения элемента (или подстроки) из заданной строки. Переменные, неизвестные и выражения. Каждая переменная Maple имеет имя, представляющее последовательность латинских символов, начинающихся с буквы, причем строчные и прописные буквы считаются различными. Кроме букв в именах переменных могут использоватьсчя цифры и знак подчеркивания, но ПЕРВЫМ символом имени должна быть БУКВА. В качестве имен запрещено использовать зарезервированные слова языка Maple (см. Лекцию 1), а также защищенные слова (справку по ним можно получить, выполнив команду?protect). В Maple можно задавать переменные с

5 именами, содержащими пробелы, но для этого их следует заключать в обратные кавычки. Выражение представляет собой комбинацию имен переменных, чисел и, возможно, других объектов Maple, соединенных знаками допустимых операций. Если в выражении используется переменная, которой не присвоено никакого числового значения, то такая переменная рассматривается системой Maple как неизвестная величина, а выражение, содержащее неизвестные, называется символьным выражением. Именно для работы с такими выражениями прежде всего и разрабатывался Maple. Важной операцией в Maple, связанной с выражениями, является операция присваивания (:=). Она имеет следующий синтаксис: переменная := выражение; Здесь в левой части задается имя переменной, а в правой — любое выражение, которое может быть числовым, символьным или просто другой переменной. Переменные позволяют хранить и обрабатывать разнообразные типы данных. При этом по умолчанию переменная Maple имеет тип symbol, предсталяющий символьную переменную, и ее значением является ее собственное имя. При присвоении перемнной какого-нибудь значения, ее тип изменяется на тип присвоенного ей значения. Последовательности, списки, множества. Последовательность — это ряд выражений, разделенных запятыми и завершенных фиксатором: Последовательность является базовым объектом Maple, на основе которого строятся другие сложные объекты. Последовательность сохраняет порядок следования выражений и может содержать повторяющиеся элементы. Ее можно мыслить как последовательность выражений, перенумерованных натуральными числами,начиная с единицы.

6 В связи с этим, можно получить значение любого элемента последовательности, используя индексную форму записи — после имени переменной в квадратных скобках задать индекс элемента. Однако присвоить новое значение элементу последовательности с использованием индексной формы обращения нельзя. Использование последовательностей. 1. Если этот тип данных передается в качестве параметра функции Maple, то каждый элемент рассматривается как соответствующий параметр функции. (Пример с вычислением интеграла.) 2. Использование последовательности в качестве одного из операндов приводит к выполнению этой операции для каждого ее элемента в качестве соответствующего операнда и формирования новой последовательности.(пример с созданием новой последовательности) 3. Использование последовательности переменных в ЛЕВОЙ части операции присваивания и последовательности значений в ПРАВОЙ приводит к множественному присваиванию с помощью одной операции. Создание последовательностей. Для создания длинных последовательностей, элементы которых подчиняются некоей закономерности, можно использовать каманду seq( ) и операцию повторения $. 1) Команда seq( ) имеет две формы: seq(f,i=m..n) seq(f,i=x) В них f — выражение, зависящее от переменной, имя которой определяется параметром i, m и n -числа, определяющие диапазон изменения переменной i с шагом 1, X может быть списком, множеством, суммой, произведением или строкой. (В последнем случае переменная i последовательно принимает значения, равные символам строки).

7 2) Операция повторения $ может быть унарной и бинарной. В первом случае она применяется к диапазону m..n, где m и n — числа; а во втором случае первым операндом является выражение, зависящее от переменной, которая указана во втором операнде, содержащем также операцию диапазон. Список — упорядоченная последовательность выражений, заключенная в квадратные скобки. Множество — неупорядоченная последовательность выражений, заключенная в фигурные скобки. Свойства списка: В списке все повторяющиеся элементы существенны, т.е. список может содержать повторяющиеся элементы, стоящие на разных местах. Списки сохраняют порядок своих элементов, поэтому с помощью индекса можно получить значение любого элемента списка Индексной форме элемента списка МОЖНО присвоить новое значение, изменив тем самым значение этого элемента. Свойства множества: В множестве все повторяющиеся элементы игнорируются, т.е. повторяющимся элементам последовательности во множестве будет соответствовать один элемент. При создании множества порядок его элементов определяется системой Maple и может меняться от сеанса к сеансу при работе с одним и тем же рабочим листом. Но с помощью индекса можно получить значение любого элемента списка, если "выцепить" этот элемент сразу после вывода множества в области вывода. Индексной форме элемента списка НЕЛЬЗЯ присвоить новое значение. Чтобы изменить элемент множества, его следует удалить операцией minus, а затем добавить новый элемент операцией union (разность и объединение).

8 При выборе нескольких элементов списка или множества и помощью индекса можно использовать объект диапазон, приче положительные значения индекса соответствуют отсчету элементов слева направо, а отрицательные -справа налево. Все элементы списка или множества можно вывести, указав в качестве индекса диапазон [1..-1]. (Значение индекса равное -1 соответствует последнему элементу списка или множества.) Команды для структурной обработки списков и множеств. Часто возникает необходимость выполнить какую-либо команду или вычислить функцию применительно к каждому элементу списка или множества; выделить элементы, удовлетворяющие некоторому условию и др. Команды map( ) и map2( ) позволяют применить функцию или команду, заданную первым параметром, ко свем элементам списка или множества, возвращая, соответственно, список или множество. Синтаксис этих команд: map(функция, список множество, [пар2, пар3. парn]); map2(функция, пар1,список множество, [ пар3. парn]); Если для выполнения функции, заданной первым параметром команды map ( ), необходимы дополнительные параметры, то их следует задать после списка или множества. В команде map2( ) элементы списка или множества передаются в качестве второго параметра функции, определенной первым параметром. Команда seq( ) формирования последовательности может также поэлементно обрабатывать список или множество, формируя при этом (в зависимости от вида скобок или их присутствия/отсутствия) список, множество или последовательность. Команда add( ) формирует сумму элементов списка или множества, команда mul( ) — произведение элементов списка или множества.

9 Maple позволяет выбирать из списка или множества элементы, удовлетворяющие некоторому условию. Для этого прежде всего необходимо определить функцию-условие, результатом работы которой будет булево значение true или false. А затем можно воспользоваться команодой select(функция-условие, список множество ) Действие команды remove(функция-условие, список множество) противоположно действию команды select( ). Она возвращает список/множество, состоящий из элементов, не удовлетворяющих условию булевой функции. Выполнить обе операции одновременно позволяет команда selectremove( ), которая возвращает последовательность двух списков, первый из которых представляет результат выполнения команды select( ), а второй — командыremove( ). Линейное объединение двух списков можно реализовать с помощью команды op(выражение список множество ). Эта команда предназначена, вообще говоря, для выделения операндов выражения в виде последовательности. Так как операндами списка или множества являются его элементы, то результатом работы этой команды со списком множеством будет последовательность, которую можно "оформить" с помощью скобок в виде множества или списка. Более сложные объединения списков реализуются командой zip( ), имеющей следующий синтаксис: zip(бинарная функция, список1, список2); zip(бинарная функция, список1, список2, значение); Первая из команд работает так: бинарная (двух аргументов) функция выполняется, последовательно используя в качестве своих параметров элементы двух списков, формируя новый список из вычисленных значений. Длина полученного списка равна длине наименьшего из переданных (список1 и список2). Вторая команда работает аналогично, но заданный четвертый параметр (значение) используется в качестве элементов списка наименьшей длины при продолжении последовательного выбора элементов списка большей длины.

10 Т.е. короткий список дополняется элементами "значение" до длины большего списка. Таким образом, команда zip( ) формирует список, длина которого равна длине наибольшего списка-параметра. Массивы. Массив является дальнейшим развитием концепции списка. Если список можно мыслить как перенумерованную последовательность, индексы которой могут принимать только положительные целые значения (нумерация обязательно начинается с единицы), то в массиве каждый элементтакже связан с индексом, однако не ограничен одной размерностью (массив может иметь много размерностей, каждую со своим индексом), причем индексы могут принимать наряду с целыми положительными и отрицательные значения, и нуль. Создание массивов.. Создать массив в Maple можно несколькими способами. Простейший из них — использование функции array( ) стандартной библиотеки. Синтаксис создания массива следующий: array(границы, список, опции ); Параметр границы представляет диапазон(ы) изменения индекса(ов) массива (для многомерного массива диапазоны задаются через запятую). Список задает значения элементов массива, причем для двумерного массива элементами списка являются списки, т.е. этот параметр является списком скписков. Параметр опции используется для задания массивов специального вида. Этот параметр может принимать следующие значения: symmetric, antisymmetric, sparse, identity, diagonal, для задания, соответственно, симметричных, антисимметричных, разреженных, единичных и диагональных массивов. Все пераметры этой функции являются необязательными, однако, либо параметр границы, либо список значений должен обязательно присутствовать. Для задания вектора и матрицы можно использовать соответственно команды vector( ) и matrx( ). Синтаксис этих команд: vector(n,[элемент1, элемент2. ] ); matrx(n, m, [элемент1, элемент2. ] ) Здесь целые величины n и m задают

11 размерности вектора и матрицы, а значения их элементов задаются в виде простого списка. Значения элементов вектора или матрицы не обязательно задавать при создании этих объектов. Можно позднее с помощью индексной ссылки на элементы вектора или матрицы (в квадратных скобках) присвоить им значения. Для отображения содержимого вектора или матрицы используется команда print(v) или eval(v), так как переменная, содержащая сложные объекты, вычисляется не полностью, а только до своего имени. Для отображения результатов ВЫЧИСЛЕНИЙ с матрицами и векторами служит команда evalm(v). Эта команда отображает результат вычислений на уровне элементов. Над матрицами и векторами (без подключения специальных пакетов linalg и LinearAlgebra) возможны любые действия, заданные операторами сложения (+), вычитания (-), некоммутативного умножения (&*), деления (/) и возведения в степень (^). Таблицы. Пакеты linalg и LinearAlgebra содержат множество функций для структурных преобразований матриц и векторов, команд выполнения матричных операций. Перечень всех доступных команд можно найти на страницах справки, отображаемых командами?linalg (для пакета linalg) и?laoverview (для нового пакета LinearAlgebra, а дальше — путешествуйте по ссылкам, находящимся на этой странице).

12 Таблица является дальнейшим развитием массива, как структуры данных. В ней в качестве индекса можно использовать не только целые числа, а всѐ, что угодно. Для создания таблицы используется функция table( ). Еѐ параметрами являются индексная функция (см. параметр опция для команды array( ))и список или множество пар индекс=значение. Первый параметр необязательный. Таблицы достаточно удобный объект, когда в одном "массиве" надо хранить данные, относящиеся к какому-либо реальному объекту, и ссылаться на них по индексам, предсавляющим естественную запись их наименований. Maple выводит элементы таблицы в произвольном порядке, но, используя соответствующий индекс, можно получит значение любого элемента таблицы.

Создайте тип данных: список списков чисел в Mapl 13

Создайте матрицу (список из вложенных списков) размера N x M
Создайте матрицу (список из вложенных списков) размера N x M (фиксируются в программе), заполненную.

Написать программу, которая получает список из списков из списков чисел
Всем привет, мне нужно написать программу, которая получает список из списков из списков чисел.

Копирование данных двумерного массива состоящего из списков в список списков.
Для нахождения МСТ (минимального остового дерева) написал функцию, которая принимает масив — гарф.

Список списков списков чисел
Всем привет) Задание: l1 — список списков списков чисел. Необходимо получить список чисел l2.

Проверка данных (тип список), список возможных вариантов при вводе вручную
Можно ли в инструменте Проверка данных (при типе данных &quot;Список&quot;) выводить список возможных.

Преобразование данных из txt в список списков
Здравствуйте! Прошу помощи. Требуется преобразование данных из текстового файла в разделяемый.

Создайте предикат, упорядочивающий список целых чисел по возрастанию
2. Создайте предикат, упорядочивающий список целых чисел по возрастанию (список одноуровневый).

Как организовать хранение увеличивающихся данных — список списков?
Хочу написать программу, решающую пятнашки. В сети нашёл исходники аж 2 шт, оба работают.

REDMOND

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *