非线性方程的简单迭代法和Steffensen迭代法(共8页).doc
精选优质文档-倾情为你奉上数值计算方法实验报告实验名称:实验1 非线性方程的简单迭代法和Steffensen迭代法实验题目:分别用简单迭代法和Steffensen迭代法求方程 在 1, 2 内的一个实根. 实验目的:理解并掌握简单迭代法和Steffensen迭代法基础理论:简单迭代法和Steffensen迭代法1) .简单迭代法的原理:将一元非线性方程: 改写成等价方程: ,对此,从某个初始值x0开始,对应式 构成迭代公式 ,这样就可以确定序列 (k=0,1,2)。如果 有极限 ,由式 两边取极限可得 ,可知 为方程的近似解。2) Steffensen迭代法的原理: 通过把改进的Aitken方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。 实验环境:操作系统:Windows 7; 实验平台:Turbo C+ 实验过程:写出算法编写程序调试运行程序计算结果1) 简单迭代法的算法:Input:初始近似值x0,精度要求del,最大迭代次数NOutput:近似解x或失败信息1. n12. While nN do;3. xf(x0);4. if | x-x0|<del then5. | return x;6. end7. nn+1;8. X0x;9. End10. return False;/ 超出最大迭代次数2) Steffensen迭代法的算法:Input : 区间端点a,b;精度要求del;最大迭代次数NOutput:近似解或失败信息1. n12. while n N do;3. yf(x0);4. zf(y);5. xx0;6. If |x-x0|<del then;7. | return x;8. end9. nn+1;10. x0x;11. end12. return False;实验结果 a,用简单迭代法计算的结果 结果约为1. b.用Steffensen迭代法计算的结果: 近似解为:1. 给出程序:1,简单迭代法的程序(C+)#include "stdio.h"#include "math.h"#define phi(x) 0.5*sqrt(10-x*x*x)void main()int n=1,N; float x,x0,del; printf("x0="); scanf("%f",&x0); printf("ndel=:"); scanf("%f",&del); printf("nN="); scanf("%d",&N); printf("nk x(k)"); printf("n %2d %f ",0,x0); while (n<N) 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+)#include "stdio.h"#include "math.h"#define phi(x) 0.5*sqrt(10-x*x*x);void main()int n=1,N; float x,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("nk x(k)"); printf("n %2d %f ",0,x0); while (n<N) 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迭代法加速了收敛速度。专心-专注-专业