вступление
Я думаю, что важно найти способы, которыми ваш фон или опыт конкретно помогают вам выделиться в любой данной группе. Если вы можете точно определить эти области, группа может оптимизировать набор инструментов и иметь лучшее представление о том, кто лучше всего подходит для конкретной задачи. Лично, в то время как программирование является одним из моих любимых игр, у меня есть степень в области машиностроения и некоторых опыта преподавания исчисления и физики. Из-за этого я думал, что буду поделиться некоторому пониманию области, которую я знаю, у всех есть несколько вопросов: кит в Дугласе Адамс Руководство автомата к галактике
Какой кит, вы спрашиваете? В главе 18, две ракеты преобразуются случайным образом превращены в кит и растение в горшке соответственно. Вот выдержка:
Еще одна вещь, которая забыла, стала тот факт, что против вся вероятность того, что кит спермы внезапно призвал к существованию несколько миль над поверхностью инопланетной планеты. И поскольку это не естественно особое положение для кита, это плохое невинное существо имело очень мало времени, чтобы прийти к срокам с его идентичностью как к китам, прежде чем он должен был прийти к срокам, чтобы больше не было кита. Это полная запись его мыслей с момента начала своей жизни до того момента, когда он закончил. Ах …! Что происходит? это подумала. […] И вау! Привет! Что эта вещь вдруг придет ко мне очень быстро? Очень очень быстро. Таким образом, большая и плоская и раунд, ему нужна большое широкое звучание, как … Оу … Оут … Круглая … земля! Вот и все! Это хорошее имя – земля! Интересно, будет ли это друзья со мной? И остальное, после внезапного мокрого туд, молчали.
Этот выдержка приводит меня к спрашиванию: Можем ли мы смоделировать его? С небольшой помощью Python мы можем узнать. Я собираюсь написать это, предполагая, что читатель имеет рабочие знания основных принципов программирования, и какая разница между имперской и метрической системой, но имеет очень мало физики. Хотя я, как правило, более комфортно, используя имперские единицы, такие как ноги и фунты, я собираюсь придерживаться метрических подразделений на этот раз, для здравомыслия наших международных друзей и потому, что математика работает немного проще.
Силы вовлечены
Давайте начнем с сил в игре здесь. В основном, только два, о которых я собираюсь беспокоиться, являются тяжести, действующие на кит и сопротивляют работу против кита, когда она падает. Предположим, что этот кит падает с геосинхронной орбиты (орбита в пространстве, которая позволила бы ему идти в ногу, когда земля вращается) – примерно 3.5786 x 10 ^ 7 метров высота Отказ Для тех, кто заинтересован, я собираюсь наполнить единственное встроенное уравнение здесь.
Превращение уравнений в код не является супер сложным. Нам просто нужно заполнить некоторые из переменных выше сначала. Поскольку получение данных на инопланетную планету и инопланетную киту сложнее, давайте использовать землю и земной синий кит. Масса земли грубо 5,97 х 10 ^ 24 кг и его радиус примерно 6,37 миллиона метров Отказ Голубые киты живут в регионе между 80-120 Метрические тонны Отказ Чтобы сделать математику приятно, давайте использовать 100 (100 000 кг). Забавный факт: крупнейший известный динозавр пришел в окрестностях 90 метрических тонн Действительно В любом случае, с этими константами и универсальной гравитационной постоянной – 6.674 x 10 ^ -11 м ^ 3/кг S ^ 2 – Давайте перевернем это в код.
def gravity(altitude): """Returns the force of gravity [N] at a given altitude [m]""" earth_mass = 5.972e24 # [kg] earth_radius = 6.367e6 # [m] whale_mass = 100000 # [kg] universal_grav_constant = 6.67384e-11 # [m^3/kg s^2] radius = altitude + earth_radius # [m] # Assumption: the 'radius' of the whale is negligible compared to # the other sizes involved # Here's the important bit: result = universal_grav_constant * whale_mass * earth_mass/(radius**2) return result
Перетащи получает немного интереснее. Поскольку существует поразительный недостаток данных о аэродинамических характеристиках живоловых китов, мы предполагаем, что кит погружает на землю – сначала. Эта статья Является ли Chock-полным информационным вкусностями, таким как коэффициент перетаскивания плавательного кита (0,05) и приближенного прогнозируемого поперечного сечения площадь (10 м ^ 2). Прогнозируемая площадь поперечного сечения сортируется как размер тени, который кит будет бросить, если свет сиял на него головой.
Важно отметить, что плотность атмосферы уменьшается с высотой, но не в хорошей линейной форме. Нам нужно будет моделировать следующие отношения в нашем коде (примерно):
Для того, чтобы сохранить ваш интерес, я сделаю немного ручной работы и оставьте этот код.
Вот код для перетаскивания:
def drag(altitude, velocity): """Given altitude [m] and velocity [m/s], outputs the force of drag [N]""" whale_drag_coefficient = 0.05 # [unitless] whale_crossectional_area = 10 # [m^2] result = .5 * whale_drag_coefficient * density(altitude) # VIGOROUS HAND-WAVING! result *= whale_crossectional_area * velociy**2 # Drag always is opposite of the direction of motion. # i.e. if whale falls down, drag is up and vice versa if velocity > 0: result *= -1 return result
Здорово! Еще два шага, прежде чем мы получим результаты. Во-первых, чтобы получить ускорение кита. Хорошо оле ‘ F * A
Отказ
def net_acceleration(altitude, velocity): """Sums all forces to calculate a net acceleration for next step.""" gravity_force = gravity(altitude) # [N] drag_force = drag(altitude, velocity) # [N] net_force = drag_force - gravity_force # [N] assuming gravity is down. # Since F=ma, a = F/m! acceleration = net_force / WHALE_MASS # [m/s^2] return acceleration
Симуляция
Теперь нам нужно имитировать всю падение. Мы сделаем это, получив каждую точку данных один за другим. Если мы знаем высоту и скорость в данный момент времени, мы можем найти ускорение с функцией выше. Для того, чтобы получить следующую скорость и положение из данного ускорения, нам понадобится следующая функция:
def integrate(acceleration, current_velocity, current_altitude, timestep): """Gets future velocity and position from a given acceleration""" new_velocity = current_velocity + acceleration * timestep # Sort of a y = mx + b situation new_altitude = current_altitude + current_velocity * timestep # Same, but for altitude return new_velocity, new_position
Этот набор кода, вероятно, наименее интуитивно понятен, но в основном он в основном сводится к идее, что если вы пройдете 20 миль в час в течение 6 часов, вы пройдете 120 общих миль (20 * 6). Blah Blah Blah Science Trackwaving. Вы можете увидеть полный код и комментарии здесь Отказ Я все еще работаю над уборкой его и фактически фактически проверяя константы. Давайте доберемся до кита.
Результаты
from matplotlib import pyplot as plt import pandas as pd results = pd.read_csv("results.csv", header=0) plt.plot(results["Time"], results["Height"]) plt.show()
Выглядит в значительной степени, как мы ожидаем. Сначала он был. Затем он спустился, и было быстро. Так? Давайте посмотрим на силы, которые он чувствовал.
results["Force"] = results["Acceleration"] * 100000 # whale mass [kg] plt.plot(results["Time"], results["Force"]) plt.show()
Вуа! Давайте лучше посмотрим на этот шип. Обратите внимание, что я заграждаю силу против индекса на этот раз вместо против времени. Это состоит в том, чтобы получить более распространенный взгляд на вещи.
Вы можете увидеть, что он чувствует себя сумасшедшие гравитационные силы в направлении вниз, пока Whambo! Проверка высоты кита прямо вокруг этой точки показывает, что он там, где мы разделяем верхнюю и нижнюю стратосферу: ~ 25000 м Отказ По сути, наш кит является лицевой стороной на нашу атмосферу. Реально я уверен, что, если наш кит уже уже сгорел, у нас будет локализованная сплав и кит-душ.
Так что это сейчас. Это, вероятно, все, что вы можете стоять. Для будущей работы я рекомендую оценить тепло, генерируемую от перетаскивания и оценки точки зажигания воздушно-десантного моря, чтобы узнать, если он распадается или взрывается первым. Слишком ужасно? Да, наверное. Не волнуйся. У него было очень захватывающее время на пути вниз.
Не берите, эй, это действительно захватывающе, так много, чтобы узнать, так много, чтобы с нетерпением ждать, я довольно головокружился с ожиданием! – КИТ
Оригинал: “https://dev.to/rpalo/douglas-adamss-whale”