2第二章 非线性方程(组)的迭代解法
- 格式:ppt
- 大小:1.00 MB
- 文档页数:45
文献综述信息与计算科学非线性方程组的迭代解法一、国内外状况 近年来,国内外专家学者非线性方程组的迭代解法的研究兴趣与日俱增,他们多方面、多途径地对非线性方程组进行了广泛的领域性拓展(科学、物理、生产、农业等),取得了一系列研究成果。
这些研究,既丰富了非线性方程组的内容,又进一步完善了非线性方程组的研究体系,同时也给出了一些新的研究方法,促进了数值计算教学研究工作的开展,推动了课程教学改革的深入进行。
非线性问题是数值分析中一种研究并解决数值计算问题的近似解的数学方法之一。
数值是各高校信息与计算科学专业的一门核心基础课程。
它既有数学专业课理论上的抽象性和严谨性,又有解决实际问题的实用性。
80年代以前,数值分析课程只在计算数学专业和计算机专业开设,限于计算机的发展,课程的重心在数学方法理论分析方面,是一门理论性较强的课程。
近年来,随着计算机技术的迅速发展,以及计算机的普及和应用,数值分析课程也在国内外各大高校得到了迅速的推广。
特别是Mathworks公司对Matlab软件的研发,给数值分析课程注入了新的活力。
利用Matlab 所含的数值分析计算工具箱,可以进行数值计算方法的程序设计,同时利用图形图像处理功能,可以对数值分析的近似解及误差进行可视化分析,特别是对非线性问题的求解,利用软件计算求解的方法简单多了。
二、进展情况经过多年的不断研究探索,非线性问题的理论性质得到了更多的认证,我们通过对理论的学习,将它融入其他知识体系中比如:动力学,农业学等等。
非线性问题在经过人们不断的探索努力下发现了很多定理定义,比如不动点迭代法,牛顿法,拟牛顿法,以及各种迭代法。
并且对于各种迭代法的收敛性质和收敛速度进行了深入的研究,从而了解了迭代法的构造、几何解释、并对它的收敛性(全部收敛和局部收敛)、收敛阶、误差估计等。
由于迭代法的计算步骤比较多,计算量大且复杂,很多学者对迭代法的加速方法进行了研究。
而对非线性方程组的迭代解法也初步有了研究的进展。
解非线性方程的一个非线性迭代法
一、非线性迭代法
非线性迭代法是一种解决非线性方程的迭代算法,它可以用来解决某
些不是很复杂的非线性方程。
它的原理很简单,根据拟合函数的结果,依次迭代计算,求出每一步迭代值,知道最终结果。
非线性迭代法,又被称为迭代算法,它可以通过多次迭代来求解特定
问题,通常用它来解决非线性方程,特别是特定的不可分的非线性方程。
在这个过程中,首先,给出非线性方程某个变量的初值,进行迭
代计算,每一次迭代都会用计算结果来更新变量的值,而最终的变量
值就是方程的根。
二、迭代步骤
1. 预选择初值:在使用非线性迭代法解决问题时,第一步就是给出一个
初值,这个初值可以通过此时此刻的数据估算,也可以通过判断函数
和它的导数表达式变量的变化范围来选择;
2. 迭代计算:根据计算非线性方程拟合函数,计算下一步迭代值,直到
找到根,或者迭代次数受限;
3. 指定精度:设定比较迭代值的精度,如果到达指定的精度,则可以认为找到了近似的根,完成迭代。
三、优劣
1. 优点:非线性迭代法简单易懂,而且有良好的稳定性,可以用来解决某些比较简单的非线性方程,也可以考虑不同的变量值,来获取更准确的结果;
2. 缺点:虽然非线性迭代法简单易懂,但是计算时间较长,对于一些复杂方程,无法收敛到足够的精度,需要引入其他更加精确的方法。
⾮线性⽅程的迭代解法深圳⼤学实验报告实验课程名称:计算⽅法实验项⽬名称:⾮线性⽅程的迭代解法学院:计算机软件专业:计算机与科学技术报告⼈:学号:班级:04指导教师:实验时间:2010.5实验报告提交时间:2010.5.10教务处制实验报告包含内容⼀、实验⽬的与要求熟悉典型的迭代⽅法:⽜顿法、弦截法、⼆分法,了解各⾃的优缺点和适⽤范围掌握⾮线性⽅程的数值解法的基本思想和原理,深刻认识⾮线性⽅程的数值解法的意义⼆、模型建⽴x 5-3x 3+x-1= 0求该⽅程在区间[-8,8〕上的全部实根在区间[-8,8〕上的全部实根⼆分法:确定区间(a,b )后,取(a,b )的中点x(0)=(a+b)/2,若f(x(0))=0,则x(0)是根,否则,如f(a)*f(x(0))<0,令a1=a,b1=x(0);如f(x(0))*f(b)<0,令a1=x(0),b1=b 在(a1,b1)内⾄少有⼀个根,再取的中点如此进⾏下去Newtown 法:将⾮线性问题逐步线性化⽽形成如下迭代程序:弦截法:将Newton 迭代中的导数,⽤差商代替,有格式 Newtown 下⼭法:将⽜顿的迭代公式修改为),2,1,0()(')(1 =-=+k x f x f x x k k k k λ其中λ是⼀个参数,λ的选取应使)()(1k k x f x f <+ 成⽴当11)(ε<+k x f 或21ε<-+k k x x 时就停⽌迭代,且取x *≈ x k +1,否则再减⼩λ,继续迭代。
三、模型求解:3.1开发环境: Visual C++ 6.0)()()(111--+---=k k k k k k k x f x f x x x f x x3.2程序设计说明:程序设计根据⽜顿法、弦截法、⼆分法和newtown下⼭法思想和原理设计3.3:源代码:⼆分法:#include#include#define P 0.000001float getx(float x){return (x*x*x*x*x-(3*x*x*x)+x-1);};void main (){float y;float str1[20],str2[20];int i=0;str1[0]=-8;str2[0]=-1.3;while (str2[i]-str1[i]>P){y=(str1[i]+str2[i])/2;if(getx(str1[i])*getx(y)>P){str1[i+1]=y;str2[i+1]=str2[i];}else{str1[i+1]=str1[i];str2[i+1]=y;}i++;printf("%f %f\n",str1[i],str2[i]);}y=(str1[i]+str2[i])/2;printf("%f\n",y);}Newtown法:#include#include#define X 0.00000]1float nt(float x){return (x*x*x*x*x-(3*x*x*x)+x-1); }; float nt2(float y){return (5*y*y*y*y-9*y*y+1);};void main(){float c1,c2,x1=-1.3,x,dt;int i=1;while(i<20){c1=nt(x1);c2=nt2(x1);if(c1*c2==0){printf("%f\n",x1);exit(0);}x=x1-c1/c2;if(fabs(x)<=1)dt=fabs(x-x1);elsedt=fabs(x-x1)/fabs(x);if(dt{printf("%f \n",x1);printf("迭代次数=%d\n",i);exit(0);}}printf("%f\n",i);printf("迭代次数=%f\n",i);}弦截法:#include#include#include#define X 0.000001float xj(float x){return (x*x*x*x*x-(3*x*x*x)+x-1); };void main(){float x[20];float c1,c2,dt;int i=1;x[0]=1.5;x[1]=8;while(i<200){c1=xj(x[i]);c2=xj(x[i])-xj(x[i-1]);if(c1*c2==0){printf("%f\n",x[i]);exit(0);}x[i+1]=x[i]-(x[i]-x[i-1])*c1/c2;if(fabs(x[i+1])<=1)dt=fabs(x[i+1]-x[i]);elsedt=fabs(x[i+1]-x[i])/fabs(x[i+1]);printf("%f\n",x[i]);printf("迭代次数=%d\n",i);exit(0);}i++;}printf("%f %d\n",x[i],i);}Newtown下⼭法:#include#include#include#define X 0.000001double ntd(double x){return (x*x*x*x*x-(3*x*x*x)+x-1); }; double ntd2(double y){return (5*y*y*y*y-9*y*y+1);};void main(){double h,c1,c2,xo=8,x,dt;int i=1,j=0;while(i<20){j=0;c1=ntd(xo);c2=ntd2(xo);if(c1*c2==0){printf("%f\n",xo);exit(0);while(1){h=1*pow(0.5,j);x=xo-h*c1/c2;if(fabs(ntd(x))break;j++;}if(fabs(x)<=1)dt=fabs(x-xo);elsedt=fabs(x-xo)/fabs(x);if(dt{printf("%f\n",xo);printf("迭代次数=%d\n",i);exit(0);}xo=x;i++;}}3.4使⽤说明:直接运⾏程序3.5模型的解:⼼得体会:通过对⽐四种不同的迭代法解⾮线性⽅程,认识到各种的⽅法的优点和缺点。
⽜顿迭代法解⾮线性⽅程(组)在辨识⼯作中,常常需要对辨识准则或者判据进⾏求极值,这往往涉及到求⾮线性⽅程(组)的解问题。
⽜顿迭代法是⼀种常⽤⽅法。
下⾯把⾃⼰对⽜顿迭代法的学习和理解做个总结。
1.⼀元⾮线性⽅程的⽜顿迭代公式和原理以⼀元⾮线性⽅程 f(x)=0 为例,对函数 f(x)进⾏Taylor级数展开(只展开⾄线性项)得f(x) = f(x0)+f'(x0)(x-x0)所以⽅程可写成f(x0)+f'(x0)(x-x0) = 0其中x0是给定的已知值,则不难推导出⽅程的解(当然,只是近似解,毕竟Taylor展开过程中只取了线性项)x = x0 - f(x0) / f'(x0)其中x不是真实解,但是相⽐之前的x0更靠近真实解了,因此可以多重复⼏次上述过程,从⽽使得到的解⾮常接近准确值。
所以,对于⼀元⾮线性⽅程,⽜顿拉夫逊迭代公式为:x(k+1) = x(k) - f(x(k)) / f'(x(k))根据Taylor级数的⼏何意义我们可以从⼏何上形象的看⽜顿迭代法的求解f(x)=0的过程。
第⼀次迭代x1 = x0 - f(x0) / f'(x0),其中f(x0) / f'(x0)的⼏何意义很明显,就是x0到x1的线段长度(这可以从直⾓三⾓形的知识得到)。
第⼆次迭代x2 = x1 - f(x1) / f'(x1),其中f(x1) / f'(x1)的⼏何意义很明显,就是x1到x2的线段长度。
同理可以进⾏第三次迭代第四次迭代,可以明显的看出x的取值在不断逼近真实解x*。
可能有⼈问,迭代求得的结果会不会不收敛,也就是x会不会偏离x*。
由于x0是在x*附近区域取值的,因此x0到x1这段曲线应该认为是平滑的没有转折的,因此切线与x轴的交点只会越来越接近真实解x*。
但是如果x0的取值离x*⽐较远的话,那么x0到x1这段曲线上可能有“转折”,这样就可能引起迭代的不收敛。
4.2 非线性方程组的迭代解法 一、 一般概念1.非线性方程组的一般形式⎪⎪⎪⎩⎪⎪⎪⎨⎧===0),,,(0),,,(0),,,(21212211x x x fx x x f x x x f n nn n⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=n x x x x 21令⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=)()()()(21x f x f x f x F n则向量形式如下:0)(=x F2.解非线性方程组的方法 (1)简单迭代法(2)线性化方法(即Newton 法)(3)求函数极小值的方法(即最速下降法) 二、简单迭代法RR nn x F →:)(把方程组:F (x )=0 改写成等价形式,即)19.4)((0)(x G x x F =⇔=适当选取初始向量D x ∈0,利用上述的等价形式,构成迭代公式:)20.4(,2,1,0),()()1( ==+k x G xk k其中G (x )为迭代函数 2.收敛性(1)非局部收敛定理(压缩映象原理)定理4.13 设G:R R nn D −→−⊂在闭区域D D⊂0上满足条件:(1)G 把D0映入自身, (2)G 在D0上是压缩映射,则有下列结论:(1)对任取的D x 0)0(∈,由迭代公式4.20产生的序列{}D x k 0)(∈,且收敛于方程组4.19在D0内的唯一解(2)成立误差估计式xxL x x L kk )0()1()(*1--≤- xx L xxk k kk L)1()()(*1---≤-下面给出简单迭代法(4.20)局部收敛定理定理4.14 设G:R R nn D −→−⊂,)int(*D x ∈是方程组4.19的解,G 在x *处可微。
若()xG *'的谱半径()()1*<'x G ρ,则存在开球{}D x x x D⊂<<-=0,*δδ,使对任意的D x0)0(∈,由迭代法4.20产生的序列{}D x k 0)(∈且收敛于x*。
注:(1)但是对于线性方程组来说,上述定理成为全局收敛性定理,而不是局部收敛性定理。