Главная страница

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


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница11 из 38
1   ...   7   8   9   10   11   12   13   14   ...   38
In the force if Yoda's so strong, construct a sentence with words in the proper order then why can't he?
Darth Vader
1. Группировка. В математике используется много видов скобок, двой- ных скобок, и т.д., которые следует тщательно различать между собой, в частности
фигурные скобки {, } (braces, curly brackets),
круглые скобки (, ) (parenthesis),

159
квадратные скобки [, ] (brackets),
ломаные скобки h, i (angle brackets),
и несколько других видов скобок (brackets, delimiters). Эти скобки ис- пользуются в нескольких совершенно различных смыслах, определяемых из контекста.
Круглые скобки используются в первую очередь для группировки, т.е.
для обозначения последовательности выполнения алгебраических опера- ций: (x + y) + z = x + (y + z). В отличие от школьной алгебры, профессио- нальные математики никогда не используют для группировки квадратные и фигурные скобки. Вместо этого ля лучшей читаемости формул исполь- зуются круглые скобки разных кеглей: (, ), ,

,

,

, . . . .
2. Множества, наборы, тупели. Напомним, что в математике через
{a, b, c} обозначается множество с элементами a, b, c. Еще одной важней- шей функцией круглых скобок является обозначение тупелей (tuple, Tu- pel).
Тупелем называется упорядоченная n-ка с неопределенным n.
В
различных учебных и программистских книгах тупели называются также списками, кортежами, массивами, векторами и т.д. Так, например,
(a, b, c) обозначает упорядоченную тройку с компонентами a, b, c. Напом- ним, что, в отличие от множеств, порядок и кратность компонент тупеля существенны! Так, (a, b, c)
6= (c, a, b) и (a, a, b) 6= (a, b), в то время, как
{a, b, c} = {c, a, b} и {a, a, b} = {a, b}. Кроме того, в алгебре широко исполь- зуется понятие набора, промежуточное между множеством и тупелем: в наборе существенны кратности компонент, но не их порядок.
Специа- листы по комбинаторике обычно называют наборы мультимножества- ми. Наборы обычно обозначаются квадратными скобками, таким образом
[a, a, b]
6= [a, b, b], но [a, a, b] = [b, a, a].
3. Другие функции скобок. Кроме того, круглые скобки использу- ются для выражения многих других понятий. Отметим лишь некоторые простейшие функции скобок. Среди прочего они используются для обозна- чения
аргумента/ов отображения: f(x), f(x, y),
скалярного произведения: (u, v),
интервала частично упорядоченного множества:
(x, y) =
{z ∈ X | x < z < y},
наибольшего общего делителя (m, n).
Впрочем, последнее обозначение следует признать полностью устаревшим,
в настоящее время используется исключительно обозначение gcd(m, n).
Квадратные скобки передают, в частности,
отрезок частично упорядоченного множества:
[x, y] =
{z ∈ X | x ≤ z ≤ y}

160
,
наименьшего общего кратного [m, n]
целую часть числа [x]
Последние два обозначения также явдяются полностью устаревшими, так как в современных текстах для наименьшего общего кратного используется обозначение lcm(m, n), а для целой части —
bxc.
Кроме того, в различных разделах математики скобки используются для выражения десятков других понятий.
§ 6. Группировка и скобки в Mathematica
In general, it can never hurt to include extra parentheses, but it can cause a great deal of trouble if you leave parentheses out, and Mathe- matica interprets your input in a way you do not expect.
Steven Wolfram
Only idiots' programs contain more parenthesis than actual code.
Real programmer
В тексте, адресованном человеку, предполагается, что он до некоторой степени понимает смысл прочитанного и может различить три разные функции круглых скобок в выражении
((f (x), f (y)) + (g(x), g(y))) + (h(x), h(y)).
Трудно, однако, ожидать подобную степень понимания от компьютера в любой ситуации. Это значит, что мы должны каким-то образом диффе- ренцировать эти функции (эта фраза не была задумана как каламбур, как это часто бывает, мы ее вначале написали и только потом прочли). В языке
Mathematica тот же текст будет записан следующим образом:
(
{f[x],f[y]}+{g[x],g[y]})+{h[x],h[y]}.
К сожалению, стандартная компьютерная клавиатура имеет всего три раз- ных пары скобок: (,), [,] и
{,} и все эти три вида здесь использованы!!!
Это значит, что для всех остальных контекстов, когда математическая тра- диция использует скобки, нам нужно будет изобретать новые обозначения.
Итак, вот четыре основных вида скобок в языке Mathematica.
()
Parenthesis группировка
[]
Brackets аргумент функций
{}
Braces формирование списков
[[]]
DoubleBrackets выделение частей списка
Резюмируем функцию скобок в языке Mathematica.
Использование круглых скобок не отличается от их использования в школьной матема- тике, а использование квадратных и фигурных скобок более детально об- суждается в следующих параграфах.

