Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М

.pdf
Скачиваний:
1
Добавлен:
19.11.2023
Размер:
33.75 Mб
Скачать

3729941413991192954257293905515987341623164931728987789298548218169139

5638163536241282159945102531936490365111022151523381436452790489309133

7135424027258899192161986823235528295581059873200107875550497563219302

4344987469732081489429513875050815089544676150938253329884107629370887

7836604655306868577285538664595048264681443930199901657433773640659222

5567911709051797128549077311912778888144108736659703862174018641106917

5749952023659419640302178959561265901520782425747790756781859047252118

7834397950104895326861429034026538474079051464877355002168754758452522

2504190436087068107827922710445722736236879669324173378416116695919841

0304677682964919409043870523002732003770237480443431032331691094261441

1443802983487519201990595627905118880497502650026828835219138968584962

8968612357880766725385147857934444955391441537519437285121796122315842

8624231899492121175279814486360858048056575120864817906982359465546791

0333455703061443068891823765935581887182311839775111872409211627286291

2671381160865803740893007151687615872534112762296886660.521036261139972

8215256794224599912431852531227205445323135206226637942724364187507359

9561819112180689917957773267962616087523437758046684223813614460906815

8859423168444990563130856914398161104641435976464505827310532042357277

8055041510761287441331660970400343561555943556993103725670073628460112

4392438005172117946648151586517714791609426531867375357616728998278915

6765819918501461470394696987900055057821804367427737785530796529257310

0704405035528657706565889113413367817192934796097513499651992416721568

8582041932369782649567521678584676130166505149750837355470484537680891

7106579182046296637409148513289873712928793514345917581372183082138176

8374444936696984757491555027227218191496737306894525429493301724974763

4880287892338097288098981994162698166278766445393167015463543161066099

4478782022049824681885420029046846763098262298893067982085873006027223

5476735450044805739148100924911019338705887449906544811444564378814239

2205726681802780327973470136681753346929095906271088971584210825489831

3134138767612788549048657824912624883639420318879265232485613570477399

7090467104480778132423835257758424180335745170573652705419795069195190

8858510985383906254985074673094196111657808386987133103440863605484510

7081922257029648252724270305699507491876725741414282227189033471727764

3954342541859509907472906259527629621846811719367901786024179895120064

9296133065178107633744949972930820555024320766184645860276161198156767

7373636018999149195717505734613349483793082747826653826109388871646107

6377076699523221210638410121119502728028192147321213391939138517117401

8054543600453475322352999580219232920276778840652994222860862521050680

5680779347684445472832022947989505073864225065042453778536680082426933

6818816623176949556726361708670651772685686418825606961363993789380923

6306153420664991067712166783072652806506511543078782208618706781689410

9743170406015960678013961777060204838325510730464182561678677866776664

1145888295077288459709643465468572600850673752055883218340619680664771

3695475465058265972218278752703801335088536077384715897009519636940664

4986845955931896822762457057294441289666846719625035790435931009430361

3350580572837195254247505334922434012206891543167881708739008884991490

5882791350768045506828033944542308221148888187376496354399413641511521

2683005334092753230471448815684295521726253123958196789418655868201079

5291845929630207675781253000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

00 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Числа, их представление и операции над ними

73

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000001308948114465174795123603548945492

90725102417205882279175127Х103663

Ну, как? Не думаете ли вы, что это число заслуживает того, чтобы вычислить его целую и дробную части по отдельности? Сначала вычислим целую часть.

IntegerPartPisotNumber=IntegerPart[N[PisotNumber,5555]]

•5043165960656654932150594692427574810776102746808935031678444677128757

1822648621061039807658193406827538578254082133094787003547778717669468

5987718254576565515786375180403084108087720197360263045377599299252600

7874643437115478340662656654242263167137970470876460028676595720882553

7299414139911929542572939055159873416231649317289877892985482181691395

6381635362412821599451025319364903651110221515233814364527904893091337

1354240272588991921619868232355282955810598732001078755504975632193024

3449874697320814894295138750508150895446761509382533298841076293708877

8366046553068685772855386645950482646814439301999016574337736406592225

5679117090517971285490773119127788881441087366597038621740186411069175

7499520236594196403021789595612659015207824257477907567818590472521187

