水火箭的模拟程序中,提到了用来模拟计算水火箭的飞行的程序。 这次将程序作以修改,以便研究在竖直发射时,如何选择喷口直径和合适的水量。

参数的选择

充气压力

根据洛奇水火箭的爆瓶实验,1.25L的可乐瓶耐压为12kg压力。 这一单位并不是标准的压强单位,猜测实际指的是千克力每平方厘米。1千克力每平方厘米约合1个大气压。因此,耐压应约12个大气压。

计算中,压力选择11个大气压:11×101325 Pa.

此外,根据当前的设想,可能打算用乳胶管充水作为瓶内的供水部件,而不是直接将水装于瓶中。 由于乳胶管在直径大(曲率小)时弹力比曲率大时要小,所以,在水量减少(喷出)时,失去的气压可以得到乳胶管的补充。 但是这一因素在下列计算中暂时不予考虑。

瓶重

暂时定为300 g,这是一个很大的数值(试试将矿泉水瓶——550mL的——充大半瓶水,大概就是这个重量),应该可以甚至包含一定的载荷。

改写程序

由于时间问题,并没有打算使用迭代算法寻求最优点。程序主体仍然是上一贴提到的内容。 但是将模拟算法单独放进一个函数,函数关心两个输入变量:喷嘴口径或者说面积,和初始的充水体积。

程序的输出关心如下几个参数:

  • 最大射高
  • 发动机工作时间
  • 总冲量
  • 相对于初始水量计算的比冲量

用于撒网选取这类合适参数的程序如下:

from math import *
from rocketSimu import simulate

print 'InitWater(L),NozzleDiameter(mm),MaxHeight(m),EngineDuration(s),TotalImpulse(N.s),SpecificImpulse(N.s/kg)'

for initWaterLiter in [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3]:
    initVolumeWater = initWaterLiter / 1000.0

    for nozzleD in xrange(3, 15, 1):
        nozzleArea = 0.25 * pi * (nozzleD / 1000.0) ** 2
        
        simret = simulate(initVolumeWater, nozzleArea)

        print '%f,%f,%f,%f,%f,%f' %\
            (initWaterLiter, nozzleD, simret['maxHeight'], simret['engineDuration'], simret['totalImpulse'], simret['specificImpulse'])

计算结果如表格(部分,根据maxHeight即最大射高降序排序):

水火箭优化计算列表结果

图中可以首先分析几个定性的结论:

  1. 总冲是几乎只和初始水量有关的。因此,比冲也是。
  2. 在上一条的原理上,同样的总冲量下,尽快将速度加快的方法就是尽快将水泄出,因为动量是速度和质量的乘积。 因此,可以看到在水量相同时,喷口直径越大,射高越高,虽然发动机工作时间越短。
  3. 初始水量不可过大或过小。计算中结果再一次支持了这一观点。

(未完待续)