2023-06-19《计算方法》- 陈丽娟 - 方程的近似解法(注解)
2023-06-19《计算方法》- 陈丽娟 - 方程的近似解法(注解)
前面介绍了求解方程的二分法、迭代法和牛顿迭代法,这里介绍弦截法,欸特金加速法。
一、弦截法
由于牛顿迭代法需要计算导数,而从上一章节我们看到导数的求解对数值稳定性会产生不良影响,为了避免导数,弦截法利用差商代替导数,其算法格式为:
- 给定
邻域内的两点
,
, 且
.
- 计算
.
- 若
, 停止,否则回到2.
弦截法的示意图:
弦截法的迭代格式与牛顿法如出一辙,都具有局部收敛性,并且弦截法具有超线性收敛速度。
- % f目标函数, x0,x1初始点,epsilon
- function [xs, xslog] = SecantMeth(f, x0, x1, epsilon, maxit)
- xs = x0;
- iter = 1;
- xslog = [];
- if abs(feval(f,x0)) <= epsilon
- else
- while abs(feval(f,xs)) > epsilon
- if iter > maxit
- break
- end
- fx0 = feval(f,x0);
- fx1 = feval(f,x1);
- fxdiff = (fx1 - fx0) / (x1 - x0);
- xs = x0 - fx0 / fxdiff;
- xslog = [xslog xs];
- x0 = x1;
- x1 = xs;
- iter = iter + 1;
- end
- end
- end
例子
- f = @(x) 5 .* x.^3+x.^2-x+1;
- epsilon = 1e-8;
- x0 = -10;
- x1 = 10;
- maxit = 1e3;
- [xs, xslog] = SecantMeth(f, x0, x1, epsilon, maxit)
书中另外介绍了Aitken加速算法,但是有些模糊,建议参考
lecture13.pdf
121.66 KB
https://mycareerwise.com/programming/category/numerical-analysis/aitkens-method#c