Иллюстрированный самоучитель по Mathematica
Расширение в теории чисел
Мы уже описывали
уникальные возможности систем Mathematica 3/4 в области обработки чисел и численных
вычислений. Эти возможности существенно расширяет пакет
NumberTheory, содержащий
функции, реализующие алгоритмы теории чисел. Данный раздел посвящен знакомству
с этим пакетом.
Цепные дроби — ContinuedFractions
Следующие
функции подпакста ContinuedFractions служат для представления чисел в виде цепных
дробей или для формирования цепной дроби из списков:
-
ContinuedFraction
[х] — возвращает цепную дробь для рационального числа х;
-
ContinuedFraction
[х, n] — возвращает цепную дробь для числа х с числом членов п;
-
ContinuedFractionForm
[{а0, al,...}] — создает цепную дробь из списка {a0,al,...};
-
Normal [ContinuedFractionForm[
{а0, al,...}]] — представление в нормальной форме.
Примеры разложения
чисел на цепные дроби:
<<NumberTheory`
ContinuedFractionss
ContinuedFraction[123/1234]//ContinuedFractionForm
ContinuedFraction[Sqrt[5], 10]//ContinuedFractionForm 2,
ContinuedFraction[GoldenRatio,
6 ] //ContinuedFractionForm
Table[ Normal[ContinuedFractionForm[Table[1,
{n}]]], {n, 9}]
%- N[GoldenRatio]
{-0.618034,
0.381966, -0.118034, 0.0486327,
-0.018034, 0.00696601,
-0.00264937, 0.00101363,-0.00038693}
В подпакете
имеются также следующие функции:
-
ToPeriodicForm[x]
— дает десятичное представление для рациональнЪго числа 0 < х < 1;
-
ToPeriodicForm [х,
b] — дает представление рационального числа х числом с основанием
b;
-
PeriodicForm[ {а0,...},
{am,...}] — дает периодическую форму представления списков;
-
PeriodicForm[ {а0,...},
{am,...},b] — дает периодическую форму представления списков с основанием
b;
-
Normal [ PeriodicForm
[{а0,...}, {am,...}]] — преобразование в нормальную форму;
-
Normal [PeriodicForm[
{а0,...}, {am,...} ,b] ] — преобразование в нормальную форму с основанием
b.
Ниже представлены
примеры применения этих функций:
ToPeriodicForm[
1/50 ]
0.02
ToPeriodicForm[
1/23 ]
0.0434782608695652173913
PeriodicForm[1,2,3,4]
0.1234
RealDigits[
N[ 1/23, 25 ] ]
{{4, 3, 4, 7,
8, 2, 6,
0, 8, 6, 9,
5, 6, 5, 2, 1, 7, 3, 9, 1, 3, 0, 4, 3, 5},
-1}
ToPeriodicForm[
1/20, 2 ]
0.000011 ToPeriodicForm[ 1/127 ]
0.007874015748631496062992l2598425l968503937
Normal[%]
1/127
В системе
Mathematica 4 функция ContinuedFraction стала встроенной. Имеется также встроенная
функция FromContinuedFraction [list], которая строит цепную дробь по элементам
списка list.
Улучшенное разложение на простые множители — FactorlntegerECM
Алгоритм
разложения чисел на простые множители, реализованный в ядре
Mathematiica
3, способен за 3 часа (на рабочих станциях) разлагать числа, имеющие до 18 цифр.
Улучшенный алгоритм в подпакете FactorlntegerECM позволяет увеличить максимальное
число цифр до 40. Реализуется разложение следующей функцией:
-
FactorIntegerECM[n]
— возвращает один из делителей числа п. Возможны опции FactorSize->q, CurveNumber->b
и CurveCountLimit->c.
Примеры применения
этой функции:
<<NumberTheory`FactorlntegerECM`
FactorIntegerECM[123456789]
34227
3*5*7*9
945
FactorlntegerECM[945]
189
Функции теории чисел — NumberTheory Functions
В подпакете
NumberTheoryFunctions имеется ряд функций, относящихся к теории чисел:
-
SquareFreeQ[n] — дает
True, если п не имеет квадратичного фактора, и False в ином случае;
-
NextPrime [n] — дает
наименьшее простое число, превосходящее п;
-
ChineseRemainderTheorem[listl,
Iist2.] — дает наименьшее неотрицательное целое г, такое что Mod
[r, Iist2]
==list1;
-
SqrtMod [d, n] — дает
квадратный корень из (d mod п) для нечетного
n;
-
PrimitiveRoot [n]
— дает примитивный корень п;
-
QuadraticRepresentation
[d, n] — дает решение {х,у} для уравнения х
2
+ (d у)
2
==п
для нечетного п и положительного d;
-
ClassList[d] — дает
список неэквивалентных квадратичных форм дискриминанта d для отрицательного
и свободного от квадратов целого d вида 4n+1;
-
ClassNumber [d] —
дает список неэквивалентных квадратичных форм дискриминанта
d;
-
SumOf Squares [d, n] — дает число представлений целого числа п в виде суммы d квадратов;
-
SumOf SquaresRepresentations
[d, n] — дает список представлений целого числа п в виде суммы d
квадратов, игнорируя порядок и знаки.
Примеры применения
данных функций приведены ниже:
<<NumberTheory`NumberTheoryFunctions`
SquareFreeQ[2*3*5*7]
True SquareFreeQ[50]
False
NextPrime[1000000]
1000003
ChineseRemainderTheorem[{0,
1, 2}, {4, 9,
244
ChineseRemainderTheorem[Range[16], Prime[Range[16]]]
20037783573808880093
SqrtMod[3,
11]
5
SqrtMod[2,
10^64 +57]
876504467496681643735926111996
54610040103361197677707490912
2865
PrimitiveRoot[7]
3
QuadraticRepresentation[l,
13]
{3,. 2}
ClassList[-19]
{{1, 1, 5}}
ClassNumber[-10099]
25
SumOfSquaresRepresentations[3,
100]
{{0, 0, 10},
(0, 6, 8}}
Работа с простыми числами-PrimeQ
В подпакете
PrimeQ в дополнение к функции ядра PrimeQ [n] имеется ряд функций для работы
с простыми числами:
-
ProvablePrimeQ [n]
— возвращает True, если п проверено на простоту, и False в ином случае;
-
PrimeQCertif icate [n] — возвращает сертификат о том, что
n— простое или композитное число;
-
ProvablePrimeQ [n,
Certif icate->True] — возвращает сертификат, который может использоваться
для проверки чисел на простоту;
-
PrimeQCertif icateCheck
[check, n] — проверяет, удостоверяет ли сертификат check простоту или композитность
п.
Следующие
примеры показывают работу с простыми числами:
<<NumberTheory` PrimeQ`
PrimeQ[127]
True
ProvablePrimeQ[127]
True
PrimeQCertificate[127]
{127, 3, {2,
{3, 2, {2}.}, {7, 3, {2, {3, 2, {2}}}}}}
ProvablePrimeQ[127,
Certificate->True]
(True, {127,
3, {2, {3, 2, {2}}, {7, 3, {2, {3, 2, {2}}}}}}}
PrimeQCertificate[3511,
SmallPrime -> 1000]
{{CertificatePrime
-> 3511,
CertificatePoint->PointEC[2,
2467, 1447, 2135, 3511], Certif icateK-> 32, Certif icateM -> 3424,
CertificateNextPrime
-*107, CertificateDiscriminant -> -7},
107, 2, {2, {53,
2, {2, {13, 2, {2, {3, 2, {2}}}}}}}}
Вычисление примитивных элементов — Primitive Element
Подпакет
PrimitiveElement содержит всего одну функцию для вычисления примитивных элементов
множественного алгебраического выражения:
-
PrimitiveElement [z,
{а1„а2,...} ] — возвращает список {b, { f1, f2,...}}, где b — примитивный
элемент расширения рациональных алгебраических чисел
al, а2,... и f1, f 2,...
— полином переменной z, представляющей al, a2, ... как термы примитивного
элемента.
Ее действие
видно из следующего примера:
<<NumberTheory`PrimitiveElement`
PrimitiveElement[z,
{Sqrt[2], Sqrt[3]}]
RootReduce[%[[2]]
/. z -> %[[1]]]
Создание рядов Рамануджанат-Дирихле — Ramanujan
В подпакете
Ramanujan определены следующие функции:
-
RamanujanTau [n] —
n-й коэффициент ряда Рамануджана т-Дирйхле (т
n
);
-
RamanujanTauGeneratingFunction
[z] — производящая функция ряда Рамануджана
т-Дирихле;
-
RamanujanTauDirichletSeries
[s] — ряд Рамануджана т-Дирихле f(s);
-
RamanujanTauTheta [t]
— функция Рамануджана т-Дирихле o(t)
-
RamanujanTauZ [t] —
функция Рамануджана т-Дирихле z(t).
Это довольно
редкие функции, представляющие интерес для специалистов в теории чисел. Достаточно
подробные их определения даны в справочной базе данных. Ограничимся приведением
примеров их использования:
<<NumberTheory`Ramanujan`
RamanujanTau[5]
4830
Sum[RamanujanTau[n]
z^n, {n, 5}]
z - 24 z2
+ 252 z3 - 1472 z4 + 4830 z5
RamanujanTauGeneratingFunction[.
1]
0.00610209
RamanuJanTauGeneratingFunction[.99]
4.10287803703
x -1673
RamanujanTauDirichletSeries[6
+ 9.221]
0.00040309-0.002390131
z = RamanujanTauZ[9.22]
0.00242388
theta = RamanujanTauTheta[9.22]
1.40372043366323
z Exp[-I theta]
0.00040309 -
0.00239013 I
Рационализация чисел — Rationalize
Подпакет
Rationalize расширяет возможности представления чисел в рациональном виде. Он
содержит определения следующих функций:
-
ProjectiveRationalize
[ {х0, xl,..., хn} ] — возвращает список целых чисел, дающих рациональные
представления для чисел заданного списка;
-
ProjectiveRationalize
[ {х0, xl,..., хn} ,ргес] — возвращает список целых чисел, дающих рациональные
представления с погрешностью не более 10-
рreк
-
Af f ineRationalize
[ {х0, xl,..., хn} ] — возвращает список рациональных приближений для чисел
заданного списка;
-
Aff ineRationalize
[ {х0, xl,..., xn} ,prec] — возвращает список рациональных приближений для
чисел заданного списка, вычисленных с погрешностью не более 10-
ргес
.
Встроенная
в ядро функция Rationalize дает рациональное представление для одиночных вещественных
чисел. Приведенные функции выполняют рационализацию для списков чисел.
Примеры их применения представлены ниже:
<<NumberTheory` Rationalize`
Rationalize[N[3 Pi], 6]/ Rationalize[N[11
Pi], 6]
9/35
ProjectiveRationalize[{N[3 Pi], N[11 Pi]}]
{3, 11}
AffineRationalize[{N[3 Pi], N[11 Pi]}, 6]
{1065/113, 3905/113
}
Нахождение полинома, дающего заданный корень — Recognize
Подпакет
Recognize содержит определение одноименной с ним функции в двух формах:
-
Recognize [x,n,t] —
находит полином переменной t степени, большей п, такой, что х является его
корнем;
-
Recognize [х, n, t,
k] — находит полином переменной t степени, большей п, такой, что х является
его корнем, и со штрафным весовым коэффициентом
k, предназначенным для подавления
генерации полиномов высших степеней.
Действие
этой функции поясняют следующие примеры:
<<NumberTheory`Recognize`
NSolve[2
x^3- x + 5 == 0]
{{x->-1.4797},
{x-> 0.739852-1.068711}-,
{x->0.739852+
1.068711}}
sol = First[x
/. %]
-1.4797
Recognize[sol,
3, t]
5-t+2t3
Recognize[sol,
2, t]
-225599 - 1464961
+ 4032 t2
Recognize[N[Sqrt[3^(2/5)]],
5, t]
-3+t5
Recognize[N[Sqrt[3A(2/5)]],
5, t, 10]
-14625 + 11193
t + 328 t2 + 8813 + t4
Тета-функция Зигеля
Подпакет
SiegelTheta содержит еще одну редкую функцию:
-
SiegelTheta [z, s]
— возвращает значение тета-функции Зигеля Q(Z, s).
Примеры вычисления
этой функции даны ниже:
<< NumberTheory`
SiegelTheta`
SiegelTheta[{1+1,2+1},
{2+1,-1+41}, {1.2, 2.3+.3I}]
0.973715-0.0002970481
Sum[E^(Pi
I {tl,t2}.{ {1+1,2+1}, {2+1, -1+41} }.{tl,,t2} +
2 Pi I {tl,t2}.{l.2,2.3+.31}),
{tl,-10,10>, {t2,-10,10}]
0.973715 - 0.000297048
I
В заключительной
части этого примера дано вычисление тета-функции Зигеля по
ее исходному
определению.
|