161
Круглые скобки (,) используются исключительно для группировки,
т.е. для обозначения порядка выполнения операций. Уже для алгебраиче- ских операций порядок их выполнения совершенно не очевиден. Употреб- ление круглых скобок совершенно необходимо в следующих случаях:
операция неассоциативна и для нее не задан способ группировки;
операции имеют одинаковый приоритет (в этом случае по умолчанию производится левая группировка);
не существует общепризнанной иерархии операций и/или применяе- мая в Mathematica иерархия отличается от общепринятой (например, для логических операций).
Так, (x^y)^z значит совсем не то же самое, что x^(y^z). По умолчанию формула x^y^z истолковывается как x^(y^z). Мораль сказанного состо- ит в том, чтобы в сомнительных случаях, таких как этот, явным образом ставить скобки, указывающие на порядок выполнения операций. В даль- нейшем мы снова и снова возвращаемся к этому основополагающему прин- ципу.
Квадратные скобки [,] используются для обозначения аргумента —
или аргументов — функции. Например, sin(x) будет записано как Sin[x].
Условный оператор If x Then y Else z будет записан как If[x,y,z].
Фигурные скобки {,} используются для обозначения всех видов списков. Множества, наборы и тупели обозначаются в Mathematica оди- наково!! Точнее, множества и наборы представляются списками своих эле- ментов. Однако для работы с ними используются разные функции. Обшее понятие списка в Mathematica эквивалентно математическому понятию ту- пеля. Иными словами, два списка
{a[[1]],...,a[[m]]} и {b[[1]],...,b[[n]]}
тогда и только тогда считаются равными, когда m=n и a[[i]]=b[[i]] для всех i = 1, . . . , n. В части 3 мы обсудим функции Sort и Union, которые превращают тупель в набор или множество.
Двойные квадратные скобки [[,]] используются для выделения элементов и частей списка (или выражения, трактуемого как список!!), как сокращенная запись функции Part. Для списка x через x[[i]] обознача- ется его i-я компонента. Через x[[
{i,j,...,k}]] обозначается список
{x[[i]],x[[j]],...,x[[k]]},
состоящий из компонент списка x в позициях i, j, . . . , k. Запись x[[i,j]]
используется как сокращенная форма x[[i]][[j]] для обозначения j-й компоненты i-й компоненты списка x — если x[[i]] сама является списком или интерпретируется как список.
Комментарий. Интересно, что в Maple делается совершенно другой выбор в плане использования скобок. А именно, круглые скобки используются там в двух совершен- но различных смыслах: для обозначения группировки и для обозначения аргументов

