Уравнение или всё же наблюдение?



Запятошка: Устраивайся поудобнее, Жучок, мы будем с тобой сегодня проводить мысленные эксперименты со свободно падающими телами.
Жучок: А это как? Тела будут падать в моём воображении? Прямо так и вижу: обнажённые тела, летящие на фоне звёздного неба…
Запятошка: Тела, конечно, воображаемые, но не настолько большие, чтобы быть обнажёнными. Вообще, речь пойдёт о свободном падении тел в однородном гравитационном поле.



Жучок: Что это ещё за проектор снов такой?
Запятошка: Это мой экспериментальный проект. Пока что это куча страшного кода на Python с использованием IPython для связки. Ну, да вернёмся к нашему разговору. Итак, тело, падающее свободно с начальной скоростью движется с ускорением…
Жучок: Опять ты бубнишь себе под нос всякие непонятные проклятия. Я много раз видел, как летят кусочки бабочек, которых с удовольствием пожираю каждый день. А твой проектор может показать, что получится, если разбросать кучу ошмётков места в разные стороны? Я тут подумываю о новом способе потрошения бабо… прости, поглощения обеда.
Запятошка: Вечно ты о еде думаешь, Жучок. А вообще, да, мы можем такую ситуацию смоделировать. Давай предположим, что все кусочки вылетают из одного с одинаковой скоростью, и проследим их полёт в течении первых нескольких секунд.


Жучок: Ого, салют!
Запятошка: Правда, похоже? А ещё что-нибудь замечаешь?
Жучок: Хм-м, похоже, что кусочки образуют круг… всегда… любопытная картинка. А почему так происходит?
Запятошка: Прежде, чем я объясню, заметь, что ты опознал, что это круг без всяких вычислений и формул. Даже в проекторе, если посмотришь, нигде нет указания, что кусочки должны всегда образовывать круг. Я просто указала проектору сэмулировать много летящих кусочков и всё, а уже твой мозг сам заметил закономерность безо всяких заумных объяснений и формул. Главное, задать интересный вопрос и иметь под рукой такой вот проектор!

А теперь попробую объяснить, почему получается такая картинка. Представь, что ты — один из маленьких кусочков, летящих вместе с остальными. Однако, тебя не швырнули вместе со всеми, тебе удалось ускользнуть и ты выпал из гнезда без начальной скорости. Немного придя в себя ты начинаешь смотреть вокруг и наблюдать за остальными кусочками. Как, по-твоему, на что будет похоже их поведение?
Жучок: Ну, они наверное будут от меня удаляться, так как их-то вышвырнули из гнезда.
Запятошка: Всё верно, в системе отсчёта, связанной с тобой падающим свободно, не будет действовать сила притяжения, а значит, что кусочки будут от тебя удаляться, двигаясь с одинаковой скорость равномерно и прямолинейно.
Жучок: Ух, как ты опять начала умничать. Но суть я уловил: кусочки будут от меня убегать как по спицам велосипеда, и в целом будут образовывать круг как велосипедное колесо. А это можно «увидеть» в твоём проекторе?
Запятошка: Можно, и это тебе будет упражнением на дом. А ещё попробуй доказать формально, что кусочки будут всегда образовывать круг, используя формулы для свободного падения.

Жучок: Ладно, ладно. А что ещё интересного можно посмотреть в твоём проекторе?
Запятошка: Я тебе расскажу про один приём нахождения любопытных свойств у обычных явлений. Ты ведь помнишь, что свободно падающие тела движутся, в общем случае, по параболе?
Жучок: Так вот что у тебя там рисуется как хвост у звёздочек в проекторе! Да, что-то у меня про параболы осталось в памяти.
Зпятошка: Очень хорошо! Давай посмотрим в энциклопедии какими интересными свойствами обладает парабола. Для начала, посмотрим какая получится картинка, если пометить вершины траекторий кусочков, полётом которых мы любовались выше.
Жучок: А как ты объяснишь проектору в каком месте ставить метку?
Запятошка: Ну, мы можем это сделать двумя способами. Если бы мы исследовали неизвестный феномен, то можно было бы просто объяснить проектору как найти локальный максимум траектории. Но мы-то знаем как движется тело в поле земли, поэтому попробуем подобрать формулу для координат вершины, и одновременно посмотрим как нам в этом может помочь пакет sympy, который умеет решать всевозможные задачки в символьном виде.
Инициализация
import numpy as np
from IPython.core.display import Image 
from sympy import *
init_printing()

