Готовы ли вы перейти на следующий уровень с расчетами физики на 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, посмотрите, сможете ли вы изменить код, чтобы найти угол запуска для максимальной дальности удара футбольного мяча от земли. Да, вам придется приложить к мячу силу сопротивления воздуха. Не волнуйся, ты справишься.