Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Чому метод стрільби так назвали?

with 13 comments

Зразу хочу попередити. По-перше. Якщо ви хотіли дізнатись щось про CS (контра-страйк), то тікайте пошвидше. Тут мова піде про справжній CS (Computer Sciense). По-друге. Я сам ще достатньо добре не вник. Принаймі не достатньо для того, щоб моя лаболаторна запрацювала правильно. Але одним зі способів щось зрозуміти – пояснити це хоч комусь. Самому собі наприклад. Тим більш, коли ніхто інший цього пояснити не зможе.

Нехай в точці двовимірного простору (0,0) ми маємо гармату. Дуже дивну гармату, яку військові інженери розробляли не з метою збільшити дальність, чи точність стрільби, а з метою спростити рівняння польоту ядра, щоб таким артилеристам як я з вами було легше вчитись з неї стріляти. Її особливістю є те, що вона стріляє з постійною горизонтальною швидкістю – 1 м/c (хоча одиниці тут теж не важливі). Нам дозволяють задавати вертикальну складову швидкості – v_0. Крім того, ядро покрите особливим матеріалом, який зменшує тертя об повітря до нуля. Прискорення земного тяжіння – g.

Знаючи все це, ми можемо записати рівняння польоту ядра:

\begin{cases} y''(t) = -g \\ x(t) = t \end{cases}

Координати ядра (x,y) залежать від часу, але глянувши в друге рівняння системи, ми бачимо, що її можна спростити звівши всього до одного рівняння:

y''(x) = -g

Давайте його розв’яжемо, це не дуже складно:

y'=-gx + C_1

y= -0.5gx^2 + C_1 x + C_2

Ми знаємо, що гармата розміщена в точці 0,0, це означає що y(0) = 0\ \Rightarrow\ C_2 = 0.

Тому траекторію руху ядра можна записати так:

y= -0.5gx^2 + C_1 x

А що ж таке C_1? Можна перевірити що y'(0) = C_1, а це початкова вертикальна швидкість. C_1 – той параметр, який гармата дозволяє міняти при стрільбі.

А тепер починаємо вогневу підготовку. Нехай в точці (1,0) з’явилась ціль. Нам треба вибрати таке C_1, щоб траекторія ядра перетнула ціль. Можна записати це рівнянням:

y(1) = 0 = -0.5 g + C_1 =0

C_1 = 0.5 g

І от ми дізнались як треба стріляти з гармати, щоб попасти куди треба.

А тепер, уявляємо, що ми не вміємо розв’язувати рівняння. (А декому навіть уявляти не треба 🙂 ). Чи нехай вміємо, але не такі. Наприклад з’явився вітер, порожнини в землі, які впливають на g, нерівності в ядрі які впливають на аеродинаміку, і тиск місячного світла 🙂 . Це все в сукупності може дати таке рівняння, яке буде довшим за саму цю статтю, і може не інтегруватись у квадратурах. Одним словом математики вміють точно розв’язувати лише дуже простенькі рівняння. А абсолютну більшість інших вони розв’яують так: “Давайте попробуємо оцей розв’язок. Не підходить? А оцей? Теж ні? Хм. Ну, значить точний розв’язок має бути десь між ними двома.” А коли появились комп’ютери, математики змогли змусити пробувати розв’язки їх.

Правда ми ускладнювати формули не будемо. Просто уявимо, що не вміємо розв’язувати ті, які були вище. Отож, завдання – попасти в ціль, або говорячи в термінах математики: розв’язати крайову задачу. Умова така:

\begin{cases} y'' = -g \\ y(0) = y(1) = 0 \end{cases}

Розкладемо це рівняння на два першого порядку:

\begin{cases} y' = v \\ v' = -g \\ y(0) = 0 \\ v(0) = v_0 \end{cases}

Про y(1) ми поки що забуваємо. А й справді, нащо нам та ціль, коли ми не знаємо куди впаде снаряд? Замість цього, ми додаємо в умови нашу початкову швидкість v_0.

А тепер, про те як летить ядро, не знаючи дифрівнянь. Та дуже просто. В момент часу t_0=0, воно знає, що y = 0,\, v=v_0. І знає, що перша похідна – це швидкість зміни чогось там. А інтеграл швидкості по часу – відстань. На маленьких інтервалах часу можна припускати, що швидкість не змінюється, і відстань – це швидкість помножена на час. Тому, в момент часу t_1 = t_0 + h, можна вважати, що ядро буде знаходитись тут: y(t_1) = y(0) + vh. Так само воно знає, що його швидкість зміниться так: v(t_1) = v_0 - gh. Одним словом, роблячи невеликі зміни, можна промоделювати явище, яке описують рівняння. Це називається методом Ейлера і детальніше описано на Вікіпедії. Хоча бувають методи і покраще, але їх реалізацію важче написати правильно.

