• 2.1. Работа с простыми данными Maple-языка
  • 2.1.1. Использование знаков алфавита
  • 2.1.2. Зарезервированные слова
  • 2.1.3. Работа с числами и арифметические вычисления
  • 2.1.4. Точная арифметика
  • 2.1.5. Вычисление числа π с произвольной точностью
  • 2.1.6. Работа с комплексными числами
  • 2.1.7. Контроль над типами чисел
  • 2.1.8. Преобразования чисел с разным основанием
  • 2.1.9. Пакет RealDomain для вычислений с действительными данными
  • 2.1.10. Модификация графической функции plot
  • 2.2. Сложные типы данных
  • 2.2.1. Создание наборов (множеств)
  • 2.2.2. Создание и применение списков выражений
  • 2.2.3. Создание массивов, векторов и матриц
  • 2.2.4. Работа с построителем матриц Matrix Builder Maple 9.5
  • 2.2.5. Работа с построителем матриц Matrix Builder Maple 10
  • 2.2.6. Ассистент импорта данных Import Data в Maple 10
  • 2.2.7. Просмотр импортируемых в Maple 10 данных
  • 2.2.8. Создание Maple-таблиц и их применение
  • 2.2.9. Пакет ListTool для работы со списками
  • 2.2.10. Структура разбросанных полиномов ряда переменных SDMPolynom
  • 2.3. Применение констант
  • 2.3.1. Символьные и числовые константы
  • 2.3.2. Строковые константы
  • 2.3.3. Встроенные в ядро Maple константы
  • 2.3.4. Идентификация констант
  • 2.3.5. Защита идентификаторов констант
  • 2.3.6. Задание новых констант
  • 2.4. Работа с размерными величинами
  • 2.4.1. Пакет поддержки размерных величин Units
  • 2.4.2. Примеры работы с размерными величинами
  • 2.4.3. Ассистент преобразования размерных величин в Maple 9.5/10
  • 2.4.4. Пакет научных констант ScientificConstants
  • 2.4.5. Работа с научными константами
  • 2.4.6. Вызов списка и свойств химических элементов
  • 2.4.7. Применение пакета ScientificConstants
  • 2.5. Функции для работы со строковыми данными
  • 2.5.1. Создание и применение строковых данных
  • 2.5.2. Неисполняемые программные комментарии
  • 2.5.3. Контроль типа строковых данных
  • 2.5.4. Интерактивный ввод строк
  • 2.5.5. Обработка строк
  • 2.5.6. Преобразование строки в математическое выражение
  • 2.6. Переменные и их применение
  • 2.6.1. Типы переменных
  • 2.6.2. Назначение переменным имен
  • 2.6.3. Присваивание переменным значений
  • 2.6.4. Отмена операции присваивания и команда restart
  • 2.6.5. Придание переменным статуса предполагаемых
  • 2.7. Работа с файлами и документами
  • 2.7.1. Типы файлов
  • 2.7.2. Запись данных в файлы
  • 2.7.3. Считывание данных из файлов
  • 2.7.4. Запись и считывание m-файлов
  • 2.7.5. Запись в файлы графических объектов
  • 2.8. Вывод в специальных форматах
  • 2.8.1. Вывод в формате LaTeX
  • 2.8.2. Вывод на языке Фортран
  • 2.8.3. Вывод на языке С
  • Глава 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, дан ниже.

    and   Break  by     Catch   description

    do    Done   elif   Else    end

    error Export fi     Finally for

    from  Global if     ln      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*10^100 или 2*10^-100). Для возведения числа в степень наряду с оператором ^ можно использовать и составной оператор ** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.

    Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (a+b)/c эквивалентно (a + b) / c.

    2.1.3. Работа с числами и арифметические вычисления

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

    > 12+34/47;

    > -12+34*47;

    1586

    > 12*10^(-15)*3;

    Результаты операций с целыми числами в общем случае представляются рациональными числами, являющимися отношениями целых чисел.

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

    > 12.*10^(-15)*3;

    .3600000000 10-13

    Количеством выводимых после десятичной точки цифр можно управлять, задавая значение системной переменной окружения Digits:

    > Digits:=3: 1./3;

    .333

    > Digits:=10; ехр(1.);

    Digits := 10 2.718281828

    > Digits:=40: evalf(Pi);

    3.141592653589793238462643383279502884197

    Как видно из этих примеров, ввод и вывод чисел имеет следующие особенности:

    • для отделения целой части мантиссы от дробной используется разделительная точка;

    • нулевая мантисса не отображается (число начинается с разделительной точки);

    • мантисса отделятся от порядка пробелом, который рассматривается как знак умножения;

    • мнимая часть комплексных чисел задается умножением ее на символ мнимой единицы I (квадратный корень из -1);

    • по возможности Maple представляет численный результат в виде точного рационального числа (отношения двух целых чисел).

    Для работы с числами Maple имеет множество функций. Они будут рассмотрены в дальнейшем. С помощью многофункциональной функции convert Maple может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатиричные) в десятичные числа:

    > convert("11001111", decimal, binary);

    207

    > convert("1AF.С", decimal, hex);

    431.7500000

    > convert("Maple", decimal, 36);

    37451282

    2.1.4. Точная арифметика

    Благодаря возможности выполнения символьных вычислений Maple, как и другие СКА, реализует точную арифметику. Это значит, что результат может быть получен с любым числом точных цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например, таких как приведены ниже:

    > 101!;

    942594775983835942085162312448293674956231279470254376832 \ 788935341697759931622147650308786159180834691162349000 \ 3549599583369706302603264000000000000000000000000

    > (101!+1)-101!;

    1

    > (10005!)/10000!;

    100150085022502740120

    > 2^101-2^100;

    1267650600228229401496703205376

    > 2^(2^(2^2));

    65536

    > 2^101-2^100.0;

    0.1267650600 10³¹

    > Digits;

    10

    Обратите внимание на то, что в последнем примере точность резко потеряна, так как показатель степени 100.0 был задан как число с плавающей точкой. Соответственно и результат оказался в форме такого числа. Число верных цифр результата задает системная переменная Digits (по умолчанию 10).

    Приведем еще пару примеров точных вычислений некоторых функций (с точностью до 150 знаков мантиссы):

    > evalf(ехр(1),150);

    2.71828182845904523536028747135266249775724709369995957496 \ 696762772407663035354759457138217852516642742746639193 \ 200305992181741359662904357290033429526

    > evalf(sin(1.),150);

    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 (см. далее описание представления комплексных чисел).

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

    > a+b*I;

    a+bI

    > 1.25+Pi*I;

    1.25 + I π

    > Re(1.25+Pi*I);

    1.25

    > Im(1.25+Pi*I);

    π

    Комплексные числа обычно представляют на так называемой комплексной плоскости, у точек которой координата 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 (ложь). Например:

    > type(2,numeric);

    true

    > type(2.6,numeric);

    true

    > type(Pi,numeric);

    false

    > type(I,numeric);

    false

    > type(3/7,numeric);

    true

    > type(3^7,numeric);

    true

    > type(х^2,numeric);

    false

    Функции type(x, integer), type(x, rational) и type(x, fraction) можно использовать для проверки того, имеет ли х значение, соответственно, целого числа, рационального числа или простой дроби:

    > type(123,integer);

    true

    > type(123.,integer);

    false

    > type(123/456,rational);

    true

    > type(1./3,rational);

    false

    > type(1/2,fraction);

    true

    > type(0.5,fraction);

    false

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

    В 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 имеет еще ряд других форм. С ними можно познакомиться с помощью справки по этой мощной функции. В дальнейшем будет приведен ряд других применений этой функции.

    2.1.9. Пакет RealDomain для вычислений с действительными данными

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

    > restart:simplify(sqrt(х^2)); ln(-2); solve(х^3-8=0,x);

    csgn(x) x ln(2)+ π I 2, -1+√3I, -1-√3I

    В связи с этим в Maple введен новый математический пакет расширения RealDomain, переводящий вычисления в область реальных значений данных. Вызов пакета обеспечивается следующим образом:

    > restart:with(RealDomain);

    [ℑ, ℜ, ^, arccos, arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsin, arcsinh, arctan, arctanh, cos, cosh, cot, coth, csc, csch, eval, exp, expand, limit, ln, log, sec, sech, signum, simplify, sin, sinh, solve, sqrt, surd, tan, tanh]

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

    > simplify(sqrt(х^2));

    |x|

    > ln(-2);

    undefined

    > solve(х^3-8=0,х);

    2

    Следует отметить, что вычисляемые выражения при работе с данным пакетом надо размещать после его загрузки.

    2.1.10. Модификация графической функции plot

    В старых версиях Maple функция plot нередко отказывалась строить графики функций, значения которых были комплексными числами. Но уже в Maple 8 алгоритм построения графиков переработан. Теперь, если выражение, по которому строится график, в ходе оценивания дает мнимую часть, она отбрасывается, так что строится график только действительной части выражения. Малые по модулю мнимые части также нередко отбрасываются — впрочем, когда именно не совсем ясно.

    Рис. 2.4 дает примеры этого. В верхней части документа строятся графики функции квадратного корня от х, логарифма и синуса. Нетрудно заметить, что для квадратного корня и логарифма строится и впрямь только та часть графиков, где значения функций действительны — при х положительном. Для х< 0 строится только график функции синуса, поскольку синус дает вещественные значения при любом x — как положительном, так и отрицательном.

    Рис. 2.4. Особые случаи применения функции plot


    Еще более интересен случай, представленный снизу рис. 2.4. Здесь функция задана как решение выражения f, которое дает корни в виде комплексных выражений. Несмотря на это возможные части графика функции f(x) строятся.

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

    Сложными являются такие типы данных, которые являются представлением множественных и подчас разнохарактерных объектов. Нередко такие данные включают как часть себя рассмотренные выше простые типы данных.

    2.2.1. Создание наборов (множеств)

    В системе Maple любые выражения могут включаться в наборы, относящиеся к множественным данным. Такие наборы в виде множеств создаются с помощью фигурных скобок { }:

    > {a,b,a,a,b,d,e,c,d};

    {a, b, с, е, d}

    > {10,2+3,4+4,8,5,1};

    {1, 5, 8, 10}

    > {`Hello` ,`my`,`friend`};

    {friend, Hello, my}

    Отличительная черта множеств — автоматическое устранение из них повторяющихся по значению элементов. Кроме того, Maple расставляет элементы множеств в определенном порядке — числа в порядке увеличения значения, а символы и строки в алфавитном порядке. Для множеств нет строгого математического определения, и мы будем считать их наборами, удовлетворяющими перечисленным выше признакам.

    2.2.2. Создание и применение списков выражений

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

    > [10,2+3,4+4,8,5,1];

    [10, 5, 8, 8, 5, 1]

    > [а, b, c, a, a, d, d, e] ;

    [a, b, с, a, a, d, d, e]

    Как нетрудно заметить, элементы списков преобразуются и выводятся строго в том порядке, в каком они были заданы. Списки широко применяются для задания векторов и матриц.

    В ряде случаев, например, при подготовке данных для двумерных графиков, возникает необходимость в подготовке парных списков — скажем, координат точек (х, у) графика. Для этого можно использовать функцию zip(f, u, v) или zip(f, u, v, d). Здесь f — бинарная функция, u, v — списки или векторы, d — необязательное значение.

    Примеры применения функции zip даны на рис. 2.5. Там же показано применение этих средств для построения точек, представляющих множество действительных чисел на плоскости. Для этого использована функция pointplot из пакета plots.

    Рис. 2.5. Представление множества чисел на плоскости

    2.2.3. Создание массивов, векторов и матриц

    Важным типом данных являются списки или листы. В Maple 9.5 они создаются с помощью квадратных скобок, например:

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

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

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

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

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

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

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

    Примеры задания вектора и матрицы представлены ниже:

    array(1..3,[х,у,х+у]) — создает вектор с элементами x, у и х+y;

    array(1..2,1..2,[[a,b],[c,d]]) — квадратная матрица

    Для создания векторов может использоваться также конструктор векторов Vector[o](d, init, ro, sh, st, dt, f, а, о) с рядом опционально заданных параметров. В этой книге эта конструкция практически не используется. Векторы и матрицы можно также задавать с помощью угловых скобок:

    > V:=<a,b,с>;

    > Vector[row]([a,b,с]);

    [a, b, c]

    > Vector[row](<a, b, c>);

    [a, b, c]

    > M:=<<a,b,c>|<d,e,f>>;

    Имеется множество функций для работы со списками, массивами и матрицами. Они будут рассмотрены в дальнейшем. В принципе, размерность массивов, создаваемых списками, не ограничена, и массивы могут быть многомерными.

    2.2.4. Работа с построителем матриц Matrix Builder Maple 9.5

    Для интерактивного задания матриц и векторов в Maple 9.5 введен ассистент Matrix Builder. При его применении открывается окно, показанное на рис. 2.6.

    Рис. 2.6. Окно ввода матриц и векторов ассистента Matrix Builder Maple 9.5


    В окне с помощью списков можно задать размер матрицы (или вектора, если один из размеров задан равным 1), определить рабочую область ввода с помощью кнопки Display и вводить значения элементов матрицы с помощью имеющегося шаблона. По завершении ввода всех элементов достаточно закрыть окно и созданная матрица появится в документе.

    2.2.5. Работа с построителем матриц Matrix Builder Maple 10

    В Maple 10 построитель матриц Matrix Builder немного усовершенствован. В нем есть два окна просмотра созданной матрицы — одно для обычного вида матрицы, а другое в виде системы линейных уравнений (рис. 2.7) в котором последний столбец расширенной матрицы представляет столбец свободных членов.

    Рис. 2.7. Окно ввода матриц и векторов ассистента Matrix Builder Maple 10


    Следует, однако, отметить, что по завершении ввода в строку ввода документа, из которого вызван построитель матрицы, вводится расширенная матрица, а не система линейных уравнений. Ее обработка возлагается уже на пользователя.

    2.2.6. Ассистент импорта данных Import Data в Maple 10

    В Maple 10 есть и более мощное средство ввода — ассистент импорта данных Import Data. Он позволяет вводить данные (в том числе матрицы рисунков) из файлов множества форматов. При обращении к нему из подменю Assistants позиции Tools меню открываются вначале два окна. Верхнее окно (рис. 2.8) служит для выбора файла с данными.

    Рис. 2.8. Окно выбора файлов с данными


    Обратите внимание на обширный список возможных типов файлов внизу этого окна. Он включает в себя аудио и видео-файлы, файлы рисунков различного формата и другие типы файлов, представляемые которыми файлы могут быть представлены в векторной или матричной форме. Это является показателям того, что число типов матричных и векторных данных в Maple 10 резко расширено и систему можно использовать для обработки таких данных, как звуки и изображения.

    Для примера на рис. 2.8 выбран файл электронной фотографии, на которой автор вручает свою книгу по Интернету Вице-Президенту корпорации Intel Шону Мелони. После загрузки файла открывается второе (основное) окно ассистента импорта данных. Оно показано на рис. 2.9.

    Рис. 2.9. Окно ассистента импорта данных системы Maple 10


    В этом окне дана исчерпывающая информация об источнике и типе данных — в нашем случае это файл формата JPG, который представляется комплектом из трех матриц, дающих относительные интенсивности (от 0 до 1) трех цветов — красного, зеленого и синего (система RGB). Кнопка OK вводит в текущую строку ввода Maple 10 матричный объект, представляющий импортируемые данные.

    2.2.7. Просмотр импортируемых в Maple 10 данных

    Активизируя кнопку предварительного просмотра Preview можно вывести окно просмотра, показанное на рис. 2.10 при открытой вкладке Table (Таблица). В левом верхнем углу окна документа на рис. 2.10 виден матричный объект, представляющий импортированные в Maple 10 данные. Нетрудно заметить, что он задан тремя массивами (матрицами) с индексацией элементов строк от 1 до 480 и столбцов от 1 до 640. Как уже отмечалось это три массива RGB-представления цветного рисунка. Нетрудно заметить также, что каждый элемент массива представлен числом в формате чисел с плавающей точкой. Линейки прокрутки позволяют просмотреть весь набор чисел каждого массива.

    Рис. 2.10. Окно предварительного просмотра данных с открытой вкладкой Table


    Вкладка Image (Изображение) позволяет просмотреть массивы в виде рисунков — см. рис. 2.11. Тут почти все понятно, но стоит обратить внимание на список Color Map (Цветовая Карта). С его помощью можно задать отображение изображения в формате Greyscale (черно-белое изображение с оттенками серого цвета) или изображение интенсивности каждой из составляющих цветного изображения. С вкладкой Options, позволяющей изменить опции данных, читатель может познакомиться самостоятельно.

    Рис. 2.11. Окно предварительного просмотра данных с открытой вкладкой Image


    Активизируя кнопку Insert можно вставить изображение в документ Maple. Это показано на рис. 2.12. При этом изображение можно растягивать или сжимать в различных направлениях.

    Рис. 2.12 Пример вставки в документ Maple 10 изображения


    Следует отметить, что в Maple 10 появился новый графический объект — наброски (Sketch). Подробно работа с ними описана в главе 8.

    2.2.8. Создание Maple-таблиц и их применение

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

    > table[];

    table[ ]

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

    > Т:=table ({1,2,Pi, `string`});

    T: = table([1 = 1, 2 = 2, 3 = π, 4 = string])

    > Т [3] ;

    π

    > S:=table([(one)=1,(two)=2,(three)=3]);

    S := table([one = 1, three = 3, two = 2])

    > S [1];

    S1

    > S[two];

    2

    > S[three];

    3

    > entries(S);

    [1], [3], [2]

    > indices(S);

    [one], [three], [two]

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

    > F := table([sin=cos, cos=-sin]): op(op(F));

    [cos = -sin, sin = cos]

    > F[cos] (Pi/2);

    -1

    > F[sin] (0);

    1

    > evalf(cos(Pi/2));

    0.

    > evalf(sin(0));

    0.

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

    2.2.9. Пакет ListTool для работы со списками

    Для работы со списками имеется пакет расширения ListTool. Его вызов и состав новых определений — функций представлены ниже:

    > with(ListTools);

    Warning, the assigned name Group now has a global binding

    Binary Place, Binary Search, Categorize, Dot Product, Enumerate, Find Repetitions, Flatten, Flatten Once, Group, Interleave, Join, JoinSequence, MakeUnique, Pad, PartialSums, Reverse, Rotate, Sorted, Split, Transpose

    Применительно к задачам данной книги применение этого пакета ограничено. Поэтому ограничимся несколькими примерами его применения (файл listtools):

    > myList := [seq( ithprime (i) , i=1..20 )];

    myList := [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]

    > BinarySearch(myList, 61, `<`);

    18

    > Reverse (myList);

    [71, 67, 61, 59, 53, 47, 43, 41, 37, 31, 29, 23, 19, 17, 13, 11, 7, 5, 3, 2]

    > FindRepetitions(rnyList);

    [ ]

    > FindRepetitions([1, 2, 3,1, 5, 3]);

    [1,3]

    > L := [0., .84, .91, .14, -.76, -.96, -.28, .66, .99, .41, -.54];

    L := 10., .84, .91, .14, -.76, -.96, -.28, .66, .99, .41, -.54]

    > M := [1., .54, -.42, -.99, -.65, .28, .96, .75, -.15, -.91, -.84];

    M := [1., .54, -.42, -.99, -.65, .28, .96, .75, -.15, -.91, -.84]

    > DotProduct(L, L);

    5.0063

    > DotProduct(L, M);

    .3162

    Нетрудно заметить, что применение этих функций (как и ряда других) достаточно очевидно.

    2.2.10. Структура разбросанных полиномов ряда переменных SDMPolynom

    В Maple 9.5 введена новая структура данных — разбросанные полиномы ряда переменных — SDMPolynom (Sparse Distributed Multivariate Polynom). Примеры применения новой структуры:

    А: =SDMPоlynоm(х³ - 2 х² - 2 х + 4, [х])

    B:=SDMPolynom(х*у^2+х^2*у^3 + (2 + I)у + 1, [х, у])

    Из этих примеров форма задания таких полиномиальных структур очевидна. С ними можно проводить различные операции — вычислять степень по каждой переменной, выполнять арифметические операции и т.д.

    2.3. Применение констант

    2.3.1. Символьные и числовые константы

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

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

    2.3.2. Строковые константы

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

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

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

    > constants;

    false, γ, ∞, true, Catalan, FAIL, π

    Ниже указано их назначение:

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

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

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

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

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

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

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

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

    Любопытно, что в этот список не входит основание натурального логарифма — число е. В качестве этой константы рекомендуется использовать ехр(1). Она отображается как жирная прямая буква Е. А ехр(1.0) выводит 2.71828… (что и следовало ожидать). В список не вошел и ряд других констант, например: NULL — пустая часть последовательностей, Order — порядок многочлена, Printlevel — уровень вывода сообщений и др.

    2.3.4. Идентификация констант

    Функции type(x, constant) и type(x, realcons) возвращают логическое значение true, если х представляет целочисленную или вещественную константу, и false, если х не является константой. Таким образом, эти функции можно использовать для идентификации констант, например:

    > type(Pi,constant);

    true

    > type(1/2,constant);

    true

    > type(.5,constant);

    true

    > type(x/y,constant);

    false

    > type(ln(-Pi),constant);

    true

    > type(infinity,constant);

    true

    > type(1.234, realcons);

    true

    > type(x*y,realcons);

    false

    > type(2+3*1,realcons);

    false

    2.3.5. Защита идентификаторов констант

    Имена встроенных констант (как и имена функций) защищены специальным атрибутом protected. Поэтому (без его снятия) константам нельзя присваивать какие либо значения:

    > Pi;

    π

    > Pi:=1;

    Error, attempting to assign to `Pi` which is protected

    > gamma;

    γ

    > gamma:=10;

    Error, attempting to assign to `gamma` which is protected

    Стоит упомянуть о такой экзотической возможности, как задание в Maple собственных констант путем описания алгоритма генерации входящих в константу цифр. Примеры этого творчества можно найти на сайте фирмы Waterloo Maple.

    2.3.6. Задание новых констант

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

    > type(g,constant);

    false

    > constants:=constants,g;

    constants := false, γ, ∞, true, Catalan, FALL, π, g

    > type(g,constant);

    true

    2.4. Работа с размерными величинами

    2.4.1. Пакет поддержки размерных величин Units

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

    > with(Units);

    [Add Base Unit, Add Dimension, AddSystem, AddUnit, Converter, GetDimension, Get Dimensions, GetSystem, SetSystems, GetUnit, GetUnits, HasDimension, HasSystem, HasUnit, Natural, Remove Dimension, RemoveSystem, Standard, Unit, UseContexts, UseSystem, UsingContexts, UsingSystem]

    Большинство функций этого пакета достаточно просты и даже очевидны.

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

    Ограничимся несколькими характерными примерами их применения (файл units):

    > convert(4.532, units, N/m^2, (lb*f t/s^2)/ft^2);

    3.045363395

    > convert(W, dimensions), convert(W, dimensions, base);

    > with(Units[Standard]):

    > distance := 3.5*Unit(ft) + 2.4*Unit(m);

    distance := 3.466800000 [m]

    > force := distance*Unit(lb)/Unit(s)^2;

    force := 1.572514028 [N]

    > convert(force, units, lbf);

    .3535152166 [lbf]

    > V := i*R;

    V:=iR

    > eval(V, [i = 2.3*Unit(mA), R = 50.0*Unit(uOmega)]);

    .1150000000 10-6 [V]

    > convert(%, units, nV );

    115.0000000 [nV]

    2.4.3. Ассистент преобразования размерных величин в Maple 9.5/10

    В Maple 9.5/10 преобразования размерных величин упрощаются применением ассистента Unit Converter..., который преобразует значение Value размерной величины с размерностью Dimension с одной величины в другую. Окно ассистента показано на рис. 2.13. Дан пример преобразования 1 фута в метрическую величину (1 фут=0,3048 м).

    Рис. 2.13. Окно ассистента — конвертора размерных величин


    Списки Dimension, From и То задают наименование размерной величины, начальную единицу ее измерения и конечную единицу измерения. Нетрудно заметить, что для преобразования используется функция convert.

    2.4.4. Пакет научных констант ScientificConstants

    Еще в Maple 8 был добавлен пакет расширения для добавления и применения научных констант, химических элементов и свойств, что резко расширяет возможности применения системы в физических и химических расчетах. Вызов пакета ScientificConstants осуществляется командой:

    > with(ScientificConstants);

    Warning, the name Element has been rebound

    [AddConstant, Add Element, AddProperty, Constant, Element, GetConstant, GetConstants, GetElement, GetElements, GetError, Get Isotopes, Get Properties, Get Property, GetUnit, GetValue, HasConstant, HasElement, HasProperty, ModifyConstant, ModifyElement]

    Нетрудно заметить, что функции пакета обеспечивают следующие возможности для констант (Constant), элементов (Element) и свойств (Property):

    • Add — добавление;

    • Get — вывод;

    • Has — проверка на наличие объекта в пакете;

    • Modify — модификация. Функция

    GetError(sc_obj)

    возвращает значение ошибки, с которой задана константа — объект sc_obj. Знание ошибки существенно при организации критичных к ошибкам научно-технических расчетов.

    2.4.5. Работа с научными константами

    Вызов всех научных констант осуществляется следующим образом (файл sconst):

    > with(ScientificConstants):

    > GetConstants();

    Eh, F, G, G0, Kf, MEarth, MSun, Ф0, R, REarth, RK, R, Vm, Z0, a0, ae, aμ, α, b, с, c1.L, c1, c2, e, ε0, g, ge, gμ, gn, gp, γe, γn, γp, gamma_primeh, gamma_primep, h, k, lp, λC.T, λC.μ, λC.n, λC.p, λC,, mP, mτ, mα, md, me, mh, mμ, mn, mp, mu, μ0, μB, μN, μd, μe, μμ, μn, μp, mu_primeh, mu_primep, n0, re, σ, σe, sigma_primep, tp

    Теперь уточним данные по константе g — ускорению свободного падения:

    > Constant(g);

    Constant(g)

    > GetValue(%); GetUnit(%%);

    > Units: -UsingSystem();

    SI

    > Constant(g, units);


    А теперь проверим, есть ли в пакете константы g и edu

    > HasConstant(g);

    true

    > HasConstant(edu);

    false

    и вычислим погрешность, с которой задана константа G:

    > GetError(Constant(G));

    0.11 10-12

    2.4.6. Вызов списка и свойств химических элементов

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

    > GetElements();

    Н, Не, Li, Be, В, С, N, О, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Те, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Та, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Uun, Uuu, Uub, Uuq, Uuh

    А теперь выведем характеристики элемента А — алюминия:

    > GetElement(Al, name, meltingpoint, boilingpoint);

    13, name = aluminium, meltingpoint = [value = 933.47, uncertainly = undefined, units = K], boilingpoint = [value = 2792., uncertainly = undefined, units = K]

    2.4.7. Применение пакета ScientificConstants

    В справке системы Maple 9.5 можно найти примеры применения пакета ScientificConstants в химических и физических расчетах. Интересные примеры таких расчетах даны в документе «Applications of the ScientificConstants Package». Ha рис. 2.14 показано начало этого документа, в котором содержится пример на вычисление количества молекул, которое необходимо для получения 10 граммов вещества с химической формулой С3Н6O. Вначале математически синтезируется молекула этого вещества, ее вес конвертируется в систему единиц SI и в конце находится число молекул вещества.

    Рис. 2.14. Пример вычисления числа молекул для получения 10 граммов вещества С3Н6O


    Приведенный документ является наглядным примером создания в среде Maple электронных документов, уроков и книг. Он построен с применением открывающихся и закрывающихся ячеек. Читателю, всерьез работающего с системой Maple стоит приучить себя готовить свои документы в таком же стиле — средства для этого были описаны в Главе 1.

    В другом примере (рис. 2.15) вычисляется энергия ионизации вещества и строится график ее зависимости от порядкового номера элемента вещества в таблице периодической системы элементов. График наглядно демонстрирует характерные почти периодические колебания энергии ионизации.

    Рис. 2.15. Построение зависимости энергии ионизации вещества от его номера в таблице периодической системы элементов

    2.5. Функции для работы со строковыми данными

    2.5.1. Создание и применение строковых данных

    Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев, имен переменных и символьных выражений. Строки комментариев должны каким-либо образом выделяться, чтобы Maple не отождествлял их с именами констант и переменных. Для этого строки-комментарии имеют внутренний разделительный признак, который устанавливается при их вводе (нажатием клавиши F5, которое приводит к исчезновению знака >).

    В других случаях последовательность символов рассматривается как строка, если она заключена в двойные кавычки — знаки ", апострофы ' и в обратные апострофы ` Два апострофа подряд формируют апостроф как знак символьной строки, например `abc``def` дает строку abc`def. Любое математическое выражение может входить в строку и, разумеется, оно при этом не выполняется. Например:

    > `2+2 не всегда ``четыре```;

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

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

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

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

    5

    Комментарии полезны в программах на Maple-языке и обычно используются для объяснения особенностей реализованных алгоритмов.

    2.5.3. Контроль типа строковых данных

    Maple имеет несколько форм задания строковых и символьных. Обычные строковые данные представляются совокупностью любых символов, заключенных в двойные кавычки, например "Привет" или "2+2". Не следует путать двойные кавычки с апострофами и обратными апострофами. Апострофы задают отложенные вычисления для выражений, а обратные апострофы задают символическое имя для переменных.

    Для контроля объектов на принадлежность к строковым данным служит функция type с параметром string (файл string):

    > str:= "Hello!";

    str := "Hello!"

    > type(Hello,string);

    false

    > type (str, string)

    true

    > type(2+3,string);

    false

    > type("2+3",string);

    true

    > char:=a;

    char := a

    > char:=`a`;

    char := a

    Нетрудно заметить, что только при заключении строки в кавычки тип строки определяется как строковый. В строках могут быть символы кириллицы, но гарантии в правильности обработки таких символов нет — надо мириться с тем, что Maple — англоязычная программа, и ее возможности в поддержке других языков ограничены.

    2.5.4. Интерактивный ввод строк

    Для интерактивного ввода строк можно использовать функцию readline(filename), задав в качестве имени файла terminal или опустив имя файла. В этом случае ввод строки осуществляется с клавиатуры компьютера:

    > s:=readline();

    > Привет мой друг!

    s:="Привет мой друг!"

    Полезно обратить внимание на то, что запрос в ходе интерактивного ввода может быть сделан на русском языке (если установленный для запросов шрифт имеет символы кириллицы). Нужно также, чтобы и шрифт строки вывода содержал кириллицу, иначе в строке вывода будет типичная «абракадабра» — смесь непонятных символов.

    2.5.5. Обработка строк

    Имеется ряд функций для работы с обычными строками. Из них наиболее важны следующие:

    lenght(str) — возвращает число символов, содержащихся в строке str;

    substring(str,a..b) — возвращает подстроку строки str от a-го символа до b-го;

    cat(str1,str2,...) — возвращает строку, полученную объединением строк str1, str2,… (альтернатива — оператор конкатенации в виде точки .);

    SearchText(s,str) — производит поиск подстроки s в строке str и при его успехе возвращает номер позиции s в строке str (при отсутствии s в str функция возвращает 0).

    Примеры применения этих функций (в виде продолжения ранее приведенных примеров) представлены ниже:

    > str:="Hello!";

    str := "Hello!"

    > length(str);

    6

    > substring(str,1..3) ;

    Hel

    > substring(str,4..6);

    lo!

    > s:=cat("Hello"," my"," friend! ");

    s := "Hello my friend"

    > SearchText(my, s);

    7

    > ss:= "Hello "||"my friend! ";

    ss := "Hello my friend!"

    > seq("Name"||i,i=1..4);

    "Namei", "Namei", "Namei", "Namei"

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

    2.5.6. Преобразование строки в математическое выражение

    Часто возникает необходимость в интерактивном вводе математических выражений. Для ввода с запросом выражения используется функция readstat(promt), где promt — строка с текстовым комментарием. Примере ее применения дан ниже:

    > у:=readstat("Введите выражение ");

    Введите выражение а*х^2+b;

    у:= ах² + b

    Альтернативой может стать ввод строкового выражения с последующим преобразованием его в математическое выражение с помощью функции parse:

    > s: = `2+3*5`;

    s: = 2 +3*5

    > evaln(s);

    s

    > parse(%);

    17

    Обратите снимание на то, что функция evaln не смогла вычислить строковое выражение `2+3` поскольку оно не является числовым типом данных. Однако функция parse преобразовала это выражение в числовое, что и привело к его вычислению.

    2.6. Переменные и их применение

    2.6.1. Типы переменных

    Как следует из самого названия, переменные — это объекты, значения которых могут меняться по ходу выполнения документа. Пока мы рассматриваем лишь глобальные переменные, доступные для модификации значений в любом месте документа. Тип переменной в системе Maple определяется присвоенной ей значением — это могут быть целочисленные (integer), рациональные (rational), вещественные (real), комплексные (complex) или строчные (string) переменные и т.д. Переменные могут также быть символьного типа (их значением является математическое выражение) или типа списка (см. далее). Для явного указания типа переменных используется конструкция

    name::type

    где name — имя (идентификатор) переменной, type — тип переменной, например, целочисленный (integer), вещественный с плавающей точкой (float), с неотрицательным значением (nonneg), комплексный (complex) и т.д.

    2.6.2. Назначение переменным имен

    Переменные задаются своим именем — идентификатором, который должен начинаться с буквы и быть уникальным. Это значит, что ключевые слова языка Maple нельзя использовать в качестве имен переменных. Хотя имена ряда команд и функций можно использовать в качестве идентификаторов переменных, делать это крайне нежелательно. Ограничений на длину идентификатора практически нет — точнее, она не должна превышать 524 275 символов! Так что сложностей с подбором идентификаторов для переменных у вас не будет.

    Имена переменных могут содержать одну букву (например, х, Y или Z), либо ряд букв (Xmin или Xmax). В любом случае имя переменной надо начинать с буквы. Некоторые символы, например знак _ могут использоваться в именах (например, Var_1, Var_2). Нельзя, однако, вводить в имена переменных знаки, обозначающие операторы — например, а/b или а-b будет истолковано как деление а на b или вычитание из переменной а переменной b.

    Имена могут задаваться в обратных апострофах. При этом они просто тождественны именам без апострофов:

    > var1:=123;var2:= `Hello`;

    var1 := 123 var2 := Hello

    > `var1`;`var2`;

    123 Hello

    Строчные и прописные буквы в идентификаторах различаются, так что Var1 и var1 — это разные переменные.

    Для проверки предполагаемого имени на уникальность достаточно выполнить команду ?name, где name — выбранное имя. Если при этом откроется окно справки с этим именем, значит, оно уже использовано в Maple. Лучше воздержаться от его применения, так как связанная с этим именем команда или функция перестает работать, как только это имя закрепляется за какой-либо переменной.

    2.6.3. Присваивание переменным значений

    Поскольку Maple 9.5 прежде всего система символьной математики, то по умолчанию любые переменные рассматриваются как объекты символьного типа. Благодаря этому такие переменные могут фигурировать в математических выражениях, (таких как sin(x)/x), без их предварительного объявления. В отличие от обычных языков программирования такое использование переменных не влечет за собой появления сообщений об ошибках и является более естественным.

    Для присваивания переменным конкретных значений используется комбинированный символ присваивания «:=», например:

    n:=1 — переменной n присваивается целочисленное значение 1;

    х:=123.456 — переменной х присваивается вещественное значение 123.456;

    у:=17/19 — переменной у присваивается рациональное значение 17/18;

    name:=`Piter` — переменной name присваивается строковое значение `Piter`;

    expr:=2*Pi/3 — переменной expr присваивается значение выражения 2л??!!/3;

    V:=[1,2,3] — переменной V присваивается значение списка чисел [1,2,3];

    М:=[[1,2,3],[4,5,6]] — переменной М присваивается значение двумерного массива;

    f:=x->x^2 — переменной f присваивается значение функции пользователя f(x)=x^2.

    Правая часть выражения присваивания определяет тип переменной. Например, она может быть целочисленной, действительной, строковой, индексированной (элемент массива) и т.д.

    2.6.4. Отмена операции присваивания и команда restart

    Переменная, имеющая какое либо значение, занимает в памяти намного больше места, чем неопределенная переменная. У последней место в памяти занимают только символы идентификатора. Поэтому нередко целесообразно отменить присваивание у тех переменных, которые в дальнейшем можно не использовать. Это может понадобиться и в том случае, когда какую-либо переменную с численным или иным значением нужно использовать просто как неопределенную переменную. Рассмотрим следующий пример:

    > х:=10;

    х:= 10

    > х;

    10

    > int(х^2,x);

    Error, (in int) wrong number (or type) of arguments

    Здесь не удалось вычислить интеграл с подынтегральной функцией х^2 из-за того, что переменная х уже определена ранее как целочисленная переменная со значением 10, тогда как для вычисления интеграла она должна быть необъявленной или строковой (убедитесь в этом сами).

    Для отмены присваивания надо использовать следующее выражение:

    > х: =`х`;

    х: = х

    Итак, заключение имени переменной в прямые апострофы ликвидирует присваивание. Так что запись х:=`х` означает, что переменной х возвращается статус неопределенной переменной. Теперь можно вычислить интеграл:

    > int(х^2,х);

    ⅓x³

    Можно сделать переменную х неопределенной и с помощью выражения вида x:=evaln(x). Это поясняет следующий пример:

    > х:=123;

    x:= 123

    > x:=evaln(x);

    х:=х

    > int(х^n,х);

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

    > х:=5;

    x: = 5

    > х^2;

    25

    > restart;

    > х;

    x

    > х^2;

    х²

    Следует отметить, что команда restart отменяет все предшествующие определения, что иногда чревато осложнениями. Применяйте ее только тогда, когда вы уверены, что предшествующая заданной часть документа (или даже ряда документов) действительно не важна.

    Важно отметить, что Maple сохраняет в памяти все определения и присваивания, которые были сделаны во всех загруженных в систему документах. Поэтому результаты вычислений в текущем документе могут зависеть от определений в других документах. Команда restart позволяет исключить эту зависимость.

    2.6.5. Придание переменным статуса предполагаемых

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

    Для придания переменным статуса предполагаемых используется функция assume:

    assume(x,prop)

    где х — переменная, имя или выражение, prop — свойство. Следующие примеры (файл assume) показывают применение функции assume:

    > restart;

    > assume(х,positive);

    > х;

    х~

    > s:=x->sqrt(х);

    s:= х →√x

    > s(2);

    √2

    > s(2.);

    1.414213562

    > s(-2);

    I√2

    > is(x,positive);

    true

    > is(x,negative);

    false

    >> about(x);

    Originally x, renamed x~: is assumed to be: RealRange(Open(0), infinity)

    Обратите внимание, что в этом примере переменная х помечена как положительная и при выводе сопровождается знаком тильды ~, как бы предупреждающем нас о ее особом статусе. Это не означает, что она не может принять отрицательное значение. Однако с помощью функции is можно убедиться в ее особом статусе и при необходимости программным путем исключить вычисления для х<0. Кроме того, о свойствах переменной можно узнать с помощью функции about(name).

    Иногда к уже имеющимся признакам надо добавить новые. Для этого используется функция additionally:

    > assume(a,nonnegative);

    > additionally(а<=0);

    > about(а);

    Originally a, renamed а~: is assumed to be: 0

    В этом примере переменной а вначале задан признак положительности, а затем а<=0. Оба признака удовлетворяются только при a=0, что и подтверждает вывод информации о статусе этой переменной функцией about(a).

    Предполагаемую переменную можно также изменить путем присваивания ей нового значения, противоречащего ее статусу:

    > а:=123;

    a:=123

    > about(а);

    123:

    All numeric values are properties as well as objects. Their location in the property lattice is obvious, in this case integer.

    Для отмены переменным статуса предполагаемых используются те же приемы, что и при отмене присвоенного значения. Например, запись х:='х' отменяет статус предполагаемой для переменной х.

    2.7. Работа с файлами и документами

    2.7.1. Типы файлов

    К числу широко распространенных данных относятся файловые данные, которые представлены файлами. Файлом называют имеющую имя упорядоченную совокупность данных, размещенную на том или ином носителе — обычно на жестком, гибком или компакт-диске.

    В Maple используются файлы различных форматов, который указывается расширением файла (знак * означает произвольное имя файла):

    *.ms — файлы документов для систем с графическим интерфейсом (Windows/Macintosh);

    *.msw — файлы документов (Worksheets);

    *.txt — текстовые файлы (включая формат Maple-текст);

    *.tex — файлы в формате LaTeX;

    *.ind и *.lib — файлы библиотек.

    *.m — файлы внутреннего Maple-языка.

    Работа с файлами документов удобна с применением команд меню и панели инструментов (см. Главу 1). Предусмотрена возможность записи документов и в особом формате LaTeX, предназначенном для создания книг и статей по математике. Текстовые файлы (с расширением .txt) можно просматривать и редактировать текстовыми редакторами, работающими с ASCII-кодировкой.

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

    2.7.2. Запись данных в файлы

    Обширные возможности Maple делают привлекательным применение этой программы для автоматической обработки данных, поступающих от каких-либо экспериментальных установок. Для этого установки снабжаются интерфейсными платами (например, аналого-цифровыми преобразователями) и необходимым программным обеспечением. Возможна и передача данных, полученных с помощью Maple 9.5, в экспериментальные установки.

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

    writedata[APPEND](fileID, data)

    writedata[APPEND](fileID, data, format)

    writedata[APPEND](fileID, data, format, default)

    Здесь fileID — имя или дескриптор файла данных, data — список, вектор или матрица данных, format — спецификация формата данных (integer, float или string), default — процедура, задающая запись нечисловых данных, например:

    writedata(F,A,float,proc(f,х)fprintf(f,`CMPLX(%g,%g)`,Re(x),Im(x)) end);

    Необязательный указатель APPEND используется, если данные должны дописываться в уже созданный файл.

    2.7.3. Считывание данных из файлов

    Считывание данных из файла filename обеспечивает функция readdata:

    readdata(fileID, n)

    readdata(fileID, format, n)

    readdata(fileID, format)

    Здесь n — целое положительное число, задающее число считываемых столбцов.

    Ниже представлены примеры этих операций (файл rdata):

    > data:=array([[1,2,3],[4,5,6],[7,8,9]]);

    > writedata(`С:\\mydata.txt`, data);

    > restart;

    >

    data

    > data:=readdata(`С:\\mydata.txt`, 3);

    data := [[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]

    Maple имеет также типичные файловые операции:

    writeto — запись в файл;

    appendto — добавление к файлу;

    open — открытие файла;

    close — закрытие файла;

    write — запись в открытый файл;

    save — запись выражений в файл;

    read — считывание из файла.

    Их реализация, однако, зависит от платформы, на которой установлена система, и от ее настройки.

    2.7.4. Запись и считывание m-файлов

    Основным способом записи различных объектов в файлы и считывания их из них является применение команд save и read применительно к файлам формата .m. Это наглядно иллюстрирует рис. 2.16.

    Рис. 2.16. Примеры работы с m-файлом


    На этом рисунке вначале задано три объекта у, F и р представляющие собой обычную переменную с заданным значением, функцию, представляющую значение интеграла и графический объект. Эти объекты записываются командой save в файл с именем myvals.m. Затем командой restart все определения объектов уничтожаются, поэтому вывод у, F и р просто повторяет имена этих неопределенных переменных.

    В заключении командой read выполняется считывание объектов из файла myvals.m. Теперь вывод объектов дает их полное представление — для у и F в виде выражений, а для р в виде графика. Рисунок 2.16 дает наглядное представление о возможностях применения m-файлов.

    2.7.5. Запись в файлы графических объектов

    Графические объекты могут быть записаны в файлы своих собственных форматов, например, таких как GIF, BMP, JPG и др. Удобнее всего для этого использовать контекстное меню правой клавиши мыши, показанное на рис. 2.16 в правой части графика. Команда Export As… открывает окно с перечнем возможных форматов графических файлов. После выбора нужного формата появляется стандартное окно сохранения файлов, в котором можно задать нужное имя файла и завершить операцию сохранения графического объекта в файле. В Maple предусмотрена возможность в формате GIF записывать рисунки с анимацией изображения.

    2.8. Вывод в специальных форматах

    2.8.1. Вывод в формате LaTeX

    Maple 9.5 имеет ряд средств для общения с другими программами. Часть из них, в основном относящаяся к обмену через файлы, уже была описана выше и в Главе 1. Однако система Maple 9.5 способна генерировать коды для прямого их включения в такие программы, причем не только математические. В ряде случаев вывод в специальных форматах полезен для оценки возможностей осуществления тех или иных вычислений или просто записи их в той или иной форме.

    Для подготовки математических статей и книг широкое распространение получили редакторы ТеХ и LaTeX. Для подготовки выражений или файлов в формате LaТеХ служит функция

    latex(expr,filename)

    Параметр filename не обязателен, если достаточно получить нужное выражение в ячейке вывода Maple 9.5 (файл fformat):

    > latex(а*х^2+b*х+с);

    а{х}^{2}+bх+с

    >

    {\frac {{х}^{n}{n}^{2}}{{х}^(2}}}-{\frac {{х)^{n}n}{{х}^{2}}}

    2.8.2. Вывод на языке Фортран

    Язык Фортран вот уже многие десятилетия используется для программирования вычислительных задач. Накоплены обширные библиотеки решения таких задач на Фортране. Почитателей этого языка Maple 9.5 порадует тем, что он позволяет готовить коды для программ на Фортране. Для этого вначале надо загрузить библиотечную функцию:

    > with(codegen,fortran);

    [fortran]

    После этого может использоваться функция fortran:

    fortran(expr,filename=str,optimized)

    Два последних параметра не обязательны при выводе выражения expr в форме, присущей языку Фортран:

    > fortran(а*х^2+b*х+с);

    t0 = а*х**2+b*х+с

    > fortran(diff(х^n,х$2));

    t0 = x**n*n**2/x**2-x**n*n/x**2

    Параметр optimize позволяет генерировать оптимизированные коды:

    > fortran(а*х^2+b*х+с,optimized);

    t1 = х**2

    t4 = a*t1+b*x+c

    При этом вычислительный процесс строится так, чтобы минимизировать число арифметических операций.

    2.8.3. Вывод на языке С

    Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система Maple 9.5/10 создана на языке С. Для вывода на языке С вначале надо подключить соответствующую функцию:

    > with(codegen, С);

    [C]

    Затем можно использовать функцию С:

    С(expr,folename=str,optimized)

    Например:

    > С(diff(х^b, х$2)) ;

    t0 = pow(х,1.0*b)*b*b/(х*х)-pow(х,1.0*b)*b/(х*х);

    > С(diff(х^b,х$2),optimized);

    t1 = pow(x,1.0*b); t2 = b*b; t4 = x*x; t5 = 1/t4;

    t9 = t1*t2*t5-t1*b*t5;

    Обширные возможности преобразования выражений в различные формы представляет функция convert. А функция interface позволяет управлять выводом.







     

    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх