Типы данных системы Maple 7
Язык Maple (или Maple-язык) является одновременно входным языком общения с Maple 7 и языком ее программирования. Входящие в него средства (прежде всего операторы и функции) подобраны настолько полно и удачно, что при решении подавляющего большинства типовых математических задач от пользователя не требуется знаний даже основ программирования. Для решения нужной задачи обычно достаточно составить алгоритм и подобрать набор нужных для его реализации функций и иных средств Maple-языка.
В то же время Maple-язык — один из самых мощных языков программирования математических задач, содержащий почти 3000 операторов, команд и функций, входящих в ядро, основную библиотеку и пакеты функций Maple 7. При этом относящаяся к традиционному программированию часть Maple-языка реализована с помощью довольно скромного набора специальных знаков и зарезервированных слов.
Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.
Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):
К специальным одиночным и составным знакам относятся элементы синтаксиса языка:
- % — системная переменная, хранящая результат предшествующей операции;
- : — фиксатор выражения, предотвращающий вывод результата вычисления в ячейку вывода;
- ; — фиксатор выражения, дающий вывод результата вычисления в ячейку вывода;
- # — указатель программного комментария;
- » — ограничитель строки (например, ‘string’);
- := — оператор присваивания (например, х:=5);
- : ; — пустой оператор;
- :: — указатель типа переменной (например, n::integer или z: -.complex);
- \ — знак обратного деления, который имеет множественные значения в зависимости от контекста (см. справку по этому знаку — backslash).
Комментарии в программе, не выводимые в ячейки вывода, задаются после символа #. В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов недопустимо.
2. Зарезервированные слова
Зарезервированные слова
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 42 зарезервированных слов Maple 7 дан ниже.
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак — (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи —3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например 5-2 или а-b. Соответственно двойное назначение имеет и знак •+, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ * (например, 2*1(Г100 или 2*1(Г-100). Для возведения числа в степень наряду с оператором *• можно использовать и составной оператор ** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (а+b)/с эквивалентно (а + b) / с.
По набору операторов и функций Maple-язык намного превосходит любой универсальный язык программирования. Это позволяет наряду с обычными программными конструкциями задавать множество специальных конструкций, подчас резко упрощающих запись математических выражений. К примеру, возможна работа со списками имен функций. Язык Maple имеет множество операций над символьными выражениями и гибкий аппарат создания и преобразования типов данных и результатов вычислений.
Для большинства пользователей возможности языка Maple кажутся явно избыточными, и большинство наиболее распространенных операций в нем реализуется несколькими способами. Однако каждый пользователь волен выбирать из множества возможностей именно те, которые ему необходимы в конкретной предметной области. Поскольку таких областей превеликое множество, то обширные возможности Maple лишними не являются.
3. Выражения и основы работы с ними
Выражения и основы работы с ними
Выражения и их ввод
Фактически Maple 7 — это система для манипулирования математическими выражениями.
Выражение в системе Maple — это объект, вполне соответствующий сути обычного математического выражения. Оно может содержать операторы, операнды и функции с параметрами. В этом уроке выражения записываются на Maple-языке без использования специальных средств для их представления в естественном математическом виде. Благодаря этому запись выражений и приводимых примеров одинаково пригодна для любой реализации системы Maple — даже под MS-DOS. Такая запись получается наиболее короткой, ее можно выводить и распечатывать без применения графических средств. Кроме того, она соответствует виду, принятому в справочной системе Maple.
Однако пользовательский интерфейс системы Maple 7 для Windows позволяет представлять как вводимые, так и выводимые выражения в самых различных формах, в том числе в естественном математическом виде — примеры этого многократно приводились и будут приводиться в дальнейшем. Maple 7 имеет многочисленные функции преобразования форматов, позволяющие менять форму представления данных.
Выражения в Maple могут оцениваться и изменяться в соответствии с заданными математическими законами и правилами преобразований. Например, функция упрощения выражений simplify способна упрощать многие математические выражения, записанные в качестве ее параметра (в круглых скобках):
Символьные преобразования и вычисления математических выражений более подробно будут рассмотрены в следующем уроке.
Для выполнения любых математических операций необходимо обеспечить ввод в систему исходных данных — в общем случае математических выражений. Для ввода их и текстовых комментариев служат два соответствующих типа строк ввода. Переключение типа текущей строки ввода осуществляется клавишей F5. Строка ввода математических выражений имеет отличительный символ >, а строка ввода текстов такого признака не имеет.
В строке ввода может располагаться несколько выражений. Фиксаторами (указанием, что выражение окончено) их могут быть символы ; (точка с запятой) и : (двоеточие). Символ «:» фиксирует выражение и задает вывод результатов его вычисления. А символ «:» фиксирует выражение и блокирует вывод результатов его вычисления. Фиксаторы выполняют также функцию разделителей выражений, если в одной строке их несколько.
Ввод выражения оканчивается нажатием клавиши Enter. При этом маркер ввода (жирная мигающая вертикальная черта) может быть в любой позиции строки. Если надо перенести ввод на новую строку, следует нажимать клавиши Shift и Enter совместно. С помощью одного, двух или трех знаков % (в реализациях до Maple V R5 это был знак прямых кавычек «) можно вызывать первое, второе или третье выражение с конца сессии:
Особая роль при вводе выражений принадлежит знакам прямого апострофа (одиночного ‘ или двойного »). Заключенное в такие знаки выражение освобождается от одной пары (закрывающего и открывающего знаков ‘):
Некоторые другие возможности обрамления выражений апострофами мы рассмотрим позже. Наиболее важная из них — временная отмена выполненного ранее присваивания переменным конкретных значений.
Для завершения работы с текущим документом достаточно исполнить команду quit, done или stop, набранную в строке ввода (со знаком ; в конце).
Как правильно создать собственный тип данных возвращающий два значения в C#?
Возникла необходимость сделать собственный тип данных (для удобности), но годного описания по этой теме на C# не нашел.
Нужен тип, возвращающий двойное значение, написал что-то такое, но не уверен, что это будет правильно работать (потому что на других языках, где есть примеры создания собственных типов, выглядит все по другому).
public struct Point2D < public static TuplePoint2d( int x, int y) < var tu = new Tuple(x, y); return tu; > >
- Вопрос задан более трёх лет назад
- 4160 просмотров
1 комментарий
Оценить 1 комментарий
struct MY_TYPE_DATA < private int integer_x; public static implicit operator MY_TYPE_DATA(int _x) < return new MY_TYPE_DATA < integer_x = _x >; > public static explicit operator int(MY_TYPE_DATA count) < return count.integer_x; >public static int operator +(MY_TYPE_DATA x, int y) < return x.integer_x + y; >public static int operator +( int y,MY_TYPE_DATA x) < return y + x.integer_x; >>
вот пример кода создающий тип данных с возможностью сложения с типом int (можешь по этому же принципу добавить другие действия)
MY_TYPE_DATA c = 19; int y = 10 + c; int z = c + 10;
вот пример реализации в методе main
Решения вопроса 1
VoidVolker @VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
public class MyType < public int a = 0; public int b = 0; public MyType(int a = 0, int b = 0) < this.a = a; this.b = b; >>
И далее использовать по своему усмотрению:
public static MyType Point2d(int x, int y)
public static MyType Point2d(int x, int y)
public static MyType Point2d(int x, int y)
public static MyType Point2d(int x, int y)
Ответ написан более трёх лет назад
Нравится 1 7 комментариев
TheTalion @TheTalion Автор вопроса
Хм, похоже на правду, но только не совсем понятно как его использовать как тип. Типа вот так:
public point2d = 10,10;
VoidVolker @VoidVolker Куратор тега C#
Так я же привел пример:
`MyType result = new MyType(x, y);`

TheTalion @TheTalion Автор вопроса
Ну это же в классе. Как бы не так красиво объявляется как стандартные типы.
VoidVolker @VoidVolker Куратор тега C#
Что значит не так красиво? Это как бы стандартный метод объявления экземпляра класса. Можно еще так:
MyType r = new MyType()< a = 1, b = 2 >;

TheTalion @TheTalion Автор вопроса
VoidVolker: но public point2d = 10,10 более красиво выглядит. Почему тогда у intов и стандартных типов другой вид объявления? Вот тут вроде бы тоже просто структуру создают, но объявление красивое по итогу. https://referencesource.microsoft.com/#mscorlib/sy. ,225942ed7b7a3252
VoidVolker @VoidVolker Куратор тега C#
Так ведь int — это базовый тип. Таким образом он объявляется — это стандарт языка. Строки объявляются как текст в кавычках — и т.д. Объявление других и пользовательских классов и типов происходит согласно стандарту и никак иначе. Примеры я привел выше. Если каждый будет писать все по-своему — то никакой совместимости не будет между библиотеками и/или разными стандартами/системами. Яркий пример Forth: в нем можно хоть на лету менять синтаксис, грамматику и вообще весь компилятор/интерпретатор и все что угодно можно изменить и у него все открыто для изменения. Но совместимых между собой форт-систем практически нет — каждый программист пишет свой собственный Форт.

Только надо помнить, что такой класс — не эквивалент Tuple<>. Нужно еще, как минимум, переопределеить Equals() и GetHashCode();
Как создать свой тип данных в 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.
Следующие примеры показывают, что таблицу можно использовать для выполнения математических преобразований:

Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на отрицательный синус и синуса на косинус
Строки и комментарии
Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев. Символов рассматривается как строка, если она заключена в обратные апострофы, то есть в знаки ‘. Два апострофа подряд формируют апостроф как знак символьной строки, например `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. (что и следовало ожидать).
Основные действия с файлами Maple
Математическое моделирование в строительстве.
Реализация математических моделей в системах для решения математических и инженерных задач.
Математические модели, включающие в себя набор алгебраических уравнений. Методы проведения расчетов и анализа моделей.
Предварительно необходимо ознакомиться с основными понятиями, задачами математического моделирования в книге [1].
Рассмотрим способы реализации математических моделей на ЭВМ в современных программных комплексах для решения инженерных и научных задач.
В работе познакомимся с системой для инженерных и научных расчетов «Maple» — разработкой канадской фирмы MapleSoft (www.maplesoft.com). Данный программный комплекс был создан университетом г.Ватерлоо (Канада) и применяется во многих учебных, научных и проектных организациях по всему миру. Это одна из ведущих систем подобного рода (Maple, MathCAD, MatLAB, Mathematica).
Maple позволяет строить математические модели, проводить их исследование, отображать модели в наглядном графическом виде, и осуществлять численные расчеты с использованием разнообразных математических моделей. Одно из достоинств данной системы — это возможность осуществлять моделирование не только в численном виде, но и при необходимости, в общем — символьном, аналитическом. Кроме того, в Maple имеется огромное количество встроенных алгоритмов, позволяющих вести вычисления с использованием численных методов.
Данная работа посвящена знакомству с базовыми возможностями системы Maple. Дополнительный материал по этой системе можно почерпнуть в книгах [2], [3], [4].
Литература:
1. Сидоров В. Н. Математическое моделирование в строительстве :[Текст] : учебное пособие / Владимир Николаевич Сидоров, Вадим Каюмович Ахметов. — М.: АСВ, 2007. — 336 с.
2. Матросов А.В. Maple 6. Решение задач высшей математики и механики :[Текст] СПб: БХВ-Петербург, 2011. – 528с.
3. Дьяконов В. П. Maple 9 в математике, физике и образовании :[Текст] / В. П. Дьяконов. — М.: СОЛОН-Пресс, 2004. — 688 с.
4. Васильев А. Н. Maple 8 :[Текст] : самоучитель / А. Н. Васильев. — М.: Вильямс, 2003. — 352 с.
Порядок выполнения работы
Для выполнения лабораторной работы №1 необходимо:
1. в каждом пункте работы изучить вводную часть (она записана обычным шрифтом);
2. выполнить задания, выделенные жирным курсивным шрифтом;
3. После выполнения всех заданий сохранить файл Maple и выслать его на проверку преподавателю.
Основные действия с файлами Maple.
Цель первой лабораторной работы – познакомится с базовыми возможностями этой системы, применяемыми при проведении простейших инженерных расчетов по готовым формулам. Научиться приводить расчетный файл к оформленному, готовому для печати виду.

Создание нового файла в Maple осуществляется нажатием на кнопку на панели инструментов или через меню: File>New>Worksheet mode. При этом в настройках программы (меню Tools>Option…, закладка Interface) в пункте «Default format for new worksheets» должен быть выбран вариант «Worksheet».
Глава 2
Системы компьютерной математики, как и любые другие программные средства, работают с данными и осуществляет их обработку. Поскольку СКМ ориентированы на подготовку документов самого различного характера (в том числе электронных документов и книг), то они обладает обширным набором возможных типов данных и средствами для работы с ними. В данной главе рассмотрены типы данных систем Maple 9.5/10 и работа с ними.
2.1. Работа с простыми данными Maple-языка
2.1.1. Использование знаков алфавита
Алфавит Maple-языка (как входного, так и программирования) содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ^ и др.). Кроме того, имеется множество особых математических символов. Все они будут описаны в данной главе. Для ввода символов используется клавиатура и панели математических символов.
Имеется пять пар альтернативных символов (означающих одно и тоже):
К специальным одиночным и составным знакам относятся следующие элементы синтаксиса языка:
• % — системная переменная, хранящая результат предшествующей операции;
• : — фиксатор выражения, предотвращающий вывод результата вычисления в ячейку вывода;
• ; — фиксатор выражения, дающий вывод результата вычисления в ячейку вывода;
• # — указатель программного комментария;
• ` — ограничитель строки (например `string`);
• := — оператор присваивания (например х:=5);
• :: — указатель типа переменной (например, n::integer или z::complex);
• \ — знак обратного деления, который имеет множественные значения в зависимости от контекста (см. справку по этому знаку — backslash).
Комментарии в программе, не выводимые в ячейки вывода, в Maple 9.5 задаются после символа #. В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов нежелательно, хотя иногда и возможно.
2.1.2. Зарезервированные слова
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список зарезервированных слов в системе Maple, дан ниже.
Этими словами нельзя называть объекты пользователя.
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак – (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи ––3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например, 5-2 или а-b. Соответственно двойное назначение имеет и знак +, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ ^ (например, 2*10^100 или 2*10^-100). Для возведения числа в степень наряду с оператором ^ можно использовать и составной оператор ** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (a+b)/c эквивалентно (a + b) / c.
2.1.3. Работа с числами и арифметические вычисления
Maple обеспечивает вполне естественную работу с целыми числами. В частности обеспечивается смена знака числа и выполнение основных арифметических операций с числами. Ввиду общеизвестности арифметических операций их определения не приводятся. Ограничимся примерами простых операций с числами, приведенными ниже:


Результаты операций с целыми числами в общем случае представляются рациональными числами, являющимися отношениями целых чисел.
Десятичная точка в числах имеет особый статус — указание ее в любом месте числа, в том числе в конце, делает число вещественным и ведет к переводу вычислений в режим работы с вещественными числами. Например:
.3600000000 10 -13
Количеством выводимых после десятичной точки цифр можно управлять, задавая значение системной переменной окружения Digits:
Digits := 10 2.718281828
3.141592653589793238462643383279502884197
Как видно из этих примеров, ввод и вывод чисел имеет следующие особенности:
• для отделения целой части мантиссы от дробной используется разделительная точка;
• нулевая мантисса не отображается (число начинается с разделительной точки);
• мантисса отделятся от порядка пробелом, который рассматривается как знак умножения;
• мнимая часть комплексных чисел задается умножением ее на символ мнимой единицы I (квадратный корень из -1);
• по возможности Maple представляет численный результат в виде точного рационального числа (отношения двух целых чисел).
Для работы с числами Maple имеет множество функций. Они будут рассмотрены в дальнейшем. С помощью многофункциональной функции convert Maple может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатиричные) в десятичные числа:
2.1.4. Точная арифметика
Благодаря возможности выполнения символьных вычислений Maple, как и другие СКА, реализует точную арифметику. Это значит, что результат может быть получен с любым числом точных цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например, таких как приведены ниже:
942594775983835942085162312448293674956231279470254376832 \ 788935341697759931622147650308786159180834691162349000 \ 3549599583369706302603264000000000000000000000000
100150085022502740120
1267650600228229401496703205376
Обратите внимание на то, что в последнем примере точность резко потеряна, так как показатель степени 100.0 был задан как число с плавающей точкой. Соответственно и результат оказался в форме такого числа. Число верных цифр результата задает системная переменная Digits (по умолчанию 10).
Приведем еще пару примеров точных вычислений некоторых функций (с точностью до 150 знаков мантиссы):
2.71828182845904523536028747135266249775724709369995957496 \ 696762772407663035354759457138217852516642742746639193 \ 200305992181741359662904357290033429526
0.84147098480789650665250232163029899962256306079837106567 \ 275170999191040439123966894863974354305269585434903790 \ 7920674293259118920991898881193410327729
2.1.5. Вычисление числа π с произвольной точностью
Разработчики систем Maple и Mathematica утверждают, что в принципе возможны вычисления и с плавающей точкой с заданием до миллиона точных цифр мантиссы. Практически такая точность почти никогда не нужна, по крайней мере для физиков и инженеров. Например, всего 39 точных цифр числа π достаточно, чтобы вычислить длину окружности всей Вселенной с точностью до диаметра атома водорода. Однако истинные математики одно время были просто «помешаны» на вычислении числа π с большой точностью. Кое кто потратил на это всю жизнь. Выдающийся вклад в такие расчеты внес Рамануджан, который еще в 1916 году предложил алгоритмы и формулы для вычисления числа π с произвольной точностью.
На рис. 2.1 представлено задание одной из самых известных формул Рамануджана. Уже первый член суммы этой формулы (k= 1) дает значение числа π с погрешностью вычисления менее 3∙10 -8 . Увеличение k на 1 каждый раз увеличивает число верных десятичных знаков на 8, т. е. в сто миллионов раз! В принципе эта формула может дать до миллиарда и более точных знаков числа π!

Рис. 2.1. Проверка вычислений по формуле Рамануджана
У инженеров формула Рамануджана может вызвать приступ головной или зубной боли. Уж больно несуразна она с первого взгляда. О какой точности можно говорить, если на подавляющем большинстве языков программирования корень квадратный из двух, факториал и степень вычисляются всего с 8–15 точными знаками?
Но, системы Maple 9.5, благодаря встроенному аппарату точной арифметики, способна обеспечить эффективную проверку подобных формул. В нашем случае мы ограничились случаем n= 100 (максимальное значение k) и провели вычисления «всего» 600 цифр числа π — с тем, чтобы результаты вместились в один рисунок. И они говорит сам за себя — все цифры при вычислении числа π по формуле Рамануджана и по встроенному в Maple алгоритму полностью совпали, а вычисленная ошибка равна нулю!
2.1.6. Работа с комплексными числами
Maple, естественно, как и другие СКМ, может работать с комплексными числами вида z=Re(z)+I∙Im(z). Мнимая единица в комплексном числе (корень квадратный из -1) обозначается как I. Функции Re(z) и Im(z) возвращают действительную и мнимую части комплексных чисел. На комплексной плоскости числа задаются координатами точек (х, у) — рис. 2.2.

Рис. 2.2. Представление обычных и комплексных чисел на плоскости
Для представления чисел на рис. 2.2 используется функция pointplot(list), где list — список координат точек. Эта функция становится доступной при подключении пакета plots командой with(plots). Кроме того, использована функция вывода ряда графических объектов на один график — display (см. далее описание представления комплексных чисел).
Примеры задания комплексного числа и вывода его действительной и мнимой частей представлены ниже:
Комплексные числа обычно представляют на так называемой комплексной плоскости, у точек которой координата x задает действительную часть комплексного числа, а у (мнимая ось) показывает мнимую часть такого числа. На рис. 2.2 показано задание в виде радиус-векторов комплексного числа z=4+3I, -z и комплексно-сопряженного числа 4-3I. А на рис. 2.3 показан пример вычисления корней уравнения z^n=1 для случая n=16 (другие случаи читатель может рассмотреть самостоятельно, просто изменив n). Нетрудно заметить, что корни уравнения — комплексные числа и что на комплексной плоскости они ложатся на окружность единичного радиуса.

Рис. 2.3. Вычисление корней уравнения z^n=1 и расположение корней на комплексной плоскости

Окружность радиуса представляет абсолютное значение комплексного числа z=a+b*I. Она является геометрическим множеством комплексных чисел, образованных концом вращающегося радиус-вектора числа z вокруг его начала в точке (0, 0) комплексной плоскости, иллюстрацией чего и является частный пример рис. 2.2. Позже мы рассмотрим ряд функций для работы с комплексными числами.
2.1.7. Контроль над типами чисел
Числа могут служить объектами ввода, вывода и константами, входящими в математические выражения. Функция type(x, numeric) позволяет выяснить, является ли х числом. Если является, то она возвращает логическое значение true (истина), а если нет, то false (ложь). Например:
Дипломная работа: Создание с помощью средств пакета Maple демонстрационных материалов в виде библиотеки процедур к уроку информатики по теме «Кодирование звука»
Программа Maple (последняя версия 10.02) — своего рода патриарх в семействе систем символьной математики и до сих пор является одним из лидеров среди универсальных систем символьных вычислений. Она предоставляет пользователю удобную интеллектуальную среду для математических исследований любого уровня и пользуется особой популярностью в научной среде. Отметим, что символьный анализатор программы Maple является наиболее сильной частью этого ПО, поэтому именно он был позаимствован и включен в ряд других CAE-пакетов, таких как MathCad и MatLab, а также в состав пакетов для подготовки научных публикаций Scientific WorkPlace и Math Office for Word.
Пакет Maple — совместная разработка Университета Ватерлоо (шт. Онтарио, Канада) и Высшей технической школы (ETHZ, Цюрих, Швейцария). Для его продажи была создана специальная компания — Waterloo Maple, Inc., которая, к сожалению, больше прославилась математической проработкой своего проекта, чем уровнем его коммерческой реализации. В результате система Maple ранее была доступна преимущественно узкому кругу профессионалов. Сейчас эта компания работает совместно с более преуспевающей в коммерции и в проработке пользовательского интерфейса математических систем фирмой MathSoft, Inc. — создательницей весьма популярных и массовых систем для численных расчетов MathCad, ставших международным стандартом для технических вычислений.
Maple предоставляет удобную среду для компьютерных экспериментов, в ходе которых пробуются различные подходы к задаче, анализируются частные решения, а при необходимости программирования отбираются требующие особой скорости фрагменты. Пакет позволяет создавать интегрированные среды с участием других систем и универсальных языков программирования высокого уровня. Когда расчеты произведены и требуется оформить результаты, то можно использовать средства этого пакета для визуализации данных и подготовки иллюстраций для публикации. Для завершения работы остается подготовить печатный материал (отчет, статью, книгу) прямо в среде Maple, а затем можно приступать к очередному исследованию. Работа проходит интерактивно — пользователь вводит команды и тут же видит на экране результат их выполнения. При этом пакет Maple совсем не похож на традиционную среду программирования, где требуется жесткая формализация всех переменных и действий с ними. Здесь же автоматически обеспечивается выбор подходящих типов переменных и проверяется корректность выполнения операций, так что в общем случае не требуется описания переменных и строгой формализации записи.
Пакет Maple состоит из ядра (процедур, написанных на языке С и хорошо оптимизированных), библиотеки, написанной на Maple-языке, и развитого внешнего интерфейса. Ядро выполняет большинство базовых операций, а библиотека содержит множество команд — процедур, выполняемых в режиме интерпретации. Интерфейс Maple основан на концепции рабочего поля (worksheet) или документа, содержащего строки ввода-вывода и текст, а также графику.
Работа с пакетом происходит в режиме интерпретатора. В строке ввода пользователь задает команду, нажимает клавишу Enter и получает результат — строку (или строки) вывода либо сообщение об ошибочно введенной команде. Тут же выдается приглашение вводить новую команду и т.д. [4]
Сравнительный анализ систем компьютерной математики
Maple 7 имеет множество встроенных функций, включенных в его ядро и в пакеты.
Функция в выражениях задается вводом ее имени и списка параметров функции (одного или нескольких), заключенного в круглые скобки, например sqrt(2) задает функцию вычисления квадратного корня с параметром 2 (численной константой). Основным признаком функции является возврат значения в ответ на обращение к ней по имени (идентификатору) с указанием списка параметров функции.
§1.2 Maple-язык и его синтаксис
Знаки алфавита
Язык Maple (или Maple-язык) является одновременно входным языком общения с Maple 7 и языком ее программирования. Входящие в него средства (прежде всего операторы и функции) подобраны настолько полно и удачно, что при решении подавляющего большинства типовых математических задач от пользователя не требуется знаний даже основ программирования. Для решения нужной задачи обычно достаточно составить алгоритм и подобрать набор нужных для его реализации функций и иных средств Maple-языка.
В то же время Maple-язык — один из самых мощных языков программирования математических задач, содержащий почти 3000 операторов, команд и функций, входящих в ядро, основную библиотеку и пакеты функций Maple 7. При этом относящаяся к традиционному программированию часть Maple-языка реализована с помощью довольно скромного набора специальных знаков и зарезервированных слов.
Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.
Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):
К специальным одиночным и составным знакам относятся элементы синтаксиса языка:
· % — системная переменная, хранящая результат предшествующей операции;
· : — фиксатор выражения, предотвращающий вывод результата вычисления в ячейку вывода;
· ; — фиксатор выражения, дающий вывод результата вычисления в ячейку вывода;
· # — указатель программного комментария;
· » — ограничитель строки (например, ‘string’);
· := — оператор присваивания (например,х:=5);
· :: — указатель типа переменной (например, n::integer или z: -.complex);
· \ — знак обратного деления, который имеет множественные значения в зависимости от контекста (см. справку по этому знаку — backslash).
Комментарии в программе, не выводимые в ячейки вывода, задаются после символа #. В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов недопустимо.
Зарезервированные слова
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 42 зарезервированных слов Maple 7 дан ниже.
| and | break | by | catch | description |
| do | done | el if | else | end |
| error | export | fi | 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 | union |
| use | while |
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак — (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи — 3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например 5-2 илиа-b. Соответственно двойное назначение имеет и знак•+, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ * (например, 2*1(Г100 или 2*1(Г-100). Для возведения числа в степень наряду с оператором *• можно использовать и составной оператор** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения: = содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (а+b)/с эквивалентно (а + b) / с.
По набору операторов и функций Maple-язык намного превосходит любой универсальный язык программирования. Это позволяет наряду с обычными программными конструкциями задавать множество специальных конструкций, подчас резко упрощающих запись математических выражений. К примеру, возможна работа со списками имен функций. Язык Maple имеет множество операций над символьными выражениями и гибкий аппарат создания и преобразования типов данных и результатов вычислений.
Похожие публикации:
- Как сделать другое разрешение в archicad 19
- Как сделать сопряженное число в mathcad
- Как скачать maple 2017
- Как скачать и установить mathcad 14
Создание пользовательских типов данных в Python
В программировании на Python есть много случаев, когда может понадобиться больше одной переменной для представления определенного объекта.
Содержание:
- Зачем нужны пользовательские типы данных;
- Определение пользовательского типа данных;
- Инициализация пользовательского типа данных;
- Доступ к полям объекта пользовательского класса данных;
- Пользовательские типы данных и функции;
- Вложенные пользовательские типы данных.
Зачем нужны пользовательские типы данных?
Например, для представления одной книги, в книжном магазине, необходимо указать название книги, год издания, авторов (их может быть несколько), количество экземпляров этой книги, цена за единицу, общую стоимость всех книг или любую другую информацию:
book_title = 'Название книги' book_date = '01-01-2019' book_author = ['Автор 1', 'Автор 2'] book_price = 256 book_num = 9 book_total = book_price * book_num
Теперь есть шесть отдельных независимых переменных. Если надо будет передавать информацию о книге в какую-то функцию для дальнейшей обработки, то придется передавать каждую переменную по отдельности. Кроме того, если необходимо хранить информацию о какой-то еще книге, то придется дополнительно объявить еще шесть переменных! Такая реализация не очень эффективна и вообще, в итоге можно запутаться.
Python позволяет программистам, с помощью обычных классов, создавать свои собственные пользовательские типы данных, которые предназначены для упорядоченного хранения нестандартных данных. Проще говоря, группируют несколько отдельных переменных разных типов в единое целое.
Определение пользовательского типа данных.
Пользовательские типы данных создаются программистом с использованием синтаксиса класса:
class Book: def __init__(self, title=None, date=None, authors=None, price=0, num=0): self.title = title self.date = date self.price = price self.num = num self.total = self.price * self.num if authors is None: self.authors = [] else: self.authors = authors def __repr__(self): return f'self.__class__.__name__>(title=self.title>, date=self.date>, \ authors=self.authors>, price=self.price>, num=self.num>, total=self.total>)'
Код выше определяет тип данных Book , для хранения информации о книге в книжном магазине. Но такая запись пользовательского типа данных очень многословна, что совсем не по питонически. Для упрощенного и удобного создания пользовательских типов данных, с версии Python 3.7 введен встроенный модуль dataclasses . Этот модуль использует декоратор @dataclass и несколько вспомогательных функций для упрощенного написания пользовательских типов данных.
Посмотрим, на сколько короче можно записать тип данных Book , представленный выше:
from dataclasses import dataclass, field @dataclass class Book(): """Тип данных книга""" title: str = None date: str = None authors: list = field(default_factory=list) price: float = 0 num: int = 0 total: float = field(init=False) def __post_init__(self): # инициализация переменной `total` self.total = self.price * self.num
И это все! Коротко? На самом деле, модуль класса данных dataclasses автоматически добавит сгенерированные специальные методы __init__() и __repr__() . Этот модуль дает очень много дополнительных возможностей и полезных фич при создании собственных типов данных, а вызов функции dataclasses.field() для определенного поля, поможет его кастомизировать под свои нужды. При создании своих типов данных, обязательно используете этот модуль, т.к. он защитит вас от многих распространенных ошибок (например объявления изменчивых типов данных по умолчанию).
Примечание. модуль dataclasses не проверяет, указанный в аннотации тип переменной!
Вернемся к пользовательским типам. И так, объявленный тип содержит шесть переменных:
- title — название книги,
- date — дата выхода книги,
- authors — авторы книги.
- price — стоимость одной книги,
- num — количество книг в магазине,
- total — общая стоимость книг.
Эти переменные называются полями типа данных. Код класса Book — это простое объявление типа. Чтобы использовать тип данных Book() , необходимо просто создать его экземпляр:
>>> book = Book()
Инициализация пользовательского типа данных.
Инициализация пользовательского типа путем присваивания значений каждому члену по порядку — занятие неблагодарное и довольно громоздкое (особенно, если много полей), поэтому легче инициализировать тип сразу, при создании экземпляра класса данных. Это позволяет инициализировать некоторые или сразу все поля объявленного типа:
# создаем отдельную переменную типа Book, например для книги gold_key >>> gold_key = Book('Золотой ключик', '1989', ['А. Толстой'], 512, 7) >>> gold_key # Book(title='Золотой ключик', date='1989', authors=['А. Толстой'], # price=512, num=7, total=3584) # создаем отдельную переменную типа Book для day_watch >>> day_watch = Book('Дневной Дозор', '2006', ['В. Васильев', 'С. Лукьяненко'], 1024, 9) >>> day_watch # Book(title='Дневной Дозор', date='2006', authors=['В. Васильев', 'С. Лукьяненко'], # price=1024, num=9, total=9216)
Доступ к полям объекта пользовательского класса данных.
Для того, чтобы получить доступ к отдельным полям типа данных, используется точечная нотация. Например, в коде, приведенном ниже, используется точка для выбора значения каждого поля пользовательского типа данных:
>>> gold_key.title # 'Золотой ключик' >>> gold_key.price # 512 >>> gold_key.authors # ['А. Толстой'] >>> day_watch.title # 'Дневной Дозор' >>> day_watch.date # '2006' >>> day_watch.authors[0] # 'В. Васильев' >>> day_watch.authors # ['В. Васильев', 'С. Лукьяненко']
В этом примере, легко определить, какая переменная относится к типу gold_key , а какая к day_watch . Это обеспечивает гораздо более высокий уровень организации, чем в случае с обычными отдельными переменными.
Переменные — поля типа данных работают так же, как и простые переменные, поэтому с ними можно выполнять обычные операции доступные типу данных, к которому они относятся:
# присвоение новых значений >>> gold_key.title = 'Современный золотой ключик' >>> gold_key.title # 'Современный золотой ключик' >>> gold_key.authors.append('Неизвестный соавтор') >>> gold_key.authors # ['А. Толстой', 'Неизвестный соавтор'] >>> gold_key.date = 2021 >>> gold_key # Book(title='Золотой ключик', date=2021, authors=['А. Толстой', 'Неизвестный соавтор'], # price=512, num=7, total=3584) # операции сравнения отдельных полей >>> gold_key.total day_watch.total # True
Модуль класса данных dataclasses добавляет возможность сравнения самих типов данных с использованием хэша на основе их местоположения в памяти, как два обычных объекта.
Пользовательские типы данных и функции.
Большим преимуществом использования пользовательских типов данных является возможность передать сразу весь тип в функцию, а не по одной переменной:
from dataclasses import dataclass, field @dataclass class Book(): """Тип данных книга""" title: str = None date: str = None authors: list = field(default_factory=list) price: float = 0 num: int = 0 total: float = field(init=False) def __post_init__(self): # инициализация переменной `total` self.total = self.price * self.num def print_state_book(book): """Печать сведений о книге""" print(f'Название: book.title>') print('Авторы:') for author in book.authors: print(' '*2, author) print(f'Стоимость книги: book.price:0.2f>') print(f'Количество: book.num>') print(f'Итого: book.total:0.2f>') >>> gold_key = Book('Золотой ключик', '1989', ['А. Толстой'], 512, 7) >>> day_watch = Book('Дневной Дозор', '2006', ['В. Васильев', 'С. Лукьяненко'], 1024, 9) >>> print_state_book(gold_key) # Название: Золотой ключик # Авторы: # А. Толстой # Стоимость книги: 512.00 # Количество: 7 # Итого: 3584.00 >>> print_state_book(day_watch) # Название: Дневной Дозор # Авторы: # В. Васильев # С. Лукьяненко # Стоимость книги: 1024.00 # Количество: 9 # Итого: 9216.00
Вложенные пользовательские типы данных.
Одни пользовательские типы данных могут создаваться на основе других. Такое поведение хорошо прослеживается на примере с точкой на плоскости и координатами прямоугольника.
from dataclasses import dataclass, field @dataclass class Point: """Точка на плоскости""" x: int = 0 y: int = 0 @dataclass class Rect: """Прямоугольник на плоскости""" top_left: Point = field(default=Point) bottom_right: Point = field(default=Point) # создаем точки на плоскости >>> point1 = Point(10, 20) >>> point2 = Point(30, 55) # чертим прямоугольник >>> rect = Rect(point1, point2) >>> rect Rect(top_left=Point(x=10, y=20), bottom_right=Point(x=30, y=55))
Пользовательские типы данных, так же можно наследовать. Например из точки на плоскости можно создать точку в пространстве, а потом нарисовать прямоугольный параллелепипед.
Примечание: мы не сильны в стереометрии и возможно нужны дополнительные данные для типа RectBox . Этот класс создан чисто в учебных целях, что бы в совокупности проследить наследование пользовательских типов, а также создание одного типа на основе другого.
from dataclasses import dataclass, field @dataclass class Point: """Точка на плоскости""" x: int = 0 y: int = 0 # наследуемся от пользовательского типа `Point` @dataclass class SpacePoint(Point): """Точка в пространстве""" z: int = 0 # создаем тип `RectBox` на # основе типа `SpacePoint` @dataclass class RectBox: """Прямоугольный параллелепипед""" front_top_left: SpacePoint = field(default=SpacePoint) back_bottom_right: SpacePoint = field(default=SpacePoint) # создаем точки в пространстве >>> space_point1 = SpacePoint(10, 20, 10) >>> space_point2 = SpacePoint(30, 55, 80) # рисуем прямоугольный параллелепипед >>> rect_box = RectBox(space_point1, space_point2) >>> rect_box # RectBox(front_top_left=SpacePoint(x=10, y=20, z=10), # back_bottom_right=SpacePoint(x=30, y=55, z=80)) # изменим одну координату >>> rect_box.front_top_left.y = 10 >>> rect_box # RectBox(front_top_left=SpacePoint(x=10, y=10, z=10), # back_bottom_right=SpacePoint(x=30, y=55, z=80))
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Пространство имен и область видимости в классах
- Определение классов
- Объект класса и конструктор класса
- Создание экземпляра класса
- Метод экземпляра класса
- Что такое метод класса и зачем нужен
- Что такое статический метод в классах Python и зачем нужен
- Атрибуты класса и переменные экземпляра класса
- Кэширование методов экземпляра декоратором lru_cache
- Закрытые/приватные методы и переменные класса Python
- Наследование классов
- Множественное наследование классов
- Абстрактные классы
- Перегрузка методов в классе Python
- Что такое миксины и как их использовать
- Класс Python как структура данных, подобная языку C
- Создание пользовательских типов данных
- Специальные (магические) методы класса Python
- Базовая настройка классов Python магическими методами
- Настройка доступа к атрибутам класса Python
- Дескриптор класса для чайников
- Протокол дескриптора класса
- Практический пример дескриптора
- Использование метода .__new__() в классах Python
- Специальный атрибут __slots__ класса Python
- Специальный метод __init_subclass__ класса Python
- Определение метаклассов metaclass
- Эмуляция контейнерных типов в классах Python
- Другие специальные методы класса
- Как Python ищет специальные методы в классах
- Шаблон проектирования Фабрика и его реализация
