Предлагаю коллегам
Разрушители мифов-2, или Проверка мифа
методом статистического моделирования (методом
Монте-Карло)
В.Соловьев, А.И. Сенокосов,
г. Екатеринбург, школа № 37
Введение
На научно-познавательном канале
“Дискавери” вот уже несколько лет выходит
передача “Разрушители мифов”, в ходе которой
два специалиста по спецэффектам пытаются
доказать или опровергнуть общеизвестные
утверждения-мифы. Например, можно ли
использовать полицейскую машину в качестве
укрытия при перестрелке, как это обычно
показывают в голливудских боевиках, разорвет ли
обычный выстрел обшивку самолета и пр.
Обычно доказательство или
опровержение мифов требует натурного
моделирования, поскольку невозможно чисто
теоретически определить, исчезнет ли течь в
радиаторе автомашины, если разбить в горлышко
залива воды сырое яйцо. Но иногда, кроме
натурного эксперимента, вполне можно проверить
мифы и с помощью математического моделирования,
что неоправданно игнорируется авторами
программы.
Постановка задачи
В одной из передач рассматривался
следующий миф:
Под дождем надо бежать, а не идти, чтобы
не сильно промокнуть.
Разумеется, речь не идет о длительном
путешествии под дождем, когда в любом случае
человек в обычной одежде промокнет насквозь.
Считается, что расстояние, которое надо пройти
под дождем, составляет несколько десятков
метров.
В упоминаемой передаче авторы, как
обычно, пошли по пути натурного моделирования,
построив в ангаре двадцатиметровую душевую
установку с мощными вентиляторами. Кроме того,
для экспериментаторов были закуплены не самые
дешевые гидрокостюмы, исключающие попадание
пота на одежду. По самым скромным оценкам,
постановка этого эксперимента обошлась никак не
меньше десяти–пятнадцати тысяч долларов.
С этим можно было бы мириться, если бы в
конечном итоге зрители, кроме развлекательных
кадров, получили бы окончательный ответ на
вопрос, верен этот миф или нет.
К сожалению, полученный в передаче
ответ “Миф разрушен” вызывает множество
вопросов.
Так, совершенно ясно, что при крайне
медленном передвижении можно промокнуть до
нитки даже и на расстоянии пяти метров.
Кроме того, не совсем понятно,
насколько дождевальная установка для теплиц,
которую использовали авторы, адекватно
моделирует дождь.
И, наконец, непонятно, почему авторы,
постоянно использующие ноутбук, не удосужились
хотя бы ради интереса провести математическое
моделирование данного явления, что в общем-то не
представляет особой сложности.
Об использованном методе
Метод Монте-Карло, или метод
статистического моделирования, предполагает
использование датчика случайных чисел при
расчетах.
С его помощью, например, можно
рассчитывать площади и объемы, а также
моделировать процессы, в основе которых лежат
случайные явления. Скажем, процесс ядерного
распада в атомных реакторах, загрузку каналов
связи, военные действия самого разного уровня.
В нашем случае случайным процессом
является появление дождевой капли.
В качестве инструмента моделирования
был выбран встроенный язык Adobe Macromedia Flash Action Script.
Объекты программной среды
Объектами программной среды в нашем
проекте являются (см. рис. 1):

