牛顿迭代法(牛顿-拉夫森)数值分析.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
牛顿迭代法 一、 牛顿迭代法 牛顿迭代法也称为牛顿-拉夫森(Newton-Raphson)迭代法,它是数值分析中最重要的方法之一,它不仅适用于方程或方程组的求解,还常用于微分方程和积分方程求解。 迭代公式 用迭代法解非线性方程时,如何构造迭代函数是非常重要的,那么怎样构造的迭代函数才能保证迭代法收敛呢?牛顿迭代法就是常用的方法之一,其迭代格式的来源大概有以下几种方式(主要是第一种): 1、设,对在点作泰勒展开: 略去二次项,得到的线性近似式:。 由此得到方程0的近似根(假定0), 即可构造出迭代格式(假定0): 公式(1) 这就是牛顿迭代公式,若得到的序列{}收敛于,则就是非线性方程的根。 2、 牛顿迭代法也称为牛顿切线法,这是由于的线性化近似函数=是曲线=过点的切线而得名的,求的零点代之以求的零点,即切线与轴交点的横坐标,如右图所示,这就是牛顿切线法的几何解释。实际上,牛顿迭代法也可以从几何意义上推出。利用牛顿迭代公式,由得到,从几何图形上看,就是过点作函数的切线,切线与轴的交点就是,所以有,整理后也能得出牛顿迭代公式: 。 3、 要保证迭代法收敛,不管非线性方程0的形式如何,总可以构造: 作为方程求解的迭代函数。因为: 而且在根附近越小,其局部收敛速度越快,故可令: 若0(即根不是0的重根),则由得:, 因此可令,则也可以得出迭代公式:。 4、 迭代法的基本思想是将方程改写成等价的迭代形式,但随之而来的问题却是迭代公式不一定收敛,或者收敛的速度较慢。运用前述加速技巧,对于简单迭代过程,其加速公式具有形式: ,其中 记,上面两式可以合并写成: 这种迭代公式称作简单的牛顿公式,其相应的迭代函数是:。 需要注意的是,由于是的估计值,若取,则实际上便是的估计值。假设,则可以用代替上式中的,就可得到牛顿法的迭代公式:。 牛顿迭代法实质上是一种线性化方法,其基本思想是将非线性方程逐步归结为某种线性方程来求解。 算法描述 用Newton法求方程f(x)=0的一个解 输入 初始值x0;误差容限TOL;最大迭代次数m 输出 近似解p或失败信息 Step1 Step2 对i=1,2,...,m做setp3~4 Setp3 Setp4 若,则输出(p),停机,否则 Setp5 输出失败信息;停机 注:在第4步中的迭代终止准则可用: 四、C语言代码 求一元四次方程的解 double func(double x) //函数 {   return x*x*x*x-3*x*x*x+1.5*x*x-4.0;   }    double func1(double x) //导函数    {   return 4*x*x*x-9*x*x+3*x;   }    int Newton(double *x,double precision,int maxcyc) //初始值, 精度, 迭代次数    {    double x1,x0;    int k;    x0=*x;    for(k=0;kmaxcyc;k++)    {    if(func1(x0)==0.0)//若通过初值,函数返回值为0    {    printf(迭代过程中导数为0!\n);    return 0;    }    x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算   if(fabs(x1-x0)precision || fabs(func(x1))precision) //达到结束条件    {   *x=x1; //返回结果   return 1;   }   else //未达到结束条件    x0=x1; //准备下一次迭代    }    printf(迭代次数超过预期!\n); //达到迭代次数,仍没有达到精度    return 0;    }    int main()    {    double x,precision;    int maxcyc;    printf(输入初始迭代值x0:);    scanf(%lf,x);    printf(输入最大迭代次数:);    scanf(%d,maxcyc);    printf(迭代要求的精度:);    scanf(%lf,precision);    if(Newton(x,precision,maxcyc)==1) //若函数返回值为1    printf(该值附近的根为:%lf\n,x);    else //若函数返回值为0    printf(迭代失败!\n);    getch();    return 0;    } 二元函数的牛顿迭代法 设z=f(x,y)在点(x0,y0

文档评论(0)

zsmfjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档