
Диагональная проекция, т.е. о законе Ньютона и дифференциальных уравнениях
Компьютер — это инструмент, который все чаще используется учеными для раскрытия тайн, тщательно скрытых природой. Моделирование, наряду с экспериментом и теорией, становится третьим способом изучения мира.
Три года назад в Силезском университете мы начали программу интеграции компьютерных методов в образование. В результате было создано множество чрезвычайно увлекательных дидактических материалов, позволяющих легче и глубже изучить многие темы. В качестве основного инструмента был выбран язык Python, который вместе с мощью доступных научных библиотек, вероятно, является лучшим решением для «компьютерных экспериментов» с уравнениями, изображениями или данными. Одной из самых интересных реализаций полноценной рабочей среды является Sage [2]. Представляет собой открытую интеграцию системы компьютерной алгебры с языком Python, а также позволяет сразу начать играть, используя веб-браузер и один из возможных вариантов доступа через облачный сервис [3] или единый вычислительный сервер, на котором интерактивная версия этой статьи основана на [4].
Диагональный бросок Начнем мы с, казалось бы, скучной темы, которая может показаться известным еще со школы диагональным броском. В физике это понятие означает движение материальной точки определенной массы под действием силы тяжести (силы земного притяжения). Знание этого вопроса имело решающее значение в вооруженных конфликтах. Отправляя в сторону врага материальные точки в виде различных ракет, мы хотели знать, точно ли они достигнут цели. С этой точки зрения интересна дальность действия имеющегося у нас движителя — конечно, чем больше, тем лучше. Можно ожидать, что эта дальность зависит от метательной силы нашего устройства, а значит, и от начальной скорости снаряда. Другое дело — учитывать угол выстрела. Если мы выстрелим снарядом вертикально, он обязательно попадет в нас — дальность будет равна нулю. Если стрелять горизонтально, снаряд тоже далеко не улетит. Итак, под каким углом мы должны снимать? Ответы, мучающие артиллеристов, дает физика, точнее, ее раздел, называемый динамикой. Итак, решив соответствующую задачу динамики, мы получим траекторию снаряда.
Основным законом является знаменитый второй закон Ньютона, который выражается уравнением [1]:
(1)
В этом уравнении m это масса пули a — ускорение (вектор с горизонтальной и вертикальной составляющими) i F это также сила с двумя составляющими: горизонтальной и вертикальной. Как правило, на уроке рассматривается случай, когда мы пренебрегаем силами трения. Тогда единственная сила, действующая на тело, это сила с составляющими (0, -mg), т.е. горизонтальная составляющая равна 0, а сила в вертикальном направлении равна mg и направлена вниз (поэтому стоит знак минус!). В этом случае мы можем рассматривать движение, происходящее в плоскости, натянутой на вектор начальной силы и скорости, то есть наш снаряд будет лететь в вертикальной плоскости к Земле и не будет поворачивать ни влево, ни вправо. Классическое решение этой задачи основано на том факте, что горизонтальное перемещение x и вертикальное перемещение y не зависят друг от друга. В вертикальном направлении движение равномерное, а в вертикальном направлении равноускоренное. Это можно записать как [4]:
(2)
Уравнения (2) являются так называемыми параметрическое представление траектории. Это означает, что мы знаем, как изменяется каждая из координат x и y в зависимости от параметра t (то есть времени).Вычислив время t из первого уравнения и подставив результат во второе, можно преобразовать эти два уравнения в функция у = f (х). Тогда мы получим уравнение параболы с отрицательным коэффициентом с членом x2. Однако в Sage у нас есть очень удобная процедура для рисования именно таких параметрических кривых, а именно функция parametric_plot.
var(‘t’) x0,y0,vx0,vy0 = 0,0,10,10 g = 9.81 t_end = 2*vy0/g p1 = parametric_plot([x0+vx0*t,y0+vy0*tg*t^ 2/2], (t,0,t_end)) p1.show()
Рисовать эти кривые весело! Представим, что у пушки есть функция зенитки и мы спрашиваем, в какой области пространства ее ракеты могут долететь до вражеского самолета?
В Sage нанесем траектории стрельбы со скоростями vx0 = v0cos (a) и vy0 = v0sin (a) на один график для разных углов a (это угол между горизонталью и вектором начальной скорости снаряда). Мы рекомендуем вам написать код самостоятельно, который должен генерировать что-то похожее на картинку (1). Край зоны эффективного огня зенитки математически говоря является границей семейства кривых. Наш рисунок предполагает, что она имеет форму параболы, и тщательный расчет показывает, что это так (см. [3]).
Диагональный бросок — разный Читатель, вероятно, задается вопросом, не хотим ли мы подставить его на уроке физики под предлогом рисования графиков функций на компьютере. Ну нет! Математическое решение будет полезно для проверки результатов рассуждений, несколько отличных от тех, которые обычно предъявляются в школе. Соображения позволят нам проанализировать траекторию полета снаряда, принимая во внимание более реалистичные факторы, такие как трение, ветер или даже вращение пули.
В уравнении Ньютона для движения снаряда есть ускорение. Обозначим некоторый момент времени через t, а небольшое приращение времени через Δt. Для горизонтальной составляющей ускорения получаем соотношение:
(3)
Из закона Ньютона для компоненты x имеем:
(4) поэтому мы можем написать:
(5)
Предположим, мы знаем скорость vx(t) в момент времени t. Мы хотели бы вычислить скорость vx(t + Δt) в момент времени t + Δt. Из уравнения (5) следует, что:
(6)
Здорово! Напишем аналогичные формулы для вертикальной составляющей и сможем рассчитать скорость в любой момент времени. Как насчет местоположения? Мы можем сделать то же самое, используя формулу скорости. И так, например, для x:
(7)
то есть:
(8)
Формулы (6) и (8), а также эквиваленты для вертикальных компонент y образуют алгоритм, который можно запрограммировать на компьютере. Но подождите минутку…
Верны ли эти формулы? К сожалению нет! В уравнении (6) мы приняли закон равноускоренного движения, и сила в общем случае не обязательно должна быть постоянной. В уравнении (8) мы предполагали, что скорость постоянна, и она не обязательно должна быть такой. Ну, разве что Δt достаточно мало. Тогда можно было бы ожидать, что сила и скорость во времени между ta t + Δt сильно не изменятся. Тогда формулы были бы приближением к истине. Давайте проверим это экспериментально, выполнив следующий код в системе Sage:
x0,y0,vx0,vy0 = 0,0,10,10 g = 9.81 t_end = 2*vy0/gn = 200 tab = [[x0,y0]] delta_t = t_end/n для i в диапазоне (1,n) : x = x0 + vx0*delta_t y = y0 + vy0*delta_t vx = vx0 vy = vy0 — g*delta_t x0, y0, vx0, vy0 = [ x, y, vx, vy] tab.append([x0,y0 ]) p2 = list_plot(tab,figsize=4) p2.show()
Как и в случае рисования точного решения, начинаем с задания начальных условий и параметров системы (строки 1-3). Тогда предположим, что мы хотим применить приближенную процедуру n = 200 раз на протяжении всего полета снаряда. Вычисляем ∆t = tконец/н (строчка 6). Делаем цикл n раз, в котором используем четыре приближенные формулы (6), (8) и столько же для вертикальной составляющей. Строка 12 чрезвычайно важна, так как она «задает» рассчитанные новые значения скорости и положения в качестве начальных условий для следующего шага. В строке 13 мы добавляем выбранные параметры — нас интересует местоположение — в список точек, необходимых для последующего рисования (последние две строки) траектории снаряда. Если мы уже запускали первую программу в том же сеансе Sage, мы можем легко нарисовать точное и приближенное решение на одном графике с помощью команды: (p1+p2).show().
Из рисунка видно, что мы получили траекторию движения, близкую к точной. Мы призываем читателей поэкспериментировать самостоятельно и изучить, как, например, количество итераций, то есть временной шаг, влияет на результат. Интересен тот факт, что наша программа нигде не содержала квадратичной функции, и тем не менее нарисовала ее график — параболу!
Почему мы так шумели и заставляли компьютер вычислять то, что и так было известно? Ведь в случае косого броска численный метод кропотливо воссоздает аналитический результат? Оказывается, с помощью нашего алгоритма можно решить практически ЛЮБУЮ задачу, описываемую уравнением Ньютона! Достаточно изменить выражения для сил.
Более того, силы могут самым странным образом зависеть от каждой из переменных. Достаточно изменить всего две строчки в нашем алгоритме:
vx = vx0 + Fx/m*дельта t vy = vy0 + Fy/m*дельта t
где после Fx, Fy мы помещаем соответствующие выражения для сил в горизонтальном и вертикальном направлениях, которые мы хотим смоделировать. Например, мы можем решить систему, в которой у нас есть реалистичная сила сопротивления, прямо связанная со скоростью. Мы можем добавить ветер, и даже такой, который дует по-разному на высоте 100 м над Землей, и на высоте 10 км. Мы можем учесть изменение плотности воздуха на больших высотах. В таких случаях непросто, а то и невозможно получить решение аналитическими методами.
Терпеливым читателям предлагается прочитать следующую часть этой статьи. Мы призываем нетерпеливых экспериментировать самостоятельно прямо сейчас.
А дифференциальные уравнения? Могла ли нас заразить цифровая деменция? В конце концов, мы собирались узнать что-то о дифференциальных уравнениях! Оказывается, наша вторая программа на самом деле была диаграммой Эйлера для решения системы четырех обыкновенных дифференциальных уравнений! Раз мы знаем, как их решать, может быть, давайте узнаем, что это такое? Если быть менее точным, то это уравнение, подобное (5), но в пределах Dt0. Левая часть изменяется на величину, называемую производной (в данном случае производной скорости). Дифференциальные уравнения — это как раз такие уравнения, которые содержат функции (в нашем случае x(t), vx(t), y(t), vy(t) и их производные. просто числовая диаграмма, решающая наши дифференциальные уравнения.
Литература [1] http://sagemath.org [2] http://cloud.sagemath.com [3] http://visual.icse.us.edu.pl/Warsztaty [4] http://pl. wikipedia.org/wiki/Rzut_ukośny

