Guest User

Untitled

a guest
Apr 9th, 2021
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.75 KB | None | 0 0
  1. from math import *
  2.  
  3. test=True
  4.  
  5. G=6.67e-11 #Постоянная
  6. #Луна
  7. M=7.3477e22
  8. R=1737e3
  9. def integrate_kolenka(m1,h1,v1,dm,t1,U,*,N=100000,M=7.3477e22,R=1737e3):
  10.     #                                             Параметры Луны по умолчанию вобью
  11.     #dm - масса топлив
  12.     #t1 - время сгорания
  13.     #U - скорость истечения газов
  14.  
  15.     h=h1
  16.     v=v1
  17.     for c in range(N):
  18.         t=t1*c/N
  19.         dt=t1/N
  20.         ev=U*dm/(m1*t1-t*dm)-G*M/(R+h)**2
  21.         eh=v
  22.         v+=ev*dt
  23.         h+=eh*dt
  24.         #if (c==0):
  25.         #    print(f'{ev=} {dt=}')
  26.         if h<0: #Если ракета не взлетает
  27.             h=0
  28.             if (v>1):#Если слишком жёсткое падение
  29.                 print(f"Ракета упала со скоростью {abs(v):.2f}")
  30.             v=max(v,0)
  31.     v2=v
  32.     h2=h
  33.     return h2,v2,m1-dm
  34.  
  35. if test:
  36.     print("-----------------------------")
  37.     #Проверим интегратор в невесомости с помощью формулы Цилковского про дельту
  38.     m=10000
  39.     v1=0
  40.     h1=0
  41.     h2,v2,m2=integrate_kolenka(m,h1,v1,dm=7000,t1=20,U=800,M=0)
  42.     v_c2=800*log(10000/3000)
  43.     print(f'{h2=:.1f} {v2=:.3f} {m2=:.1f}     Цикловкский: v={v_c2:.3f}')
  44.    
  45.     h3,v3,m3=integrate_kolenka(m2,h2,v2,dm=2000,t1=20,U=1200,M=0)
  46.     v_c3=v_c2+1200*log(3000/1000)
  47.     print(f'{h3=:.1f} {v3=:.3f} {m3=:.1f}     Цикловкский: v={v_c3:.3f}')
  48.    
  49.     # Выводит это:
  50.     # h2=7744.0 v2=963.172 m2=3000.0     Цикловкский: v=963.178
  51.     # h3=37824.0 v3=2281.498 m3=1000.0     Цикловкский: v=2281.513
  52.     # Что меня вполне устраивает
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. def max_h(h,v):
  61.     e=v**2/2 #Энергия кинетическая
  62.     e_h_max= G*M*(1/R)
  63.     if e>e_h_max:
  64.         # 2*e=v**2
  65.         v=((e-e_h_max)*2)**0.5
  66.         return f"Улетит на бесконечность со скорость {v:.1f}"
  67.     else:
  68.         if (v):
  69.             h_max=(R+h)/((2*G*M/((R+h)*v**2))-1)
  70.             return f"Улетит на высоту {h_max:.1f}"
  71.         else:
  72.             return f"Будет падать с высоты {h:.1f}"
  73.  
  74.  
  75. if test:
  76.     print("-----------------------------")
  77.     #Проверю формулу
  78.     for v in [1,10,100,1000,2350,2400,6000]:
  79.         #2380 - вторая космическая на луне
  80.         g=M*G/R/R #Ускорение свободного падения на луне
  81.         h_max=v*v/(2*g) #Высота при постоянно g
  82.         print(f'{v=:.1f}   {max_h(0,v)}   по формуле: {h_max:.1f}')
  83.     print(f'Остаток скорости при 6000:  {(6000**2-2380**2)**0.5:.1f}')
  84.    
  85.     """   Вывод
  86.    v=1.0   Улетит на высоту 0.3   по формуле: 0.3
  87.    v=10.0   Улетит на высоту 30.8   по формуле: 30.8
  88.    v=100.0   Улетит на высоту 3083.6   по формуле: 3078.2
  89.    v=1000.0   Улетит на высоту 374114.3   по формуле: 307816.9
  90.    v=2350.0   Улетит на высоту 79629015.7   по формуле: 1699918.6
  91.    v=2400.0   Улетит на бесконечность со скорость 342.1   по формуле: 1773025.1
  92.    v=6000.0   Улетит на бесконечность со скорость 5509.7   по формуле: 11081406.6
  93.    Остаток скорости при 6000:  5507.8"""
  94.    
  95.     # Вроде верно, на низких высотах совпадает, при приближении ко второй космической
  96.     #  высота сильно отклоняется, а потом уходит на бесконечность
  97.  
  98.  
  99.  
  100. if test:
  101.     print("-----------------------------")
  102.     #Проверим мою гипотезу, что время сгорания существенно для итогового результата
  103.     m=10000
  104.     v1=0
  105.     h1=0
  106.     for t in [1,10,100,980,1000,1020,10000]:
  107.         h2,v2,m2=integrate_kolenka(m,h1,v1,dm=7000,t1=t,U=800)
  108.         print(f'Сгорание за {t:5} секунд:   {h2= :7.1f}   {v2= :7.3f}  {m2= :7.1f}      {max_h(h2,v2)}')
  109.    
  110.    
  111.     """ У меня выводит такое
  112.    Сгорание за     1 секунд:   h2=   386.4   v2= 961.548  m2=  3000.0      Улетит на высоту 340533.2
  113.    Сгорание за    10 секунд:   h2=  3790.9   v2= 946.950  m2=  3000.0      Улетит на высоту 329742.9
  114.    Сгорание за   100 секунд:   h2= 30637.5   v2= 802.396  m2=  3000.0      Улетит на высоту 232197.6
  115.    Сгорание за   980 секунд:   h2=   226.5   v2=   9.633  m2=  3000.0      Улетит на высоту 28.6
  116.    Сгорание за  1000 секунд:   h2=   153.8   v2=   7.391  m2=  3000.0      Улетит на высоту 16.8
  117.    Сгорание за  1020 секунд:   h2=    98.9   v2=   5.470  m2=  3000.0      Улетит на высоту 9.2
  118.    Сгорание за 10000 секунд:   h2=     0.0   v2=   0.000  m2=  3000.0      Будет падать с высоты 0.0"""
  119.    
  120.     #При сгорании за 1-10 секунд ничего не меняется, при 100 скорость меньше, но успевает набраться высота
  121.     #При сгорании за 1000 секунд едва отрывается (это случайно получилось,
  122.     #                                             что при таких параметрах оно едва-едва отрывается)
  123.     #При сгорании за 10000 секунд не взлетает
  124.  
  125.  
Add Comment
Please, Sign In to add comment