Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 секунд не взлетает
Add Comment
Please, Sign In to add comment