fork download
  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.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
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
Standard output is empty