x,y,z = symbols('x y z')
v_0, alpha, g, t = symbols('v_0, alpha, g, t', real=True)


v_x = v_0 * cos(alpha)
v_y = v_0 * sin(alpha) - g * t
(Eq(Symbol('v_x'), v_x), Eq(Symbol('v_y'), v_y))



Запятошка: теперь вычислим координаты кусочка, учитывая, что запустили мы его из точки (0,0). Для этого необходимо проинтегрировать скорость по времени
x_t = integrate(v_x, t)
y_t = integrate(v_y, t)
(Eq(x, x_t),Eq(y, y_t))



Жучок: постой, постой! Я запутался немного. Почему ты пишешь Symbol('v_x')? Почему нельзя просто указать переменную v_x, чтобы увидеть результирующее уравнение? Да и сами уравнения ты как-то странно выводишь…
Запятошка: ты очень наблюдательный, Жучок, молодец! Это потому, что переменная v_х и символ v_х — это разные сущности. Подробнее можешь почитать вот здесь.
Запятошка: На вершине траектории вертикальная скорость , откуда находим момент времени когда это происходит.
solution=solve(v_y, t)
t_h = solution[0]; t_h



Запятошка: Наконец, координаты вершины параболы:
x_h = x_t.subs(t, t_h);x_h


y_h = y_t.subs(t, t_h);y_h



Запятошка: Обучаем наш проектор этому знанию и смотрим что получается.


Жучок: Обалдеть! Это же… это же… Эллипс! Ну очень похож!
Запятошка: Молодец, Жучок. Заметь, ты сначала увидел картинку, а мозг уже сам подсказал тебе закономерность, которую нельзя было заметить сколь бы мы ни пялились на формулы.
Жучок: Запятошка, я кажется начинаю понимать зачем ты возишься со своим проектором. А мы будем доказывать, что это реально эллипс, а не фикция нашего воображения?
Запятошка: Конечно, давай попробуем это сделать. Правда, нам придётся немного попотеть объясняя sympy чего мы хотим добиться. По сути, необходимо избавиться от угла в выражениях для вершин парабол, и получить формулу, связывающую и . Если попробовать решить в лоб:
solve([x-x_h, y-y_h], [y, alpha])

Запятошка: то получится абракадабра (проверь дома сам). А всё потому, что sympy ещё маленький, не умеет элегантно манипулировать тригонометрическими выражениями. Но мы ему поможем. Для начала:
x_h = trigsimp(x_h); x_h



Запятошка: далее заметим, что в выражении для можно сделать замену . Делаем подстановку и получаем:
y_h = y_h.subs(sin(alpha)**2, (1-cos(2*alpha))/2);y_h



Жучок: Что-то мне подсказывает, что ты хочешь воспользоваться равенством
Запятошка: Сразу видно, что долгие ночи подготовки не прошли для тебя даром. Выражаем и через и .
s = solve([x-x_h, y-y_h], [sin(2*alpha), cos(2*alpha)]);s



Запятошка: и подставляем в подмеченное тобой равенство:
Eq(s[sin(2*alpha)]**2 + s[cos(2*alpha)]**2, 1)



Запятошка: Получаем ни что иное, как уравнение эллипса!
Жучок: М-да…
Запятошка: Вот тебе ещё одно домашнее задание: выясни, как меняется форма эллипса в зависимости от начальной скорости, а также координаты его центра, можешь ещё и фокусы исследовать. Подсказка: найди эксцентриситет эллипса. Он, как ты помнишь, определяет форму эллипса

Жучок: Ладно-ладно, не ты одна такая умная, разберусь как-нибудь. Ты лучше ещё что-нибудь покажи, а то нашла какой-то эллипс и радуешься как ребёнок…
Запятошка: А вот и покажу! Читаем упомянутую выше энциклопедию дальше и обнаруживаем там описание фокуса параболы. Какой у нас сразу возникает вопрос? По твоей кислой мине сразу понятно, что мы хотим пометить фокусы всех наших парабол и посмотреть, что получится.
Жучок: Что, опять эллипс?
Запятошка: Почём мне знать? Давай посмотрим. В виду симметрии, абсцисса фокуса совпадает с абсциссой вершины параболы. А вот ординату надо будет найти по формуле согласно энциклопедии. Для этого найдём сначала уравнение параболы через и , избавишься для этого от .
ss = solve([x-x_t,y-y_t], [y,t], dict=True);ss



