欢迎来到天天文库
浏览记录
ID:15770823
大小:82.50 KB
页数:8页
时间:2018-08-05
《非线性方程求根问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、西华大学计算机系学生上机实践报告计算机学院上机实践报告课程名称:数值计算方法B年级:上机实践成绩:指导教师:姓名:上机实践名称:非线性方程求根问题学号:上机实践日期:上机实践编号上机实践时间:一、目的1.通过本实验,帮助加深对非线性方程求根方法的构造过程的理解;2.能将各种方法编写为程序并上机实现;3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。二、内容与设计思想1.用二分法求方程f(x)=x3-2x-5=0在区间[2,3]内的根。2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭
2、代法求根,观察这三种迭代是否收敛。三、使用环境1.硬件环境微型计算机(Intelx86系列CPU)一台2.软件环境Windows2000/XP操作系统VC++6.0或其它的开发工具。四、核心代码及调试过程1.用二分法求方程f(x)=x3-2x-5=0在区间[2,3]内的根主要代码:voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){printf("methodfailed!");exit(0);}for(i=1;i<=max
3、_B;i++){root=(a+b)/2;yroot=f(root);//取当前含根区间的中点if(yroot==0){a=root;b=root;}elseif(yb*yroot>0)//取含根区间为[a,(a+b)/2]第8页共8页西华大学计算机系学生上机实践报告{b=root;yb=yroot;}Else//取含根区间为[(a+b)/2,b]{a=root;ya=yroot;}if(fabs(b-a)4、tatual_B=%d",root,yroot,actual_B);}结果:2.迭代格式分别为:x=2/19*x*x*x-5/19*x*x+42/19x=sqrt(2/5*x*x*x-19/5*x+42/5);x=(5/2*x*x+19/2*x-21)^(1/3)主要代码:doubleg(doublex){return(pow((2.0/19.0*x*x*x-5/19*x*x+42/19),1.0));/*定义迭代函数*/}voiditerate(doublea,doubleb,doublex0,intmax_D){intk=1;doublex1;while(k<=max_5、D){x1=g(x0);/*迭代计算*/if((x16、7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)max8、_D)printf("methodfailed!");}intmain(){doublea=2.0,b=3.0,x0=(a+b)/2.0;intmax_D=50;iterate(a,b,x0,max_D);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。五、总结1、两道题结果值均是7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(9、x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;第8页共8页西华大学计算机系学生上机实践报告ya=f(a);yb=f(b);if(ya*yb>0){printf("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root
4、tatual_B=%d",root,yroot,actual_B);}结果:2.迭代格式分别为:x=2/19*x*x*x-5/19*x*x+42/19x=sqrt(2/5*x*x*x-19/5*x+42/5);x=(5/2*x*x+19/2*x-21)^(1/3)主要代码:doubleg(doublex){return(pow((2.0/19.0*x*x*x-5/19*x*x+42/19),1.0));/*定义迭代函数*/}voiditerate(doublea,doubleb,doublex0,intmax_D){intk=1;doublex1;while(k<=max_
5、D){x1=g(x0);/*迭代计算*/if((x16、7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)max8、_D)printf("methodfailed!");}intmain(){doublea=2.0,b=3.0,x0=(a+b)/2.0;intmax_D=50;iterate(a,b,x0,max_D);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。五、总结1、两道题结果值均是7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(9、x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;第8页共8页西华大学计算机系学生上机实践报告ya=f(a);yb=f(b);if(ya*yb>0){printf("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root
6、
7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)max
8、_D)printf("methodfailed!");}intmain(){doublea=2.0,b=3.0,x0=(a+b)/2.0;intmax_D=50;iterate(a,b,x0,max_D);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。五、总结1、两道题结果值均是7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(
9、x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;第8页共8页西华大学计算机系学生上机实践报告ya=f(a);yb=f(b);if(ya*yb>0){printf("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root
此文档下载收益归作者所有