割线法
一、直观理解:用割线代替切线
割线法(secant method)与牛顿法目标相同,但不用解析导数,而用最近两点的差商近似 :
几何上,过 与 的割线与横轴交点成为新近似。它保留了超线性收敛的速度,又避免手写导数,是许多黑盒求根程序的核心组件之一。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 可计算但 难求或昂贵;一维求根;希望比二分更快。 |
| 核心优点 | 无需导数;收敛阶约 (黄金比),快于线性;实现简单。 |
| 局限与缺点 | 需要两个初值;无括号时可能失去全局保证;接近重根或 值相近时不稳;可能发散。 |
三、核心原理
差商
代入牛顿公式即得割线迭代。收敛阶 。
与相关方法
- 试位法(regula falsi):在变号括号内用割线,更稳但可能一侧端点停滞;
- MATLAB
fzero:结合二分、割线与逆二次插值。
四、实践要点
- 两初值不要让 几乎相等;
- 监控分母与步长;
- 可与二分混合保证括号;
- 达到最大迭代仍不收敛要换初值。
五、MATLAB 示例
%% 割线法: f(x)=e^{-x}-x
f = @(x) exp(-x) - x;
x0 = 0; x1 = 1;
tol = 1e-12;
histx = [x0; x1];
for k = 1:50
f0 = f(x0); f1 = f(x1);
if abs(f1 - f0) < 1e-16
error("差商分母过小");
end
x2 = x1 - f1 * (x1 - x0) / (f1 - f0);
histx(end+1,1) = x2; %#ok<AGROW>
if abs(x2 - x1) < tol && abs(f(x2)) < tol
break;
end
x0 = x1; x1 = x2;
end
fprintf("割线法根 = %.12f, 迭代=%d, f=%.3e\n", x1, k, f(x1));
fprintf("牛顿对照(数值导)可用 fzero = %.12f\n", fzero(f, 0.5));
figure;
semilogy(abs(f(histx)), "-o");
xlabel("k"); ylabel("|f(x_k)|");
title("割线法收敛"); grid on;
与二分比较迭代次数:
f = @(x) x.^3 - 2;
% 二分
a=0;b=2; nb=0;
while (b-a)/2 > 1e-10
m=0.5*(a+b); nb=nb+1;
if f(a)*f(m)<=0, b=m; else, a=m; end
end
% 割线
x0=0;x1=2; ns=0;
for k=1:100
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0)); ns=ns+1;
if abs(x2-x1)<1e-10, break; end
x0=x1; x1=x2;
end
fprintf("达到约 1e-10: 二分 %d 步, 割线 %d 步\n", nb, ns);
六、如何解释结果
报告两个初值、迭代史、 与方法选择理由(为何不用牛顿/二分)。若与 fzero 一致,可增强可信度。
七、常见误区
1. 当全局可靠算法
没有括号保护时可能跑飞。
2. 初值间隔极大且函数非单调
割线可能跳到无关区域。
3. 与“弦截法”名词混用但不懂括号
不同教材对 secant/regula falsi 命名不一,写清公式最重要。
4. 不处理
导致巨大步长。
附:建模流程中的落地清单(割线法)
在竞赛或课程论文中,仅写出定义式往往不够。建议按下列顺序组织材料,既能保证可复现,也便于评委快速抓住贡献。
1. 问题对齐
先用两三句话说明:题目中的哪个子问题对应本方法,输入是什么,输出要支持什么决策。避免“因为常见所以使用”。若存在更简单的替代方法,应说明为何不够用。
2. 符号与单位
列出核心符号表,强调单位一致。许多错误并非算法失败,而是日/年、米/千米、概率/百分比混用。对无量纲参数,说明取值来源(估计、文献、情景设定)。
3. 关键公式回顾
用差商替代解析导数,收敛阶约 。需要两个初值,且缺少括号时可能不稳定。
4. 计算与实现要点
- 固定随机种子(若涉及随机);
- 记录中间量以便手算核对小例子;
- 用极限情形或解析特例做冒烟测试;
- 保存主要输入输出到表格,便于敏感性分析复用。
5. 补充 MATLAB 片段
f=@(x)cos(x)-x; x0=0;x1=1; for k=1:30, x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0)); if abs(x2-x1)<1e-12, break; end; x0=x1;x1=x2; end; disp(x1);
6. 结果报告模板
建议至少报告:两初值、迭代次数、残差、与二分/牛顿的对照。
7. 何时不该使用
初值使 导致步长爆炸却无处理。
完成以上清单后,再进入“小结”中的一句话金句,通常论文的方法段与验证段就会扎实许多。
八、小结
割线法用差商近似牛顿法中的导数,在无需解析导数的一维求根中兼顾速度与简便。它比二分快,但稳健性较弱;实践中常与括号策略或库函数 fzero 结合使用。