首页/文章/ 详情

螺旋桨设计-代码实现

15小时前浏览7
上期我们说了说如何利用叶素-动量理论设计螺旋桨螺旋桨设计-设计流程探讨,相关理论我就不赘述了,这期我们用代码来实现一下。个人对python的使用比较熟练,换成其他语言应该也比较方便。
需要给大家说明的是,前几期理论学习中有那么几个公式写的有点小问题(网上找的公式也不全对当时没仔细看),最好还是自己思考手推一遍。
重点讲述一下代码的整个逻辑。
首先定义设计参数,如下图所示(参数我这里就随便给了),这里面需要说的就是桨叶数量,升力阻力系数。
桨叶数量一般我们先看着给,如果说照我们的目标推力所计算出来的弦长特别大,逼近约束的上限,就考虑增加桨叶数量。
目前我们考虑还是只用一种翼型CLARKY,所以这里把0-13°攻角的升力、阻力系数都给出来了,当个数据库,后面计算时直接从这里面插值,得到对应攻角下的升力和阻力系数。
桨叶离散化,就是把桨叶划分为多个叶素,上面我们的N=20,就是把桨叶划分为20段,这里把每个叶素处的半径计算出来,data_cl和data_cd就是上文说到的插值数据库。
初始化流入条件,分了20个叶素,就要在这20个段里分别计算诱导速度,注意我加了一行注释:诱导速度要记得加损失修正因子,因为桨叶尖部受桨尖涡的影响,几乎不产生推力,目前这个代码还没加进去这个功能。
后面这个constraint是约束范围,之前我们提到要用优化算法来寻找最优攻角和 弦长,所以这里我就给了五个位置的0%、25%、50%、75%、100%半径处的弦长和攻角约束范围,而其他位置的,就通过根据这五个点插值得到。
(插值就类似上图这样,虽然线性插值精度不高,但是也够用了)
后面的部分我就简单说说,python的scipy库里自带了微分进化算法,用起来很方便,BET_Para_cal是迭代计算诱导速度的程序,后面我们展开说,Constraint就是上面的约束范围,后面的maxiterpopsize是有关优化进程的一些设置。

from scipy.optimize import differential_evolution as DE

result=DE(BET_Para_calConstraintmaxiter=70popsize=20disp=True)


现在我们就重点说一说BET_Para_cal这个函数模块的功能是怎么实现的

  • DE算法 会把参数反馈到这个函数的输入,也就是典型叶素位置的弦长和攻角
  • 建立叶素弦长和攻角的插值数据库,让其他叶素的弦长和攻角可以通过插值得到
  • 根据当前的诱导速度确定合速度和流入角-----第二步
  • 根据流入角和攻角确定安装角,有攻角可以插值得到这个位置处的升力和阻力系数
  • 目前插值得到了每个叶素处的弦长、升力系数、阻力系数、安装角、合速度,进而可以得到升力和阻力
  • 计算升力和阻力在轴向和周向的分量,可以得到推力和扭矩
  • 根据动量理论计算每个叶素位置处的推力和扭矩(里面轴向和周向诱导速度未知)
  • 联立方程,得到新的轴向和周向诱导速度,把这个和我们一开始假定的速度进行对比,误差是否在阈值内
  • 误差不在阈值内,则以新计算出来的轴向和周向诱导速度为准,重新返回第二步(计算合速度和流入角那步),直到收敛,输出目标函数(推力和扭矩组成)

收敛后就得到了目前这个弦长和攻角分布下,螺旋桨推力和扭矩所组成的目标函数。以最大推力和最小扭矩为优化目标,优化算法 会再寻找其他组合,继续上述过程,直到找到最优的弦长和攻角分布。
最后输出结果为最优组合下的螺旋桨推力和扭矩,以及各个叶素的安装角、弦长等参数,类似下图:
整个逻辑就是这样,目前的缺陷是叶尖损失如何修正还需要琢磨一下,不知道对于别的地方,大家觉得有没有不合理的地方?
此外,关于建模部分,请教一下大家一般是怎么做的?


来源:新时代仿真人
python理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-10-19
最近编辑:15小时前
龙老师Turbo
硕士 | 主任设计师、... 新时代仿真人
获赞 278粉丝 2785文章 70课程 10
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