Готовы ли вы перейти на следующий уровень с расчетами физики на Python? Если да, то вам нужно освоить функцию python. Я не опытный программист, я просто нормальный человек, которому нравятся физика и питон.

Я предполагаю, что вы уже выполнили числовые вычисления на Python. Это не должно быть что-то безумно сложное. Может, это просто траектория полета снаряда без сопротивления воздуха. На самом деле, если вам нужно быстрое руководство - у меня есть это для вас.

Хорошо, но что за функция? Это очень похоже на математическую функцию. Что-то вроде этого.

Для этой математической функции вы можете ввести любое значение x, которое вам нравится, и она «выдает» какое-то значение. Функция python может быть примерно такой же. Фактически, это МОЖЕТ быть функцией Python. Вот как бы это выглядело.

def g(x):
  return(2*x**3-4*x)
print(g(3))

Да, это может быть самая скучная программа на Python, но это отличное место для начала. Вот несколько важных замечаний:

  • Функция требует уникального имени. Я могу использовать «g», если нет других функций или переменных с именем «g».
  • В определении (да, вам нужна часть def и двоеточие) вы выбираете имена входных переменных. В этом случае я использую «x», но это может быть что угодно, если вы используете то же имя в теле функции.
  • Результатом будет return() - все, что вы поместите в круглые скобки, будет результатом функции.
  • Эта функция имеет один вход (x) и один выход, но вы можете иметь столько входов и выходов, сколько захотите.

Круто, но не очень полезно.

Функция движения снаряда

Как насчет еще одного полезного примера? Я собираюсь создать функцию, которая берет начальный вектор скорости объекта и высоту над землей. Затем он возвращает «диапазон» - горизонтальное расстояние, которое проходит объект.

Хотя я мог бы рассчитать этот диапазон с помощью аналитического решения, я собираюсь сделать это численно. В качестве беглого обзора вот как узнать, как далеко перемещается объект по горизонтали.

  • Начните с начального положения и скорости объекта. По скорости и массе я могу определить импульс объекта.
  • Разбейте движение на небольшие промежутки времени. Как насчет 0,01 секунды?
  • Рассчитайте силу, действующую на объект. В этом случае это будет постоянная гравитационная сила.
  • Мы можем использовать эту силу и текущий импульс, чтобы найти новый импульс в конце короткого временного интервала.
  • Наконец, с помощью импульса я могу обновить положение объекта.

Продолжайте делать этот цикл, пока объект не достигнет земли, которую я назову y = 0 метров. Вот как это выглядит как функция. (Полный код здесь)

А теперь комментарии:

  • Обратите внимание, в первой строке я называю функцию xrange(v0,h,m). Во-первых, я почти уверен, что диапазон уже является функцией в одном из модулей, загруженных в glowscript (да, я использую glowscript). Во-вторых, я передаю в функцию три переменные. Обратите внимание, v0 - это вектор, и мне даже не нужно объявлять его как этот тип.
  • В строке 13 это как целая программа с циклом, который выполняет числовые вычисления.
  • Цикл продолжается до тех пор, пока позиция не станет больше нуля. Поскольку я создал позицию как вектор, r.y является y-компонентом этой позиции.
  • Строки 14, 15 и 16 представляют собой векторные уравнения. Разве это не круто? Поскольку p - вектор, правая часть - это векторная операция.
  • Строка 18 возвращает окончательную позицию. Эта функция просто имеет скалярный x-компонент позиции, но вы могли бы иметь это как просто r - возможно, вам стоит попробовать это и посмотреть, что произойдет.
  • Наконец, в строках 20 и 21 я просто печатаю вывод функции для определенного набора входных данных. Это нужно для того, чтобы убедиться, что все работает.

А теперь давайте воспользуемся этой штукой, ладно? Я хочу найти угол запуска, обеспечивающий наибольшую дальность действия. Вот код для этого.

Он использует ту же функцию (хотя я изменил временной интервал с 0,01 на 0,001), как раньше. А теперь еще несколько примечаний:

  • Строки 20–24 - это всего лишь начальные условия. Масса на самом деле не меняется, но я собираюсь использовать ее чуть позже. Кроме того, легче рассматривать скорость запуска с точки зрения величины и угла, но я конвертирую в вектор перед вызовом функции.
  • Линия 22 - это угловой шаг. Я собираюсь вызвать функцию для некоторого начального угла запуска, а затем повторить ее для немного большего угла.
  • Строки 26–27 предназначены только для построения графика. Вот ваше руководство по графу Python.
  • Строки 29–33 представляют собой цикл для запуска функции с разными углами запуска. Это включает в себя поиск вектора скорости запуска (строка 30) и построение графика (строка 32).

Вот результат.

Обратите внимание, что максимальная дальность полета составляет примерно 36 градусов, а НЕ 45 градусов. Помните, что максимальная дальность полета снаряда составляет 45 градусов, только когда вы запускаете с плоской земли на ровную землю. В данном случае я запустил объект на высоте 1 метра от пола.

Да, вы можете использовать более изощренный метод для распечатки максимального диапазона, но простой просмотр графика тоже работает нормально.

Домашнее задание

Теперь, когда у вас есть приблизительное введение в функции Python, посмотрите, сможете ли вы изменить код, чтобы найти угол запуска для максимальной дальности удара футбольного мяча от земли. Да, вам придется приложить к мячу силу сопротивления воздуха. Не волнуйся, ты справишься.