4. 无约束一维搜索方法
在工程参数求解中,大量问题最终会退化为“只调一个参数,让某个指标达到最优”的形式。例如标定弹簧刚度使振动幅值最小、调整PID某一增益使超调量最小、确定切削进给量使表面粗糙度最低。这类问题在数学上就是无约束一维优化:求单变量函数 f(x) 的极小点,x 无任何约束。本节围绕三种最常用的求解手段展开:黄金分割法、抛物线插值法,以及 MATLAB 内置的 fminbnd。
一、单峰区间:一维搜索的前提
一维搜索方法几乎都建立在一个假设上:目标函数在搜索区间 [a, b] 内是单峰函数,即区间内只有一个极小点,函数在极小点左侧单调下降、右侧单调上升。若区间内存在多个局部极小,任何区间收缩法都可能收敛到错误的谷底。因此工程上第一步往往不是直接调用算法,而是先做“扫描”:在参数可行范围内等距取点计算 f(x),观察是否只有一个下降—上升的谷,据此确定一个包含极小点的单峰区间。
需要先约定方向:本节统一以“求极小值”为目标,若工程指标是越大越好(如效率、合格率),则对指标取负号转化为极小化问题,全文与图示均按此约定。
二、黄金分割法:只靠函数值比较的稳健收缩
黄金分割法(0.618法)不需要导数,只比较函数值,通过按黄金比例 0.618 布置两个内点,每次迭代把区间缩短为原来的 0.618 倍。设区间为 [a, b],取
x1 = a + 0.382*(b - a)
x2 = a + 0.618*(b - a)
比较 f(x1) 与 f(x2):若 f(x1) < f(x2),说明极小点在 [a, x2] 内,令 b = x2;否则极小点在 [x1, b] 内,令 a = x1。由于黄金比例的自相似性,每次只需新算一个点,另一个点可复用,计算量小、收敛稳定。终止条件通常用区间长度 |b − a| < tol,或结合函数值变化量判断。它的缺点是收敛速度线性、较慢,适合函数形态不明、不可导或含噪声的情形。
三、抛物线插值法:用三点拟合加速逼近
抛物线插值法(二次插值)利用三个点 (x1, f1)、(x2, f2)、(x3, f3) 拟合一条抛物线,直接取抛物线顶点作为极小点的近似:
x* = x2 - 0.5*((x2-x1)^2*(f2-f3) - (x2-x3)^2*(f2-f1)) / ...
((x2-x1)*(f2-f3) - (x2-x3)*(f2-f1))
若三点满足 f2 < f1 且 f2 < f3(x2 是当前最低点),则 x* 落在区间内。用 x* 替换掉函数值最大的那个点,形成新的三点组,反复迭代。它的收敛阶较高,接近极小点时收敛很快;但若三点接近共线或函数非单峰,x* 可能跳出区间,因此工程实现中常加保护:把 x* 限制在 [x1, x3] 内,或与黄金分割法交替使用——先用黄金分割保证稳健,接近极小点后切换抛物线插值加速。
四、fminbnd:MATLAB 的现成工具
MATLAB 的 fminbnd 正是“黄金分割 + 抛物线插值”的混合实现,专门求解有界区间上的单变量极小问题。基本调用形式为:
% 目标函数:f(x) = (x-3)^2 + 2
f = @(x) (x-3).^2 + 2;
[xopt, fval, exitflag, output] = fminbnd(f, 0, 10);
% 期望结果:xopt ≈ 3,fval ≈ 2
关键参数与返回值:前两个参数是搜索区间下界与上界;optimset 可设置 TolX(x 的收敛容差,默认 1e-4)和 MaxFunEvals;exitflag=1 表示按容差正常收敛,0 表示达到最大函数计算次数,-1 表示算法被输出函数终止。使用时务必注意:fminbnd 只保证在给定区间内找到局部极小,区间必须包含目标极小点,且函数在区间内应单峰。
五、工程单参数标定案例
某减振支架需要标定橡胶衬套的等效刚度 k(单位 N/mm),使设备在额定激励下的振动幅值 A 最小。通过有限元或试验测得幅值随刚度变化的近似关系(示例数据,用于演示方法):
| k (N/mm) | 20 | 40 | 60 | 80 | 100 | 120 |
|---|---|---|---|---|---|---|
| A (mm) | 1.82 | 1.35 | 1.02 | 0.88 | 0.95 | 1.24 |
扫描可见幅值在 k≈80 附近出现单一谷底,区间 [20, 120] 可视为单峰区间。用 fminbnd 求解:
kdata = 20:20:120;
Adata = [1.82 1.35 1.02 0.88 0.95 1.24];
A = @(k) interp1(kdata, Adata, k, 'spline');
[kopt, Amin] = fminbnd(A, 20, 120);
% 示例结果:kopt ≈ 78 N/mm,Amin ≈ 0.87 mm
得到最优刚度后,还需做两件事:一是把 kopt 与工艺可实现刚度档位比对,若只能取整到 5 N/mm 档,则取 80 N/mm 并复算幅值;二是检查该点是否落在单峰区间内部而非边界,若最优解贴在区间端点,说明真实极小可能在区间外,需要扩大搜索范围重新标定。
三种方法的选择可归纳为:函数不可导或含噪声、只求稳健时用黄金分割法;函数光滑、需要快速收敛时用抛物线插值法;工程中直接调用 fminbnd 即可,它自动在稳健与快速之间切换。无论哪种方法,先确认单峰区间、再设定合理容差、最后校验最优解是否落在区间内部,是保证标定结果可信的三条基本准则。