162
функции. Квадратные скобки используются для формирования списков, а фигурные скобки — для формирования множеств. Это значит, что фактически круглые скобки могут использоваться для группировки только в сочетании со знаками операций, опус- кать которые в Maple нельзя. Например, в Maple выражение f(x+y) истолковывается как f[x+y], а вовсе не как f*(x+y).
Одним из важнейших признаков правильно составленного выражения является его сбалансированность: на каждом уровне выражения количе- ство скобок (левых скобок) равно количеству антискобок (правых скобок)
того же типа, причем ни в какой момент количество антискобок не может превосходить количество скобок. Cкобки могут рождаться (и уничтожать- ся!) только парами
{скобка,антискобка}. Впрочем FrontEnd вряд ли поз- волит Вам забыть об этом, скобки и антискобки, у которых нет пары, будут выделены другим цветом (по умолчанию красным).
§ 7. Числовые домены
Язык Mathematica различает множества и домены, которые отвечают обычным в математике способам задания множества, посредством пере- числения всех его элементов и посредством характеристического свойства.
Множество задается явным списком своих элементов, в обычных обо- значениях
{x
1
, . . . , x
n
}. Этот список per forza конечен!
Домен задается признаком принадлежности, в обычных (некоррект- ных!!!) обозначениях
{x | P (x)} и, вообще говоря, бесконечен.
Математики уже около 100 лет назад пришли к выводу о недопустимо- сти использования обозначения
{x | P (x)}. Дело в том, что без каких-то дополнительных предположений относительно свойства P нельзя гаранти- ровать существование множества вообще всех элементов x, обладающих этим свойством. Такие свойства P , для которых это множество все же существует, называются коллективизирующими. Для всех остальных свойств запись
{x | P (x)} является чисто словесным артефактом, за ко- торым не стоит никакой реальности, т.е. который вообще ничего не обозначает ни в этом, ни в каком-то другом из миров. Все так называ- емые `противоречия', `парадоксы' или `антиномии' теории множеств осно- ваны на предположении о реальности этих артефактов. Что действительно существует для любого свойства P , так это множество
{x ∈ X | P (x)} эле- ментов множества X, обладающих свойством P (аксиома Цермело ZF6).
Однако, конечно, в Mathematica домены образуются только для коллекти- визирующих свойств, и, кроме того, все их элементы принадлежат хотя и бесконечному, но очень небольшому множеству всех выражений.
Вот основные домены, определенные в ядре системы Mathematica. До- полнительные домены определены в пакетах и, кроме того, пользователь может, конечно, определять собственные домены.

163
Booleans
{True,False} значения истинности
Integers
Z
целые числа
Primes
P
простые числа
Rationals
Q
рациональные числа
Algebraics
Q
алгебраические числа
Reals
R
вещественные числа
Complexes
C
комплексные числа
Отличие множеств от доменов становится зримым, когда мы хотим выяс- нить, принадлежит ли какой-то элемент множеству или домену. Проверка принадлежности элемента множеству производится посредством вопроса
MemberQ. В то же время проверка принадлежности элемента домену произ- водится посредством отношения Element:
Element[x,domain]
x принадлежит домену domain
MemberQ[list,x]
x встречается в списке list
FreeQ[list,x]
x не встречается в списке list
Отношение Element действует совершенно предсказуемым образом:
In[12]:=
{Element[1,Booleans], Element[1,Integers],
Element[1,Primes]
}
Out[12]=
{False, True, False}
In[13]:=
{Element[Pi,Algebraics], Element[Pi,Reals],
Element[Pi,Complexes]
}
Out[13]=
{False, True, True}
С другой стороны, вычисление MemberQ[Integers,1] и MemberQ[Reals,Pi]
дает значение False — в самом деле с точки зрения системы, как Integers,
так и Reals являются доменами, а не множествами и не задаются явным списком своих элементов. Более того, со структурной точки зрения они вообще не имеют частей!!!
Несколько особняком стоит интервальная арифметика. Интервалом в
Mathematica называется то, что большая часть специалистов по анализу называет отрезком или сегментом, т.е. замкнутый интервал
[a, b] =
{x ∈ R | a ≤ x ≤ b}.
С одной стороны интервал в общем случае заведомо не является списком. С
другой, использование интервалов серьезно отличается от использованиея доменов.
Interval[
{min,max}]
интервал между min и max
IntervalMemberQ[interval,x]
x лежит в интервале interval
Обратите внимание на синтаксис команды Interval!!! Интервал [a, b] за- дается в формате функции одного аргумента Interval[
{a,b}], а вовсе не

