Алгебра в программе Mathematica

         

Аргумент комплексного числа функция Arg



Аргумент комплексного числа: функция Arg



Функция Arg[z] возвращает аргумент комплексного числа z.

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



Целая часть вещественного числа функции Floor и IntegerPart



Целая часть вещественного числа: функции Floor и IntegerPart



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

Округление к ближайшему целому, не превосходящему х: функция Floor[x]

Функция Floor [х] представляет собой наибольшее целое, не превосходящее х.

{Floor[Pi], Floor[-Pi], Floor[0], Floor [2.99], Floor [-2.0001]} {3,-4,0,2,-3}

Именно функция Floor в математике и называется целой частью числа и обычно обозначается через [х]. Заметьте, что эта функция отсекает дробную часть только неотрицательных чисел. Для отрицательных нецелых чисел ее работа иллюстрируется следующим примером.



Floor[-8.12345678] -9

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

Отбрасывание дробной части: функция IntegerPart

Функция IntegerPart просто отбрасывает дробную часть.
{IntegerPart[2.4],IntegerPart[2.6],IntegerPart[-2.4], IntegerPart[-2.6],IntegerPart[PiA2]}{2,2,-2,-2,9}
"Потолок" вещественного числа — округление к наименьшему целому, не превосходящему х: функция Ceiling

Выражение Ceiling [х] представляет собой наименьшее целое, которое не меньше х.
{Ceiling[Pi],Ceiling[-Pi],Ceiling[0],Ceiling[2.99], Ceiling[-2.0001]} (4,-3,0,3,-2}
Округление вещественного Числа: функция Round

Функции Floor и Ceiling позволяют округлить вещественное число к меньшему или большему целому. Иногда же нужно выполнить округление к ближайшему целому. Именно для этого и предназначена функция Round.
{Round[2.4],Round[2.6],Round[-2.4],Round[-2.6],Round[Р1^2]} {2,3,-2,-3,10}
Однако числа, дробная часть которых равна .5, имеют два ближайших целых. Такие числа функция Round округляет к ближайшему четному целому.
Round[Range[20]-10.5]  {-10,-8,-8,-б,-6,-4,-4,-2,-2, 0, 0,2, 2, 4, 4, 6, б, 8, 8,10}




Целая и дробная части вещественного числа



Целая и дробная части вещественного числа



Всякое вещественное число представляет собой сумму его целой и дробной частей:



Числитель и знаменатель числа



Числитель и знаменатель числа: функции Numerator и Denominator



Функция Numerator[ехрг] собирает в ехрг все множители с неотрицательными показателями. В качестве ехрг можно использовать целые числа, дроби, комплексные числа и их произведение. То же самое функция Denominator делает для сомножителей с отрицательными показателями. Вот пример.



Число как последовательность (список) цифр



Число как последовательность (список) цифр



В позиционной системе счисления число фактически представляет собой список цифр. Для получения такого списка и работы с ним в системе Mathematica предусмотрено несколько встроенных функций, наиболее важными из которых являются IntegerDigits, DigitCount, RealDigits и FromDigits.

Представление целого числа в виде списка десятичных цифр: функция IntegerDigits

Разговаривая по телефону, иногда приходится передавать какие-нибудь длинные, например двадцатизначные, числа. В этих случаях обычно читают их цифра за цифрой. Число 587999888735555 читают, например, часто так: пять, восемь, семь, девять, девять, девять, восемь, восемь, восемь, семь, три, пять, пять, пять, пять. В программах тоже иногда нужно по числу определить его цифры. Если вы хотите узнать, является ли шестизначное число счастливым, вам придется сравнить сумму первых трех цифр с суммой последних трех. Поэтому не удивительно, что уже в версии 2 системы Mathematica была предусмотрена функция IntegerDigits, которая представляет число в виде списка цифр. Представим, например, число 25! в виде списка цифр.
IntegerDigits[25!] {1,5,5,1,1,2,1,0,0,4,3,3,3,0,9,8,5,9,8,4,0,0,0,0,0,0}
Представление целого числа в виде списка цифр в системе счисления с произвольным основанием: функция IntegerDigits

