二分法
一、直观理解:在变号区间里反复对半查找
二分法(bisection)用于求解一维连续函数的根 。若在区间 上 ,由介值定理至少存在一个根。每次取中点 ,根据 的符号舍弃不含根的一半,直到区间足够短。
它像在字典里对半翻页找词:慢而稳,不要求导数,对病态函数也往往可靠。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 能找到变号括号区间;只需一维根;强调可靠性胜过速度;作为牛顿法失败时的兜底。 |
| 核心优点 | 全局收敛(在连续+变号条件下);实现极简;误差上界明确:每步区间减半。 |
| 局限与缺点 | 只要一维;需先找括号;收敛线性偏慢;偶根/不变号的根可能抓不到;多根时只保证找到其中一个。 |
三、核心原理与误差
迭代:
步后区间长度 ,故
达到精度 约需 次迭代。
四、实践要点
- 先画图或扫描找变号;
- 处理 直接返回;
- 注意浮点下 可能下溢,可用符号比较;
- 与
fzero对照(MATLAB 的fzero更复杂,含 secant 等)。
五、MATLAB 示例
%% 二分法求 f(x)=x^3-x-1=0 在 [1,2]
f = @(x) x.^3 - x - 1;
a = 1; b = 2;
tol = 1e-10;
maxIt = 100;
hist = [];
assert(f(a)*f(b) < 0, "端点必须变号");
for k = 1:maxIt
m = 0.5*(a+b);
hist(end+1,:) = [a b m f(m)]; %#ok<AGROW>
if abs(f(m)) < tol || (b-a)/2 < tol
root = m; break;
end
if f(a)*f(m) < 0
b = m;
else
a = m;
end
end
fprintf("根 ≈ %.12f, f(root) = %.3e, 迭代 = %d\n", root, f(root), k);
fprintf("fzero 对照 = %.12f\n", fzero(f, [1 2]));
figure;
semilogy(abs(hist(:,4)), "-o");
xlabel("迭代"); ylabel("|f(m)|");
title("二分法函数值下降"); grid on;
六、如何解释结果
报告括号区间、容差、迭代次数、根与 。说明是否可能还有其他根,以及区间选择依据。
七、常见误区
1. 端点不变号仍二分
算法前提不成立。
2. 把慢当成失败
线性收敛在工程容差下通常足够。
3. 不检查 在区间内是否连续
间断点会造成假变号。
4. 多根问题只报一个根当全部
应结合图形扫描。
附:建模流程中的落地清单(二分法)
在竞赛或课程论文中,仅写出定义式往往不够。建议按下列顺序组织材料,既能保证可复现,也便于评委快速抓住贡献。
1. 问题对齐
先用两三句话说明:题目中的哪个子问题对应本方法,输入是什么,输出要支持什么决策。避免“因为常见所以使用”。若存在更简单的替代方法,应说明为何不够用。
2. 符号与单位
列出核心符号表,强调单位一致。许多错误并非算法失败,而是日/年、米/千米、概率/百分比混用。对无量纲参数,说明取值来源(估计、文献、情景设定)。
3. 关键公式回顾
介值定理保证变号区间内存在根;误差上界每步减半,属于线性收敛但极稳健。
4. 计算与实现要点
- 固定随机种子(若涉及随机);
- 记录中间量以便手算核对小例子;
- 用极限情形或解析特例做冒烟测试;
- 保存主要输入输出到表格,便于敏感性分析复用。
5. 补充 MATLAB 片段
f=@(x)x^3-2; a=0;b=2; while (b-a)>1e-10, m=(a+b)/2; if f(a)*f(m)<=0,b=m;else,a=m;end, end; fprintf('%.12f\n', (a+b)/2);
6. 结果报告模板
建议至少报告:括号区间、迭代次数、根、函数值残差、是否可能存在其他根。
7. 何时不该使用
端点不变号硬套二分;或把偶重根(不变号)的失败归咎于程序。
完成以上清单后,再进入“小结”中的一句话金句,通常论文的方法段与验证段就会扎实许多。
附:结果解读示例与常见审稿问题
结果解读示例
假设已经得到主要数值输出。写作时应把数字翻译回题目语言,例如:
- “在基准参数下指标为 A;当关键参数变化 ±10% 时,指标波动约 B%,方案排序未变。”
- “算法在 R 次独立重复中有 S 次收敛到同一结构解,说明结论对初始化不敏感。”
- “与简化基线相比,本方法在验证集误差降低 Δ,但计算时间增加,权衡后仍采用。”
如果只有表格没有句子,评委很难判断你是否真正理解结果。
参数与数据的最小敏感性
即使篇幅有限,也建议给出一个小表:选取 1–3 个最关键参数,各取偏低/基准/偏高三档,报告输出变化。这比大段空泛的“模型具有较强鲁棒性”更有说服力。
可复现信息
在附录或正文脚注中记录:软件版本、随机种子、关键容差、数据截取时间范围。另一人按文档应能得到同量级结果。
审稿式自问
- 方法假设在题目数据上是否可检查?
- 若最敏感参数估计错误 20%,结论是否翻盘?
- 是否存在更简单方法达到相近效果?
- 图表是否都能用一句话概括?
- 局限是否写得具体,而不是套话?
把上述自问的答案写进论文,方法章节会明显更“像完成了建模”,而不是“像完成了公式摘录”。
八、小结
二分法在变号区间上通过对分可靠地逼近一维根,误差界限清晰,是最稳健的基线求根法。速度不是它的强项,但在建模中“先保证找得到”往往比“快”更重要。