Рис. 1. Объекты программной среды
1. Модель человека (1)
2. Изображение дождевой капли (2)
3. Кнопки запуска и остановки
презентации
4. Бегунки и поля для ввода скоростей
капель и человека (3)
В программе “Дискавери” объяснялось,
что бежать хуже, чем идти, поскольку человек
собирает на себя капли в основном передней
частью тела, которая значительно больше по
площади, чем верхняя часть.
Стало быть, поскольку в нашем
эксперименте человека изображает прямоугольник,
необходимо рассмотреть различные отношения его
длины к ширине.
Дождевая капля нарисована в
единственном экземпляре, поскольку стандартные
средства Action Script позволяют легко размножить ее в
нужном количестве. Представляется, что размер
капли не очень важен, лишь бы он был достаточно
маленьким.
Размер всего поля — 800 x 600 пикселей.
Описание работы программы
Поначалу генерируется 1000 дождевых
капель, которые начинают свое движение вниз. По
достижении “земли” каждая капля снова начинает
движение с самого верха.
Модель человека передвигается слева
направо с заданной скоростью.
При столкновении с очередной каплей
счетчик капель увеличивается на 1, а сама капля
начинает полет с самого верха, чтобы не считать
ее дважды или даже трижды.
Условие того, что капля попала внутрь
прямоугольника, весьма простое:
Math.abs(chel._x-eval("knop"+n)._x)<5
&&
Math.abs(chel._y-eval("knop"+n)._y)<75
Вышеприведенное условие верно для
высоты человека в 150 пикселей и ширины в 10
пикселей, т.е. для отношения ширины к высоте 1:15.
При достижении “человеком” правого
края поля выполнение программы останавливается
и выдается количество собранных капель. Типичный
вид экрана при выполнении программы представлен
на рис. 2.
Структура программы обычна для
программ такого сорта в Action Script:
· в первом кадре программного слоя
задаются начальные значения переменных;
· во втором кадре — основные законы
движения и сам расчет;
· в третьем кадре — возврат на второй
кадр.
Текст основных частей программы
Дублирование объекта “капля”
производится следующим циклом:
for (n=0;n<nk;n++) {
attachMovie("knop","knop"+n,n);
eval("knop"+n)._x=Math.random()*800;
eval("knop"+n)._y=Math.random()*480;
}

Здесь используются специфические для
Action Script операторы attachMovie и eval.
Движение капель и проверка их
попадания осуществляется циклом:
for (n=0;n<nk;n++) {
eval("knop"+n)._y=
eval("knop"+n)._y+skorkap
if(eval("knop"+n)._y>480) {
eval("knop"+n)._y=0
}
if(Math.abs(chel._x-eval("knop"+n)._x)<5 &&
Math.abs(chel._y-eval("knop"+n)._y)<75) {
count=count+1;eval("knop"+n)._y=0
}
}
Все остальные части программы носят
вспомогательный характер.
Получение результатов и их обсуждение
В процессе моделирования проводились
эксперименты при различных отношениях ширины к
высоте модели человека и различных отношениях
скоростей.
Полученные результаты сведены в
таблицу.

График, соответствующий данным
результатам, приведен на рис. 3.

Рис. 3. Графики эксперимента
По графикам видно, что на самом деле в
интервале скоростей 0,2–0,4 существует максимум, и
это вполне можно интерпретировать, как то, что
передвигаться с более медленной скоростью
выгоднее. Но, во-первых, это справедливо только
для этого интервала, а во-вторых, возникает
вопрос, с какой скоростью летят капли, поскольку
именно в долях этой величины меряется скорость
человека.
Из данных Интернета удалось выяснить,
что скорость дождевой капли при ветре — от 20 до 50
м/с (ураганный ветер). Без ветра (что бывает не так
часто) — 10–12 м/с.
Иными словами, в безветренную погоду
получаем, что, возможно, выгоднее передвигаться
со скоростью 8 км/ч, чем 12 км/ч, а при минимальной
скорости дождевых капель в ветреную погоду
получаем, что, возможно, выгоднее передвигаться
со скоростью 15 км/ч, чем 25 км/ч. Даже скорость 8 км/ч
с трудом можно назвать скоростью нормальной
ходьбы. Для обычного человека это уже почти бег.
Теперь напомним, что эксперимент в
программе “Дискавери” проводился с тепличной
дождевальной установкой, в которой скорость
капель существенно медленнее скорости капель
реального дождя. И даже используемый вентилятор
вряд ли разгонял их так же, как и резкие порывы
ветра. Неудивительно, что авторы эксперимента
пришли к сомнительному выводу. А скорости
передвижения в четырех экспериментах принимали
всего два значения, кстати, неизвестно, какие
(один проход без ветра, один пробег без ветра,
один проход с “ветром” от вентилятора, один
пробег с таким же ветром).
Выводы
Несмотря на то что натурный
эксперимент всегда считался более достоверным,
чем математическое моделирование, в нашем случае
вовсе не лишним было бы проанализировать вначале
именно математическую модель, что позволило бы
избежать ошибок при дорогостоящем натурном
моделировании. |