牛顿迭代法(求函数的根)
2015-03-21 22:14
651 查看
在做二分与三分法的题时,听闻有牛顿迭代法(感觉很高大上),自己居然捧起书看了一些
由于自己水平很渣,研究的并不深入。本篇未完结......
个人感觉:
1.使用牛顿迭代法,函数可以是任意
2.优点:对其单调性无特殊要求
缺点:若在该函数值处有多个根,往往只能求出一个根
3.与二分三分法比较
二分要求是单调函数
三分要求是凸性函数
牛顿迭代对单调性无要求
如:求 y=2x^3-15x^2-36x+7,y=37时的根
c代码:
由于自己水平很渣,研究的并不深入。本篇未完结......
个人感觉:
1.使用牛顿迭代法,函数可以是任意
2.优点:对其单调性无特殊要求
缺点:若在该函数值处有多个根,往往只能求出一个根
3.与二分三分法比较
二分要求是单调函数
三分要求是凸性函数
牛顿迭代对单调性无要求
如:求 y=2x^3-15x^2-36x+7,y=37时的根
c代码:
#include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> double f(double x) //所求函数 { return 2*pow(x,3)-15*pow(x,2)-36*x+7-37; //把等式右边移到左边(最后一个数) } double df(double x) //所求函数的一阶导数 { return 6*pow(x,2)-30*x-36; } double iterate(double x) //牛顿迭代 { return x-f(x)/df(x); } int main() { double x0=1,x; //x0是初值,可以随便赋,两个原则: 1.别选0 2.其一阶导数不为0 int k=0; while(k<1000) //控制条件1:k是最大迭代次数,防止下面出现精度无法精确导致死循环的情况(共两个控制条件) { x=iterate(x0); if(fabs(x-x0)>1e-3) //控制条件2:这个是用来控制精度的(小数点后三位) x0=x; else break; } if(k<1000) printf("根是:%.2lf\n",x); else printf("error\n"); return 0; }
相关文章推荐
- 实现sqrt函数功能,之前也是常见的面试题,本文两种解法,二分法,牛顿迭代法
- sqrt函数实现--牛顿迭代法(重点)
- 计科答疑_牛顿迭代法求函数解_二分法求函数解_输出以下图形
- 习题 7.12 用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。
- 网络函数库
- 深入认识JavaScript中的函数
- shell 函数返回值的方法
- .NET 常用函数
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
- JavaScript中匿名函数,函数直接量和闭包(转)
- Mysql 函数学习
- 【转】可变参数函数
- 函数的调用
- c++ 模版函数的定义和实现放在一个文件中
- lua函数的学习
- SetCommState函数失败原因
- setInterval()每隔固定的时间调用某个函数
- PHP json_encode() 函数介绍
- javascript和jquery中检查函数是否存在
- C++中的函数模板