《数值计算方法》实验报告实验名称:实验1非线性方程的简单迭代法和Steffensen迭代法实验题目:分别用简单迭代法和Steffensen迭代法求方程010423xx在[1,2]内的一个实根.实验目的:理解并掌握简单迭代法和Steffensen迭代法基础理论:简单迭代法和Steffensen迭代法1).简单迭代法的原理:将一元非线性方程:0)(xf改写成等价方程:)(xx,对此,从某个初始值x0开始,对应式)(xx构成迭代公式,...1,0),(1kxxkk,这样就可以确定序列kx(k=0,1,2…)。如果kx有极限*limxxkk,由式,...1,0),(1kxxkk两边取极限可得)(**xx,可知*x为方程0)(xf的近似解。2)Steffensen迭代法的原理:通过把改进的Aitken方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。kkkkkkkkkkkxyzxyxxyzxy2)()(21xxxxxxx)(2)(()()(2实验环境:操作系统:Windows7;实验平台:TurboC++实验过程:写出算法→编写程序→调试运行程序→计算结果1)简单迭代法的算法:Input:初始近似值x0,精度要求del,最大迭代次数NOutput:近似解x或失败信息1.n←12.WhilenNdo;3.x←f(x0);4.if|x-x0|delthen5.|returnx;6.end7.n←n+1;8.X0←x;9.End10.returnFalse;//超出最大迭代次数2)Steffensen迭代法的算法:Input:区间端点a,b;精度要求del;最大迭代次数NOutput:近似解或失败信息1.n←12.whilenNdo;3.y←f(x0);4.z←f(y);5.x←x0-0202xyzxy;6.If|x-x0|delthen;7.|returnx;8.end9.n←n+1;10.x0←x;11.end12.returnFalse;实验结果a,用简单迭代法计算的结果结果约为1.365230b.用Steffensen迭代法计算的结果:近似解为:1.365230给出程序:1,简单迭代法的程序(C++)#includestdio.h#includemath.h#definephi(x)0.5*sqrt(10-x*x*x)voidmain(){intn=1,N;floatx,x0,del;printf(x0=);scanf(%f,&x0);printf(\ndel=:);scanf(%f,&del);printf(\nN=);scanf(%d,&N);printf(\nkx(k));printf(\n%2d%f,0,x0);while(nN){x=phi(x0);if(fabs(x-x0)del){printf(\n\n=近似解=%f\n,x);return;}printf(\n%2d%f,n,x0);n=n+1;x0=x;}printf(\n\n%d次迭代后未达到精度要求.\n,N);}2,Steffensen迭代法的程序(C++)#includestdio.h#includemath.h#definephi(x)0.5*sqrt(10-x*x*x);voidmain(){intn=1,N;floatx,x0,del,y,z,a,b;printf(x0=);scanf(%f,&x0);printf(\ndel=:);scanf(%f,&del);printf(\na=);scanf(%f,&a);printf(\nb=);scanf(%f,&b);printf(\nN=);scanf(%d,&N);printf(\nkx(k));printf(\n%2d%f,0,x0);while(nN){y=phi(x0);z=phi(y);x=x0-(y-x0)*(y-x0)/(z-2*y+x0);if(fabs(x-x0)del){printf(\n\n=近似解=%f\n,x);return;}printf(\n%2d%f,n,x0);n=n+1;x0=x;}printf(\n\n%d次迭代后未达到精度要求.\n,N);}结果分析:1.用简单迭代法和Steffensen迭代法都能求出非线性方程的近似解,且用简单迭代法和Steffensen迭代法求出的近似解基本一样。2.用Steffensen迭代法来求解时迭代的次数少很多,可见Steffensen迭代法加速了收敛速度。