Advanced Physics Demystified – это учебник, опубликованный вездесущим издательством McGraw-Hill и предназначенный для обучения студентов физике, основанной на математических вычислениях. Они начинают с введения, пожалуй, самого основного из всех физических понятий: линейной кинематики. В этой статье я расскажу и продемонстрирую свою процедуру решения одной из их задач линейной кинематики, связанной с подбрасыванием мяча вверх.

Краткое содержание

  1. Проблема
  2. Решение
  3. Конец дела
  4. Приложение
  5. Рекомендации

Проблема

Задача из учебника описывает сценарий и спрашивает:

Представьте, что вы подбрасываете мяч вертикально вверх со скоростью 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 и найдите прекрасную работу