from math import *
test = True
G= 6.67e-11 #Постоянная
#Луна
M= 7.3477e22
R= 1737e3
def integrate_kolenka( m1, h1, v1, dm, t1, U, *, N= 100000 , M= 7.3477e22 , R= 1737e3 ) :
# Параметры Луны по умолчанию вобью
#dm - масса топлив
#t1 - время сгорания
#U - скорость истечения газов
h= h1
v= v1
for c in range ( N) :
t= t1*c/N
dt= t1/N
ev= U*dm/( m1*t1-t*dm) -G*M/( R+h) **2
eh= v
v+= ev*dt
h+= eh*dt
#if (c==0):
# print(f'{ev=} {dt=}')
if h< 0 : #Если ракета не взлетает
h= 0
if ( v> 1 ) :#Если слишком жёсткое падение
print ( f"Ракета упала со скоростью {abs(v):.2f}" )
v= max ( v, 0 )
v2= v
h2= h
return h2, v2, m1-dm
if test :
print ( "-----------------------------" )
#Проверим интегратор в невесомости с помощью формулы Цилковского про дельту
m= 10000
v1= 0
h1= 0
h2, v2, m2= integrate_kolenka( m, h1, v1, dm= 7000 , t1= 20 , U= 800 , M= 0 )
v_c2= 800 *log( 10000 /3000 )
print ( f'{h2=:.1f} {v2=:.3f} {m2=:.1f} Цикловкский: v={v_c2:.3f}' )
h3, v3, m3= integrate_kolenka( m2, h2, v2, dm= 2000 , t1= 20 , U= 1200 , M= 0 )
v_c3= v_c2+1200 *log( 3000 /1000 )
print ( f'{h3=:.1f} {v3=:.3f} {m3=:.1f} Цикловкский: v={v_c3:.3f}' )
# Выводит это:
# h2=7744.0 v2=963.172 m2=3000.0 Цикловкский: v=963.178
# h3=37824.0 v3=2281.498 m3=1000.0 Цикловкский: v=2281.513
# Что меня вполне устраивает
def max_h( h, v) :
e= v**2 /2 #Энергия кинетическая
e_h_max= G*M*( 1 /R)
if e> e_h_max:
# 2*e=v**2
v= ( ( e-e_h_max) *2 ) **0.5
return f"Улетит на бесконечность со скорость {v:.1f}"
else :
if ( v) :
h_max= ( R+h) /( ( 2 *G*M/( ( R+h) *v**2 ) ) -1 )
return f"Улетит на высоту {h_max:.1f}"
else :
return f"Будет падать с высоты {h:.1f}"
if test :
print ( "-----------------------------" )
#Проверю формулу
for v in [ 1 , 10 , 100 , 1000 , 2350 , 2400 , 6000 ] :
#2380 - вторая космическая на луне
g= M*G/R/R #Ускорение свободного падения на луне
h_max= v*v/( 2 *g) #Высота при постоянно g
print ( f'{v=:.1f} {max_h(0,v)} по формуле: {h_max:.1f}' )
print ( f'Остаток скорости при 6000: {(6000**2-2380**2)**0.5:.1f}' )
""" Вывод
v=1.0 Улетит на высоту 0.3 по формуле: 0.3
v=10.0 Улетит на высоту 30.8 по формуле: 30.8
v=100.0 Улетит на высоту 3083.6 по формуле: 3078.2
v=1000.0 Улетит на высоту 374114.3 по формуле: 307816.9
v=2350.0 Улетит на высоту 79629015.7 по формуле: 1699918.6
v=2400.0 Улетит на бесконечность со скорость 342.1 по формуле: 1773025.1
v=6000.0 Улетит на бесконечность со скорость 5509.7 по формуле: 11081406.6
Остаток скорости при 6000: 5507.8"""
# Вроде верно, на низких высотах совпадает, при приближении ко второй космической
# высота сильно отклоняется, а потом уходит на бесконечность
if test :
print ( "-----------------------------" )
#Проверим мою гипотезу, что время сгорания существенно для итогового результата
m= 10000
v1= 0
h1= 0
for t in [ 1 , 10 , 100 , 980 , 1000 , 1020 , 10000 ] :
h2, v2, m2= integrate_kolenka( m, h1, v1, dm= 7000 , t1= t, U= 800 )
print ( f'Сгорание за {t:5} секунд: {h2= :7.1f} {v2= :7.3f} {m2= :7.1f} {max_h(h2,v2)}' )
""" У меня выводит такое
Сгорание за 1 секунд: h2= 386.4 v2= 961.548 m2= 3000.0 Улетит на высоту 340533.2
Сгорание за 10 секунд: h2= 3790.9 v2= 946.950 m2= 3000.0 Улетит на высоту 329742.9
Сгорание за 100 секунд: h2= 30637.5 v2= 802.396 m2= 3000.0 Улетит на высоту 232197.6
Сгорание за 980 секунд: h2= 226.5 v2= 9.633 m2= 3000.0 Улетит на высоту 28.6
Сгорание за 1000 секунд: h2= 153.8 v2= 7.391 m2= 3000.0 Улетит на высоту 16.8
Сгорание за 1020 секунд: h2= 98.9 v2= 5.470 m2= 3000.0 Улетит на высоту 9.2
Сгорание за 10000 секунд: h2= 0.0 v2= 0.000 m2= 3000.0 Будет падать с высоты 0.0"""
#При сгорании за 1-10 секунд ничего не меняется, при 100 скорость меньше, но успевает набраться высота
#При сгорании за 1000 секунд едва отрывается (это случайно получилось,
# что при таких параметрах оно едва-едва отрывается)
#При сгорании за 10000 секунд не взлетает
ZnJvbSBtYXRoIGltcG9ydCAqCgp0ZXN0PVRydWUKCkc9Ni42N2UtMTEgI9Cf0L7RgdGC0L7Rj9C90L3QsNGPCiPQm9GD0L3QsApNPTcuMzQ3N2UyMgpSPTE3MzdlMwpkZWYgaW50ZWdyYXRlX2tvbGVua2EobTEsaDEsdjEsZG0sdDEsVSwqLE49MTAwMDAwLE09Ny4zNDc3ZTIyLFI9MTczN2UzKToKICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQn9Cw0YDQsNC80LXRgtGA0Ysg0JvRg9C90Ysg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LLQvtCx0YzRjgogICAgI2RtIC0g0LzQsNGB0YHQsCDRgtC+0L/Qu9C40LIKICAgICN0MSAtINCy0YDQtdC80Y8g0YHQs9C+0YDQsNC90LjRjwogICAgI1UgLSDRgdC60L7RgNC+0YHRgtGMINC40YHRgtC10YfQtdC90LjRjyDQs9Cw0LfQvtCyCgogICAgaD1oMQogICAgdj12MQogICAgZm9yIGMgaW4gcmFuZ2UoTik6CiAgICAgICAgdD10MSpjL04KICAgICAgICBkdD10MS9OCiAgICAgICAgZXY9VSpkbS8obTEqdDEtdCpkbSktRypNLyhSK2gpKioyCiAgICAgICAgZWg9dgogICAgICAgIHYrPWV2KmR0CiAgICAgICAgaCs9ZWgqZHQKICAgICAgICAjaWYgKGM9PTApOgogICAgICAgICMgICAgcHJpbnQoZid7ZXY9fSB7ZHQ9fScpCiAgICAgICAgaWYgaDwwOiAj0JXRgdC70Lgg0YDQsNC60LXRgtCwINC90LUg0LLQt9C70LXRgtCw0LXRggogICAgICAgICAgICBoPTAKICAgICAgICAgICAgaWYgKHY+MSk6I9CV0YHQu9C4INGB0LvQuNGI0LrQvtC8INC20ZHRgdGC0LrQvtC1INC/0LDQtNC10L3QuNC1CiAgICAgICAgICAgICAgICBwcmludChmItCg0LDQutC10YLQsCDRg9C/0LDQu9CwINGB0L4g0YHQutC+0YDQvtGB0YLRjNGOIHthYnModik6LjJmfSIpCiAgICAgICAgICAgIHY9bWF4KHYsMCkKICAgIHYyPXYKICAgIGgyPWgKICAgIHJldHVybiBoMix2MixtMS1kbQoKaWYgdGVzdDoKICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCiAgICAj0J/RgNC+0LLQtdGA0LjQvCDQuNC90YLQtdCz0YDQsNGC0L7RgCDQsiDQvdC10LLQtdGB0L7QvNC+0YHRgtC4INGBINC/0L7QvNC+0YnRjNGOINGE0L7RgNC80YPQu9GLINCm0LjQu9C60L7QstGB0LrQvtCz0L4g0L/RgNC+INC00LXQu9GM0YLRgwogICAgbT0xMDAwMAogICAgdjE9MAogICAgaDE9MAogICAgaDIsdjIsbTI9aW50ZWdyYXRlX2tvbGVua2EobSxoMSx2MSxkbT03MDAwLHQxPTIwLFU9ODAwLE09MCkKICAgIHZfYzI9ODAwKmxvZygxMDAwMC8zMDAwKQogICAgcHJpbnQoZid7aDI9Oi4xZn0ge3YyPTouM2Z9IHttMj06LjFmfSAgICAg0KbQuNC60LvQvtCy0LrRgdC60LjQuTogdj17dl9jMjouM2Z9JykKICAgIAogICAgaDMsdjMsbTM9aW50ZWdyYXRlX2tvbGVua2EobTIsaDIsdjIsZG09MjAwMCx0MT0yMCxVPTEyMDAsTT0wKQogICAgdl9jMz12X2MyKzEyMDAqbG9nKDMwMDAvMTAwMCkKICAgIHByaW50KGYne2gzPTouMWZ9IHt2Mz06LjNmfSB7bTM9Oi4xZn0gICAgINCm0LjQutC70L7QstC60YHQutC40Lk6IHY9e3ZfYzM6LjNmfScpCiAgICAKICAgICMg0JLRi9Cy0L7QtNC40YIg0Y3RgtC+OgogICAgIyBoMj03NzQ0LjAgdjI9OTYzLjE3MiBtMj0zMDAwLjAgICAgINCm0LjQutC70L7QstC60YHQutC40Lk6IHY9OTYzLjE3OAogICAgIyBoMz0zNzgyNC4wIHYzPTIyODEuNDk4IG0zPTEwMDAuMCAgICAg0KbQuNC60LvQvtCy0LrRgdC60LjQuTogdj0yMjgxLjUxMwogICAgIyDQp9GC0L4g0LzQtdC90Y8g0LLQv9C+0LvQvdC1INGD0YHRgtGA0LDQuNCy0LDQtdGCCgoKCgoKCgpkZWYgbWF4X2goaCx2KToKICAgIGU9dioqMi8yICPQrdC90LXRgNCz0LjRjyDQutC40L3QtdGC0LjRh9C10YHQutCw0Y8KICAgIGVfaF9tYXg9IEcqTSooMS9SKQogICAgaWYgZT5lX2hfbWF4OgogICAgICAgICMgMiplPXYqKjIKICAgICAgICB2PSgoZS1lX2hfbWF4KSoyKSoqMC41CiAgICAgICAgcmV0dXJuIGYi0KPQu9C10YLQuNGCINC90LAg0LHQtdGB0LrQvtC90LXRh9C90L7RgdGC0Ywg0YHQviDRgdC60L7RgNC+0YHRgtGMIHt2Oi4xZn0iCiAgICBlbHNlOgogICAgICAgIGlmICh2KToKICAgICAgICAgICAgaF9tYXg9KFIraCkvKCgyKkcqTS8oKFIraCkqdioqMikpLTEpCiAgICAgICAgICAgIHJldHVybiBmItCj0LvQtdGC0LjRgiDQvdCwINCy0YvRgdC+0YLRgyB7aF9tYXg6LjFmfSIKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gZiLQkdGD0LTQtdGCINC/0LDQtNCw0YLRjCDRgSDQstGL0YHQvtGC0Ysge2g6LjFmfSIKCgppZiB0ZXN0OgogICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIikKICAgICPQn9GA0L7QstC10YDRjiDRhNC+0YDQvNGD0LvRgwogICAgZm9yIHYgaW4gWzEsMTAsMTAwLDEwMDAsMjM1MCwyNDAwLDYwMDBdOgogICAgICAgICMyMzgwIC0g0LLRgtC+0YDQsNGPINC60L7RgdC80LjRh9C10YHQutCw0Y8g0L3QsCDQu9GD0L3QtQogICAgICAgIGc9TSpHL1IvUiAj0KPRgdC60L7RgNC10L3QuNC1INGB0LLQvtCx0L7QtNC90L7Qs9C+INC/0LDQtNC10L3QuNGPINC90LAg0LvRg9C90LUKICAgICAgICBoX21heD12KnYvKDIqZykgI9CS0YvRgdC+0YLQsCDQv9GA0Lgg0L/QvtGB0YLQvtGP0L3QvdC+IGcKICAgICAgICBwcmludChmJ3t2PTouMWZ9ICAge21heF9oKDAsdil9ICAg0L/QviDRhNC+0YDQvNGD0LvQtToge2hfbWF4Oi4xZn0nKQogICAgcHJpbnQoZifQntGB0YLQsNGC0L7QuiDRgdC60L7RgNC+0YHRgtC4INC/0YDQuCA2MDAwOiAgeyg2MDAwKioyLTIzODAqKjIpKiowLjU6LjFmfScpCiAgICAKICAgICIiIiAgINCS0YvQstC+0LQKICAgIHY9MS4wICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDAuMyAgINC/0L4g0YTQvtGA0LzRg9C70LU6IDAuMwogICAgdj0xMC4wICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDMwLjggICDQv9C+INGE0L7RgNC80YPQu9C1OiAzMC44CiAgICB2PTEwMC4wICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDMwODMuNiAgINC/0L4g0YTQvtGA0LzRg9C70LU6IDMwNzguMgogICAgdj0xMDAwLjAgICDQo9C70LXRgtC40YIg0L3QsCDQstGL0YHQvtGC0YMgMzc0MTE0LjMgICDQv9C+INGE0L7RgNC80YPQu9C1OiAzMDc4MTYuOQogICAgdj0yMzUwLjAgICDQo9C70LXRgtC40YIg0L3QsCDQstGL0YHQvtGC0YMgNzk2MjkwMTUuNyAgINC/0L4g0YTQvtGA0LzRg9C70LU6IDE2OTk5MTguNgogICAgdj0yNDAwLjAgICDQo9C70LXRgtC40YIg0L3QsCDQsdC10YHQutC+0L3QtdGH0L3QvtGB0YLRjCDRgdC+INGB0LrQvtGA0L7RgdGC0YwgMzQyLjEgICDQv9C+INGE0L7RgNC80YPQu9C1OiAxNzczMDI1LjEKICAgIHY9NjAwMC4wICAg0KPQu9C10YLQuNGCINC90LAg0LHQtdGB0LrQvtC90LXRh9C90L7RgdGC0Ywg0YHQviDRgdC60L7RgNC+0YHRgtGMIDU1MDkuNyAgINC/0L4g0YTQvtGA0LzRg9C70LU6IDExMDgxNDA2LjYKICAgINCe0YHRgtCw0YLQvtC6INGB0LrQvtGA0L7RgdGC0Lgg0L/RgNC4IDYwMDA6ICA1NTA3LjgiIiIKICAgIAogICAgIyDQktGA0L7QtNC1INCy0LXRgNC90L4sINC90LAg0L3QuNC30LrQuNGFINCy0YvRgdC+0YLQsNGFINGB0L7QstC/0LDQtNCw0LXRgiwg0L/RgNC4INC/0YDQuNCx0LvQuNC20LXQvdC40Lgg0LrQviDQstGC0L7RgNC+0Lkg0LrQvtGB0LzQuNGH0LXRgdC60L7QuQogICAgIyAg0LLRi9GB0L7RgtCwINGB0LjQu9GM0L3QviDQvtGC0LrQu9C+0L3Rj9C10YLRgdGPLCDQsCDQv9C+0YLQvtC8INGD0YXQvtC00LjRgiDQvdCwINCx0LXRgdC60L7QvdC10YfQvdC+0YHRgtGMCgoKCmlmIHRlc3Q6CiAgICBwcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogICAgI9Cf0YDQvtCy0LXRgNC40Lwg0LzQvtGOINCz0LjQv9C+0YLQtdC30YMsINGH0YLQviDQstGA0LXQvNGPINGB0LPQvtGA0LDQvdC40Y8g0YHRg9GJ0LXRgdGC0LLQtdC90L3QviDQtNC70Y8g0LjRgtC+0LPQvtCy0L7Qs9C+INGA0LXQt9GD0LvRjNGC0LDRgtCwCiAgICBtPTEwMDAwCiAgICB2MT0wCiAgICBoMT0wCiAgICBmb3IgdCBpbiBbMSwxMCwxMDAsOTgwLDEwMDAsMTAyMCwxMDAwMF06CiAgICAgICAgaDIsdjIsbTI9aW50ZWdyYXRlX2tvbGVua2EobSxoMSx2MSxkbT03MDAwLHQxPXQsVT04MDApCiAgICAgICAgcHJpbnQoZifQodCz0L7RgNCw0L3QuNC1INC30LAge3Q6NX0g0YHQtdC60YPQvdC0OiAgIHtoMj0gOjcuMWZ9ICAge3YyPSA6Ny4zZn0gIHttMj0gOjcuMWZ9ICAgICAge21heF9oKGgyLHYyKX0nKQogICAgCiAgICAKICAgICIiIiDQoyDQvNC10L3RjyDQstGL0LLQvtC00LjRgiDRgtCw0LrQvtC1CiAgICDQodCz0L7RgNCw0L3QuNC1INC30LAgICAgIDEg0YHQtdC60YPQvdC0OiAgIGgyPSAgIDM4Ni40ICAgdjI9IDk2MS41NDggIG0yPSAgMzAwMC4wICAgICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDM0MDUzMy4yCiAgICDQodCz0L7RgNCw0L3QuNC1INC30LAgICAgMTAg0YHQtdC60YPQvdC0OiAgIGgyPSAgMzc5MC45ICAgdjI9IDk0Ni45NTAgIG0yPSAgMzAwMC4wICAgICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDMyOTc0Mi45CiAgICDQodCz0L7RgNCw0L3QuNC1INC30LAgICAxMDAg0YHQtdC60YPQvdC0OiAgIGgyPSAzMDYzNy41ICAgdjI9IDgwMi4zOTYgIG0yPSAgMzAwMC4wICAgICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDIzMjE5Ny42CiAgICDQodCz0L7RgNCw0L3QuNC1INC30LAgICA5ODAg0YHQtdC60YPQvdC0OiAgIGgyPSAgIDIyNi41ICAgdjI9ICAgOS42MzMgIG0yPSAgMzAwMC4wICAgICAg0KPQu9C10YLQuNGCINC90LAg0LLRi9GB0L7RgtGDIDI4LjYKICAgINCh0LPQvtGA0LDQvdC40LUg0LfQsCAgMTAwMCDRgdC10LrRg9C90LQ6ICAgaDI9ICAgMTUzLjggICB2Mj0gICA3LjM5MSAgbTI9ICAzMDAwLjAgICAgICDQo9C70LXRgtC40YIg0L3QsCDQstGL0YHQvtGC0YMgMTYuOAogICAg0KHQs9C+0YDQsNC90LjQtSDQt9CwICAxMDIwINGB0LXQutGD0L3QtDogICBoMj0gICAgOTguOSAgIHYyPSAgIDUuNDcwICBtMj0gIDMwMDAuMCAgICAgINCj0LvQtdGC0LjRgiDQvdCwINCy0YvRgdC+0YLRgyA5LjIKICAgINCh0LPQvtGA0LDQvdC40LUg0LfQsCAxMDAwMCDRgdC10LrRg9C90LQ6ICAgaDI9ICAgICAwLjAgICB2Mj0gICAwLjAwMCAgbTI9ICAzMDAwLjAgICAgICDQkdGD0LTQtdGCINC/0LDQtNCw0YLRjCDRgSDQstGL0YHQvtGC0YsgMC4wIiIiCiAgICAKICAgICPQn9GA0Lgg0YHQs9C+0YDQsNC90LjQuCDQt9CwIDEtMTAg0YHQtdC60YPQvdC0INC90LjRh9C10LPQviDQvdC1INC80LXQvdGP0LXRgtGB0Y8sINC/0YDQuCAxMDAg0YHQutC+0YDQvtGB0YLRjCDQvNC10L3RjNGI0LUsINC90L4g0YPRgdC/0LXQstCw0LXRgiDQvdCw0LHRgNCw0YLRjNGB0Y8g0LLRi9GB0L7RgtCwCiAgICAj0J/RgNC4INGB0LPQvtGA0LDQvdC40Lgg0LfQsCAxMDAwINGB0LXQutGD0L3QtCDQtdC00LLQsCDQvtGC0YDRi9Cy0LDQtdGC0YHRjyAo0Y3RgtC+INGB0LvRg9GH0LDQudC90L4g0L/QvtC70YPRh9C40LvQvtGB0YwsCiAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0YfRgtC+INC/0YDQuCDRgtCw0LrQuNGFINC/0LDRgNCw0LzQtdGC0YDQsNGFINC+0L3QviDQtdC00LLQsC3QtdC00LLQsCDQvtGC0YDRi9Cy0LDQtdGC0YHRjykKICAgICPQn9GA0Lgg0YHQs9C+0YDQsNC90LjQuCDQt9CwIDEwMDAwINGB0LXQutGD0L3QtCDQvdC1INCy0LfQu9C10YLQsNC10YIKCg==
compilation info
Traceback (most recent call last):
File "/usr/lib/python3.7/py_compile.py", line 143, in compile
_optimize=optimize)
File "<frozen importlib._bootstrap_external>", line 791, in source_to_code
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "<fstring>", line 1
(h2=)
^
SyntaxError: invalid syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.7/py_compile.py", line 147, in compile
raise py_exc
py_compile.PyCompileError: File "<fstring>", line 1
(h2=)
^
SyntaxError: invalid syntax
stdout