Эйнштейн, объясняя как-то сущность своих открытий ребёнку, сказал, что ему удалось лишь то, что не удаётся червяку, ползущему по соломинке, - заметить, что соломинка кривая. После небольших зигзагов, связанных с обучением БК второму языку и исследованием возможностей дооснащения БК, мы ещё несколько задержимся на «прямолинейных» сюжетах, прежде чем обратиться к не менее обширной тематике, связанной с построениями на дисплее именно кривых линий.
Н. ГЕРМАН
ОТ ПРЯМЫХ ЛИНИЙ НА ДИСПЛЕЕ - К ПРОИЗВОЛЬНЫМ КРИВЫМ
Развивая затронутую нами на втором занятии (см. вып. № 3 за 1989 г.) тему радуги, приведём здесь соответствующую программу на БЕЙСИКе. Её можно видоизменить так, чтобы запуск лучей производился со случайно изменяющимся прицельным расстоянием Y, что может быть более удобным в процессе отладки программы. С принятой же нами системой пуска лучей очень легко уловить существо декартовой теории радуги (иногда всё, что связано с Декартом, называют также картезианским, что, возможно, более правильно, поскольку у него Де-, в сущности, приставка: Descartes). Так, нетрудно заметить, что радужные всплески, соответствующие максимумам угловой концентрации исходящих лучей, возникают в точках, где при плавном росте прицельного параметра Y лучи, смещавшиеся в одном направлении, меняют его на обратное. Математически это выражается просто, как равенство нулю производной dD/dY. Если аналитически выразить зависимость угла выхода лучей D от величины Y (а в программе эта связь фактически содержится), то можно и точно воспроизвести саму «картезианскую» теорию. Заметим только, что угловая плотность лучей, примерно соответствующая видимой яркости, в точках поворота обращается в бесконечность, поскольку она, как легко сообразить, обратно пропорциональна dD/dY. Отсюда следует, что наша простая «лучевая» теория не в состоянии достаточно строго описать ход интенсивности радужных всплесков. Укажем также, что возможность построения теории никак не обесценивает наши учебные упражнения, но, напротив, даёт средство контроля правильности машинных построений.
Если сравнить обе программы на ФОКАЛе и на БЕЙСИКе, то нельзя не признать, что первая выглядит компактнее и набирать её будет, пожалуй, полегче. Поскольку все модификации БК обязаны понимать ФОКАЛ, в дальнейшем мы будем стараться приводить варианты на БЕЙСИКе, лишь когда при этом возникают какие-то интересные особенности, либо если окажется возможным воспроизвести их с отлаженного машинного листинга. Вообще же заметим, что перевод наших довольно простых программ с одного языка на другой - дело не столь уж сложное, да к тому же и полезное.
40 REM ’RAINBOW’ 50 INPUT "RADIUS,CENTER";R,E,G 50 PRESET (E+150*R,G) 60 FOR Q=1 TO 64 70 LINE-(E+150*R*COS(PI*Q/32),G+100 *R*SIN(PI*Q/32)) 80 NEXT Q 90 N=4/3 100 INPUT "ORDER,# RAYS";K,M 110 FOR J=0 TO M 120 Y=J/M 130 A=ATN(Y/SQR(1-Y*Y+1E-30)) 140 C=ATN(Y/SQR(N*N-Y*Y)) 150 B=A-2*C 160 PRESET(0,G+100*R*Y) 170 LINE-(E+150*R*COS(A),G+100*R*Y) 180 FOR O=1 TO К 190 LINE-(E+150*R*COS(B),G+100*R *SIN(B)) 200 B=B-PI-2*C 210 NEXT О 220 D=A+B+PI+2*C 230 LINE-@(512*COS(D),341*SIN(D)) 240 NEXT J 250 END
Отладив предложенные программы, читатель может погрузиться в некоторые дополнительные исследования и размышления на «радужные» темы. Можно исследовать несколько радужных максимумов, установить зависимость их положений от N и сопоставить всё это с теорией и с наблюдениями. Интересно, например, установить, какие порядки (К) соответствуют редко наблюдаемой тройной радуге (цвета в третьей радуге сменяются в том же направлении, что и в первой). Радуги должны возникать и при рассеянии вперёд, и можно подумать, как их наблюдать со стороны Солнца. Для справок приводим таблицу значений N для воды при различных длинах волн, соответствующих примерно серединам интервалов соответствующих цветов:
красный |
оранжевый |
жёлтый |
зелёный |
голубой |
синий |
фиолетовый |
λ, нм 700 |
600 |
580 |
530 |
500 |
460 |
400 |
N 1,330 |
1,332 |
1,333 |
1,334 |
1,336 |
1,338 |
1,344 |
20 REM ’ANGULAR SCATTERING’ 30 DIM L(722) 40 REM ’RAINBOW’ ............................ 240 D=.5*D/PI 250 D=720*(D-INT(D)) 260 L(D)=L(D)+1 270 IF L(D)>MM THEN MM=L(D) 280 NEXT J 290 FOR U=1 TO 720 300 X=L(U)*COS(PI*U/360)/MM 310 Y=L(U)*SIN(PI*U/360)/MM 320 PSET(256+200*X,120+130*Y) 330 NEXT U 340 END
Как мы уже отмечали, на теледисплее с его 240 строчками не всегда просто разглядеть требуемые всплески и поэтому может понадобиться подбор количества лучей (К), масштаба (радиуса R) и положения центра капли (координаты Е, G). Для наблюдения радуг высших порядков количество лучей следует увеличить. Как и в случае линз, полезно в крупном масштабе обратить внимание на массу интересных особенностей: многочисленные фокусировки параксиальных (идущих под небольшими углами к оси) лучей, каустики, проявления сферической аберрации и т.п. В качестве дополнительного полезного упражнения рекомендуем построить гистограммы угловых распределений исходящих лучей (примерно соответствующие так называемым индикатриссам рассеяния), на которых радужные всплески можно выявить предельно явственно, поскольку число лучей допустимо сильно увеличить (теперь их даже нет нужды вообще строить на экране). Полный угол можно разбить на интервалы в один или в полградуса, что будет вполне достаточно для построения почти гладких индикатрисе. Можно, конечно, строить и более подробные кривые - с большим угловым разрешением, хотя из-за отмеченного дефекта лучевых теорий особого смысла в этом нет. Гораздо интереснее попытаться построить полную кривую рассеяния, учитывающую несколько радужных всплесков (для чего придётся учесть сферичность геометрии задачи, которая у нас пока трактовалась как плоская, а также и потери света при последовательных отражениях).
1.01 С ; ANGULAR DISTRIBUTION ........ 1.22 D 4 ........ 2.19 S D=D/2*P; S D=720*(D-FITR(D)) 2.21 S M(D)=M(D)+1; I (MA-M(D)) 2.25 2.23 R 2.25 S MA=M(D) ; R ........ 4.10 X FCHR(12) 4.14 F A=0.720 ; D 5 5.10 X FT(1,256+200*FCOS(P*A/360)/MA,120+130*M(A)*FSIN(P*A/360)/MA)
Подобные исследования позволяют составить определённое представление о том, какие цели должна преследовать более строгая теория радуги, что может оказаться нелишним для студентов физических специальностей, начиная примерно со второго курса. Это и нахождение истинных положений и интенсивностей радужных максимумов, и вообще, точного распределения интенсивности света, рассеянного по всем направлениям, в том числе с учётом дифракционных эффектов, вообще не содержащихся в лучевом приближении (они особенно сильно проявляются в очень мелком тумане). История исследования радуги, начатая Гюйгенсом, знает немало славных имён и заметных достижений. Интересно, что в волновой оптике оказывается довольно несложным выписать в общем виде самое строгое решение нашей задачи. Однако в докомпьютерную эру наличие подобного строгого результата ещё мало что давало, поскольку он выражался в виде ряда (суммы) из быстро осциллирующих членов (так называемых парциальных волн), причём даже для не очень крупных капель (с радиусом порядка миллиметра) следовало бы в этом ряду учитывать очень много - до тысяч членов. Может даже статься, что ФОКАЛ (16-разрядная версия) не справится с такой задачей с подобающей точностью, хотя для нашего БЕЙСИКа, вероятно, это лишь вопрос затрат машинного времени. Пример того, как компьютеризация меняет само отношение к ценности научных результатов...
Несколько схожая ситуация возникла недавно с известной задачей механики о движении трёх тел с сопоставимыми массами, о которой многие слышали, что она вообще не решается Но не решалась эта задача в том лишь смысле, как решение понималось в классической теоретической механике - науке, в общем-то, прошлого века задача механики имеет решение, если оно может быть сведено к каким-то интегралам (квадратурам), пусть даже не берущимся в студенческом представлении, т.е. не выражающимся через известные функции, В отношении задачи трёх тел на этот счёт было добыто, кажется, даже строгое доказательство И вот удалось выписать совершенно точное решение этой задачи, но только опять-таки в виде чрезвычайно медленно сходящихся рядов, от которых без компьютера - никакого проку! Для компьютера, который вообще-то может и прямо интегрировать уравнения движения, т.е. строить числовое решение, суммирование самых скверных рядов может оказаться всё же более предпочтительным в видах точности, производительности, возможности выявления каких-то общих закономерностей и т.д.
Мы не в первый раз задерживаем внимание читателя на результатах воздействия компьютеризации на методологию или «идеологию» (в иных языках то же самое скорее называют «философией») современной науки. Эта тема - одна из весьма полезных в компьютерном просветительстве, тем более что популяризаторы склонны увлекаться и приписывать любимым объектам часто вовсе не свойственные им достоинства. А иногда, даже и среди специалистов, раздаются суждения, подобные тому, например, что скоро с компьютерами вообще не останется нерешённых задач, поскольку-де все они будут решены... простым перебором всех вариантов (не столь давно именно таким образом «пала» известная задача о четырёх красках).
Слов нет, успехи компьютеров во всех сферах грандиозны, и нам кажется, что даже Г. Каспаров и уж во всяком случае его последователи должны начать нервничать по поводу того, как бы компьютеры не положили конец их профессии. Или вот американские авиастроительные корпорации заявляют о полном прекращении реальных продувок моделей проектируемых самолётов, поскольку расчёты картин обтекания на суперкомпьютерах стали и дешевле, да и надёжнее сложнейших экспериментов, - это уже не игры! Всё же, чтобы у читателей формировалось более взвешенное представление о возможностях как собственного БК, так и суперкомпьютеров (а глядишь, начнут продаваться и бытовые суперкомпьютеры!), мы и далее будем не раз задерживаться на поучительных в данном отношении примерах.
Вот для начала примеры задач, которые пока не под силу ни суперкомпьютерам, ни теоретической механике устойчива ли Солнечная система? Не был ли Плутон спутником Нептуна или не станет ли он им в дальнейшем, да и вообще, не столкнутся ли когда, оборони бог, эти планеты (в настоящую эпоху, кстати, Плутон оказался ближе к Солнцу, чем Нептун. По этому поводу газета «Известия» недавно даже поторопилась принести читателям свои извинения! В репортаже о полете «Вояджера», видимо, ещё составленного по данным НАСА, именно Нептун был назван самой удалённой от Солнца планетой что как раз на данный момент соответствует действительности. Но уже на следующий день, возможно, после телефонных звонков не слишком осведомлённых читателей и после заглядывания в учебники, где эфемериды планет обычно не содержатся, газета переставила планеты на их «законные» места. И это ещё при том, что ни «Известия», ни даже НАСА не могут нести ответственности за расположение светил!) Но оставим возможность столкновения, это была бы, действительно, вселенская катастрофа. Не произойдёт ли когда-либо существенное перестроение в этом самом расположении планет, их спутников, астероидов и т д. Но всё это - дела отдалённые. А вот, какая погода будет завтра? (А спрос на определённые виды товаров?) Н. Винер описывал историю одного математика, который ещё в довоенную пору составил и решил «вручную» грандиозную систему уравнений для предсказания погоды... на один день. Вычисления заняли более года, а результат, что легко представить, разошёлся с реальностью. У учёного хватило смелости опубликовать свои результаты. Эх, повторить бы сейчас подобную попытку с использованием всех супер-ЭВМ и современных средств сбора метеоданных! Ведь пока прогнозирование погоды, несмотря на участие и ЭВМ (по существу, подсобное), всё же чисто человеческое занятие, причём, как можно заметить по репортажам из Гидрометцентра, преимущественно женское занятие. Впрочем, пора нам вернуться к капле дождя...
Отлаженная капельная модель позволяет понять принцип действия современных «светящихся» покрытий (в действительности хорошо отражающих), содержащих небольшие сферические частицы. Большинство читателей наверняка обращало внимание на блистающие ночью в свете собственных фар детали на дорожном ограждении, форме регулировщиков, детской одежде и т.д. Если начать систематический поиск на нашей модели, варьируя показатель преломления «капли», то можно обнаружить, что во втором порядке параксиальные лучи отражаются точно назад при N=2 (это можно доказать, пользуясь элементарными школьными правилами). Однако веществ с N≥2 вообще не так много (достаточно твёрдые из них из-за особенностей блеска используются для имитации драгоценных камней). Поэтому стоит исследовать характер отражения, когда показатель преломления только приближается к двум. Из-за сферической аберрации и здесь заметная доля лучей может быть отражена примерно в обратном направлении. Заметим ещё, что при N>2 радужный всплеск во втором порядке исчезает, как он отсутствует для воды и в первом порядке.
При минимальных переделках нашу модель радуги легко можно преобразовать в «круглый бильярд» - условную игру, разновидности которой привлекают в последнее время немалый интерес математиков. Для этого нужно лишь обеспечить достаточно большое число отражений внутри «капли». Имеет смысл соорудить и отдельную программу для исследований бильярда, переписав в неё несколько строк из «радуги». Если задавать угол С в виде кратных целым долям π, то «розетки», выписываемые на экране, будут быстро замыкаться после небольшого числа отражений. Что же такого интересного смогла найти современная математика в образующихся правильных многоугольниках и «звёздочках»? Но не станем торопиться и дадим возможность ФОКАЛу погонять свой условный шар по кругу час, другой, ночь... А утром советуем начать разбираться с явными отступлениями от теоремы Пифагора sin2B+cos2B=1, которые ухитрился допустить наш механический бильярдист. Вначале придётся понять, откуда вообще могут возникнуть наблюдающиеся «огрехи».
10.10 С ; VICIOUS CIRCLE 10.12 A "N" N; S Р=3.14159 10.14 S C=P/N; X FT(0,417,120) 10.16 D 11; G 10.16 11.10 S B=B-P+2*C-P 11.12 X FV(1,250+167*FCOS(B),120+110*FSIN(B))
20 'VICIOUS CIRCLE' 30 INPUT "N";N 40 C=PI/N 50 PRESET(417, 120) 60 B=B-PI+2*C 70 LINE-(250+167*COS(B), 120+110*SIN(B)) 80 GOTO 60
Здесь снова нелишне слегка отвлечься и заметить, что именно бильярд нередко представляется игрой, где перспективы, если так можно выразиться «механизации» наиболее благоприятны. Автор припоминает один из немногих фантастических фильмов, какие ему выпало просмотреть, где воплотившийся в обличье человека неодушевлённый робот-пришелец в два счёта без малейших ошибок раскидал все шары по лузам, не оставив сопернику возможности нанести хоть один удар. Похоже, что сценаристы, разделяя довольно общее заблуждение, полагают, что механика бильярда не более сложна, нежели те простые правила, что заложены в наши модели. Но вот наше телевидение, которое в последнее время в числе прочего принялось ратовать - причём даже устами поэта![1] - за возрождение этого сомнительного уже по своим чисто атлетическим достоинствам вида «спорта», показало нам демонстрационные выступления мировых асов, гонявших шары по сильно искривлённым траекториям, заранее намеченным мелом, из чего можно было видеть, что механика эта отнюдь не столь проста. Но мы пока не станем обсуждать тонкости соударений и качения произвольным образом вращающихся шаров...
Советуем тем, у кого имеется такая возможность, после матча с ФОКАЛом повторить то же упражнение и с БЕЙСИКОМ. Можно быстро почувствовать, что ФОКАЛ «привирает» и быстрее и капитальнее. Ясно, что дело здесь именно в количестве разрядов, используемых для вычислений в этих языках. Можно даже проверить эту догадку, используя в БЕЙСИКе оператор CSNG, сокращающий вдвое число разрядов, - попрактиковаться в его использовании небесполезно.
Одна из наиболее мощно действующих причин возникновения погрешностей при длительном счёте, которую можно легко выявить и устранить в ФОКАЛе, заключается в нашем случае, вероятно, в том, что вычисление функций FSIN и FCOS производится порознь, а не как-либо одна через другую, и при приведении аргументов к первому квадранту даже от неточности в определении π может набегать некоторое расхождение. Если же организовать автоматический пересчёт значении аргумента после каждого удара в первый квадрант, то часть наиболее заметных огрехов исключается:
65 B=B-2*PI*INT(5*B/PI) 11.11 S B=B-2*P*FITR(В/2*Р)
Заметим, что наше «число Архимеда» - π не «зашито» в ПЗУ ФОКАЛа и его необходимо задать как Р=3.14159. Однако из-за особенностей представления чисел в ФОКАЛе в памяти при этом оседает, по-видимому, не совсем 3.14159: Т 100*Р-314! Любопытно также, что попытка записать ещё парочку «лишних» знаков π лишь ухудшает дело!
15 11 С ; PYTHAGOREAN THEOREM 15 14 А "Х0" Х ; S А=Х 15.16 X FT(1,(X-A)*512,((FSIN(X))^2+(FCOS(X))^2-1 )*100+28) 15.18 S X=X+0.01; G 15.16
Можно было бы исследовать нашу версию более подробно, строя значения cos2x+sin2x при больших значениях аргумента. Но мы предлагаем здесь пару иных, совсем нехитрых упражнений по поводу погрешностей счёта, которые тем не менее в состоянии навеять размышления на самые фундаментальные темы. Как утверждал в своё время популярный древнегреческий мудрец, нельзя дважды войти в одну и ту же реку! Поскольку мы занялись моделированием, нам не грех проверить этот тезис, смоделировав подобную попытку на нашем бильярде. Полагаем, что все наши читатели, рискнувшие организовать у себя этот «заплыв», будут поражены, как невзирая на погрешности счёта, наш БК уверенно стирает все следы своего первого заплыва! И этот результат обязан соблюдаться при заплывах любой длины, т.е. при любых длинах цикла по М. К концу же счёта на дисплее не должно оставаться ни единой светящейся точки! А если хоть одна такая точка обнаружится, то, строго говоря, это может уже считаться основанием для того, чтобы обратиться с БК в бюро ремонта.
20.10 С ; TWICE INTO THE SAME SQUARE 20.12 S A=1; S P=3.14159; S C=P/4.04; S B=0 20.14 F K=1,2; D 21 20.16 Q 21.10 S B=0; X FT(0,417,120) 21.12 F M=1,100; D 22 21.14 S A=0 21.16 X FCHR(7) 22.10 S B=B-P+2*C 22.12 X FV(A,250+167*FCOS(B), 120+110*FSIN(B))
112 REM 'TWICE INTO THE SAME RIVER’ 122 A=1 132 C=PI/4.04 152 FOR K=1 TO 2 162 B=0 172 PRESET(417, 120) 182 FOR M=1 TO 100 192 B=B-PI+2*C 202 LINE-(250+167*COS(B), 120+110*SIN(B)), A 212 NEXT M 222 A=0 242 BEEP 252 NEXT К 262 STOP
Конечно, результаты нашего философского исследования могут и не убедить мастера-приёмщика в том, что в этой машине «не все винты затянуты как положено», но, полагаем, что и другие стандартные тесты в этом случае должны выявить какую-то неисправность...
Сколь это может ни показаться на первый взгляд странным, никакие стандартные тесты не в состоянии выявить какую-либо весьма специфическую неисправность компьютера, возникающую, скажем, лишь при определённой комбинации чисел, записанных в ОЗУ (что в принципе вообразимо, хотя и маловероятно...). По этому поводу нелишне будет прикинуть, сумел бы наш БК с его 64K двоичных элементов пробежаться по всем своим возможным состояниям за время всей своей потенциальной жизни, т.е. до полного физического износа! Но уж раз мы коснулись проблем обращения в бюро ремонта, то советуем владельцам БК, которым посчастливилось ещё ни разу туда не обращаться, запомнить, что такое бюро, представляющее непосредственно завод-изготовитель, недавно открылось в Москве (Рогожский вал, 7 тел. 278-52-59). Автору же пришлось не менее 5 раз прокатиться со своим верным БК до Павлово-Посада и обратно. Зато работники ремонтной службы завода смогли внушить ему приятную уверенность, что ещё «через пару ремонтов из БК будет вычищена вся труха и он заработает как по маслу!» Не напоминает ли, кстати, весь этот ремонтный жаргон, воспроизводимый почти дословно, образ другого ремонтника, чинившего часы М. Твена на ином континенте век тому назад? Но если быть вполне серьёзным, то тема «отказов» именно БК кажется нам достаточно интересной, для того чтобы предоставить несколько страниц настоящего издания работникам отдела рекламаций...
Итак, мы представили, что компьютер, как строго детерминированное устройство, которое должно работать воистину «как дура», обязан абсолютно точно проходить одну и ту же «траекторию» счёта, если только, разумеется, и начальные условия заданы столь же абсолютно одинаковым образом. Наиболее демонстративным упражнением на эту тему может явиться стирание броуновского «демона» при повторном прохождении «случайной траектории» (для читателей, которые ещё не выяснили значение периода случайной функции нашего ФОКАЛа - FRAN, сообщим, что он равен 215-1=7*31*151). Но мы испробуем теперь несколько иную процедуру: углубившись немного в упомянутую реку-бильярд, повернём затем точно назад! Действительно, если уж нам удаётся, вопреки всей философии, пойти в реку, то стоит попытаться из неё ещё и выйти!
20.10 С ; TIME REVERSAL ......... 21.10 С ; 21.14 S C=-C 112 REM 'TIME REVERSAL' ......... 140 PRESET(417, 120) 162 172 232 C=-C
К несказанному огорчению автора, а надеюсь, и читателей, повторивших и этот более рискованный «заплыв», оказывается, что даже 32-разрядный БЕЙСИК не в состоянии проплыть обратно точно по самому простому отрезку прямой! И это при том, что на дискретном дисплее в одной графической линии может скрываться ещё множество близких счётных траекторий. Можно, впрочем, надеяться, что наблюдаемые в этом случае «огрехи» возникают лишь в блоке обработки графики, тогда как сам счёт происходит с куда как более высокой точностью. Эту обнадёживающую идею стоит проверить, заставив БК чертить и стирать лишь небольшое число начальных отрезков (и даже всего лишь один). В такой постановке можно будет всё-таки проверить, начиная с какой дистанции БК уже вообще не будет в состоянии попадать «обратно» в ту же прямую (которая только разве у Эвклида не имела толщины).
А вот напоследок и фундаментальная тема - всем проблемам проблема: повернём точно назад скорости всех молекул во Вселенной! Придём ли мы лет эдак через 2*1010 назад, к сотворению мира? Ведь матушка-то Природа, в отличие от какого-то там БК, считает всё точно! (Ответ: нет).
На фоне столь мудрёных проблем отметим полезную методическую возможность. Если перед БК поставлена какая-то задача, связанная с построением большого числа линий, то через некоторое время весь дисплей или его часть могут быть «залиты» сплошь этими линиями, и дальнейший контроль за деятельностью БК станет невозможным. В этом случае советуем либо регулярно переключать операнды 1 и 0 в операторах FT и FV (в ФОКАЛе) или «цвет» (интенсивность - в БЕЙСИКе), либо, что гораздо больше впечатляет, переключать их хаотически, поскольку все нужные операнды могут задаваться «арифметическими выражениями», т.е. и случайными функциями. При этом в БЕЙСИКе может потребоваться заключительная «установка цвета», которую можно задать либо в программе командой COLOUR 1,0, либо произвести вручную ключом K6.
Итак, можно надеяться, что наши читатели пусть в самых общих чертах представили, что медленный «дрейф» и размывание любых счётных «траекторий», связанный с погрешностью вычислений при конечном числе разрядов на любой ЭВМ, - дело неизбежное, и вопрос лишь в том, достаточно ли мала допускаемая погрешность для данной конкретной задачи. В задачах с «бесконечным будущим», как в проблеме устойчивости Солнечной системы, дрейф такого рода в состоянии обесценить любые достоинства суперкомпьютера. Разумеется, при моделировании какого-либо реального явления, помимо этого небольшого недостатка ЭВМ, куда как более существенной может оказаться неточность в определении параметров и начальных условий в моделируемой системе (что почти очевидно в случае моделирования погоды и несколько менее ясно для планетной механики)
Мы можем предложить тем, кто пожелает лучше ощутить роль погрешностей счёта в моделировании различных процессов, искусственно увеличить эти погрешности, с тем чтобы не дожидаться результатов целыми ночами, а иметь возможность выявить их за несколько минут наблюдения. Для этого достаточно при вычислении углов отражения в бильярде добавить к углу C случайно меняющуюся добавку с варьируемым небольшим множителем. Тем самым мы сможем моделировать различную «шероховатость» стенок бильярда.
Теперь, запустив на нашем бильярде шар, скажем, по равностороннему треугольнику, мы можем задаться вопросом почти в духе высокой математической науки: устойчива ли форма треугольника при наличии нашей шероховатости? Не может ли со временем треугольник превратиться... в квадрат? Впрочем, для высокой математики случайные шероховатости или тем более какие-то погрешности счёта - объекты не вполне «чистые». Скорее вопрос можно было бы поставить так: устойчива ли траектория при малом искажении формы первоначальной границы? Надеемся, что со временем мы обратимся и к исследованию отражений от границ более сложных, нежели окружность, с которой мы начали.
12.10 С; SQUARE GAME 12.12 А "X,Y,С" X,Y,С; S Р=3.14159; S С=С*Р/180 12.14 X FT(0,200*(X+1.3), 100*(Y+1.3)) 13.10 S Z=X+(Y- 1)/*FTAN(C); I (1 - FABS(Z)) 13.14 13.12 S X=Z; S Y=1; S C=-C; D 14 13.14 S Z=Y+(X-1)*FTAN(C); I (1-FABS(Z)) 13.18 13.16 S Y=Z; S X=1; S C=P-C; D 14 13.18 S Z=X+(Y+1)/FTAN(C); I (1-FABS(Z)) 13.22 13.20 S X=Z; S Y=-1; S C=-C; D 14 13.22 S Z=Y+(X+1)*FTAN(C); I (1-FABS(Z)) 13.10 13.24 S Y=Z; S X=-1; S C=-P-C; D 14 13.26 G 13.10 14.10 X FV(1,200*(X+1.3), 100*(Y+1.3)); R
Затронутые «бильярдные» мотивы читатель может продолжить на следующих модификациях: вставить в центр исходного бильярда меньшую отражающую окружность, т.е. устроить кольцевой канал. Полезно организовать и более привычный на взгляд прямоугольный или хотя бы квадратный бильярд. Если же его программная организация покажется более сложной, советуем вначале построить более простой двубортный канал (его можно «замкнуть», уложив как бы на цилиндрическую поверхность). В дальнейшем такой канал можно капитально усложнить, разрезав его на две, четыре и т.д. части, которые на экране будут располагаться одна под другой. Вначале имеет смысл устраивать чисто зеркальное отражение от стенок, когда контроль за правильностью функционирования программы предельно упрощён, и лишь затем «включать» в дело шероховатость.
Во всех наличных бильярдах можно также смоделировать наблюдающееся в целом ряде физических ситуаций улучшение зеркального характера отражения при малых углах скольжения. Для этого в шероховатую добавку к углу C достаточно включить ещё множитель COSC. Теперь можно наблюдать довольно интересное явление - своеобразное «каналирование» частиц, т.е. захват траекторий в область малых углов скольжения. При этом в прямом канале частица начнёт видимым образом ускоряться. Дело в том, что основные затраты времени у БК связаны с расчётами углов отражения, а сами отрезки прямых от удара до удара строятся довольно быстро. Напротив, в изогнутом канале частица может практически «остановиться», поскольку здесь число ударов о внешнюю стенку может сильно возрасти. Движение же реальной частицы при подобном каналировании, конечно, должно в любом случае несколько ускориться, поскольку скорость не будет испытывать заметных отклонений.
Наметим ещё несколько возможных направлений самостоятельных игр на бильярдах, которые могут носить характер почти научной деятельности. При заметной шероховатости стенок канала движение частицы может приобрести выраженный характер случайных блужданий. Попытайтесь «эмпирически», т.е. в машинном эксперименте, определить эффективный коэффициент диффузии D для этого процесса, его зависимость от шероховатости стенок, зеркальности и т.д. Напомним, что в одномерном случае квадрат удаления частицы вдоль канала растёт со временем, как L2=2Dt.
Освоившись с движением одной частицы в любом бильярде, не так уж сложно перейти к движению двух и более шаров, пока они не будут «замечать» один другого. А не возьметесь ли вы смоделировать движение в круговом бильярде хотя бы двух частиц, предусмотрев для них возможность столкновения по каким-то пусть весьма условным правилам? Здесь вам могут приоткрыться двери в совершенно необъятную сферу «молекулярной динамики» - моделирования движения в системах большого числа частиц.
Если же обеспечить при столкновениях выполнение обычных законов сохранения энергии и импульса, то за длительное время наблюдений можно будет снова «эмпирически» открыть ни много ни мало, как распределение Максвелла! Надеемся, что некоторых дотошных студентов сможет увлечь эта интригующая возможность...
А вот несколько иное направление с выходом в сферу игр, но уже игр отнюдь не в научную деятельность. Если у одной из стенок бильярда предусмотреть возможность целенаправленного воздействия хотя бы на угол отражения, можно засчитывать какие-то очки за попадание в выделенную зону в противоположной стенке и т.д. При этом в БЕЙСИКе с помощью оператора INKEY можно выделять лишь какое-то ограниченное время на выработку решения (в ФОКАЛе это усложнение возможно при подключении к порту - см. вып. 11 за 1989 г.).
Хотя разработка машинных игр - это само по себе не игра, всё же автор не без душевного трепета намечает здесь путь к моделированию игр, столь же мало атлетичных, как и исходный бильярд. В целом соответствие компьютеризации, электронных игр и играющих в них заслуживает отдельного внимания и обсуждения. Автор должен во всяком случае признаться, что часто произносимый тезис о том, что игры на компьютерах в состоянии увлечь подростка в тайны кибернетики и электроники, не кажется ему хоть немного убедительным. Ну вот, скольких детей игра в карты привела к интересу к комбинаторной математике, теории вероятностей и т.д.? А у скольких результат не был столь благоприятным? Хотя, разумеется, мера полезности карточных игр - не в указанном соотношении… Но обо всем этом стоит призадуматься родителям, не жалеющим ни сил, ни времени на то, чтобы, невзирая на преграды дефицита, непременно снабдить своих чад достаточно нелепой, хотя и электронной, игрой «Волк, собирающий в лукошко яйца, скатывающиеся с деревьев». Э, да что там дети! А не наблюдали ли вы, как учёнейшие сотрудники просиживают часами перед цветными валютными мониторами (порой ещё и сверхурочно!), состязаясь... с генераторами случайных чисел? Интересно было бы подсчитать, какая доля машинного времени тратится на эту своеобразную «электронноигроманию», а какая - на серьёзные расчёты... ну, там, той же погоды и перелопачивание баз данных. Впрочем, польза от персональных компьютеров - опять-таки не в этом численном выражении…
Познакомимся напоследок ещё с одним подобием бильярда с довольно своеобразными правилами. Мы как-то приводили примеры шутейных рандомизаторов (см. вып. 3 за 1989 г.), предназначенных для некоторого улучшения функции FRAN. Для каждого заданного числа подобная процедура вырабатывает некоторое следующее число. Построим для нашей процедуры - вот такой «бильярд» (так называемая лестница Ламерея):
312 REM 'SIMPLEST RANDOMIZER’ 322 INPUT "Х0"; X 332 PRESET (256*Х, 240) 340 Y=123*X + .456789 352 Y=Y-INT(Y) 362 LINE-(256*X, 240*(1-Y)) 372 LINE-(256*Y, 240*(1-Y)) 382 X=Y 392 GOTO 340 31.05 C ; SIMPLEST RANDOMIZER 31.10 A "X0" X; X FT(0,256*X,240) 31.12 S Y=123*X+.456789 ;S Y=Y-FITR(Y) 31.14 X FV(1,256*X,240*(1-Y)) 31.16 X FV(1,256*Y,240*(1-Y))
Налюбовавшись на замысловатые петли, можно заменить оба FV на FT и, задавая различные Х0 (в случае зацикливания, когда новых петель не возникает), проконтролировать качество случайной процедуры в отношении корреляции последовательных чисел (по равномерности «засеивания» поля) и заполнения рабочего интервала (0,1). При достаточно большом числе точек на экране должна «проступить» используемая для получения «хаоса» функция. Но она быстро осциллирует, и её визуализация потребует неоправданно много времени и совершенствования режима ввода Х0. Заметим, что в БЕЙСИКе по вполне понятным теперь нам причинам зацикливание происходит несравненно реже, и поэтому это упражнение имеет смысл повторить.
Для ускорения дела можно также основательно упростить и сам наш рандомизатор:
31.12 S Y=12*X+.3456789
или
340 Y=31*X+.4159265358
Если теперь возвратиться к операциям FV (LINE), то, надеемся, процедура построения даже шутейных случайных чисел станет понятной. Самое время поразмышлять над требованиями, которым должны удовлетворять хорошие рандомизаторы, в частности, в отношении числа «зубцов» их производящей функции. Для создания максимума хаоса их должно быть побольше. Но у ФОКАЛа довольно незначительное количество разрядов, что вновь накладывает определённые ограничения на «зубчатость» нашей пилы.
В практически применяемых рандомизаторах используются и куда более замысловатые «кусочно-рваные» функции. Но оказывается, что даже при самых простых связях Y(X) наша диаграмма может выглядеть неожиданно сложно. Рекомендуем испробовать такие параболы:
31.12 S Y=M*X(1-X) (340 Y=M*X*(1-X)) 0.5<М<4
При этом мы получаем модель так называемого странного аттрактора - довольно модного математического объекта (это красивое слово означает «притягиватель», «привлекатель», что звучит куда корявее). Странен же этот «завлекатель» именно тем, что при внешне простой процедуре способен генерировать изрядный хаос. Можем порекомендовать проследить за изменением характера «петель» при плавном изменении параметра М (0.5<М<4). Более подробное исследование может включать визуальный контроль заполнения интервала (0,1) и даже построение соответствующих гистограмм. Тем же, кого наш хаотический объект достаточно заинтригует, советуем заглянуть в журнал «Успехи физических наук», № 1, т. 150, с. 91 (1987).
31.18 S X=Y;G 31.12 412 REM 'STRANGE ATTRACTOR' 422 FOR L=32 TO 256 432 X=RND(1) 442 FOR N=1 TO 100 452 Y=L*X*(1 - X)/64 462 X=Y 472 PSET(L,240*(1 - X)) 482 NEXT N 492 NEXT L
41.12 C ; STRANGE ATTRACTOR 41.14 F L=32,256; D 42 42.12 S X=(FRAN()+1)/2 42.14 F N=1,100; D 43 43.10 S Y=L*X*(1-X)/64 43.12 S X=Y 43.16 X FT(1, L, 240*(1-X))
Обратим внимание ещё на одну нетривиальную тонкость нашего изощрённого БК. Попробуйте запустить нашу «лестницу» при М=4 с двух исходных значений: Х0=3/4 и... Х0=0,75. Оказывается, ФОКАЛ различает эти числа, да ещё как! С первым мы немедленно засядем в порочном цикле Х0=3/4, тогда как со вторым траектория быстренько выкручивается из исходной точки, что говорит о её своеобразной неустойчивости. Нормальному абстрактному математику ничего подобного и в голову не должно приходить. Заметим, что более солидный БЕЙСИК не различает в данном случае 3/4 от 0,75. Возможно, при других М вы обнаружите сходные курьёзы?
На этом месте нам, кажется, пора переходить к построениям обещанных кривых линий, хотя какие-то кривые у нас на дисплее уже возникали, и читатели имели возможность представить, что БК в силу своей дискретной природы (главное - дискретного дисплея!) строит кривые не так, как это имел в виду А. Эйнштейн, т.е. изогнутыми, кривыми в каждой точке. У БК кривые составлены из небольших отрезков прямых, составленных под углами. Поэтому при построении кривых главное - подбор шага. Желательно, конечно, чтобы этот шаг был достаточно мал, чтобы изломы не были больше размера одной графической точки на дисплее. Но обычно всегда приходится идти на определённые компромиссы между гладкостью кривых и затратами сил на их построение.
Новая затронутая тема открывает перед нами массу приятных возможностей. Весь арсенал разделов учебников по графикам и функциям ждёт новых интерпретаторов. Одни названия чего стоят! Конхоида Никомеда, улитка Паскаля, локон Аньези! Большое количество увлекательных завитушек можно найти в переводной брошюре Ч. Косневского «Занимательная математика и персональный компьютер» (М., Мир, 1987), которую мы можем рекомендовать и нашим читателям. Однако большинство примеров в этой книге не связывается с какими-то физическими ситуациями. Нам же ближе прежде всего кривые, возникающие при различных механических движениях. Возьмём, к примеру, точку, которая, вращаясь, описывала контур капли, и придадим ей ещё и поступательную скорость (при этом параметр Т может изображать обычное время):
45.10 С ; CYCLOIDAL MOTION 45.16 F T=0,0.05,100; D 46 46.10 S X=40*FSIN(T)+10*T; S Y=25*FCOS(T) 46.16 X FT(1,X,128-Y)
Меняя величину поступательной скорости (или радиус вращения), можно построить красивые семейства эпи- и гипоциклоид. Можно проследить, как происходит при этом переход от одних к другим через предельный случай обычной циклоиды.
Не намного сложней будет заставить БК покатать одну окружность по другой. Вообще компьютеру не составляет трудов построить результат сложения самых разнообразных движений, который ещё, возможно, не обрёл собственного названия или явного аналитического представления. И уже сложение самых простейших движений - прямолинейного, вращательного и колебательного - может привести к весьма замысловатым траекториям.
Обратимся-ка к вращениям, которые, кстати говоря, в древности представлялись даже более естественной формой движения, нежели прямолинейное. Школа Птолемея ухитрилась добиться неплохого согласия с наблюдениями планет, нанизывая друг на друга несколько «эпициклов». Но затем наша планета принялась вращаться и сама стараниями Коперника и Галилея, который даже слегка пострадал за это...
Не так давно католическая церковь во вселенском стремлении к модернизациям предприняла отчасти запоздалые попытки официальной реабилитации Галилея. Но материалы его «дела» вроде бы затерялись - то ли их ещё Наполеон вывез… А поучительные могли там быть дискуссии!
Как бы то ни было, теперь вокруг Земли принялась вращаться ещё и масса спутников. Вот возможное упражнение на эту тему: построить на географической карте траекторию спутника (точнее, след точки, над которой он проходит в зените). Карту стоит исполнить в привычной проекции Меркатора, тем более что именно в таком виде с требуемыми траекториями её можно заметить в репортажах из ЦУПа. На карте можно построить экватор, тропики и т.д., но можно её основательно оживить, набросав грубые контуры материков и ключевые точки: Байконур (который можно и не отыскать на картах), мыс Канаверал (б. Кеннеди!), Москву или Павлово-Посад, где был рождён наш БК. Методические возможности для рисования и хранения подобных карт наши читатели уже имеют. Начать лучше с «низкого» спутника, период обращения которого близок к 90 мин, а орбита почти строго круговая. Наклонение орбиты к экватору D можно задать равным 1 радиану - такой спутник будет пролетать над Москвой. Итак, поехали?
51.05 С ; DE REVOLUTIONIBUS ORBIUM COELESTIUM 51.10 A "D" D; S TS=1.5; S Р=3.14159; S TE=24 51.12 F T=0,1000; D 52 52.10 S V=P*T/10*TS+6 52.12 S V=V-2*P*FITR(V/2*P) 52.14 S H=FSIN(D)*FCOS(V); S A=FASIN(H) 52.16 S B=FCOS(D)*FCOS(V) 52.18 S C=FSQT(B^2+(FSIN(V))^2) 52 20 S L=P*FITR(V/P)+FSGN(P-V)*FASIN(B/C) 52.22 S L=2*P*FITR(L/2*P) 52.24 S L=L+7+P*T/10*TE; D 52.22 52 26 X FT(1,200-64*L,120-80*A)
При дальнейших разработках полезно проследить, как меняется характер траекторий при увеличении периода обращения до синхронного, т.е. до 24 ч (точнее, здесь нужны не солнечные, но звёздные сутки - 23 ч 56 мин 4,1 с).
Высокие, в том числе и синхронные орбиты, как правило, заметно эллиптичны и след спутника движется по ним «неравномерно». Аналитическое представление Кеплерова движения (в параметрической форме) нетрудно разыскать в учебниках. При слабой эллиптичности, характерной для многих планетных орбит, допустимы упрощённые явные выражения. Любопытно, что открытие слабой неравномерности движения Луны по небу (е=0,055) историки астрономии приписывают ещё вавилонянам, которые якобы использовали для аппроксимации реального поведения скорости прямоугольную (меандр) и даже трапецеидальную (!) функцию.
Нередко упоминаемый нами всуе А. Эйнштейн - один из высочайших научных авторитетов - отрицал (возможно, не без определённого кокетства) наличие какого бы то ни было положительного содержания в противопоставлении гео- и гелиоцентрической систем. Попросту говоря, всё равно, что вокруг чего вращается! Поэтому мы вправе считать Солнце всего лишь спутником Земли и, положив Т=365 сут, грубо изобразить годовой путь Солнца (для этого придётся поработать с масштабом, чтобы все линии не слишком сливались). Дополнительная возможность - построить положения терминатора, т.е. границы дня и ночи. При этом достаточно считать его просто большим кругом, пренебрегая размерами светила и атмосферной рефракцией. Даже с такой моделью можно объяснять родным, где сейчас полярная ночь, а где лето...
Аналогичные построения для спутника позволяют получить на карте зоны его видимости, или радиовидимости, которые можно сравнить с картами из ЦУПа (где обозначены и эти зоны, и терминатор). Конечно, положение радиогоризонта может не совсем совпадать с обычным оптическим горизонтом (заметим, что оба они на отраслевом жаргоне могут обозначаться так: изделие уходит за бугор), но нас покуда должно интересовать лишь искажение форм в картографии.
Не составляет большого труда проследить на нашей карте и путь законного спутника - Луны (ТМ=28 сут., наклонение 28°). Отсюда недалеко и до модели, поясняющей солнечные и лунные затмения, хотя в целом это дело не такое простое...
Случайно или нет, но угловые размеры наших светил так подозрительно точно подогнаны, что наблюдаются как полные, так и кольцевые солнечные затмения (последнее такое затмение не так давно транслировалось по телевидению из КНР)! Отсюда должно быть ясно, что полная лунная тень где-то у поверхности Земли аккурат и заканчивается Тень же Земли, поскольку Земля больше Луны почти вчетверо, в состоянии с избытком покрыть Луну Поэтому предсказание солнечных затмений требует гораздо большей точности, нежели лунных. Наша модель - лишь введение в эту старую проблему.
У нашего скромного БК - поистине богатырские возможности. Ему ничего не стоит, например, на нашей модели повторить легендарный эксперимент библейского персонажа - Иисуса Навина, который якобы остановил движение Солнца по небу! Мы же можем остановить вращение Земли, просто выкинув из соответствующего места программы член, содержащий ТЕ. В результате наша «карта» фактически превратится в... карту звёздного неба, где на месте северного полюса Земли теперь окажется полюс мира! Любители астрономии могут начать размещать на этой карте все подобающие элементы системы мира: кое-какие звезды, границы созвездий, затем планеты (при желании - с дополнительными эпициклами!) и т.п. Придётся только подумать о системе передачи яркости звезд - ведь у БК предусмотрена лишь двухступенчатая градация яркости (в ФОКАЛе - коды 145, 146), причём только в укрупнённом масштабе 32/64. Но ведь на яркую звезду не жаль будет отвести и не одну графическую точку.
Напомним, что невооружённым глазом человек в состоянии наблюдать на небе единовременно что-то около 3000 звёзд - смешная цифра! И если она приводила в замешательство Козьму Пруткова, то для БК (ФОКАЛ обязан помнить значения до 2000 переменных)) - это поистине сущий пустяк. Ясно, что нам хватит места для всех планет, их спутников, астероидов и даже комет с их сильно эллиптическими орбитами, и дело здесь лишь за поиском элементов орбит и современных положений наших светил, которые не так просто разыскать даже в астрономических ежегодниках...
Заметим попутно, что определение положений всех тысяч спутников Земли, экранов, корпусов носителей, обломков и т.п., строжайший учёт и контроль за ними, за эволюционирующими орбитами - не просто интересная и сложная задача для высококлассного компьютера, но проблема буквально жизненной важности, ибо всё новое и неучтённое, что приближается к вам на экранах РЛС «из-за бугра», может быть истолковано как предвестник очень крупных неприятностей... Стоит напомнить, что один из общепризнанных пороков СОИ состоит в том, что разобраться в случае чего в потоках налетающих «данных» в реальном времени не в состоянии ни супермены, ни суперкомпьютеры. Это в рекламных мультиках, явно нарисованных компьютером, удаётся так быстро дырявить поштучно условные боеголовки...
Из газетных сообщений мы могли недавно узнать также, что даже гражданское ведомство - НАСА - держит в своих компьютерных банках орбиты примерно 7000 объектов в околоземном пространстве, в том числе в видах предупреждения столкновений с обитаемыми кораблями! Среди этих объектов числятся якобы и такие курьёзы, как кинокамера (не крышка, выброшенная в неизвестность А. Леоновым, а целая кинокамера) и даже перчатка астронавта! Хотелось бы знать, что сталось с рукой, с которой свалилась эта злополучная перчатка?
Оставим на этом месте наших читателей, пожелавших погрузиться в проблемы обращения небесных сфер. Надеемся, что намеченная тематика в состоянии пробудить интерес не только истинных ценителей астрономических и прочих естественнонаучных знаний (автор готов засвидетельствовать, что он с восторгом наблюдал у Дома ткани на Ленинском проспекте в Москве - горячее местечко! - современного гадателя - ведь не гадалку же! - предсказывавшего всего за 1 руб. судьбы всех желающих... с помощью нашего родного БК, подпитываемого от аккумулятора стоявшего рядом «Москвича». Вот это и есть настоящая компьютеризация!), но и любителей снова входящей в моду астрологии! Каково было, к примеру, расположение планет в день вашего рождения?
Но - шутки в сторону - тема сложения различных движений с вращением нашей Земли либо увеселительной карусели в состоянии дать нам повод для многих и многих упражнений. Не возьметесь ли воспроизвести на БК, скажем, вращение маятника Фуко? Или вот гармонические колебания - это всего лишь проекция вращения. Не вспомнить ли, что такое фигуры Лиссажу?
[1] Само по себе достаточно любопытно, а для любителей кибернетики вдвойне, что этот весьма достойный поэт, имя которого в данной связи можно и не произносить, всегда довольно гладко читавший стихи, начал заметным образом заикаться, когда заговорил прозой!