二分法、牛顿迭代法、普通迭代法

上传人:mg****85 文档编号:36713111 上传时间:2018-04-01 格式:DOC 页数:10 大小:184.50KB
返回 下载 相关 举报
二分法、牛顿迭代法、普通迭代法_第1页
第1页 / 共10页
二分法、牛顿迭代法、普通迭代法_第2页
第2页 / 共10页
二分法、牛顿迭代法、普通迭代法_第3页
第3页 / 共10页
二分法、牛顿迭代法、普通迭代法_第4页
第4页 / 共10页
二分法、牛顿迭代法、普通迭代法_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《二分法、牛顿迭代法、普通迭代法》由会员分享,可在线阅读,更多相关《二分法、牛顿迭代法、普通迭代法(10页珍藏版)》请在金锄头文库上搜索。

1、数值球根试验报告数值计算方法专业班级 软件 08-1 姓 名 熊文成 学 号 08083117 时 间 2010 年 10 月 24 日星期天 一、一、 实验目的实验目的熟悉二分法以及牛顿迭代法求方程近似根的数值方法,掌握各种迭 代方法,自己扩张研究迭代法的效率与收敛性和初始值的关系。二、二、 实验内容实验内容1.已知在上有一个实根,0104)(23xxxf 21,*x,用二分法和牛顿迭代法求该实根,要求精度满足14)2(5) 1 (ff,条件:。3 21*1021 kxx2.条件允许的话,扩展研究各种迭代法的效率,以及迭代的效率和 收敛性与初始值的关系,并通过比较采用两点加速的方法与普通的方

2、法 的效率体验加速迭代的优点。总而言之,本实验中的用到的求根方法有二分法,牛顿迭代法,迭代函数为的迭代方法,以及对函数21 3)10(21)(xx采用两点加速迭代的方法。21 3)10(21)(xx三、三、 主函数流程主函数流程程序是按顺序运行的,流程图如下图所示:两 两 两 两 两 两 两 两 两 两两 两 两 两 两 两两 两 两 两 两 两两 两 两 两 两 两 两两 两 两 两 两 两 两 两两 两 两 两 两 两 两两 两 两 两 两 两 两两 两 两 两 两 两 两两 两两 两两 两 两 两 两 两 两 两 两 两 两 两 两 两两 两 两两 两 两四、四、 源程序源程序#incl

3、ude #include #include /根据 x 的值计算函数值 /函数 f(x)=x*x*x+4*x*x-10 double func(double x) double value; value=x*x*x+4*x*x-10; return value; /根据参数 x 的值计算函数 f(x)的导数值 double divFunc(double x) return 3*x*x+8*x; /二分法计算方程 f(x)=0 在1,2上的跟 /二份迭代结束条件由参数 precision 精度给出 void biSectionMethod(double precision) int k=0; /

4、均分次数 double x1=1.0,x2=2.0; /区间1.0,2.0 double midx; /二分之后的值 printf(“nt k 有根区间 k+1 f(x(k+1) “); do printf(“nt%3d“,k); printf(“ %.3f,%.3f“,x1,x2); midx=(x1+x2)/2; printf(“ %f“,midx); printf(“ %.6f“,func(midx); if (func(midx)=precision); /区间的长度超过 5e-3 就一直迭代 printf(“nt 二分法分区间的次数:%d,所求的根是:%lf“,k-1,x2);/牛顿

5、迭代法 /根据初值值 x0,在区间1.0,2.0上迭代求根 /迭代次数由参数 precision 精度决定 void NewTonMethod(double x0,double precision) int k=0; /迭代次数 double x1,x2=x0; printf(“nt k x(k) f(x(k) |x(k+1)-x(k)|“); do printf(“nt%2d“,k); printf(“ %.6f“,x2); printf(“ %.6f“,func(x2); x1=x2; x2=x2-func(x1)/divFunc(x1); if (x2-x10) printf(“ %.6

6、f“,x2-x1); /输出两次迭代的差值 else printf(“ %.6f“,x1-x2); k+; if (k%3=0) /每次输出 4 个等用户审查 getch(); while (x2-x1precision|x1-x2precision); printf(“nt 牛顿迭代初值:%lf,次数:%d,所求的根是:%lf“,x0,k-1,x2); /迭代函数 g(x)=(sqrt(10-x*x*x)/2; double funcTwo(double x) return (sqrt(10-x*x*x)/2; /普通迭代函数 void ordinaMethod(double x0,doub

7、le precision) int k=0; /迭代次数 double x1,x2=x0; printf(“nt k x(k) f(x(k) |x(k+1)-x(k)|“); do printf(“nt%2d“,k); printf(“ %.6f“,x2); printf(“ %.6f“,func(x2); x1=x2;x2=funcTwo(x1); if (x2-x10) printf(“ %.6f“,x2-x1); /输出两次迭代的差值 else printf(“ %.6f“,x1-x2); k+; if (k%3=0) /每次输出 4 个等用户审查 getch(); while (x2-

8、x1precision|x1-x2precision); printf(“nt 普通迭代初值:%lf,次数:%d,所求的根是:%lf“,x0,k-1,x2); /使用两个跌代值的组合加速跌代 /对迭代函数 f(x)=(sqrt(10-x*x*x)/2 的加速 void twoValue(double x0,double precision) int k=0; /迭代次数 double x1,x2=x0; printf(“nt k x(k) f(x(k) |x(k+1)-x(k)|“); do printf(“nt%2d“,k); printf(“ %.6f“,x2); printf(“ %.6

9、f“,func(x2); x1=x2; x2=(funcTwo(x1)+x1)/2; if (x2-x10) printf(“ %.6f“,x2-x1); /输出两次迭代的差值 else printf(“ %.6f“,x1-x2); k+; if (k%3=0) /每次输出 4 个等用户审查 getch(); while (x2-x1precision|x1-x2precision); printf(“nt 两点加速迭代初值:%lf,次数:%d,根:%lf“,x0,k,x2); void main() double orgin=1.5; /初始值 double precision=5e-6;

10、/精度 char sel=0; /操作符 while(1) printf(“nt 选择:“);printf(“nt1.二分法nt2.迭代法nt“); sel=getch(); printf(“nnt 注:程序停止处按任意键继续“); if (sel=1) printf(“nnt *二分法求解过程*“); biSectionMethod(precision); /测试函数 else printf(“nt 输入迭代的初值:“); scanf(“%lf“, /if (orgin2.0|orgin1.0) /限制迭代初值范围,根据情况决定 /orgin=1.5; /如果输入非法,则按 1.5 计算 p

11、rintf(“nnt *牛顿迭代法求解过程*“); NewTonMethod(orgin,precision); printf(“nt 任何键继续:“); getch(); printf(“nnt *普通迭代 g(x)=(sqrt(10-x*x*x)/2*“); ordinaMethod(orgin,precision); printf(“nt 任何键继续:“); getch(); printf(“nnt *两个值组合加速迭代 x=(g(x)+x) /2*“); twoValue(orgin,precision); printf(“nt 任何键继续:“); getch(); 五、五、 运行结果

12、运行结果1、 选择求根方法2、 选择二分法下面给出二分法的结果:3、 选择迭代法查看结果: 首先显示的是牛顿迭代法的结果:然后是普通迭代法函数是:,结果如下:21 3)10(21)(xx接着可以看到的是用两点加速法对函数的加速:21 3)10(21)(xx下面采用不同的初值查看普通迭代函数的收敛性与效率: 各个结果如下:上图对应的是收敛性:收敛的。上图收敛的,且速度比上面的要快。上图对应的是收敛性:发散的。六、六、 结论与分析结论与分析从以上的程序可以看出一下几点结论 1、 二分法和迭代法均能解出方程的根。 2、 一般地看来,牛顿迭代法的效率较普通迭代法的要高,两点加速迭 代法能加速一般迭代法。 3、 迭代法对初值是敏感的,若初值选择的不合适可能导致迭代的效率很低,甚至是发散的。例如,对于函数形成的迭代,21 3)10(21)(xx当选取初值时,因为是没有意义的,这样就导致了迭代100x)10(的停止或发散。七、七、 收获与感想收获与感想学到了:本次实验在课堂的基础上熟练掌握了二分法和各种迭代法 的具体步骤,感受了牛顿迭代法的方便,深刻体会到了两点加速迭代的 效率,理解了初始值对迭代法的效率和收敛性的影响。 感受:本次实验进度比较慢,在和其他课程不冲突的情况下,我用 课余时间完成了本次实验,以后在学习的各个方面不能在落在后面,尽 量让自己早的完成作业。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号