164
как Interval[a,b]. Иными словами, аргумент имеет вид списка
{a,b}. В
действительности, функцию Interval можно вызывать с любым количе- ством аргументов, но в этом случае значение функции интерпретируется как объединение нескольких интервалов.
§ 8. Универсальные инструменты: Simplify, FullSimplify, Refine
Едва ли не самыми полезными командами всей системы Mathematica являются команды упрощения такие, как Simplify, FullSimplify, Refine и Assuming. Типичными условиями в этих командах как раз и является принадлежность определенным доменам каких-то входящих в рассматри- ваемые выражения переменных или параметров. В приводимых ниже опи- саниях этих команд под assuming как правило как раз и скрывается такого рода условие — или какое-то другое аналогичное условие, например, x
0,
x
0 и т.д.
Simplify[x,assumption]
упрощение выражения
FullSimplify[x,assumption]
полное упрощение выражения
FunctionExpand[x,assumption]
упрощение аргумента функций
Refine[x,assumption]
упрощение числовой функции
Assuming[assumption,x]
вычисление выражения x, assuming
Все эти команды, кроме Assuming, могут вызываться и без предположе- ний. В этом случае они используют дефолтные системные предположения
$Assumptions.
Основное различие между Simplify и FullSimplify состоит в том вре- мени, которое они готовы потратить на выполнение определенного преоб- разования. Для команды Simplify по умолчанию Time Constraint->300
(пять минут!!!).
В то же время для FullSimplify по умолчанию Time
Constraint->Infinity, кроме того, она использует более широкий список табличных преобразований и не накладывает ограничений на длину про- межуточных результатов. Тем не менее, для числовых функций команда
Refine заведомо работает лучше:
In[14]:=FullSimplify[Cos[x+n*Pi],Element[n,Integers]]
Out[14]=Cos[n*Pi+x]
In[15]:=Simplify[Cos[x+2*n*Pi],Element[n,Integers]]
Out[15]=Cos[x]
In[16]:=Simplify[Cos[x+(2*n+1)*Pi],Element[n,Integers]]
Out[16]=-Cos[x]
In[17]:=Refine[Cos[x+n*Pi],Element[n,Integers]]
Out[17]=(-1)nCos[x]
А вот еще более замечательный пример, из которого видно, что Mathe- matica умеет использовать малую теорему Ферма:
Simplify[Mod[n^p,p], Element[n,Integers]&&Element[p,Primes]]