Но, оказывается, функция IntegerDigits может использоваться также для получения списка цифр в системе счисления, основание которой нужно указать вторым параметром. Основание в таком случае может быть любым натуральным числом, большим единицы. Представим, например, число 60! (я полагаю, оно бы очень понравилось шумерам, если бы они его знали) в их любимой шестидесятеричной системе.
IntegerDigits[60! , 60] {1,20,3,4,48,29,10,11,46,47,21,26,45,46,9,29,47,16,37,50,59, 58,0,33, 59,19,31,10,42,35,8,9,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
Иногда нужно представить число в системе счисления не только с заданным основанием, но и с заданным количеством цифр, т.е. дополнить его ведущими нулями в таком количестве, чтобы количество цифр равнялось заданному. Тогда количество цифр в числе нужно задать в качестве третьего параметра функции IntegerDigits.

Вот как число 56 представляется в виде байта.
IntegerDigits[56, 2, 8] {0,0,1,1,1,0,0,0}
А вот как число 25! записывается в 32-разрядных машинах.
IntegerDigits[25! ,2,32] {0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0}
Представление целого числа в виде списка цифр в нега-двоичной системе счисления

Если снование системы счисления b является отрицательным целым числом, меньшим -1, то такую систему называют нега-позиционной. Например, если b = -2, то такая система называется нега-двоичной, а если b = -4 — нега-четверичной, если b = - 10 — нега-десятичной. Основным преимуществом этих систем является отсутствие знака перед отрицательными числами и, следовательно, отсутствие правил знаков. Дело в том, что всякое число любой из нега-позиционных систем с четным числом цифр отрицательно, а число, отличное от 0, с нечетным числом цифр — положительно. Особый интерес для конструкторов вычислительных машин представляет, конечно, нега-двоичная система. Однако если задать отрицательное основание (-2) в качестве второго параметра, функция IntegerDiglts "заругается".



Что такое число



Что такое число



Что такое число? Однозначного ответа на этот вопрос нет. Например, комплексное число — это число или все-таки вектор? А действительное число — это число или сечение во множестве рациональных чисел? А если комплексные числа все-таки числа, то кватернионы — тоже числа или уже объекты другой природы? Ну а если даже кватернионы — все-таки числа, то разве не следует к числам причислить и октавы Кэли? Иногда очень удобно считать, что числа — это элементы любого кольца. Но тогда и матрицы (элементы кольца матриц) тоже ведь нужно считать числами! Впрочем, это совсем не глупо, как может показаться на первый взгляд: в кольце матриц размера 2x2, элементами которых являются вещественные числа, можно выделить подкольцо, которое на самом деле является полем, изоморфным полю комплексных чисел. Так что не удивительно, что каждая эпоха в истории математики давала свой ответ на вопрос о том, что такое число.

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

Чтобы разобраться в этом, давайте рассмотрим классический пример — занимательную задачу из многих популярных книг по математике для младших школьников.

Пример 3.1. Наибольшее число, которое можно записать тремя цифрами. Постановка задачи: какое наибольшее число можно записать с помощью трех цифр?

Ну, конечно, 999, почти не задумываясь, отвечают школьники. И знаете, они по-своему правы. Ведь поскольку в условии задачи говорится о цифрах, то их можно только записывать одна за другой. Поскольку их три, значит, число будет трехзначным. А 999 — наибольшее трехзначное число, причем в его записи используется только три девятки. Но оказывается, что не все так просто. Ведь на самом деле постановка задачи нечеткая. Действительно, в условии ведь не указано, как три цифры можно использовать для записи числа. Ведь каждую из трех цифр можно использовать для записи чисел, а затем над этими числами выполнить какие-нибудь операции. Можно, например, с помощью двух цифр записать число 99, а с помощью оставшейся цифры — число 9, а затем возвести 99 в степень 9: 99".

С вычислением этого числа система Mathematica справляется без малейших затруднений.

999= 913517247483640899

Но можно числа 9 и 99 скомбинировать и иначе: 999. Система Mathematica без труда вычислит и это число.
999= 295126654306527521487534802261977363143592725 17043832886063884637676943433478020332709411004889
Мы сразу видим, что 9" гораздо больше, чем 999. Но вот тут-то оказывается, что есть еще и третий вариант: 99'. Это число имеет 369 693 100 цифр, т.е. более трети миллиарда! Понятно, что во многих компьютерах объем памяти меньше количества цифр этого числа, и потому система Mathematica записать его не сможет. (Если вы все же решили вычислить это число и вам надоело ждать, выберите Ядро<=>Прервать вычисление.)

Впрочем, если допустить еще и операцию вычисления факториала, то, так как 9! = 362880, с помощью трех цифр можно записать еще большее число: 9?? . Это число система Mathematica уж точно записать не сможет! Правда, вычислить показатель степени — число 99!, десятичная запись которого содержит 65 269 цифр, системе Mathematica вполне под силу!

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

9, 9! = 362880, (9!)!, ((9!)!)!, (((9!)!)!)!, ((((9!)!)!)!)!, ...

Уже число (9!)! содержит 4 282 655 цифр, но система Mathematica справляется и с ним! Но вот предложить ей вычислить следующее число в этой последовательности даже и не пытайтесь!

Разобравшись немного с числами, давайте изучим операции над ними. Как видно из примера, арифметические операции над целыми и рациональными числами, как и во многих других системах компьютерной алгебры, выполняются точно (все цифры результата верные). Вот, например, результат возведения в сотую степень числа пять, найденный системой Mathematica.
5100 = 7888609052210118054117285652827862 29673206435109023004770278930640625
Однако при таком представлении целых или рациональных чисел иногда трудно судить о величине результата. Кроме того, поскольку система Mathematica стремится сохранить точность, она оставляет фактически невычисленными такие выражения, как



Дробная часть вещественного числа функция FractionalPart



Дробная часть вещественного числа: функция FractionalPart



Пусть х — вещественное число. Тогда его дробную часть {х} можно определить равенством: {х} = х - [х]. По этому, общепринятому в математике определению дробная часть всегда неотрицательна и меньше единицы: 0<{х}<1. Однако в системе Mathematica используется несколько иное определение:

FractionalPart[х] = х - IntegerPart[х].

Поэтому FractionalPart [х] отрицательна для нецелых отрицательных х.

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

FractionalPart[ х ]- результат применения функции FractionalPart к х

Вот как для этого можно определить функцию f.
f=(Print["FractionalPart[",#1,"]=",FractionalPart[#1]] &)
Теперь можем написать программу, в которой функция f применяется к каждому элементу списка.
f/@{x,2.4,0.3999999999999999',2.6,0.6000000000000001\-2.4, -0.3999999999999999",-2.6,Pi,10,-Рi^2,2*Sin[1],Ехр[Pi*Sqrt[163]]}
Вот результат



Экспоненциальное представление



Экспоненциальное представление чисел: функция MantissaExponent



Функция MantissaExponent [x] представляет число х в виде списка, который содержит мантиссу и экспоненту числа.



Мнимая часть комплексного числа функция Im



Мнимая часть комплексного числа: функция Im



Тоже совсем незамысловатая функция, возвращающая мнимую часть комплексного числа.
Im[3 + 4I]4 {Im[a+bI],ComplexExpand[Im[a+b  I]]) {Im[a]+Re[b] ,b>
Заметьте, что в случае Im[a+b I] вещественность а и b не предполагается — в отличие от случая, когда используется функция ComplexExpand.

 



Мнимая единица



Мнимая единица



На специальной панели символов системы Mathematica имеется мнимая единица, но иногда ее удобно ввести просто как букву I или даже как \ [Imaginaryi] или \ [ImaginaryJ]. Вот примеры.
2I + 1 1+2i 2J+5 5+2i  




Модуль (абсолютная величина) числа функция Abs



Модуль (абсолютная величина) числа: функция Abs



Функция Abs [ z ] возвращает абсолютную величину (модуль) комплексного числа z. Конечно же, ее аргумент может быть и вещественным.



Отбрасывание малых вещественных чисел функция Chop



Отбрасывание малых вещественных чисел: функция Chop



Вещественные числа, меньшие 10-10, можно отбросить с помощью функции Chop.



Представление числа непрерывной



Представление числа непрерывной дробью: функция Continued Fraction



Функция ContinuedFraction [x] преобразует число д: в непрерывную дробь. Количество звеньев определяется точностью числа х. Следующая программа, например, находит представления первых 50 чисел Бернулли в виде цепных дробей.
Do[ Print[2n,":",ContinuedFraction[BernoulliB[2n]]],{n,0,50} ]

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

Количество звеньев цепной дроби можно задать явно в качестве второго параметра.

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



Представление вещественных чисел



Представление вещественных чисел систематическими дробями: функция N. Разрядность и точность вещественных чисел: функции Precision и Accuracy .



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



Преобразование из десятичной системы



Преобразование из десятичной системы счисления в недесятичную



Чтобы преобразовать число из десятичной системы счисления в недесятичную, нужно вызвать функцию BaseForm, причем в качестве первого ее аргумента нужно указать преобразуемое число, а в качестве второго — основание системы счисления, в которую преобразуется число. В качестве основания системы счисления может быть натуральное число и, такое, что 2<n<36. Вот примеры.
BaseForm[377456783746590,2] 10101011101001011100000011000001101100110000111102 BaseForm[377456783746590,16] 1574b8183661е16 BaseForm[377456783746590,60] BaseForm::basf:Requested base 60 should be between 2 and 36. More... BaseForm[377456783746590,60]
Как видите, если указать основание системы счисления, большее 36, функция "заругается". Так что шумерам и древним вавилонянам крупно не повезло бы, попытайся они записать какое-нибудь число, например 1000000, в своей любимой шестидесятеричной системе счисления. Впрочем, числа, большего 3600, шумеры долгое время не знали. Дело в том, что они не сразу осилили концепцию числа как последовательности цифр, или списка цифр.

 



Преобразование непрерывной дроби



Преобразование непрерывной дроби в число: функция FromContinuedFraction



Функция FromContinuedFraction является обратной к функции Continued-Fraction. Она преобразует цепную дробь в число. Вот пример.



Преобразование в десятичную систему счисления



Преобразование в десятичную систему счисления



Хорошо, конечно, что Mathematica, как мы уже видели, действительно умеет многое делать с числами в десятичной системе счисления. Но умеет ли она преобразовывать числа из одной системы счисления в другую? Оказывается, да! Правда, нужно сразу оговориться, что основанием позиционной системы должно быть натуральное число, притом большее 1. Так что никаких комплексных оснований и тем более фибоначчиевых или факториальных систем счисления!

Чтобы ввести число в какой-нибудь системе счисления, сначала нужно указать (в десятичном виде) основание системы счисления n (натуральное число, причем 2<и<36), затем два знака ^^ (крыша), а потом само представление неотрицательного вещественного (или целого) числа без знака в системе счисления с основанием n. Цифры, большие 9, изображаются латинскими буквами от а до z, причем а = 10, b = 11 и т.д., в порядке (латинского) алфавита аж до z = 36. Вот несколько примеров.
{2^^1,2^^10,2^^100,2^^1000,2^^101} {1,2,4,8,5} 16^^ffffaaOO 42949452.80 2^^1001001010110111.11110 37559.9
Только что мы научились преобразовывать числа из недесятичной системы счисления в десятичную. А как же выполнить обратное преобразование, т.е. преобразовать число из десятичной системы в недесятичную?




Приближение вещественных чисел



Приближение вещественных чисел рациональными: функция Rationalize



Что значит найти рациональное приближение вещественного числа? Какое приближение следует считать хорошим? На эти вопросы можно отвечать по-разному.

Mathematica, например, считает, что рациональное число p/q — лежит довольно близко к вещественному х, если существует с, примерно равное 10 -4, такое, что



Разрядность и точность при выполнении операций над числами



Разрядность и точность при выполнении операций над числами.



Давайте теперь посмотрим, что происходит с разрядностью и точностью при выполнении действий.



Мы рассмотрели основные числовые системы,



Резюме

Мы рассмотрели основные числовые системы, предусмотренные в системе Mathe-matica. Они полностью охватывают классическую математику. Благодаря такому богатству система Mathematica может помочь в решении практически любых математических задач. Но благодаря этому же богатству при решении задач можно столкнуться с теми же проблемами, что и в математике. И потому решение исследовательских задач с помощью системы Mathematica может потребовать основательного знакомства с методологией применения данной системы в конкретной области науки и техники. Конечно, по высказыванию Гаусса, математика — царица всех наук. И потому в первую очередь следует освоить именно методологию применения системы Mathematica к решению математических задач. И начнем мы с царицы математики (по выражению того же Гаусса) — с арифметики.


Сопряженное комплексное число функция Conjugate



Сопряженное комплексное число: функция Conjugate



Выражение Conjugate [z] представляет собой сопряженное комплексное число z . Вот как, например, можно получить число, сопряженное к х+I у.
Conjugate[х+Iу] Conjugate[x]-IConjugate[у]
Заметьте, что х и у предполагаются комплексными.



Вещественная часть комплексного числа функция Re



Вещественная часть комплексного числа: функция Re



Это совсем незамысловатая функция, возвращающая вещественную часть комплексного числа.
Re[3+4I] 3 Re[a+bI] -Im[b]+Re[a]
Заметьте, что в последнем примере вещественность а и b не предполагается.




Знак числа функция Sign



Знак числа: функция Sign



Если аргумент х — вещественное число, то Sign[x] возвращает —1, 0 или 1, в зависимости от того, является аргумент отрицательным, нулем или положительным. Если комплексное число z отлично от нуля, то Sign[z] по определению равно i/Abs [z]. Рассмотрим пример.