切线法(牛顿法)、割线法、抛物线法

举报
用户已注销 发表于 2022/05/23 23:51:03 2022/05/23
【摘要】 目录 一,牛顿法 二,牛顿法的局限性 三,牛顿下山法 四,割线法 五,抛物线法 一,牛顿法 牛顿法,也叫牛顿迭代法、切线法,是一种迭代求解函数零点的方法。 原理: 令f(x)=0则 取,在一定的范围(x的足够小的邻域)内,x1比x0更接近所求的零点x 根据这个原理,不断的迭代,即可越来越接近x值。 ...

目录

一,牛顿法

二,牛顿法的局限性

三,牛顿下山法

四,割线法

五,抛物线法


一,牛顿法

牛顿法,也叫牛顿迭代法、切线法,是一种迭代求解函数零点的方法。

原理:

f(x)=f(x_0)+f'(x_0)(x-x_0)+o(x-x_0)^2

令f(x)=0则x=x_0 + frac{o(x-x_0)^2-f(x_0)}{f'(x_0)}

x_1=x_0 - frac{f(x_0)}{f'(x_0)},在一定的范围(x的足够小的邻域)内,x1比x0更接近所求的零点x

根据这个原理,不断的迭代,即可越来越接近x值。


  
  1. double f(double x)
  2. {
  3. return x * x + x * 5 - 8;
  4. }
  5. double df(double x)
  6. {
  7. double eps = 0.001;
  8. return (f(x + eps) - f(x)) / eps;
  9. }
  10. double newton(double x)
  11. {
  12. double eps = 0.000001;
  13. int times = 100;
  14. while (times--) {
  15. double x2 = x - f(x) / df(x);
  16. cout << x2 << " ";
  17. if (abs(x - x2) < eps)return x2;
  18. x = x2;
  19. }
  20. return 0;
  21. }
  22. int main()
  23. {
  24. double ans = newton(0);
  25. cout << endl << ans << " " << f(ans);
  26. return 0;
  27. }

输出:

1.59968  1.28782  1.27494  1.27492  1.27492
1.27492  3.2081e-12

可以看出收敛很快。

二,牛顿法的局限性

1,牛顿法对于初始值有要求,而且没有很简单的方法去判断一个邻域是否已经足够小。

2,序列{x0,x1,x2...}越来越接近x,单调有界必要极限,但是这个极限值是否一定是x,我个人不太确定,但是找到了一个课件中给出了答案:

牛顿法及其收敛性课件

结论是对于单根,|xi - x|平方收敛,但对于有重根的情况只是线性收敛。

如果知道是m重根,则可以改进公式为:

三,牛顿下山法

每取一个新值之前学习率设为1,每次取到新值之后,判断新的函数值是否更接近0,如果不是则降低学习率直到新的函数值更接近0。

在一定程度上降低对于初始值的范围要求。


  
  1. double newton(double x)
  2. {
  3. double eps = 0.000001;
  4. int times = 100;
  5. double learningRate = 1;
  6. while (times--) {
  7. double x2 = x - f(x) / df(x)*learningRate;
  8. cout << x2 << " ";
  9. if (abs(x - x2) < eps)return x2;
  10. if (abs(f(x2)) < abs(f(x))) {
  11. x = x2, learningRate = 1;
  12. } else {
  13. learningRate /= 2;
  14. }
  15. }
  16. return 0;
  17. }

四,割线法

在曲线上取AB两点,求切线AB和x轴的交点C,让BC取代AB进入下一轮迭代,直到两点间距达到精度要求。

收敛定理:

待补图 

五,抛物线法

待更新

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/124927408

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。