简介:围绕固定翼无人机机翼面积与推进系统尺寸的迭代选择,这份资料面向总体设计与性能优化方向的学习者,借助Matlab数值计算与优化算法,梳理从升力特性、推重比到续航与爬升能力的参数权衡思路,适合具备一定飞行器设计与Matlab基础、需完成课程设计或工程复现的读者。压缩包共1个docx文档,约119KB,以文字讲解配合Matlab实现为主体,围绕迭代求解流程、目标函数与约束设置、结果评估与方案调整逐层展开,篇幅紧凑、结构集中。已有33人学习下载,可作为选型计算与代码落地的参考样例。读者可获得机翼面积对升力、载荷与续航影响的定量分析视角,推进系统尺寸匹配的推力—功率权衡方法,以及用遗传算法、粒子群或梯度下降等优化手段迭代逼近最优参数组合的实现路径,并涉及安全可靠性校核与飞行条件仿真验证,便于对照自身任务搭建计算框架、复现结果。
1. 固定翼无人机的机翼面积与推进尺寸为何必须一起确定
设计一架固定翼无人机,方案阶段最先卡住的往往不是飞控算法,而是两个必须同时确定的数值:机翼面积和推进尺寸。这两个参数相互牵制:机翼面积大一些,翼载荷降下来,失速速度会好看,但浸润面积和摩擦阻力随之增加,推进系统就得配得更大;推进系统选小了,爬升率和巡航余量不够,又只能回头加大机翼。手工试算两三版还可以,试到第五版基本就会出错。这套基于迭代选择的固定翼无人机机翼面积和推进尺寸 Matlab 实现,把相互耦合的参数做成一个能自动收敛的循环:给定任务剖面和约束条件,让它自己把面积、展弦比、桨径、功率一路迭代到重量稳定、所有约束同时满足。适合正在做无人机总体设计课设、毕设,或者需要交出一版能经得起追问的初步选型报告的人。
2. 设计变量与约束建模:把机翼面积和推进尺寸转换成可迭代计算的方程组
迭代选型最容易出问题的地方通常不是算法,而是建模:不该进入循环的量被放进了循环,该耦合的约束被拆开分别计算。我见过不少代码把电池重量当常量,结果算出来的续航和重量互相矛盾,迭代十几轮还在来回跳。所以第一步要先把“哪些量是设计变量、哪些量是被约束决定的、哪些量必须放进循环”分清楚,再谈收敛。
固定翼无人机总体参数里,真正能自由选择的只有少数几个:机翼参考面积 S、展弦比 AR、螺旋桨直径 D、螺距 P、以及推进系统的轴功率 P_shaft(电动机方案下是 KV 与电池串数)。其余量,比如翼载荷 W/S、巡航升力系数 CL、推重比 T/W,都是由这些自由变量和任务要求共同推导出的中间量。迭代选型的本质就是:给一组自由变量的初值,算出一整套中间量,检查约束是否越界,越界就调整自由变量,直到所有约束都不越界且重量收敛。
2.1 从任务剖面反推设计点
任务剖面决定了设计点落在哪里。举个具体例子:一架手抛起飞、任务载荷 1.5 kg、巡航速度 25 m/s、续航 90 min、翼展不超过 3 m 的固定翼平台。手抛起飞意味着起飞速度不能太高,通常限制在 8~10 m/s;续航 90 min 意味着能量预算很紧,升阻比必须保持在较高区间;翼展 3 m 是运输和装箱带来的几何约束,它直接限制住面积和展弦比的组合上限。
从续航反推是最直观的一步。电动机方案下的续航时间可以写成:
$$t = \frac{E_{batt} \cdot \eta_{total}}{P_{shaft}}$$
其中 E_batt 是电池可用能量(Wh),η_total 是电池放电、电调、电机、螺旋桨四段效率的乘积,通常在 0.55~0.65 之间。而巡航功率又由升阻比决定:
$$P_{shaft} = \frac{W \cdot V}{\eta_{prop} \cdot (L/D)}$$
把两式合起来看,续航要求实际上给出了“升阻比 × 效率”的下界。如果任务要求 90 min、电池能量密度按当前小型平台常见的 200 Wh/kg 估算,能反推出巡航升阻比至少要达到 12 以上,这直接决定了展弦比不能太小、翼型不能选得太厚。这一步的意义在于:它把“我想要多大机翼”这种主观判断,变成了“升阻比必须达到多少”这样的客观门槛。
2.2 约束边界:失速速度、翼载荷与爬升率
约束建模最容易漏掉的是爬升率。失速速度约束很直观,几乎所有人都会写:
$$V_s = \sqrt{\frac{2W}{\rho S C_{L,max}}}$$
其中 ρ 是当地空气密度,C_L,max 取翼型加襟翼后的最大升力系数,小型无人机不加增升装置时一般取 1.1~1.3,加了简单襟翼可以到 1.4~1.6。手抛起飞要求 V_s 低于 8 m/s,代入后得到翼载荷上限 W/S ≈ 0.5·ρ·V_s²·C_L,max,海平面下大约 45 N/m²,换算成质量翼载荷差不多 4.6 kg/m²。
爬升率约束则常被漏掉:
$$ROC = \frac{P_{avail} - P_{req}}{W}$$
P_avail 是当前高度下推进系统能提供的功率,P_req 是平飞需用功率。设计要求爬升率 3 m/s,就意味着在爬升速度对应的飞行状态上,剩余功率必须大于 3W。这个约束往往比巡航约束更苛刻,因为它要求推进系统在最不利的速度点上仍有功率余量,而巡航只需要在最优速度点上匹配。很多方案在巡航上算得漂亮,一到爬升就发现余量只剩 0.5 m/s,这就是漏掉这条约束的代价。
还有一条隐性约束是巡航升力系数的合理区间。巡航时 CL 应落在阻力极曲线的低阻区,通常是 C_L,max 的 0.3~0.5 倍,两侧都不能跑偏:太低意味着飞得太快、寄生阻力增加;太高则接近失速边界,抗扰动能力差。这条约束通常写成 CL 区间的形式,在遍历时直接作为判据使用。
2.3 设计变量表与量纲统一
参数表是整个迭代的地基,写代码前先把它列清楚。单位混乱是最常见的错误,尤其是质量与力的换算,kg 和 N 混用一次,升力就会差 9.8 倍,而表面上结果看起来还很像回事。
| 符号 | 含义 | 单位 | 初值或取值范围 | 备注 |
|---|---|---|---|---|
| S | 机翼参考面积 | m² | 0.3~1.2 | 核心设计变量 |
| AR | 展弦比 | — | 6~12 | 受翼展上限约束 |
| D | 螺旋桨直径 | m | 0.25~0.55 | 受离地间隙约束 |
| P_shaft | 轴功率 | W | 80~600 | 由功率链反推 |
| W0 | 起飞总重 | N | 由迭代确定 | 外环收敛量 |
| W/S | 翼载荷 | N/m² | ≤ 45 | 由失速约束定 |
| T/W | 推重比 | — | 0.3~0.6 | 由爬升约束定 |
| C_L,max | 最大升力系数 | — | 1.1~1.6 | 由翼型与襟翼决定 |
| L/D | 巡航升阻比 | — | 10~20 | 由展弦比与翼型决定 |
表里的取值范围不是拍脑袋定的,而是小型固定翼平台的常见统计区间。实际使用时,我一般把范围放宽 20% 再遍历,让最优解落在范围内部而不是边界上;如果最优解总是贴在边界,说明初值范围本身就设错了。
约束评估函数可以写成下面这样,所有约束一次性返回,任何一个越界直接标记为不可行:
function [ok, info] = checkConstraints(x, cfg) % x = [S, AR, D, P_shaft] 四个自由设计变量 % cfg 存放任务剖面、环境与经验系数 S = x(1); AR = x(2); D = x(3); Pshaft = x(4); % 由展弦比反推翼展与弦长,检查几何约束 b = sqrt(AR * S); % 翼展 m chord = S / b; % 平均气动弦长 m okGeo = (b <= cfg.b_max) && (chord >= 0.08); % 失速速度约束:手抛起飞要求 Vs 低于 8 m/s Vs = sqrt(2 * cfg.W0 / (cfg.rho * S * cfg.CLmax)); okStall = Vs <= cfg.Vs_max; % 巡航升力系数必须落在低阻窗口内 CL_cruise = 2 * cfg.W0 / (cfg.rho * cfg.V_cruise^2 * S); okCL = (CL_cruise >= 0.3 * cfg.CLmax) && (CL_cruise <= 0.5 * cfg.CLmax); % 爬升率约束:剩余功率必须支撑要求的爬升率 Preq = cfg.W0 * cfg.V_climb / (cfg.LD * cfg.eta_prop); % 需用功率 W Pavail = Pshaft * cfg.eta_prop; % 可用功率 W ROC = (Pavail - Preq) / cfg.W0; % 爬升率 m/s okClimb = ROC >= cfg.ROC_req; % 桨尖马赫数约束,避免桨尖激波导致效率骤降 n_rps = cfg.n_design / 60; % 设计转速 转/秒 Mtip = pi * n_rps * D / cfg.a_sound; % 桨尖马赫数 okTip = Mtip <= 0.7; ok = okGeo && okStall && okCL && okClimb && okTip; info = struct('Vs',Vs,'CL',CL_cruise,'ROC',ROC,'Mtip',Mtip,'b',b); end这段代码的关键在于ok是把五个布尔量用与运算串起来的,只要有一项不满足就整组作废,而不是各自打分再权重求和。早期我用加权打分,结果出现过“升力系数 0.9、爬升率 1.2 m/s”这种整体分数不错但物理上根本飞不起来的组合,后来全部改成硬约束判据。info结构体把中间量带出来,是为了在收敛失败时知道是哪一项在卡脖子,否则整个循环就是个黑匣子,出了问题只能瞎猜。另外两个容易忽略的参数是cfg.n_design(设计转速)和cfg.a_sound(声速),前者来自电机与电压的匹配结果,后者取 340 m/s 即可,桨尖马赫数超过 0.7 之后推力系数会快速下降,拟合公式全部失效。
3. 迭代求解主流程:重量收敛外环与选型内环的双层结构
有了约束函数,接下来要决定用什么结构去迭代。这里直接说结论:单层循环基本做不出来,两层嵌套是更稳妥的做法。外环收敛起飞重量,内环在给定重量下搜索最优的面积与推进组合。分层的理由是重量和几何参数之间的耦合是非线性的,放在同一层里同时调整,两个变量会相互干扰、来回跳动,永远收不住。
3.1 空重收敛外环:重量方程为什么必须放进循环
起飞重量可以拆成四块:任务载荷、电池、结构、推进系统。任务载荷是给定的常数,后三块全都依赖设计变量:
$$W_0 = W_{payload} + W_{batt}(P_{shaft}, t) + W_{struct}(S, AR, n_{ult}) + W_{prop}(P_{shaft})$$
电池重量来自能量需求,能量需求来自功率和时间,功率又来自重量——这是个闭环。结构重量按统计关系估算,小型复合材料机翼常见的经验式是 W_wing ≈ k·S^1.05·AR^0.3,其中 k 随工艺水平浮动,泡沫芯加碳纤维蒙皮的小批量做法大约在 900~1400 N/m² 量级(这个系数要按你自己的工艺调整,照搬大飞机的统计数据会严重偏低)。推进系统重量按功率线性估算,电机加减速器加桨,大致 0.8~1.5 g/W。
外环的做法是:给一个初始 W0,走一遍内环选出 S 与 P_shaft,算出新的各分项重量,得到新的 W0;比较前后两次的差值,小于阈值就停,否则用新值继续。这里有一个必须加的东西——松弛因子。直接拿新值当下一轮输入,振荡几乎是必然的,因为面积对重量是正反馈:重量涨 → 面积涨 → 结构重量涨 → 总重再涨。我一般取 0.4~0.5 的阻尼系数,让每轮的更新量只走一半,收敛会稳很多。
3.2 内环:面积网格搜索与推进功率匹配
内环的任务是在给定 W0 的条件下,找出一组满足全部约束、且某个目标函数最优的 (S, AR, D, P_shaft)。目标函数选什么,取决于项目定位:追求续航就最小化巡航功率,追求短距起降就最小化失速速度,追求成本就最小化总重。多数课设和毕设场景下,最小化起飞总重是最稳妥的选择,因为它同时兼顾了成本和性能。
做法上不建议直接上遗传算法或粒子群。四个变量、约束明确的问题,用嵌套网格搜索反而更快、更可解释,答辩的时候也能说清楚“为什么选这个点”。具体是:S 和 AR 扫一维网格(比如 S 从 0.3 到 1.2 步长 0.01,AR 从 6 到 12 步长 0.2),在每个 (S, AR) 组合下用约束函数算出所需的 P_shaft 下界,再反过来校验几何约束;D 则在给定 P_shaft 和转速的前提下由桨的推力需求反解。这样算下来一次内环大概几千次评估,Matlab 里一两秒就能跑完,比调参调半天还收敛不了的智能算法实用得多。
提示:网格步长不是越小越好。步长缩到 0.001 时,目标函数的改进往往小于经验系数本身的不确定度,属于无效精度。步长取到“结果对系数的敏感性大于对步长的敏感性”这个量级就够了。
3.3 主循环代码与收敛判据
把外环和内环拼起来,主循环大致长这样:
% main_sizing.m 固定翼无人机机翼面积与推进尺寸迭代选型主程序 clear; clc; cfg = loadConfig(); % 任务剖面、环境、经验系数 W0 = cfg.W_payload * 3.0; % 初值:载荷的 3 倍,偏保守 relax = 0.45; % 松弛因子,抑制重量-面积正反馈 maxIter = 40; tol = 0.005; % 最大迭代次数与 0.5% 收敛阈值 history = zeros(maxIter, 2); % 记录每轮的总重与面积,便于画收敛曲线 for k = 1:maxIter cfg.W0 = W0; [S, AR, D, Pshaft, flag] = innerSearch(cfg); % 内环:网格搜索 if ~flag error('第 %d 轮内环无可行解,请放宽约束或检查初值范围', k); end % 由设计变量反算各分项重量 W_batt = calcBatteryWeight(Pshaft, cfg); % 电池 W_struct = calcStructWeight(S, AR, cfg); % 结构 W_prop = calcPropWeight(Pshaft, cfg); % 推进系统 W_new = cfg.W_payload + W_batt + W_struct + W_prop; history(k,:) = [W_new, S]; % 松弛更新,避免在两组解之间来回跳 W_next = W0 + relax * (W_new - W0); if abs(W_next - W0) / W0 < tol fprintf('第 %d 轮收敛:总重 %.2f N,机翼面积 %.3f m²\n', k, W_next, S); W0 = W_next; break; end W0 = W_next; end plotConvergence(history(1:k,:)); % 收敛曲线,验收必备图这段代码有几个地方值得单独说。relax取 0.45 是经验值:取 1.0 时多数算例会震荡,取 0.2 时收敛轮数翻倍但结果一样,0.4~0.5 是收敛速度和稳定性的平衡点。tol定在 0.5% 而不是更小,是因为结构重量的经验公式本身误差就在 10% 以上,把收敛阈值压到 0.1% 没有物理意义。innerSearch返回的flag必须检查,无可行解时立刻中断并报出轮次,比默默返回一个 NaN 然后后面全是 NaN 要好排查得多。history记录的是总重和面积两条曲线,这张收敛图在验收时非常有用——它直观地证明了迭代是收敛的,而不是靠人工挑了一个好看的数。
calcBatteryWeight里有个细节:电池能量要按可用容量算,不是标称容量。锂聚合物电池放电到 3.5 V/cell 以下对寿命伤害很大,实际可用能量通常只取标称的 80%~85%。这个折扣如果不打,算出来的续航会比实测高出一大截,试飞时就会暴露问题。
4. 推进系统匹配:螺旋桨直径、螺距与功率链的联合迭代
机翼面积定下来之后,推进系统的尺寸并不是“按功率查表选一个”这么简单。同样 300 W 的轴功率,配 12 寸桨和配 16 寸桨产生的静推力能差一倍以上,而巡航效率又反过来受桨径与飞行速度的匹配影响。这一段要做的是把桨、电机、电池串数三者一起迭代。
4.1 桨径与螺距的推力估算
螺旋桨的推力和功率可以用经典的系数形式描述:
$$T = C_T \rho n^2 D^4, \qquad P = C_P \rho n^3 D^5$$
其中 n 是转速(转/秒),D 是桨径(m)。C_T 和 C_P 不是常数,它们随前进比 J = V/(nD) 变化。小型电动无人机常用的定距桨,在悬停或低速状态(J≈0)时 C_T 大致在 0.09~0.12、C_P 在 0.04~0.06 之间;到了巡航前进比 J≈0.5~0.7 时,C_T 会掉到 0.05 以下,C_P 也会明显下降。
这些系数最可靠的做法是查桨厂的实测数据表,或者用台架试验自己测。没有实测条件时,可以用叶素动量理论加经验修正拟合一条 C_T(J) 和 C_P(J) 曲线,但要注意适用范围:拟合只在测试过的桨径和转速区间内可信,外推出去误差会迅速放大。我在一个项目里把 12 寸桨的拟合曲线外推到 18 寸,静推力算出来比实测高了将近 3 倍,原因就是大直径低转速下桨叶的雷诺数区间完全不同,原来的系数关系不成立了。
前进比 J 本身也是迭代量,因为它依赖转速,而转速又依赖电机 KV 和电压。所以这一段通常是三层:给定桨径和转速 → 算 J → 查 C_T/C_P → 算推力和功率 → 检查是否满足推力需求 → 不满足就调桨径或转速。
4.2 功率链与电机选择:效率逐级折算
从电池到螺旋桨的功率传递是一条链,每一级都有损耗:
$$P_{batt} \rightarrow P_{esc} \rightarrow P_{motor} \rightarrow P_{shaft} \rightarrow P_{thrust}$$
典型效率取值:电调 0.95~0.98,电机 0.85~0.92(小功率电机偏低),减速器 0.95(直驱则为 1.0),螺旋桨的效率则用 Figure of Merit 表示,悬停状态 FM 约 0.6~0.75,巡航状态则体现为 η_prop ≈ 0.7~0.85。整条链乘下来,电池到推力的总效率大约 0.5~0.65,这个数字直接决定了电池重量,不能随手估。
电机选型的核心是 KV 值与电压的匹配。KV 的定义是每伏特电压对应的空载转速(rpm/V),实际带载转速大约是空载的 80%~85%:
$$n_{loaded} \approx KV \cdot V_{batt} \cdot \eta_{motor} \cdot 0.85$$
选 KV 的逻辑是:先由桨径和桨尖马赫数约束确定设计转速上限,再由转速反推需要的 KV。比如 6S 电池(22.2 V)、目标转速 7000 rpm,那么 KV ≈ 7000 / (22.2 × 0.85) ≈ 370。KV 选高了会超转速、桨尖马赫数超标、电流拉爆;选低了推力和爬升率不够,只能加大桨径,又会撞上离地间隙约束。这个“两头挤”的局面就是推进尺寸迭代存在的原因。
4.3 推进尺寸匹配的 Matlab 实现与结果解读
把上面的关系写成函数,输入是推力需求、飞行速度和电池配置,输出是推荐的桨径、螺距、KV 和功率:
function [sol, table] = propSizing(T_req, V_cruise, cfg) % T_req 巡航或爬升所需推力 N % V_cruise 巡航速度 m/s % cfg 含电池电压、效率链系数、桨数据库 D_list = 0.25:0.025:0.55; % 候选桨径 m rows = []; for D = D_list % 桨尖马赫数约束给出该桨径下的转速上限 n_max = 0.7 * cfg.a_sound / (pi * D); % 转/秒 n_grid = linspace(0.3*n_max, n_max, 40); for n = n_grid J = V_cruise / (n * D); % 前进比 if J < 0.2 || J > 0.9, continue; end % 超出拟合区间直接跳过 [CT, CP] = propCoeff(J, D); % 查表或拟合 T = CT * cfg.rho * n^2 * D^4; P = CP * cfg.rho * n^3 * D^5; % 轴功率 W % 效率链折算到电池端 P_batt = P / (cfg.eta_esc * cfg.eta_motor * cfg.eta_gear); KV_need = n * 60 / (cfg.V_batt * cfg.eta_motor * 0.85); % 推力余量不足 15% 的组合不采纳 if T >= 1.15 * T_req rows = [rows; D, J, n*60, T, P, P_batt, KV_need]; %#ok<AGROW> end end end table = array2table(rows, 'VariableNames', ... {'D_m','J','rpm','Thrust_N','P_shaft_W','P_batt_W','KV'}); % 按电池端功率升序,第一行就是最省电的可行组合 table = sortrows(table, 'P_batt_W'); sol = table(1,:); end代码里有三个值得强调的判断。J的区间限制是为了避免外推——前进比低于 0.2 时螺旋桨接近悬停工况,高于 0.9 时已接近风车状态,这两个区间的系数拟合都不可靠,强行使用会得到物理上说不通的结果。推力余量取 1.15 倍是给控制和阵风留的余量,取 1.0 倍意味着没有任何抗扰能力,稍有突风就会掉高度。sortrows按电池端功率排序而不是按轴功率,是因为轴功率小不代表省电,效率链折损之后排序可能变化,直接看电池端才是真正的能量代价。
生成的表格本身就是答辩材料的一部分:它展示了所有可行组合及各自代价,而最优解只是其中一行。评委问到“为什么选 16 寸不选 18 寸”时,你能直接翻到那一行,说明 18 寸受离地间隙或桨尖马赫数限制、或者电池端功率反而更高。这比只说“经验上选 16 寸”有说服力得多。
5. 避坑与排查:五类最容易翻车的现场
5.1 迭代震荡不收敛:重量与面积的正反馈失控
现象很典型:总重在两组值之间来回跳,比如 62 N 和 71 N 交替出现,收敛曲线是一条锯齿。原因不是代码写错了,而是外环的反馈增益太大——面积涨导致结构重量涨,结构重量涨又推高失速速度要求,逼着面积继续涨,一步跨过头就反过来。解决办法有三条,按优先级排:先加松弛因子,把每轮更新量压到 0.3~0.5;再限制单步变化幅度,比如每轮总重变化不超过 5%;最后检查内环是不是在做“跳变式”选择,网格步长太粗时最优解会在两个格点间跳,把步长细化能缓解。
另一类不收敛来自约束之间的冲突,比如失速速度要求和翼展上限同时收紧到某个程度后,可行域直接空了。这时候内环返回flag = false,程序中断报错反而是好事——最怕的是内环返回了一个越界的解,外环还照样收敛,最后画出来的约束边界图上所有点都在禁区里。所以我在内环出口处会再跑一次checkConstraints做终检,不通过就报错。
5.2 结果看着漂亮但物理上不成立:约束没进循环
有个很常见的场景:算出来的翼载荷 3.8 kg/m²、巡航 CL 0.45、续航 110 min,参数表怎么看都漂亮,但翼展算出来 4.2 m,超出装箱限制 40%。原因通常是几何约束只在最后校验了一次,没有参与内环筛选,于是搜索过程一路朝着“气动最优”跑,根本不管箱子装不装得下。
处理办法是把所有约束统一写进checkConstraints,包括那些看起来“不像气动约束”的几何约束,让它在搜索的每一步都被调用。另外建议单独画一张约束边界图:横轴翼载荷、纵轴功率载荷,把失速线、爬升线、巡航 CL 上下限、翼展上限全部画上去,可行域是几条线围出来的封闭区域。最优解落在可行域内部还是边界上,一眼就能看出来;如果落在边界上,说明某个约束正在起作用,答辩时也必须讲清楚是哪一条。
5.3 单位与量纲混乱:升力差 9.8 倍
现象是算出来的升力只有重量的一半,或者反过来大了一倍。绝大多数情况是 kg 和 N 混用了,尤其是从文献里抄公式时,有的文献按质量写、有的按重量写,符号还都用 W。解决方式很笨但很有效:在loadConfig里把所有量统一成 SI,重量一律用 N,质量只在输入载荷时出现一次,进函数立刻乘 g 转成 N,函数内部再也不出现 kg。代码里所有变量名后缀标单位,比如W0_N、S_m2、P_shaft_W,宁肯名字长一点。
5.4 经验系数照搬:结构重量占比差一倍
结构重量的经验公式系数是最容易出错的地方。从文献里找来的统计关系,样本往往是大得多的飞机,按平方-立方定律缩放之后,小型平台的系数完全不同。我见过直接套用运输类飞机系数的算例,结构重量占比算出来 0.22,实际做出来 0.40,整架飞机超重将近一倍,只能回炉重做机翼。
处理方式有两条:一是优先用小级别无人机的统计数据,泡沫芯加碳纤维蒙皮的手工工艺和模具成型的系数也不一样,要分开取;二是所有经验系数都要做敏感性分析,把系数上下浮动 20% 重跑一遍,看最优解移动多少。如果系数动 20% 结果就完全变样,说明这个方案的鲁棒性不够,得在报告里明确写出来,而不是假装算得准。
5.5 螺旋桨系数外推:静推力算出三倍
前面提过一次,这里再强调一遍,因为它太常见了。桨的 C_T、C_P 曲线是在特定桨径、特定转速区间实测出来的,出了这个区间,雷诺数变了、桨叶失速特性变了,系数关系不再成立。现象是算出来的静推力大得离谱,或者巡航效率高得不符合常识。
解决办法是给每个桨数据表标注适用区间,代码里做硬性区间检查,超出范围直接报错而不是静默插值。真要做跨尺度的桨径扫描,就得用叶素动量理论重新算,而不是拿小桨的系数去套大桨。这条踩坑经验是用真金白银换来的:一次外推导致电机选小了整整一个规格,试飞时爬升率只有设计值的三分之一。
6. 验收与答辩:三张图一张表证明这套迭代真的算对了
迭代选型的方案最怕被问一句“你怎么知道这个结果是对的”。数字看起来合理不等于算对了,得有能自证的证据链。我一般按下面的清单准备,三张图加一张表,基本能覆盖大部分追问。
| 验收项 | 判据 | 怎么呈现 |
|---|---|---|
| 迭代收敛性 | 总重相邻两轮变化小于 0.5%,且无震荡 | 收敛曲线图,横轴迭代轮次、纵轴总重与面积 |
| 约束满足性 | 五项约束全部在可行域内,含 15% 推力余量 | 翼载荷—功率载荷约束边界图,标出最优点 |
| 任务可行性 | 各飞行阶段的功率需求曲线均在可用功率之下 | 功率—速度曲线图,标出巡航点与爬升点 |
| 参数敏感性 | 关键经验系数上下浮动 20%,最优解移动小于 15% | 敏感性分析表,列三组工况的结果对比 |
收敛曲线图要能看出“单调逼近”而不是“来回跳”,如果曲线本身是锯齿,先回去检查松弛因子。约束边界图上,最优点落在可行域内部说明有余量,落在边界上要能说出是哪条约束在起作用。功率曲线图是把巡航、爬升、盘旋几个状态点都标上去,看可用功率曲线是不是全程包住需求曲线——这张图最能说明“飞机真的飞得起来”。敏感性分析表是最容易被忽略、却最能加分的一项,它说明你的结论不是靠某一组系数凑出来的。
答辩时被追问最多的是三个问题。第一个是“为什么面积不再大一点”,回答要靠约束边界图,指出再大就撞上翼展上限或结构重量增速超过升力收益。第二个是“推进系统为什么不做冗余”,这要看爬升余量和推力余量的具体数值,用 15% 这个门槛解释。第三个是“结果对经验系数有多敏感”,直接翻敏感性表,说清楚哪几个系数影响大、后续怎么通过实测收窄。
有个小技巧:把内环搜索的完整结果表(所有可行组合及其代价)作为附录,比只放最优解一行更有说服力。评委随机挑一行问“这个组合为什么不行”,你能当场答出来,可信度立刻不一样。
从那以后我每次做完选型,都会强迫自己先把这三张图跑出来再写报告——图跑不通,说明模型里还有没说清的地方,早发现比在答辩现场被问出来强。这套代码和配套的说明文档已经整理成可直接运行的形式,主程序跑一遍就能出全部图表,按自己的任务剖面改loadConfig里的参数即可。希望帮到你。
本文还有配套的精品资源,点击获取