- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)