Как я должен дросселировать свою ракету, чтобы достичь максимальной высоты? [закрыто]

Проблема «реального мира».

Предположим, мы хотим запустить ракету, оснащенную двигателем, который можно дросселировать по своему усмотрению. Предположим также, что количество топлива, сжигаемого за единицу времени, прямо пропорционально восходящей силе двигателя. Как мы должны дросселировать двигатель, чтобы достичь наибольшей высоты, принимая во внимание атмосферное сопротивление?


Физическая формулировка.

Позволять м ( т ) "=" м г + м ф ( т ) — полная масса ракеты, где м г его сухая масса и м ф ( т ) масса оставшегося топлива в момент т . Наш двигатель обеспечивает силу, прямо пропорциональную количеству сожженного топлива; поэтому сила, действующая в данный момент т будет

Ф "=" η г м ф г т ,
где η положительная постоянная, зависящая от КПД двигателя.

Для силы сопротивления мы используем формулу гидродинамики:

Ф г "=" к ( Икс ) Икс ˙ ( т ) 2 ,
где Икс наш рост и к коэффициент, учитывающий изменение плотности воздуха с высотой.

Итак, по закону Ньютона имеем

Икс ¨ "=" Ф Ф д м г м "=" η м ф ˙ к ( Икс ) Икс ˙ 2 м д + м ф г .

Таким образом, проблема стала следующей:

Найдите неотрицательную функцию θ ( т ) (дроссель, т. θ "=" м ф ˙ ) такой, что

0 θ "=" м ф ( 0 ) , (мы сжигаем все топливо, не больше и не меньше)
и такое, что траектория Икс ( т ) решение дифференциального уравнения
Икс ¨ ( т ) "=" η θ ( т ) к ( Икс ( т ) ) Икс ˙ ( т ) 2 м д + м ф ( 0 ) 0 т θ г
достигает где-то максимального значения, то есть для любого другого θ ~ удовлетворяющая предыдущим требованиям, его траектория Икс ~ таков, что Как дела т е [ 0 , ) Икс ~ ( т ) Как дела т е [ 0 , ) Икс ( т ) .


Математическая формулировка и резюме.

Данный г , η , С > с е ( 0 , ) , к : [ 0 , ) [ 0 , ) убывающая функция, пусть

С с , С "=" { ф е л 1 ( [ 0 , ) )  ул.  0 ф "=" с , ф 0  э , Икс ф ( т )  ул.  Икс ¨ ф ( т ) "=" η ф ( т ) к ( Икс ф ( т ) ) Икс ˙ ф ( т ) 2 С 0 т ф г } .
Находить θ е С с , С ул.
θ ~ е С С , Как дела т е [ 0 , ) Икс θ ~ ( т ) Как дела т е [ 0 , ) Икс θ ( т ) .

Я вижу здесь только скалярии. Тяга имеет как величину, так и направление, а также положение, скорость и ускорение. Кроме того, вы не можете просто использовать g для гравитации, которая побеждает всю точку орбиты. Система намного сложнее, чем вы полагаете.
Я подозреваю, что речь идет об игрушечной ракете, которая запускается вертикально, а не о более сложной ракете, которая покидает атмосферу и либо выходит на орбиту, либо следует по баллистической траектории, чтобы доставить свой полезный груз на полпути вокруг земного шара.
@AlanSE Я думаю, он спрашивает о чисто вертикальном подъеме. Однако я согласен с вами, что г следует заменить на г М р 2 .
Лично я нахожу проблему достаточно сложной с этими упрощенными предположениями; однако, если вы хотите, вы можете (сформулировать и) решить более общий случай! (например, заменить г с г М Икс 2 , рассмотрим коэффициент лобового сопротивления, который не зависит только от высоты и т.д.)
Вам нужно подняться примерно на 32 километра, чтобы получить изменение в 1% г , так что в зависимости от масштаба вещей может быть вполне разумно использовать метод постоянной гравитации.
У вас есть два противоречивых давления. Вы хотите сжечь быстро, чтобы уменьшить потери силы тяжести, и вы хотите двигаться медленно, чтобы уменьшить потери сопротивления. Без информации о перетаскивании, я не думаю, что вы сможете найти компромисс. Вероятно, это будет числовая оптимизация.
Не дросселируйте. Любое дополнительное время, потраченное на «зависание», расходует драгоценное Ф Δ т чтобы бороться с гравитацией, когда она может отправить вашу ракету вверх.
Я отзываю свои предыдущие комментарии и чувствую, что проблема теперь лучше вписывается в рамки этого сайта. Критическое физическое различие - это то, о чем спорит @Floris, но я считаю, что он не прав. С достаточно плотной атмосферой вы примете большее сопротивление гравитации вместо меньшего сопротивления воздуха. Учитывая уменьшающуюся экспоненциальную плотность, вы можете медленно дросселировать, пока не очистите атмосферу, а затем быстро сбросьте остальное. Заметные предельные случаи также возможны с определенными комбинациями параметров. Это несколько загружено, возможно, лучше задать более конкретный вопрос поменьше.
FWIW, тяга главных двигателей шаттла будет составлять около 65% сразу после запуска, пока атмосфера не разрежется примерно на высоте 35000 футов и скорости 1600 миль в час.
Привет Мозговой штурм. Добро пожаловать в Phys.SE. Если вы еще этого не сделали, пожалуйста, найдите минутку, чтобы прочитать определение того, когда использовать тег домашнего задания , и политику Phys.SE для проблем, подобных домашним заданиям.
Я подозреваю, что нет хорошего аналитического решения этой проблемы. Здесь есть полезная информация.

Ответы (2)

Это задача оптимального управления , поэтому я буду использовать правила оптимального управления. Во-первых, мы представляем уравнения пространства состояний. Также мы берем общую массу как состояние и количество сожженного топлива как входное управление. Итак, у нас есть:

(1) { Икс ˙ 1 "=" Икс 2 Икс ˙ 2 "=" η θ к ( Икс 1 ) Икс 2 2 Икс 3 г Икс ˙ 3 "=" θ
с этими граничными условиями:
(2) { Икс 1 ( 0 ) "=" 0 Икс 2 ( 0 ) "=" 0 Икс 3 ( 0 ) "=" м г + м ф ( 0 ) Икс 3 ( т ф ) "=" м г
Мы хотим найти функцию θ ( т ) которые минимизируют следующую функцию стоимости:
(3) Дж ( θ ) "=" час ( Икс ( т ф ) , т ф ) + 0 т ф г ( Икс , θ , т ) г т "=" 0 т ф ( Икс 2 ) г т
В приведенных выше уравнениях конечное время т ф неизвестно и должно быть определено.

Для нахождения решения определим гамильтониан этой системы:

(4) ЧАС ( т , θ , Икс , п ) "=" г + п Т а "=" Икс 2 + п 1 Икс 2 + п 2 ( η θ к ( Икс 1 ) Икс 2 2 Икс 3 г ) п 3 θ
где а – вектор дифференциальных уравнений состояний и ( п 1 , п 2 , п 3 ) являются стоимостными переменными.

Используя вариационное исчисление, найдем необходимые условия оптимальности:

(5) { Икс ˙ "=" ЧАС п п ˙ "=" ЧАС Икс 0 "=" ЧАС θ
и мы получаем это граничное условие:
(6) ( час Икс ( Икс ( т ф ) , т ф ) п ( т ф ) ) дельта Икс ф + ( ЧАС ( Икс ( т ф ) , п ( т ф ) , θ ( т ф ) , т ф ) + час т ( Икс ( т ф ) , т ф ) ) дельта т ф "=" 0

Использование уравнений ( 5 ) мы можем вывести дифференциальные уравнения состояний и костатов:

(7) { Икс ˙ 1 "=" Икс 2 Икс ˙ 2 "=" η θ к ( Икс 1 ) Икс 2 2 Икс 3 г Икс ˙ 3 "=" θ п ˙ 1 "=" п 2 Икс 2 2 Икс 3 к Икс 1 п ˙ 2 "=" 1 п 1 + 2 п 2 к ( Икс 1 ) Икс 2 Икс 3 п ˙ 3 "=" п 2 Икс 3 2 ( η θ к ( Икс 1 ) Икс 2 2 )
и из 0 "=" ЧАС θ в ( 5 ) мы получаем:
(8) п 2 п 3 "=" Икс 3 η
Также из уравнения ( 6 ) эти окончательные условия будут найдены:
(9) { п 1 ( т ф ) "=" 0 п 2 ( т ф ) "=" 0
и:
(10) ЧАС ( т ф ) "=" 0

Теперь у нас есть семь неизвестных функций ( Икс 1 ( т ) , Икс 2 ( т ) , Икс 3 ( т ) , п 1 ( т ) , п 2 ( т ) , п 3 ( т ) , θ ( т ) ) с шестью дифференциальными уравнениями в ( 7 ) плюс одно уравнение связи в ( 8 ) . Для решения этих уравнений нужны достаточные граничные условия. Использование четырех граничных условий в уравнении ( 2 ) и два конечных условия в уравнении ( 9 ) все необходимые граничные условия будут известны.

Мы не использовали уравнение ( 10 ) еще. Это уравнение будет использоваться для нахождения терминального времени т ф .

Наконец, для решения краевой задачи в ( 7 ) и из-за нелинейности мы должны использовать численные методы, такие как метод стрельбы .

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

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

Очевидно, что цифры, которые я использовал, не являются невероятно реалистичными или разумными, но они дают первоначальное представление о том, что происходит. Цвет на графиках представляет высоту, полученную с помощью этой тяги.

До сих пор я рассматривал только постоянные коэффициенты лобового сопротивления. Сначала я попробовал k=0 (без перетаскивания)

к=0

Как и ожидалось, это дает наибольшую высоту, когда вы сжигаете топливо так быстро, как только можете. Это в основном просто тест, чтобы убедиться, что я не сделал ничего плохого.

Если мы выберем k=1, мы получим

к=1

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

Наконец, промежуточный случай k=0,1

к=0,1

Здесь существует баланс между сопротивлением воздуха и гравитацией, и предпочтение отдается промежуточному значению тяги.

Интересно (по крайней мере, для меня), что было невыгодно сбрасывать газ после запуска. Я подозреваю, что это может произойти, если рассматривается переменная k.

Вот мой код матлаба. Должен работать и в октаве.

function[x]=rocket_test(thrustparam)

g=9.81;

md=1000;
mf=1000;  
k=0.1;
nu=1000;

dt=0.001;

v=0;
x=0;
t=0;

c=thrustparam(1)*mf;
p_1=thrustparam(2)*mf;

count=1;

while v>=0                  %want to find max height keep going until you start descending.

    throttle=throttle_set(t, c, p_1);

    if mf-throttle*dt<0    %if you would burn more fuel than left burn all the fuel  left;
        throttle=mf/dt;
    end

m=md+mf;
Fd=k*v^2+m*g;
Ft=nu*throttle;

F=Ft-Fd;

a=F/m;

x=x+v*dt+0.5*a*dt^2;
v=v+a*dt;
mf=mf-throttle*dt;
t=t+dt;

%store(count, :)=[t, x, v, a, throttle, Fd, Ft, F, m];
%count=count+1;

end
end

function [throttle]=throttle_set(t, c, p_1)

throttle=c+p_1*t;

if throttle<0
    throttle=0;
end

end