Ознакомительная версия.
> 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
Благодаря возможности выполнения символьных вычислений 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);
Ознакомительная версия.