欢迎来到天天文库
浏览记录
ID:56718276
大小:54.00 KB
页数:8页
时间:2020-07-05
《非线性方程求根问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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)
3、{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;}elseif(yb*yroot>0)//取含根区间为[a,(a+b)/2]{b=root;yb=yroot;}Else//取含根区间为[(a+b)/2,b]{a=root;ya=yroot;}if(fabs(b-a)4、root=f(root);actual_B=i;printf("root=%10.6lftf(root)=%10.6etatual_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)5、,1.0));/*定义迭代函数*/}voiditerate(doublea,doubleb,doublex0,intmax_D){intk=1;doublex1;while(k<=max_D){x1=g(x0);/*迭代计算*/if((x16、7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)8、t=%10.6lf",x1);break;}x0=x1;k++;/*x0的值被更新,累加迭代次数*/}printf("iterationtimes=%d",k);/*输出实际迭代次数*/if(k>max_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、两道题结果值均是9、7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){print10、f("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root;}elseif(yb*yroot>0){b=root;yb=yroot;}else{a=root;ya=yroot;}if(fabs(b-a)
4、root=f(root);actual_B=i;printf("root=%10.6lftf(root)=%10.6etatual_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)
5、,1.0));/*定义迭代函数*/}voiditerate(doublea,doubleb,doublex0,intmax_D){intk=1;doublex1;while(k<=max_D){x1=g(x0);/*迭代计算*/if((x16、7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)8、t=%10.6lf",x1);break;}x0=x1;k++;/*x0的值被更新,累加迭代次数*/}printf("iterationtimes=%d",k);/*输出实际迭代次数*/if(k>max_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、两道题结果值均是9、7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){print10、f("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root;}elseif(yb*yroot>0){b=root;yb=yroot;}else{a=root;ya=yroot;}if(fabs(b-a)
6、
7、(x1>b)){printf("re_selectaproperinitialvaluex0!");exit(0);}if(fabs(x1-x0)8、t=%10.6lf",x1);break;}x0=x1;k++;/*x0的值被更新,累加迭代次数*/}printf("iterationtimes=%d",k);/*输出实际迭代次数*/if(k>max_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、两道题结果值均是9、7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){print10、f("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root;}elseif(yb*yroot>0){b=root;yb=yroot;}else{a=root;ya=yroot;}if(fabs(b-a)
8、t=%10.6lf",x1);break;}x0=x1;k++;/*x0的值被更新,累加迭代次数*/}printf("iterationtimes=%d",k);/*输出实际迭代次数*/if(k>max_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、两道题结果值均是
9、7为有效数字,精度较高,计算次数较少。2、写程序时应注意数字的类型。六、附录代码:1——1#include#include#include#defineEPS0.000001doublef(doublex){return(x*x*x-2*x-5);}voidbisect(doublea,doubleb,intmax_B){doubleroot,ya,yb,yroot;inti,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){print
10、f("methodfailed!");exit(0);}for(i=1;i<=max_B;i++){root=(a+b)/2;yroot=f(root);if(yroot==0){a=root;b=root;}elseif(yb*yroot>0){b=root;yb=yroot;}else{a=root;ya=yroot;}if(fabs(b-a)
此文档下载收益归作者所有