165
упрощается до Mod[n,p]. Поясним, что && в правой части обозначает конъ- юнкцию, так что условие состоит в том, что n целое, а p простое. Конечно,
без этих предположений никакого подобного упрощения не происходит.
Команда Assuming добавляет предположения к дефолтному списук си- стемных предположений $Assumptions. Например, Simplify[Sqrt[x^2]]
сама по себе не сможет произвести вообще никаких упрощений потому, что относительно x ничего не предполагается. Сейчас мы посмотрим, упроща- ется ли выражение Sqrt[x^2] в предположениях , что x вещественно, x
0
или x
0. Команда Assuming удобна, если Вы хотите добавить предполо- жения сразу к нескольким упрощениям или, наоборот, попробовать одно и то же упрощение с разными предположениями. Вот как, примерно, она используется.
In[18]:=Map[Assuming[#,Simplify[Sqrt[x^2]]]&,
{Element[x,Reals],x>=0,x<=0}]
Out[18]=
{Abs[x],x,-x}
Таким образом, мы видим, что для вещественных x выражение Sqrt[x^2]
упростилось до Abs[x], для неотрицательных — до x и, наконец, для непо- ложительных — до
−x, as expected. Впрочем, можно подставлять список условий и непосредственно в команды Simplify, FullSimplify, Refine:
In[19]:=Map[Refine[Abs[x]+Abs[1-x],#]&,
{x<=0,0<=x<=1,1<=x}]
Out[19]=
{1-2*x,1,-1+2*x}
§ 9. Целые и рациональные числа
God is real, unless declared integer.
Real Programmer
Одной из основ системы Mathematica является арифметика бесконечной точности. В главе 3 мы детально обсудим использование арифметические операций, пока же остановимся только на задании целых и рациональных чисел. Целое число задается обычным образом и может быть любой длины.
Вот основные функции для работы с цифрами целых чисел.
IntegerDigits[n]
список цифр числа n
FromDigits[x]
целое число с цифрами x
n
, . . . , x
0
DigitCount[n]
подсчет количества цифр 0, 1, . . . , 9 в числе n
Total[DigitCount[n]]
общее количество цифр в числе n
Обсудим использование этих функций.
Функция IntegerDigits[n] игнорирует знак числа n, в то время как
IntegerDigits[0] равен 0.
Функция IntegerDigits может вызываться с одним, двумя или тремя аргументами. Вычисление IntegerDigits[n,b] даст список цифр десятич- ного числа n в базе b.

166
Вычисление IntegerDigits[n,b,l] представляет собой прокрустово ложе, которое всегда выдает список длины l. Если количество цифр числа
n в базе b меньше l, то этот список раздувается до нужной длины нулями слева. Если количество цифр числа n больше l, то берутся l младших цифр.
Функция FromDigits является обратной к IntegerDigits на множестве натуральных чисел. Таким образом, функция FromDigits[
{xn,...,x0}]
перерабатывает список цифр
{xn,...,x0} в десятичное число
x
n
10
n
+ . . . + x
1 10 + x
0
.
Тем самым, IntegerDigits[FromDigits[list]] возвращает list. С дру- гой стороны, так как IntegerDigits игнорирует знак, то вычисление ком- позиции в обратном порядке FromDigits[IntegerDigits[n]] возвращает абсолютную величину числа n, а не само это число.
Функция FromDigits может вызываться также с двумя аргументами, в формате FromDigits[list,b]. В этом случае она дает десятичную запись числа, цифры которого в базе b приведены в списке list, по умолчанию
b = 10.
При вызове функции FromDigits ни элементы списка цифр, ни база со- вершенно не обязаны быть цифрами!! Они могут быть любыми символами и даже выражениями. Например, вычисление FromDigits[
{a,b,c,d}] даст
10*(10*(10*a+b)+c)+d, а вычисление Expand[FromDigits[
{a,b,c,d},x]]
даст d+c*x+b*x^2+a*x^3. Таким образом, функция FromDigits дает еще один способ породить многочлен его списком коэффициентов!
Функция FromDigits может использоваться, например, для того, что- бы задавать числа, цифры которых подчиняются простым закономерно- стям. В этом случае вместо того, чтобы вводить такое число с клавиатуры,
обычно гораздо проще создать список его цифр, а потом переработать этот список в число посредством FromDigits. Например,
FromDigits[Flatten[Table[
{1,2,3},{10}]]]
даст тридцатизначное число 123123123123123123123123123123, в котором
10 раз повторяется группа цифр
{1,2,3}. Функция выравнивания списков
Flatten использована здесь для того, чтобы убрать лишние скобки в полу- чающемся при исполнении Table выражении
{{1,2,3},{1,2,3},...}. Вот использование той же самой конструкции в более реалистическом контек- сте. Следующая программа пытается найти простые числа среди первых трех тысяч натуральных чисел, десятичная запись которых состоит из од- них единиц:
onelist=Table[
{n,FromDigits[Table[1,{n}]]},{n,1,3000}];
Select[onelist,PrimeQ[#[[2]]]&]
Мы знаем, что первым таким числом является 11.
Интересно, есть ли другие? Оказывается, есть!! Вот часть ответа, получающегося при работе предыдущей программы:
{{2,11},{19,1111111111111111111}, {23,11111111111111111111111}},

167
и, кроме того, среди таких чисел, у которых не больше 3000 знаков, имеется еще ровно два простых числа, в запись которых входит 317 и 1031 единиц,
соответственно!!!
Точно так же DigitCount может вызываться с одним, двумя или тремя аргументами. DigitCount[n,b] даст список количества цифр 1, 2, . . . , b

1, 0 в представлении десятичного числа в базе b, по умолчанию b = 10.
Например, DigitCount[100,2] даст
{3,4}. В самом деле, вычисление дво- ичного представления посредством BaseForm[100,2] показывает, что 100 =
11001002.
DigitCount[n,b,d] дает количество появлений цифры d в выражении десятичного числа n в базе b.
Таким образом, если мы хотим увидеть количество появлений десятичной цифры d в обычной десятичной записи числа n, нужно спросить DigitCount[n,10,d].
Вызываемая с одним аргументом команда DigitCount[n] эквивалент- на DigitCount[n,10,Mod[Range[10],10]].
В частности, играя в предыдущих командах с b мы можем перевести число из одной базы в другую. Но для этого есть и специальные команды.
base bbx перевод числа из базы base в базу 10
BaseForm[x,base]
перевод числа из базы 10 в базу base
Использование этих команд таково. Вычисление x bbb переводит число из базы b в десятичную форму. Например, 16
bb100 дает 256. При этом
База b может быть любым десятичным числом между 2 и 36.
Для базы b между 2 и 10 используются обычные десятичные цифры.
Для базы b между 11 и 36 в качестве дополнительных цифр используются буквы a-z — или, что в этом констексте то же самое, A-Z.
Та же конструкция обслуживает и вещественные числа, достаточно ввести в последовательность цифр десятичную точку.
Рациональное число задается как отношение m/n двух целых чисел. При этом автоматически производятся все возможные сокращения, а знак пе- реносится в числитель. Следующие две команды выделяют числитель и знаменатель рационального числа. Рациональные числа считаются точны- ми и все вычисления с ними производятся с бесконечной точностью. Вот команды для выделения числителя и знаменателя. В принципе их мож- но применять к любым выражениям, но для выражений, не являющихся дробями, они могут работать довольно необычным образом.
Numerator[x]
числитель x
Denominator[x]
знаменатель x
В соответствии с тем, что сказано выше, в дроби
4/6 будут произведе- ны сокращения, так что Numerator[-4/6] равен -2, а Denominator[-4/6]
равен 3.

168
§ 10. Запись вещественного числа
Вещественные и комплексные числа в Mathematica могут быть как точ- ными, так и приближенными. Рациональное число всегда точное, а точ- ные иррациональные числа бывают алгебраическими и трансцендентными.
Вычисления с алгебраическими числами производятся по специальным до- вольно сложным алгоритмам. С другой стороны, трансцендентные числа,
между которыми нет очевидных зависимостей (ну как, скажем, между e и
e
2
), рассматриваются как независимые полиномиальные переменные.
Приближенное вещественное число обычно характеризуется явным на- личием десятичной точки (по-русски, запятой!) Добавление десятичной точки к целому числу, а также к числителю и/или знаменателю рациональ- ного числа превращает их в приближенные вещественные числа.
N[x]
приближенное значение x
с машинной точностью
N[x,m]
приближенное значение x с точностью m цифр
RealDigits[x]
список цифр вещественного числа x
FromDigits[
{list,m}] восстановление числа по списку цифр
Команда N осуществляет переход от точного к приближенному веществен- ному или комплексному числу. Чтобы увидеть десятичное приближение к иррациональному числу x с точностью до m знаков, нужно вычислить
N[x,m], по умолчанию m = 6. В следующем параграфе мы посмотрим на примеры применения этой команды,
Команда RealDigits[x] возвращает список, состоящий из двух частей:
списка цифр и целого числа m, указывающего на сколько разрядов число
|x| нужно сдвинуть вправо, чтобы оно попало в отрезок [0, 1], причем первая цифра после запятой стала отлична от 0. В случае положительного m, это в точности количество разрядов слева от десятичной точки. Таким образом,
RealDigits[N[Pi^5]] вернет нам
{{3,0,6,0,1,9,6,8,4,7,8,5,2,8,1,4},3}
что следует понимать в том смысле, что первые три цифры в списке стоят слева от десятичной точки, так что целая часть числа π
5
равна 306. С
другой стороны, если m отрицательно, это значит, что первые
|m| цифр после десятичной точки равны 0.
Как и IntegerDigits, команда RealDigits[x] игнорирует знак x.
Функция RealDigits может вызываться с одним, двумя, тремя или че- тырбмя аргументами. Полный формат этой команды RealDigits[x,b,l,n]
возвращает l цифр числа x по основанию b, начиная с позиции b
n
. При этом база b вовсе не обязана быть целым числом.
По умолчанию RealDigits[x] возвращает список цифр, длина которо- го равна Precision[x]. Однако если мы вызываем RealDigits с тремя ар- гументами, в формате RealDigits[x,b,l], причем l больше, чем точность

169
Log[10,b]Precision[x], то недостающие цифры заполняются значением
Indeterminate.
Для того, чтобы к вещественному числу можно было применить функ- цию RealDigits, оно должно быть приближенным числом. Так, скажем,
попытка вычислить RealDigits[Pi] приведет к сообщению об ошибке, свя- занной с тем, что команда не может определить требуемую точность:
RealDigits: The number of digits to return cannot be determined.
Правильный вопрос RealDigits[Pi,10,50] даст нам первые 50 цифр числа
π. С другой стороны, того же эффекта можно добиться и при помощи
RealDigits[N[Pi]]. Без указания количества цифр это даст нам цифры числа π с машинной точностью:
{{3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3},1}
С другой стороны для целых чисел и рациональных чисел с конеч- ным десятичным разложением RealDigits[x] даст обычный список цифр.
Для рационального числа x с бесконечным десятичным разложением ответ будет представлен в виде
{{a1,...,ak,{b1,...,bl}},m}, где a
1
, . . . , a
k

начальные цифры разложения x, b
1
, . . . , b
l
— период, а m имеет обычный смысл.
Обратимся теперь к основным формам записи вещественного числа.
MantissaExponent[x]
мантисса и порядок x
NumberForm[x]
математическая запись x
ScientificForm[x]
научная запись числа x
EngeneeringForm[x]
инженерная запись числа x
Вот как работают эти команды.
Команда MantissaExponent создает список (y, n), состоящий из ман- тиссы числа x и его экспоненты При этом по возможности
0.1
≤ y < 1, либо 1 < y ≤ −0.1 и x = 10
n
y.
Например, вычисление MantissaExponent[N[Sqrt[7]]] даст
{0.264575,1}.
Обратите внимание, что команда MantissaExponent работает не только с приближенными, но и с точными вещественными числами!!
Все остальные команды переводят вещественное число в формат приня- тый, соответственно, в математике (NumberForm); в физике, химии и аст- рономии (ScientificForm) и, наконец, в технике (EngeneeringForm). В
математическом формате число задается явным указанием позиции деся- тичной точки, без попытки отделить экспоненту 10. В научном формате положительное вещественное число x представляется в виде x = 10
n
y, где
1
≤ y < 10. В инженерном формате показатель степени всегда кратен 3.
Иными словами, число x представляется в виде x = 10
n
y, где 1
≤ y < 1000.
Вот, примерно, как это работает на практике:

170
In[20]:=numberforms=
{NumberForm,ScientificForm,EngineeringForm};
Through[numberforms[N[Pi^10]]]
Out[20]=
{93648.04748,9.364804748×104,93.64804748×103}
Команда Through здесь осуществляет применение списка функций к одно- му и тому же аргументу.
Описанные выше команды представления вещественных чисел и род- ственные им команды (скажем, принятые в бухгалтерии учетная форма
AccountingForm и раздутая форма PaddedForm) допускают большое коли- чество опций, описывающих особенности выравнивания, разбиения на бло- ки, задания формы знака и экспоненты, разделителей и пр. Вот названия нескольких типичных опций: DigitBlock, NumberSeparator, NumberPoint,
NumberMultiplier, NumberSigns, NumberPadding, SignPadding, NumberFor- mat, ExponentFunction. Все они служат для того, чтобы выводить большие объемы числовых данных в наглядном виде, согласованном с различными типографскими традициями, и начинающему не обязательно разбираться в том, что они делают.
Однако первые две опции настолько полезны, что мы все же укажем,
как их следует изменить для лучшей читаемости ответа. Дело в том, что по умолчанию никаких разбиений цифр на блоки не производится, а если производится, то слева от запятой — на самом деле, по-английски, конеч- но, точки — блоки разделяются запятыми, а справа — пробелами. Ины- ми словами, по умолчанию DegitBlock->Infinity, а NumberSeparator-
>
{","," "}. Однако этим опциям можно, конечно, придавать другие зна- чения. Мы обычно разбиваем ответ на блоки из пяти цифр, разделенные пробелами как слева, так и справа от запятой:
In[21]:=NumberForm[2^150,DigitBlock->5,NumberSeparator->" "]
Out[21]=1 42724 76927 05959 88105 82859 69449 49513 63827 46624

171
§ 11. Константы
In any formula, constants (especially those obtained from handbooks)
are to be treated as variables.
The Tao of Real Programming
The primary purpose of the DATA statement is to give names to con- stants; instead of referring to π as 3.141592653589793 at every appear- ance, the variable PI can be given that value with a DATA statement and used instead of the longer form of the constant. This also simplifies modifying the program, should the value of π change.
FORTRAN manual
Вот некоторые наиболее важные константы встроенные в ядро системы
Mathematica:
Pi
π
E
e
основание натурального логарифма
Degree
1 0
градус
GoldenRatio
ϕ =
1 +

5 2
золотое сечение
В действительности в ядре системы и расширениях содержится значитель- ное количество других констант, однако с математической точки зрения они не могут интересовать начинающего, а с технической точки зрения их использование не содержит никаких новых моментов, по сравнению с использованием E или Pi. Для того же, кто интересуется асимптотикой,
интегральными формулами, статистикой или чем-нибудь в таком духе, об- ращение к другим встроенным в ядро или описанным в пакетах констан- там, скажем к EulerGamma, Catalan или Khinchin, не представит никакого труда.
Пожалуй, из перечисленных констант самой интересной является гра- дус. Дело в том, что из школьной программы многие вообще не выносят впечатления, что градус является вещественным числом. По этому поводу в учебниках произносятся загадочные и абсолютно невразумительные за- клинания на тему о мере угла и пр. В действительности 1

никогда не был ничем иным, кроме обычного вещественного числа, равного π/180. Вот его первые 50 значащих цифр:
In[22]:=N[Degree,50]
Out[22]=0.017453292519943295769236907684886127134428718885417
Еще одна константа, играющая огромную роль в дальнейшем — это зо- лотое сечение. Так называется больший из корней уравнения x

1
x
= 1,
равный ϕ =
1 +

5 2
. Легко видеть, что ϕ = 2 cos

π
5

— это в точности диа- гональ правильного пятиугольника со стороной 1, вот численное значение
ϕ:

172
In[23]:=N[GoldenRatio,50]
Out[23]=1.6180339887498948482045868343656381177203091798058
В отличие от принятого в континентальной Европе немецкого индустриаль- ного стандарта DIN система Mathematica по умолчанию считает, что высо- та и ширина стандартной книжной страницы (portrait orientation)
соотносятся как ϕ : 1, а стандартной альбомной страницы (landscape orientation) — соответственно, как 1 : ϕ.
Комментарий. В математической литературе число ϕ обычно обозначается через τ и называется отношением крайнего и среднего (extreme and mean ratio), божествен- ной пропорцией (divina proportione) или числом Фидия.
Золотое сечение часто использовалось греческими скульпторами и архитекторами и явно описывается в “Эле- ментах” Эвклида, который рассматривает пропорцию
y
z
=
y + z
y
. Ясно, что в терминах
x =
y
z
эта пропорция переписывается в виде x = 1 +
1
x
, а как мы знаем x = τ как раз и является положительным корнем этого уравнения. Самое знаменитое классическое произведение, специально посвященное золотому сечению — это книга Луки Пачоли
“De divina proportione”, в иллюстрациях к которой использованы модели и 59 таблиц,
изготовленные его близким другом Леонардо да Винчи. Третья часть книги Пачоли представляет собой итальянский перевод книги Пьеро делла Франческа “De quinque cor- poribus regularibus”. С математической точки зрения совершенно исключительная роль золотого сечения связана с тем, что это базисный элемент кольца целых поля
Q[

5], при помощи которого строится конечная группа кватернионов порядка 120, которая в свою очередь ответственна за существование правильного додекаэдра и правильного икосаэд- ра.
Отношение Mathematica к константам заслуживает отдельного обсуж- дения. Дело в том, что разные части системы трактуют их по разному,
причем по умолчанию они понимаются как символы, а не как числа:
In[24]:=Head[GoldenRatio]
Out[24]=Symbol
Вот основные точки зрения на константы, используемые в различных типах вычислений:
С точки зрения численных вычислений все эти константы считают- ся численными величинами (NumericQ[Pi] дает True) и имеют численные значения, которые можно с любой точностью найти при помощи функции
N.
С точки зрения алгебраических вычислений все эти константы — вклю- чая золотое сечение, являющееся алгебраическим числом!!! — трактуются как независимые переменные. Следующий диалог иллюстрирует различие между алгебраическим числом (1 +

5)/2 и константой GoldenRatio, ко- торая трактуется как символ. Кроме того, этот диалог показывает, что для получения осмысленного ответа полезно применять функцию Simplify или
FullSimplify.
In[25]:=((1+Sqrt[5])/2)^2-(1+Sqrt[5])/2-1
Out[25]=
1 +
1 2
(
1

5) +
1 4
(1 +

5)
2

173
In[26]:=Simplify[%]
Out[26]=0
In[27]:=Simplify[GoldenRatio^2-GoldenRatio-1]
Out[27]=-1-GoldenRatio+GoldenRatio^2
In[28]:=FullSimplify[GoldenRatio^2-GoldenRatio-1]
Out[28]=0
С точки зрения аналитических вычислений все эти константы счита- ются константами, они имеют атрибут Constant, и поэтому трактуются как константы при вычислении производных и интегралов по всем допу- стимым переменным.

1   ...   7   8   9   10   11   12   13   14   ...   38


написать администратору сайта