Рубрики
Без рубрики

Кит Дугласа Адамса

Динамика моделирования кита, падающего с орбиты. Для науки!. Теги с Python, физикой, научным, веселым.

вступление

Я думаю, что важно найти способы, которыми ваш фон или опыт конкретно помогают вам выделиться в любой данной группе. Если вы можете точно определить эти области, группа может оптимизировать набор инструментов и иметь лучшее представление о том, кто лучше всего подходит для конкретной задачи. Лично, в то время как программирование является одним из моих любимых игр, у меня есть степень в области машиностроения и некоторых опыта преподавания исчисления и физики. Из-за этого я думал, что буду поделиться некоторому пониманию области, которую я знаю, у всех есть несколько вопросов: кит в Дугласе Адамс Руководство автомата к галактике

Какой кит, вы спрашиваете? В главе 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”