А тепер напишемо програмку, яка буде робити все це за нас. Код страшний, але кращого не дано.

from matplotlib import pyplot as plt
import numpy as np
# Хоча знаєте, я передумав. Такий код заборонить показувати національна комісія з питань моралі.

Задамо різні початкові швидкості, і дивимось куди попадемо:

Стрільба

Стрільба

Червоний – початкова швидкість 6.
Синій – 4.
Ну, і відповідно зелений посередині – 5.

Бачимо раз переліт, раз недоліт. Беремо середнє, знову стріляємо, і попадаємо. Ура!

Хоча, якщо трохи серйозніше, то розв’язок початкової задачі дає нам функцію що в залежності від додатково введеної умови дає нам значення на іншому краї. Прирівнявши її до умови на тому краї, ми отримуємо звичайне алгебраїчне рівняння, яке намагаємось якось розв’язати. У прикладі вище ми притворились, що робим його методом дихотомії.

Є ще питання типу чому метод стрільби так назвали?

Посилання

  1. Вікіпедія
  2. Відеолекції Університету Південної Флориди
  3. XHTML+LaTeX розмітку згенеровано за допомогою txt2tags
  4. Ілюстрації – Pyplot
Advertisements

Written by bunyk

Вересень 13, 2010 at 09:06

Оприлюднено в Конспекти

Tagged with

Відповідей: 13

Subscribe to comments with RSS.

  1. Єху! Я здав, тому продовження буде нескоро.

    bunyk

    Вересень 13, 2010 at 14:58

  2. Как внимательный читатель хочу заметить, что синий – это не 4, а 2 скорее всего, либо красный – это не 4, а 5. 🙂

    jtimv

    Вересень 13, 2010 at 22:24

  3. Нє, Бунику. Ти взяв задачу стрільби, показав що вона крайова, розв’язав спочатку аналітичним методом, а потім натякнув, як її можна було б розв’язати чисельно. Причому аж ніяк не зрозуміло, чому цей другий, чисельний метод має називатися методом стрільби: їм ти можеш розв’язувати будь-яку іншу крайову задачу, а задачу стрільби можеш розв’язати будь-яким іншим методом.

    Так що фінальне запитання посту залишається з моєю ствердною відповіддю.

    ulidtko

    Вересень 16, 2010 at 16:28

    • Не зрозумів останнє речення першого абзацу. Що таке задача стрільби?

      bunyk

      Вересень 16, 2010 at 16:55

      • \begin{cases} y'' = -g \\ y(0) = y(1) = 0 \end{cases}

        ulidtko

        Вересень 16, 2010 at 18:51

        • гм, хитро тут латех зроблений… На, загалом задача про політ ядра і відповідні рівняння — саме це я назвав задачею стрільби. Думаю, така назва має певний сенс 🙂

          ulidtko

          Вересень 16, 2010 at 18:56

          • я змінив твій попередній коментар, постаравшись не змінити змісту.

            Що таке задача стрільби зрозумів. Просто дотепер цього терміну ще не зустрічав.

            bunyk

            Вересень 16, 2010 at 18:59

    • Така задача вибрана для наочності. Тут основне показати, що ми маючи чисельні методи тільки для розв’язання задачі Коші, можемо керувати умовами тільки з одного краю (з боку гармати). А вже залежно від того як ми прицілились з одного краю ми будемо отримувати те що на іншому. Тому це схоже на стрільбу.

      Якими методами ми досягнем точного попадання – інша справа. Якщо існує функціональна залежність між початковими параметрами, і кінцевим результатом, то це дасть нам рівняння. Якщо ми розв’язали задачу Коші чисельно, то рівняння в явному виді нема. Тому треба шукати розв’язок наприклад методом дихотомії.

      bunyk

      Вересень 16, 2010 at 19:03

      • добре, певна аналогія в цьому є

        ulidtko

        Вересень 16, 2010 at 19:24

  4. ДЯКУЮ ЗА ПОРАДУ

    sagevgen

    Вересень 16, 2010 at 20:46

  5. Я вас загубила. Зараз знайшла! Ура! Дуже подобався матеріал. Були проблеми з блогом. Зараз інша адреса.

    myfizika

    Лютий 18, 2011 at 22:44


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: