Лунолёты, классические игры для ПМК (34, 61).

Пакеты игровых программ цикла «Путь к Земле», публиковавшихся в журнале «Техника-молодёжи». Программы рассчитаны на советские ПМК.

См.также "Еще один "Путь к Земле"

Программы: 
Модели и серии: 

Комментарии

Пересмотрел дежавюшки - что-то не нашел.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Когда эти програмки были написаны для Б3-34/МК-61, то они занимали всю память и приходилось в ходе разгона и торможения много раз вводить маневры малыми "порциями" вместо того, чтобы задавать его, если не целиком, то двумя - тремя командами. Предлагаю усовершенствовать кинематическую модель для движения с переменным ускорением. В класическом Лунолёте (например 3) если на маневр уходит топлива 10% от массы ракеты, то ошибка в определении скорости составляет 5.2%, а при 20% - превышает 12% относительно формулы Циолковского. Я немножко подправил математику (переписав программу под КАСИО fx-9750G Plus) после этого ошибка в первом случае составляет 0.18%, а во втором 0.8% по сравнению с формулой Циолковского. Напомню её: V = V0 + W*ln((Mk + Mt)/Mk),

Итак, математическая модель:
X = X0 + V0t + a0t2/2 + zt3/6
V = V0 + a0t + zt2/2
a = a0 + zt
z = (amax - a0)/t [м/с3] "скорость изменения ускорения"

Чтобы определить Z надо определить на участке максимальное ускорение (в конце маневра, когда топливо сожжено) и минимальное ускорение, когда топливо ещё на борту корабля. Ускорение a0 соответствует началу маневра, когда топливо ещё не израсходовано. Остальные формулы остались прежними (см. ТМ №6 за 1986 год).

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

Скажу, что взлететь на 4 км, а затем сесть и не разбиться в уточнённой модели сложнее (поскольку и классический Лунолёт и уточнённый ошибаются в сторону бОльших ускорений, но у уточнённого ошибка раз в тридцать меньше). Так в конце полёта (перед посадкой) топлива оказывается на 30...40 литров меньше, чем в классическом Лунолёте. Соответственно, если использовать квадратичную модель, то расход станет большим ещё на 1...2 литра.

Так что владельцы МК-152 могут попробовать переписать Лунолёты на уточнённую подпрограмму расчёта движения. Памяти теперь точно хватит.

Пример: Старт вверх с полными баками, 100 кг за 3 сек.
В обычном Лунолёт 3 высота = 89.878141 м, верт. скорость = 59.918761 м/с
В усовершенствованном высота = 88.751554 м, верт. скорость = 59.355467 м/с

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Действительно, КЭИ предупреждал, что расход топлива не должен превышать 10% от полной массы корабля. Раньше долгие манёвры действительно требовалось разбивать вручную. Но теперь можно закодировать программное разбитие, скажем, на цепочку манёвров по 1% от массы.

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

Преимущество программ Пухова в том, что был контакт с космонавтом (Глазковым), который служил гарантией, что придуманные модели соответствуют реальному положению дел. Наши корабли-то летают. Точнее — летали.

Конечно, можно попробовать получить (или узнать у кого-либо) точные формулы. Ведь и ускорение Кориолиса меняется с изменением скорости полёта, а в модели оно постоянно в пределах одного маневра. Тогда и сам орбитальный полёт не надо разбивать на интервалы минут по 10. Я понимаю, что моё уточнение не идеально, ибо полиномиальное приближение - это асимптотическое приближение к реальному процессу. Такое уточнение существенно улучшило модель на участках разгона и торможения, и оно легко реализуемо. Да и полиномиальная модель - наиболее простая в анализе. Можно, конечно, посидеть и вывести точные формулы, но для этого надо найти свободное время. А его, в отличие от юности, уже не так много. Да и захочет - ли наша небольшая компания писать новые игры для калькуляторов МК-152 и не только? Тут многое зависит от молодёжи (старшекласников и студентов) которой это интересно и есть на это время, а не от нас, отягощённых заботами о семье, детях, написанием диссертаций и зарабатыванием денег. Правда, именно молодежь, школьники и студенты 1-го и 2-го курсов, ешё только изучают эти методы. Поэтому аналитические модели им надо подсказывать и рассказывать. А с графическим интерфейсом они и без нас разберутся. Правда, если играешь в игру, которую сам создал, то испытываешь двойное удовольствие. Проверено на собственном опыте! ;-)

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Вот выдалось пол-часика свободного времени и я попробовал получить точные формулы реактивного движения на основе формулы Циолковского путём её интегрирования и дифференцирования. Проверки пока не производил, но вот что получилось:
X = X0 + V0t + W(M/m(1+mt/M)ln(1+mt/M)-t)
V = V0 + W ln(1+mt/M)
a = Wm/(M+mt)
, где
t - время в секундах;
X - координата;
V - скорость ракеты;
a - ускорение;
W - скорость газов реактивной струи;
M - масса ракеты в конце маневра;
m - удельный расход топлива (кг/сек).

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Проверил. Всё сходится. Теперь дело за реалзацией. Да, ещё ускорение Кориолиса надо бы подкорректировать, иначе на баллистической траектории, в близи первой космической, проблемы с точностью на больших интервалах времени.
При разгоне до 1-й космической в модели с точными формулами расход на 32 кг больше чем в классической модели и на 2 кг больше, чем в описанной в начале уточнённой с переменным ускорением.
При полёте по точным формулам надо в начале разогнаться до первой космической плюс 1 м/сек с положительной вертикальной около 5 м/с и за 1/6 витка забраться на 4 км и там выровнять скорости. Затем за 1/4 ... 1/6 витка до посадки надо уменьшить скорость на 1 м/с ниже первой космической и в месте посадки уже томозить на высоте около 1200 метров. Иначе топлива, чтобы затормозить хватает, а чтобы сесть с высоты 4 км - не хватает килограммов 40.
И главное - в этой модели можно задавать любой расход топлива. На полёт с выключенным двигателем рекомендованное ограничение (не более 1000 сек) осталось.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Не очень понял часть с ускорением. При переменной массе ускорение ведь будет меняться, разве не так?

Формулы нужны, т.к. переписывать Кон-Тики под МК-152 будем. И заново летать тоже будем. Вопрос лишь во времени. Т.к. без материальной поддержки всё делается медленно, то нужно, чтобы формулы были верными и не потерялись.

Сложность математической модели роли уже не играет, возможностей МК-152 достаточно. Хотя хотелось бы, чтобы это были точные аналитические формулы, а не итерационные алгоритмы.

И ещё. За основу, вероятно, лучше взять третий Лунолёт. Первые два это лишь его частные случаи, из-за недостаточной вычислительной мощности советских ПМК. А в нём две скорости — горизонтальная и вертикальная. Опять же, есть угол тяги.

И я именно модифицировал подпрограмму рачёта параметров маневрирования под 3-й "лунолёт", правда переписал его под CASIO CFX-9850G, поскольку МК-152 нет. Это именно точная аналитическая формула пройденного пути для ракеты, полученная интегрированием из формулы Циолковского для скорости ракеты. Ведь пройденный путь - это интеграл от скорости по времени, ускорение - это производная от скорости, а сила - это производная от ускорения или вторая производная от скорости по времени. Присутствующий в формуле для пути логарифм и отображает неравномерность ускорения во времени из-за потери массы ракетой.

Что касается выражения для ускорения, то оно верно для каждого взятого момента времени, но не для интервала ибо на интервале масса корабля меняется. Соответственно из алгоритмов лунолёта реактивное ускорение не суммируется с остальными (например ускорением Кориолиса, ускорением свободного падения, центробежным ускорением), а просто для пути вычисляется пройденный путь под действием реактивной силы, а затем он складывается с путём проиденным под действием других физических сил и инерции корабля.

X = X0 + V0t + at2/2 + W(((M+F)(1+mt/(M+F)ln(1+mt/(M+F))/m-t)*cos(fi)

так выглядит выражение для вычисления вертикальной координаты, где

a = V02/R - g(R2/r2)

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

Правда, если модель реактивного движения здесь точная, то другие составляющие остались неизменны, поэтому маневры с выключенным двигателем по прежнему не должны превышать 1000 сек. Можно и для них вычислить изменение ускорения - "Z", как описано в первом комментарии, но только приблизительно. Однако и это повысит точность рассчётов, думаю, раз в двадцать, что существенно уточнит вертикальное маневрироывание на орбите.

Я решил создать дочерную страницу, где выложил свой вариант Лунолёта-3 с оригинальным (от ТМ) и точным (от меня) алгоритмом рассчёта реактивного движения. Ссылку на дочерную страницу смотрите выше.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Если мы используем модель с переменным ускорением, то должны предусмотреть блок расчёта времени, за которое ускорение превысит максимально допустимое.

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

Кстати, я был бы благодарен блок-схемам. Т.к. с их помощью запрограммировать задачку под МК-152 намного удобнее, чем переводить с Касио. И ещё. Дочернюю страничку лучше вынести в раздел «Игры» (с обычными правилами указания модели ПМК), чтобы владельцам CASIO было проще найти «Лунолёт-3».

Особенность реактивного движения с постоянной тягой такова, что максимальным ускорение будет в конце маневра. Поэтому предусмотреть то можно, но зачем так сложно? Легче вычислить его в конце маневра и сравнить предельно допустимым. Я так и сделал в своей версии для Кэсио.
Центробежка и кориолис действительно меняются, но расчет оставлен тот же, что и в оригинальных программах Пухова. Можете сами попытаться получить аналитическое решение. Мне будет очень интересно его увидеть.
Блок-схема от Пуховской не отличается. Просто изменены сами формулы для вычислений, а как - Вы уже прочли в тексте. Да и не рисовал я отдельной блок-схемы для своей программы. Хотя понимаю, что язык МК-152 менее нагляден, чем у Кэсио.
Если модератор сочтет нужным перенести страничку с Лунолётом 3 для Кэсио в другое место - я на него не обижусь. Но мне показалось, что настоящее место вполне подходящее. Не думаю, что кроме меня найдётся человек, который будет переписывать лунолёты под CASIO CFX-9850G серии. За прошедшие пол года таких не нашлось ;)

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

> максимальным ускорение будет в конце маневра.

Согласен.

> Легче вычислить его в конце маневра и сравнить предельно допустимым.

И выключать двигатель уже после манёвра, пропорционально превышению и без учёта времени перегрузки. Эх, жаль здесь нет медиков-космонавтов. :(

basvic:
> Центробежка и кориолис действительно меняются, но расчет оставлен тот же,
> что и в оригинальных программах Пухова. Можете сами попытаться получить
> аналитическое решение. Мне будет очень интересно его увидеть.

Вряд ли Михаил Пухов стал бы мелочиться, получив в руки всю мощь МК-152.
Сам же я пока думаю над численным решением.

basvic:
> кроме меня найдётся человек, который будет переписывать лунолёты
> под CASIO CFX-9850G серии

И не думал о таком, забочусь об игроках. :-)

AtH wrote: > максимальным ускорение будет в конце маневра.

Согласен.

> Легче вычислить его в конце маневра и сравнить предельно допустимым.

И выключать двигатель уже после манёвра, пропорционально превышению и без учёта времени перегрузки. Эх, жаль здесь нет медиков-космонавтов. :(

Выключается не двигатель, а пилот! На некоторое время. Поскольку ускорение, найденное по формуле Wm/M, будет средним ускорением, то превышение максимального над допустимым будет намного выше. Тогда и время беспилотного полёта выше. С другой стороны, при достижении предела, если он не в самом конце маневра, пилот уже в ауте, а двигатели ещё работают, повышая ускорение и оставляя пилота в коматозе. Поэтому отсчитывать время неуправляемого полёта разумно, так или иначе, от момента окончания маневра, поскольку тогда ускорение станет постоянным и организм начнёт к нему приспосабливаться и восстанавливать работоспособность.

http://community.livejournal.com/lunolets
Поа там классические Лунолеты 1 и 2, последний в варианте 2D.

Было бы интересно переложить на мобильный Питон с усовершенствованным 3-им

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

И опять формула Циолковского для сферического коня в вакууме? Или надо делать интегрирование уравнения Мещерского с учетом силы тяжести и ее зависимости от массы или это оченно напоминает работы самого Циолковского.

basvic wrote: Вот выдалось пол-часика свободного времени и я попробовал получить точные формулы реактивного движения на основе формулы Циолковского путём её интегрирования и дифференцирования. Проверки пока не производил, но вот что получилось:
V = V0 + W ln(1+mt/M)
a = Wm/(M+mt)
, где
t - время в секундах;
V - скорость ракеты;
a - ускорение;
W - скорость газов реактивной струи;
M - масса ракеты в конце маневра;
m - удельный расход топлива (кг/сек).

M(t)=M0-mt
u(t)=WlnM0/(M0-mt)
du/dt=a(t)=W(1/((M0/(M0-mt))((-M0)(-m)/(M0-mt)2)=W((M0-mt)M0m/(M0(M0-mt)2)=Wm/(M0-mt)
Где M0 - масса ракеты в начале маневра.
Поскольку у вас конечная масса ракеты равна M=M0-mt, то a(t)=Wm/M
У вас ошибка!

Depor wrote:

basvic wrote: Вот выдалось пол-часика свободного времени и я попробовал получить точные формулы реактивного движения на основе формулы Циолковского путём её интегрирования и дифференцирования. Проверки пока не производил, но вот что получилось:
V = V0 + W ln(1+mt/M)
a = Wm/(M+mt)
, где
t - время в секундах;
V - скорость ракеты;
a - ускорение;
W - скорость газов реактивной струи;
M - масса ракеты в конце маневра;
m - удельный расход топлива (кг/сек).

M(t)=M0-mt
u(t)=WlnM0/(M0-mt)
du/dt=a(t)du=a(t)dt=W(1/((M0/(M0-mt))((-M0)(-m)/(M0-mt)2)=W((M0-mt)M0m/(M0(M0-mt)2)=Wm/(M0-mt)
Где M0 - масса ракеты в начале маневра.
Поскольку у вас конечная масса ракеты равна M=M0-mt, то a(t)=Wm/M
У вас ошибка!

А ваша ошибка точно случайная? Вот теперь вы видите, что формула из Лунолета 1 в ТМ абсолютно совпадает с формулой ускорения? du=adtТолько там W=V, M0=MR+mT (где MR - масса корабля без топлива, а mT - масса топлива на начало маневра), M=(MR+mT-q), где q=mt. Поэтому говорить, что формула в ТМ не точна - на каком основании?
Кстати - из этой формулы очень просто оценить возможность полета при данных параметрах - расходе топлива в секунду, массе корабля и предельном ускорении. Если расчетное ускорение выше - гудбай. Ибо оно, а не скорость, вызывает перегрузку организма. И это более ценная информация, чем по формуле Циолковского. Там скорость, безотносительно к чему-либо, а тут - жестко ограниченное физиологическими данными ускорение. Ибо при 12G уже никто не летит, а летит что-то, но не пилот.

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

В современном н/ф цикле «Экспансия» пилоты выдерживают большие перегрузки за счёт «сока» — кресла-амортизаторы накачивают экипаж медикаментами. 10-12g кратковременны, их долго не выдержать, но 5-7g вполне рабочее ускорение, хотя и с последствиями для экипажа. Идут на это при крайней необходимости, например военной или для выживания, спасения жизни. Также есть предложения по гибернации с остановкой дыхания и полной заменой крови/воздуха на спецжидкости, позволяющие в том числе выдерживать перегрузки.

basvic wrote: Конечно, можно попробовать получить (или узнать у кого-либо) точные формулы.

Конечно можно. Только кто их выводил? Сложность расчётов возрастет на порядок, а пользы ноль. Да и никто никогда реально не считал скорость по формуле Циолковского - она пригодна только для приблизительной оценки запаса топлива. По уравнению Мещерского тоже считают приближённо. Впрочем формула в Технике Молодежи и есть численное приближенное решение уравнения Мещерского. Наверное слышали такие объявления, при запуске ракеты со спутником, "сегодня... была проведена коррекция траектории (орбиты)"? Потому что точных расчётов нет и не будет - не возможно. Было бы это так легко - за сто лет её бы давно вывели. Но в этом нет практической надобности. Никто не считает необходимую скорость движения, например от Москвы от до Питера, с учётом состояния атмосферы, разности высот и прочих факторов, а прикидочно по простым формулам и делают коррекцию ив процессе движения. Для ракет делают абсолютно аналогично. Но в симуляторе не возможно сравнить расчетное положение и фактическое, поэтому сказать какая формула более точна, ваша или от ТМ никто не сможет.

basvic wrote: Тогда и сам орбитальный полёт не надо разбивать на интервалы минут по 10.

С чего бы это? Как по Мещерскому, так и у Циолковского ( интеграл от Мещерского), формулы выведены исходя из ∆t стремящегося к нулю! Поэтому при повышении интервала времени погрешность определения скорости или ускорения растёт катастрофически.

basvic wrote: Я понимаю, что моё уточнение не идеально, ибо полиномиальное приближение - это асимптотическое приближение к реальному процессу. Такое уточнение существенно улучшило модель на участках разгона и торможения, и оно легко реализуемо.

basvic wrote: Можно, конечно, посидеть и вывести точные формулы, но для этого надо найти свободное время.

Попробуйте - сомневаюсь, что найдётся много желающих учитывать силу притяжения Луны, силу притяжения других тел, давления солнечного света и многое-многое. Иначе рассчитанная скорость все равно будет отличаться от практической. Именно от практической, а не от расчетной по другой теоретической и с условными ограничениями. Какой смысл тогда в нагромождении формул? Приведенная в ТМ модель ничем не хуже, чем ваша. Сомневаюсь, что погрешность рассчитанной по ней скорости, от реальной, существенно отличается от погрешности рассчитанной по вашей формуле, в пределах практического применения. Но затраты на расчёты по ней значительно меньше.
Признаю - в ТМ формула не верная. Из общей массы на начало маневра не вычитается масса расхода топлива. Хотя не понятно, почему ее вычитают позже, тратя лишнюю команду на вызов запаса топлива из регистра и получая неточную формулу? Перестановка команд ни на что в программе не влияет, кроме точности расчетов.

AtH wrote: Действительно, КЭИ предупреждал, что расход топлива не должен превышать 10% от полной массы корабля

И это непосредственно следует из уравнения Мещерского. Поскольку в нем отбрасывают составляющую du*dm как бесконечно малую величину, но только при dm и du стремящихся к нулю. При больших промежутаках времени и большом q это условие не соблюдается! Равно оно не будет соблюдается и в формуле Циолковского, поскольку она интеграл от уравнения Мещерского. Так что замена одного на другое ничего не даст, кроме увеличения времени расчёта и сложности программы.

Теоретически, на калькуляторе, можно сжечь 400 литров керосина даже за время равное 0.1 секунды. Калькулятору все равно. Практически я видел, как сжигают большие объёмы и за меньшее время. Шаттл "Челленджер" в 86, Р-16 в 60-том на Байконуре. Но никто уже никуда не летел! Некому и не на чем было. Ограничение в 9% процентов разумно и с точки зрения реальной работы двигателя. А то Циолковский считал и варианты сжигания всего топлива сразу на земле, т. е. все топливо за доли секунд, - скорость вышла о-го-го какая. Но ему можно было, он термодинамику абсолютно не знал и не понимал, а мы то жить хотим? При малых расходах и при малых промежутках разница в расчётах по формуле Циолковского и уравнению Мещерского не существенны. Но даже если мы будем жечь топливо во сферическом коне в вакууме, в неограниченых количествах и за мгновения, то тогда dmdu уже надо учитывать, как при расчётах по уравнению Мещерского, так и по формуле Циолковского - например, 100 литров при весе в 2650 это уже совсем не стремится к нулю, а почти 4%! Вообще формула Циолковского говорит только о максимально возможной скорости и больше ноль информации. Уравнение Мещёрского сразу режет мечты достичь космических скоростей на земле или врубить и лечь спать без автопилота - dm и dt должно стремиться к нулю. Т. е., должны сидеть, следить и постоянно дергать рычаги. Для любителей поспать - добро пожаловать в "Космофлот" - у них комфортабельные кресла и прохладительные напитки.

Кстати, «скорость изменения ускорения» (переменная z) называется рывком. Используется, например, при расчёте лифтов.

Также в «Лунолётах» был довольно примитивно сделан посадочный блок. Если манёвр при падении достаточно долгий, в результате корабль может оказаться под поверхностью планеты. Там затормозить, разогнаться и вылететь обратно.

Если всё это произойдёт в течении заданного времени, высота вылетевшего корабля будет положительна. «Лунолёт» не заметит подвоха и будет строить пилоту красивые глазки, хотя де факто корабль уже давно разбился о поверхность.

Лифты никогда не рассчитывал и не знал, что это называется рывком. Теперь буду знать.

Ну, в принципе, задача отскакивания от поверхности Луны решаемая. Можно взять производную высоты по времени и если внутри интервала она обратится в ноль (есть вещественный корень уравнения производной), то это и будет момент, когда корабль в верхней или нижней точке траектории. Вычислив координату в этот момент мы избежим отскакивания

Если уравнение движения - степенной многочлен, то задача решается легко. А если присутствует логарифмическая функция (в точной модели реактивного движения), то сложнее взять производную, а затем ещё решить аналитически уравнение производной.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Примерно так. Если скорость меняет знак, численно найти её корень. Сравнить высоту в это время с нулём и вытащить корабль на поверхность обычным методом.

AtH wrote: Примерно так. Если скорость меняет знак, численно найти её корень. Сравнить высоту в это время с нулём и вытащить корабль на поверхность обычным методом.

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

basvic wrote: В класическом Лунолёте (например 3) если на маневр уходит топлива 10% от массы ракеты, то ошибка в определении скорости составляет 5.2%, а при 20% - превышает 12% относительно формулы Циолковского.

Формула Циолковского никак не учитывает силу притяжения Луны и потому точность ее весьма и весьма сомнительна. Ввод в фомулу Мещерского силы тяжести Луны чрезвычайно усложнит ее интегрирование. Поэтому ценность скорости рассчитанной по формуле Циолковского для сферического коня в вакууме - весьма и весьма сомнительная. Как говорят линуксоиды - не усложняй!
А собственно нафига ее интегрировать? Есть ускорение, а можно и рывок высчитать и от него и начальных значений плясать. Зато никаких логарифмов - одних из самых неточных операций в калькуляторах.

В ТМ считает по формуле Мещерского - M(du/dt)=v(dm/dt), где du/dt - производная скорости или ускорение =а; dm/dt - секундный расход топлива =q/t После преобразования - Ma=v(q/t), что абсолютно идентично к программе. Циолковского - интеграл от Мещерского. Ошибка возникает именно в формуле Циолковского, а не в той, что в программе. и причина тому одна - низкая точность расчета логарифма калькулятором. Кстати, код использованный в ТМ тоже не лучший, потому что после определения секундного расхода топлива (q/t) его делят на сумму масс (М+m), а это величины, которые отличаются на три порядка! И потом полученную величину, а она, как правило, меньше 0, 01 умножают на 3660. Правильно, с учетом минимизации погрешностей, считать так - q*v/(t*(M+m)) - расход топлива умножаем на скорость потока газов и произведение делим на произведение времени на сумму масс ракеты и топлива. Поскольку делимое и делитель цифры одного порядка, то точность будет заметно выше. Напрмер, для начального условия в журнале для Лунолета 1 (масса ракеты - 2250, скорость потока газа - 3660, масса топлива - 400, расход топлива - 65, время - 3) по формуле в журнале и по формуле приведенной мной разница составит 1*10-6.

Произвёл расчёт по Циолковскому (первые варианты) и по Мещерскому.
86,03292326 - TI-59
86,03292326 - HP-67
86,03292326 - CASIO FX-603P
86,032677 - B3-34
разница (86,03292326-86,032677)*100/86,03292326=2.86*10-4%
84,91358491 - CASII FX-603P
84,91358491 - HP-67
84,91358491 - TI-59
84,913581 - B3-34
разница
(84,91358491-84,913581)*100/84,91358491=4.6*10-6%
по формуле (q*v)/(t*(M+m))
84,913584 - B3-34
Разница
1*10-6%
Как видно, точность расчёта по Циолковскому явно ниже по причине плохого алгоритма вычисления логарифма, что характерно, впрочем, и для конкурентов, но в меньшей степени.

basvic wrote: Когда эти програмки были написаны для Б3-34/МК-61, то они занимали всю память и приходилось в ходе разгона и торможения много раз вводить маневры малыми "порциями" вместо того, чтобы задавать его, если не целиком, то двумя - тремя командами. Предлагаю усовершенствовать кинематическую модель для движения с переменным ускорением. В класическом Лунолёте (например 3) если на маневр уходит топлива 10% от массы ракеты, то ошибка в определении скорости составляет 5.2%, а при 20% - превышает 12% относительно формулы Циолковского. Я немножко подправил математику (переписав программу под КАСИО fx-9750G Plus) после этого ошибка в первом случае составляет 0.18%, а во втором 0.8% по сравнению с формулой Циолковского. Напомню её: V = V0 + W*ln((Mk + Mt)/Mk),

Итак, математическая модель:
X = X0 + V0t + a0t2/2 + zt3/6
V = V0 + a0t + zt2/2
a = a0 + zt
z = (amax - a0)/t [м/с3] "скорость изменения ускорения"

Чтобы определить Z надо определить на участке максимальное ускорение (в конце маневра, когда топливо сожжено) и минимальное ускорение, когда топливо ещё на борту корабля. Ускорение a0 соответствует началу маневра, когда топливо ещё не израсходовано. Остальные формулы остались прежними (см. ТМ №6 за 1986 год).

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

z = (amax - a0)/t [м/с3] "скорость изменения ускорения" - зачем?? Она определяется легко из выражения j(t)=da/dt или, подставляя значение, da/dt=(Wm/M)'=(Wm/(M0-mt))'=Wm2/(M0-mt)2=Wm2/M2 или j=a2/W. В Лунолете из "ТМ" добавиться всего ничего - фрагмент с 81 по 84 команду вставить вместо 53 команды. После команды 55 вставить x2 Между 57 и 58 командами - ИП2 × ИП3 +, выбросить команды 77 и 78 - летать без скафандра не реально на этом типе лунолета, так что просто счетчик времени нам не нужен. А если время не важно - можно ввести огромный запас времени. У нас две лишних команды, но освободился один регистр П0. Меняем в программе все ИПВ и ПВ на ИПД и ПД, а ИПД и ПД - на ИП0 и П0. В регистр ПВ вносим адрес условного перехода по адресу 43, но теперь он будет 42. Команды 10-11 и 48-49 заменяем на Кx≠0В. В регистр С вносим запас кислорода для дыхания. Он для нас имеет малое значение, поскольку проверка на исчерпание кислорода не проводится. При желании можно воткнуть и ее - надо всего лишь проверить условие, что T≤0 и вывести аварийный сигнал. Для этого надо одну команду - Fln. При нуле или отрицательном числе получаем ЕГГОГ, что будет сигналом окончания кислорода и нашей смерти. Игра закончена. Место для нее можно отобрать у команды 00.ИПД, поскольку она просто добавлена для удобства работы с программой, но если обязать перед запуском программы очищать регистр Х (Сх В/О С/П) то она не нужна, а вставить после сохранения остатка ( в оригинале - после команды 80.ПС). Если поизвращаться, то можно еще одну команду сэкономить. Перекинув блок с 09 по 32 адрес в конец программы и сменить адрес условного перехода на соответствующий. Тогда вместо адреса перехода к подпрограмме в команде 08 можно записать команду находящуюся в оригинале по номеру 33, но сменив местами регистр ПД и П0 получаем ИПО, что аналогично (для БЗ-34) ИПЕ. ИПЕ передаст подпрограмме адрес 75, который будет соответствовать оригинальному 90. Но куда ее деть? Разве что для расчета точного времени приземления.

Я взял за основу алгоритм Лунолет-2, выкинул из него горизонтальную составляющую скорости (делаю скрипт на Питоне для телефонов Серии60).

Шаг "(Команда 25 ПП 5 СП. Результат: высота 8984 м, скорость два с половиной метра в секунду, снова со знаком плюс...)", страница 55, справа.
У меня скорость 2.2 м/с. И далее разница нарастает.

У меня просьба к владельцам мк-152. Нельзя повторить полет из "Истинной правды" и выложить сюда листинг результатов?

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Пожалуйста.
МК-152 версия ПО 1.12 :)

0; 0
65 ПП 3 С/П
88888888 (Перегрузка) С/П
169,164456134; 84,1124490566
0 ПП 2 С/П
334,149354247; 80,8724490566
65 ПП 3 С/П
88888888 (Перегрузка) С/П
915,81079149; 166,023285033
0 ПП 120 С/П
9174,60499545; -28,376714967
25 ПП 2 С/П
9150,92108933; 4,69280884252
10 ПП 10 ПП /-/ С/П
9043,50248437; -26,1765298348
25 ПП 5 С/П
8984,42214908; 2,54439571852
0 ПП 90 С/П
2652,41776375; -143,255604281
100 ПП 3 С/П
88888888 (Перегрузка) С/П
2122,6191385; -31,9999798908
10 ПП 20 С/П
1313,70428645; -48,8915053145
10 ПП 15 С/П
514,890217371; -57,6170372294
35 ПП 1,5 С/П
88888888 (Перегрузка) С/П
389,788306777; -16,7499244088
22 ПП 22 С/П
13,510273471; -17,4571695281
22 ПП 0,7 С/П
88888888 (Перегрузка) С/П
7,05175030044; -17,2686149571
22 ПП 0,7 С/П
88888888 (Нет топлива) С/П
0 -3,6111959248

Остаток времени RC=3250,31340915 (349,68659085 секунд или примерно 5 мин 49 сек полета)
Все сходится.

Вот лог-файл:
Start Lunolet-1
free_g: 1.62
ship_mass: 2250.0
jet_speed: 3660.0
max_g: 29.43
init_alt: 0.0
init_speed: 0.0
init_fuel: 400.0
init_oxygen: 3600.0
------------ Start ------------
Vysota: 0.0 , Skorost: 0.0
= Manevr: 65.0 (kg), 3.0 (sek)
Peregruzka!
Vysota: 127.370377358491 , Skorost: 84.9135849056604
Vysota: 169.164456133499 , Skorost: 84.1124490566038
= Manevr: 0.0 (kg), 2.0 (sek)
Vysota: 334.149354246707 , Skorost: 80.8724490566038
= Manevr: 65.0 (kg), 3.0 (sek)
Peregruzka!
Vysota: 707.523123079961 , Skorost: 168.043396832232
Vysota: 915.810791486102 , Skorost: 166.023285033393
= Manevr: 0.0 (kg), 120.0 (sek)
Vysota: 9174.60499549325 , Skorost: -28.3767149666071
= Manevr: 25.0 (kg), 2.0 (sek)
Vysota: 9150.92108936956 , Skorost: 4.69280884291674
= Manevr: 10.0 (kg), -10.0 (sek)
Vysota: 9043.50248441196 , Skorost: -26.176529834438
= Manevr: 25.0 (kg), 5.0 (sek)
Vysota: 8983.68720050923 , Skorost: 2.25041627334646
= Manevr: 0.0 (kg), 90.0 (sek)
Vysota: 2625.22466511041 , Skorost: -143.549583726654
= Manevr: 100.0 (kg), 3.0 (sek)
Peregruzka!
Vysota: 2408.65688167238 , Skorost: -0.828938565363217
Vysota: 2075.88985989811 , Skorost: -32.84588695246
Stop Lunolet-1

Вероятно, разница из-за того, что я не использовал x^2, а также из-за квадратного корня?

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Место Вы локализовали, расхождения начинаются сразу после команды "25 ПП 5". Различия до этого не существенны. Посмотрите по какой ветке идет здесь алгоритм.

Действие команды x^2 в МК идентично x*x или x↑* в стековой архитектуре, - если не считать того, что стек при этом не используется. Корень тоже вроде столь внезапных ошибок давать не должен.

Я мог бы прогнать с этого места по шагам и переписать числа из стека, но вот поможет ли это Вам?

А до этого был маневр с реверсом тяги. И не тут ли "собака порылась"? :) Я делаю так: если время при вводе маневра отрицательное, то, соответственно, секундный расход и реактивное ускорение получаются также отрицательными. Далее знак времени меняется на положительный для остальных расчетов.

Хех, похоже, я забыл изменить знак секундного расхода - получается, что я прибавил топлива, а не потратил :) Сейчас слетаю еще раз

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

= Manevr: 10.0 (kg), -10.0 (sek)
Vysota: 9043.50248441196 ,Skorost: -26.176529834438
= Manevr: 25.0 (kg), 5.0 (sek)
Vysota: 8984.42214912307 ,Skorost: 2.54439571888195
= Manevr: 0.0 (kg), 90.0 (sek)
Vysota: 2652.41776382244 ,Skorost: -143.255604281118
= Manevr: 100.0 (kg), 3.0 (sek)
Peregruzka!
Vysota: 2438.53168268641 ,Skorost: 0.664883523760011
Vysota: 2122.61913857647 ,Skorost: -31.9999798908742
Stop Lunolet-1

Действительно, проблема была в отрицательном секундном расходе. Спасибо за помощь в отладке! :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Пожалуйста. Но, собственно, какая тут помощь, - ошибку Вы сами нашли.

Эх, такой бы двигатель на автомобиль поставить: едешь задним ходом и горючее в баке добавляется. :)

ускорение будет равно максимально допустимому, то будет деление на 0. На практике это маловероятно

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/