def test_greater_cd(self): '增大c_d的线性系数,应当使得phi减小' solver1 = const.ConstantSolver() solver1.set_constants(0.2, 1, 1.225, 5) solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver1.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)])) delta = 0.001 phi1 = solver1.solve(delta=delta) solver2 = const.ConstantSolver() solver2.set_constants(0.2, 1, 1.225, 5) solver2.set_c_d(util.SampleFunction([(0, 1), (math.pi / 2, 1)])) #增大了c_d常量 solver2.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)])) delta = 0.001 phi2 = solver2.solve(delta=delta) self.assertLess(phi2, phi1, "phi should be less when c_d increases")
def test_greater_cl(self): '增大c_l的线性系数,应当使得phi增大' solver1 = const.ConstantSolver() solver1.set_constants(0.2, 1, 1.225, 5) solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver1.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 4 * math.pi / 2)])) delta = 0.001 phi1 = solver1.solve(delta=delta) solver2 = const.ConstantSolver() solver2.set_constants(0.2, 1, 1.225, 5) solver2.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver2.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)])) delta = 0.001 phi2 = solver2.solve(delta=delta) self.assertGreater(phi2, phi1, "phi should be greater when c_l increases")
def test_right_solution(self): '求解器得到的结果调用compute方法应该误差在delta内' solver = const.ConstantSolver() solver.set_constants(0.2, 1, 1.225, 5) solver.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)])) delta = 0.0001 phi = solver.solve(delta=delta) self.assertLessEqual(solver.compute(phi), delta, "solution's function value too big")
def test_strong_wind(self): '当风力非常大的时候phi应当与风速无关,只要c_l / c_d 近似等于 tan(phi)即可' solver1 = const.ConstantSolver() solver1.set_constants(0.2, 1, 1.225, 10000) solver1.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver1.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)])) delta = 0.001 phi1 = solver1.solve(delta=delta) solver2 = const.ConstantSolver() solver2.set_constants(0.2, 1, 1.225, 60000) solver2.set_c_d(util.SampleFunction([(0, 0.5), (math.pi / 2, 0.5)])) solver2.set_c_l( util.SampleFunction([(0, 0), (math.pi / 2, 5 * math.pi / 2)])) delta = 0.001 phi2 = solver2.solve(delta=delta) self.assertLessEqual(abs(math.tan(phi1) - math.tan(phi2)), 3 * delta, "not constant under strong wind")
ydata = [] line, = ax.plot(xdata, ydata, 'r-') solver = dynamic.DynamicSolver() alpha = 0 dic_para = { 'mass':0.05, 'density':1.225, 'area':1, 'c_d':DemoDragFunction(), 'c_l':DemoLiftFunction(), 'v_wind':(-5, 0), } solver.init( mass=dic_para['mass'], density=dic_para['density'], area=dic_para['area'], c_d=dic_para['c_d'],c_l=dic_para['c_l'], v_wind=dic_para['v_wind'], v_vertical_0=2, r_0=(-10* math.cos(alpha), 10 * math.sin(alpha)), reader=reader.VReaderSteady() ) const_solver = const.ConstantSolver() const_solver.set_constants(mass=dic_para['mass'], area=dic_para['area'], density=dic_para['density'], v_wind=abs(dic_para['v_wind'][0])) const_solver.set_c_d(dic_para['c_d']) const_solver.set_c_l(dic_para['c_l']) res = const_solver.solve() print(math.tan(res)) line_ani = animation.FuncAnimation(fig, update_line, 1000, fargs=(xdata, ydata, solver, line, ax), interval=50) plt.show()