2023-06-19《计算方法》- 陈丽娟 - 方程的近似解法(注解)

发布时间 2023-06-19 14:16:44作者: XNEF

2023-06-19《计算方法》- 陈丽娟 - 方程的近似解法(注解)

前面介绍了求解方程的二分法、迭代法和牛顿迭代法,这里介绍弦截法,欸特金加速法。

一、弦截法

由于牛顿迭代法需要计算导数,而从上一章节我们看到导数的求解对数值稳定性会产生不良影响,为了避免导数,弦截法利用差商代替导数,其算法格式为:

  1. 给定邻域内的两点, , 且.
  2. 计算.
  3. , 停止,否则回到2.
    弦截法的示意图:
    enter description here
    弦截法的迭代格式与牛顿法如出一辙,都具有局部收敛性,并且弦截法具有超线性收敛速度。
  1. % f目标函数, x0,x1初始点,epsilon 
  2. function [xs, xslog] = SecantMeth(f, x0, x1, epsilon, maxit) 
  3. xs = x0; 
  4. iter = 1; 
  5. xslog = []; 
  6. if abs(feval(f,x0)) <= epsilon 
  7.  
  8. else 
  9. while abs(feval(f,xs)) > epsilon 
  10. if iter > maxit 
  11. break 
  12. end 
  13. fx0 = feval(f,x0); 
  14. fx1 = feval(f,x1); 
  15. fxdiff = (fx1 - fx0) / (x1 - x0); 
  16. xs = x0 - fx0 / fxdiff; 
  17. xslog = [xslog xs]; 
  18. x0 = x1; 
  19. x1 = xs; 
  20. iter = iter + 1; 
  21. end 
  22. end 
  23. end 

例子

  1. f = @(x) 5 .* x.^3+x.^2-x+1; 
  2. epsilon = 1e-8; 
  3. x0 = -10; 
  4. x1 = 10; 
  5. maxit = 1e3; 
  6. [xs, xslog] = SecantMeth(f, x0, x1, epsilon, maxit) 

书中另外介绍了Aitken加速算法,但是有些模糊,建议参考 lecture13.pdf 121.66 KB

https://mycareerwise.com/programming/category/numerical-analysis/aitkens-method#c