8343979501048953268614290340265384740790514648773550021687547584525222

5041904360870681078279227104457227362368796693241733784161166959198410

3046776829649194090438705230027320037702374804434310323316910942614411

4438029834875192019905956279051188804975026500268288352191389685849628

9686123578807667253851478579344449553914415375194372851217961223158428

6242318994921211752798144863608580480565751208648179069823594655467910

3334557030614430688918237659355818871823118397751118724092116272862912

6713811608658037408930071516876158725341127622968866605210362611399728

2152567942245999124318525312272054453231352062266379427243641875073599

5618191121806899179577732679626160875234377580466842238136144609068158

8594231684449905631308569143981611046414359764645058273105320423572778

0550415107612874413316609704003435615559435569931037256700736284601124

3924380051721179466481515865177147916094265318673753576167289982789156

7658199185014614703946969879000550578218043674277377855307965292573100

7044050355286577065658891134133678171929347960975134996519924167215688

5820419323697826495675216785846761301665051497508373554704845.376808917

1065791820462966374091485132898737129287935143459175813721830821381768

3744449366969847574915550272272181914967373068945254294933017249747634

8802878923380972880989819941626981662787664453931670154635431610660994

4787820220498246818854200290468467630982622988930679820858730060272235

4767354500448057391481009249110193387058874499065448114445643788142392

2057266818027803279734701366817533469290959062710889715842108254898313

1341387676127885490486578249126248836394203188792652324856135704773997

74

ГГ7ава 3

09046710448077813242383525775842418033574517057365270541979506919^1908

8585109853839062549850746730941961116578083869871331034408636054845107

0819222570296482527242703056995074918767257414142822271890334717277643

9543425418595099074729062595276296218468117193679017860241798951200649

2961330651781076337449499729308205550243207661846458602761611981567677

3736360189991491957175057346133494837930827478266538261093888716461076

3770766995232212106384101211195027280281921473212133919391385171174018

0545436004534753223529995802192329202767788406529942228608625210506805

6807793476844454728320229479895050738642250650424537785366800824269336

8188166231769495567263617086706517726856864188256069613639937893809236

3061534206649910677121667830726528065065115430787822086187067816894109

7431704060159606780139617770602048383255107304641825616786778667766641

1458882950772884597096434654685726008506737520558832183406196806647713

6954754650582659722182787527038013350885360773847158970095196369406644

9868459559318968227624570572944412896668467196250357904359310094303613

3505805728371952542475053349224340122068915431678817087390088849914905

8827913507680455068280339445423082211488881873764963543994136415115212

6830053340927532304714488156842955217262531239581967894186558682010795

291845929630207675781253

“Ну и что?” — возможно, скажете вы. Тогда присмотритесь внимательнее, где на­ чинаются нули. Да, именно с них и начинается дробная часть.

N [PisotNumber-IntegerPartPisotNumber,5555]

N::meprec

Internal precision limit

 

$MaxExtraPrecision

50. reached

while evaluating

-5043165960 «3644»

7675781253 « 1 » « 1 » . More...

1.30894811446517479512360354894549290725102417205882279175127063157759

5957302806949481931774975390950288082252 xlO"1832

Из этого видно, что после десятичной точки следует 1831 нуль! Чтобы обнаружить, что это число не целое, нужно вычислить его не менее, чем с 5496 десятичными зна­ ками. Вот это можно было бы устроить розыгрыш!

Упражнение 3.3. Пусть

 

f