Запятошка: Следовательно, коэффициенты квадратичного трёхчлена:
a,b,c = ss[0][y].as_poly(x).all_coeffs(); a,b,c



Запятошка: Дальше попробуй сам.
Жучок: Хорошо, значит дискриминант получится вот таким:
D = b**2 - 4*a*c; D



Жучок: и ордината фокуса:
y_f=(1-D)/(4*a);y_f



Жучок: Что получится, если это подставить в твой проектор, Запятошка?
Запятошка: А вот что!


Жучок: У меня нет слов! Чем-то смахивает на какой-то сакральный знак… Вспомнил! Око Ра!
Запятошка: Ну у тебя и воображение, Жучок. Попробуешь доказать, что фокусы ложатся на круг?
Жучок: Так, значит сначала пробуем упростить:
y_f = trigsimp(y_f); y_f



Жучок: Э, да тут всё просто получается! Даже потеть не надо, просто складываем квадраты абсциссы и ординаты:
Eq(x**2 + y**2, simplify(x_h**2 + y_f**2))



Запятошка: Ну, раз уж ты у нас такой молодец, то вот тебе ещё одна задачка на дом. Изучи, как ведут себя директрисы наших парабол.
Жучок: А что если у меня возникнут трудности?
Запятошка: Постарайся самостоятельно разобраться, помня, что наши инструменты всё ещё далеки от совершенства и им нужно эпизодически помогать и подсказывать. Если всё же вопросы останутся — встретимся ещё раз и пообщаемся.

Напоследок, последняя задачка: посмотри внимательно на самую первую картинку в начале нашей беседы — видишь, там ещё одна фигура на фоне вырисовывается? Попробуй выяснить, что это за фигура и как себя ведёт.

Вот тебе ещё парочка ресурсов для вдохновения.
Поделиться публикацией

