您的位置:首页 > 其它

牛顿迭代法(求函数的根)

2015-03-21 22:14 651 查看
在做二分与三分法的题时,听闻有牛顿迭代法(感觉很高大上),自己居然捧起书看了一些

由于自己水平很渣,研究的并不深入。本篇未完结......

个人感觉:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 搜索 牛顿迭代法