F ibon acti[n + 2

\ _1

 

 

= - ---------- ----

 

 

•* ti.n

Q Fihoruwci[n Щ _j

 

Положим теперь a = л/Г7 - Vl4 , n = 25.

 

 

f l 1964l8

__ i

 

 

 

Рассмотрим число f a25=

ПРИ a = ^

~

*

a

—1

 

 

 

Сколько у этого числа нулей следует сразу после десятичной точки?

Решение. Вот самое простое решение. Сначала вводим определение дроби f a n.

aFibonacci[k+2] _ ^

F F r a c t io n [ a _ , k_]

3 Fibonacci[k+1] _ ^

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

N [ F F r a c t i o n [ S q r t [ 1 7 ] - S q r t [14],25],50]

1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Ну и как? А вот еще:

Числа, их представление и операции над ними

75

N [ F F r a c t i o n [ S q r t [ 1 7 ] - S q r t [ 1 4 ] , 2 5 ] , 5 00]

1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 000 000 000 0

Хотите еще? Пожалуйста.

N [ F F r a c t io n [ S q r t [ 1 7 ] - S q r t [ 1 4 ] , 2 5 ] ,5 0 0 0 ]

1 . 000 00 000 00 00 00 0 00 00 0 00 00 0 00 00 0 00 0 00 00 0 0 0 0 00 0 .. .0 0 0

А пятьдесят тысяч знаков после десятичной точки не хотите ли? Хотите. Тогда по­ жалуйста, только эф ф ект будет в десять раз сильнее.

N [ F F r a c t io n [ S q r t [ 1 7 ] - S q r t [1 4 ] ,2 5 ] ,5 0 0 0 0 ]

1 . 00000 000 00000 0000 000 00 000 00 000 00 000 00 00 00000 ...0 00

М ежду прочим, если это число целое, то после десятичной точки у него сплошные

нули... И все попытки просто приведут

к исчерпанию свободной памяти. Ну бывает

ж е, что дроби сокращ аются, а радикалы взаимно уничтожаются:

yp2—y [l = 0,

>/8 — 2>/2 = 0 и т.д.

А здесь ведь разность степеней делится

на разность степеней... Вот он о, коварство ав­

торов, придумывающих “подленькие” задачи! Возм ож но, нуж но лиш ь упростить вы­

ражение и убедиться, что оно равно какому-нибудь целому числу! Вот если в числите­ ле вычесть и добавить удачно подобранную степень основания:

J fl.9«.8 _ д* + д* _ 1 д«*И1« _ я* - 1

 

 

 

 

 

 

ат т - 1

 

атж-1

 

атж- 1

+ ап,ж - 1

 

 

 

К онечно, сразу же просится к =

121393, тогда сразу ж е выделится единица:

 

a

196418

 

1

a

196418

—a

121393

,

Л 121393

 

л

196418

—a

'2,3vJ

a

‘2,3v3

 

i

196418

—a

'2,мз

1

 

 

—\

 

 

+

a

—\ a

 

 

t

 

—\ a

 

 

f l 12l393 _ |

~

 

 

 

f l l2l39 3

_

|

 

д 121393 _ j

^

^121393

 

_ j ~

f l l2l39 3 _

j ^

*

Осталось справиться с числом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

196418 — д 1213Л

т з я

д 196418*121393 _

1 (

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

атж- \

~ й

а'2'ш - 1

 

 

 

 

 

 

 

А ведь

 

разность

показателей

представляет собой

разность

последовательных

чисел

Ф ибоначчи,

и

потому

опять

есть

число

Фибоначчи! Внимательно следите за моей

мыслью? М ожет, надеетесь на дальнейш ие упрощ ения? Так вот они:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

^196418-121393 _

|

д 75025

_ |

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а'1хт- \

=

а ,2,393 - Г

 

 

 

 

 

 

 

тот же

М ож но

(для

удобства

исследования)

эту дробь обратить и

 

применить к

ней

прием! И с полученной дробью м ож но поступить так же! Фактически у нас получатся элементы цепной дроби! После двух десятков (с хвостиком) шагов мы убедимся, что желанного нуля у нас так и не получится. Значит, после десятичной точки все-таки есть цифры, отличные от нуля! Ну вот, а вы говорили о коварстве авторов, придумы­ вающих “подленькие” задачи! Н о как же найти эти цифры? Ну, после проделанной работы у вас есть уверенность в наличии таких цифр, и потому вы знаете, что, в конце

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

76

Гпава 3

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

N [Log[10,FFraction[Sqrt[17]-Sqrt[14],25]],50]

N:rmeprec

precision limit $MaxExtraPrecision

50.

Internal

Log[-< < i^]

. More-

reached while evaluating — =-- <<->>—

Log [10]

0. ж Ю " 101

 

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

Block[{$MaxExtraPrecision = 2500000},

N [Log[10,FFraction[Sqrt[17]-Sqrt[14],25]-l],40]] -50810.78649910263274438966441795437532248

Так, оказывается, после запятой 50810 нулей! Убедимся в этом.

N [FFraction [Sqrt [17] -Sqrt [14 ],25] ,52000]

1.000.0001634 93652933759283069270304 98442786486729522534 94 99596144517 1710302090830540954107615661095561416428720902573692470134362560380426 1251840906410760194868841156024020565176871952163928561772240318987456 0876932353742732233221453342043146147284537612475536506139437884941805 0395996079053560020301701071622059831448812970541024163535572686516051 7829591998888575225233222941634765314474671468740209602234655695585653 5995874285553291107889277189653150679397061342594886574230662624488694 5812557530477531615281173301061300851266627268774031832546178191343285 8963044957897852746759892896578102312759138070772691758000475604480515 3966711036597025752995025969545652484711742077411743012698828644580142 3624221874145471646773347191608954794057263073282475576345332113263663 318599065818643857861165308111775584557004678223880501006813296253.0148 8806184776552799723103961400947522220893813735671401794392157704550175 7387867788246896818546680413802288252648154648614894446140245739816425 5158463673227353623411602239376151676504689831305376344834176121564030 3790996593054850457645000919175207528535818445109663271017204005962146 2493170435409832252517195393736676642079501519832870957900499192299683 2815367872

Что касается нулей, то, хоть я и вычеркнул подавляющее их число, предварительно я их посчитал в Word! И их оказалось 50810! Между прочим, убедиться в том, что чис­ ло f a n не целое, не так-то просто.

a=Sqrt[17]-Sqrt[14]

-V I? + Vl7

gFibonaccitk+2] _ ^

F F r a c tio n [a _ , k_J :

aFibonacci[k+1] _ ^

x=FFraction[a,25]

- i+ ( - v i? . у т л 196418

-1+ (-V I? + V H )121393

Simplify[xeIntegers]

- 1 + (-V I? + Vl7 ) 196418 e Integers - 1 + ( - V I ? + V H )121393

Числа, их представление и операции над ними

77

Упражнение 3.4. Пусть х = ^|40>/2 - 57| - >/40>/2+ 5 7

Сколько у этого числа нулей следует сразу после десятичной точки?

Решение. Вот самое простое реш ение. Сначала вводим определение числа.

x=Sqrt[57-40Sqrt[2]]-Sqrt[57+40Sqrt[2]]

Теперь нуж но вычислить число с такой точностью , чтобы найти хотя бы один не­ нулевой знак после запятой. Итак, попробуем.

N [ х , 500]

-10.000000000000000000000000000000000000000000...

Да это ж предыдущий случай! Мы уже знаем, как с этим справиться.

B lo c k [ { $ M a x E x tr a P r e c is io n = 2 5 0 0 0 0 0 } ,

N [L o g [ 1 0 , х+10 ] , 4 0 ] ]

Видите ли... Как бы вам это популярнее объяснить, пока продолжаются вычисле­ ния... Отличие от предыдущ его случая состоит в том, что в предыдущем случае мы убедились, что 1 действительно является целой частью исследуемого числа. В данном же случае мы лиш ь предполагаем, что число -10 является целой частью-числа х . х+10

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

Вот и всего-то... Да, но что-то

наши вычисления слиш ком затянулись... Понимаете,

тут я долж ен сделать ещ е одно

разъяснение. Видите ли, чтобы вычислить логарифм,

нужно проделать некоторые вычисления, и в нашем случае с довольно высокой точ­ ностью. И успех эти вычисления принесут лиш ь тогда, когда будет обнаруж ено, что аргумент логарифма (число х+ 10) отличен от нуля... А в данном случае для этого недостаточно даже вычисления более чем двух с половиной миллионов знаков. Види­ те ли, бывает же, что дроби сокращаются, а радикалы взаимно уничтожаются. Вот в

данном случае как раз х+ 10 = 0, потому что х = - 1 0 . Д анное число целое! Давайте по­ пробуем убедиться в этом.

x=Sqrt[57-40Sqrt[2]]-Sqrt[57+40Sqrt[2]]

л/б7 - 40 V2 - л/57 + 40 VI

I n te g e r Q [ x ]

F a l s e

Возм ож но, вы подумали, что автор хотел обвести вас вокруг пальца! Число всетаки оказалось нецелым! П росто система M athem atica не смогла вычислить достаточ­ ное количество^знаков, и автор реш ил упростить себе задачу. Увы, если вы согласи­ лись с тем , что число н ецелое, соверш или довольно распространенную ошибку. Не потому, что оно целое, а потому, что так проверять нельзя. Предикат ln te g e r Q [x ] может принимать значение F a ls e даж е для целого аргумента. Он проверяет не само чис­ ло, а его внутреннее представление. Этот предикат принимает значение T rue только в том случае, если внутреннее представление числа имеет заголовок I n t e g e r . Вот как лучше проверять.

S i m p l i f y [ х е I n t e g e r s ]

х € I n t e g e r s

F u l l S i m p l i f y [ х е I n t e g e r s ]

х е I n t e g e r s

78

Гпава 3

S i m p l i f y [ x e I n t e g e r s , T r a n s f o r m a t i o n F u n c t i o n s - * > { A u t o m a t i c , R o o t R e d u c e } ]

X E I n t e g e r s

Как видите, все ответы тавтологичны. И в данном, случае вопрос так и не прояс­ нился... Да, система Mathematica не всегда может то, с чем справляется даже школьник:

^ W 2 - 5 7 |- V W 2 + 5 7 = y jd 3 2 -5 )1 - J ( j 3 2 - 5 ) 2 =

= (>/32 - 5) —(>/32 + 5) = -5 -5 = -10.

Теперь уж действительно ясно, что число целое. Конечно, придумать таких примеров можно великое множество. И проблема здесь не в коварстве авторов задачников, а в том, что не существует алгоритма (в классическом смысле), который для любого ве­ щественного числа мог бы решить вопрос о том, равно оно нулю или нет. Существует специально разработанный математиками конструктивный анализ, в котором число­ вой континуум состоит не из обычных вещественных чисел, а из конструктивных. Для конструктивного вещественного числа всегда разрешим вопрос о том, равно ли оно нулю. Конструктивный континуум — та основа, на которой строятся другие объекты конструктивного анализа, например функции. Однако в конструктивном анализе изу­ чаются не любые функции (отображения конструктивного континуума в себя), а только конструктивные. Несмотря на некоторое сходство, свойства конструктивных объектов отличаются подчас радикально.

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

рациональными: функция Rationalize

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

Mathematica, например, считает, что рациональное число — лежит довольно близко к

Ч

вещественному х, если существует с, примерно равное 10 4, такое, что

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

0,1; 0,01; 0,001;

10

20

 

 

 

 

t=Table [ R a t i o n a l i z e [ P i , 1 0 A - i ] ,{i ,20}]

 

г 22

22 201

333

355 355

75948

l 7 '

7 ' 64 ' 106' 113' 113' 24175 '

100798

103993

312689

833719

4272943

32085 ' 33102 ' 99532 ' 265381 ' 1360120 ' 5419351 58466453 80143857 245850922 1725033 ' 18610450 ' 25510582 ' 78256779 '

1068966896 2549491779 6167950454 21053343141 ,

340262731 ' 811528438 ' 1963319607 ' 6701487259 J

Обратите внимание на то, насколько добросовестно система Mathematica подыски­ вает рациональные приближения. Хотя знаменатели рациональных чисел невелики, найденные приближения настолько хороши, что повторяются в этом списке дважды. Иными словами, они приближают л на порядок лучше, чем было первоначально “заказано” с помощью второго параметра.

Числа, их представление и операции над ними

79

Позиционные системы счисления

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

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

Чтобы ввести число в какой-нибудь системе счисления, сначала нужно указать (в десятичном виде) основание системы счисления п (натуральное число, причем 2<л<36), затем два знака АА (крыша), а потом само представление неотрицательного вещественного (или целого) числа без знака в системе счисления с основанием п. Цифры, большие 9, изображаются латинскими буквами от а до z, причем а = 10, b = 11 и т.д., в порядке (латинского) алфавита аж до z = 36. Вот несколько примеров.

{2АА1 ,2 АА10,2АА100,2АА1000,2АА101}

{1,2,4,8,5}

16AAffffaa00

4294945280

2АА1001001010110111.11110

37559.9

Только что мы научились преобразовывать числа из недесятичной системы счис­ ления в десятичную. А как же выполнить обратное преобразование, т.е. преобразовать число из десятичной системы в недесятичную?

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

Чтобы преобразовать число из десятичной системы счисления в недесятичную, нужно вызвать функцию BaseForm, причем в качестве первого ее аргумента нужно указать преобразуемое число, а в качестве второго — основание системы счисления, в которую преобразуется число. В качестве основания системы счисления может быть натуральное число л, такое, что 2<л<36. Вот примеры.

BaseForm[377456783746590, 2]

10101011101001011100000011000001101100110000111102

BaseForm[377456783746590, 16]

1574b8183661ei6

BaseForm[377456783746590,60]

BaseForm: :basf : Requested base 60 should be between 2 and 36. More...

BaseForm[377456783746590, 60]

Как видите, если указать основание системы счисления, большее 36, функция “заругается” Так что шумерам и древним вавилонянам крупно не повезло бы, попы­ тайся они записать какое-нибудь число, например 1000000, в своей любимой шести­ десятеричной системе счисления. Впрочем, числа, большего 3600, шумеры долгое время не знали. Дело в том, что они не сразу осилили концепцию числа как последо­ вательности цифр, или списка цифр.

80

Гпава 3

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

В позиционной системе счисления число фактически представляет собой список цифр. Для получения такого списка и работы с ним в системе 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,4 8,2 9, 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 }

Представление целого числа в виде списка цифр в нега-двоичной системе счисления

Если снование системы счисления Ь является отрицательным целым числом, меньшим -1, то такую систему называют нега-позиционной. Например, если b = —2, то такая система называется нега-двоичной, а если b = —4нега-четверичной, если ^ = “ Ю — нега-десятичной. Основным преимуществом этих систем является отсутствие знака перед отрицательными числами и, следовательно, отсутствие правил знаков. Дело в

Числа, их представление и операции над ними

81

том, что всякое число любой из нега-позиционных систем с четным числом цифр отрица­ тельно, а число, отличное от 0, с нечетным числом цифр — положительно. Особый интерес для конструкторов вычислительных машин представляет, конечно, нега-двоичная сис­ тема. Однако если задать отрицательное основание (-2) в качестве второго параметра, функция integerDigits “заругается”.

IntegerDigits[10!, -2 ]

IntegerDigitsibase : Base - 2 is not an integer greater than 1. More.,,

IntegerDigits[3628800,-2]

Однако функция IntegerDigits позволяет определить функцию, которая сможет представить число в нега-двоичной системе.

ToNegabinary[i_] := Module[{t = у (4F1°or[Logt4,Abs[i]+i]+2] _i)},

IntegerDigits[BitXor[i + t , t] , 2]]

ToNegabinary[2ЛЛ10111]

{1,1,0,1,0,1,1}

ToNegabinary[20!]

{ 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0,1, 0, 0, 0 , 1, 1, 0, 1, 1, 0, 0, 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }

И уж совсем просто определить функцию, которая по представлению числа в нега' двоичной системе находит его представление в десятичной системе:

Length[list]

FromNegabinary [list_] :=

^

list[[-n]] (-2)n_1

Пг 1

Вот пример (фактически мини-тест) применения обеих функций.

nb=ToNegabinary [151]

{ 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , ! , 0 , 0 , 0 , 1 / 0 , 0 , 0 , 1 / 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ,0, 0, 0, 0, 0, 0}

m=FromNegabinary[nb]

1307674368000 m-15!

0

Представление вещественного числа

в виде списка десятичных цифр: функция RealDigits

Функция RealDigits позволяет представить вещественное число в виде списка цифр. В этом она похожа на функцию IntegerDigits для целых чисел. Однако, t отличие от функции IntegerDigits, функция RealDigits выдает список, состоя­ щий из двух элементов: списка цифр и количества цифр до десятичной точки.

RealDigits[123.4567890123456]

{ { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 1 , 2, 3,4,5,6},3} n=N[BernoulliB[32] ,20]

-1.5116315767092156863xlO10 RealDigits[n]

{{1,5,1,1,6, 3,1,5, 7, 6, 7,0,9,2,1,5,6,8,6,3},11}

82

Глава i