Комментарии 20

    +1
    Уравнение или наблюдение? Я бы сказал, что одно должно всегда дополнять другое. Грамотно созданная визуализация или геометрическая интерпретация — большой плюс для понимания учебного материала. Математики времен Ньютона с помощью геометрических аналогий решали задачи анализа, которые могут заставить серьезно задуматься современного студента. С другой стороны было и картезианство и его последователи…

    Интересно было посмотреть на Ваши анимации :)

    видишь, там ещё одна фигура на фоне вырисовывается? Попробуй выяснить, что это за фигура и как себя ведёт

    Парабола безопасности?
      +30
      Happy Tree Friends, простигосподи. А вот можно было без жучка и запятошки, без сюсюканья?
        +3
        Зюзя и Чубайка.
        +8
        «Жучок», «Запятошка» и "y_h = y_h.subs(sin(alpha)**2, (1-cos(2*alpha))/2);y_h" не очень сочетаются :)
          +2
          Да вы что! Круто же! Рвет шаблоны! :)

          За статью спасибо. Очень интересно и доставило. Плюс поизучаю сию библиотеку.
            +5
            Шаблон, конечно, рвет :)
            В качестве благодарного читателя этого поста мне представляется такой глубоко травмированный инженер, к которому в детстве обращались по имени-отчеству и объясняли сложение и умножение через теорию групп.
              0
              Почти так и было! 8-)
          +1
          Молодец, Жучок. Заметь, ты сначала увидел картинку, а мозг уже сам подсказал тебе закономерность, которую нельзя было заметить сколь бы мы ни пялились на формулы.
          Странно, а мне это из уравнения сразу же видно…
            0
            Санитары уже выехали.
              0
              В целом, соглашусь, что почти все «явления», описанной в статье можно увидеть из аналитического представления, но… Многие вещи становятся простыми когда смотришь в правильном направлении. И если проследить за историей развития многих, казалось бы обычных абстракций (способов «смотреть», если угодно), то на их осознание могло уходить несколько сотен лет.

              Это с одной стороны. С другой стороны, задам вам один философский вопрос, рискуя вызвать на себя праведный гнев. Можете прикинуть, если не затруднит, сколько у вас ушло времени (лет в школе/институте/работе возможно), чтобы научиться видеть «сразу» что кроется за нагромождением формул? Как по-вашему, можно это время сократить до 6 месяцев? 6 недель?

              Даже рискну задать кощунственный вопрос. Как по-вашему, есть ли смысл продолжать учить наизусть таблицу умножения в школе, учитывая, что мы давно придумали калькуляторы, которые это делают быстрее и точнее нас? Оставим в стороне пока тот факт, то зубрёжка по-видимому улучшает память и имеет прочие побочные, но полезные эффекты для нашей психики. Готов поспорить, что мы сможем найти полезные навыки для изучения, чтобы заполнить образовавшуюся пустоту.

              Замечу, что у меня нет ответа на этот вопрос. Пока что, это смутные терзания на уровне интуиции, что мы не на полную мощь научились пользоваться вычислительной техникой, продолжая проецировать на неё способы работы, которые были изобретены много сотен лет назад.
              +1
              Спасибо! Отличный материал! Очень наглядно объясняется необходимость изучения основ программирования с комплекте с физикой.
              Изучение формул — моделирование и визуализация результата. Поможет зрительно замечать физические законы в окружающем мире.
              Только я не понял где Питон? Выложите плиз исходники с комментариями.на русском языке, будем использовать Питон на уроках физики.
              Совместим, так сказать, полезное с полезным.
                +1
                Согласен. Линк на гитхаб необходим на более видном месте.
                А еще крайне не помешает рефакторинг кода для разбиения всего на логические модули.
                Еще было бы великолепно, если бы был репозиторий с некоторым набором подобных готовых визуализаций. Дорабатывать проще, чем делать с нуля.

                И огромная просьба — напишите отдельную статью как вы делали сами визуализации. По коду не так очевидны некоторые решения.
                  +2
                  Выложил прототип статьи в формате IPython notebook. В ней вместо анимации используется механизм интерактивных элементов из IPython. Код тоже на порядок проще. Если нет желания бороться с установкой всех необходимых библиотек (про пляски с бубном для настройки Windows 64bit + Python 3.3 64bit + IPython 2.х можно отдельную статью написать), то на статичную версию блокнота можно посмотреть здесь.

                  Должен признать, что статья больше про грамотную визуализацию, чем про конкретную библиотеку. Что до последней, то это скорее попытки понять как должен выглядеть симулятор, который бы позволил строить подобные визуализации (анимационные и статичные) и включал в себя набор примитивов из базовой литературы по физике и математике (нет, я не пытаюсь написать очередную систему символьной математики, скорее расширение для подобной системы). Как следствие, код далёк от совершенства. В частности, я упёрся в границы экспрессивности языка и/или библиотеки matplotlib и пришлось прибегать к чёрной магии mix-in, чтобы не изобретать параллельную иерархию графических примитивов.
                    0
                    Спасибо. В первом приближении выглядит круто.
                    Только вопрос: я нашел только nbviewer.ipython.org для просмотра, есть ли простые десктоп решения?
                    А то по ману очень долгое и сложное дело получается.
                    Ну или вот вам еще одна тема для статьи! :)
                      0
                      А что сложного в обычном IPython notebook-то? Интерфейс интуитивно понятный (и там ещё небольшой cheatsheet есть), при установке тоже вроде ничего особенного не было (по крайней мере у меня установился простым pip install ipython).
                      0
                      пляски с бубном для настройки Windows 64bit + Python 3.3 64bit + IPython 2.х

                      Если не ошибаюсь, именно эта конфигурация у меня гладко работала «из коробки» при установке Anaconda. Но это не всем подойдет, конечно.
                  +9
                  Хотел прочитать но подача материала отпугнула. Сочетание детского диалога с вышкой как-то выносит моск… Может лучше в формате лекции попроще, для дураков? :)
                    +1
                    АГА Сочетание детского диалога и обнаженных тел — немного шокирует.
                    Хотя мне напомнило один мой класс. Там тоже есть любительницы словесного эпатажа.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      +2
                      Странно: в отличие от других комментаторов мне читать было довольно легко (хотя я не напрягался старательным парсингом и перепроверкой формул). Отдельное спасибо за то, что обратили внимание на sympy. Похоже, инструмент чрезвычайно полезный.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое