实验五 一、实验目的与要求: 1、通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点; 2、比较二者的计算速度和计算精度。 二、实验内容: 通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。 二分法 算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。 (1)令 c=(a+b)/2 (2)如果(c-a)<或,则输出,结束;否则执行(3) (3)如果,则令;否则则令,重复(1),(2),(3)。 牛顿迭代法 算法:给定初值 , 为根的容许误差,为 的容许误差,N 为迭代次数的容许值。 (1)如果 =0 或迭代次数大于 N,则算法失败,结束;否则执行(2)。 (2)计算 = - (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。 x0)(xf)(' xfx1 x0)()('0xxoffxx01 )(1xfx1(4)令 = ,转向(1)。 三、实验题目: 1、用二分法求方程 f(x)=x^3+4*x*x-10 在区间[1,1.5]上的根,要求求出具有 3 位有效数的近似根。 2、 用牛顿法求方程 x^3-3x-1=0 在 x=2 附近的根。 四、程序: 一、二分法 #include
float f(float x) { return x*x*x+4*x*x-10; } void main() { float a,b,c; a=1.0; b=1.5; for(;b-a>=0.01;) { c=(a+b)/2; if(f(a)*f(c)==0) break; x0x1 else if(f(a)*f(c)<0) b=c; else a=c; } printf("方程的近似根为%f\n",c); printf("保留三位有效数字为%0.2f\n",c); } 二、牛顿迭代法 #include #include float f(float x) { return x*x*x-3*x-1; } float g(float x) { return 3*x*x-3; } void main() { float x0,x1,a,b,N; int i; i=0; printf("请输入初值X0,根的容许误差,|f(x)|的容许误差,迭代次数的容许值N。\n"); scanf("%f,%f,%f,%f",&x0,&a,&b,&N); for(;;) { i++; if(g(x0)==0||i>=N) break; else { x1=x0-f(x0)/g(x0); if(fabs(x1-x0)