资源描述:
《数值分析报告-二分法和牛顿法方程求根》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数值分析》实验报告一姓名:周举学号:PB0900104612实验一一、实验名称方程求根二、实验目的与要求:通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;比较二者的计算速度和计算精度。三、实验内容:通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。(一)二分法算法:给定区间[a,b],并设f(a)与f(b)符号相反,取为根的容许误差,为值的容许误差。(1)令c=(a+b)/2(2)如果(c-a)<或<,则输出c,结束;否则执行(3)(3)如果f(a)f(c)<0,则令;否则,则令
2、,重复(1),(2),(3)。(二)牛顿迭代法:给定初值,为根的容许误差,为的容许误差,N为迭代次数的容许值。(1)如果<或迭代次数大于N,则算法结束;否则执行(2)。12(2)计算(3)若<或<,则输出,程序结束;否则执行(4)。(4)令=,转向(1)。四、实验题目与程序设计1、二分法3.1.1、用二分法求方程a.f(x)=在区间[0,/2]上的根,c.f(x)=在区间[1,3]上的根。源程序:3.1.1.a#include#includevoidmain(){floata,b;doublec,y,z;prin
3、tf("pleseinputtwonumberaandb:");scanf("%f%f",&a,&b);c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f",a,b,b-a,c,y);while(fabs(b-a)>0.00001
4、
5、fabs(y)>0.00001){z=1/a-tan(a);if(z*y<0)b=c;elsea=c;c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f",a,b,b
6、-a,c,y);}}12输入01.5707563(/2~1.5705563)得到下表:由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x=0.8603是方程的根,结果与实际想要得到的值相当接近。3.1.1c#include#includevoidmain(){floata,b;doublec,y,z;printf("pleseinputtwonumberaandb:");scanf("%f%f",&a,&b);c=(a+b)/2;y=pow(2,-c)
7、+exp(c)+2*cos(c)-6;printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f",a,b,b-a,c,y);while(fabs(b-a)>0.00001
8、
9、fabs(y)>0.00001){z=pow(2,-a)+exp(a)+2*cos(a)-6;if(z*y<0)b=c;elsea=c;c=(a+b)/2;y=pow(2,-c)+exp(c)+2*cos(c)-6;printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f",a,b,b-a,c,y);12}}输入13,得到如下表:我
10、们认为,x=1.8294是方程的根。3.1.4、用二分法求方程在[5.5,6.5]上的根,将-36改为-36.001,并重复试验。源程序如下:#include#includevoidmain(){floata,b,c,y,z,w;intn=0;printf("pleseinputtwonumberaandb:");scanf("%f%f",&a,&b);c=(a+b)/2;y=pow(c,8)-36*pow(c,7)+546*pow(c,6)-4536*pow(c,5)+22449*pow(c,4)-6728
11、4*pow(c,3)+118124*c*c-109584*c+40320;printf("abb-acf(a)f(c)f(b)");printf("%f,%f,%f,%f,%f,%f,%f",a,b,b-a,c,z,y,w);while(y>0.00001
12、
13、c-a>0.00001){12z=pow(a,8)-36*pow(a,7)+546*pow(a,6)-4536*pow(a,5)+22449*pow(a,4)-67284*pow(a,3)+118124*a*a-109584*a+40320;w=pow(b,8)-36*pow(b,7
14、)+546*pow(b,6)-4536*pow(b,5)+22449*pow(b,4)-67284*pow(b,3)+118124*b*