[关闭]
@Xc-liu 2016-04-06T09:55:31.000000Z 字数 3092 阅读 851

homework_6

摘要:

本文主要分析抛体在空气阻力作用下的运动情况 ,以炮弹为实际情景来讨论不同情况下炮弹的射程。本文主要分析的影响因素:
1.空气阻力
2.高度对空气阻力的影响
3.炮弹的出射角度
本文的局限性在于没有考虑运动过程中科里奥利里力的影响,近似认为炮弹在一个平面内运动。(考虑科里奥利力的情形将在下一篇给出)

正文:

在不考虑空气阻力的情况下抛体的运动很容易给出解析解。为了验证数值计算的精度,可以将数值解与解析解做比较。抛体的运动参数取取值如下:


此时抛体的射程为:

通过数值计算给出的结果如下面的图标所示:
1,xiugai.png-44.4kB
此时三种角度出射炮弹的射程为:

30度 45度 60度
43387.1m 49838.7m 43387.1m

以45度为例解析解的射程为50000m, 此时相对误差为0.32%.
而且数值解至少有两个特征符合物理事实:
1.角度为45度时射程最远。
2.角度和为90度的两种炮弹射程相同。

考虑空气阻力的影响但是忽略空气阻力随高度的变化。抛体的动力学方程为

2,xiugai.png-45.5kB
图中抛体运动的参数取值:


通过在图上取点可以得出三个炮弹的射程
三个炮弹的射程见下表

\ 30 度 45度 60 度
射程 21229.8m 21774.2m 17903.2m

在考虑空气阻力随炮弹高度变化的情况下炮弹的射程分析:
为了简化认为气体密度服从波耳兹曼分布
相较前一种情况则需要将

变为:

其中

初始角度为30,45,60时炮弹的轨迹:
3,xiugai.png-46.4kB
4.png-47.4kB
5.png-46.8kB
此时炮弹的整体射程小于第一种情况但是大于第二种情况:
将y的取值限定在区间[0,-3]之内给出射程的数值解:

角度/度 射程/米
30 23656.1203
40 26180.4552
43 26512.8946
45 26611.8632
46.5 26618.7672
47 26607.9512
50 26400.5592
60 23820.2634

由以上的表格并且结合物理分析,射程最大的角度出现在45度和47度之间为了提高精度继续细分:

角度/度 射程/米
45.5 26619.5690
46 26621.8973
46.5 26618.7672
45.75 26621.4104
46.25 26621.0196
46.75 26612.9744
45.8 26622.0541
45.9 26623.1768

综上所述:
最大射程的抛射角度45.90度,精确到小数点后一位。

计算程序:

  1. import math
  2. #initial value
  3. t=[]
  4. dt=0.01
  5. M=1.0 #B_2/m=4*10-5 realy count
  6. g=9.8
  7. end_time=100
  8. y_h=0.0001
  9. B_2=4*10**(-5)
  10. a=45.8/180.0*math.pi
  11. b=45.9/180.0*math.pi
  12. c=46.75/180.0*math.pi
  13. theta=[a,b,c] #inital angle 30 45 60
  14. t.append(0)
  15. #print a,b,c
  16. x_1=[]
  17. v_x_1=[]
  18. y_1=[]
  19. v_y_1=[]
  20. x_1.append(0)
  21. y_1.append(0)
  22. v_x_1.append(700*math.cos(theta[0])) #initial speed equal 700m/s
  23. v_y_1.append(700*math.sin(theta[0]))
  24. for i in range(int(end_time/dt)):
  25. m=x_1[i]+v_x_1[i]*dt
  26. x_1.append(m)
  27. n=v_x_1[i]-(B_2*math.e**(-y_1[i]*y_h))*((v_x_1[i]**2+v_y_1[i]**2)**0.5)*v_x_1[i]*M*dt
  28. v_x_1.append(n)
  29. o=y_1[i]+v_y_1[i]*dt
  30. y_1.append(o)
  31. p=v_y_1[i]-g*dt-(B_2*math.e**(-y_1[i]*y_h))*((v_x_1[i]**2+v_y_1[i]**2)**0.5)*v_y_1[i]*M*dt
  32. v_y_1.append(p)
  33. # print x_1[-1],y_1[-1]
  34. if o<=0:
  35. if o>=-3:
  36. print m,1
  37. x_2=[]
  38. v_x_2=[]
  39. y_2=[]
  40. v_y_2=[]
  41. x_2.append(0)
  42. y_2.append(0)
  43. v_x_2.append(700.0*math.cos(theta[1])) #initial speed equal 700m/s
  44. v_y_2.append(700.0*math.sin(theta[1]))
  45. for i in range(int(end_time/dt)):
  46. m=x_2[i]+v_x_2[i]*dt
  47. x_2.append(m)
  48. n=v_x_2[i]-(B_2*math.e**(-y_2[i]*y_h))*((v_x_2[i]**2+v_y_2[i]**2)**0.5)*v_x_2[i]*M*dt
  49. v_x_2.append(n)
  50. o=y_2[i]+v_y_2[i]*dt
  51. y_2.append(o)
  52. p=v_y_2[i]-g*dt-(B_2*math.e**(-y_2[i]*y_h))*((v_x_2[i]**2+v_y_2[i]**2)**0.5)*v_y_2[i]*M*dt
  53. v_y_2.append(p)
  54. # print x_2[-1],y_2[-1],
  55. if o<=0:
  56. if o>=-3:
  57. print m,2
  58. x_3=[]
  59. v_x_3=[]
  60. y_3=[]
  61. v_y_3=[]
  62. x_3.append(0)
  63. y_3.append(0)
  64. v_x_3.append(700.0*math.cos(theta[2])) #initial speed equal 700m/s
  65. v_y_3.append(700.0*math.sin(theta[2]))
  66. for i in range(int(end_time/dt)):
  67. m=x_3[i]+v_x_3[i]*dt
  68. x_3.append(m)
  69. n=v_x_3[i]-(B_2*math.e**(-y_3[i]*y_h))*((v_x_3[i]**2+v_y_3[i]**2)**0.5)*v_x_3[i]*M*dt
  70. v_x_3.append(n)
  71. o=y_3[i]+v_y_3[i]*dt
  72. y_3.append(o)
  73. p=v_y_3[i]-g*dt-(B_2*math.e**(-y_3[i]*y_h))*((v_x_3[i]**2+v_y_3[i]**2)**0.5)*v_y_3[i]*M*dt
  74. v_y_3.append(p)
  75. # print x_3[-1],y_3[-1],
  76. # if y_3<=0:
  77. # print(x_3)
  78. if o<=0:
  79. if o>=-3:
  80. print m,3
  81. #draw the picture
  82. import numpy as np
  83. import matplotlib.pyplot as plt
  84. plt.plot(x_1,y_1)
  85. plt.plot(x_2,y_2)
  86. plt.plot(x_3,y_3)
  87. plt.ylabel(u'height/m')
  88. plt.xlabel(u'distance/m the blue line is 43 degree the green line is 45 degree the red line is 47 degree')
  89. plt.title(u"the trial of the cannon")
  90. plt.show()

参考文献:

计算物理教材

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注