Advanced Physics Demystified – это учебник, опубликованный вездесущим издательством McGraw-Hill и предназначенный для обучения студентов физике, основанной на математических вычислениях. Они начинают с введения, пожалуй, самого основного из всех физических понятий: линейной кинематики. В этой статье я расскажу и продемонстрирую свою процедуру решения одной из их задач линейной кинематики, связанной с подбрасыванием мяча вверх.
Краткое содержание
- Проблема
- Решение
- Конец дела
- Приложение
- Рекомендации
Проблема
Задача из учебника описывает сценарий и спрашивает:
Представьте, что вы подбрасываете мяч вертикально вверх со скоростью 20 м/с. Считайте, что ускорение свободного падения равно 10 м/с². Сколько времени понадобится мячу, чтобы упасть на землю, если не учитывать сопротивление воздуха или влияние ветра? — Джибилисео (2007, стр. 26)
Прежде чем приступить к решению этой проблемы, я хочу разработать визуализацию того, как это может выглядеть. На рисунке 1 показано, как я себе это представлял:
См. в Приложении A код Python, который я использовал для создания рисунка 1. В данном случае меня интересуют соответствующие уравнения кинематики мяча, которые представляют собой функции его скорости и смещения как функцию времени.
Решение
Связь между смещением, скоростью и ускорением описывается уравнением 1:
Здесь a(t) — ускорение, v(t) — функция скорости, h(t) — функция смещения и t – это независимая переменная, обозначающая время. Если задана только функция ускорения, в данном случае a(t) = 20, то подход здесь заключается в использовании интегралов для расчета соответствующих функций скорости и смещения.
Этого можно легко добиться с помощью Python и SymPy Live Shell (n.d.), как показано на рисунке 2:
Когда я решил эту задачу вручную, я получил -5t²+vᵢt+hᵢ для функции смещения, что алгебраически эквивалентно решению SymPy Live Shell. Задавался вопрос: «[ч]о сколько времени потребуется мячу, чтобы упасть на землю, если пренебречь сопротивлением воздуха или ветром?»».
Я ответил на это, применив общее решение квадратного уравнения и немного интуиции. Зная, что функция смещения для мяча: -5t²+vᵢt+hᵢ, и что квадратное уравнение приняло форму at²+bt+c=0, и что его решение выражается в уравнении 2:
Как сказано в задаче, начальная скорость vᵢ равна 20 м/с. Ради простоты я не буду здесь работать с единицами измерения и отношусь к такого рода задачам как к абстрактной математической задаче, а в окончательном решении представлю конкретные единицы deus ex machina.
Обратите внимание, что в задаче также указано, что высота hᵢ находится в начале декартова графика или в (0, 0). Что касается ординаты и общего решения квадратного уравнения, это упрощает уравнение 2.1 до гораздо более удобной работы с уравнением 2.2, потому что компонент 4ahᵢ в конечном итоге дает 0:
Я реализовал и решил t₁ и t₂ в Python следующим образом:
dna@deniers:~$ python3 Python 3.x.x (default) [GCC 9.x.x] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import math >>> t_1 = lambda a, v_i: (-v_i + math.sqrt(v_i**2)) / (2 * a) >>> t_2 = lambda a, v_i: (-v_i - math.sqrt(v_i**2)) / (2 * a) >>> t_1(-5, 20) -0.0 >>> t_2(-5, 20) 4.0 >>>
Или t₁=0[с]и t₂=4[с]. Если немного здравого смысла, то ответ на вопрос «[ч]а сколько времени потребуется, чтобы мяч упал обратно на землю», составляет около четырех (4) секунд, потому что это время период после того, как мяч достиг максимальной высоты.
На рис. 3 изображен график функции смещения высоты, который даст наглядное представление о решении этой задачи:
См. в Приложении B код Python, использованный для создания рисунка 3.
Конец дела
В этой статье я обсудил методы включения языка программирования Python и связанных с ним инструментов для решения физических задач.
Хотя я действительно думаю, что Python может расширить возможности решения прикладных математических задач, я бы не стал использовать его для полной замены, хотя и несколько трудоемкого, ручного метода решения подобных задач. Сначала я решил эту задачу из учебника вручную и просто использовал Python в качестве инструмента для проверки своей работы.
Благодарности
Я хотел бы поблагодарить Амита Саха за их книгу Doing Math with Python (Saha 2015), на которую я ссылался, когда писал код Python для решения этих задач и написания этой статьи.
Приложение
A. Код, используемый для создания рисунка 1
import matplotlib.pyplot as plt plt.figure() ax = plt.gca() plt.rcParams['xtick.bottom'] = plt.rcParams['xtick.labelbottom'] = False plt.rcParams['xtick.top'] = plt.rcParams['xtick.labeltop'] = True plt.axhline(color="black") plt.arrow(0, 0, 0, 2, label="vᵢ = 20 m/s", width=0.05, color="black") plt.arrow(0.5, 4, 0, -2, label="g = 10 m/s²", width=0.05, color="grey") circle = plt.Circle((0, 0), radius=0.1, color="black") ax.add_patch(circle) plt.legend() plt.grid() plt.title("abscissa", fontsize=16) plt.ylabel("ordinate", fontsize=16) plt.xlim(-0.3, 1) plt.ylim(-0.3, 5) plt.show()
B. Код, используемый для создания рисунка 3
import math import matplotlib.pyplot as plt plt.figure() plt.rcParams['xtick.bottom'] = plt.rcParams['xtick.labelbottom'] = False plt.rcParams['xtick.top'] = plt.rcParams['xtick.labeltop'] = True h = lambda t: -5*t**2 + 20*t T = np.arange(0, 5, 0.01) plt.plot(T, [h(t) for t in T], color="black", label="g = 10 m/s² \n v_i = 20 m/s") plt.legend() plt.grid() plt.title("time", fontsize=16) plt.ylabel("Δh", fontsize=16) plt.xlim(0, 4.3) plt.ylim(0, 22) plt.show()
Рекомендации
Джибилисео, С. (2007). Демистификация передовой физики[Мягкая обложка]. Образование Макгроу-Хилл.
Саха, А. (2015). Занятия математикой с помощью Python: используйте программирование для изучения алгебры, статистики, исчисления и многого другого! No Starch Press.
SymPy Live Shell (без даты). Получено 2 марта 2023 г. с сайта https://live.sympy.org/.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу