1 《数值分析》 实 验 报 告 一 **: * * 学号: PB******** 2 实 验 一 一、实验名称 方程求根 二、实验目的与要求: 通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点; 比较二者的计算速度和计算精度。 三、实验内容: 通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。 (一)二分法 算法:给定区间[a,b],并设 f(a)与 f(b)符号相反,取 为根的容许误差, 为值的容许误差。 (1)令 c=(a+b)/2 (2)如果(c-a)< 或)(cf< ,则输出 c,结束;否则执行(3) (3)如果 f(a)f(c)<0,则令)()(,cfbfcb;否则,则令)()(,cfafca,重复(1),(2),(3)。 (二)牛顿迭代法:给定初值0x , 为根的容许误差,为)(xf的容 3 许误差,N 为迭代次数的容许值。 (1)如果)(xf<或迭代次数大于N,则算法结束;否则执行(2)。 (2)计算)('/)(0001xfxfxx (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。 (4)令 = ,转向(1)。 四、实验题目与程序设计 1 、二分法 3.1.1、用二分法求方程 a. f(x )= xxtan1 在区间[0, /2]上的根, c. f(x )=6cos22xe xx 在区间[1,3]上的根。 源程序: 3.1.1.a #include #include void main() { float a,b;double c,y,z; printf("plese input two number a and b:\n"); 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\n",a,b,b-a,c,y); while(fabs(b-a)>0.00001|| fabs(y)>0.00001) { z=1/a-tan(a); if(z*y<0) b=c; else a=c; c=(a+b)/2; y=1/c-tan(c); printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y); } xx01)(1xfx1x0x1 4 } 输入0 1.5707563 ( /2~1.5705563) 得到下表: 由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x =0.8603 是方程的根,结果与实际想要得到的值相当接近。 3.1.1 c #include #include void main() { float a,b;double c,y,z; printf("plese input two number a and b:\n"); scanf("%f%f",&a,&b); c=(a+b)/2; y=pow(2,-c)+exp(c)+2*cos(c)-6; printf("a=%f,b=%f,b-a=%f,...